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

Last change on this file since 370 was 370, checked in by roberth, 13 years ago

Updated studies list to handle the new data model.
Updated the bootstrap to contain some studies with attached events and persons in order to test the updated studies list
Added fieldExists method to TemplateEntity? to check whether a given field exists or not

  • Property svn:keywords set to Author Rev Date
File size: 31.2 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: 370 $
13 * $Author: roberth $
14 * $Date: 2010-04-22 07:31:50 +0000 (do, 22 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:'transgenic'),
251                                        new TemplateFieldListItem(name:'knock-out'),
252                                        new TemplateFieldListItem(name:'knock-in')])
253                        .with { if (!validate()) { errors.each { println it} } else save()}
254
255
256                        // Nutritional study template
257
258                        println ".adding academic study template..."
259                        def studyTemplate = new Template(
260                                name: 'Academic study', entity: dbnp.studycapturing.Study)
261                                //.addToFields(new TemplateField(name: 'Description',type: TemplateFieldType.TEXT))
262                                .addToFields(new TemplateField(name: 'Study code',type: TemplateFieldType.STRING))
263                                .addToFields(new TemplateField(name: 'Objectives',type: TemplateFieldType.TEXT))
264                                .addToFields(new TemplateField(name: 'Consortium',type: TemplateFieldType.STRING))
265                                .addToFields(new TemplateField(name: 'Cohort name',type: TemplateFieldType.STRING))
266                                .addToFields(new TemplateField(name: 'Time zone',type: TemplateFieldType.STRING))
267                                .addToFields(new TemplateField(name: 'Responsible scientist',type: TemplateFieldType.STRING))
268                                .addToFields(new TemplateField(name: 'Lab id',type: TemplateFieldType.STRING))
269                                .addToFields(new TemplateField(name: 'Institute',type: TemplateFieldType.STRING))
270                        .with { if (!validate()) { errors.each { println it} } else save()}
271
272                        // Mouse template
273                        println ".adding mouse subject template..."
274                        def mouseTemplate = new Template(
275                                name: 'Mouse', entity: dbnp.studycapturing.Subject)
276                        .addToFields(new TemplateField(
277                                name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM))
278                        .addToFields(genotypeField)
279                        .addToFields(genotypeTypeField)
280                        .addToFields(genderField)
281                        .addToFields(new TemplateField(
282                                name: 'Age (weeks)', type: TemplateFieldType.INTEGER, unit: 'weeks'))
283                        .addToFields(new TemplateField(
284                                name: 'Age type',type: TemplateFieldType.STRINGLIST,
285                                listEntries: [new TemplateFieldListItem(name:'postnatal'),new TemplateFieldListItem(name:'embryonal')]))
286                        .addToFields(new TemplateField(
287                                name: 'Cage',type: TemplateFieldType.STRING))
288                        .addToFields(new TemplateField(
289                                name: '#Mice in cage',type: TemplateFieldType.INTEGER))
290                        .addToFields(new TemplateField(
291                                name: 'Litter size',type: TemplateFieldType.INTEGER))
292                        .addToFields(new TemplateField(
293                                name: 'Weight (g)', type: TemplateFieldType.DOUBLE, unit: 'gram'))
294                        .with { if (!validate()) { errors.each { println it} } else save()}
295
296                        // Human template
297                        println ".adding human subject template..."
298                        def humanTemplate = new Template(
299                                name: 'Human', entity: dbnp.studycapturing.Subject)
300                        .addToFields(genderField)
301                        .addToFields(ageField)
302                        .addToFields(new TemplateField(
303                                name: 'DOB',type: TemplateFieldType.DATE))
304                        .addToFields(new TemplateField(
305                                name: 'Height',type: TemplateFieldType.DOUBLE, unit: 'm'))
306                        .addToFields(new TemplateField(
307                                name: 'Weight (kg)',type: TemplateFieldType.DOUBLE, unit: 'kg'))
308                        .addToFields(new TemplateField(
309                                name: 'BMI',type: TemplateFieldType.DOUBLE, unit: 'kg/m2'))
310                        .addToFields(new TemplateField(
311                                name: 'Race',type: TemplateFieldType.STRING))
312                        .addToFields(new TemplateField(
313                                name: 'Waist circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
314                        .addToFields(new TemplateField(
315                                name: 'Hip circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
316                        .addToFields(new TemplateField(
317                                name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
318                        .addToFields(new TemplateField(
319                                name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
320                        .addToFields(new TemplateField(
321                                name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min'))
322                        .addToFields(new TemplateField(
323                                name: 'Run-in-food',type: TemplateFieldType.TEXT))
324                        .with { if (!validate()) { errors.each { println it} } else save()}
325
326
327                        def sampleDescriptionField = new TemplateField(
328                                name: 'Description',type: TemplateFieldType.TEXT)
329                        .with { if (!validate()) { errors.each { println it} } else save()}
330                        def sampleTypeField = new TemplateField(
331                                name: 'SampleType',type: TemplateFieldType.STRING)
332                        .with { if (!validate()) { errors.each { println it} } else save()}
333                        def sampleProtocolField = new TemplateField(
334                                name: 'SampleProtocol',type: TemplateFieldType.STRING)
335                        .with { if (!validate()) { errors.each { println it} } else save()}
336                        def sampleVialTextField = new TemplateField(
337                                name: 'Text on vial',type: TemplateFieldType.STRING)
338                        .with { if (!validate()) { errors.each { println it} } else save()}
339
340                        // Human sample template
341                        def humanSampleTemplate = new Template(
342                                name: 'Human tissue sample', entity: dbnp.studycapturing.Sample)
343                        .addToFields(sampleDescriptionField)
344                        .addToFields(sampleTypeField)
345                        .addToFields(sampleProtocolField)
346                        .addToFields(sampleVialTextField)
347                        .with { if (!validate()) { errors.each { println it} } else save()}
348
349                        //Plant template
350                        def plantTemplate = new Template(
351                                name: 'Plant template', entity: dbnp.studycapturing.Subject)
352                        .addToFields(new TemplateField(
353                                name: 'Variety', type: TemplateFieldType.STRING))
354                        .addToFields(new TemplateField(
355                                name: 'Ecotype', type: TemplateFieldType.STRING))
356                        .addToFields(genotypeField)
357                        .addToFields(genotypeTypeField)
358                        .addToFields(new TemplateField(
359                                name: 'Growth location', type: TemplateFieldType.STRINGLIST,
360                                listEntries: [new TemplateFieldListItem(name:'Greenhouse'),new TemplateFieldListItem(name: 'Field')]))
361                        .addToFields(new TemplateField(
362                                name: 'Room', type: TemplateFieldType.STRING,
363                                comment: 'Chamber number in case of Greenhouse'))
364                        .addToFields(new TemplateField(
365                                name: 'Position X', type: TemplateFieldType.FLOAT))
366                        .addToFields(new TemplateField(
367                                name: 'Position Y', type: TemplateFieldType.FLOAT))
368                        .addToFields(new TemplateField(
369                                name: 'Block', type: TemplateFieldType.STRING))
370                        .addToFields(new TemplateField(
371                                name: 'Temperature at day', type: TemplateFieldType.FLOAT))
372                        .addToFields(new TemplateField(
373                                name: 'Temperature at night', type: TemplateFieldType.FLOAT))
374                        .addToFields(new TemplateField(
375                                name: 'Photo period', type: TemplateFieldType.STRING))
376                        .addToFields(new TemplateField(
377                                name: 'Light intensity', type: TemplateFieldType.STRING))
378                        .addToFields(new TemplateField(
379                                name: 'Start date', type: TemplateFieldType.DATE))
380                        .addToFields(new TemplateField(
381                                name: 'Harvest date', type: TemplateFieldType.DATE))
382                        .addToFields(new TemplateField(
383                                name: 'Growth type', type: TemplateFieldType.STRINGLIST,
384                                listEntries: [new TemplateFieldListItem(name:'Standard'),new TemplateFieldListItem(name: 'Experimental')]))
385                        .addToFields(new TemplateField(
386                                name: 'Growth protocol', type: TemplateFieldType.TEXT))
387                        .addToFields(new TemplateField(
388                                name: 'Harvest delay', type: TemplateFieldType.TEXT))
389                        .with { if (!validate()) { errors.each { println it} } else save()}
390
391                        def plantSampleTemplate = new Template(
392                                name: 'Plant sample', entity: dbnp.studycapturing.Sample)
393                        .addToFields(sampleDescriptionField)
394                        .addToFields(sampleTypeField)
395                        .addToFields(sampleProtocolField)
396                        .addToFields(sampleVialTextField)
397                        .with { if (!validate()) { errors.each { println it} } else save()}
398
399
400                        // Event template
401                        def dietTreatmentTemplate = new Template(
402                                name: 'Diet treatment ', entity: dbnp.studycapturing.Event)
403                        .addToFields(sampleDescriptionField)
404                        .addToFields(new TemplateField(
405                                name: 'Diet', type: TemplateFieldType.STRING))
406                        .with { if (!validate()) { errors.each { println it} } else save()}
407
408                        def boostTreatmentTemplate = new Template(
409                                name: 'Boost treatment ', entity: dbnp.studycapturing.Event)
410                        .addToFields(sampleDescriptionField)
411                        .addToFields(new TemplateField(
412                                name: 'Compound', type: TemplateFieldType.STRING))
413                        .with { if (!validate()) { errors.each { println it} } else save()}
414
415                        /*
416                        //events
417                        def eventDiet = new EventDescription(
418                                name: 'Diet treatment',
419                                description: 'Diet treatment (fat percentage)',
420                                classification: treatmentTerm,
421                                protocol: dietProtocol,
422                                isSamplingEvent: false
423                        ).with { if (!validate()) { errors.each { println it} } else save()}
424
425                        def eventBoost = new EventDescription(
426                                name: 'Boost treatment',
427                                description: 'Boost treatment (leptin or vehicle)',
428                                classification: treatmentTerm,
429                                protocol: boostProtocol,
430                                isSamplingEvent: false
431                        ).with { if (!validate()) { errors.each { println it} } else save()}
432
433                        def samplingEvent = new EventDescription(
434                                name: 'Liver extraction',
435                                description: 'Liver sampling for transcriptomics arrays',
436                                protocol: liverSamplingProtocol,
437                                isSamplingEvent: true
438                        ).with { if (!validate()) { errors.each { println it} } else save()}
439
440                        def bloodSamplingEventDescription = new EventDescription(
441                                name: 'Blood extraction',
442                                description: 'Blood extraction targeted at lipid assays',
443                                protocol: bloodSamplingProtocol,
444                                isSamplingEvent: true
445                        ).with { if (!validate()) { errors.each { println it} } else save()}
446
447
448            def fastingTreatment = new EventDescription(
449                                name: 'Fasting treatment',
450                                description: 'Fasting Protocol NuGO PPSH',
451                                protocol: fastingProtocol,
452                                isSamplingEvent: false
453                        ).with { if (!validate()) { errors.each { println it} } else save()}
454
455                        println('Adding PPS3 study...')
456                        */
457                        // studies
458                        def exampleStudy = new Study(
459                                template: studyTemplate,
460                                title:"NuGO PPS3 mouse study leptin module",
461                                code:"PPS3_leptin_module",
462                                researchQuestion:"Leptin etc.",
463                                ecCode:"2007117.c",
464                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
465                        )
466                        //.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." )
467                        .with { if (!validate()) { errors.each { println it} } else save()}
468
469                        def exampleHumanStudy = new Study(
470                                template: humanTemplate,
471                                title:"Human example template",
472                                code:"Human example code",
473                                researchQuestion:"Leptin etc.",
474                                ecCode:"2007117.c",
475                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
476                        )
477                        //.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." )
478                        .with { if (!validate()) { errors.each { println it} } else save()}
479
480                        def evLF = new Event(
481                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
482                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
483                                template: dietTreatmentTemplate
484                        )
485                        .setFieldValue( 'Diet','10% fat (palm oil)' )
486                        .with { if (!validate()) { errors.each { println it} } else save()}
487
488                        def evHF = new Event(
489                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
490                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
491                                template: dietTreatmentTemplate
492                        )
493                        .setFieldValue( 'Diet','45% fat (palm oil)' )
494                        .with { if (!validate()) { errors.each { println it} } else save()}
495
496                        def evBV = new Event(
497                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
498                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
499                                template: boostTreatmentTemplate
500                        )
501                        .setFieldValue( 'Compound','Vehicle' )
502                        .with { if (!validate()) { errors.each { println it} } else save()}
503
504                        def evBL = new Event(
505                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
506                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
507                                template: boostTreatmentTemplate
508                        )
509                        .setFieldValue( 'Compound','Leptin' )
510                        .with { if (!validate()) { errors.each { println it} } else save()}
511
512                        /*
513                        def evLF4 = new Event(
514                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
515                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
516                                eventDescription: eventDiet,
517                                parameterStringValues: ['Diet':'10% fat (palm oil)']
518                        ).with { if (!validate()) { errors.each { println it} } else save()}
519
520                        def evHF4 = new Event(
521                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
522                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
523                                eventDescription: eventDiet,
524                                parameterStringValues: ['Diet':'45% fat (palm oil)']
525                        ).with { if (!validate()) { errors.each { println it} } else save()}
526
527                        def evBV4 = new Event(
528                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
529                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
530                                eventDescription: eventBoost,
531                                parameterStringValues: ['Compound':'Vehicle']
532                        ).with { if (!validate()) { errors.each { println it} } else save()}
533
534                        def evBL4 = new Event(
535                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
536                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
537                                eventDescription: eventBoost,
538                                parameterStringValues: ['Compound':'Leptin']
539                        ).with { if (!validate()) { errors.each { println it} } else save()}
540
541                        def evS = new SamplingEvent(
542                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
543                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
544                                        eventDescription: samplingEvent,
545                                        parameterFloatValues: ['Sample weight':5F]
546                        ).with { if (!validate()) { errors.each { println it} } else save()}
547
548                        def evS4 = new SamplingEvent(
549                                        startTime: Date.parse('yyyy-MM-dd','2008-02-04'),
550                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
551                                        eventDescription: samplingEvent,
552                                        parameterFloatValues: ['Sample weight':5F]
553                        ).with { if (!validate()) { errors.each { println it} } else save()}
554                        */
555
556                        // Add events to study
557                        exampleStudy
558                        .addToEvents(evLF)
559                        .addToEvents(evHF)
560                        .addToEvents(evBV)
561                        .addToEvents(evBL)
562                        /*
563                        .addToEvents(evLF4)
564                        .addToEvents(evHF4)
565                        .addToEvents(evBV4)
566                        .addToEvents(evBL4)
567                        .addToSamplingEvents(evS)
568                        .addToSamplingEvents(evS4)
569                        */
570                        .save()
571
572                        def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
573                        .addToEvents(evLF)
574                        .addToEvents(evBV)
575                        .with { if (!validate()) { errors.each { println it} } else save()}
576
577                        def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
578                        .addToEvents(evLF)
579                        .addToEvents(evBL)
580                        .with { if (!validate()) { errors.each { println it} } else save()}
581
582                        def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
583                        .addToEvents(evHF)
584                        .addToEvents(evBV)
585                        .with { if (!validate()) { errors.each { println it} } else save()}
586
587                        def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
588                        .addToEvents(evHF)
589                        .addToEvents(evBL)
590                        .with { if (!validate()) { errors.each { println it} } else save()}
591
592                        /*
593                        def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
594                        .addToEvents(evLF4)
595                        .addToEvents(evBV4)
596                        .with { if (!validate()) { errors.each { println it} } else save()}
597
598                        def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
599                        .addToEvents(evLF4)
600                        .addToEvents(evBL4)
601                        .with { if (!validate()) { errors.each { println it} } else save()}
602
603                        def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
604                        .addToEvents(evHF4)
605                        .addToEvents(evBV4)
606                        .with { if (!validate()) { errors.each { println it} } else save()}
607
608                        def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
609                        .addToEvents(evHF4)
610                        .addToEvents(evBL4)
611                        .with { if (!validate()) { errors.each { println it} } else save()}
612                        */
613
614            // Add subjects and samples and compose EventGroups
615
616                        def x=1
617                        40.times {
618                                def currentSubject = new Subject(
619                                        name: "A" + x++,
620                                        species: mouseTerm,
621                                        template: mouseTemplate,
622                                )
623                                .setFieldValue("Gender", "Male")
624                                //.setFieldValue("Genotype", c57bl6Term)
625                                .setFieldValue("Age (weeks)", 17)
626                                .setFieldValue("Cage", "" + (int)(x/2))
627                                .with { if (!validate()) { errors.each { println it} } else save()}
628
629                                exampleStudy.addToSubjects(currentSubject)
630                                .with { if (!validate()) { errors.each { println it} } else save()}
631
632                                // Add subject to appropriate EventGroup
633                                /*
634                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
635                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
636                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
637                                else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
638                                else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
639                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
640                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
641                                else             { LFBV1.addToSubjects(currentSubject).save() }
642                                */
643
644                                if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
645                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
646                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
647                                else             { LFBV1.addToSubjects(currentSubject).save() }
648
649                        }
650
651                        // Add EventGroups to study
652                        exampleStudy
653                        .addToEventGroups(LFBV1)
654                        .addToEventGroups(LFBL1)
655                        .addToEventGroups(HFBV1)
656                        .addToEventGroups(HFBL1)
657                        //.addToEventGroups(LFBV4)
658                        //.addToEventGroups(LFBL4)
659                        //.addToEventGroups(HFBV4)
660                        //.addToEventGroups(HFBL4)
661
662                        // Add persons to study
663                        def studyperson1 = new StudyPerson( person: person1, role: role1 ).save();
664                        def studyperson2 = new StudyPerson( person: person2, role: role2 ).save();
665
666                        exampleStudy
667                        .addToPersons( studyperson1 )
668                        .addToPersons( studyperson2 )
669                        .save()
670
671                        /*
672                        println 'Adding PPSH study'
673
674                        def humanStudy = new Study(
675                                template: studyTemplate,
676                                title:"NuGO PPS human study",
677                                code:"PPSH",
678                                researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
679                                description:"Human study",
680                                ecCode:"unknown",
681                                startDate: Date.parse('yyyy-MM-dd','2009-01-01')
682                        ).with { if (!validate()) { errors.each { println it} } else save()}
683
684                        def fastingEvent = new Event(
685                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
686                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
687                                        eventDescription: fastingTreatment,
688                                        parameterStringValues: ['Fasting period':'8h']);
689
690                        def bloodSamplingEvent = new SamplingEvent(
691                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
692                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
693                                        eventDescription: bloodSamplingEventDescription,
694                                        parameterFloatValues: ['Sample volume':4.5F]);
695
696                        def rootGroup = new EventGroup(name: 'Root group');
697                        rootGroup.addToEvents fastingEvent
698                        rootGroup.addToEvents bloodSamplingEvent
699                        rootGroup.save()
700
701            def y = 1
702            11.times {
703              def currentSubject = new Subject(
704                      name: "" + y++,
705                      species: humanTerm,
706                      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()}
707
708              rootGroup.addToSubjects currentSubject
709              rootGroup.save()
710
711              def currentSample = new Sample(
712                      name: currentSubject.name + '_B',
713                      material: bloodTerm,
714                      parentSubject: currentSubject,
715                      parentEvent: bloodSamplingEvent);
716
717
718              humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
719          }
720
721          humanStudy.addToEvents(fastingEvent)
722          humanStudy.addToSamplingEvents(bloodSamplingEvent)
723          humanStudy.addToEventGroups rootGroup
724          humanStudy.save()
725
726                        // Add clinical data
727
728                        def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
729                                name: 'Lipid profile',
730                                approved: true
731                        ).with { if (!validate()) { errors.each { println it} } else save()}
732
733                        def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
734                                name: 'LDL',
735                                unit: 'mg/dL',
736                                type: dbnp.data.FeatureType.QUANTITATIVE,
737                                referenceValues: '100 mg/dL',
738                                detectableLimit: 250,
739                                isDrug: false, isIntake: true, inSerum: true
740                        ).with { if (!validate()) { errors.each { println it} } else save()}
741
742                        def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
743                                name: 'HDL',
744                                unit: 'mg/dL',
745                                type: dbnp.data.FeatureType.QUANTITATIVE,
746                                referenceValues: '50 mg/dL',
747                                detectableLimit: 100,
748                                isDrug: false, isIntake: true, inSerum: true
749                        ).with { if (!validate()) { errors.each { println it} } else save()}
750
751                        lipidAssay.addToMeasurements ldlMeasurement
752                        lipidAssay.addToMeasurements hdlMeasurement
753
754                        def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
755                                assay: lipidAssay
756                        ).with { if (!validate()) { errors.each { println it} } else save()}
757
758                        humanStudy.samples*.each {
759                                new dbnp.clinicaldata.ClinicalFloatData(
760                                        assay: lipidAssayInstance,
761                                        measurement: ldlMeasurement,
762                                        sample: it.name,
763                                        value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
764                                ).with { if (!validate()) { errors.each { println it} } else save()}
765
766                                new dbnp.clinicaldata.ClinicalFloatData(
767                                        assay: lipidAssayInstance,
768                                        measurement: hdlMeasurement,
769                                        sample: it.name,
770                                        value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
771                                ).with { if (!validate()) { errors.each { println it} } else save()}
772                        }
773
774                        // Add assay to study capture module
775
776                        def clinicalModule = new AssayModule(
777                                name: 'Clinical data',
778                                type: AssayType.CLINICAL_DATA,
779                                platform: 'clinical measurements',
780                                url: 'http://localhost:8080/gscf'
781                        ).with { if (!validate()) { errors.each { println it} } else save()}
782
783                        def lipidAssayRef = new Assay(
784                                name: 'Lipid profiling',
785                                module: clinicalModule,
786                                externalAssayId: lipidAssayInstance.id
787                        ).with { if (!validate()) { errors.each { println it} } else save()}
788
789                        humanStudy.samples*.each {
790                                lipidAssayRef.addToSamples(it)
791                        }
792                        lipidAssayRef.save()
793
794                        humanStudy.addToAssays(lipidAssayRef);
795                        humanStudy.save()
796*/
797                }
798        }
799
800        def destroy = {
801        }
802} 
Note: See TracBrowser for help on using the repository browser.