Changeset 232

Show
Ignore:
Timestamp:
03-03-10 17:18:22 (4 years ago)
Author:
keesvb
Message:

adjusted Event-Sample relationship to go into EventGroup?, added EventGroups? in BootStrap?, added a Study template to BootStrap?

Location:
trunk/grails-app
Files:
7 modified

Legend:

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

    r230 r232  
    6868                        ).with { if (!validate()) { errors.each { println it} } else save()} 
    6969 
    70                         def treatmentProtocol = new Protocol( 
    71                                 name: 'MADMAX Experimental Protocol', 
     70                        def dietProtocol = new Protocol( 
     71                                name: 'Diet treatment Protocol NuGO PPS3 leptin module', 
     72                                reference: treatmentTerm 
     73                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     74 
     75                        def boostProtocol = new Protocol( 
     76                                name: 'Boost treatment Protocol NuGO PPS3 leptin module', 
    7277                                reference: treatmentTerm 
    7378                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     
    7883                        ).with { if (!validate()) { errors.each { println it} } else save()} 
    7984 
    80                         treatmentProtocol 
     85                        dietProtocol 
    8186                        .addToParameters(new ProtocolParameter( 
    8287                                name: 'Diet', 
    8388                                type: ProtocolParameterType.STRINGLIST, 
    8489                                listEntries: ['10% fat (palm oil)','45% fat (palm oil)'])) 
     90                        .save() 
     91 
     92                        boostProtocol 
    8593                        .addToParameters(new ProtocolParameter( 
    8694                                name: 'Compound', 
    8795                                type: ProtocolParameterType.STRINGLIST, 
    8896                                listEntries: ['Vehicle','Leptin'])) 
    89                         .addToParameters(new ProtocolParameter( 
    90                                 name: 'Administration', 
    91                                 type: ProtocolParameterType.STRING)) 
    9297                        .save() 
    9398 
     
    134139                        def genderField = new TemplateField( 
    135140                                name: 'Gender',type: TemplateFieldType.STRINGLIST, 
    136                                 listEntries: ['Male','Female']) 
    137                         .with { if (!validate()) { errors.each { println it} } else save()} 
     141                                listEntries: [new TemplateFieldListItem(name:'Male'),new TemplateFieldListItem(name: 'Female')]) 
     142                        .with { if (!validate()) { errors.each { println it} } else save()} 
     143                                                 
    138144                        def ageField = new TemplateField( 
    139145                                name: 'Age',type: TemplateFieldType.INTEGER) 
    140146                        .with { if (!validate()) { errors.each { println it} } else save()} 
     147 
     148                        // Nutritional study template 
     149 
     150                        def studyTemplate = new Template( 
     151                                name: 'Nutritional study', entity: dbnp.studycapturing.Study 
     152                        ).addToFields(new TemplateField( 
     153                                name: 'NuGO Code',type: TemplateFieldType.STRING) 
     154                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     155 
    141156 
    142157                        // Mouse template 
     
    145160                        ).addToFields(new TemplateField( 
    146161                                name: 'Genotype',type: TemplateFieldType.STRINGLIST, 
    147                                 listEntries: ['C57/Bl6j','wild type'])) 
     162                                listEntries: [new TemplateFieldListItem(name:'C57/Bl6j'),new TemplateFieldListItem(name:'wild type')])) 
    148163                        .addToFields(genderField) 
    149164                        .addToFields(ageField) 
     
    172187 
    173188                        //events 
    174                         def eventTreatment = new EventDescription( 
    175                                 name: 'Treatment', 
    176                                 description: 'Experimental Treatment Protocol NuGO PPS3 leptin module', 
     189                        def eventDiet = new EventDescription( 
     190                                name: 'Diet treatment', 
     191                                description: 'Diet treatment (fat percentage)', 
    177192                                classification: treatmentTerm, 
    178                                 protocol: treatmentProtocol, 
     193                                protocol: dietProtocol, 
     194                                isSamplingEvent: false 
     195                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     196 
     197                        def eventBoost = new EventDescription( 
     198                                name: 'Boost treatment', 
     199                                description: 'Boost treatment (leptin or vehicle)', 
     200                                classification: treatmentTerm, 
     201                                protocol: boostProtocol, 
    179202                                isSamplingEvent: false 
    180203                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     
    187210                        ).with { if (!validate()) { errors.each { println it} } else save()} 
    188211 
    189                         def bloodSamplingEvent = new EventDescription( 
     212                        def bloodSamplingEventDescription = new EventDescription( 
    190213                                name: 'Blood extraction', 
    191214                                description: 'Blood extraction targeted at lipid assays', 
     
    206229                        // studies 
    207230                        def exampleStudy = new Study( 
     231                                template: studyTemplate, 
    208232                                title:"NuGO PPS3 mouse study leptin module", 
    209233                                code:"PPS3_leptin_module", 
     
    214238                        ).with { if (!validate()) { errors.each { println it} } else save()} 
    215239 
     240                        def evLF = new Event( 
     241                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     242                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     243                                eventDescription: eventDiet, 
     244                                parameterStringValues: ['Diet':'10% fat (palm oil)'] 
     245                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     246 
     247                        def evHF = new Event( 
     248                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     249                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     250                                eventDescription: eventDiet, 
     251                                parameterStringValues: ['Diet':'45% fat (palm oil)'] 
     252                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     253 
     254                        def evBV = new Event( 
     255                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     256                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     257                                eventDescription: eventBoost, 
     258                                parameterStringValues: ['Compound':'Vehicle'] 
     259                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     260 
     261                        def evBL = new Event( 
     262                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     263                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     264                                eventDescription: eventBoost, 
     265                                parameterStringValues: ['Compound':'Leptin'] 
     266                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     267 
     268                        def evLF4 = new Event( 
     269                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     270                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'), 
     271                                eventDescription: eventDiet, 
     272                                parameterStringValues: ['Diet':'10% fat (palm oil)'] 
     273                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     274 
     275                        def evHF4 = new Event( 
     276                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     277                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'), 
     278                                eventDescription: eventDiet, 
     279                                parameterStringValues: ['Diet':'45% fat (palm oil)'] 
     280                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     281 
     282                        def evBV4 = new Event( 
     283                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     284                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'), 
     285                                eventDescription: eventBoost, 
     286                                parameterStringValues: ['Compound':'Vehicle'] 
     287                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     288 
     289                        def evBL4 = new Event( 
     290                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     291                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'), 
     292                                eventDescription: eventBoost, 
     293                                parameterStringValues: ['Compound':'Leptin'] 
     294                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     295 
     296                        def evS = new SamplingEvent( 
     297                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     298                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     299                                        eventDescription: samplingEvent, 
     300                                        parameterFloatValues: ['Sample weight':5F] 
     301                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     302 
     303                        def evS4 = new SamplingEvent( 
     304                                        startTime: Date.parse('yyyy-MM-dd','2008-02-04'), 
     305                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'), 
     306                                        eventDescription: samplingEvent, 
     307                                        parameterFloatValues: ['Sample weight':5F] 
     308                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     309 
     310                        // Add events to study 
     311                        exampleStudy 
     312                        .addToEvents(evLF) 
     313                        .addToEvents(evHF) 
     314                        .addToEvents(evBV) 
     315                        .addToEvents(evBL) 
     316                        .addToEvents(evLF4) 
     317                        .addToEvents(evHF4) 
     318                        .addToEvents(evBV4) 
     319                        .addToEvents(evBL4) 
     320                        .addToSamplingEvents(evS) 
     321                        .addToSamplingEvents(evS4) 
     322                        .save() 
     323 
     324                        def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week") 
     325                        .addToEvents(evLF) 
     326                        .addToEvents(evBV) 
     327                        .with { if (!validate()) { errors.each { println it} } else save()} 
     328 
     329                        def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week") 
     330                        .addToEvents(evLF) 
     331                        .addToEvents(evBL) 
     332                        .with { if (!validate()) { errors.each { println it} } else save()} 
     333 
     334                        def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week") 
     335                        .addToEvents(evHF) 
     336                        .addToEvents(evBV) 
     337                        .with { if (!validate()) { errors.each { println it} } else save()} 
     338 
     339                        def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week") 
     340                        .addToEvents(evHF) 
     341                        .addToEvents(evBL) 
     342                        .with { if (!validate()) { errors.each { println it} } else save()} 
     343 
     344                        def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks") 
     345                        .addToEvents(evLF4) 
     346                        .addToEvents(evBV4) 
     347                        .with { if (!validate()) { errors.each { println it} } else save()} 
     348 
     349                        def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks") 
     350                        .addToEvents(evLF4) 
     351                        .addToEvents(evBL4) 
     352                        .with { if (!validate()) { errors.each { println it} } else save()} 
     353 
     354                        def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks") 
     355                        .addToEvents(evHF4) 
     356                        .addToEvents(evBV4) 
     357                        .with { if (!validate()) { errors.each { println it} } else save()} 
     358 
     359                        def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks") 
     360                        .addToEvents(evHF4) 
     361                        .addToEvents(evBL4) 
     362                        .with { if (!validate()) { errors.each { println it} } else save()} 
     363 
     364 
     365 
    216366                        def x=1 
    217                         12.times { 
     367                        80.times { 
    218368                                def currentSubject = new Subject( 
    219369                                        name: "A" + x++, 
     
    225375 
    226376                                exampleStudy.addToSubjects(currentSubject) 
    227                                 .addToEvents(new Event( 
    228                                         subject: currentSubject, 
    229                                         startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
    230                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    231                                         eventDescription: eventTreatment, 
    232                                         parameterStringValues: ['Diet':'10% fat (palm oil)','Compound':'Vehicle','Administration':'intraperitoneal injection']) 
    233                                 ) 
    234                                 .addToSamplingEvents(new SamplingEvent( 
    235                                         subject: currentSubject, 
    236                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    237                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    238                                         eventDescription: samplingEvent, 
    239                                         parameterFloatValues: ['Sample weight':5F]) 
    240                                 ) 
    241377                                .with { if (!validate()) { errors.each { println it} } else save()} 
     378 
     379                                // Add subject to appropriate EventGroup 
     380                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() } 
     381                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() } 
     382                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() } 
     383                                else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() } 
     384                                else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() } 
     385                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() } 
     386                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() } 
     387                                else             { LFBV1.addToSubjects(currentSubject).save() } 
     388 
    242389                        } 
    243390 
     
    245392 
    246393                        def humanStudy = new Study( 
     394                                template: studyTemplate, 
    247395                                title:"NuGO PPS human study", 
    248396                                code:"PPSH", 
     
    252400                                startDate: Date.parse('yyyy-MM-dd','2009-01-01') 
    253401                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     402 
     403                        def fastingEvent = new Event( 
     404                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     405                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     406                                        eventDescription: fastingTreatment, 
     407                                        parameterStringValues: ['Fasting period':'8h']); 
     408 
     409                        def bloodSamplingEvent = new SamplingEvent( 
     410                                        startTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     411                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
     412                                        eventDescription: bloodSamplingEventDescription, 
     413                                        parameterFloatValues: ['Sample volume':4.5F]); 
     414 
     415                        def rootGroup = new EventGroup(name: 'Root group'); 
     416                        rootGroup.addToEvents fastingEvent 
     417                        rootGroup.addToEvents bloodSamplingEvent 
     418                        rootGroup.save() 
    254419 
    255420                        def y=1 
     
    275440                                ).with { if (!validate()) { errors.each { println it} } else save()} 
    276441 
     442                                def currentSample = new Sample( 
     443                                        name: currentSubject.name + '_B', 
     444                                        material: bloodTerm, 
     445                                        parentSubject: currentSubject, 
     446                                        parentEvent: bloodSamplingEvent); 
     447 
     448                                rootGroup.addToSubjects currentSubject 
     449                                rootGroup.save() 
     450 
    277451                                humanStudy.addToSubjects(currentSubject) 
    278                                 .addToEvents(new Event( 
    279                                         subject: currentSubject, 
    280                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    281                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    282                                         eventDescription: fastingTreatment, 
    283                                         parameterStringValues: ['Fasting period':'8h']) 
    284                                 ) 
    285                                 .addToSamplingEvents(new SamplingEvent( 
    286                                         subject: currentSubject, 
    287                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    288                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    289                                         eventDescription: bloodSamplingEvent, 
    290                                         parameterFloatValues: ['Sample volume':4.5F]) 
    291                                 ) 
    292                                 .addToSamples(new Sample( 
    293                                         name: currentSubject.name + '_B', 
    294                                         material: bloodTerm) 
    295                                 ) 
     452                                .addToSamples(currentSample) 
     453                                .addToEventGroups rootGroup 
    296454                                .with { if (!validate()) { errors.each { println it} } else save()} 
    297455                        } 
  • trunk/grails-app/domain/dbnp/studycapturing/Event.groovy

    r209 r232  
    1414 */ 
    1515class Event implements Serializable { 
    16         Subject subject 
    1716        EventDescription eventDescription 
    1817        Date startTime 
     
    2928 
    3029        static constraints = { 
    31                 subject(nullable: true, blank: true)    // TODO: subject is to be removed from Event, and into EventGroup 
    3230                startTime(nullable:false) 
    3331                endTime(validator: {val, obj -> 
  • trunk/grails-app/domain/dbnp/studycapturing/Sample.groovy

    r224 r232  
    66 * The Sample class describes an actual sample which results from a SamplingEvent. 
    77 */ 
    8 class Sample { 
     8class Sample extends TemplateEntity { 
    99        static searchable = true 
    1010 
     11        Subject parentSubject 
     12        SamplingEvent parentEvent 
    1113 
     14        String name      // should be unique with respect to the parent study (which can be inferred) 
     15        Term material 
     16        // a member that describes the quantity of the sample? --> should be in the templates 
    1217 
    13     String name      // should be unique with respect to the parent study (which can be inferred) 
    14     Term material 
    15     // don't we need a member that describes the quantity of the sample? --> should be in the templates 
    16  
    17     static constraints = { 
    18     } 
     18        static constraints = { 
     19        } 
    1920 
    2021} 
  • trunk/grails-app/domain/dbnp/studycapturing/SamplingEvent.groovy

    r190 r232  
    55 * 
    66 * NOTE: according to documentation, super classes and subclasses share the same table. 
    7  *       thus, there is actually no reason not to merge the sampling with the Event super class. 
    8  *       this is especially true, since the subclass adds only one has-many relation ship. 
     7 *       thus, we could merge the sampling with the Event super class and include a boolean 
     8 *       However, using a separate class makes it more clear in the code that Event and SamplingEvent are treated differently 
    99 */ 
    1010 
    1111class SamplingEvent extends Event { 
    1212 
    13     static hasMany = [samples : Sample] 
    14  
    1513    static constraints = { 
    1614    } 
  • trunk/grails-app/domain/dbnp/studycapturing/Study.groovy

    r229 r232  
    2828                events: Event, 
    2929                samplingEvents: SamplingEvent, 
     30                eventGroups: EventGroup, 
    3031                samples: Sample, 
    3132                assays: Assay, 
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateField.groovy

    r224 r232  
    1414        String unit 
    1515 
    16     static hasMany = [listEntries : String] // to store the entries to choose from when the type is 'item from predefined list' 
    17         //TODO: make TemplateFieldListItem and make a convenience setter for a string array 
     16    static hasMany = [listEntries : TemplateFieldListItem] // to store the entries to choose from when the type is 'item from predefined list' 
    1817 
    1918        static constraints = { 
     
    2524                return name 
    2625        } 
     26 
     27        //TODO: make a convenience setter for a string array 
     28        /*def setListEntries(ArrayList entries) { 
     29                list=[] 
     30                entries.each { 
     31                        list.add(new TemplateFieldListItem(name: it)) 
     32                } 
     33                this 
     34        }*/ 
     35 
    2736} 
  • trunk/grails-app/views/study/show.gsp

    r229 r232  
    233233          <g:each in="${studyInstance.events}" var="e"> 
    234234            <tr> 
    235           <td><g:link controller="event" action="edit" id="${e.id}">${e.subject.id}</g:link></td> 
     235          <td>-</td> 
    236236          <td>${e.getPrettyDuration(studyInstance.startDate,e.startTime)}</td> 
    237237          <td>${e.getPrettyDuration()}</td> 
     
    249249          <g:each in="${studyInstance.samplingEvents}" var="e"> 
    250250            <tr> 
    251           <td><g:link controller="event" action="edit" id="${e.id}">${e.subject.id}</g:link></td> 
     251          <td>-</td> 
    252252          <td>${e.getPrettyDuration(studyInstance.startDate,e.startTime)}</td> 
    253253          <td>${e.getPrettyDuration()}</td>