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

Last change on this file since 394 was 394, checked in by keesvb, 11 years ago

added ontology specifications to Subject species and Sample material domain fields

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