source: trunk/grails-app/domain/nl/tno/massSequencing/SequenceData.groovy @ 72

Last change on this file since 72 was 72, checked in by robert@…, 9 years ago

Implemented addition of logfiles to sequence data

File size: 3.0 KB
Line 
1package nl.tno.massSequencing
2
3import org.codehaus.groovy.grails.commons.ConfigurationHolder
4import nl.tno.massSequencing.classification.Classification
5
6class SequenceData {
7        def fileService
8       
9        String sequenceFile = ''
10        String qualityFile = ''
11        Long numSequences = 0L
12        Float averageQuality = 0.0
13
14        // Store the logfile with data about how this sample is processed
15        String logFile
16       
17        static belongsTo = [sample: AssaySample]
18        static constraints = {
19                qualityFile(nullable: true)
20                logFile(nullable:true)
21                numSequences(nullable: true)
22                averageQuality(nullable: true)
23        }
24
25        /**
26         * Returns the number of files in this data object.
27         * @return
28         */
29        public int numFiles() {
30                int number = 0;
31                if( sequenceFile != null && sequenceFile != "" )
32                        number++;
33
34                if( qualityFile != null && qualityFile != "" )
35                        number++;
36
37                return number;
38        }
39       
40        /**
41         * Returns the number of quality scores in this data object. This equals
42         * the number of sequences iff a quality score is attached to this object
43         *
44         * @return      Number of quality scores in this object
45         */
46        public int numQualScores() {
47                if( qualityFile != null )
48                        return numSequences
49                else
50                        return 0;
51        }
52
53        /**
54        * Returns the number of classification scores in this data object.
55        *
56        * @return       Number of classifications of sequences in this data object
57        */
58   public int numClassifications() {
59           def num = Classification.executeQuery( "SELECT COUNT(*) FROM Sequence s WHERE s.sequenceData = :sd", [ "sd": this ] );
60           
61           return num[ 0 ] ?: 0;
62   }
63               
64        def beforeDelete = {
65                def permanentDir = fileService.absolutePath( ConfigurationHolder.config.massSequencing.fileDir.toString() )
66                if( sequenceFile ) {
67                        fileService.delete( sequenceFile, permanentDir )
68                }
69
70                if( qualityFile )
71                        fileService.delete( qualityFile, permanentDir )
72               
73                if( logFile )
74                        fileService.delete( logFile, permanentDir )
75                       
76                // Remove all sequence objects referencing this sequenceData object
77                Sequence.executeUpdate( "DELETE FROM Sequence s WHERE s.sequenceData = ?", [this])
78
79                // Reset statistics of the assay sample, to ensure the deleted files are removed from statistics
80                sample?.resetStats();
81               
82                return true;
83        }
84       
85        public SequenceData clone() {
86                // Copy the files to a new name
87                def permanentDir = fileService.absolutePath( ConfigurationHolder.config.massSequencing.fileDir.toString() )
88               
89                def newSequenceFileName = sequenceFile;
90                if( this.sequenceFile ) {
91                        newSequenceFileName = fileService.getUniqueFilename( this.sequenceFile, permanentDir );
92                        fileService.copy( sequenceFile, newSequenceFileName, permanentDir );
93                }
94
95                def newQualityFileName = qualityFile;
96                if( this.qualityFile ) {
97                        newQualityFileName = fileService.getUniqueFilename( this.qualityFile, permanentDir );
98                        fileService.copy( qualityFile, newQualityFileName, permanentDir );
99                }
100
101                def sd = new SequenceData( 
102                        sequenceFile: newSequenceFileName, 
103                        qualityFile: newQualityFileName, 
104                        numSequences: this.numSequences,
105                        averageQuality: this.averageQuality
106                );
107       
108                if( this.sample )
109                        this.sample.addToSequenceData( sd );
110                       
111                return sd;
112        }
113}
Note: See TracBrowser for help on using the repository browser.