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

Last change on this file since 187 was 187, checked in by keesvb, 10 years ago

changed definition of clean data layer, implemented it for the clinical data module, added demonstration to the sandbox

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