internal void Parse() { int sections = ReadSections(0); int numPoints = 0, numBases = 0; float fspacing = 0; /* average base spacing */ int no_bases = 0; int indexO = 0; /* File offset where the index is */ int baseO = 0; /* File offset where the bases are stored */ int fwo_ = 0; /* base . lane mapping */ int dataCO = 0; /* File offset where the C trace is stored */ int dataAO = 0; /* File offset where the A trace is stored */ int dataGO = 0; /* File offset where the G trace is stored */ int dataTO = 0; /* File offset where the T trace is stored */ if ((indexO = GetABIIndexOffset()) < 0) { return; } GetABIIndexEntryLW(indexO, DataLabel, DataCount[0], 3, ref numPoints); if (GetABIIndexEntryLW(indexO, BaseEntryLabel, 1, 3, ref numBases) == 0) { no_bases = 1; numBases = 0; } DataInfo = new ABIDataInfo(numPoints, numBases); if (GetABIIndexEntryLW(indexO, FWO_Label, 1, 5, ref fwo_) == 0) { fwo_ = 0x43414754; } if ((sections & READ_SAMPLES) > 0) { int[] dataxO = new int[4]; /*Get the positions of the four traces */ GetABIIndexEntryLW(indexO, DataLabel, DataCount[0], 5, ref dataxO[BaseIdnex((char)(fwo_ >> 24 & 255))]); GetABIIndexEntryLW(indexO, DataLabel, DataCount[1], 5, ref dataxO[BaseIdnex((char)(fwo_ >> 16 & 255))]); GetABIIndexEntryLW(indexO, DataLabel, DataCount[2], 5, ref dataxO[BaseIdnex((char)(fwo_ >> 8 & 255))]); GetABIIndexEntryLW(indexO, DataLabel, DataCount[3], 5, ref dataxO[BaseIdnex((char)(fwo_ & 255))]); dataCO = dataxO[0]; dataAO = dataxO[1]; dataGO = dataxO[2]; dataTO = dataxO[3]; // Read the traces and bases information if ((sections & READ_SAMPLES) > 0) { /* Read in the C trace */ fs.Seek(header_fudge + dataCO, SeekOrigin.Begin); GetABIint2(0, string.Empty, 0, DataInfo.TraceC, DataInfo.NPoints); /* Read in the A trace */ fs.Seek(header_fudge + dataAO, SeekOrigin.Begin); GetABIint2(0, string.Empty, 0, DataInfo.TraceA, DataInfo.NPoints); /* Read in the G trace */ fs.Seek(header_fudge + dataGO, SeekOrigin.Begin); GetABIint2(0, string.Empty, 0, DataInfo.TraceG, DataInfo.NPoints); /* Read in the T trace */ fs.Seek(header_fudge + dataTO, SeekOrigin.Begin); GetABIint2(0, string.Empty, 0, DataInfo.TraceT, DataInfo.NPoints); /* Compute highest trace peak */ for (int i = 0; i < DataInfo.NPoints; i++) { if (DataInfo.MaxTraceVal < DataInfo.TraceA[i]) { DataInfo.MaxTraceVal = DataInfo.TraceA[i]; } if (DataInfo.MaxTraceVal < DataInfo.TraceC[i]) { DataInfo.MaxTraceVal = DataInfo.TraceC[i]; } if (DataInfo.MaxTraceVal < DataInfo.TraceG[i]) { DataInfo.MaxTraceVal = DataInfo.TraceG[i]; } if (DataInfo.MaxTraceVal < DataInfo.TraceT[i]) { DataInfo.MaxTraceVal = DataInfo.TraceT[i]; } } } byte[] conf = new byte[DataInfo.NBases]; GetABIint1(indexO, BaseConfLabel, 1, conf, DataInfo.NBases); GetABIIndexEntryLW(indexO, BaseEntryLabel, 1, 5, ref baseO); fs.Seek(header_fudge + baseO, SeekOrigin.Begin); for (int i = 0; i < DataInfo.NBases; ++i) { int ch = MFGetC(); DataInfo.Bases[i] = (((char)ch) == 'N') ? '-' : (char)ch; switch (DataInfo.Bases[i]) { case 'A': case 'a': DataInfo.Prob_A[i] = conf[i]; DataInfo.Prob_C[i] = 0; DataInfo.Prob_G[i] = 0; DataInfo.Prob_T[i] = 0; break; case 'C': case 'c': DataInfo.Prob_A[i] = 0; DataInfo.Prob_C[i] = conf[i]; DataInfo.Prob_G[i] = 0; DataInfo.Prob_T[i] = 0; break; case 'G': case 'g': DataInfo.Prob_A[i] = 0; DataInfo.Prob_C[i] = 0; DataInfo.Prob_G[i] = conf[i]; DataInfo.Prob_T[i] = 0; break; case 'T': case 't': DataInfo.Prob_A[i] = 0; DataInfo.Prob_C[i] = 0; DataInfo.Prob_G[i] = 0; DataInfo.Prob_T[i] = conf[i]; break; default: DataInfo.Prob_A[i] = 0; DataInfo.Prob_C[i] = 0; DataInfo.Prob_G[i] = 0; DataInfo.Prob_T[i] = 0; break; } } DataInfo.Bases[DataInfo.Bases.Length - 1] = ' '; } GetABIint2(indexO, BasePosEntryLabel, 1, DataInfo.BasePos, DataInfo.NBases); fs.Close(); }
public TraceConvert(ABIDataInfo dataInfo) { this.dataInfo = dataInfo; }