root/trunk/grails-app/conf/BootStrapStudies.groovy @ 936

Revision 936, 17.5 KB (checked in by t.w.abma@…, 4 years ago)

- Nimble removed, AAAA-plugin installed (based on Spring Security), login panel needs fix still, please login using gscf/login

  • Property svn:keywords set to Author Date Rev
Line 
1/**
2 * @Author kees
3 * @Since Jun 25, 2010
4 *
5 * Revision information:
6 * $Rev$
7 * $Author$
8 * $Date$
9 */
10
11import dbnp.studycapturing.*
12import dbnp.data.Term
13import dbnp.data.Ontology
14
15class BootStrapStudies {
16
17        /**
18         * Add example studies. This function is meant to be called only in development mode
19         */
20
21        public static void addExampleStudies(org.nmcdsp.plugins.aaaa.SecUser owner) {
22
23                // Look up the used ontologies which should be in the database by now
24                def speciesOntology = Ontology.getOrCreateOntologyByNcboId(1132)
25                def brendaOntology = Ontology.getOrCreateOntologyByNcboId(1005)
26                def nciOntology = Ontology.getOrCreateOntologyByNcboId(1032)
27                def chebiOntology = Ontology.getOrCreateOntologyByNcboId(1007)
28
29                // Look up the used templates which should also be in the database by now
30                def studyTemplate = Template.findByName("Academic study")
31                def mouseTemplate = Template.findByName("Mouse")
32                def humanTemplate = Template.findByName("Human")
33                def dietTreatmentTemplate = Template.findByName("Diet treatment")
34                def boostTreatmentTemplate = Template.findByName("Compound challenge")
35                def liverSamplingEventTemplate = Template.findByName("Liver extraction")
36                def fastingTreatmentTemplate = Template.findByName("Fasting treatment")
37                def bloodSamplingEventTemplate = Template.findByName("Blood extraction")
38                def humanTissueSampleTemplate = Template.findByName("Human tissue sample")
39                def humanBloodSampleTemplate = Template.findByName("Human blood sample")
40                def ccAssayTemplate = Template.findByName("Clinical chemistry assay")
41                def metAssayTemplate = Template.findByName("Metabolomics assay")
42
43                // Add terms manually, to avoid having to do many HTTP requests to the BioPortal website
44                println ".adding terms"
45
46
47                def mouseTerm = new Term(
48                        name: 'Mus musculus',
49                        ontology: speciesOntology,
50                        accession: '10090'
51                ).with { if (!validate()) { errors.each { println it} } else save()}
52
53                def humanTerm = new Term(
54                        name: 'Homo sapiens',
55                        ontology: speciesOntology,
56                        accession: '9606'
57                ).with { if (!validate()) { errors.each { println it} } else save()}
58
59                def arabTerm = new Term(
60                        name: 'Arabidopsis thaliana',
61                        ontology: speciesOntology,
62                        accession: '3702'
63                ).with { if (!validate()) { errors.each { println it} } else save()}
64
65                def tomatoTerm = new Term(
66                        name: 'Solanum lycopersicum',
67                        ontology: speciesOntology,
68                        accession: '4081'
69                ).with { if (!validate()) { errors.each { println it} } else save()}
70
71                def potatoTerm = new Term(
72                        name: 'Solanum tuberosum',
73                        ontology: speciesOntology,
74                        accession: '0000'
75                ).with { if (!validate()) { errors.each { println it} } else save()}
76
77                def bloodTerm = new Term(
78                        name: 'blood plasma',
79                        ontology: brendaOntology,
80                        accession: 'BTO:0000131'
81                ).with { if (!validate()) { errors.each { println it} } else save()}
82
83                def c57bl6Term = new Term(
84                        name: 'C57BL/6 Mouse',
85                        ontology: nciOntology,
86                        accession: 'C14424'
87                ).with { if (!validate()) { errors.each { println it} } else save()}
88
89                def glucoseTerm = new Term(
90                        name: 'Glucose',
91                        ontology: chebiOntology,
92                        accession: 'CHEBI:17234'
93                ).with { if (!validate()) { errors.each { println it} } else save()}
94
95                // Create a few persons, roles and Affiliations
96                println ".adding persons, roles and affiliations"
97                def affiliation1 = new PersonAffiliation(
98                        institute: "Science Institute NYC",
99                        department: "Department of Mathematics"
100                ).save();
101                def affiliation2 = new PersonAffiliation(
102                        institute: "InfoStats GmbH, Hamburg",
103                        department: "Life Sciences"
104                ).save();
105                def role1 = new PersonRole(
106                        name: "Principal Investigator"
107                ).save();
108                def role2 = new PersonRole(
109                        name: "Statician"
110                ).save();
111
112                // Create persons
113                def person1 = new Person(
114                        lastName: "Scientist",
115                        firstName: "John",
116                        gender: "Male",
117                        initials: "J.R.",
118                        email: "john@scienceinstitute.com",
119                        phone: "1-555-3049",
120                        address: "First street 2,NYC"
121                )
122                .addToAffiliations( affiliation1 )
123                .addToAffiliations( affiliation2 )
124                .save();
125
126                def person2 = new Person(
127                        lastName: "Statician",
128                        firstName: "Jane",
129                        gender: "Female",
130                        initials: "W.J.",
131                        email: "jane@statisticalcompany.de",
132                        phone: "49-555-8291",
133                        address: "Dritten strasse 38, Hamburg, Germany"
134                )
135                .addToAffiliations( affiliation2 )
136                .save();
137
138                // Create 30 persons to test pagination
139                def personCounter = 1;
140                30.times { new Person( firstName: "Person #${personCounter}", lastName: "Testperson", email: "email${personCounter++}@testdomain.com" ).save() }
141
142                // Create a few publications
143                println ".adding publications"
144                def publication1 = new Publication(
145                        title: "Postnatal development of hypothalamic leptin receptors",
146                        authorsList: "Cottrell EC, Mercer JG, Ozanne SE.",
147                        pubMedID: "20472140",
148                        comments: "Not published yet",
149                        DOI: "unknown"
150                )
151                .save();
152
153                def publication2 = new Publication(
154                        title: "Induction of regulatory T cells decreases adipose inflammation and alleviates insulin resistance in ob/ob mice",
155                        authorsList: "Ilan Y, Maron R, Tukpah AM, Maioli TU, Murugaiyan G, Yang K, Wu HY, Weiner HL.",
156                        pubMedID: "20445103",
157                        comments: "",
158                        DOI: ""
159                )
160                .save();
161
162                // Add example mouse study
163                println ".adding NuGO PPS3 leptin example study..."
164                def mouseStudy = new Study(
165                        template: studyTemplate,
166                        title:"NuGO PPS3 mouse study leptin module",
167                        code:"PPS3_leptin_module",
168                        researchQuestion:"Leptin etc.",
169                        ecCode:"2007117.c",
170                        startDate: Date.parse('yyyy-MM-dd','2008-01-02'),
171                        owner: owner
172                ).with { if (!validate()) { errors.each { println it} } else save()}
173
174                mouseStudy.setFieldValue('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." )
175                mouseStudy.save()
176
177                def evLF = new Event(
178                        startTime: 3600,
179                        endTime: 3600 +7 * 24 * 3600,
180                        template: dietTreatmentTemplate
181                )
182                .setFieldValue( 'Diet','low fat')
183
184                def evHF = new Event(
185                        startTime: 3600,
186                        endTime: 3600 +7 * 24 * 3600,
187                        template: dietTreatmentTemplate
188                )
189                .setFieldValue( 'Diet','high fat' )
190
191                def evBV = new Event(
192                        startTime: 3600,
193                        endTime: 3600 +7 * 24 * 3600,
194                        template: boostTreatmentTemplate
195                )
196                .setFieldValue( 'Control','true' )
197
198                def evBL = new Event(
199                        startTime: 3600,
200                        endTime: 3600 +7 * 24 * 3600,
201                        template: boostTreatmentTemplate
202                )
203                .setFieldValue( 'Control','false' )
204
205                def evLF4 = new Event(
206                        startTime: 3600,
207                        endTime: 3600 + 4 * 7 * 24 * 3600,
208                        template: dietTreatmentTemplate
209                )
210                .setFieldValue( 'Diet','low fat')
211
212                def evHF4 = new Event(
213                        startTime: 3600,
214                        endTime: 3600 + 4 * 7 * 24 * 3600,
215                        template: dietTreatmentTemplate
216                )
217                .setFieldValue( 'Diet','high fat' )
218
219                def evBV4 = new Event(
220                        startTime: 3600,
221                        endTime: 3600 + 4 * 7 * 24 * 3600,
222                        template: boostTreatmentTemplate
223                )
224                .setFieldValue( 'Control','true' )
225
226                def evBL4 = new Event(
227                        startTime: 3600,
228                        endTime: 3600 + 4 * 7 * 24 * 3600,
229                        template: boostTreatmentTemplate
230                )
231                .setFieldValue( 'Control','false' )
232
233                def evS = new SamplingEvent(
234                        startTime: 3600 +7 * 24 * 3600,
235                        template: liverSamplingEventTemplate,
236                        sampleTemplate: humanTissueSampleTemplate)
237                .setFieldValue('Sample weight',5F)
238
239                def evS4 = new SamplingEvent(
240                        startTime: 3600 +7 * 24 * 3600,
241                        template: liverSamplingEventTemplate,
242                        sampleTemplate: humanTissueSampleTemplate)
243                .setFieldValue('Sample weight',5F)
244
245                // Add events to study
246                mouseStudy
247                .addToEvents(evLF)
248                .addToEvents(evHF)
249                .addToEvents(evBV)
250                .addToEvents(evBL)
251                .addToEvents(evLF4)
252                .addToEvents(evHF4)
253                .addToEvents(evBV4)
254                .addToEvents(evBL4)
255                .addToSamplingEvents(evS)
256                .addToSamplingEvents(evS4)
257                .with { if (!validate()) { errors.each { println it} } else save()}
258
259                // Extra check if the SamplingEvents are saved correctly
260                evS.with { if (!validate()) { errors.each { println it} } else save()}
261                evS4.with { if (!validate()) { errors.each { println it} } else save()}
262
263                def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
264                .addToEvents(evLF)
265                .addToEvents(evBV)
266                .addToSamplingEvents(evS)
267
268                def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
269                .addToEvents(evLF)
270                .addToEvents(evBL)
271                .addToSamplingEvents(evS)
272
273                def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
274                .addToEvents(evHF)
275                .addToEvents(evBV)
276                .addToSamplingEvents(evS)
277
278                def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
279                .addToEvents(evHF)
280                .addToEvents(evBL)
281                .addToSamplingEvents(evS)
282
283                def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
284                .addToEvents(evLF4)
285                .addToEvents(evBV4)
286                .addToSamplingEvents(evS4)
287
288                def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
289                .addToEvents(evLF4)
290                .addToEvents(evBL4)
291                .addToSamplingEvents(evS4)
292
293                def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
294                .addToEvents(evHF4)
295                .addToEvents(evBV4)
296                .addToSamplingEvents(evS4)
297
298                def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
299                .addToEvents(evHF4)
300                .addToEvents(evBL4)
301                .addToSamplingEvents(evS4)
302               
303        // Add subjects and samples and compose EventGroups
304                def x=1
305                80.times {
306                        def currentSubject = new Subject(
307                                name: "A" + x++,
308                                species: mouseTerm,
309                                template: mouseTemplate,
310                        )
311                        .setFieldValue("Gender", "Male")
312                        .setFieldValue("Genotype", c57bl6Term)
313                        .setFieldValue("Age", 17)
314                        .setFieldValue("Cage", "" + (int)(x/2))
315
316                        // We have to save the subject first, otherwise the parentEvent property of the sample cannot be set
317                        // (this is possibly a Grails or Hibernate bug)
318                        mouseStudy.addToSubjects(currentSubject)
319                        currentSubject.with { if (!validate()) { errors.each { println it} } else save()}
320
321                        // Add subject to appropriate EventGroup
322                        if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
323                        else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
324                        else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
325                        else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
326                        else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
327                        else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
328                        else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
329                        else             { LFBV1.addToSubjects(currentSubject).save() }
330
331                        // Create sample
332                        def currentSample = new Sample(
333                                name: currentSubject.name + '_B',
334                                material: bloodTerm,
335                                template: humanBloodSampleTemplate,
336                                parentSubject: currentSubject,
337                                parentEvent: evS //x > 40 ? evS4 : evS
338                        );
339                        mouseStudy.addToSamples(currentSample)
340                        currentSample.with { if (!validate()) { errors.each { println it} } else save()}
341                        currentSample.setFieldValue( "Text on vial", "T" + (Math.random() * 100L) )
342                }
343
344                // Add EventGroups to study
345                mouseStudy
346                .addToEventGroups(LFBV1)
347                .addToEventGroups(LFBL1)
348                .addToEventGroups(HFBV1)
349                .addToEventGroups(HFBL1)
350                .addToEventGroups(LFBV4)
351                .addToEventGroups(LFBL4)
352                .addToEventGroups(HFBV4)
353                .addToEventGroups(HFBL4)
354                .with { if (!validate()) { errors.each { println it} } else save()}
355
356                // Add persons and publications to study
357                def studyperson1 = new StudyPerson( person: person1, role: role1 )
358                def studyperson2 = new StudyPerson( person: person2, role: role2 )
359
360                mouseStudy
361                .addToPersons( studyperson1 )
362                .addToPersons( studyperson2 )
363        .addToPublications( publication1 )
364        .addToPublications( publication2 )
365                .with { if (!validate()) { errors.each { println it} } else save()}
366
367                // Add example human study
368                println ".adding NuGO PPSH example study..."
369
370                def humanStudy = new Study(
371                        template: studyTemplate,
372                        title:"NuGO PPS human study",
373                        code:"PPSH",
374                        researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
375                        description:"Human study",
376                        ecCode:"unknown",
377                        startDate: Date.parse('yyyy-MM-dd','2008-01-14'),
378                        owner: owner
379                )
380                .setFieldValue( 'Description', "Human study performed at RRI; centres involved: RRI, IFR, TUM, Maastricht U." )
381                .with { if (!validate()) { errors.each { println it} } else save()}
382
383                def rootGroup = new EventGroup(name: 'Root group');
384
385                def fastingEvent = new Event(
386                        startTime: 3 * 24 * 3600 + 22 * 3600,
387                        endTime: 3 * 24 * 3600 + 30 * 3600,
388                        template: fastingTreatmentTemplate)
389                .setFieldValue('Fasting period','8h');
390
391                def bloodSamplingEventBefore = new SamplingEvent(
392                        startTime: 0,
393                        template: bloodSamplingEventTemplate,
394                        sampleTemplate: humanBloodSampleTemplate)
395                .setFieldValue('Sample volume',4.5F);
396
397                def bloodSamplingEventAfter = new SamplingEvent(
398                        startTime: 3 * 24 * 3600 + 30 * 3600,
399                        template: bloodSamplingEventTemplate,
400                        sampleTemplate: humanBloodSampleTemplate)
401                .setFieldValue('Sample volume',4.5F);
402
403                rootGroup.addToEvents fastingEvent
404                rootGroup.addToSamplingEvents bloodSamplingEventBefore
405                rootGroup.addToSamplingEvents bloodSamplingEventAfter
406                rootGroup.save()
407
408                humanStudy.addToEvents(fastingEvent)
409                humanStudy.addToSamplingEvents(bloodSamplingEventBefore)
410                humanStudy.addToSamplingEvents(bloodSamplingEventAfter)
411                humanStudy.addToEventGroups rootGroup
412
413                humanStudy.save()               
414
415                def y = 1
416                11.times {
417                        def currentSubject = new Subject(
418                                name: "" + y++,
419                                species: humanTerm,
420                                template: humanTemplate
421                        )
422                        .setFieldValue("Gender", (Math.random() > 0.5) ? "Male" : "Female")
423                        //.setFieldValue("DOB", new java.text.SimpleDateFormat("dd-mm-yy").parse("01-02-19" + (10 + (int) (Math.random() * 80))))
424                        .setFieldValue("DOB", new Date().parse("dd/mm/yyyy", ((10 + (int) Math.random() * 18) + "/0" + (1 + (int) (Math.random() * 8)) + "/19" + (10 + (int) (Math.random() * 80))) ))
425                        .setFieldValue("Age", 30)
426                        .setFieldValue("Height", Math.random() * 2F)
427                        .setFieldValue("Weight", Math.random() * 150F)
428                        .setFieldValue("BMI", 20 + Math.random() * 10F)
429
430                        humanStudy.addToSubjects(currentSubject)
431                        currentSubject.with { if (!validate()) { errors.each { println it} } else save()}
432
433                        rootGroup.addToSubjects currentSubject
434                        rootGroup.save()
435
436                        def currentSample = new Sample(
437                                name: currentSubject.name + '_B',
438                                material: bloodTerm,
439                                template: humanBloodSampleTemplate,
440                                parentSubject: currentSubject,
441                                parentEvent: bloodSamplingEventBefore
442                        );
443
444                        humanStudy.addToSamples(currentSample)
445                        currentSample.with { if (!validate()) { errors.each { println it} } else save()}
446                        currentSample.setFieldValue( "Text on vial", "T" + (Math.random() * 100L) )
447
448                        currentSample = new Sample(
449                                name: currentSubject.name + '_A',
450                                material: bloodTerm,
451                                template: humanBloodSampleTemplate,
452                                parentSubject: currentSubject,
453                                parentEvent: bloodSamplingEventAfter
454                        );
455
456                        humanStudy.addToSamples(currentSample)
457                        currentSample.with { if (!validate()) { errors.each { println it} } else save()}
458                        currentSample.setFieldValue( "Text on vial", "T" + (Math.random() * 100L) )
459                }
460
461                println ".adding persons and saving PPSH study..."
462                // Add persons to study
463                def studyperson3 = new StudyPerson( person: person1, role: role2 )
464                humanStudy
465                .addToPersons( studyperson3 )
466                .addToPublications( publication2 )
467                .with { if (!validate()) { errors.each { println it} } else save()}
468
469                println ".adding assay references to mouse example study..."
470
471                // Add SAM assay reference
472                def clinicalModule = new AssayModule(
473                        name: 'SAM module for clinical data',
474                        platform: 'clinical measurements',
475                        url: 'http://sam.nmcdsp.org'
476                ).with { if (!validate()) { errors.each { println it} } else save()}
477
478                // Add metabolomics assay reference
479                def metabolomicsModule = new AssayModule(
480                        name: 'Metabolomics module',
481                        platform: 'GCMS/LCMS',
482                        url: 'http://nmcdsp.nmcdsp.org'
483                ).with { if (!validate()) { errors.each { println it} } else save()}
484
485                def lipidAssayRef = new Assay(
486                        name: 'Lipid profiling',
487                        template: ccAssayTemplate,
488                        module: clinicalModule,
489                        externalAssayID: 'PPS3_SAM'
490                )
491
492                def metAssayRef = new Assay(
493                        name: 'Lipidomics profile',
494                        template: metAssayTemplate,
495                        module: metabolomicsModule,
496                        externalAssayID: 'PPS3_Lipidomics'
497                )
498                .setFieldValue('Spectrometry technique','LC/MS')
499
500                mouseStudy.samples*.each {
501                        lipidAssayRef.addToSamples(it)
502                        metAssayRef.addToSamples(it)
503                }
504
505                mouseStudy.addToAssays(lipidAssayRef);
506                mouseStudy.addToAssays(metAssayRef);
507                mouseStudy.save()
508
509                println ".adding assay references to human example study..."
510
511                def  glucoseAssayBRef = new Assay(
512                        name: 'Glucose assay before',
513                        template: ccAssayTemplate,
514                        module: clinicalModule,
515                        externalAssayID: 'PPSH-Glu-B'
516                )
517
518                def  glucoseAssayARef = new Assay(
519                        name: 'Glucose assay after',
520                        template: ccAssayTemplate,
521                        module: clinicalModule,
522                        externalAssayID: 'PPSH-Glu-A'
523                )
524
525                def metAssayRefB = new Assay(
526                        name: 'Lipidomics profile before',
527                        template: metAssayTemplate,
528                        module: metabolomicsModule,
529                        externalAssayID: 'PPSH_Lipidomics_start'
530                )
531                .setFieldValue('Spectrometry technique','GC/MS')
532
533                def metAssayRefA = new Assay(
534                        name: 'Lipidomics profile after',
535                        template: metAssayTemplate,
536                        module: metabolomicsModule,
537                        externalAssayID: 'PPSH_Lipidomics_end'
538                )
539                .setFieldValue('Spectrometry technique','GC/MS')
540
541                humanStudy.samples*.each {
542                        if (it.parentEvent.startTime == 0) {
543                                glucoseAssayBRef.addToSamples(it)
544                                metAssayRefB.addToSamples(it)
545                        }
546                        else {
547                                glucoseAssayARef.addToSamples(it)
548                                metAssayRefA.addToSamples(it)
549                        }
550                }
551
552
553                humanStudy.addToAssays(glucoseAssayARef)
554                humanStudy.addToAssays(glucoseAssayBRef)
555                humanStudy.addToAssays(metAssayRefA)
556                humanStudy.addToAssays(metAssayRefB)
557                humanStudy.save()
558
559        }
560
561}
Note: See TracBrowser for help on using the browser.