33import au .com .bytecode .opencsv .CSVReader ;
44import au .com .bytecode .opencsv .CSVWriter ;
55import htsjdk .samtools .util .IOUtil ;
6+ import org .apache .commons .io .FileUtils ;
67import org .apache .commons .lang3 .StringUtils ;
78import org .apache .logging .log4j .Logger ;
89import org .json .JSONObject ;
3031import org .labkey .api .sequenceanalysis .pipeline .SequenceOutputHandler ;
3132import org .labkey .api .sequenceanalysis .pipeline .SequencePipelineService ;
3233import org .labkey .api .sequenceanalysis .run .SimpleScriptWrapper ;
34+ import org .labkey .api .util .FileUtil ;
3335import org .labkey .api .util .PageFlowUtil ;
3436import org .labkey .sequenceanalysis .SequenceAnalysisModule ;
3537import org .labkey .sequenceanalysis .SequenceAnalysisSchema ;
@@ -102,6 +104,10 @@ public void processFilesOnWebserver(PipelineJob job, SequenceAnalysisJobSupport
102104 row1 .put ("metricName" , "PangolinLineage" );
103105 row1 .put ("qualvalue" , line [1 ]);
104106 row1 .put ("container" , so .getContainer ());
107+ if (StringUtils .trimToNull (line [3 ]) != null )
108+ {
109+ row1 .put ("comment" , line [3 ]);
110+ }
105111 toInsert .add (row1 );
106112
107113 if (StringUtils .trimToNull (line [2 ]) != null )
@@ -111,11 +117,32 @@ public void processFilesOnWebserver(PipelineJob job, SequenceAnalysisJobSupport
111117 row2 .put ("readset" , so .getReadset ());
112118 row2 .put ("analysis_id" , so .getAnalysis_id ());
113119 row2 .put ("category" , "Pangolin" );
114- row2 .put ("metricName" , "PangolinLineageConfidence " );
120+ row2 .put ("metricName" , "PangolinConflicts " );
115121 row2 .put ("value" , Double .parseDouble (line [2 ]));
116122 row2 .put ("container" , so .getContainer ());
123+ if (StringUtils .trimToNull (line [3 ]) != null )
124+ {
125+ row2 .put ("comment" , line [3 ]);
126+ }
117127 toInsert .add (row2 );
118128 }
129+
130+ if (StringUtils .trimToNull (line [4 ]) != null )
131+ {
132+ Map <String , Object > row = new CaseInsensitiveHashMap <>();
133+ row .put ("dataid" , so .getDataId ());
134+ row .put ("readset" , so .getReadset ());
135+ row .put ("analysis_id" , so .getAnalysis_id ());
136+ row .put ("category" , "Pangolin" );
137+ row .put ("metricName" , "PangolinSummary" );
138+ row .put ("qualvalue" , line [4 ]);
139+ row .put ("container" , so .getContainer ());
140+ if (StringUtils .trimToNull (line [3 ]) != null )
141+ {
142+ row .put ("comment" , line [3 ]);
143+ }
144+ toInsert .add (row );
145+ }
119146 }
120147 }
121148 catch (IOException e )
@@ -167,7 +194,29 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c
167194 for (SequenceOutputFile so : inputFiles )
168195 {
169196 String [] pangolinData = runPangolin (so .getFile (), ctx .getLogger (), ctx .getFileManager ());
170- writer .writeNext (new String []{String .valueOf (so .getRowid ()), (pangolinData == null ? "QC Fail" : pangolinData [1 ]), (pangolinData == null ? "" : pangolinData [2 ])});
197+
198+ List <String > versions = new ArrayList <>();
199+ if (pangolinData != null )
200+ {
201+ if (StringUtils .trimToNull (pangolinData [3 ]) != null )
202+ {
203+ versions .add ("Pangolin version: " + pangolinData [3 ]);
204+ }
205+
206+ if (StringUtils .trimToNull (pangolinData [4 ]) != null )
207+ {
208+ versions .add ("pangoLEARN version: " + pangolinData [4 ]);
209+ }
210+
211+ if (StringUtils .trimToNull (pangolinData [5 ]) != null )
212+ {
213+ versions .add ("pango version: " + pangolinData [5 ]);
214+ }
215+ }
216+
217+ String comment = StringUtils .join (versions , "," );
218+
219+ writer .writeNext (new String []{String .valueOf (so .getRowid ()), (pangolinData == null ? "QC Fail" : pangolinData [1 ]), (pangolinData == null ? "" : pangolinData [2 ]), comment , (pangolinData == null ? "" : pangolinData [7 ])});
171220 }
172221 }
173222 catch (IOException e )
@@ -192,6 +241,11 @@ public static void updatePangolinRefs(Logger log) throws PipelineJobException
192241 wrapper .execute (Arrays .asList ("/bin/bash" , pangolin .getPath ()));
193242 }
194243
244+ public static File getRenamedPangolinOutput (File consensusFasta )
245+ {
246+ return new File (consensusFasta .getParentFile (), FileUtil .getBaseName (consensusFasta ) + ".pangolin.csv" );
247+ }
248+
195249 public static String [] runPangolin (File consensusFasta , Logger log , PipelineOutputTracker tracker ) throws PipelineJobException
196250 {
197251 SimpleScriptWrapper wrapper = new SimpleScriptWrapper (log );
@@ -211,17 +265,21 @@ public static String[] runPangolin(File consensusFasta, Logger log, PipelineOutp
211265 throw new PipelineJobException ("Pangolin output not found: " + output .getPath ());
212266 }
213267
214- tracker .addIntermediateFile (output );
215- try (CSVReader reader = new CSVReader (Readers .getReader (output )))
268+ try
216269 {
217- reader .readNext (); //header
218- String [] line = reader .readNext ();
270+ File outputMoved = getRenamedPangolinOutput (consensusFasta );
271+ FileUtils .moveFile (output , outputMoved );
272+ try (CSVReader reader = new CSVReader (Readers .getReader (outputMoved )))
273+ {
274+ reader .readNext (); //header
275+ String [] line = reader .readNext ();
219276
220- return line ;
277+ return line ;
278+ }
221279 }
222280 catch (IOException e )
223281 {
224- throw new PipelineJobException ();
282+ throw new PipelineJobException (e );
225283 }
226284 }
227285}
0 commit comments