private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DataSetFactory.SearchFolder(".");
            // read input data
            var dataset = sds.DataSet.Open("Tutorial2.csv?inferDims=true&appendMetadata=true");

            if (!dataset.Any(var => var.Name == "Model"))
            {
                var x = dataset.GetData <double[]>("X");
                var y = dataset.GetData <double[]>("Observation");
                // compute
                var    xm = x.Sum() / x.Length;
                var    ym = y.Sum() / y.Length;
                double a = 0, d = 0;
                for (int i = 0; i < x.Length; i++)
                {
                    a += (x[i] - xm) * (y[i] - ym);
                    d += (x[i] - xm) * (x[i] - xm);
                }
                a /= d;
                var b     = ym - a * xm;
                var model = x.Select(xx => a * xx + b).ToArray();
                //
                var varid = dataset.Add <double[]>("Model", dataset.Dimensions[0].Name).ID;
                dataset.PutData <double[]>(varid, model);
            }
            Viewer.DataSet = dataset;
        }
示例#2
0
        public MainWindow()
        {
            DataSetFactory.SearchFolder(Environment.CurrentDirectory);

            InitializeComponent();
            InitModel();
            dsvc.DataSet = dataset;
        }
示例#3
0
        private void SaveDataToCdf(MsSpectrum spec, string fpath)
        {
            DataSetFactory.SearchFolder("Microsoft.Research.Science.Data.NetCDF4.dll");
            DataSetFactory.SearchFolder("Microsoft.Research.Science.Data.dll");
            DataSetFactory.SearchFolder("Microsoft.Research.Science.Data.Imperative.dll");

            int    nControllerType = 0;                      // 0 == mass spec device
            int    nContorllerNumber = 1;                    // first MS device
            int    totalNumScans = 0;                        // Number of scans
            int    firstScanNumber = 0, lastScanNumber = -1; // Number of first and last scan
            string scanFilter             = null;            // Scan filter line
            int    numDataPoints          = -1;              // points in both the m/z and intensity arrays
            double retentionTimeInMinutes = -1;
            double minObservedMZ          = -1;
            double maxObservedMZ          = -1;
            double totalIonCurrent        = -1;
            double basePeakMZ             = -1;
            double basePeakIntensity      = -1;
            int    channel     = 0; // unused
            int    uniformTime = 0; // unused
            double frequency   = 0; // unused

            int      arraySize            = -1;
            object   rawData              = null; // rawData wil come as Double[,]
            object   peakFlags            = null;
            string   szFilter             = null; // No filter
            int      intensityCutoffType  = 1;    // No cutoff
            int      intensityCutoffValue = 0;    // No cutoff
            int      maxNumberOfPeaks     = 0;    // 0 : return all data peaks
            double   centroidPeakWidth    = 0;    // No centroiding
            int      centroidThisScan     = 0;    // No centroiding
            DateTime creationDate         = DateTime.MinValue;

            var scanPath = Path.Combine(fpath, $"{spec.Id}.cdf");

            var cdf = DataSet.Open(scanPath);

            cdf.IsAutocommitEnabled = false;
            AddMetadata(cdf);
            IXRawfile5 rawFile = (IXRawfile5) new MSFileReader_XRawfile();

            rawFile.Open(spec.RawFilePath);
            rawFile.SetCurrentController(nControllerType, nContorllerNumber);
            rawFile.GetNumSpectra(ref totalNumScans);

            rawFile.GetFirstSpectrumNumber(ref firstScanNumber);
            rawFile.GetLastSpectrumNumber(ref lastScanNumber);
            rawFile.GetCreationDate(ref creationDate);


            var massVar           = cdf.Add <double>("mass_values", new[] { "point_number" });
            var intensities       = cdf.Add <Int32>("intensity_values", new[] { "point_number" });
            var acqTimeVar        = cdf.Add <double>("scan_acquisition_time", new[] { "scan_number" });
            var scIndexVar        = cdf.Add <int>("scan_index", new[] { "scan_number" });
            var scCountVar        = cdf.Add <int>("point_count", new[] { "scan_number" });
            var totalIntensityVar = cdf.Add <double>("total_intensity", new[] { "scan_number" });

            massVar.Metadata["scale_factor"]     = 1.0;
            intensities.Metadata["scale_factor"] = 1.0;

            try
            {
                var retTimes   = new double[lastScanNumber];
                var ticArr     = new double[lastScanNumber];
                var scanIndex  = new Int32[lastScanNumber];
                var pointCount = new Int32[lastScanNumber];

                for (int curScanNum = firstScanNumber; curScanNum <= lastScanNumber; curScanNum++)
                {
                    rawFile.GetScanHeaderInfoForScanNum(curScanNum,
                                                        ref numDataPoints,
                                                        ref retentionTimeInMinutes,
                                                        ref minObservedMZ,
                                                        ref maxObservedMZ,
                                                        ref totalIonCurrent,
                                                        ref basePeakMZ,
                                                        ref basePeakIntensity,
                                                        ref channel,     // unused
                                                        ref uniformTime, // unused
                                                        ref frequency    // unused
                                                        );
                    scanFilter = null;
                    rawFile.GetFilterForScanNum(curScanNum, ref scanFilter);

                    peakFlags            = null;
                    centroidPeakWidth    = 0;
                    arraySize            = 0;
                    intensityCutoffType  = 1;
                    intensityCutoffValue = (int)(0.001 * basePeakIntensity);
                    rawFile.GetMassListFromScanNum(
                        ref curScanNum,
                        szFilter,              // filter
                        intensityCutoffType,   // intensityCutoffType
                        intensityCutoffValue,  // intensityCutoffValue
                        maxNumberOfPeaks,      // maxNumberOfPeaks
                        centroidThisScan,      // centroid result?
                        ref centroidPeakWidth, // centroidingPeakWidth
                        ref rawData,           // daw data
                        ref peakFlags,         // peakFlags
                        ref arraySize);        // array size

                    ;
                    var datArray = (Array)rawData;
                    var massArr  = new double[arraySize];
                    var intArr   = new int[arraySize];
                    for (var j = 0; j < arraySize; j++)
                    {
                        massArr[j] = (double)datArray.GetValue(0, j);
                        intArr[j]  = Convert.ToInt32(datArray.GetValue(1, j));
                    }
                    //Console.Write($"curScan = {curScanNum}\n");
                    var ind = curScanNum - 1;
                    pointCount[ind] = arraySize;
                    if (ind == 0)
                    {
                        scanIndex[ind]     = 0;
                        scanIndex[ind + 1] = arraySize;
                    }
                    else
                    {
                        scanIndex[ind] += scanIndex[ind - 1];
                        if (ind + 1 < lastScanNumber)
                        {
                            scanIndex[ind + 1] = arraySize;
                        }
                    }
                    retTimes[ind] = TimeSpan.FromMinutes(retentionTimeInMinutes).TotalSeconds;
                    ticArr[ind]   = totalIonCurrent;
                    massVar.Append(massArr);
                    intensities.Append(intArr);
                    rawData = null;
                }

                totalIntensityVar.PutData(ticArr);
                scIndexVar.PutData(scanIndex);
                acqTimeVar.PutData(retTimes);
                scCountVar.PutData(pointCount);

                cdf.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                cdf.Dispose();
                rawFile.Close();
            }
        }
