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

Last change on this file since 389 was 389, checked in by duh, 9 years ago
  • reverted changes of revisions 386, 387 and 388 as they completely broke the repository (you need to get cake now! ;)
  • committed development version of modified study capture wizard (works until events)
  • Property svn:keywords set to Author Rev Date
File size: 32.9 KB
RevLine 
[92]1import dbnp.studycapturing.*
[15]2
[106]3import dbnp.data.Ontology
4import dbnp.data.Term
5
[15]6/**
7 * Application Bootstrapper
[92]8 * @Author Jeroen Wesbeek
9 * @Since 20091021
[15]10 *
11 * Revision information:
12 * $Rev: 389 $
13 * $Author: duh $
14 * $Date: 2010-04-28 14:28:39 +0000 (wo, 28 apr 2010) $
15 */
[4]16class BootStrap {
[92]17        def init = {servletContext ->
[138]18                // define timezone
[246]19                System.setProperty('user.timezone', 'CET')
[95]20
[266]21                // we could also check if we are in development by GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT
22                if (Study.count() == 0) {
[360]23                        println ".development bootstrapping...";
[347]24
[353]25                        // add NCBI species ontology
26                        println ".adding NCBI species ontology"
27                        def speciesOntology = new Ontology(
28                                name: 'NCBI organismal classification',
29                                description: 'A taxonomic classification of living organisms and associated artifacts for their controlled description within the context of databases.',
30                                url: 'http://www.ncbi.nlm.nih.gov/Taxonomy/taxonomyhome.html/',
31                                versionNumber: '1.2',
32                                ncboId: '1132',
33                                ncboVersionedId: '38802'
34                        ).with { if (!validate()) { errors.each { println it} } else save()}
[349]35
[353]36                        // add TERMS
37                        println ".adding mouse term"
38                        def mouseTerm = new Term(
39                                name: 'Mus musculus',
40                                ontology: speciesOntology,
41                                accession: '10090'
42                        ).with { if (!validate()) { errors.each { println it} } else save()}
43                        println ".adding human term"
44                        def humanTerm = new Term(
45                                name: 'Homo sapiens',
46                                ontology: speciesOntology,
47                                accession: '9606'
48                        ).with { if (!validate()) { errors.each { println it} } else save()}
[349]49
[370]50                        // Create a few persons, roles and Affiliations
51                        println ".adding persons, roles and affiliations"
52                        def affiliation1 = new PersonAffiliation(
53                            name: "Science Institute NYC"
54                        ).save();
55                        def affiliation2 = new PersonAffiliation(
56                            name: "InfoStats GmbH, Hamburg"
57                        ).save();
58                        def role1 = new PersonRole(
59                            name: "Principal Investigator"
60                        ).save();
61                        def role2 = new PersonRole(
62                            name: "Statician"
63                        ).save();
[379]64
65                        // Create 30 roles to test pagination
66                        def roleCounter = 1;
67                        30.times { new PersonRole( name: "Rol #${roleCounter++}" ).save() }
68
69                        // Create persons
[370]70                        def person1 = new Person(
71                            lastName: "Scientist",
72                            firstName: "John",
[382]73                            gender: "Male",
74                            initials: "J.R.",
[370]75                            email: "john@scienceinstitute.com",
76                            phone: "1-555-3049",
77                            address: "First street 2,NYC"
78                        )
79                        .addToAffiliations( affiliation1 )
80                        .addToAffiliations( affiliation2 )
81                        .save();
82                       
83                        def person2 = new Person(
84                            lastName: "Statician",
85                            firstName: "Jane",
[382]86                            gender: "Female",
87                            initials: "W.J.",
[370]88                            email: "jane@statisticalcompany.de",
89                            phone: "49-555-8291",
90                            address: "Dritten strasse 38, Hamburg, Germany"
91                        )
92                        .addToAffiliations( affiliation2 )
93                        .save();
[353]94
[379]95                        // Create 30 persons to test pagination
96                        def personCounter = 1;
[382]97                        30.times { new Person( firstName: "Person #${personCounter}", lastName: "Testperson", email: "email${personCounter++}@testdomain.com" ).save() }
[379]98
[347]99 /*   COMMENTED OUT BECAUSE IT BREAKS EVERYTHING AFTER REFACTORING THE DATAMODEL
100
[92]101                        // ontologies
102                        def speciesOntology = new Ontology(
[136]103                                name: 'NCBI Taxonomy',
104                                shortName: 'Taxon',
[92]105                                url: 'http://www.obofoundry.org/cgi-bin/detail.cgi?id=ncbi_taxonomy'
[139]106                        ).with { if (!validate()) { errors.each { println it} } else save()}
[92]107
[186]108                        def humanBodyOntology = new Ontology(
109                                name: 'Foundational Model of Anatomy',
110                                shortName: 'HumanBody',
111                                url: 'http://bioportal.bioontology.org/ontologies/39966'
112                        ).with { if (!validate()) { errors.each { println it} } else save()}
113
[339]114                        def nciOntology = new Ontology(
115                                name: 'NCI Thesaurus',
116                                shortName: 'NCI',
117                                url: 'http://bioportal.bioontology.org/ontologies/42331'
118                        ).with { if (!validate()) { errors.each { println it} } else save()}
119
[92]120                        // terms
121                        def mouseTerm = new Term(
122                                name: 'Mus musculus',
123                                ontology: speciesOntology,
124                                accession: '10090'
[139]125                        ).with { if (!validate()) { errors.each { println it} } else save()}
[92]126                        def humanTerm = new Term(
127                                name: 'Homo sapiens',
128                                ontology: speciesOntology,
129                                accession: '9606'
[139]130                        ).with { if (!validate()) { errors.each { println it} } else save()}
[339]131                        def arabTerm = new Term(
132                                name: 'Arabidopsis thaliana',
133                                ontology: speciesOntology,
134                                accession: '3702'
135                        ).with { if (!validate()) { errors.each { println it} } else save()}
136                       
[389]137                        def bloodTerm = new Term(
138                                name: 'Portion of blood',
139                                ontology: humanBodyOntology,
140                                accession: '9670'
141                        ).with { if (!validate()) { errors.each { println it} } else save()}
[186]142
[339]143                        def c57bl6Term = new Term(
144                                name: 'C57BL/6 Mouse',
145                                ontology: nciOntology,
146                                accession: 'C14424'
147                        ).with { if (!validate()) { errors.each { println it} } else save()}
148
[139]149                        def madmaxOntology = new Ontology(
150                                name: 'Madmax ontology',
151                                shortName: 'MDMX',
152                                url: 'madmax.bioinformatics.nl'
153                        ).with { if (!validate()) { errors.each { println it} } else save()}
154
155                        def treatmentTerm = new Term(
156                                name: 'ExperimentalProtocol',
157                                ontology: madmaxOntology,
158                                accession: 'P-MDMXGE-264'
159                        ).with { if (!validate()) { errors.each { println it} } else save()}
160
[232]161                        def dietProtocol = new Protocol(
162                                name: 'Diet treatment Protocol NuGO PPS3 leptin module',
[139]163                                reference: treatmentTerm
164                        ).with { if (!validate()) { errors.each { println it} } else save()}
165
[232]166                        def boostProtocol = new Protocol(
167                                name: 'Boost treatment Protocol NuGO PPS3 leptin module',
168                                reference: treatmentTerm
169                        ).with { if (!validate()) { errors.each { println it} } else save()}
170
[212]171                        def fastingProtocol = new Protocol(
172                                name: 'Fasting',
[149]173                                reference: treatmentTerm
174                        ).with { if (!validate()) { errors.each { println it} } else save()}
175
[235]176
177                        // ParameterStringListItems
178                        def oil10= new ParameterStringListItem(
179                                name: '10% fat (palm oil)'
180                        ).with { if (!validate()) { errors.each { println it} } else save()}
181                        def oil45= new ParameterStringListItem(
182                                name: '45% fat (palm oil)'
183                        ).with { if (!validate()) { errors.each { println it} } else save()}
184                        def vehicle= new ParameterStringListItem(
185                                name: 'Vehicle'
186                        ).with { if (!validate()) { errors.each { println it} } else save()}
187                        def leptin= new ParameterStringListItem(
188                                name: 'Leptin'
189                        ).with { if (!validate()) { errors.each { println it} } else save()}
190
191
[232]192                        dietProtocol
[139]193                        .addToParameters(new ProtocolParameter(
194                                name: 'Diet',
195                                type: ProtocolParameterType.STRINGLIST,
[235]196                                listEntries: [oil10,oil45]))
[232]197                        .save()
198
199                        boostProtocol
[139]200                        .addToParameters(new ProtocolParameter(
201                                name: 'Compound',
202                                type: ProtocolParameterType.STRINGLIST,
[235]203                                listEntries: [vehicle,leptin]))
[139]204                        .save()
205
[212]206                        fastingProtocol
[149]207                        .addToParameters(new ProtocolParameter(
[212]208                                name: 'Fasting period',
[149]209                                type: ProtocolParameterType.STRING))
210                        .save()
211
[235]212
[186]213                        // sampling event protocols
[149]214
[186]215                        def liverSamplingProtocol = new Protocol(
216                                name: 'Liver sampling'
217                        ).with { if (!validate()) { errors.each { println it} } else save()}
[149]218
[186]219                        liverSamplingProtocol
220                        .addToParameters(new ProtocolParameter(
221                                name: 'Sample weight',
222                                unit: 'mg',
223                                type: ProtocolParameterType.FLOAT))
224                        .save()
225
226                        def bloodSamplingProtocol = new Protocol(
[246]227                                name: 'Blood sampling'
[186]228                        ).with { if (!validate()) { errors.each { println it} } else save()}
229
230                        bloodSamplingProtocol
231                        .addToParameters(new ProtocolParameter(
232                                name: 'Sample volume',
233                                unit: 'ml',
234                                type: ProtocolParameterType.FLOAT))
235                        .save()
[346]236 */
[92]237                        // create system user
[224]238
239                        /*def systemUser = userService.createUser(InstanceGenerator.user(
[92]240                                username: 'system',
241                                pass: 'system',
242                                passConfirm: 'system',
243                                enabled: true
[224]244                        ))*/
[92]245
[364]246 
[224]247                        def genderField = new TemplateField(
[186]248                                name: 'Gender',type: TemplateFieldType.STRINGLIST,
[232]249                                listEntries: [new TemplateFieldListItem(name:'Male'),new TemplateFieldListItem(name: 'Female')])
[186]250                        .with { if (!validate()) { errors.each { println it} } else save()}
[253]251
[224]252                        def ageField = new TemplateField(
[269]253                                name: 'Age (years)',type: TemplateFieldType.INTEGER,unit: 'years')
[212]254                        .with { if (!validate()) { errors.each { println it} } else save()}
[186]255
[339]256                        def genotypeField = new TemplateField(
257                                name: 'Genotype', type: TemplateFieldType.ONTOLOGYTERM)
258                        .with { if (!validate()) { errors.each { println it} } else save()}
259
260                        def genotypeTypeField = new TemplateField(
261                                name: 'Genotype type',type: TemplateFieldType.STRINGLIST,
[375]262                                listEntries: [new TemplateFieldListItem(name:'wildtype'),
263                                        new TemplateFieldListItem(name:'transgenic'),
[339]264                                        new TemplateFieldListItem(name:'knock-out'),
265                                        new TemplateFieldListItem(name:'knock-in')])
266                        .with { if (!validate()) { errors.each { println it} } else save()}
267
268
[232]269                        // Nutritional study template
270
[364]271                        println ".adding academic study template..."
[232]272                        def studyTemplate = new Template(
[269]273                                name: 'Academic study', entity: dbnp.studycapturing.Study)
[375]274                                .addToFields(new TemplateField(name: 'Description',type: TemplateFieldType.TEXT))
[366]275                                .addToFields(new TemplateField(name: 'Study code',type: TemplateFieldType.STRING))
276                                .addToFields(new TemplateField(name: 'Objectives',type: TemplateFieldType.TEXT))
[331]277                                .addToFields(new TemplateField(name: 'Consortium',type: TemplateFieldType.STRING))
278                                .addToFields(new TemplateField(name: 'Cohort name',type: TemplateFieldType.STRING))
279                                .addToFields(new TemplateField(name: 'Time zone',type: TemplateFieldType.STRING))
280                                .addToFields(new TemplateField(name: 'Responsible scientist',type: TemplateFieldType.STRING))
[366]281                                .addToFields(new TemplateField(name: 'Lab id',type: TemplateFieldType.STRING))
[331]282                                .addToFields(new TemplateField(name: 'Institute',type: TemplateFieldType.STRING))
[269]283                        .with { if (!validate()) { errors.each { println it} } else save()}
[232]284
[92]285                        // Mouse template
[364]286                        println ".adding mouse subject template..."
[92]287                        def mouseTemplate = new Template(
[269]288                                name: 'Mouse', entity: dbnp.studycapturing.Subject)
289                        .addToFields(new TemplateField(
290                                name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM))
[339]291                        .addToFields(genotypeField)
292                        .addToFields(genotypeTypeField)
[224]293                        .addToFields(genderField)
294                        .addToFields(new TemplateField(
[269]295                                name: 'Age (weeks)', type: TemplateFieldType.INTEGER, unit: 'weeks'))
[224]296                        .addToFields(new TemplateField(
[269]297                                name: 'Age type',type: TemplateFieldType.STRINGLIST,
298                                listEntries: [new TemplateFieldListItem(name:'postnatal'),new TemplateFieldListItem(name:'embryonal')]))
[224]299                        .addToFields(new TemplateField(
[269]300                                name: 'Cage',type: TemplateFieldType.STRING))
301                        .addToFields(new TemplateField(
302                                name: '#Mice in cage',type: TemplateFieldType.INTEGER))
303                        .addToFields(new TemplateField(
[290]304                                name: 'Litter size',type: TemplateFieldType.INTEGER))
[269]305                        .addToFields(new TemplateField(
306                                name: 'Weight (g)', type: TemplateFieldType.DOUBLE, unit: 'gram'))
[139]307                        .with { if (!validate()) { errors.each { println it} } else save()}
[97]308
[186]309                        // Human template
[364]310                        println ".adding human subject template..."
[186]311                        def humanTemplate = new Template(
[224]312                                name: 'Human', entity: dbnp.studycapturing.Subject)
313                        .addToFields(genderField)
314                        .addToFields(ageField)
315                        .addToFields(new TemplateField(
[212]316                                name: 'DOB',type: TemplateFieldType.DATE))
[224]317                        .addToFields(new TemplateField(
[269]318                                name: 'Height',type: TemplateFieldType.DOUBLE, unit: 'm'))
[224]319                        .addToFields(new TemplateField(
[269]320                                name: 'Weight (kg)',type: TemplateFieldType.DOUBLE, unit: 'kg'))
[224]321                        .addToFields(new TemplateField(
[269]322                                name: 'BMI',type: TemplateFieldType.DOUBLE, unit: 'kg/m2'))
323                        .addToFields(new TemplateField(
324                                name: 'Race',type: TemplateFieldType.STRING))
325                        .addToFields(new TemplateField(
[339]326                                name: 'Waist circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
[269]327                        .addToFields(new TemplateField(
[339]328                                name: 'Hip circumference',type: TemplateFieldType.FLOAT, unit: 'cm'))
[269]329                        .addToFields(new TemplateField(
330                                name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
331                        .addToFields(new TemplateField(
332                                name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg'))
333                        .addToFields(new TemplateField(
334                                name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min'))
335                        .addToFields(new TemplateField(
336                                name: 'Run-in-food',type: TemplateFieldType.TEXT))
[186]337                        .with { if (!validate()) { errors.each { println it} } else save()}
[139]338
[269]339
[339]340                        def sampleDescriptionField = new TemplateField(
341                                name: 'Description',type: TemplateFieldType.TEXT)
342                        .with { if (!validate()) { errors.each { println it} } else save()}
343                        def sampleTypeField = new TemplateField(
344                                name: 'SampleType',type: TemplateFieldType.STRING)
345                        .with { if (!validate()) { errors.each { println it} } else save()}
346                        def sampleProtocolField = new TemplateField(
347                                name: 'SampleProtocol',type: TemplateFieldType.STRING)
348                        .with { if (!validate()) { errors.each { println it} } else save()}
349                        def sampleVialTextField = new TemplateField(
350                                name: 'Text on vial',type: TemplateFieldType.STRING)
351                        .with { if (!validate()) { errors.each { println it} } else save()}
352
[269]353                        // Human sample template
[375]354                        println ".adding human sample template..."
[269]355                        def humanSampleTemplate = new Template(
356                                name: 'Human tissue sample', entity: dbnp.studycapturing.Sample)
[339]357                        .addToFields(sampleDescriptionField)
358                        .addToFields(sampleTypeField)
359                        .addToFields(sampleProtocolField)
360                        .addToFields(sampleVialTextField)
361                        .with { if (!validate()) { errors.each { println it} } else save()}
362
363                        //Plant template
[375]364                        println ".adding plant template..."
[339]365                        def plantTemplate = new Template(
366                                name: 'Plant template', entity: dbnp.studycapturing.Subject)
[269]367                        .addToFields(new TemplateField(
[339]368                                name: 'Variety', type: TemplateFieldType.STRING))
[269]369                        .addToFields(new TemplateField(
[339]370                                name: 'Ecotype', type: TemplateFieldType.STRING))
371                        .addToFields(genotypeField)
372                        .addToFields(genotypeTypeField)
[269]373                        .addToFields(new TemplateField(
[339]374                                name: 'Growth location', type: TemplateFieldType.STRINGLIST,
375                                listEntries: [new TemplateFieldListItem(name:'Greenhouse'),new TemplateFieldListItem(name: 'Field')]))
[269]376                        .addToFields(new TemplateField(
[339]377                                name: 'Room', type: TemplateFieldType.STRING,
378                                comment: 'Chamber number in case of Greenhouse'))
379                        .addToFields(new TemplateField(
380                                name: 'Position X', type: TemplateFieldType.FLOAT))
381                        .addToFields(new TemplateField(
382                                name: 'Position Y', type: TemplateFieldType.FLOAT))
383                        .addToFields(new TemplateField(
384                                name: 'Block', type: TemplateFieldType.STRING))
385                        .addToFields(new TemplateField(
386                                name: 'Temperature at day', type: TemplateFieldType.FLOAT))
387                        .addToFields(new TemplateField(
388                                name: 'Temperature at night', type: TemplateFieldType.FLOAT))
389                        .addToFields(new TemplateField(
390                                name: 'Photo period', type: TemplateFieldType.STRING))
391                        .addToFields(new TemplateField(
392                                name: 'Light intensity', type: TemplateFieldType.STRING))
393                        .addToFields(new TemplateField(
394                                name: 'Start date', type: TemplateFieldType.DATE))
395                        .addToFields(new TemplateField(
396                                name: 'Harvest date', type: TemplateFieldType.DATE))
397                        .addToFields(new TemplateField(
398                                name: 'Growth type', type: TemplateFieldType.STRINGLIST,
399                                listEntries: [new TemplateFieldListItem(name:'Standard'),new TemplateFieldListItem(name: 'Experimental')]))
400                        .addToFields(new TemplateField(
401                                name: 'Growth protocol', type: TemplateFieldType.TEXT))
402                        .addToFields(new TemplateField(
403                                name: 'Harvest delay', type: TemplateFieldType.TEXT))
[269]404                        .with { if (!validate()) { errors.each { println it} } else save()}
405
[375]406                        println ".adding plant sample template..."
[339]407                        def plantSampleTemplate = new Template(
408                                name: 'Plant sample', entity: dbnp.studycapturing.Sample)
409                        .addToFields(sampleDescriptionField)
410                        .addToFields(sampleTypeField)
411                        .addToFields(sampleProtocolField)
412                        .addToFields(sampleVialTextField)
413                        .with { if (!validate()) { errors.each { println it} } else save()}
414
415
[375]416                        // Event templates
417                        println ".adding event templates..."
[384]418
419                        def startDateField = new TemplateField(
420                                name: 'Start time', type: TemplateFieldType.DATE
421                        ).with { if (!validate()) { errors.each { println it} } else save()}
422
423                        def endDateField = new TemplateField(
424                                name: 'End time', type: TemplateFieldType.DATE
425                        ).with { if (!validate()) { errors.each { println it} } else save()}
426
427                        Event.systemFields = [startDateField,endDateField]
428
[370]429                        def dietTreatmentTemplate = new Template(
[383]430                                name: 'Diet treatment', entity: dbnp.studycapturing.Event)
[370]431                        .addToFields(sampleDescriptionField)
432                        .addToFields(new TemplateField(
[375]433                                name: 'Diet', type: TemplateFieldType.STRINGLIST,
434                                listEntries: [new TemplateFieldListItem(name:'10% fat (palm oil)'),new TemplateFieldListItem(name: '45% fat (palm oil)')]))
[370]435                        .with { if (!validate()) { errors.each { println it} } else save()}
436
437                        def boostTreatmentTemplate = new Template(
[383]438                                name: 'Boost treatment', entity: dbnp.studycapturing.Event)
[370]439                        .addToFields(sampleDescriptionField)
440                        .addToFields(new TemplateField(
[375]441                                name: 'Compound', type: TemplateFieldType.STRING,
442                                listEntries: [new TemplateFieldListItem(name:'Vehicle'),new TemplateFieldListItem(name: 'Leptin')]))
[370]443                        .with { if (!validate()) { errors.each { println it} } else save()}
444
445                        /*
[139]446                        //events
[232]447                        def eventDiet = new EventDescription(
448                                name: 'Diet treatment',
449                                description: 'Diet treatment (fat percentage)',
[139]450                                classification: treatmentTerm,
[232]451                                protocol: dietProtocol,
[186]452                                isSamplingEvent: false
[139]453                        ).with { if (!validate()) { errors.each { println it} } else save()}
454
[232]455                        def eventBoost = new EventDescription(
456                                name: 'Boost treatment',
457                                description: 'Boost treatment (leptin or vehicle)',
458                                classification: treatmentTerm,
459                                protocol: boostProtocol,
460                                isSamplingEvent: false
461                        ).with { if (!validate()) { errors.each { println it} } else save()}
462
[186]463                        def samplingEvent = new EventDescription(
464                                name: 'Liver extraction',
465                                description: 'Liver sampling for transcriptomics arrays',
466                                protocol: liverSamplingProtocol,
467                                isSamplingEvent: true
468                        ).with { if (!validate()) { errors.each { println it} } else save()}
469
[232]470                        def bloodSamplingEventDescription = new EventDescription(
[186]471                                name: 'Blood extraction',
472                                description: 'Blood extraction targeted at lipid assays',
473                                protocol: bloodSamplingProtocol,
474                                isSamplingEvent: true
475                        ).with { if (!validate()) { errors.each { println it} } else save()}
476
477
[253]478            def fastingTreatment = new EventDescription(
[212]479                                name: 'Fasting treatment',
480                                description: 'Fasting Protocol NuGO PPSH',
481                                protocol: fastingProtocol,
[186]482                                isSamplingEvent: false
[165]483                        ).with { if (!validate()) { errors.each { println it} } else save()}
[149]484
[186]485                        println('Adding PPS3 study...')
[370]486                        */
[97]487                        // studies
[375]488                        println ".adding NuGO PPS3 leptin example study..."
[136]489                        def exampleStudy = new Study(
[232]490                                template: studyTemplate,
[136]491                                title:"NuGO PPS3 mouse study leptin module",
492                                code:"PPS3_leptin_module",
493                                researchQuestion:"Leptin etc.",
494                                ecCode:"2007117.c",
[230]495                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
[370]496                        )
497                        .with { if (!validate()) { errors.each { println it} } else save()}
[139]498
[375]499                        exampleStudy.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." )
500                        exampleStudy.save()
501
502                        println ".adding NuGO PPSH example study..."
[329]503                        def exampleHumanStudy = new Study(
[375]504                                template: studyTemplate,
[329]505                                title:"Human example template",
506                                code:"Human example code",
507                                researchQuestion:"Leptin etc.",
508                                ecCode:"2007117.c",
509                                startDate: Date.parse('yyyy-MM-dd','2007-12-11')
[370]510                        )
511                        .with { if (!validate()) { errors.each { println it} } else save()}
[329]512
[375]513                        exampleHumanStudy.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." )
514                        exampleHumanStudy.save()
515
[367]516                        def evLF = new Event(
[389]517                                template: dietTreatmentTemplate
[370]518                        )
519                        .with { if (!validate()) { errors.each { println it} } else save()}
[384]520
[389]521                        evLF.setStartTime(Date.parse('yyyy-MM-dd','2008-01-07'))
522                        evLF.setEndTime(Date.parse('yyyy-MM-dd','2008-01-14'))
523
[384]524                        evLF.setFieldValue( 'Diet','10% fat (palm oil)' )
[375]525                        evLF.save(flush:true)
[384]526
527                        println "Saved diet treatment"
[375]528                        // TODO: find out why Diet is not set and Compound is
[232]529
530                        def evHF = new Event(
[389]531                                template: dietTreatmentTemplate
[370]532                        )
[389]533                        .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
534                        .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
[370]535                        .setFieldValue( 'Diet','45% fat (palm oil)' )
536                        .with { if (!validate()) { errors.each { println it} } else save()}
[232]537
538                        def evBV = new Event(
[389]539                                template: boostTreatmentTemplate
[370]540                        )
[389]541                        .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
542                        .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
[370]543                        .setFieldValue( 'Compound','Vehicle' )
544                        .with { if (!validate()) { errors.each { println it} } else save()}
[232]545
546                        def evBL = new Event(
[389]547                                template: boostTreatmentTemplate
548                        )
549                        .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
550                        .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
[370]551                        .setFieldValue( 'Compound','Leptin' )
552                        .with { if (!validate()) { errors.each { println it} } else save()}
[232]553
[370]554                        /*
[232]555                        def evLF4 = new Event(
556                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
557                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
558                                eventDescription: eventDiet,
559                                parameterStringValues: ['Diet':'10% fat (palm oil)']
560                        ).with { if (!validate()) { errors.each { println it} } else save()}
561
562                        def evHF4 = new Event(
563                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
564                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
565                                eventDescription: eventDiet,
566                                parameterStringValues: ['Diet':'45% fat (palm oil)']
567                        ).with { if (!validate()) { errors.each { println it} } else save()}
568
569                        def evBV4 = new Event(
570                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
571                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
572                                eventDescription: eventBoost,
573                                parameterStringValues: ['Compound':'Vehicle']
574                        ).with { if (!validate()) { errors.each { println it} } else save()}
575
576                        def evBL4 = new Event(
577                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
578                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
579                                eventDescription: eventBoost,
580                                parameterStringValues: ['Compound':'Leptin']
581                        ).with { if (!validate()) { errors.each { println it} } else save()}
582
583                        def evS = new SamplingEvent(
584                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
585                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
586                                        eventDescription: samplingEvent,
587                                        parameterFloatValues: ['Sample weight':5F]
588                        ).with { if (!validate()) { errors.each { println it} } else save()}
589
590                        def evS4 = new SamplingEvent(
591                                        startTime: Date.parse('yyyy-MM-dd','2008-02-04'),
592                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
593                                        eventDescription: samplingEvent,
594                                        parameterFloatValues: ['Sample weight':5F]
595                        ).with { if (!validate()) { errors.each { println it} } else save()}
[370]596                        */
[232]597
598                        // Add events to study
599                        exampleStudy
600                        .addToEvents(evLF)
601                        .addToEvents(evHF)
602                        .addToEvents(evBV)
603                        .addToEvents(evBL)
[370]604                        /*
605                        .addToEvents(evLF4)
[232]606                        .addToEvents(evHF4)
607                        .addToEvents(evBV4)
608                        .addToEvents(evBL4)
609                        .addToSamplingEvents(evS)
610                        .addToSamplingEvents(evS4)
[370]611                        */
[232]612                        .save()
613
614                        def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
615                        .addToEvents(evLF)
616                        .addToEvents(evBV)
617                        .with { if (!validate()) { errors.each { println it} } else save()}
618
619                        def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
620                        .addToEvents(evLF)
621                        .addToEvents(evBL)
622                        .with { if (!validate()) { errors.each { println it} } else save()}
623
624                        def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
625                        .addToEvents(evHF)
626                        .addToEvents(evBV)
627                        .with { if (!validate()) { errors.each { println it} } else save()}
628
629                        def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
630                        .addToEvents(evHF)
631                        .addToEvents(evBL)
632                        .with { if (!validate()) { errors.each { println it} } else save()}
633
[370]634                        /*
[232]635                        def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
636                        .addToEvents(evLF4)
637                        .addToEvents(evBV4)
638                        .with { if (!validate()) { errors.each { println it} } else save()}
639
640                        def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
641                        .addToEvents(evLF4)
642                        .addToEvents(evBL4)
643                        .with { if (!validate()) { errors.each { println it} } else save()}
644
645                        def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
646                        .addToEvents(evHF4)
647                        .addToEvents(evBV4)
648                        .with { if (!validate()) { errors.each { println it} } else save()}
649
650                        def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
651                        .addToEvents(evHF4)
652                        .addToEvents(evBL4)
653                        .with { if (!validate()) { errors.each { println it} } else save()}
[370]654                        */
[232]655
[253]656            // Add subjects and samples and compose EventGroups
[232]657
[136]658                        def x=1
[389]659                        40.times {
[139]660                                def currentSubject = new Subject(
[136]661                                        name: "A" + x++,
662                                        species: mouseTerm,
[146]663                                        template: mouseTemplate,
[239]664                                )
665                                .setFieldValue("Gender", "Male")
[370]666                                //.setFieldValue("Genotype", c57bl6Term)
[269]667                                .setFieldValue("Age (weeks)", 17)
668                                .setFieldValue("Cage", "" + (int)(x/2))
[375]669                                .with { if (!validate()) { errors.each { println it} } else save(flush:true)}
[136]670
[139]671                                exampleStudy.addToSubjects(currentSubject)
[186]672                                .with { if (!validate()) { errors.each { println it} } else save()}
[232]673
674                                // Add subject to appropriate EventGroup
[370]675                                /*
676                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
[232]677                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
678                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
679                                else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
680                                else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
681                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
682                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
683                                else             { LFBV1.addToSubjects(currentSubject).save() }
[370]684                                */
[232]685
[389]686                                if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
[370]687                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
688                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
689                                else             { LFBV1.addToSubjects(currentSubject).save() }
[139]690
[370]691                        }
692
[236]693                        // Add EventGroups to study
694                        exampleStudy
695                        .addToEventGroups(LFBV1)
696                        .addToEventGroups(LFBL1)
697                        .addToEventGroups(HFBV1)
698                        .addToEventGroups(HFBL1)
[370]699                        //.addToEventGroups(LFBV4)
700                        //.addToEventGroups(LFBL4)
701                        //.addToEventGroups(HFBV4)
702                        //.addToEventGroups(HFBL4)
[236]703
[370]704                        // Add persons to study
705                        def studyperson1 = new StudyPerson( person: person1, role: role1 ).save();
706                        def studyperson2 = new StudyPerson( person: person2, role: role2 ).save();
[211]707
[370]708                        exampleStudy
709                        .addToPersons( studyperson1 )
710                        .addToPersons( studyperson2 )
711                        .save()
[382]712                       
[389]713                        /*
[370]714                        println 'Adding PPSH study'
715
[224]716                        def humanStudy = new Study(
[232]717                                template: studyTemplate,
[186]718                                title:"NuGO PPS human study",
719                                code:"PPSH",
[212]720                                researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
[389]721                                description:"Human study",
[186]722                                ecCode:"unknown",
[230]723                                startDate: Date.parse('yyyy-MM-dd','2009-01-01')
[148]724                        ).with { if (!validate()) { errors.each { println it} } else save()}
725
[232]726                        def fastingEvent = new Event(
[389]727                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
728                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
729                                        eventDescription: fastingTreatment,
730                                        parameterStringValues: ['Fasting period':'8h']);
[232]731
732                        def bloodSamplingEvent = new SamplingEvent(
[389]733                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
734                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
735                                        eventDescription: bloodSamplingEventDescription,
736                                        parameterFloatValues: ['Sample volume':4.5F]);
[232]737
738                        def rootGroup = new EventGroup(name: 'Root group');
739                        rootGroup.addToEvents fastingEvent
740                        rootGroup.addToEvents bloodSamplingEvent
741                        rootGroup.save()
742
[389]743            def y = 1
744            11.times {
745              def currentSubject = new Subject(
746                      name: "" + y++,
747                      species: humanTerm,
748                      template: humanTemplate).setFieldValue("Gender", (boolean) (x / 2) ? "Male" : "Female").setFieldValue("DOB", new java.text.SimpleDateFormat("dd-mm-yy").parse("01-02-19" + (10 + (int) (Math.random() * 80)))).setFieldValue("Age (years)", 30).setFieldValue("Height", Math.random() * 2F).setFieldValue("Weight (kg)", Math.random() * 150F).setFieldValue("BMI", 20 + Math.random() * 10F).with { if (!validate()) { errors.each { println it} } else save()}
[148]749
[389]750              rootGroup.addToSubjects currentSubject
751              rootGroup.save()
[232]752
[389]753              def currentSample = new Sample(
754                      name: currentSubject.name + '_B',
755                      material: bloodTerm,
756                      parentSubject: currentSubject,
757                      parentEvent: bloodSamplingEvent);
[232]758
[148]759
[389]760              humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
761          }
762
763          humanStudy.addToEvents(fastingEvent)
764          humanStudy.addToSamplingEvents(bloodSamplingEvent)
765          humanStudy.addToEventGroups rootGroup
766          humanStudy.save()
767
[186]768                        // Add clinical data
769
770                        def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
771                                name: 'Lipid profile',
772                                approved: true
773                        ).with { if (!validate()) { errors.each { println it} } else save()}
774
775                        def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
776                                name: 'LDL',
777                                unit: 'mg/dL',
[187]778                                type: dbnp.data.FeatureType.QUANTITATIVE,
[186]779                                referenceValues: '100 mg/dL',
780                                detectableLimit: 250,
781                                isDrug: false, isIntake: true, inSerum: true
782                        ).with { if (!validate()) { errors.each { println it} } else save()}
783
784                        def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
785                                name: 'HDL',
786                                unit: 'mg/dL',
[187]787                                type: dbnp.data.FeatureType.QUANTITATIVE,
[186]788                                referenceValues: '50 mg/dL',
789                                detectableLimit: 100,
790                                isDrug: false, isIntake: true, inSerum: true
791                        ).with { if (!validate()) { errors.each { println it} } else save()}
792
793                        lipidAssay.addToMeasurements ldlMeasurement
794                        lipidAssay.addToMeasurements hdlMeasurement
[389]795
[186]796                        def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
797                                assay: lipidAssay
798                        ).with { if (!validate()) { errors.each { println it} } else save()}
799
[224]800                        humanStudy.samples*.each {
[186]801                                new dbnp.clinicaldata.ClinicalFloatData(
802                                        assay: lipidAssayInstance,
803                                        measurement: ldlMeasurement,
804                                        sample: it.name,
805                                        value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
806                                ).with { if (!validate()) { errors.each { println it} } else save()}
807
808                                new dbnp.clinicaldata.ClinicalFloatData(
809                                        assay: lipidAssayInstance,
810                                        measurement: hdlMeasurement,
811                                        sample: it.name,
812                                        value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
813                                ).with { if (!validate()) { errors.each { println it} } else save()}
814                        }
815
816                        // Add assay to study capture module
[389]817
[186]818                        def clinicalModule = new AssayModule(
819                                name: 'Clinical data',
820                                type: AssayType.CLINICAL_DATA,
821                                platform: 'clinical measurements',
822                                url: 'http://localhost:8080/gscf'
823                        ).with { if (!validate()) { errors.each { println it} } else save()}
824
825                        def lipidAssayRef = new Assay(
826                                name: 'Lipid profiling',
827                                module: clinicalModule,
828                                externalAssayId: lipidAssayInstance.id
829                        ).with { if (!validate()) { errors.each { println it} } else save()}
830
[224]831                        humanStudy.samples*.each {
[186]832                                lipidAssayRef.addToSamples(it)
833                        }
834                        lipidAssayRef.save()
835
[389]836                        humanStudy.addToAssays(lipidAssayRef);
[188]837                        humanStudy.save()
[389]838*/
[186]839                }
[92]840        }
841
842        def destroy = {
843        }
[366]844} 
Note: See TracBrowser for help on using the repository browser.