Changeset 1731
- Timestamp:
- Apr 8, 2011, 1:17:27 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/services/dbnp/studycapturing/AssayService.groovy
r1730 r1731 158 158 } 159 159 160 def samples = assay.samples 160 // Find samples and sort by name 161 def samples = assay.samples.toList().sort { it.name } 161 162 162 163 def eventFieldMap = [:] … … 176 177 'Sample Data' : getFieldValues(samples, fieldMap['Sample Data']*.name), 177 178 'Event Group' : eventFieldMap, 178 'Module Measurement Data': measurementTokens*.name ? requestModuleMeasurements(assay, measurementTokens ) : [:]179 'Module Measurement Data': measurementTokens*.name ? requestModuleMeasurements(assay, measurementTokens, samples) : [:] 179 180 ] 180 181 } … … 202 203 * Retrieves module measurement data through a rest call to the module 203 204 * 204 * @param consumer the url of the module 205 * @param path path of the rest call to the module 205 * @param assay Assay for which the module measurements should be retrieved 206 * @param fields List with the names of the fields to be retrieved. Format: [ [ name: 'measurementName1' ], [ name: 'measurementName2' ] ] 207 * @param samples Samples for which the module 206 208 * @return 207 209 */ 208 def requestModuleMeasurements(assay, fields ) {210 def requestModuleMeasurements(assay, fields, samples) { 209 211 210 212 def moduleUrl = assay.module.url … … 222 224 if (!sampleTokens?.size()) return [] 223 225 224 def lastDataIndex = moduleData.size() - 1225 def stepSize = sampleTokens.size() + 1226 227 226 // Convert the three different maps into a map like: 228 227 // … … 230 229 // "measurement 2": [ value4, value5, value6 ] ] 231 230 // 231 // The returned values should be in the same order as the given samples-list 232 232 def map = [:] 233 def numSamples = sampleTokens.size(); 234 def idx = 0; 233 def numSampleTokens = sampleTokens.size(); 235 234 236 // Loop through all measurementtokens, and get the right slice from the measurement list 237 measurementTokens.each { measurementToken -> 238 def startIndex = idx++ * numSamples; 239 def stopIndex = startIndex + numSamples - 1; 240 map[ measurementToken.toString() ] = moduleData[ startIndex..stopIndex ].collect { it.toString() } 235 measurementTokens.eachWithIndex { measurementToken, measurementIndex -> 236 def measurements = []; 237 samples.each { sample -> 238 239 // Do measurements for this sample exist? If not, a null value is returned 240 // for this sample. Otherwise, the measurement is looked up in the list with 241 // measurements, based on the sample token 242 if( sampleTokens.collect{ it.toString() }.contains( sample.giveUUID() ) ) { 243 def tokenIndex = sampleTokens.indexOf( sample.giveUUID() ); 244 def valueIndex = measurementIndex * numSampleTokens + tokenIndex; 245 246 // If the module data is in the wrong format, show an error in the log file 247 // and return a null value for this measurement. 248 if( valueIndex >= moduleData.size() ) { 249 log.error "Module measurements given by module " + assay.module.name + " are not in the right format: " + measurementTokens?.size() + " measurements, " + sampleTokens?.size() + " samples, " + moduleData?.size() + " values" 250 measurements << null 251 } else { 252 measurements << moduleData[ valueIndex ].toString(); 253 } 254 } else { 255 measurements << null 256 } 257 } 258 map[ measurementToken.toString() ] = measurements 241 259 } 242 260
Note: See TracChangeset
for help on using the changeset viewer.