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

Last change on this file since 329 was 329, checked in by tabma, 11 years ago
  • added Human study to Bootstrap for testing with importer
  • 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: 329 $
16 * $Author: tabma $
17 * $Date: 2010-04-07 12:03:10 +0000 (wo, 07 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                        .with { if (!validate()) { errors.each { println it} } else save()}
178
179                        // Mouse template
180                        def mouseTemplate = new Template(
181                                name: 'Mouse', entity: dbnp.studycapturing.Subject)
182                        .addToFields(new TemplateField(
183                                name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM))
184                        .addToFields(new TemplateField(
185                                name: 'Genotype', type: TemplateFieldType.STRING))
186                        .addToFields(new TemplateField(
187                                name: 'Genotype type',type: TemplateFieldType.STRINGLIST,
188                                listEntries: [new TemplateFieldListItem(name:'transgenic'),new TemplateFieldListItem(name:'knock-out'),new TemplateFieldListItem(name:'knock-in')]))
189                        .addToFields(genderField)
190                        .addToFields(new TemplateField(
191                                name: 'Age (weeks)', type: TemplateFieldType.INTEGER, unit: 'weeks'))
192                        .addToFields(new TemplateField(
193                                name: 'Age type',type: TemplateFieldType.STRINGLIST,
194                                listEntries: [new TemplateFieldListItem(name:'postnatal'),new TemplateFieldListItem(name:'embryonal')]))
195                        .addToFields(new TemplateField(
196                                name: 'Cage',type: TemplateFieldType.STRING))
197                        .addToFields(new TemplateField(
198                                name: '#Mice in cage',type: TemplateFieldType.INTEGER))
199                        .addToFields(new TemplateField(
200                                name: 'Litter size',type: TemplateFieldType.INTEGER))
201                        .addToFields(new TemplateField(
202                                name: 'Weight (g)', type: TemplateFieldType.DOUBLE, unit: 'gram'))
203                        .addToFields(new TemplateField(
204                                name: 'SomeOntology', type: TemplateFieldType.ONTOLOGYTERM))
205                        .with { if (!validate()) { errors.each { println it} } else save()}
206
207                        // Human template
208                        def humanTemplate = new Template(
209                                name: 'Human', entity: dbnp.studycapturing.Subject)
210                        .addToFields(genderField)
211                        .addToFields(ageField)
212                        .addToFields(new TemplateField(
213                                name: 'DOB',type: TemplateFieldType.DATE))
214                        .addToFields(new TemplateField(
215                                name: 'Height',type: TemplateFieldType.DOUBLE, unit: 'm'))
216                        .addToFields(new TemplateField(
217                                name: 'Weight (kg)',type: TemplateFieldType.DOUBLE, unit: 'kg'))
218                        .addToFields(new TemplateField(
219                                name: 'BMI',type: TemplateFieldType.DOUBLE, unit: 'kg/m2'))
220                        .addToFields(new TemplateField(
221                                name: 'Race',type: TemplateFieldType.STRING))
222                        .addToFields(new TemplateField(
223                                name: 'Waist circumvence',type: TemplateFieldType.FLOAT, unit: 'cm'))
224                        .addToFields(new TemplateField(
225                                name: 'Hip circumvence',type: TemplateFieldType.FLOAT, unit: 'cm'))
226                        .addToFields(new TemplateField(
227                                name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
228                        .addToFields(new TemplateField(
229                                name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
230                        .addToFields(new TemplateField(
231                                name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min'))
232                        .addToFields(new TemplateField(
233                                name: 'Run-in-food',type: TemplateFieldType.TEXT))
234                        .with { if (!validate()) { errors.each { println it} } else save()}
235
236
237                        // Human sample template
238                        def humanSampleTemplate = new Template(
239                                name: 'Human tissue sample', entity: dbnp.studycapturing.Sample)
240                        .addToFields(new TemplateField(
241                                name: 'Description',type: TemplateFieldType.TEXT))
242                        .addToFields(new TemplateField(
243                                name: 'SampleType',type: TemplateFieldType.STRING))
244                        .addToFields(new TemplateField(
245                                name: 'SampleProtocol',type: TemplateFieldType.STRING))
246                        .addToFields(new TemplateField(
247                                name: 'Text on vial',type: TemplateFieldType.STRING))
248                        .with { if (!validate()) { errors.each { println it} } else save()}
249
250                        //events
251                        def eventDiet = new EventDescription(
252                                name: 'Diet treatment',
253                                description: 'Diet treatment (fat percentage)',
254                                classification: treatmentTerm,
255                                protocol: dietProtocol,
256                                isSamplingEvent: false
257                        ).with { if (!validate()) { errors.each { println it} } else save()}
258
259                        def eventBoost = new EventDescription(
260                                name: 'Boost treatment',
261                                description: 'Boost treatment (leptin or vehicle)',
262                                classification: treatmentTerm,
263                                protocol: boostProtocol,
264                                isSamplingEvent: false
265                        ).with { if (!validate()) { errors.each { println it} } else save()}
266
267                        def samplingEvent = new EventDescription(
268                                name: 'Liver extraction',
269                                description: 'Liver sampling for transcriptomics arrays',
270                                protocol: liverSamplingProtocol,
271                                isSamplingEvent: true
272                        ).with { if (!validate()) { errors.each { println it} } else save()}
273
274                        def bloodSamplingEventDescription = new EventDescription(
275                                name: 'Blood extraction',
276                                description: 'Blood extraction targeted at lipid assays',
277                                protocol: bloodSamplingProtocol,
278                                isSamplingEvent: true
279                        ).with { if (!validate()) { errors.each { println it} } else save()}
280
281
282            def fastingTreatment = new EventDescription(
283                                name: 'Fasting treatment',
284                                description: 'Fasting Protocol NuGO PPSH',
285                                protocol: fastingProtocol,
286                                isSamplingEvent: false
287                        ).with { if (!validate()) { errors.each { println it} } else save()}
288
289                        println('Adding PPS3 study...')
290
291                        // studies
292                        def exampleStudy = new Study(
293                                template: studyTemplate,
294                                title:"NuGO PPS3 mouse study leptin module",
295                                code:"PPS3_leptin_module",
296                                researchQuestion:"Leptin etc.",
297                                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.",
298                                ecCode:"2007117.c",
299                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
300                        ).with { if (!validate()) { errors.each { println it} } else save()}
301
302                        def exampleHumanStudy = new Study(
303                                template: humanTemplate,
304                                title:"Human example template",
305                                code:"Human example code",
306                                researchQuestion:"Leptin etc.",
307                                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.",
308                                ecCode:"2007117.c",
309                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
310                        ).with { if (!validate()) { errors.each { println it} } else save()}
311
312                        def evLF = new Event(
313                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
314                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
315                                eventDescription: eventDiet,
316                                parameterStringValues: ['Diet':'10% fat (palm oil)']
317                        ).with { if (!validate()) { errors.each { println it} } else save()}
318
319                        def evHF = new Event(
320                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
321                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
322                                eventDescription: eventDiet,
323                                parameterStringValues: ['Diet':'45% fat (palm oil)']
324                        ).with { if (!validate()) { errors.each { println it} } else save()}
325
326                        def evBV = new Event(
327                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
328                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
329                                eventDescription: eventBoost,
330                                parameterStringValues: ['Compound':'Vehicle']
331                        ).with { if (!validate()) { errors.each { println it} } else save()}
332
333                        def evBL = new Event(
334                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
335                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
336                                eventDescription: eventBoost,
337                                parameterStringValues: ['Compound':'Leptin']
338                        ).with { if (!validate()) { errors.each { println it} } else save()}
339
340                        def evLF4 = new Event(
341                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
342                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
343                                eventDescription: eventDiet,
344                                parameterStringValues: ['Diet':'10% fat (palm oil)']
345                        ).with { if (!validate()) { errors.each { println it} } else save()}
346
347                        def evHF4 = new Event(
348                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
349                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
350                                eventDescription: eventDiet,
351                                parameterStringValues: ['Diet':'45% fat (palm oil)']
352                        ).with { if (!validate()) { errors.each { println it} } else save()}
353
354                        def evBV4 = new Event(
355                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
356                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
357                                eventDescription: eventBoost,
358                                parameterStringValues: ['Compound':'Vehicle']
359                        ).with { if (!validate()) { errors.each { println it} } else save()}
360
361                        def evBL4 = new Event(
362                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
363                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
364                                eventDescription: eventBoost,
365                                parameterStringValues: ['Compound':'Leptin']
366                        ).with { if (!validate()) { errors.each { println it} } else save()}
367
368                        def evS = new SamplingEvent(
369                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
370                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
371                                        eventDescription: samplingEvent,
372                                        parameterFloatValues: ['Sample weight':5F]
373                        ).with { if (!validate()) { errors.each { println it} } else save()}
374
375                        def evS4 = new SamplingEvent(
376                                        startTime: Date.parse('yyyy-MM-dd','2008-02-04'),
377                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
378                                        eventDescription: samplingEvent,
379                                        parameterFloatValues: ['Sample weight':5F]
380                        ).with { if (!validate()) { errors.each { println it} } else save()}
381
382                        // Add events to study
383                        exampleStudy
384                        .addToEvents(evLF)
385                        .addToEvents(evHF)
386                        .addToEvents(evBV)
387                        .addToEvents(evBL)
388                        .addToEvents(evLF4)
389                        .addToEvents(evHF4)
390                        .addToEvents(evBV4)
391                        .addToEvents(evBL4)
392                        .addToSamplingEvents(evS)
393                        .addToSamplingEvents(evS4)
394                        .save()
395
396                        def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
397                        .addToEvents(evLF)
398                        .addToEvents(evBV)
399                        .with { if (!validate()) { errors.each { println it} } else save()}
400
401                        def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
402                        .addToEvents(evLF)
403                        .addToEvents(evBL)
404                        .with { if (!validate()) { errors.each { println it} } else save()}
405
406                        def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
407                        .addToEvents(evHF)
408                        .addToEvents(evBV)
409                        .with { if (!validate()) { errors.each { println it} } else save()}
410
411                        def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
412                        .addToEvents(evHF)
413                        .addToEvents(evBL)
414                        .with { if (!validate()) { errors.each { println it} } else save()}
415
416                        def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
417                        .addToEvents(evLF4)
418                        .addToEvents(evBV4)
419                        .with { if (!validate()) { errors.each { println it} } else save()}
420
421                        def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
422                        .addToEvents(evLF4)
423                        .addToEvents(evBL4)
424                        .with { if (!validate()) { errors.each { println it} } else save()}
425
426                        def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
427                        .addToEvents(evHF4)
428                        .addToEvents(evBV4)
429                        .with { if (!validate()) { errors.each { println it} } else save()}
430
431                        def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
432                        .addToEvents(evHF4)
433                        .addToEvents(evBL4)
434                        .with { if (!validate()) { errors.each { println it} } else save()}
435
436            // Add subjects and samples and compose EventGroups
437
438                        def x=1
439                        80.times {
440                                def currentSubject = new Subject(
441                                        name: "A" + x++,
442                                        species: mouseTerm,
443                                        template: mouseTemplate,
444                                )
445                                .setFieldValue("Gender", "Male")
446                                .setFieldValue("Genotype", "C57/Bl6j")
447                                .setFieldValue("Age (weeks)", 17)
448                                .setFieldValue("Cage", "" + (int)(x/2))
449                                .with { if (!validate()) { errors.each { println it} } else save()}
450
451                                exampleStudy.addToSubjects(currentSubject)
452                                .with { if (!validate()) { errors.each { println it} } else save()}
453
454                                // Add subject to appropriate EventGroup
455                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
456                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
457                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
458                                else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
459                                else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
460                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
461                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
462                                else             { LFBV1.addToSubjects(currentSubject).save() }
463
464                        }
465
466                        // Add EventGroups to study
467                        exampleStudy
468                        .addToEventGroups(LFBV1)
469                        .addToEventGroups(LFBL1)
470                        .addToEventGroups(HFBV1)
471                        .addToEventGroups(HFBL1)
472                        .addToEventGroups(LFBV4)
473                        .addToEventGroups(LFBL4)
474                        .addToEventGroups(HFBV4)
475                        .addToEventGroups(HFBL4)
476                        .save()
477
478                        println 'Adding PPSH study'
479
480                        def humanStudy = new Study(
481                                template: studyTemplate,
482                                title:"NuGO PPS human study",
483                                code:"PPSH",
484                                researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
485                                description:"Human study",
486                                ecCode:"unknown",
487                                startDate: Date.parse('yyyy-MM-dd','2009-01-01')
488                        ).with { if (!validate()) { errors.each { println it} } else save()}
489
490                        def fastingEvent = new Event(
491                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
492                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
493                                        eventDescription: fastingTreatment,
494                                        parameterStringValues: ['Fasting period':'8h']);
495
496                        def bloodSamplingEvent = new SamplingEvent(
497                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
498                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
499                                        eventDescription: bloodSamplingEventDescription,
500                                        parameterFloatValues: ['Sample volume':4.5F]);
501
502                        def rootGroup = new EventGroup(name: 'Root group');
503                        rootGroup.addToEvents fastingEvent
504                        rootGroup.addToEvents bloodSamplingEvent
505                        rootGroup.save()
506
507            def y = 1
508            11.times {
509              def currentSubject = new Subject(
510                      name: "" + y++,
511                      species: humanTerm,
512                      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()}
513
514              rootGroup.addToSubjects currentSubject
515              rootGroup.save()
516
517              def currentSample = new Sample(
518                      name: currentSubject.name + '_B',
519                      material: bloodTerm,
520                      parentSubject: currentSubject,
521                      parentEvent: bloodSamplingEvent);
522
523
524              humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
525          }
526
527          humanStudy.addToEvents(fastingEvent)
528          humanStudy.addToSamplingEvents(bloodSamplingEvent)
529          humanStudy.addToEventGroups rootGroup
530          humanStudy.save()
531
532                        // Add clinical data
533
534                        def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
535                                name: 'Lipid profile',
536                                approved: true
537                        ).with { if (!validate()) { errors.each { println it} } else save()}
538
539                        def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
540                                name: 'LDL',
541                                unit: 'mg/dL',
542                                type: dbnp.data.FeatureType.QUANTITATIVE,
543                                referenceValues: '100 mg/dL',
544                                detectableLimit: 250,
545                                isDrug: false, isIntake: true, inSerum: true
546                        ).with { if (!validate()) { errors.each { println it} } else save()}
547
548                        def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
549                                name: 'HDL',
550                                unit: 'mg/dL',
551                                type: dbnp.data.FeatureType.QUANTITATIVE,
552                                referenceValues: '50 mg/dL',
553                                detectableLimit: 100,
554                                isDrug: false, isIntake: true, inSerum: true
555                        ).with { if (!validate()) { errors.each { println it} } else save()}
556
557                        lipidAssay.addToMeasurements ldlMeasurement
558                        lipidAssay.addToMeasurements hdlMeasurement
559
560                        def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
561                                assay: lipidAssay
562                        ).with { if (!validate()) { errors.each { println it} } else save()}
563
564                        humanStudy.samples*.each {
565                                new dbnp.clinicaldata.ClinicalFloatData(
566                                        assay: lipidAssayInstance,
567                                        measurement: ldlMeasurement,
568                                        sample: it.name,
569                                        value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
570                                ).with { if (!validate()) { errors.each { println it} } else save()}
571
572                                new dbnp.clinicaldata.ClinicalFloatData(
573                                        assay: lipidAssayInstance,
574                                        measurement: hdlMeasurement,
575                                        sample: it.name,
576                                        value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
577                                ).with { if (!validate()) { errors.each { println it} } else save()}
578                        }
579
580                        // Add assay to study capture module
581
582                        def clinicalModule = new AssayModule(
583                                name: 'Clinical data',
584                                type: AssayType.CLINICAL_DATA,
585                                platform: 'clinical measurements',
586                                url: 'http://localhost:8080/gscf'
587                        ).with { if (!validate()) { errors.each { println it} } else save()}
588
589                        def lipidAssayRef = new Assay(
590                                name: 'Lipid profiling',
591                                module: clinicalModule,
592                                externalAssayId: lipidAssayInstance.id
593                        ).with { if (!validate()) { errors.each { println it} } else save()}
594
595                        humanStudy.samples*.each {
596                                lipidAssayRef.addToSamples(it)
597                        }
598                        lipidAssayRef.save()
599
600                        humanStudy.addToAssays(lipidAssayRef);
601                        humanStudy.save()
602
603                }
604        }
605
606        def destroy = {
607        }
608} 
Note: See TracBrowser for help on using the repository browser.