root/trunk/grails-app/conf/BootStrap.groovy @ 187

Revision 187, 12.3 KB (checked in by keesvb, 4 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
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$
15 * $Author$
16 * $Date$
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 browser.