示例#1
0
文件: Form1.cs 项目: arneb89/PolSCI
        private void btnSM_GenerateStokesCurves_Click(object sender, EventArgs e)
        {
            int    pointsCount;
            double poleOptDepth;
            double scale;

            if (this.magSrf == null)
            {
                return;
            }

            try
            {
                pointsCount  = int.Parse(txtSM_PointsNumber.Text);
                poleOptDepth = double.Parse(txtSM_PoleOptDepth.Text);
                scale        = double.Parse(txtSM_Scale.Text);
            }
            catch
            {
                MessageBox.Show("Wrong format...", "Error...");
                return;
            }

            txtSM_Results.Text += "\r\nModel parameters:";
            txtSM_Results.Text += string.Format("\r\nInc[deg]: {0:00.000}",
                                                this.magSrf.InclinationOfRotationAxis * 180 / Math.PI);
            txtSM_Results.Text += string.Format("\r\nLat. Dipol Offset [deg]: {0:00.000}",
                                                this.magSrf.LatitudeDipolOffset * 180 / Math.PI);
            txtSM_Results.Text += string.Format("\r\nLong. Dipol Offset [deg]: {0:00.000}",
                                                this.magSrf.LongitudeDipolOffset * 180 / Math.PI);

            try
            {
                this.stokesProvider = new Maper.StokesImaging.StokesParsProvider(
                    @txtPathToStockesIGrid.Text,
                    @txtPathToStockesQGrid.Text,
                    @txtPathToStockesVGrid.Text
                    );
            }
            catch
            {
                MessageBox.Show("Cannot find some Stockes Grid file...", "Error...");
                txtSM_Results.Text += "\r\nOops... Some error was occured...";
                return;
            }

            //StokesImaging.WM85Interpolator wm85 = new Maper.StokesImaging.WM85Interpolator();

            double[] phases = new double[pointsCount];
            for (int i = 0; i < phases.Length; i++)
            {
                phases[i] = i / (double)pointsCount;
            }


            //this.stokesModeller = new Maper.StokesImaging.StokesModeller(
            //    /*stokesProvider.StokesI*/ wm85.GetStokesI,
            //    /*stokesProvider.StokesV*/ wm85.GetStokesV,
            //    /*stokesProvider.StokesQ*/ wm85.GetStokesQ,
            //    stokesProvider.StokesU,
            //    this.magSrf);

            this.stokesModeller = new Maper.StokesImaging.StokesModeller(
                stokesProvider.StokesI,
                stokesProvider.StokesV,
                stokesProvider.StokesQ,
                stokesProvider.StokesU,
                this.magSrf);


            this.stokesModeller.StartStokesCurvesModelling(phases, scale, poleOptDepth);

            LinePlot lpI = new LinePlot(this.stokesModeller.StokesI, phases);
            LinePlot lpV = new LinePlot(this.stokesModeller.StokesV, phases);
            LinePlot lpQ = new LinePlot(this.stokesModeller.StokesQ, phases);
            LinePlot lpU = new LinePlot(this.stokesModeller.StokesU, phases);

            plotSM_StokesI.Add(lpI);
            plotSM_StokesV.Add(lpV);
            plotSM_StokesQ.Add(lpQ);
            plotSM_StokesU.Add(lpU);

            plotSM_StokesI.Title = "Stokes I Curve";
            plotSM_StokesQ.Title = "Stokes Q Curve";
            plotSM_StokesU.Title = "Stokes U Curve";
            plotSM_StokesV.Title = "Stokes V Curve";

            plotSM_StokesI.XAxis1.Label = "Phase";
            plotSM_StokesQ.XAxis1.Label = "Phase";
            plotSM_StokesU.XAxis1.Label = "Phase";
            plotSM_StokesV.XAxis1.Label = "Phase";

            plotSM_StokesI.Refresh();
            plotSM_StokesV.Refresh();
            plotSM_StokesQ.Refresh();
            plotSM_StokesU.Refresh();

            txtSM_Results.Text += "\r\nError String: " + this.stokesModeller.ErrorString;
        }
示例#2
0
文件: Form1.cs 项目: arneb89/PolSCI
        private void button1_Click(object sender, EventArgs e)
        {
            int    pointsCount;
            double poleOptDepth;
            double scale;



            try
            {
                pointsCount  = int.Parse(txtSM_PointsNumber.Text);
                poleOptDepth = double.Parse(txtSM_PoleOptDepth.Text);
                scale        = double.Parse(txtSM_Scale.Text);
            }
            catch
            {
                MessageBox.Show("Wrong format...", "Error...");
                return;
            }



            ///////////////////////////////////////////////////////////////////////////////////////



            try
            {
                this.stokesProvider = new Maper.StokesImaging.StokesParsProvider(
                    @txtPathToStockesIGrid.Text,
                    @txtPathToStockesQGrid.Text,
                    @txtPathToStockesVGrid.Text
                    );
            }
            catch
            {
                MessageBox.Show("Cannot find some Stockes Grid file...", "Error...");
                txtSM_Results.Text += "\r\nOops... Some error was occured...";
                return;
            }

            double[] phases = new double[pointsCount];
            for (int i = 0; i < phases.Length; i++)
            {
                phases[i] = i / (double)pointsCount;
            }

            StreamWriter sw = new StreamWriter("D:\\out.dat");

            for (double bbg = 0; bbg <= 38.0; bbg = bbg + 0.5)
            {
                double mm1 = 49 * 1e6, mm2 = 51 * 1e6;
                mm1    = 43.31554 - 0.25286 * bbg + 0.00373 * bbg * bbg; // 39
                mm2    = 57.93482 - 0.41099 * bbg + 0.00617 * bbg * bbg; // 51
                mm1    = mm1 * 1e6;
                mm2    = mm2 * 1e6;
                magSrf = new Maper.StokesImaging.MagnetizedSurface(79 * Math.PI / 180, bbg * Math.PI / 180, 80 * Math.PI / 180, mm1, mm2, 360, 720, 0);
                this.stokesModeller = new Maper.StokesImaging.StokesModeller(
                    stokesProvider.StokesI,
                    stokesProvider.StokesV,
                    stokesProvider.StokesQ,
                    stokesProvider.StokesU,
                    this.magSrf);

                this.magSrf.AddRectSpot((38 - bbg) * Math.PI / 180, //!
                                        (39 - bbg) * Math.PI / 180, //!
                                        179 * Math.PI / 180,
                                        181 * Math.PI / 180,
                                        1.0);

                for (double l = 1; l <= 6; l = l + 0.1)
                {
                    this.stokesModeller.StartStokesCurvesModelling(phases, scale, Math.Pow(10, l) * 39e6 / mm1);
                    double[] sti = stokesModeller.StokesI;
                    double[] stv = stokesModeller.StokesV;
                    sw.Write(string.Format("{0}\t{1}\t", bbg, l).Replace(",", "."));
                    for (int k = 0; k < sti.Length; k++)
                    {
                        sw.Write(string.Format("{0}\t", sti[k]).Replace(",", "."));
                    }
                    for (int k = 0; k < stv.Length; k++)
                    {
                        sw.Write(string.Format("{0}\t", stv[k]).Replace(",", "."));
                    }
                    sw.Write("\r\n");
                }
            }
            sw.Close();
            txtSM_Results.Text += "\r\nError String: " + this.stokesModeller.ErrorString;
        }