source: trunk/grails-app/controllers/masssequencing/SandboxController.groovy @ 58

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

Implemented importing of classifications

File size: 4.0 KB
Line 
1package masssequencing
2
3import nl.tno.massSequencing.*
4import nl.tno.massSequencing.classification.*
5import org.hibernate.StatelessSession
6
7class SandboxController {
8        def sessionFactory
9       
10    def importTax = {
11                def hibernateSession = sessionFactory.getCurrentSession();
12                hibernateSession.clear();
13               
14                def filename = "/home/robert/tmp/test.taxonomy"
15                def reader = new File( filename ).newReader();
16               
17                def parts
18                def sequenceName
19                def classification
20                def taxa
21                def taxon
22                def line
23               
24                def classificationSplitRegex = /(\(\d+\))?;/
25                def startLevel = 0    // The first level that is present in the file. Sometimes, the root element (level 0) is not mentioned in the file, in that case, this values should be set to 1
26               
27                def i = 0;
28                def start = System.currentTimeMillis();
29                def lapTime = start;
30               
31                def sequenceData = SequenceData.list();
32               
33                // Create a stateless session in order to speed up inserts
34                StatelessSession statelessSession = sessionFactory.openStatelessSession();
35                statelessSession.beginTransaction();
36               
37                println "Starting at " + start
38               
39                while( ( line = reader.readLine() ) ) {
40                        // Find the taxon for this line
41                        parts = line.tokenize( "\t" );
42                       
43                        if( parts.size() != 2 ) {
44                                // Skip this line because it is incorrect
45                                continue;
46                        }
47                       
48                        sequenceName = parts[ 0 ];
49                        classification = parts[ 1 ];
50                       
51                        // Split classification to check whether the taxon already exists
52                        taxa = classification.split( classificationSplitRegex )
53                       
54                        // Find taxon or create one if needed
55                        taxon = Taxon.findOrCreateTaxonByPath( taxa, startLevel );
56                       
57                        // Determine assaySample
58                        Collections.shuffle( sequenceData );
59                       
60                        // Create a new sequence record
61                        def s = new Sequence()
62                        s.name = sequenceName
63                        s.classification = taxon
64                        s.sequenceData = sequenceData[ 0 ]
65                       
66                        statelessSession.insert(s);
67                         
68                        if( i % 40 == 0 ) {
69                        }
70                       
71                        if( i % 256 == 0 ) {
72                                print "" + ( System.currentTimeMillis() - lapTime ) + " "
73                                lapTime = System.currentTimeMillis();
74                        }
75                       
76                        if( i % 2048 == 0 ) {
77                                println ""
78                                print i + ": "
79                         }
80                               
81                        i++;
82                }
83               
84                reader.close();
85               
86                def end = System.currentTimeMillis();
87                println ""
88                println "End at " + end
89                println "------------------------------------------"
90                println "Duration: " + ( end - start ) + " ms"
91                println "Lines: " + i
92                println "Average: " + ( ( end - start ) / i ) + "ms / line"
93               
94        }
95       
96        def testTax = {
97               
98                def i = 0;
99                def start = System.currentTimeMillis();
100                def lapTime = start;
101                def parts
102                def line
103               
104                def filename = "/home/robert/tmp/test.taxonomy"
105                def reader = new File( filename ).newReader();
106               
107                println "Starting at " + start
108                def numCorrectLines = 0;
109               
110                while( ( line = reader.readLine() ) ) {
111                        // Find the taxon for this line
112                        /*
113                        parts = line.tokenize( "\t" );
114                       
115                        if( parts.size() != 2 ) {
116                                // Skip this line because it is incorrect
117                                continue;
118                        }
119                        */
120                       
121                        if( i % 2048 == 0 ) {
122                                print "" + ( System.currentTimeMillis() - lapTime ) + " "
123                                lapTime = System.currentTimeMillis();
124                        }
125                       
126                        if( i % 16536 == 0 ) {
127                                println ""
128                                print i + ": "
129                         }
130                               
131                        i++;
132                }
133               
134                reader.close();
135               
136                def end = System.currentTimeMillis();
137                println ""
138                println "End at " + end
139                println "------------------------------------------"
140                println "Duration: " + ( end - start ) + " ms"
141                println "Lines: " + i
142                println "Average: " + ( ( end - start ) / i ) + "ms / line"
143               
144        }
145       
146        def createTaxFile = {
147               
148                def taxa = Taxon.list();
149                Collections.shuffle( taxa );
150               
151                def filename = "/home/robert/tmp/test.taxonomy"
152                def writer = new BufferedWriter( new File( filename ).newPrintWriter() );
153               
154                def i = 1;
155                def number
156                def path
157                def stringPath
158               
159                println "# taxa: " + taxa.size();
160               
161                1.times {
162                        taxa.each { taxon ->
163                                number = taxon.level * 3
164                                path = taxon.givePath();
165                                stringPath = path.collect { it.name }.join( "(100);" )
166                       
167                                number.times {
168                                        writer.writeLine( "sequence_" + i + "\t" + stringPath )
169                                        i++;
170                       
171                                        if( i % 100 == 0 )
172                                                println i
173                       
174                                }
175                        }
176                }
177               
178                writer.flush();
179                writer.close();
180        }
181}
Note: See TracBrowser for help on using the repository browser.