@@ -625,7 +625,7 @@ && getNonInsertionVariants().get(position + 1).containsKey(ref.get(position + 1)
625625 referenceForwardCoverage = tpref .varsCountOnForward ;
626626 referenceReverseCoverage = tpref .varsCountOnReverse ;
627627 }
628-
628+ List < Integer > positionsForChangedRefVariant = new ArrayList <>();
629629 // only reference reads are observed.
630630 if (variationsAtPos .variants .size () > 0 ) { //Condition: non-reference variants are found
631631 //Loop over non-reference variants
@@ -936,61 +936,75 @@ else if (deletionLength < instance().conf.SVMINLEN) {
936936 }
937937
938938 adjustVariantCounts (position , vref );
939-
940- //Construct debug lines
941- if (instance ().conf .debug ) {
942- StringBuilder sb = new StringBuilder ();
943- for (String str : debugLines ) {
944- if (sb .length () > 0 ) {
945- sb .append (" & " );
946- }
947- sb .append (str );
948- }
949- vref .DEBUG = sb .toString ();
939+ if (startPosition != position && instance ().conf .doPileup ) {
940+ positionsForChangedRefVariant .add (position );
950941 }
942+ constructDebugLines (debugLines , vref );
951943 }
952944 //TODO: It is a "lazy" solution because current logic in realignment methods can't be changed simply for --nosv option
953945 if (instance ().conf .disableSV ) {
954946 variationsAtPos .variants .removeIf (vref -> ANY_SV .matcher (vref .varallele ).find ());
955947 }
956- } else if (variationsAtPos .referenceVariant != null ) {
957- Variant vref = variationsAtPos .referenceVariant ; //no variant reads are detected.
958- vref .totalPosCoverage = totalPosCoverage ;
959- vref .positionCoverage = 0 ;
960- vref .frequency = 0 ;
961- vref .refForwardCoverage = referenceForwardCoverage ;
962- vref .refReverseCoverage = referenceReverseCoverage ;
963- vref .varsCountOnForward = 0 ;
964- vref .varsCountOnReverse = 0 ;
965- vref .msi = 0 ;
966- vref .msint = 0 ;
967- vref .strandBiasFlag += ";0" ;
968- vref .shift3 = 0 ;
969- vref .startPosition = position ;
970- vref .endPosition = position ;
971- vref .highQualityReadsFrequency = roundHalfEven ("0.0000" , vref .highQualityReadsFrequency );
972- String referenceBase = ref .containsKey (position ) ? ref .get (position ).toString () : "" ; // $r
973- //both refallele and varallele are 1 base from reference string
974- vref .refallele = validateRefallele (referenceBase );
975- vref .varallele = validateRefallele (referenceBase );
976- vref .genotype = referenceBase + "/" + referenceBase ;
977- vref .leftseq = "" ;
978- vref .rightseq = "" ;
979- vref .duprate = duprate ;
980- //Construct debug lines
981- if (instance ().conf .debug ) {
982- StringBuilder sb = new StringBuilder ();
983- for (String str : debugLines ) {
984- if (sb .length () > 0 ) {
985- sb .append (" & " );
986- }
987- sb .append (str );
988- }
989- vref .DEBUG = sb .toString ();
990- }
948+ } else if (variationsAtPos .referenceVariant != null ) { //no variant reads are detected
949+ Variant vref = variationsAtPos .referenceVariant ;
950+ updateRefVariant (position , totalPosCoverage , vref , debugLines ,
951+ referenceForwardCoverage , referenceReverseCoverage );
991952 } else {
992953 variationsAtPos .referenceVariant = new Variant ();
993954 }
955+
956+ // Update reference variants if there were indels and start position were changed, so after update
957+ // ref variants can be output in pileup
958+ if (positionsForChangedRefVariant .contains (position ) && variationsAtPos .referenceVariant != null ) {
959+ Variant vref = variationsAtPos .referenceVariant ;
960+ updateRefVariant (position , totalPosCoverage , vref , debugLines ,
961+ referenceForwardCoverage , referenceReverseCoverage );
962+ }
963+ }
964+
965+ private void updateRefVariant (int position , int totalPosCoverage , Variant vref , List <String > debugLines ,
966+ int referenceForwardCoverage , int referenceReverseCoverage ) {
967+ vref .totalPosCoverage = totalPosCoverage ;
968+ vref .positionCoverage = 0 ;
969+ vref .frequency = 0 ;
970+ vref .refForwardCoverage = referenceForwardCoverage ;
971+ vref .refReverseCoverage = referenceReverseCoverage ;
972+ vref .varsCountOnForward = 0 ;
973+ vref .varsCountOnReverse = 0 ;
974+ vref .msi = 0 ;
975+ vref .msint = 0 ;
976+ vref .strandBiasFlag += ";0" ;
977+ vref .shift3 = 0 ;
978+ vref .startPosition = position ;
979+ vref .endPosition = position ;
980+ vref .highQualityReadsFrequency = roundHalfEven ("0.0000" , vref .highQualityReadsFrequency );
981+ String referenceBase = ref .containsKey (position ) ? ref .get (position ).toString () : "" ; // $r
982+ //both refallele and varallele are 1 base from reference string
983+ vref .refallele = validateRefallele (referenceBase );
984+ vref .varallele = validateRefallele (referenceBase );
985+ vref .genotype = referenceBase + "/" + referenceBase ;
986+ vref .leftseq = "" ;
987+ vref .rightseq = "" ;
988+ vref .duprate = duprate ;
989+
990+ constructDebugLines (debugLines , vref );
991+ }
992+
993+ /**
994+ * Construct DEBUG lines for the variant
995+ */
996+ private void constructDebugLines (List <String > debugLines , Variant vref ) {
997+
998+ if (instance ().conf .debug ) {
999+ StringBuilder sb = new StringBuilder ();
1000+ for (String str : debugLines ) {
1001+ if (sb .length () > 0 ) {
1002+ sb .append (" & " );
1003+ }
1004+ sb .append (str );
1005+ }
1006+ vref .DEBUG = sb .toString ();
1007+ }
9941008 }
9951009
9961010 /**
0 commit comments