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

Last change on this file since 212 was 212, checked in by keesvb, 9 years ago

refactored template entity code into TemplateEntity?, added more template field types, updated BootStrap? with some more details on PPSH, changed code in study overview to get template field contents in a nicer way

  • Property svn:keywords set to
    Date
    Author
    Rev
File size: 13.3 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: 212 $
16 * $Author: keesvb $
17 * $Date: 2010-02-25 14:06:16 +0000 (do, 25 feb 2010) $
18 */
19class BootStrap {
20        def init = {servletContext ->
21                // define timezone
22                System.setProperty('user.timezone', 'CET')     
23
24                if (GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT) {
25                        printf("development bootstrapping....\n\n");
26
27                        // ontologies
28                        def speciesOntology = new Ontology(
29                                name: 'NCBI Taxonomy',
30                                shortName: 'Taxon',
31                                url: 'http://www.obofoundry.org/cgi-bin/detail.cgi?id=ncbi_taxonomy'
32                        ).with { if (!validate()) { errors.each { println it} } else save()}
33
34                        def humanBodyOntology = new Ontology(
35                                name: 'Foundational Model of Anatomy',
36                                shortName: 'HumanBody',
37                                url: 'http://bioportal.bioontology.org/ontologies/39966'
38                        ).with { if (!validate()) { errors.each { println it} } else save()}
39
40                        // terms
41                        def mouseTerm = new Term(
42                                name: 'Mus musculus',
43                                ontology: speciesOntology,
44                                accession: '10090'
45                        ).with { if (!validate()) { errors.each { println it} } else save()}
46                        def humanTerm = new Term(
47                                name: 'Homo sapiens',
48                                ontology: speciesOntology,
49                                accession: '9606'
50                        ).with { if (!validate()) { errors.each { println it} } else save()}
51
52                        def bloodTerm = new Term(
53                                name: 'Portion of blood',
54                                ontology: humanBodyOntology,
55                                accession: '9670'
56                        ).with { if (!validate()) { errors.each { println it} } else save()}
57
58                        def madmaxOntology = new Ontology(
59                                name: 'Madmax ontology',
60                                shortName: 'MDMX',
61                                url: 'madmax.bioinformatics.nl'
62                        ).with { if (!validate()) { errors.each { println it} } else save()}
63
64                        def treatmentTerm = new Term(
65                                name: 'ExperimentalProtocol',
66                                ontology: madmaxOntology,
67                                accession: 'P-MDMXGE-264'
68                        ).with { if (!validate()) { errors.each { println it} } else save()}
69
70                        def treatmentProtocol = new Protocol(
71                                name: 'MADMAX Experimental Protocol',
72                                reference: treatmentTerm
73                        ).with { if (!validate()) { errors.each { println it} } else save()}
74
75                        def fastingProtocol = new Protocol(
76                                name: 'Fasting',
77                                reference: treatmentTerm
78                        ).with { if (!validate()) { errors.each { println it} } else save()}
79
80                        treatmentProtocol
81                        .addToParameters(new ProtocolParameter(
82                                name: 'Diet',
83                                type: ProtocolParameterType.STRINGLIST,
84                                listEntries: ['10% fat (palm oil)','45% fat (palm oil)']))
85                        .addToParameters(new ProtocolParameter(
86                                name: 'Compound',
87                                type: ProtocolParameterType.STRINGLIST,
88                                listEntries: ['Vehicle','Leptin']))
89                        .addToParameters(new ProtocolParameter(
90                                name: 'Administration',
91                                type: ProtocolParameterType.STRING))
92                        .save()
93
94                        fastingProtocol
95                        .addToParameters(new ProtocolParameter(
96                                name: 'Fasting period',
97                                type: ProtocolParameterType.STRING))
98                        .save()
99
100                        // sampling event protocols
101
102                        def liverSamplingProtocol = new Protocol(
103                                name: 'Liver sampling'
104                        ).with { if (!validate()) { errors.each { println it} } else save()}
105
106                        liverSamplingProtocol
107                        .addToParameters(new ProtocolParameter(
108                                name: 'Sample weight',
109                                unit: 'mg',
110                                type: ProtocolParameterType.FLOAT))
111                        .save()
112
113                        def bloodSamplingProtocol = new Protocol(
114                                name: 'Liver sampling'
115                        ).with { if (!validate()) { errors.each { println it} } else save()}
116
117                        bloodSamplingProtocol
118                        .addToParameters(new ProtocolParameter(
119                                name: 'Sample volume',
120                                unit: 'ml',
121                                type: ProtocolParameterType.FLOAT))
122                        .save()
123
124                        // create system user
125                        /*
126                        def systemUser = userService.createUser(InstanceGenerator.user(
127                                username: 'system',
128                                pass: 'system',
129                                passConfirm: 'system',
130                                enabled: true
131                        ))
132                        */
133
134                        def genderField = new TemplateSubjectField(
135                                name: 'Gender',type: TemplateFieldType.STRINGLIST,
136                                listEntries: ['Male','Female'])
137                        .with { if (!validate()) { errors.each { println it} } else save()}
138                        def ageField = new TemplateSubjectField(
139                                name: 'Age',type: TemplateFieldType.INTEGER)
140                        .with { if (!validate()) { errors.each { println it} } else save()}
141
142                        // Mouse template
143                        def mouseTemplate = new Template(
144                                name: 'Mouse'
145                        ).addToSubjectFields(new TemplateSubjectField(
146                                name: 'Genotype',type: TemplateFieldType.STRINGLIST,
147                                listEntries: ['C57/Bl6j','wild type']))
148                        .addToSubjectFields(genderField)
149                        .addToSubjectFields(ageField)
150                        .addToSubjectFields(new TemplateSubjectField(
151                                name: 'Cage',type: TemplateFieldType.INTEGER))
152                        .addToSubjectFields(new TemplateSubjectField(
153                                name: 'Some double', type: TemplateFieldType.DOUBLE))
154                        .addToSubjectFields(new TemplateSubjectField(
155                                name: 'Some ontology', type: TemplateFieldType.ONTOLOGYTERM))
156                        .with { if (!validate()) { errors.each { println it} } else save()}
157
158                        // Human template
159                        def humanTemplate = new Template(
160                                name: 'Human')
161                        .addToSubjectFields(genderField)
162                        .addToSubjectFields(ageField)
163                        .addToSubjectFields(new TemplateSubjectField(
164                                name: 'DOB',type: TemplateFieldType.DATE))
165                        .addToSubjectFields(new TemplateSubjectField(
166                                name: 'Height',type: TemplateFieldType.DOUBLE))
167                        .addToSubjectFields(new TemplateSubjectField(
168                                name: 'Weight',type: TemplateFieldType.DOUBLE))
169                        .addToSubjectFields(new TemplateSubjectField(
170                                name: 'BMI',type: TemplateFieldType.DOUBLE))
171                        .with { if (!validate()) { errors.each { println it} } else save()}
172
173                        //events
174                        def eventTreatment = new EventDescription(
175                                name: 'Treatment',
176                                description: 'Experimental Treatment Protocol NuGO PPS3 leptin module',
177                                classification: treatmentTerm,
178                                protocol: treatmentProtocol,
179                                isSamplingEvent: false
180                        ).with { if (!validate()) { errors.each { println it} } else save()}
181
182                        def samplingEvent = new EventDescription(
183                                name: 'Liver extraction',
184                                description: 'Liver sampling for transcriptomics arrays',
185                                protocol: liverSamplingProtocol,
186                                isSamplingEvent: true
187                        ).with { if (!validate()) { errors.each { println it} } else save()}
188
189                        def bloodSamplingEvent = new EventDescription(
190                                name: 'Blood extraction',
191                                description: 'Blood extraction targeted at lipid assays',
192                                protocol: bloodSamplingProtocol,
193                                isSamplingEvent: true
194                        ).with { if (!validate()) { errors.each { println it} } else save()}
195
196
197                        def fastingTreatment = new EventDescription(
198                                name: 'Fasting treatment',
199                                description: 'Fasting Protocol NuGO PPSH',
200                                protocol: fastingProtocol,
201                                isSamplingEvent: false
202                        ).with { if (!validate()) { errors.each { println it} } else save()}
203
204                        println('Adding PPS3 study...')
205
206                        // studies
207                        def exampleStudy = new Study(
208                                title:"NuGO PPS3 mouse study leptin module",
209                                code:"PPS3_leptin_module",
210                                researchQuestion:"Leptin etc.",
211                                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.",
212                                ecCode:"2007117.c",
213                                startDate: Date.parse('yyyy-MM-dd','2007-12-11'),
214                                template: mouseTemplate
215                        ).with { if (!validate()) { errors.each { println it} } else save()}
216
217                        def x=1
218                        12.times {
219                                def currentSubject = new Subject(
220                                        name: "A" + x++,
221                                        species: mouseTerm,
222                                        template: mouseTemplate,
223                                        templateStringFields: ["Genotype" : "C57/Bl6j", "Gender" : "Male"],
224                                        templateIntegerFields: ["Age" : 17, "Cage" : (int)(x/2)]
225                                ).with { if (!validate()) { errors.each { println it} } else save()}
226
227                                exampleStudy.addToSubjects(currentSubject)
228                                .addToEvents(new Event(
229                                        subject: currentSubject,
230                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
231                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
232                                        eventDescription: eventTreatment,
233                                        parameterStringValues: ['Diet':'10% fat (palm oil)','Compound':'Vehicle','Administration':'intraperitoneal injection'])
234                                )
235                                .addToSamplingEvents(new SamplingEvent(
236                                        subject: currentSubject,
237                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
238                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
239                                        eventDescription: samplingEvent,
240                                        parameterFloatValues: ['Sample weight':5F])
241                                )
242                                .with { if (!validate()) { errors.each { println it} } else save()}
243                        }
244
245                        println 'Adding PPSH study'
246
247            def humanStudy = new Study(
248                                title:"NuGO PPS human study",
249                                code:"PPSH",
250                                researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
251                                description:"Human study",
252                                ecCode:"unknown",
253                                startDate: Date.parse('yyyy-MM-dd','2009-01-01'),
254                                template: humanTemplate
255                        ).with { if (!validate()) { errors.each { println it} } else save()}
256
257                        def y=1
258                        11.times {
259                                def currentSubject = new Subject(
260                                        name: "" + y++,
261                                        species: humanTerm,
262                                        template: humanTemplate,
263                                        templateStringFields: [
264                                                "Gender" : (boolean)(x/2) ? "Male" : "Female"
265                                                ],
266                                        templateDateFields: [
267                                                "DOB" : new java.text.SimpleDateFormat("dd-mm-yy").parse("01-02-19"+(10+(int)(Math.random()*80)))
268                                        ],
269                                        templateIntegerFields: [
270                                                "Age" : 30
271                                        ],
272                                        templateDoubleFields: [
273                                                "Height" : Math.random()*2F,
274                                                "Weight" : Math.random()*150F,
275                                                "BMI" : 20 + Math.random()*10F
276                                        ]
277                                ).with { if (!validate()) { errors.each { println it} } else save()}
278
279                                humanStudy.addToSubjects(currentSubject)
280                                .addToEvents(new Event(
281                                        subject: currentSubject,
282                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
283                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
284                                        eventDescription: fastingTreatment,
285                                        parameterStringValues: ['Fasting period':'8h'])
286                                )
287                                .addToSamplingEvents(new SamplingEvent(
288                                        subject: currentSubject,
289                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
290                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
291                                        eventDescription: bloodSamplingEvent,
292                                        parameterFloatValues: ['Sample volume':4.5F])
293                                        .addToSamples(new Sample(
294                                                name: currentSubject.name + '_B',
295                                                material: bloodTerm
296                                ))
297                                ).with { if (!validate()) { errors.each { println it} } else save()}
298                        }
299
300//                        new Study(title:"example",code:"Excode",researchQuestion:"ExRquestion",description:"Exdescription",ecCode:"ExecCode",dateCreated:new Date(),lastUpdated:new Date(),startDate:new Date()).save()
301//                        new Study(title:"testAgain",code:"testcode",researchQuestion:"testRquestion",description:"testdescription",ecCode:"testCode",dateCreated:new Date(),lastUpdated:new Date(),startDate:new Date()).save()
302//                        new Study(title:"Exampletest",code:"Examplecode",researchQuestion:"ExampleRquestion",description:"Exampledescription",ecCode:"ExampleecCode",dateCreated:new Date(),lastUpdated:new Date(),startDate:new Date()).save()
303
304                        // Add clinical data
305
306                        def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
307                                name: 'Lipid profile',
308                                approved: true
309                        ).with { if (!validate()) { errors.each { println it} } else save()}
310
311                        def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
312                                name: 'LDL',
313                                unit: 'mg/dL',
314                                type: dbnp.data.FeatureType.QUANTITATIVE,
315                                referenceValues: '100 mg/dL',
316                                detectableLimit: 250,
317                                isDrug: false, isIntake: true, inSerum: true
318                        ).with { if (!validate()) { errors.each { println it} } else save()}
319
320                        def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
321                                name: 'HDL',
322                                unit: 'mg/dL',
323                                type: dbnp.data.FeatureType.QUANTITATIVE,
324                                referenceValues: '50 mg/dL',
325                                detectableLimit: 100,
326                                isDrug: false, isIntake: true, inSerum: true
327                        ).with { if (!validate()) { errors.each { println it} } else save()}
328
329                        lipidAssay.addToMeasurements ldlMeasurement
330                        lipidAssay.addToMeasurements hdlMeasurement
331
332                        def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
333                                assay: lipidAssay
334                        ).with { if (!validate()) { errors.each { println it} } else save()}
335
336                        humanStudy.giveSamples()*.each {
337                                new dbnp.clinicaldata.ClinicalFloatData(
338                                        assay: lipidAssayInstance,
339                                        measurement: ldlMeasurement,
340                                        sample: it.name,
341                                        value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
342                                ).with { if (!validate()) { errors.each { println it} } else save()}
343
344                                new dbnp.clinicaldata.ClinicalFloatData(
345                                        assay: lipidAssayInstance,
346                                        measurement: hdlMeasurement,
347                                        sample: it.name,
348                                        value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
349                                ).with { if (!validate()) { errors.each { println it} } else save()}
350                        }
351
352                        // Add assay to study capture module
353
354                        def clinicalModule = new AssayModule(
355                                name: 'Clinical data',
356                                type: AssayType.CLINICAL_DATA,
357                                platform: 'clinical measurements',
358                                url: 'http://localhost:8080/gscf'
359                        ).with { if (!validate()) { errors.each { println it} } else save()}
360
361                        def lipidAssayRef = new Assay(
362                                name: 'Lipid profiling',
363                                module: clinicalModule,
364                                externalAssayId: lipidAssayInstance.id
365                        ).with { if (!validate()) { errors.each { println it} } else save()}
366
367                        humanStudy.giveSamples()*.each {
368                                lipidAssayRef.addToSamples(it)
369                        }
370                        lipidAssayRef.save()
371
372                        humanStudy.addToAssays(lipidAssayRef);
373                        humanStudy.save()
374                }
375        }
376
377        def destroy = {
378        }
379} 
Note: See TracBrowser for help on using the repository browser.