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

Last change on this file since 331 was 331, checked in by duh, 10 years ago
  • added a dummy integer template field to the academic study template in order to work on validation
  • Property svn:keywords set to Author Rev Date
File size: 22.8 KB
Line 
1import org.codehaus.groovy.grails.commons.GrailsApplication
2import grails.util.GrailsUtil
3import dbnp.studycapturing.*
4
5import dbnp.data.Ontology
6import dbnp.data.Term
7import java.text.SimpleDateFormat
8
9/**
10 * Application Bootstrapper
11 * @Author Jeroen Wesbeek
12 * @Since 20091021
13 *
14 * Revision information:
15 * $Rev: 331 $
16 * $Author: duh $
17 * $Date: 2010-04-08 12:20:13 +0000 (do, 08 apr 2010) $
18 */
19class BootStrap {
20        def init = {servletContext ->
21                // define timezone
22                System.setProperty('user.timezone', 'CET')
23
24                // we could also check if we are in development by GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT
25                if (Study.count() == 0) {
26                        printf("development bootstrapping....\n\n");
27
28                        // ontologies
29                        def speciesOntology = new Ontology(
30                                name: 'NCBI Taxonomy',
31                                shortName: 'Taxon',
32                                url: 'http://www.obofoundry.org/cgi-bin/detail.cgi?id=ncbi_taxonomy'
33                        ).with { if (!validate()) { errors.each { println it} } else save()}
34
35                        def humanBodyOntology = new Ontology(
36                                name: 'Foundational Model of Anatomy',
37                                shortName: 'HumanBody',
38                                url: 'http://bioportal.bioontology.org/ontologies/39966'
39                        ).with { if (!validate()) { errors.each { println it} } else save()}
40
41                        // terms
42                        def mouseTerm = new Term(
43                                name: 'Mus musculus',
44                                ontology: speciesOntology,
45                                accession: '10090'
46                        ).with { if (!validate()) { errors.each { println it} } else save()}
47                        def humanTerm = new Term(
48                                name: 'Homo sapiens',
49                                ontology: speciesOntology,
50                                accession: '9606'
51                        ).with { if (!validate()) { errors.each { println it} } else save()}
52
53                        def bloodTerm = new Term(
54                                name: 'Portion of blood',
55                                ontology: humanBodyOntology,
56                                accession: '9670'
57                        ).with { if (!validate()) { errors.each { println it} } else save()}
58
59                        def madmaxOntology = new Ontology(
60                                name: 'Madmax ontology',
61                                shortName: 'MDMX',
62                                url: 'madmax.bioinformatics.nl'
63                        ).with { if (!validate()) { errors.each { println it} } else save()}
64
65                        def treatmentTerm = new Term(
66                                name: 'ExperimentalProtocol',
67                                ontology: madmaxOntology,
68                                accession: 'P-MDMXGE-264'
69                        ).with { if (!validate()) { errors.each { println it} } else save()}
70
71                        def dietProtocol = new Protocol(
72                                name: 'Diet treatment Protocol NuGO PPS3 leptin module',
73                                reference: treatmentTerm
74                        ).with { if (!validate()) { errors.each { println it} } else save()}
75
76                        def boostProtocol = new Protocol(
77                                name: 'Boost treatment Protocol NuGO PPS3 leptin module',
78                                reference: treatmentTerm
79                        ).with { if (!validate()) { errors.each { println it} } else save()}
80
81                        def fastingProtocol = new Protocol(
82                                name: 'Fasting',
83                                reference: treatmentTerm
84                        ).with { if (!validate()) { errors.each { println it} } else save()}
85
86
87                        // ParameterStringListItems
88                        def oil10= new ParameterStringListItem(
89                                name: '10% fat (palm oil)'
90                        ).with { if (!validate()) { errors.each { println it} } else save()}
91                        def oil45= new ParameterStringListItem(
92                                name: '45% fat (palm oil)'
93                        ).with { if (!validate()) { errors.each { println it} } else save()}
94                        def vehicle= new ParameterStringListItem(
95                                name: 'Vehicle'
96                        ).with { if (!validate()) { errors.each { println it} } else save()}
97                        def leptin= new ParameterStringListItem(
98                                name: 'Leptin'
99                        ).with { if (!validate()) { errors.each { println it} } else save()}
100
101
102                        dietProtocol
103                        .addToParameters(new ProtocolParameter(
104                                name: 'Diet',
105                                type: ProtocolParameterType.STRINGLIST,
106                                listEntries: [oil10,oil45]))
107                        .save()
108
109                        boostProtocol
110                        .addToParameters(new ProtocolParameter(
111                                name: 'Compound',
112                                type: ProtocolParameterType.STRINGLIST,
113                                listEntries: [vehicle,leptin]))
114                        .save()
115
116                        fastingProtocol
117                        .addToParameters(new ProtocolParameter(
118                                name: 'Fasting period',
119                                type: ProtocolParameterType.STRING))
120                        .save()
121
122
123                        // sampling event protocols
124
125                        def liverSamplingProtocol = new Protocol(
126                                name: 'Liver sampling'
127                        ).with { if (!validate()) { errors.each { println it} } else save()}
128
129                        liverSamplingProtocol
130                        .addToParameters(new ProtocolParameter(
131                                name: 'Sample weight',
132                                unit: 'mg',
133                                type: ProtocolParameterType.FLOAT))
134                        .save()
135
136                        def bloodSamplingProtocol = new Protocol(
137                                name: 'Blood sampling'
138                        ).with { if (!validate()) { errors.each { println it} } else save()}
139
140                        bloodSamplingProtocol
141                        .addToParameters(new ProtocolParameter(
142                                name: 'Sample volume',
143                                unit: 'ml',
144                                type: ProtocolParameterType.FLOAT))
145                        .save()
146
147                        // create system user
148
149                        /*def systemUser = userService.createUser(InstanceGenerator.user(
150                                username: 'system',
151                                pass: 'system',
152                                passConfirm: 'system',
153                                enabled: true
154                        ))*/
155
156
157                        def genderField = new TemplateField(
158                                name: 'Gender',type: TemplateFieldType.STRINGLIST,
159                                listEntries: [new TemplateFieldListItem(name:'Male'),new TemplateFieldListItem(name: 'Female')])
160                        .with { if (!validate()) { errors.each { println it} } else save()}
161
162                        def ageField = new TemplateField(
163                                name: 'Age (years)',type: TemplateFieldType.INTEGER,unit: 'years')
164                        .with { if (!validate()) { errors.each { println it} } else save()}
165
166                        // Nutritional study template
167
168                        println "Adding academic study template..."
169                        def studyTemplate = new Template(
170                                name: 'Academic study', entity: dbnp.studycapturing.Study)
171                                .addToFields(new TemplateField(name: 'Consortium',type: TemplateFieldType.STRING))
172                                .addToFields(new TemplateField(name: 'Cohort name',type: TemplateFieldType.STRING))
173                                .addToFields(new TemplateField(name: 'Time zone',type: TemplateFieldType.STRING))
174                                .addToFields(new TemplateField(name: 'Responsible scientist',type: TemplateFieldType.STRING))
175                                .addToFields(new TemplateField(name: 'Lab code',type: TemplateFieldType.STRING))
176                                .addToFields(new TemplateField(name: 'Institute',type: TemplateFieldType.STRING))
177                                .addToFields(new TemplateField(name: 'Some Integer',type: TemplateFieldType.INTEGER))
178                        .with { if (!validate()) { errors.each { println it} } else save()}
179
180                        // Mouse template
181                        def mouseTemplate = new Template(
182                                name: 'Mouse', entity: dbnp.studycapturing.Subject)
183                        .addToFields(new TemplateField(
184                                name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM))
185                        .addToFields(new TemplateField(
186                                name: 'Genotype', type: TemplateFieldType.STRING))
187                        .addToFields(new TemplateField(
188                                name: 'Genotype type',type: TemplateFieldType.STRINGLIST,
189                                listEntries: [new TemplateFieldListItem(name:'transgenic'),new TemplateFieldListItem(name:'knock-out'),new TemplateFieldListItem(name:'knock-in')]))
190                        .addToFields(genderField)
191                        .addToFields(new TemplateField(
192                                name: 'Age (weeks)', type: TemplateFieldType.INTEGER, unit: 'weeks'))
193                        .addToFields(new TemplateField(
194                                name: 'Age type',type: TemplateFieldType.STRINGLIST,
195                                listEntries: [new TemplateFieldListItem(name:'postnatal'),new TemplateFieldListItem(name:'embryonal')]))
196                        .addToFields(new TemplateField(
197                                name: 'Cage',type: TemplateFieldType.STRING))
198                        .addToFields(new TemplateField(
199                                name: '#Mice in cage',type: TemplateFieldType.INTEGER))
200                        .addToFields(new TemplateField(
201                                name: 'Litter size',type: TemplateFieldType.INTEGER))
202                        .addToFields(new TemplateField(
203                                name: 'Weight (g)', type: TemplateFieldType.DOUBLE, unit: 'gram'))
204                        .addToFields(new TemplateField(
205                                name: 'SomeOntology', type: TemplateFieldType.ONTOLOGYTERM))
206                        .with { if (!validate()) { errors.each { println it} } else save()}
207
208                        // Human template
209                        def humanTemplate = new Template(
210                                name: 'Human', entity: dbnp.studycapturing.Subject)
211                        .addToFields(genderField)
212                        .addToFields(ageField)
213                        .addToFields(new TemplateField(
214                                name: 'DOB',type: TemplateFieldType.DATE))
215                        .addToFields(new TemplateField(
216                                name: 'Height',type: TemplateFieldType.DOUBLE, unit: 'm'))
217                        .addToFields(new TemplateField(
218                                name: 'Weight (kg)',type: TemplateFieldType.DOUBLE, unit: 'kg'))
219                        .addToFields(new TemplateField(
220                                name: 'BMI',type: TemplateFieldType.DOUBLE, unit: 'kg/m2'))
221                        .addToFields(new TemplateField(
222                                name: 'Race',type: TemplateFieldType.STRING))
223                        .addToFields(new TemplateField(
224                                name: 'Waist circumvence',type: TemplateFieldType.FLOAT, unit: 'cm'))
225                        .addToFields(new TemplateField(
226                                name: 'Hip circumvence',type: TemplateFieldType.FLOAT, unit: 'cm'))
227                        .addToFields(new TemplateField(
228                                name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
229                        .addToFields(new TemplateField(
230                                name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
231                        .addToFields(new TemplateField(
232                                name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min'))
233                        .addToFields(new TemplateField(
234                                name: 'Run-in-food',type: TemplateFieldType.TEXT))
235                        .with { if (!validate()) { errors.each { println it} } else save()}
236
237
238                        // Human sample template
239                        def humanSampleTemplate = new Template(
240                                name: 'Human tissue sample', entity: dbnp.studycapturing.Sample)
241                        .addToFields(new TemplateField(
242                                name: 'Description',type: TemplateFieldType.TEXT))
243                        .addToFields(new TemplateField(
244                                name: 'SampleType',type: TemplateFieldType.STRING))
245                        .addToFields(new TemplateField(
246                                name: 'SampleProtocol',type: TemplateFieldType.STRING))
247                        .addToFields(new TemplateField(
248                                name: 'Text on vial',type: TemplateFieldType.STRING))
249                        .with { if (!validate()) { errors.each { println it} } else save()}
250
251                        //events
252                        def eventDiet = new EventDescription(
253                                name: 'Diet treatment',
254                                description: 'Diet treatment (fat percentage)',
255                                classification: treatmentTerm,
256                                protocol: dietProtocol,
257                                isSamplingEvent: false
258                        ).with { if (!validate()) { errors.each { println it} } else save()}
259
260                        def eventBoost = new EventDescription(
261                                name: 'Boost treatment',
262                                description: 'Boost treatment (leptin or vehicle)',
263                                classification: treatmentTerm,
264                                protocol: boostProtocol,
265                                isSamplingEvent: false
266                        ).with { if (!validate()) { errors.each { println it} } else save()}
267
268                        def samplingEvent = new EventDescription(
269                                name: 'Liver extraction',
270                                description: 'Liver sampling for transcriptomics arrays',
271                                protocol: liverSamplingProtocol,
272                                isSamplingEvent: true
273                        ).with { if (!validate()) { errors.each { println it} } else save()}
274
275                        def bloodSamplingEventDescription = new EventDescription(
276                                name: 'Blood extraction',
277                                description: 'Blood extraction targeted at lipid assays',
278                                protocol: bloodSamplingProtocol,
279                                isSamplingEvent: true
280                        ).with { if (!validate()) { errors.each { println it} } else save()}
281
282
283            def fastingTreatment = new EventDescription(
284                                name: 'Fasting treatment',
285                                description: 'Fasting Protocol NuGO PPSH',
286                                protocol: fastingProtocol,
287                                isSamplingEvent: false
288                        ).with { if (!validate()) { errors.each { println it} } else save()}
289
290                        println('Adding PPS3 study...')
291
292                        // studies
293                        def exampleStudy = new Study(
294                                template: studyTemplate,
295                                title:"NuGO PPS3 mouse study leptin module",
296                                code:"PPS3_leptin_module",
297                                researchQuestion:"Leptin etc.",
298                                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.",
299                                ecCode:"2007117.c",
300                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
301                        ).with { if (!validate()) { errors.each { println it} } else save()}
302
303                        def exampleHumanStudy = new Study(
304                                template: humanTemplate,
305                                title:"Human example template",
306                                code:"Human example code",
307                                researchQuestion:"Leptin etc.",
308                                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.",
309                                ecCode:"2007117.c",
310                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
311                        ).with { if (!validate()) { errors.each { println it} } else save()}
312
313                        def evLF = new Event(
314                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
315                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
316                                eventDescription: eventDiet,
317                                parameterStringValues: ['Diet':'10% fat (palm oil)']
318                        ).with { if (!validate()) { errors.each { println it} } else save()}
319
320                        def evHF = new Event(
321                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
322                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
323                                eventDescription: eventDiet,
324                                parameterStringValues: ['Diet':'45% fat (palm oil)']
325                        ).with { if (!validate()) { errors.each { println it} } else save()}
326
327                        def evBV = new Event(
328                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
329                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
330                                eventDescription: eventBoost,
331                                parameterStringValues: ['Compound':'Vehicle']
332                        ).with { if (!validate()) { errors.each { println it} } else save()}
333
334                        def evBL = new Event(
335                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
336                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
337                                eventDescription: eventBoost,
338                                parameterStringValues: ['Compound':'Leptin']
339                        ).with { if (!validate()) { errors.each { println it} } else save()}
340
341                        def evLF4 = new Event(
342                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
343                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
344                                eventDescription: eventDiet,
345                                parameterStringValues: ['Diet':'10% fat (palm oil)']
346                        ).with { if (!validate()) { errors.each { println it} } else save()}
347
348                        def evHF4 = new Event(
349                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
350                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
351                                eventDescription: eventDiet,
352                                parameterStringValues: ['Diet':'45% fat (palm oil)']
353                        ).with { if (!validate()) { errors.each { println it} } else save()}
354
355                        def evBV4 = new Event(
356                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
357                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
358                                eventDescription: eventBoost,
359                                parameterStringValues: ['Compound':'Vehicle']
360                        ).with { if (!validate()) { errors.each { println it} } else save()}
361
362                        def evBL4 = new Event(
363                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
364                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
365                                eventDescription: eventBoost,
366                                parameterStringValues: ['Compound':'Leptin']
367                        ).with { if (!validate()) { errors.each { println it} } else save()}
368
369                        def evS = new SamplingEvent(
370                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
371                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
372                                        eventDescription: samplingEvent,
373                                        parameterFloatValues: ['Sample weight':5F]
374                        ).with { if (!validate()) { errors.each { println it} } else save()}
375
376                        def evS4 = new SamplingEvent(
377                                        startTime: Date.parse('yyyy-MM-dd','2008-02-04'),
378                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
379                                        eventDescription: samplingEvent,
380                                        parameterFloatValues: ['Sample weight':5F]
381                        ).with { if (!validate()) { errors.each { println it} } else save()}
382
383                        // Add events to study
384                        exampleStudy
385                        .addToEvents(evLF)
386                        .addToEvents(evHF)
387                        .addToEvents(evBV)
388                        .addToEvents(evBL)
389                        .addToEvents(evLF4)
390                        .addToEvents(evHF4)
391                        .addToEvents(evBV4)
392                        .addToEvents(evBL4)
393                        .addToSamplingEvents(evS)
394                        .addToSamplingEvents(evS4)
395                        .save()
396
397                        def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
398                        .addToEvents(evLF)
399                        .addToEvents(evBV)
400                        .with { if (!validate()) { errors.each { println it} } else save()}
401
402                        def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
403                        .addToEvents(evLF)
404                        .addToEvents(evBL)
405                        .with { if (!validate()) { errors.each { println it} } else save()}
406
407                        def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
408                        .addToEvents(evHF)
409                        .addToEvents(evBV)
410                        .with { if (!validate()) { errors.each { println it} } else save()}
411
412                        def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
413                        .addToEvents(evHF)
414                        .addToEvents(evBL)
415                        .with { if (!validate()) { errors.each { println it} } else save()}
416
417                        def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
418                        .addToEvents(evLF4)
419                        .addToEvents(evBV4)
420                        .with { if (!validate()) { errors.each { println it} } else save()}
421
422                        def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
423                        .addToEvents(evLF4)
424                        .addToEvents(evBL4)
425                        .with { if (!validate()) { errors.each { println it} } else save()}
426
427                        def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
428                        .addToEvents(evHF4)
429                        .addToEvents(evBV4)
430                        .with { if (!validate()) { errors.each { println it} } else save()}
431
432                        def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
433                        .addToEvents(evHF4)
434                        .addToEvents(evBL4)
435                        .with { if (!validate()) { errors.each { println it} } else save()}
436
437            // Add subjects and samples and compose EventGroups
438
439                        def x=1
440                        80.times {
441                                def currentSubject = new Subject(
442                                        name: "A" + x++,
443                                        species: mouseTerm,
444                                        template: mouseTemplate,
445                                )
446                                .setFieldValue("Gender", "Male")
447                                .setFieldValue("Genotype", "C57/Bl6j")
448                                .setFieldValue("Age (weeks)", 17)
449                                .setFieldValue("Cage", "" + (int)(x/2))
450                                .with { if (!validate()) { errors.each { println it} } else save()}
451
452                                exampleStudy.addToSubjects(currentSubject)
453                                .with { if (!validate()) { errors.each { println it} } else save()}
454
455                                // Add subject to appropriate EventGroup
456                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
457                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
458                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
459                                else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
460                                else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
461                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
462                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
463                                else             { LFBV1.addToSubjects(currentSubject).save() }
464
465                        }
466
467                        // Add EventGroups to study
468                        exampleStudy
469                        .addToEventGroups(LFBV1)
470                        .addToEventGroups(LFBL1)
471                        .addToEventGroups(HFBV1)
472                        .addToEventGroups(HFBL1)
473                        .addToEventGroups(LFBV4)
474                        .addToEventGroups(LFBL4)
475                        .addToEventGroups(HFBV4)
476                        .addToEventGroups(HFBL4)
477                        .save()
478
479                        println 'Adding PPSH study'
480
481                        def humanStudy = new Study(
482                                template: studyTemplate,
483                                title:"NuGO PPS human study",
484                                code:"PPSH",
485                                researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
486                                description:"Human study",
487                                ecCode:"unknown",
488                                startDate: Date.parse('yyyy-MM-dd','2009-01-01')
489                        ).with { if (!validate()) { errors.each { println it} } else save()}
490
491                        def fastingEvent = new Event(
492                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
493                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
494                                        eventDescription: fastingTreatment,
495                                        parameterStringValues: ['Fasting period':'8h']);
496
497                        def bloodSamplingEvent = new SamplingEvent(
498                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
499                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
500                                        eventDescription: bloodSamplingEventDescription,
501                                        parameterFloatValues: ['Sample volume':4.5F]);
502
503                        def rootGroup = new EventGroup(name: 'Root group');
504                        rootGroup.addToEvents fastingEvent
505                        rootGroup.addToEvents bloodSamplingEvent
506                        rootGroup.save()
507
508            def y = 1
509            11.times {
510              def currentSubject = new Subject(
511                      name: "" + y++,
512                      species: humanTerm,
513                      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()}
514
515              rootGroup.addToSubjects currentSubject
516              rootGroup.save()
517
518              def currentSample = new Sample(
519                      name: currentSubject.name + '_B',
520                      material: bloodTerm,
521                      parentSubject: currentSubject,
522                      parentEvent: bloodSamplingEvent);
523
524
525              humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
526          }
527
528          humanStudy.addToEvents(fastingEvent)
529          humanStudy.addToSamplingEvents(bloodSamplingEvent)
530          humanStudy.addToEventGroups rootGroup
531          humanStudy.save()
532
533                        // Add clinical data
534
535                        def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
536                                name: 'Lipid profile',
537                                approved: true
538                        ).with { if (!validate()) { errors.each { println it} } else save()}
539
540                        def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
541                                name: 'LDL',
542                                unit: 'mg/dL',
543                                type: dbnp.data.FeatureType.QUANTITATIVE,
544                                referenceValues: '100 mg/dL',
545                                detectableLimit: 250,
546                                isDrug: false, isIntake: true, inSerum: true
547                        ).with { if (!validate()) { errors.each { println it} } else save()}
548
549                        def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
550                                name: 'HDL',
551                                unit: 'mg/dL',
552                                type: dbnp.data.FeatureType.QUANTITATIVE,
553                                referenceValues: '50 mg/dL',
554                                detectableLimit: 100,
555                                isDrug: false, isIntake: true, inSerum: true
556                        ).with { if (!validate()) { errors.each { println it} } else save()}
557
558                        lipidAssay.addToMeasurements ldlMeasurement
559                        lipidAssay.addToMeasurements hdlMeasurement
560
561                        def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
562                                assay: lipidAssay
563                        ).with { if (!validate()) { errors.each { println it} } else save()}
564
565                        humanStudy.samples*.each {
566                                new dbnp.clinicaldata.ClinicalFloatData(
567                                        assay: lipidAssayInstance,
568                                        measurement: ldlMeasurement,
569                                        sample: it.name,
570                                        value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
571                                ).with { if (!validate()) { errors.each { println it} } else save()}
572
573                                new dbnp.clinicaldata.ClinicalFloatData(
574                                        assay: lipidAssayInstance,
575                                        measurement: hdlMeasurement,
576                                        sample: it.name,
577                                        value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
578                                ).with { if (!validate()) { errors.each { println it} } else save()}
579                        }
580
581                        // Add assay to study capture module
582
583                        def clinicalModule = new AssayModule(
584                                name: 'Clinical data',
585                                type: AssayType.CLINICAL_DATA,
586                                platform: 'clinical measurements',
587                                url: 'http://localhost:8080/gscf'
588                        ).with { if (!validate()) { errors.each { println it} } else save()}
589
590                        def lipidAssayRef = new Assay(
591                                name: 'Lipid profiling',
592                                module: clinicalModule,
593                                externalAssayId: lipidAssayInstance.id
594                        ).with { if (!validate()) { errors.each { println it} } else save()}
595
596                        humanStudy.samples*.each {
597                                lipidAssayRef.addToSamples(it)
598                        }
599                        lipidAssayRef.save()
600
601                        humanStudy.addToAssays(lipidAssayRef);
602                        humanStudy.save()
603
604                }
605        }
606
607        def destroy = {
608        }
609} 
Note: See TracBrowser for help on using the repository browser.