/// <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."); } }
/// <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()); }
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); } }
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()); }
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()); }
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); }
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); }
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); }
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); } }