示例#4
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                PrintUsage(); return;
            }
#if DEBUG
            Console.WriteLine("DEBUG version: searching current folder for providers...");
            DataSetFactory.SearchFolder(".");
#endif
            try
            {
                string command = args[0];
                if (args.Length == 1 && (command.Contains('.') || command.Contains(':')))
                {
                    // Command cannot . or : for these are mean either extension or schema prefix.
                    DoList(args[0]);
                    return;
                }
                if (command == "list")
                {
                    if (!AssertNumberOfArgs(args, 2))
                    {
                        return;
                    }
                    DoList(args[1]);
                }
                else if (command == "meta")
                {
                    if (!AssertNumberOfArgs(args, 2, int.MaxValue))
                    {
                        return;
                    }
                    DoMeta(args[1], GetCommandArgs(args, 2));
                }
                else if (command == "update")
                {
                    if (!AssertNumberOfArgs(args, 4, int.MaxValue))
                    {
                        return;
                    }
                    DoUpdate(args[1], GetCommandArgs(args, 2));
                }
                else if (command == "data")
                {
                    if (!AssertNumberOfArgs(args, 2, int.MaxValue))
                    {
                        return;
                    }
                    DoData(args[1], GetCommandArgs(args, 2));
                }
                else if (command == "copy")
                {
                    if (!AssertNumberOfArgs(args, 3))
                    {
                        return;
                    }
                    DoCopy(args[1], args[2]);
                }
                else if (command == "info")
                {
                    if (!AssertNumberOfArgs(args, 1))
                    {
                        return;
                    }
                    DoInfo();
                }
                else if (command == "/?" || command == "help")
                {
                    PrintUsage();
                }
                else
                {
                    WriteError("Unknown command.");
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("\nFAILED: ");
                do
                {
#if DEBUG
                    Console.Error.WriteLine(ex);
#else
                    Console.Error.WriteLine(ex.Message);
#endif
                    ex = ex.InnerException;
                } while (ex != null);
                Console.ResetColor();
            }
        }