コード例 #1
0
        /// <summary>
        /// Create a new Clinical Data File object loading the data from the server
        /// </summary>
        /// <param name="path"></param>
        public ClinicalDataFile(string path)
        {
            // Start a new sas job to retrieve the file
            var id = SasClientObject.NewJob("RunDatasetTransfer", new
            {
                filepath  = path,
                timestamp = DateTime.Now.ToString("yyyyMMddHHmmssffff")
            }); // Timestamp added to avoid caching in the backend

            // Poll the server until we get a response other than 'running'
            JobResponse response;

            do
            {
                Thread.Sleep(500);
                response = SasClientObject.Getjob(id);
            } while (response.Status == SasJobs.Messages.StatusCode.Running);

            // Store the data on success, otherwise throw an exception
            if (response.Status == SasJobs.Messages.StatusCode.Done)
            {
                this.data = response.Data.Tables[0];
            }
            else
            {
                throw new Exception("The system was unable to read the specified xpt file.");
            }
        }
コード例 #2
0
        /// <summary>
        /// Start initialization of a study in the backend and return the job id
        /// </summary>
        /// <param name="submissionId"></param>
        /// <param name="supplementNumber"></param>
        /// <param name="studyCode"></param>
        /// <returns></returns>
        public string Initialize(string submissionId, string supplementNumber, string studyCode)
        {
            string studyFolder = getStudyFolder(submissionId, supplementNumber, studyCode).FullName;
            int    hash        = StudySettings.GetFilesHash(studyFolder);

            // Run the 'RunMappings' stored procedure in the SAS server. This procedure will extract
            // The variables and make the initial mappings for the user to review.
            return(SasClientObject.NewJob("RunStudyMappings", new { StudyFolder = studyFolder, NdaHash = hash }).ToString());
        }
コード例 #3
0
        public DateTime?GenerateReport([FromBody] StudySettings revisedMappings, int reportId)
        {
            // Apply Ex setting for reference computation
            revisedMappings.UseEx = revisedMappings.UseExRef;
            DataSet     data      = revisedMappings.ToReportGenerationDataSet(reportId);
            Report      newReport = revisedMappings.Reports[reportId];
            JobResponse response;
            Guid        id;

            // Clean up old report files first
            DeleteReportFiles(revisedMappings, newReport.Name);

            // Use different SAS Api calls for different types of report
            switch (newReport.Type)
            {
            case 1: id = SasClientObject.NewJob(data, "GenerateReport"); break;

            case 2: id = SasClientObject.NewJob(data, "GenerateForestPlot"); break;

            case 3: id = SasClientObject.NewJob(data, "GenerateNcaAnalysis"); break;

            default: return(null);
            }

            // Wait for job response
            do
            {
                System.Threading.Thread.Sleep(500);
                response = SasClientObject.Getjob(id);
            } while (response.Status == SasJobs.Messages.StatusCode.Running);

            // if done save report and return creation date
            if (response.Status == SasJobs.Messages.StatusCode.Done)
            {
                // Set the creation date
                newReport.CreationDate = DateTime.Now;
                newReport.Generated    = true;

                // If success, save the settings and return the creation date
                DoSaveReport(revisedMappings.NDAName, revisedMappings.SupplementNumber,
                             revisedMappings.StudyCode, revisedMappings.ProfileName, newReport);

                // If nca, generate script
                if (newReport.Type == 3)
                {
                    var scriptBuilder = new NcaBuilder(revisedMappings, newReport);
                    scriptBuilder.Create();
                }

                return(newReport.CreationDate);
            }
            else
            {
                return(null);
            }
        }
コード例 #4
0
        public string Run([FromBody] StudySettings revisedMappings)
        {
            // Apply Ex setting used for reference computation
            revisedMappings.UseEx = revisedMappings.UseExRef;

            DataSet data = revisedMappings.ToMappingDataSet(true);

            // Delete old analysis results
            DeleteAnalysisResults(revisedMappings);

            // Run the analysis code
            return(SasClientObject.NewJob(data, "RunStudyAnalysis").ToString());
        }
コード例 #5
0
        public string Get(string ndaFolderName, string profileName = null)
        {
            var userName = HttpContext.Current.User.Identity.Name ?? "DEFAULT";

            userName = userName.Substring(userName.LastIndexOfAny(new[] { '/', '\\' }) + 1);

            // Run the 'CreatePackage' stored procedure in the SAS server. This procedure will create a
            // zip files with the results of the individual study analyses
            return(SasClientObject.NewJob("CreatePackage", new {
                NDAName = ndaFolderName,
                userName = userName,
                profileName = profileName,
                timestamp = DateTime.Now.ToString("yyyyMMddHHmmssffff"), // Timestamp added to avoid caching in the backend
            }).ToString());
        }
