@@ -5,6 +5,7 @@ public class CRISPRFinder
55{
66 private String inputFileName ;
77 private String outputFileName ;
8+ private String outputGffFileName ;
89
910 private int screenDisplay ;
1011 private int minNumRepeats ;
@@ -25,6 +26,7 @@ public class CRISPRFinder
2526
2627 public CRISPRFinder (String _inputFileName ,
2728 String _outputFileName ,
29+ String _outputGffFileName ,
2830 int _screenDisplay ,
2931 int _minNumRepeats ,
3032 int _minRepeatLength ,
@@ -37,6 +39,7 @@ public CRISPRFinder(String _inputFileName,
3739 {
3840 inputFileName = _inputFileName ;
3941 outputFileName = _outputFileName ;
42+ outputGffFileName = _outputGffFileName ;
4043
4144 screenDisplay = _screenDisplay ;
4245 minNumRepeats = _minNumRepeats ;
@@ -63,7 +66,7 @@ public CRISPRFinder(String _inputFileName,
6366 }
6467
6568 try {
66- outputFileStream = new FileOutputStream (outputFile , false );
69+ outputFileStream = new FileOutputStream (outputFile , false );
6770 spacers = new PrintStream (outputFileStream );
6871 } catch (FileNotFoundException e ) {
6972 // TODO Auto-generated catch block
@@ -254,15 +257,16 @@ private boolean findRepeats( DNASequence sequence, int readNum )
254257 FileOutputStream outputFileStream ;
255258 PrintStream out ;
256259
260+ FileOutputStream outputGffFileStream ;
261+ PrintStream gffOut = null ;
262+
257263 if (screenDisplay == 1 )
258264 out = System .out ;
259265 else
260266 {
261- if ( outputFileName . equals ( "" ) )
267+ if ( outputFileName == "" )
262268 outputFileName = "a.out" ;
263269
264- //System.out.println("Writing results in file '" + outputFileName + "'");
265- //System.out.println("");
266270
267271 File outputFile = new File (outputFileName );
268272 if ( readNum == 1 && outputFile .exists () )
@@ -274,6 +278,23 @@ private boolean findRepeats( DNASequence sequence, int readNum )
274278
275279 outputFileStream = new FileOutputStream (outputFile , true );
276280 out = new PrintStream (outputFileStream );
281+
282+
283+ if (! outputGffFileName .equals ("" ))
284+ {
285+ File outputGffFile = new File (outputGffFileName );
286+ if ( readNum == 1 && outputGffFile .exists () )
287+ {
288+ boolean success = outputFile .delete ();
289+ if (!success )
290+ throw new IllegalArgumentException ("Error: Could not delete file '" + outputFile + "'" );
291+ }
292+
293+ outputGffFileStream = new FileOutputStream (outputGffFile , true );
294+ gffOut = new PrintStream (outputGffFileStream );
295+ gffOut .println ("##gff-version 3" );
296+ printGffHeader = false ;
297+ }
277298 }
278299
279300 if (repeatsFound )
@@ -297,20 +318,15 @@ private boolean findRepeats( DNASequence sequence, int readNum )
297318 for (int k = 0 ; k < CRISPRVector .size (); k ++)
298319 {
299320 currCRISPR = (CRISPR )CRISPRVector .elementAt (k );
300- if (outputformat > 0 ) {
301- String crispr_id = "CRISPR" + (++totalCrisprCount );
302- out .print (sequence .getName () + "\t minced:" + minced .VERSION + "\t repeat_region\t " );
303- out .print ((currCRISPR .start () + 1 ) + "\t " + (currCRISPR .end () + 1 ) + "\t " );
304- out .print (currCRISPR .numRepeats () + "\t .\t .\t ID=" + crispr_id + ";rpt_type=direct;rpt_family=CRISPR;rpt_unit_seq=" + currCRISPR .repeatStringAt (1 ));
305- out .print ("\n " );
306- if (outputformat == 2 ) {
307- out .print (currCRISPR .toGff (sequence .getName (), crispr_id ));
308- }
321+ totalCrisprCount ++;
322+ if (outputformat > 0 && gffOut == null ) {
323+ printGff (out , sequence , currCRISPR );
309324 } else {
310- out .print ("CRISPR " + (++totalCrisprCount ) + " Range: " + (currCRISPR .start () + 1 ) + " - " + (currCRISPR .end () + 1 ) + "\n " );
311- out .print (currCRISPR .toString ());
312- out .print ("Repeats: " + currCRISPR .numRepeats () + "\t " + "Average Length: " + currCRISPR .averageRepeatLength () + "\t \t " );
313- out .print ("Average Length: " + currCRISPR .averageSpacerLength () + "\n \n " );
325+ printTable (out , currCRISPR );
326+ }
327+
328+ if (gffOut != null ) {
329+ printGff (gffOut , sequence , currCRISPR );
314330 }
315331 if (printSpacers ) {
316332 for (int i = 0 ; i < currCRISPR .numSpacers (); ++i ) {
@@ -333,8 +349,33 @@ private boolean findRepeats( DNASequence sequence, int readNum )
333349 out .close ();
334350
335351 }
336- catch (Exception e ) { System .err .println ("--Error writing to file-- \n " ); }
352+ catch (Exception e ) {
353+ System .err .println ("--Error writing to file-- \n " );
354+ e .printStackTrace (System .err );
355+ }
337356
338357 return true ;
339358 }
359+
360+ private boolean printGff (PrintStream out , DNASequence sequence , CRISPR currCRISPR ) {
361+ String crispr_id = "CRISPR" + totalCrisprCount ;
362+ out .print (sequence .getName () + "\t minced:" + minced .VERSION + "\t repeat_region\t " );
363+ out .print ((currCRISPR .start () + 1 ) + "\t " + (currCRISPR .end () + 1 ) + "\t " );
364+ out .print (currCRISPR .numRepeats () + "\t .\t .\t ID=" + crispr_id + ";rpt_type=direct;rpt_family=CRISPR;rpt_unit_seq=" + currCRISPR .repeatStringAt (1 ));
365+ out .print ("\n " );
366+ if (outputformat == 2 ) {
367+ out .print (currCRISPR .toGff (sequence .getName (), crispr_id ));
368+ }
369+ return true ;
370+ }
371+
372+ private boolean printTable (PrintStream out , CRISPR currCRISPR ) {
373+ out .print ("CRISPR " + totalCrisprCount + " Range: " + (currCRISPR .start () + 1 ) + " - " + (currCRISPR .end () + 1 ) + "\n " );
374+ out .print (currCRISPR .toString ());
375+ out .print ("Repeats: " + currCRISPR .numRepeats () + "\t " + "Average Length: " + currCRISPR .averageRepeatLength () + "\t \t " );
376+ out .print ("Average Length: " + currCRISPR .averageSpacerLength () + "\n \n " );
377+ return true ;
378+ }
379+
340380}
381+
0 commit comments