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

Last change on this file since 408 was 408, checked in by keesvb, 12 years ago

reverted changes which removed domain fields from the domain classes, we are now back again at more or less the situation of #394, added preferredIdentifier property to TemplateField? to facilitate simple import

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