コード例 #6
0
        public IDictionary <string, IEnumerable <string> > GetReference([FromBody] StudySettings revisedMappings)
        {
            // Apply Ex setting for reference computation
            revisedMappings.UseEx = revisedMappings.UseExRef;

            DataSet     data = revisedMappings.ToMappingDataSet();
            JobResponse response;

            var id = SasClientObject.NewJob(data, "ListReferences");

            do
            {
                System.Threading.Thread.Sleep(500);
                response = SasClientObject.Getjob(id);
            } while (response.Status == SasJobs.Messages.StatusCode.Running);

            // return the potential references
            if (response.Status == SasJobs.Messages.StatusCode.Done)
            {
                var resultsTable = response.Data.Tables[0];
                if (resultsTable.Rows.Count > 0)
                {
                    var referenceTable = new Dictionary <string, IEnumerable <string> >();
                    foreach (var row in resultsTable.AsEnumerable())
                    {
                        var cohort = row["CohortDescription"].ToString();

                        if (!referenceTable.ContainsKey(cohort))
                        {
                            referenceTable.Add(cohort, new List <string>());
                        }

                        var reference = row["Reference"].ToString().Trim();
                        if (!String.IsNullOrWhiteSpace(reference))
                        {
                            ((List <string>)referenceTable[cohort])
                            .Add(reference);
                        }
                    }
                    return(referenceTable);
                }
            }

            return(null);
        }
コード例 #7
0
        public int GenerateDemographicSummary([FromBody] StudySettings revisedMappings)
        {
            // Apply Ex setting for reference computation
            revisedMappings.UseEx = revisedMappings.UseExRef;

            DataSet     data = revisedMappings.ToMappingDataSet(true);
            JobResponse response;
            Guid        id;

            id = SasClientObject.NewJob(data, "Reports_DemographicSummary");

            // Wait for job response
            do
            {
                System.Threading.Thread.Sleep(500);
                response = SasClientObject.Getjob(id);
            } while (response.Status == SasJobs.Messages.StatusCode.Running);

            // Return the completion code
            return(response.Status == SasJobs.Messages.StatusCode.Done ? 0 : -1);
        }
コード例 #8
0
        public int?DetermineStudyDesign([FromBody] StudySettings revisedMappings)
        {
            DataSet     data = revisedMappings.ToMappingDataSet();
            JobResponse response;

            var id = SasClientObject.NewJob(data, "DetermineStudyDesign");

            //var id = SasClientObject.NewJob(data, "variabilitytest4");
            do
            {
                System.Threading.Thread.Sleep(500);
                response = SasClientObject.Getjob(id);
            } while (response.Status == SasJobs.Messages.StatusCode.Running);

            // return the potential references
            if (response.Status == SasJobs.Messages.StatusCode.Done)
            {
                var resultsTable = response.Data.Tables[0];
                if (resultsTable.Rows.Count > 0)
                {
                    var studyDesign = resultsTable.AsEnumerable().First()["StudyDesign"].ToString();
                    switch (studyDesign.ToLower())
                    {
                    case "unknown": return(1);

                    case "sequential": return(2);

                    case "parallel": return(3);

                    case "crossover": return(4);

                    default: return(0);
                    }
                }
            }

            return(null);
        }
コード例 #9
0
        public DateTime?VariabilityMetaAnalysis([FromBody] List <StudySettings> revisedMappingsList, int reportId)
        {
            // Apply Ex setting for reference computation
            //revisedMappings.UseEx = revisedMappings.UseExRef;
            Report        newReport0      = revisedMappingsList[0].Reports[reportId];
            StudySettings revisedMappings = revisedMappingsList[0];
            DataSet       data            = new DataSet();

            for (int i = 0; i < revisedMappingsList.Count; i++)
            {
                DataSet data1 = revisedMappingsList[i].ToVariabilityMetaAnalysisGenerationDataSet(reportId);
                if (data1 != null)
                {
                    data.Merge(data1);
                }
            }

            JobResponse response;
            Guid        id;

            //// Clean up old report files first
            //DeleteReportFiles(revisedMappings, newReport.Name);

            // Use different SAS Api calls for different types of report
            id = SasClientObject.NewJob(data, "GenerateMetaVariability");
            //id = SasClientObject.NewJob(data, "variabilitytest4");

            // Wait for job response
            do
            {
                System.Threading.Thread.Sleep(500);
                response = SasClientObject.Getjob(id);
            } while (response.Status == SasJobs.Messages.StatusCode.Running);

            // if done save report and return creation date
            if (response.Status == SasJobs.Messages.StatusCode.Done)
            {
                // Set the creation date


                // If success, save the settings and return the creation date
                for (int i = 0; i < revisedMappingsList.Count; i++)
                {
                    Report newReport = revisedMappingsList[i].Reports[reportId];
                    newReport.CreationDate = DateTime.Now;
                    newReport.Generated    = true;
                    DoSaveVariabilityMetaAnalysisReport(revisedMappingsList[i].NDAName, revisedMappingsList[i].SupplementNumber, revisedMappingsList[i].StudyCode, revisedMappingsList[i].ProfileName, newReport);
                }

                //var scriptBuilder = new MetaBuilder(revisedMappings, newReport0);
                //scriptBuilder.Create();



                return(DateTime.Now);
            }
            else
            {
                return(null);
            }
        }