Ignore:
Timestamp:
Mar 23, 2011, 1:24:24 PM (8 years ago)
Author:
robert@…
Message:

Improved export of fasta files and added properties to assaysamples

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/services/nl/tno/metagenomics/SampleExcelService.groovy

    r21 r24  
    1111
    1212        // Fields to be edited using excel file and manually
     13        def variableFields = [
     14                'fwOligo':              'Forward oligo number',
     15                'fwMidName':    'Forward mid name',
     16                'fwTotalSeq':   'Total forward sequence',
     17                'fwMidSeq':             'Forward mid sequence',
     18                'fwPrimerSeq':  'Forward primer sequence',
     19                'revOligo':     'Reverse oligo number',
     20                'revMidName':   'Reverse mid name',
     21                'revTotalSeq':  'Total reverse sequence',
     22                'revMidSeq':    'Reverse mid sequence',
     23                'revPrimerSeq': 'Reverse primer sequence',
     24
     25        ]
     26       
    1327        def sampleNameName = "Sample name"
    1428        def runName = "Run"
    15         def tagNameName = "Tag name"
    16         def tagSequenceName = "Tag sequence"
    17         def oligoNumberName = "Oligo number"
    18         def possibleFields = [sampleNameName, runName, tagNameName, tagSequenceName, oligoNumberName]
     29        def possibleFields = [sampleNameName, runName] + variableFields.keySet().toList();
     30        def possibleFieldNames = [sampleNameName, runName ] + variableFields.values();
    1931       
    2032    /**
     
    3547                def wb = excelService.create();
    3648
    37                 def fields = possibleFields
     49                def fields = possibleFieldNames
    3850                if( !includeRun )
    3951                        fields = fields - runName
     
    4961                                rowData << assaySample.run?.name
    5062                       
    51                         rowData << assaySample.tagName
    52                         rowData << assaySample.tagSequence
    53                         rowData << assaySample.oligoNumber
     63                        variableFields.each { k, v ->
     64                                rowData << assaySample[ k ];
     65                        }
     66                       
    5467                        data << rowData;
    5568                }
     
    5770
    5871                // Auto resize columns
    59                 excelService.autoSizeColumns( wb, sheetIndex, 0..2)
     72                excelService.autoSizeColumns( wb, sheetIndex, 0..fields.size())
    6073
    6174                return wb;
     
    8295                // Try to guess best matches between the excel file and the column names
    8396                def bestMatches = [:]
    84                 def fields = possibleFields
     97                def fields = possibleFieldNames
    8598                if( !includeRun )
    8699                        fields = fields - runName
    87                
    88100                       
    89101                // Do matching using fuzzy search. The 0.8 treshold makes sure that no match if chosen if
    90102                // there is actually no match at all.
    91                 def matches = fuzzySearchService.mostSimilarUnique( headers, possibleFields, 0.8 );
     103                def matches = fuzzySearchService.mostSimilarUnique( headers, fields, 0.8 );
    92104               
    93105                headers.eachWithIndex { header, idx ->
     
    121133                def columns = [:]
    122134                def dataMatches = false;
    123                 possibleFields.each { columnName ->
     135                possibleFieldNames.each { columnName ->
    124136                        def foundColumn = matchColumns.find { it.value == columnName };
    125137                       
     
    130142                }
    131143
    132                 println columns
    133                
    134144                // A column to match the sample name must be present
    135145                if( columns[ sampleNameName ] == -1 ) {
     
    188198                        columns.each {
    189199                                if( it.value > -1 ) {
    190                                         switch( it.key ) {
    191                                                 case tagNameName:               assaySample.tagName = rowData[ it.value ]; break
    192                                                 case tagSequenceName:   assaySample.tagSequence = rowData[ it.value ]; break
    193                                                 case oligoNumberName:   assaySample.oligoNumber = rowData[ it.value ]; break
    194                                                 case runName:                   assaySample.run = Run.findByName( rowData[ it.value ] ); break
     200                                        if( it.key == runName ) {
     201                                                assaySample.run = Run.findByName( rowData[ it.value ] );
     202                                        } else {
     203                                                def field = variableFields.find { variableField -> variableField.value == it.key };
     204                                                if( field ) {
     205                                                        assaySample[ field.key ] = rowData[ it.value ];
     206                                                }
    195207                                        }
    196208                                }
     
    245257                def subjectFields = []
    246258                def eventFields = []
    247                 def moduleFields = [ "Sample name", "Assay name", "Study name", "Run name", "# sequences", "Artificial tag sequence", "Original tag sequence", "Tag name", "Oligo number" ]
     259                def moduleFields = [ "Sample name", "Assay name", "Study name", "Run name", "# sequences", "Artificial tag sequence" ] + variableFields.values();
    248260                gscfData.each { sample ->
    249261                        sample.each { key, value ->
     
    281293                                assaySample.numSequences(),
    282294                                currentTag?.tag,
    283                                 assaySample.tagName,
    284                                 assaySample.tagSequence,
    285                                 assaySample.oligoNumber
    286295                        ]
     296                       
     297                        // Add the variable fields for all assaysamples
     298                        variableFields.each { k, v ->
     299                                row << assaySample[ k ];
     300                        }
    287301                       
    288302                        // Afterwards add the gscfData including subject and event data
     
    322336                excelService.writeData( wb, data, sheetIndex, 0 );
    323337
    324                 // Auto resize columns
    325                 excelService.autoSizeColumns( wb, sheetIndex, 0..fields[ "names" ][ "all" ].size()-1)
     338                // Auto resize columns (# columns = # samples + 1)
     339                excelService.autoSizeColumns( wb, sheetIndex, 0..assaySamples?.size())
    326340
    327341                // Write the data to the output stream
Note: See TracChangeset for help on using the changeset viewer.