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

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