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

Last change on this file since 408 was 408, checked in by keesvb, 9 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.