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

Last change on this file since 375 was 375, checked in by keesvb, 9 years ago

added giveDomainFields to TemplateEntity? entities, fixed some problems in BootStrap?

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