root/trunk/grails-app/conf/BootStrap.groovy @ 389

Revision 389, 32.9 KB (checked in by duh, 4 years ago)

- reverted changes of revisions 386, 387 and 388 as they completely broke the repository (you need to get cake now! ;)
- committed development version of modified study capture wizard (works until events)

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