Changeset 186


Ignore:
Timestamp:
Feb 10, 2010, 1:55:45 PM (8 years ago)
Author:
keesvb
Message:

added samples, assays and clinical data to bootstrap, modified clean data module linkage

Location:
trunk/grails-app
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/conf/BootStrap.groovy

    r177 r186  
    3232
    3333
     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
    3440                        // terms
    3541                        def mouseTerm = new Term(
     
    4450                        ).with { if (!validate()) { errors.each { println it} } else save()}
    4551
     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
    4658                        def madmaxOntology = new Ontology(
    4759                                name: 'Madmax ontology',
     
    5769
    5870
     71
    5972                        def treatmentProtocol = new Protocol(
    6073                                name: 'MADMAX Experimental Protocol',
     
    6982                        ).with { if (!validate()) { errors.each { println it} } else save()}
    7083
    71 
    72 
    7384                        treatmentProtocol
    7485                        .addToParameters(new ProtocolParameter(
     
    93104                                listEntries: ['99% fat (crude oil)','1% fat (palm oil)']))
    94105                        .addToParameters(new ProtocolParameter(
    95                                 name: 'Compound',
    96                                 type: ProtocolParameterType.STRINGLIST,
    97                                 listEntries: ['Vehicle','Leptin']))
    98                         .addToParameters(new ProtocolParameter(
    99                                 name: 'Administration',
     106                                name: 'BackgroundDiet',
    100107                                type: ProtocolParameterType.STRING))
    101108                        .save()
    102109
    103 
     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()
    104133
    105134                        // create system user
     
    113142                        */
    114143
     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
    115149                        // Mouse template
    116150                        def mouseTemplate = new Template(
     
    119153                                name: 'Genotype',type: TemplateFieldType.STRINGLIST,
    120154                                listEntries: ['C57/Bl6j','wild type']))
    121                         .addToSubjectFields(new TemplateSubjectField(
    122                                 name: 'Gender',type: TemplateFieldType.STRINGLIST,
    123                                 listEntries: ['Male','Female']))
     155                        .addToSubjectFields(genderField)
    124156                        .addToSubjectFields(new TemplateSubjectField(
    125157                                name: 'Age',type: TemplateFieldType.INTEGER))
     
    128160                        .with { if (!validate()) { errors.each { println it} } else save()}
    129161
     162                        // Human template
     163                        def humanTemplate = new Template(
     164                                name: 'Human')
     165                        .addToSubjectFields(genderField)
     166                        .with { if (!validate()) { errors.each { println it} } else save()}
    130167
    131168                        //events
     
    134171                                description: 'Experimental Treatment Protocol NuGO PPS3 leptin module',
    135172                                classification: treatmentTerm,
    136                                 protocol: treatmentProtocol
    137                         ).with { if (!validate()) { errors.each { println it} } else save()}
     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
    138191
    139192                        def eventTreatment2 = new EventDescription(
    140                                 name: 'Treatment2',
    141                                 description: 'Treatment Protocol NuGO PPS1',
    142                                 classification: treatmentTerm,
    143                                 protocol: treatmentProtocol2
    144                         ).with { if (!validate()) { errors.each { println it} } else save()}
     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...')
    145200
    146201                        // studies
     
    172227                                        eventDescription: eventTreatment,
    173228                                        parameterStringValues: ['Diet':'10% fat (palm oil)','Compound':'Vehicle','Administration':'intraperitoneal injection'])
    174                                 ).with { if (!validate()) { errors.each { println it} } else save()}
     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()}
    175238                        }
    176239
    177240
    178                         def secondStudy = new Study(
    179                                 title:"NuGO PPS1 mouse study leptin module",
    180                                 code:"PPS1",
     241                        println 'Adding PPSH study...'
     242
     243                        def humanStudy = new Study(
     244                                title:"NuGO PPS human study",
     245                                code:"PPSH",
    181246                                researchQuestion:"etc.",
    182                                 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.",
    183                                 ecCode:"2007.c",
    184                                 startDate: Date.parse('yyyy-MM-dd','2007-12-11'),
    185                                 template: mouseTemplate
     247                                description:"Human study",
     248                                ecCode:"unknown",
     249                                startDate: Date.parse('yyyy-MM-dd','2008-01-11'),
     250                                template: humanTemplate
    186251                        ).with { if (!validate()) { errors.each { println it} } else save()}
    187252
     
    190255                                def currentSubject = new Subject(
    191256                                        name: "A" + y++,
    192                                         species: mouseTerm,
    193                                         template: mouseTemplate,
    194                                         templateStringFields: ["Genotype" : "C57/Bl6j", "Gender" : "Male"],
    195                                         templateIntegerFields: ["Age" : 17, "Cage" : (int)(y/2)]
    196                                 ).with { if (!validate()) { errors.each { println it} } else save()}
    197 
    198                                 secondStudy.addToSubjects(currentSubject)
    199                                 .addToEvents(new SamplingEvent(
     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(
    200264                                        subject: currentSubject,
    201                                         startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     265                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    202266                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    203267                                        eventDescription: eventTreatment2,
    204                                         parameterStringValues: ['Diet':'10% fat (palm oil)','Compound':'Vehicle','Administration':'intraperitoneal injection'])
     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                                ))
    205280                                ).with { if (!validate()) { errors.each { println it} } else save()}
    206281                        }
     
    209284//                        new Study(title:"testAgain",code:"testcode",researchQuestion:"testRquestion",description:"testdescription",ecCode:"testCode",dateCreated:new Date(),lastUpdated:new Date(),startDate:new Date()).save()
    210285//                        new Study(title:"Exampletest",code:"Examplecode",researchQuestion:"ExampleRquestion",description:"Exampledescription",ecCode:"ExampleecCode",dateCreated:new Date(),lastUpdated:new Date(),startDate:new Date()).save()
    211                 }
     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.clinicaldata.ClinicalMeasurementType.NUMBER,
     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.clinicaldata.ClinicalMeasurementType.NUMBER,
     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
    212357        }
    213358
  • trunk/grails-app/controllers/SandboxController.groovy

    r176 r186  
    2929                subject.setFieldValue('name','hallo')
    3030                println subject.name
    31                
     31
     32                println Study.get(2).giveSamples()*.name
     33       
     34
    3235                // Specify which variables we want to be available in the controller (implicit return statement)
    3336                [fields: f, subjects: st.subjects]
  • trunk/grails-app/domain/dbnp/clinicaldata/ClinicalAssay.groovy

    r162 r186  
    1414
    1515        static constraints = {
     16                reference(nullable: true, blank: true)
     17                appliedMethod(nullable: true, blank: true)
     18                SOP(nullable: true, blank: true)
    1619        }
    1720}
  • trunk/grails-app/domain/dbnp/clinicaldata/ClinicalAssayInstance.groovy

    r162 r186  
    33class ClinicalAssayInstance {
    44
    5         long externalAssayID // in the future, we might do a more sophisticated mapping to the study capture part, as multiple metadata instances might exist
     5        // The (auto-generated) id of this instance will be used in the study capture module to refer to the assay
     6
    67        ClinicalAssay assay
    78
  • trunk/grails-app/domain/dbnp/clinicaldata/ClinicalFloatData.groovy

    r162 r186  
    66class ClinicalFloatData {
    77
    8         long assayID   // external or internal assay ID? the latter approach seems better
    9         long sampleID  // same question
     8        ClinicalAssayInstance assay
    109        ClinicalMeasurement measurement
     10        String sample  // universal sample ID
    1111        float value
    1212
  • trunk/grails-app/domain/dbnp/clinicaldata/ClinicalMeasurement.groovy

    r162 r186  
    1313
    1414        static constraints = {
     15                referenceValues(nullable: true, blank: true)
     16                detectableLimit(nullable: true)
     17                correctionMethod(nullable: true, blank: true)
    1518        }
    1619}
  • trunk/grails-app/domain/dbnp/studycapturing/Assay.groovy

    r184 r186  
    1010    String name
    1111    AssayModule module
    12     long externalAssayId
     12    long externalAssayId // the assay ID the assay has in the external module
    1313
    1414    static hasMany = [samples : Sample]
  • trunk/grails-app/domain/dbnp/studycapturing/AssayType.groovy

    r162 r186  
    77    TRANSCRIPTOMICS('Transcriptomics'),
    88    METABOLOMICS('Metabolomics'),
    9     CLINICAL_CHEMISTRY('Clinical Chemistry')
     9    CLINICAL_DATA('Clinical data')
    1010
    1111    String name
     
    1616
    1717    static list() {
    18      [TRANSCRIPTOMICS, METABOLOMICS, CLINICAL_CHEMISTRY]
     18     [TRANSCRIPTOMICS, METABOLOMICS, CLINICAL_DATA]
    1919    }
    2020
  • trunk/grails-app/domain/dbnp/studycapturing/EventDescription.groovy

    r162 r186  
    1010class EventDescription {
    1111
    12     String name
    13     String description
    14     Term classification
    15     Protocol protocol
     12        String name
     13        String description
     14        Term classification
     15        Protocol protocol
     16        boolean isSamplingEvent
    1617
    17     static constraints = {
    18     }
     18        static constraints = {
     19                classification(nullable: true)
     20        }
     21
    1922}
  • trunk/grails-app/domain/dbnp/studycapturing/Protocol.groovy

    r184 r186  
    1515   
    1616    static hasMany = [parameters : ProtocolParameter, compounds: Compound]
    17     static constraints = { }
     17    static constraints = {
     18        reference(nullable: true)
     19    }
    1820
    1921
  • trunk/grails-app/domain/dbnp/studycapturing/Study.groovy

    r184 r186  
    5151                return template.studyFields;
    5252        }
     53
     54        def giveSamples() {
     55                return samplingEvents*.samples;
     56        }
    5357}
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateSubjectField.groovy

    r162 r186  
    1111class TemplateSubjectField extends TemplateField {
    1212        static constraints = {
     13                name(unique: true)
    1314        }
    1415
Note: See TracChangeset for help on using the changeset viewer.