source: trunk/grails-app/conf/BootStrap.groovy @ 349

Last change on this file since 349 was 349, checked in by duh, 9 years ago
  • added more templates to bootstrap
  • added a 300ms delay to ontology-chooser
  • refactored wizard subject page's "add subjects" dialogue (not working yet!) to incorporate an ontology field instead of a term select... this has to change though...
  • added template elements to tag library (ajaxButtonField and ontologyField)
  • minified ontology-chooser javascript
  • minified wizard.css
  • Property svn:keywords set to Author Rev Date
File size: 29.6 KB
Line 
1import org.codehaus.groovy.grails.commons.GrailsApplication
2import grails.util.GrailsUtil
3import dbnp.studycapturing.*
4
5import dbnp.data.Ontology
6import dbnp.data.Term
7import java.text.SimpleDateFormat
8
9/**
10 * Application Bootstrapper
11 * @Author Jeroen Wesbeek
12 * @Since 20091021
13 *
14 * Revision information:
15 * $Rev: 349 $
16 * $Author: duh $
17 * $Date: 2010-04-19 11:05:48 +0000 (ma, 19 apr 2010) $
18 */
19class BootStrap {
20        def init = {servletContext ->
21                // define timezone
22                System.setProperty('user.timezone', 'CET')
23
24                // we could also check if we are in development by GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT
25                if (Study.count() == 0) {
26                        printf("development bootstrapping....\n\n");
27
28                        // adding the academic
29                        println ".adding academic study template..."
30                        def studyTemplate = new Template(
31                                name: 'Academic study', entity: dbnp.studycapturing.Study)
32                                .addToFields(new TemplateField(name: 'Consortium',type: TemplateFieldType.STRING))
33                                .addToFields(new TemplateField(name: 'Cohort name',type: TemplateFieldType.STRING))
34                                .addToFields(new TemplateField(name: 'Time zone',type: TemplateFieldType.STRING))
35                                .addToFields(new TemplateField(name: 'Responsible scientist',type: TemplateFieldType.STRING))
36                                .addToFields(new TemplateField(name: 'Lab code',type: TemplateFieldType.STRING))
37                                .addToFields(new TemplateField(name: 'Institute',type: TemplateFieldType.STRING))
38                        .with { if (!validate()) { errors.each { println it} } else save()}
39
40                        // Mouse template
41                        println ".adding mouse subject template..."
42                        def mouseTemplate = new Template(
43                                name: 'Mouse', entity: dbnp.studycapturing.Subject)
44                        .addToFields(new TemplateField(
45                                name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM))
46                        //.addToFields(genotypeField)
47                        //.addToFields(genotypeTypeField)
48                        //.addToFields(genderField)
49                        .addToFields(new TemplateField(
50                                name: 'Age (weeks)', type: TemplateFieldType.INTEGER, unit: 'weeks'))
51                        .addToFields(new TemplateField(
52                                name: 'Age type',type: TemplateFieldType.STRINGLIST,
53                                listEntries: [new TemplateFieldListItem(name:'postnatal'),new TemplateFieldListItem(name:'embryonal')]))
54                        .addToFields(new TemplateField(
55                                name: 'Cage',type: TemplateFieldType.STRING))
56                        .addToFields(new TemplateField(
57                                name: '#Mice in cage',type: TemplateFieldType.INTEGER))
58                        .addToFields(new TemplateField(
59                                name: 'Litter size',type: TemplateFieldType.INTEGER))
60                        .addToFields(new TemplateField(
61                                name: 'Weight (g)', type: TemplateFieldType.DOUBLE, unit: 'gram'))
62                        .with { if (!validate()) { errors.each { println it} } else save()}
63
64                        // Human template
65                        println ".adding human subject template..."
66                        def humanTemplate = new Template(
67                                name: 'Human', entity: dbnp.studycapturing.Subject)
68                        //.addToFields(genderField)
69                        //.addToFields(ageField)
70                        .addToFields(new TemplateField(
71                                name: 'DOB',type: TemplateFieldType.DATE))
72                        .addToFields(new TemplateField(
73                                name: 'Height',type: TemplateFieldType.DOUBLE, unit: 'm'))
74                        .addToFields(new TemplateField(
75                                name: 'Weight (kg)',type: TemplateFieldType.DOUBLE, unit: 'kg'))
76                        .addToFields(new TemplateField(
77                                name: 'BMI',type: TemplateFieldType.DOUBLE, unit: 'kg/m2'))
78                        .addToFields(new TemplateField(
79                                name: 'Race',type: TemplateFieldType.STRING))
80                        .addToFields(new TemplateField(
81                                name: 'Waist circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
82                        .addToFields(new TemplateField(
83                                name: 'Hip circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
84                        .addToFields(new TemplateField(
85                                name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
86                        .addToFields(new TemplateField(
87                                name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
88                        .addToFields(new TemplateField(
89                                name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min'))
90                        .addToFields(new TemplateField(
91                                name: 'Run-in-food',type: TemplateFieldType.TEXT))
92                        .with { if (!validate()) { errors.each { println it} } else save()}
93
94
95
96 /*   COMMENTED OUT BECAUSE IT BREAKS EVERYTHING AFTER REFACTORING THE DATAMODEL
97
98                        // ontologies
99                        def speciesOntology = new Ontology(
100                                name: 'NCBI Taxonomy',
101                                shortName: 'Taxon',
102                                url: 'http://www.obofoundry.org/cgi-bin/detail.cgi?id=ncbi_taxonomy'
103                        ).with { if (!validate()) { errors.each { println it} } else save()}
104
105                        def humanBodyOntology = new Ontology(
106                                name: 'Foundational Model of Anatomy',
107                                shortName: 'HumanBody',
108                                url: 'http://bioportal.bioontology.org/ontologies/39966'
109                        ).with { if (!validate()) { errors.each { println it} } else save()}
110
111                        def nciOntology = new Ontology(
112                                name: 'NCI Thesaurus',
113                                shortName: 'NCI',
114                                url: 'http://bioportal.bioontology.org/ontologies/42331'
115                        ).with { if (!validate()) { errors.each { println it} } else save()}
116
117                        // terms
118                        def mouseTerm = new Term(
119                                name: 'Mus musculus',
120                                ontology: speciesOntology,
121                                accession: '10090'
122                        ).with { if (!validate()) { errors.each { println it} } else save()}
123                        def humanTerm = new Term(
124                                name: 'Homo sapiens',
125                                ontology: speciesOntology,
126                                accession: '9606'
127                        ).with { if (!validate()) { errors.each { println it} } else save()}
128                        def arabTerm = new Term(
129                                name: 'Arabidopsis thaliana',
130                                ontology: speciesOntology,
131                                accession: '3702'
132                        ).with { if (!validate()) { errors.each { println it} } else save()}
133                       
134                        def bloodTerm = new Term(
135                                name: 'Portion of blood',
136                                ontology: humanBodyOntology,
137                                accession: '9670'
138                        ).with { if (!validate()) { errors.each { println it} } else save()}
139
140                        def c57bl6Term = new Term(
141                                name: 'C57BL/6 Mouse',
142                                ontology: nciOntology,
143                                accession: 'C14424'
144                        ).with { if (!validate()) { errors.each { println it} } else save()}
145
146                        def madmaxOntology = new Ontology(
147                                name: 'Madmax ontology',
148                                shortName: 'MDMX',
149                                url: 'madmax.bioinformatics.nl'
150                        ).with { if (!validate()) { errors.each { println it} } else save()}
151
152                        def treatmentTerm = new Term(
153                                name: 'ExperimentalProtocol',
154                                ontology: madmaxOntology,
155                                accession: 'P-MDMXGE-264'
156                        ).with { if (!validate()) { errors.each { println it} } else save()}
157
158                        def dietProtocol = new Protocol(
159                                name: 'Diet treatment Protocol NuGO PPS3 leptin module',
160                                reference: treatmentTerm
161                        ).with { if (!validate()) { errors.each { println it} } else save()}
162
163                        def boostProtocol = new Protocol(
164                                name: 'Boost treatment Protocol NuGO PPS3 leptin module',
165                                reference: treatmentTerm
166                        ).with { if (!validate()) { errors.each { println it} } else save()}
167
168                        def fastingProtocol = new Protocol(
169                                name: 'Fasting',
170                                reference: treatmentTerm
171                        ).with { if (!validate()) { errors.each { println it} } else save()}
172
173
174                        // ParameterStringListItems
175                        def oil10= new ParameterStringListItem(
176                                name: '10% fat (palm oil)'
177                        ).with { if (!validate()) { errors.each { println it} } else save()}
178                        def oil45= new ParameterStringListItem(
179                                name: '45% fat (palm oil)'
180                        ).with { if (!validate()) { errors.each { println it} } else save()}
181                        def vehicle= new ParameterStringListItem(
182                                name: 'Vehicle'
183                        ).with { if (!validate()) { errors.each { println it} } else save()}
184                        def leptin= new ParameterStringListItem(
185                                name: 'Leptin'
186                        ).with { if (!validate()) { errors.each { println it} } else save()}
187
188
189                        dietProtocol
190                        .addToParameters(new ProtocolParameter(
191                                name: 'Diet',
192                                type: ProtocolParameterType.STRINGLIST,
193                                listEntries: [oil10,oil45]))
194                        .save()
195
196                        boostProtocol
197                        .addToParameters(new ProtocolParameter(
198                                name: 'Compound',
199                                type: ProtocolParameterType.STRINGLIST,
200                                listEntries: [vehicle,leptin]))
201                        .save()
202
203                        fastingProtocol
204                        .addToParameters(new ProtocolParameter(
205                                name: 'Fasting period',
206                                type: ProtocolParameterType.STRING))
207                        .save()
208
209
210                        // sampling event protocols
211
212                        def liverSamplingProtocol = new Protocol(
213                                name: 'Liver sampling'
214                        ).with { if (!validate()) { errors.each { println it} } else save()}
215
216                        liverSamplingProtocol
217                        .addToParameters(new ProtocolParameter(
218                                name: 'Sample weight',
219                                unit: 'mg',
220                                type: ProtocolParameterType.FLOAT))
221                        .save()
222
223                        def bloodSamplingProtocol = new Protocol(
224                                name: 'Blood sampling'
225                        ).with { if (!validate()) { errors.each { println it} } else save()}
226
227                        bloodSamplingProtocol
228                        .addToParameters(new ProtocolParameter(
229                                name: 'Sample volume',
230                                unit: 'ml',
231                                type: ProtocolParameterType.FLOAT))
232                        .save()
233 */
234                        // create system user
235
236                        /*def systemUser = userService.createUser(InstanceGenerator.user(
237                                username: 'system',
238                                pass: 'system',
239                                passConfirm: 'system',
240                                enabled: true
241                        ))*/
242
243 /*
244                        def genderField = new TemplateField(
245                                name: 'Gender',type: TemplateFieldType.STRINGLIST,
246                                listEntries: [new TemplateFieldListItem(name:'Male'),new TemplateFieldListItem(name: 'Female')])
247                        .with { if (!validate()) { errors.each { println it} } else save()}
248
249                        def ageField = new TemplateField(
250                                name: 'Age (years)',type: TemplateFieldType.INTEGER,unit: 'years')
251                        .with { if (!validate()) { errors.each { println it} } else save()}
252
253                        def genotypeField = new TemplateField(
254                                name: 'Genotype', type: TemplateFieldType.ONTOLOGYTERM)
255                        .with { if (!validate()) { errors.each { println it} } else save()}
256
257                        def genotypeTypeField = new TemplateField(
258                                name: 'Genotype type',type: TemplateFieldType.STRINGLIST,
259                                listEntries: [new TemplateFieldListItem(name:'transgenic'),
260                                        new TemplateFieldListItem(name:'knock-out'),
261                                        new TemplateFieldListItem(name:'knock-in')])
262                        .with { if (!validate()) { errors.each { println it} } else save()}
263
264
265                        // Nutritional study template
266
267                        println "Adding academic study template..."
268                        def studyTemplate = new Template(
269                                name: 'Academic study', entity: dbnp.studycapturing.Study)
270                                .addToFields(new TemplateField(name: 'Consortium',type: TemplateFieldType.STRING))
271                                .addToFields(new TemplateField(name: 'Cohort name',type: TemplateFieldType.STRING))
272                                .addToFields(new TemplateField(name: 'Time zone',type: TemplateFieldType.STRING))
273                                .addToFields(new TemplateField(name: 'Responsible scientist',type: TemplateFieldType.STRING))
274                                .addToFields(new TemplateField(name: 'Lab code',type: TemplateFieldType.STRING))
275                                .addToFields(new TemplateField(name: 'Institute',type: TemplateFieldType.STRING))
276                        .with { if (!validate()) { errors.each { println it} } else save()}
277
278                        // Mouse template
279                        def mouseTemplate = new Template(
280                                name: 'Mouse', entity: dbnp.studycapturing.Subject)
281                        .addToFields(new TemplateField(
282                                name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM))
283                        .addToFields(genotypeField)
284                        .addToFields(genotypeTypeField)
285                        .addToFields(genderField)
286                        .addToFields(new TemplateField(
287                                name: 'Age (weeks)', type: TemplateFieldType.INTEGER, unit: 'weeks'))
288                        .addToFields(new TemplateField(
289                                name: 'Age type',type: TemplateFieldType.STRINGLIST,
290                                listEntries: [new TemplateFieldListItem(name:'postnatal'),new TemplateFieldListItem(name:'embryonal')]))
291                        .addToFields(new TemplateField(
292                                name: 'Cage',type: TemplateFieldType.STRING))
293                        .addToFields(new TemplateField(
294                                name: '#Mice in cage',type: TemplateFieldType.INTEGER))
295                        .addToFields(new TemplateField(
296                                name: 'Litter size',type: TemplateFieldType.INTEGER))
297                        .addToFields(new TemplateField(
298                                name: 'Weight (g)', type: TemplateFieldType.DOUBLE, unit: 'gram'))
299                        .with { if (!validate()) { errors.each { println it} } else save()}
300
301                        // Human template
302                        def humanTemplate = new Template(
303                                name: 'Human', entity: dbnp.studycapturing.Subject)
304                        .addToFields(genderField)
305                        .addToFields(ageField)
306                        .addToFields(new TemplateField(
307                                name: 'DOB',type: TemplateFieldType.DATE))
308                        .addToFields(new TemplateField(
309                                name: 'Height',type: TemplateFieldType.DOUBLE, unit: 'm'))
310                        .addToFields(new TemplateField(
311                                name: 'Weight (kg)',type: TemplateFieldType.DOUBLE, unit: 'kg'))
312                        .addToFields(new TemplateField(
313                                name: 'BMI',type: TemplateFieldType.DOUBLE, unit: 'kg/m2'))
314                        .addToFields(new TemplateField(
315                                name: 'Race',type: TemplateFieldType.STRING))
316                        .addToFields(new TemplateField(
317                                name: 'Waist circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
318                        .addToFields(new TemplateField(
319                                name: 'Hip circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
320                        .addToFields(new TemplateField(
321                                name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
322                        .addToFields(new TemplateField(
323                                name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
324                        .addToFields(new TemplateField(
325                                name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min'))
326                        .addToFields(new TemplateField(
327                                name: 'Run-in-food',type: TemplateFieldType.TEXT))
328                        .with { if (!validate()) { errors.each { println it} } else save()}
329
330
331                        def sampleDescriptionField = new TemplateField(
332                                name: 'Description',type: TemplateFieldType.TEXT)
333                        .with { if (!validate()) { errors.each { println it} } else save()}
334                        def sampleTypeField = new TemplateField(
335                                name: 'SampleType',type: TemplateFieldType.STRING)
336                        .with { if (!validate()) { errors.each { println it} } else save()}
337                        def sampleProtocolField = new TemplateField(
338                                name: 'SampleProtocol',type: TemplateFieldType.STRING)
339                        .with { if (!validate()) { errors.each { println it} } else save()}
340                        def sampleVialTextField = new TemplateField(
341                                name: 'Text on vial',type: TemplateFieldType.STRING)
342                        .with { if (!validate()) { errors.each { println it} } else save()}
343
344                        // Human sample template
345                        def humanSampleTemplate = new Template(
346                                name: 'Human tissue sample', entity: dbnp.studycapturing.Sample)
347                        .addToFields(sampleDescriptionField)
348                        .addToFields(sampleTypeField)
349                        .addToFields(sampleProtocolField)
350                        .addToFields(sampleVialTextField)
351                        .with { if (!validate()) { errors.each { println it} } else save()}
352
353                        //Plant template
354                        def plantTemplate = new Template(
355                                name: 'Plant template', entity: dbnp.studycapturing.Subject)
356                        .addToFields(new TemplateField(
357                                name: 'Variety', type: TemplateFieldType.STRING))
358                        .addToFields(new TemplateField(
359                                name: 'Ecotype', type: TemplateFieldType.STRING))
360                        .addToFields(genotypeField)
361                        .addToFields(genotypeTypeField)
362                        .addToFields(new TemplateField(
363                                name: 'Growth location', type: TemplateFieldType.STRINGLIST,
364                                listEntries: [new TemplateFieldListItem(name:'Greenhouse'),new TemplateFieldListItem(name: 'Field')]))
365                        .addToFields(new TemplateField(
366                                name: 'Room', type: TemplateFieldType.STRING,
367                                comment: 'Chamber number in case of Greenhouse'))
368                        .addToFields(new TemplateField(
369                                name: 'Position X', type: TemplateFieldType.FLOAT))
370                        .addToFields(new TemplateField(
371                                name: 'Position Y', type: TemplateFieldType.FLOAT))
372                        .addToFields(new TemplateField(
373                                name: 'Block', type: TemplateFieldType.STRING))
374                        .addToFields(new TemplateField(
375                                name: 'Temperature at day', type: TemplateFieldType.FLOAT))
376                        .addToFields(new TemplateField(
377                                name: 'Temperature at night', type: TemplateFieldType.FLOAT))
378                        .addToFields(new TemplateField(
379                                name: 'Photo period', type: TemplateFieldType.STRING))
380                        .addToFields(new TemplateField(
381                                name: 'Light intensity', type: TemplateFieldType.STRING))
382                        .addToFields(new TemplateField(
383                                name: 'Start date', type: TemplateFieldType.DATE))
384                        .addToFields(new TemplateField(
385                                name: 'Harvest date', type: TemplateFieldType.DATE))
386                        .addToFields(new TemplateField(
387                                name: 'Growth type', type: TemplateFieldType.STRINGLIST,
388                                listEntries: [new TemplateFieldListItem(name:'Standard'),new TemplateFieldListItem(name: 'Experimental')]))
389                        .addToFields(new TemplateField(
390                                name: 'Growth protocol', type: TemplateFieldType.TEXT))
391                        .addToFields(new TemplateField(
392                                name: 'Harvest delay', type: TemplateFieldType.TEXT))
393                        .with { if (!validate()) { errors.each { println it} } else save()}
394
395                        def plantSampleTemplate = new Template(
396                                name: 'Plant sample', entity: dbnp.studycapturing.Sample)
397                        .addToFields(sampleDescriptionField)
398                        .addToFields(sampleTypeField)
399                        .addToFields(sampleProtocolField)
400                        .addToFields(sampleVialTextField)
401                        .with { if (!validate()) { errors.each { println it} } else save()}
402
403
404                        //events
405                        def eventDiet = new EventDescription(
406                                name: 'Diet treatment',
407                                description: 'Diet treatment (fat percentage)',
408                                classification: treatmentTerm,
409                                protocol: dietProtocol,
410                                isSamplingEvent: false
411                        ).with { if (!validate()) { errors.each { println it} } else save()}
412
413                        def eventBoost = new EventDescription(
414                                name: 'Boost treatment',
415                                description: 'Boost treatment (leptin or vehicle)',
416                                classification: treatmentTerm,
417                                protocol: boostProtocol,
418                                isSamplingEvent: false
419                        ).with { if (!validate()) { errors.each { println it} } else save()}
420
421                        def samplingEvent = new EventDescription(
422                                name: 'Liver extraction',
423                                description: 'Liver sampling for transcriptomics arrays',
424                                protocol: liverSamplingProtocol,
425                                isSamplingEvent: true
426                        ).with { if (!validate()) { errors.each { println it} } else save()}
427
428                        def bloodSamplingEventDescription = new EventDescription(
429                                name: 'Blood extraction',
430                                description: 'Blood extraction targeted at lipid assays',
431                                protocol: bloodSamplingProtocol,
432                                isSamplingEvent: true
433                        ).with { if (!validate()) { errors.each { println it} } else save()}
434
435
436            def fastingTreatment = new EventDescription(
437                                name: 'Fasting treatment',
438                                description: 'Fasting Protocol NuGO PPSH',
439                                protocol: fastingProtocol,
440                                isSamplingEvent: false
441                        ).with { if (!validate()) { errors.each { println it} } else save()}
442
443                        println('Adding PPS3 study...')
444
445                        // studies
446                        def exampleStudy = new Study(
447                                template: studyTemplate,
448                                title:"NuGO PPS3 mouse study leptin module",
449                                code:"PPS3_leptin_module",
450                                researchQuestion:"Leptin etc.",
451                                description:"C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet. After 1 week 10 mice that received a low fat diet were given an IP leptin challenge and 10 mice of the low-fat group received placebo injections. The same procedure was performed with mice that were fed the high-fat diet. After 4 weeks the procedure was repeated. In total 80 mice were culled.",
452                                ecCode:"2007117.c",
453                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
454                        ).with { if (!validate()) { errors.each { println it} } else save()}
455
456                        def exampleHumanStudy = new Study(
457                                template: humanTemplate,
458                                title:"Human example template",
459                                code:"Human example code",
460                                researchQuestion:"Leptin etc.",
461                                description:"C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet. After 1 week 10 mice that received a low fat diet were given an IP leptin challenge and 10 mice of the low-fat group received placebo injections. The same procedure was performed with mice that were fed the high-fat diet. After 4 weeks the procedure was repeated. In total 80 mice were culled.",
462                                ecCode:"2007117.c",
463                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
464                        ).with { if (!validate()) { errors.each { println it} } else save()}
465
466                        def evLF = new Event(
467                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
468                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
469                                eventDescription: eventDiet,
470                                parameterStringValues: ['Diet':'10% fat (palm oil)']
471                        ).with { if (!validate()) { errors.each { println it} } else save()}
472
473                        def evHF = new Event(
474                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
475                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
476                                eventDescription: eventDiet,
477                                parameterStringValues: ['Diet':'45% fat (palm oil)']
478                        ).with { if (!validate()) { errors.each { println it} } else save()}
479
480                        def evBV = new Event(
481                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
482                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
483                                eventDescription: eventBoost,
484                                parameterStringValues: ['Compound':'Vehicle']
485                        ).with { if (!validate()) { errors.each { println it} } else save()}
486
487                        def evBL = new Event(
488                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
489                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
490                                eventDescription: eventBoost,
491                                parameterStringValues: ['Compound':'Leptin']
492                        ).with { if (!validate()) { errors.each { println it} } else save()}
493
494                        def evLF4 = new Event(
495                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
496                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
497                                eventDescription: eventDiet,
498                                parameterStringValues: ['Diet':'10% fat (palm oil)']
499                        ).with { if (!validate()) { errors.each { println it} } else save()}
500
501                        def evHF4 = new Event(
502                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
503                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
504                                eventDescription: eventDiet,
505                                parameterStringValues: ['Diet':'45% fat (palm oil)']
506                        ).with { if (!validate()) { errors.each { println it} } else save()}
507
508                        def evBV4 = new Event(
509                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
510                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
511                                eventDescription: eventBoost,
512                                parameterStringValues: ['Compound':'Vehicle']
513                        ).with { if (!validate()) { errors.each { println it} } else save()}
514
515                        def evBL4 = new Event(
516                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
517                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
518                                eventDescription: eventBoost,
519                                parameterStringValues: ['Compound':'Leptin']
520                        ).with { if (!validate()) { errors.each { println it} } else save()}
521
522                        def evS = new SamplingEvent(
523                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
524                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
525                                        eventDescription: samplingEvent,
526                                        parameterFloatValues: ['Sample weight':5F]
527                        ).with { if (!validate()) { errors.each { println it} } else save()}
528
529                        def evS4 = new SamplingEvent(
530                                        startTime: Date.parse('yyyy-MM-dd','2008-02-04'),
531                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
532                                        eventDescription: samplingEvent,
533                                        parameterFloatValues: ['Sample weight':5F]
534                        ).with { if (!validate()) { errors.each { println it} } else save()}
535
536                        // Add events to study
537                        exampleStudy
538                        .addToEvents(evLF)
539                        .addToEvents(evHF)
540                        .addToEvents(evBV)
541                        .addToEvents(evBL)
542                        .addToEvents(evLF4)
543                        .addToEvents(evHF4)
544                        .addToEvents(evBV4)
545                        .addToEvents(evBL4)
546                        .addToSamplingEvents(evS)
547                        .addToSamplingEvents(evS4)
548                        .save()
549
550                        def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
551                        .addToEvents(evLF)
552                        .addToEvents(evBV)
553                        .with { if (!validate()) { errors.each { println it} } else save()}
554
555                        def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
556                        .addToEvents(evLF)
557                        .addToEvents(evBL)
558                        .with { if (!validate()) { errors.each { println it} } else save()}
559
560                        def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
561                        .addToEvents(evHF)
562                        .addToEvents(evBV)
563                        .with { if (!validate()) { errors.each { println it} } else save()}
564
565                        def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
566                        .addToEvents(evHF)
567                        .addToEvents(evBL)
568                        .with { if (!validate()) { errors.each { println it} } else save()}
569
570                        def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
571                        .addToEvents(evLF4)
572                        .addToEvents(evBV4)
573                        .with { if (!validate()) { errors.each { println it} } else save()}
574
575                        def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
576                        .addToEvents(evLF4)
577                        .addToEvents(evBL4)
578                        .with { if (!validate()) { errors.each { println it} } else save()}
579
580                        def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
581                        .addToEvents(evHF4)
582                        .addToEvents(evBV4)
583                        .with { if (!validate()) { errors.each { println it} } else save()}
584
585                        def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
586                        .addToEvents(evHF4)
587                        .addToEvents(evBL4)
588                        .with { if (!validate()) { errors.each { println it} } else save()}
589
590            // Add subjects and samples and compose EventGroups
591
592                        def x=1
593                        80.times {
594                                def currentSubject = new Subject(
595                                        name: "A" + x++,
596                                        species: mouseTerm,
597                                        template: mouseTemplate,
598                                )
599                                .setFieldValue("Gender", "Male")
600                                .setFieldValue("Genotype", c57bl6Term)
601                                .setFieldValue("Age (weeks)", 17)
602                                .setFieldValue("Cage", "" + (int)(x/2))
603                                .with { if (!validate()) { errors.each { println it} } else save()}
604
605                                exampleStudy.addToSubjects(currentSubject)
606                                .with { if (!validate()) { errors.each { println it} } else save()}
607
608                                // Add subject to appropriate EventGroup
609                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
610                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
611                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
612                                else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
613                                else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
614                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
615                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
616                                else             { LFBV1.addToSubjects(currentSubject).save() }
617
618                        }
619
620                        // Add EventGroups to study
621                        exampleStudy
622                        .addToEventGroups(LFBV1)
623                        .addToEventGroups(LFBL1)
624                        .addToEventGroups(HFBV1)
625                        .addToEventGroups(HFBL1)
626                        .addToEventGroups(LFBV4)
627                        .addToEventGroups(LFBL4)
628                        .addToEventGroups(HFBV4)
629                        .addToEventGroups(HFBL4)
630                        .save()
631
632                        println 'Adding PPSH study'
633
634                        def humanStudy = new Study(
635                                template: studyTemplate,
636                                title:"NuGO PPS human study",
637                                code:"PPSH",
638                                researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
639                                description:"Human study",
640                                ecCode:"unknown",
641                                startDate: Date.parse('yyyy-MM-dd','2009-01-01')
642                        ).with { if (!validate()) { errors.each { println it} } else save()}
643
644                        def fastingEvent = new Event(
645                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
646                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
647                                        eventDescription: fastingTreatment,
648                                        parameterStringValues: ['Fasting period':'8h']);
649
650                        def bloodSamplingEvent = new SamplingEvent(
651                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
652                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
653                                        eventDescription: bloodSamplingEventDescription,
654                                        parameterFloatValues: ['Sample volume':4.5F]);
655
656                        def rootGroup = new EventGroup(name: 'Root group');
657                        rootGroup.addToEvents fastingEvent
658                        rootGroup.addToEvents bloodSamplingEvent
659                        rootGroup.save()
660
661            def y = 1
662            11.times {
663              def currentSubject = new Subject(
664                      name: "" + y++,
665                      species: humanTerm,
666                      template: humanTemplate).setFieldValue("Gender", (boolean) (x / 2) ? "Male" : "Female").setFieldValue("DOB", new java.text.SimpleDateFormat("dd-mm-yy").parse("01-02-19" + (10 + (int) (Math.random() * 80)))).setFieldValue("Age (years)", 30).setFieldValue("Height", Math.random() * 2F).setFieldValue("Weight (kg)", Math.random() * 150F).setFieldValue("BMI", 20 + Math.random() * 10F).with { if (!validate()) { errors.each { println it} } else save()}
667
668              rootGroup.addToSubjects currentSubject
669              rootGroup.save()
670
671              def currentSample = new Sample(
672                      name: currentSubject.name + '_B',
673                      material: bloodTerm,
674                      parentSubject: currentSubject,
675                      parentEvent: bloodSamplingEvent);
676
677
678              humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
679          }
680
681          humanStudy.addToEvents(fastingEvent)
682          humanStudy.addToSamplingEvents(bloodSamplingEvent)
683          humanStudy.addToEventGroups rootGroup
684          humanStudy.save()
685
686                        // Add clinical data
687
688                        def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
689                                name: 'Lipid profile',
690                                approved: true
691                        ).with { if (!validate()) { errors.each { println it} } else save()}
692
693                        def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
694                                name: 'LDL',
695                                unit: 'mg/dL',
696                                type: dbnp.data.FeatureType.QUANTITATIVE,
697                                referenceValues: '100 mg/dL',
698                                detectableLimit: 250,
699                                isDrug: false, isIntake: true, inSerum: true
700                        ).with { if (!validate()) { errors.each { println it} } else save()}
701
702                        def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
703                                name: 'HDL',
704                                unit: 'mg/dL',
705                                type: dbnp.data.FeatureType.QUANTITATIVE,
706                                referenceValues: '50 mg/dL',
707                                detectableLimit: 100,
708                                isDrug: false, isIntake: true, inSerum: true
709                        ).with { if (!validate()) { errors.each { println it} } else save()}
710
711                        lipidAssay.addToMeasurements ldlMeasurement
712                        lipidAssay.addToMeasurements hdlMeasurement
713
714                        def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
715                                assay: lipidAssay
716                        ).with { if (!validate()) { errors.each { println it} } else save()}
717
718                        humanStudy.samples*.each {
719                                new dbnp.clinicaldata.ClinicalFloatData(
720                                        assay: lipidAssayInstance,
721                                        measurement: ldlMeasurement,
722                                        sample: it.name,
723                                        value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
724                                ).with { if (!validate()) { errors.each { println it} } else save()}
725
726                                new dbnp.clinicaldata.ClinicalFloatData(
727                                        assay: lipidAssayInstance,
728                                        measurement: hdlMeasurement,
729                                        sample: it.name,
730                                        value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
731                                ).with { if (!validate()) { errors.each { println it} } else save()}
732                        }
733
734                        // Add assay to study capture module
735
736                        def clinicalModule = new AssayModule(
737                                name: 'Clinical data',
738                                type: AssayType.CLINICAL_DATA,
739                                platform: 'clinical measurements',
740                                url: 'http://localhost:8080/gscf'
741                        ).with { if (!validate()) { errors.each { println it} } else save()}
742
743                        def lipidAssayRef = new Assay(
744                                name: 'Lipid profiling',
745                                module: clinicalModule,
746                                externalAssayId: lipidAssayInstance.id
747                        ).with { if (!validate()) { errors.each { println it} } else save()}
748
749                        humanStudy.samples*.each {
750                                lipidAssayRef.addToSamples(it)
751                        }
752                        lipidAssayRef.save()
753
754                        humanStudy.addToAssays(lipidAssayRef);
755                        humanStudy.save()
756*/
757                }
758        }
759
760        def destroy = {
761        }
762} 
Note: See TracBrowser for help on using the repository browser.