Merge pull request #5205 from solgenomics/topic/generic_trial_upload
[sgn.git] / js / source / legacy / solGS / download.js
blobc92c4996ef6ace89c01a265d808ce8ddff18b1ae
1 /**
2  * solGS prediction raw, model input downloads
3  * Isaak Y Tecle <iyt2@cornell.edu>
4  *
5  */
7 var solGS = solGS || function solGS() {};
9 solGS.download = {
10   getTrainingPopRawDataFiles: function () {
11     var args = solGS.getTrainingPopArgs();
12     args = JSON.stringify(args);
14     var popDataReq = jQuery.ajax({
15       type: "POST",
16       dataType: "json",
17       data: {
18         arguments: args,
19       },
20       url: "/solgs/download/training/pop/data",
21     });
23     return popDataReq;
24   },
26   getSelectionPopRawDataFiles: function () {
27     var args = solGS.getSelectionPopArgs();
28     args = JSON.stringify(args);
30     var popDataReq = jQuery.ajax({
31       type: "POST",
32       dataType: "json",
33       data: {
34         arguments: args,
35       },
36       url: "/solgs/download/selection/pop/data",
37     });
39     return popDataReq;
40   },
43   getTraitsAcronymFile: function () {
44     var args = solGS.getTrainingPopArgs();
45     args = JSON.stringify(args);
47     var popDataReq = jQuery.ajax({
48       type: "POST",
49       dataType: "json",
50       data: {
51         arguments: args,
52       },
53       url: "/solgs/download/traits/acronym",
54     });
56     return popDataReq;
57   },
59   createTrainingPopDownloadLinks: function (res) {
60     var genoFiles = res.training_pop_raw_geno_file;
61     var phenoFiles = res.training_pop_raw_pheno_file;
62     var genoFileLink = '';
63     var cnt = 1;
64     
65     genoFiles.forEach(function(genoFile) {
66       var genoFileName = genoFile.split("/").pop();
67       var genoTxt =  "Genotype data"; 
68        if (genoFiles.length > 1) { genoTxt =  genoTxt + "-"  + cnt};
69        if ( cnt > 1) { genoFileLink += ' | '};
70    
71       genoFileLink +=
72         '<a href="' + genoFile + '" download=' + genoFileName + '">' + genoTxt + "</a>";
74         cnt++;
75     })
76     
77     var phenoFileLink = '';
78     var cnt = 1;
79     
80     phenoFiles.forEach(function(phenoFile) {
81       var phenoFileName = phenoFile.split("/").pop();
82       var phenoTxt =  "Phenotype data"; 
83       if (phenoFiles.length > 1) { phenoTxt =  phenoTxt + "-"  + cnt};
84       if ( cnt > 1) { phenoFileLink += ' | '};
85     
86       phenoFileLink +=
87         '<a href="' + phenoFile + '" download=' + phenoFileName + '">' + phenoTxt + "</a>";
89         cnt++;
90     })
92     var traitsAcronymLink = this.createTraitsAcronymLinks(res);
94     var downloadLinks =
95       " <strong>Download training population</strong>: " +
96       genoFileLink +
97       " | " +
98       phenoFileLink + " | " + traitsAcronymLink;
100     jQuery("#training_pop_download").prepend(
101       '<p style="margin-top: 20px">' + downloadLinks + "</p>"
102     );
103   },
106   createTraitsAcronymLinks: function (res) {
107     var acronymFile = res.traits_acronym_file;
109     var acronymFileName = acronymFile.split("/").pop();
110     var acronymFileLink =
111       '<a href="' + acronymFile + '" download=' + acronymFileName + '">' + "Traits acronyms" + "</a>";
113     return acronymFileLink;
115   },
117   createSelectionPopDownloadLinks: function (res) {
118     var genoFile = res.selection_pop_filtered_geno_file;
119     var reportFile = res.selection_prediction_report_file;
121     var genoFileName = genoFile.split("/").pop();
122     var genoFileLink =
123     '<a href="' + genoFile + '" download=' + genoFileName + '">' + "Genotype data" + "</a>";
124       
125     var reportFileName = reportFile.split("/").pop();
126     var reportFileLink =
127       '<a href="' + reportFile + '" download=' + reportFileName + '">' + "Analysis log" + "</a>";
129     var downloadLinks =
130       " <strong>Download selection population</strong>: " +
131       genoFileLink + ' | ' + reportFileLink;
133     jQuery("#selection_pop_download").prepend(
134       '<p style="margin-top: 20px">' + downloadLinks + "</p>"
135     );
136   },
138   getModelInputDataFiles: function () {
139     var args = solGS.getModelArgs();
140     args = JSON.stringify(args);
142     var modelInputReq = jQuery.ajax({
143       type: "POST",
144       dataType: "json",
145       data: {
146         arguments: args,
147       },
148       url: "/solgs/download/model/input/data",
149     });
151     return modelInputReq;
152   },
154   createModelInputDownloadLinks: function (res) {
155     var genoFile = res.model_geno_data_file;
156     var phenoFile = res.model_pheno_data_file;
157     var logFile = res.model_analysis_report_file;
159     console.log("geno file: " + genoFile);
160     console.log("pheno file: " + phenoFile);
161     console.log("log file: " + logFile);
163     var genoFileName = genoFile.split("/").pop();
164     var genoFileLink =
165       '<a href="' + genoFile + '" download=' + genoFileName + '">' + "Genotype data" + "</a>";
167     var phenoFileName = phenoFile.split("/").pop();
168     var phenoFileLink =
169       '<a href="' + phenoFile + '" download=' + phenoFileName + '">' + "Phenotype data" + "</a>";
171     var logFileName = logFile.split("/").pop();
172       var logFileLink =
173       '<a href="' + logFile + '" download=' + logFileName + '">' + "Analysis log" + "</a>";
174     var downloadLinks =
175       " <strong>Download model</strong>: " + genoFileLink + " | " + phenoFileLink  + " | " + logFileLink;
177     jQuery("#model_input_data_download").prepend(
178       '<p style="margin-top: 20px">' + downloadLinks + "</p>"
179     );
180   },
182   getValidationFile: function () {
183     var args = solGS.getModelArgs();
184     args = JSON.stringify(args);
186     var valDataReq = jQuery.ajax({
187       type: "POST",
188       dataType: "json",
189       data: {
190         arguments: args,
191       },
192       url: "/solgs/download/model/validation",
193     });
195     return valDataReq;
196   },
198   createValidationDownloadLink: function (res) {
199     var valFileName = res.validation_file.split("/").pop();
200     var valFileLink =
201       '<a href="' +
202       res.validation_file +
203       '" download=' +
204       valFileName +
205       '">' +
206       "Download model accuracy" +
207       "</a>";
209     jQuery("#validation_download").prepend('<p style="margin-top: 20px">' + valFileLink + "</p>");
210   },
212   getMarkerEffectsFile: function () {
213     var args = solGS.getModelArgs();
214     args = JSON.stringify(args);
216     var markerEffectsReq = jQuery.ajax({
217       type: "POST",
218       dataType: "json",
219       data: {
220         arguments: args,
221       },
222       url: "/solgs/download/model/marker/effects",
223     });
225     return markerEffectsReq;
226   },
228   createMarkerEffectsDownloadLink: function (res) {
229     var effectsFileName = res.marker_effects_file.split("/").pop();
230     var effectsFileLink =
231       '<a href="' +
232       res.marker_effects_file +
233       '" download=' +
234       effectsFileName +
235       '">' +
236       "Download marker effects" +
237       "</a>";
239     jQuery("#marker_effects_download").prepend(
240       '<p style="margin-top: 20px">' + effectsFileLink + "</p>"
241     );
242   },
245 jQuery(document).ready(function () {
247   var downloadMsgDiv = "#download_message";
248   solGS.checkPageType().done(function (res) {
249     if (res.page_type.match(/training_population/)) {
250       solGS.download.getTrainingPopRawDataFiles().done(function (res) {
251         solGS.download.createTrainingPopDownloadLinks(res);
252       });
254       solGS.download.getTrainingPopRawDataFiles().fail(function (res) {
255         var errorMsg = "Error occured getting training pop raw data files.";
256         solGS.showMessage(downloadMsgDiv, errorMsg)
257       });
259       solGS.download.getTrainingPopRawDataFiles().fail(function (res) {
260         var errorMsg = "Error occured getting training pop raw data files.";
261         solGS.showMessage(downloadMsgDiv, errorMsg)
262       });
265     } else if (res.page_type.match(/training_model/)) {
266       solGS.download.getModelInputDataFiles().done(function (res) {
267         solGS.download.createModelInputDownloadLinks(res);
268       });
270       solGS.download.getModelInputDataFiles().fail(function (res) {
271         var errorMsg = "Error occured getting model input data files.";
272         solGS.showMessage(downloadMsgDiv, errorMsg)
273       });
275       solGS.download.getValidationFile().done(function (res) {
276         solGS.download.createValidationDownloadLink(res);
277       });
279       solGS.download.getValidationFile().fail(function (res) {
280         var errorMsg = "Error occured getting model validation file.";
281         solGS.showMessage("#validation_download_message", errorMsg);
282       });
284       solGS.download.getMarkerEffectsFile().done(function (res) {
285         solGS.download.createMarkerEffectsDownloadLink(res);
286       });
288       solGS.download.getMarkerEffectsFile().fail(function (res) {
289         var errorMsg = "Error occured getting marker effects file.";
290         solGS.showMessage("#marker_effects_download_message", errorMsg);
292       });
293     } else if (res.page_type.match(/selection_prediction/)) {
294         solGS.download.getSelectionPopRawDataFiles().done(function (res) {
295           solGS.download.createSelectionPopDownloadLinks(res);
296         });
298         solGS.download.getSelectionPopRawDataFiles().fail(function (res) {
299           var errorMsg = "Error occured getting selection population genotype data files.";
300           solGS.showMessage(downloadMsgDiv, errorMsg);
301         });
302       }
303   });
305   solGS.checkPageType().fail(function (res) {
306     var errorMsg = "Error occured checking for page type.";
307     solGS.showMessage(downloadMsgDiv, errorMsg)
309   });