Exemple #1
0
        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();
        }
Exemple #2
0
 public TraceConvert(ABIDataInfo dataInfo)
 {
     this.dataInfo = dataInfo;
 }