LoginSignup
0

More than 5 years have passed since last update.

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

Posted at

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だけで十分な情報が得られるはず。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0