修正版 ThermoMSで取得したrawデータを開く方法

ThermoMSで取得したrawデータを開く方法

前回
http://qiita.com/gili/items/bb09f963ff996ea1521b
のものより少しだけスマートになったと思う(なったとは言ってない)。

Xrawfi2_x64.dllのインストールおよび参照の追加は前回通り。
予めフォームへファイルをD&Dで開けるように設定しておいたものを利用。

// 
  private void textBox1_DragDrop(object sender, DragEventArgs e)
        {
            MSFileReader_XRawfile rawfile = new MSFileReader_XRawfile();

      string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            rawfile.Open(fileName[0]);
      //MSモードにする
            rawfile.SetCurrentController(0, 1);

rawデータを開き、SetCurrentController(0, 1)でMSデータを読み込めるようにする。

            int totalscannum = 0;
            double lowmass = 0;
            double highmass = 0;
            double massresolution = 0;

            string MSname = null;
            string MSmodel = null;

ここら辺は必要に応じて初期化
MS情報はrefで取得

            rawfile.GetNumSpectra(ref totalscannum);
            rawfile.GetLowMass(ref lowmass);
            rawfile.GetHighMass(ref highmass);
            rawfile.GetMassResolution(ref massresolution);

            rawfile.GetInstModel(ref MSname);
            rawfile.GetInstName(ref MSmodel);

            double ProfilePeakWidth = 0.0;
            object MassList = null;
            object PeakFlags = null;
            int ArraySize = 0;
            int ArraySize2 = 0;

            object MassList2 = null;

fullmass分析時にあらかじめm/z配列長を取得prescanを取っておくと便利な時がある

            rawfile.GetMassListFromScanNum(1, null, 1, 0, 0, 0, ref ProfilePeakWidth,
            ref MassList, ref PeakFlags, ref ArraySize);

            double[,] mslist = (double[,])MassList;
            int prescan = mslist.GetLength(0);

FullMSスキャンの時は配列をあらかじめ決め打ちできるので
下のやり方で問題ない。
MS/MS等を行うときは別途配列の初期化が必要。

            double[, ,] array3d = new double[totalscannum, 2, mslist.GetLength(1)];


            for (int d1 = 1; d1 < totalscannum; d1++)
            {
                for (int d2 = 1; d2 < mslist.GetLength(1); d2++)
                {
                    long d3 = d2 - 1;

                    rawfile.GetMassListFromScanNum(d1, null, 1, 0, 0, 0, ref ProfilePeakWidth,
                    ref MassList2, ref PeakFlags, ref ArraySize2);

                    double[,] mslist2 = (double[,])MassList2;

                    array3d[d1, 0, d2] = mslist2[0, d3];
                    array3d[d1, 1, d2] = mslist2[1, d3];

                }
            }
        }

クロマトデータとMSデータを一緒にしているけれど、
必要がなければMassList2だけで十分な情報が得られるはず。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.