public Read DeepCopy() { var read = new Read(Chromosome, new BamAlignment(BamAlignment)); if (_stitchedCigarInitialized) { read.StitchedCigar = StitchedCigar.DeepCopy(); } //read.StitchedCigar = StitchedCigar; // copy this one - it may have been reset if (_directionCigarInitialized) { read.CigarDirections = new CigarDirection(CigarDirections.ToString()); } if (_sequencedBaseDirectionMapInitialized) { read.SequencedBaseDirectionMap = (DirectionType[])SequencedBaseDirectionMap.Clone(); } if (_positionMapInitialized) { read.PositionMap = (int[])PositionMap.Clone(); } return(read); }
private void SetSequencedBaseDirectionMapFromBam() { try { if (_sequencedBaseDirectionMap == null || _sequencedBaseDirectionMap.Length != ReadLength) { _sequencedBaseDirectionMap = new DirectionType[ReadLength]; if (CigarDirections != null && (CigarDirections.Directions.Count > 0)) { _expandedBaseDirectionMap = CigarDirections.Expand().ToArray(); _sequencedBaseDirectionMap = CreateSequencedBaseDirectionMap(_expandedBaseDirectionMap, CigarData); } else { var reverse = BamAlignment.IsReverseStrand(); for (var i = 0; i < ReadLength; i++) { _sequencedBaseDirectionMap[i] = reverse ? DirectionType.Reverse : DirectionType.Forward; } } _sequencedBaseDirectionMapInitialized = true; } } catch (Exception e) { throw new Exception("Exception caught in " + Name + ": " + e.StackTrace, e); } }