コード例 #1
0
            public XYToRADec(string wcsfilepath, double Xpos, double Ypos)
            {
                //Open reference image in TSX.  Plate solve.
                ccdsoftImage tsx_img = new ccdsoftImage();

                tsx_img.Path = wcsfilepath;
                tsx_img.Open();
                tsx_img.DetachOnClose = 0;
                try
                {
                    tsx_img.InsertWCS(true);
                }
                catch
                {
                    tsx_img.Close();
                    plateSolve = false;
                    return;
                }
                tsx_img.XYToRADec(Xpos, Ypos);
                targetRA    = tsx_img.XYToRADecResultRA();
                targetDec   = tsx_img.XYToRADecResultDec();
                northangle  = tsx_img.NorthAngle;
                imagescale  = tsx_img.ScaleInArcsecondsPerPixel;
                imagewidth  = tsx_img.WidthInPixels;
                imageheight = tsx_img.HeightInPixels;
                plateSolve  = true;
                tsx_img.Close();
                return;
            }
コード例 #2
0
ファイル: ImageArray.cs プロジェクト: rrskybox/SuperScan
        public ImageArray(int xSize, int ySize)
        //Open a new integer array without a file connection
        //  get and store the width and height in pixels for changes
        //  close the TSX window
        {
            //Might want to check for excessively large array here
            ccdsoftImage tsx_im = new ccdsoftImage();

            tsx_im.New(xSize, ySize, pixeldepth);
            var img = tsx_im.DataArray;
            var pix = new int[img.Length];

            for (int i = 0; i < img.Length; i++)
            {
                pix[i] = Convert.ToInt32(img[i]);
            }
            imagePixels          = pix;
            pixelSizeX           = tsx_im.WidthInPixels;
            pixelSizeY           = tsx_im.HeightInPixels;
            tsx_im.DetachOnClose = 0;
            tsx_im.Close();
            tsx_im = null;
            pix    = null;
            GC.Collect();
            return;
        }
コード例 #3
0
ファイル: ImageArray.cs プロジェクト: rrskybox/SuperScan
        private int pixeldepth = 16;  //Fixed pixel depth -- May be changed latger

        public ImageArray(string filepath)
        //Open a new integer array representing the contents of a TSX image
        //  get and store the width and height in pixels for changes
        //  close the TSX window
        {
            ccdsoftImage tsx_im = new ccdsoftImage();

            imageFilePath = filepath;
            tsx_im.Path   = imageFilePath;
            tsx_im.Open();
            //tsx_im.AttachToActive();
            var img = tsx_im.DataArray;
            var pix = new int[img.Length];

            for (int i = 0; i < img.Length; i++)
            {
                pix[i] = Convert.ToInt32(img[i]);
            }
            imagePixels          = pix;
            pixelSizeX           = tsx_im.WidthInPixels;
            pixelSizeY           = tsx_im.HeightInPixels;
            tsx_im.DetachOnClose = 0;
            tsx_im.Close();
            tsx_im = null;
            pix    = null;
            GC.Collect();
            return;
        }
コード例 #4
0
            public RADecToXY(string wcsfilepath, double tRA, double tDec)
            {
                //Open reference image in TSX.  Plate solve.
                ccdsoftImage tsx_img = new ccdsoftImage();

                tsx_img.Path = wcsfilepath;
                tsx_img.Open();
                tsx_img.DetachOnClose = 0;
                try
                {
                    tsx_img.InsertWCS(true);
                }
                catch
                {
                    tsx_img.Close();
                    plateSolveResult = false;
                    return;
                }
                tsx_img.RADecToXY(tRA, tDec);
                targetX     = Convert.ToInt32(tsx_img.RADecToXYResultX());
                targetY     = Convert.ToInt32(tsx_img.RADecToXYResultY());
                northangle  = tsx_img.NorthAngle;
                imagescale  = tsx_img.ScaleInArcsecondsPerPixel;
                imagewidth  = tsx_img.WidthInPixels;
                imageheight = tsx_img.HeightInPixels;
                //Check for some catastrophic problem with the image link result
                if ((targetX < 0) || (targetX > imagewidth) || (targetY < 0) || (targetY > imageheight))
                {
                    plateSolveResult = false;
                }
                else
                {
                    plateSolveResult = true;
                };

                tsx_img.Close();
                return;
            }
コード例 #5
0
ファイル: ImageArray.cs プロジェクト: rrskybox/SuperScan
        public void Store(string filepath)
        //Saves the image data as a new file through TSX
        //Adjust to 256 bit depth because TSX DataArray is still broken
        //  Change later
        {
            double       bitdepth = 256;
            ccdsoftImage tsx_im   = new ccdsoftImage();

            tsx_im.New(pixelSizeX, pixelSizeY, pixeldepth);
            var imgarr = tsx_im.DataArray;

            for (int i = 0; i < imagePixels.Length; i++)
            {
                imgarr[i] = imagePixels[i] / bitdepth;
            }
            tsx_im.DataArray = imgarr;
            tsx_im.Path      = filepath;
            tsx_im.Save();
            tsx_im.DetachOnClose = 0;
            tsx_im.Close();
            tsx_im = null;
            GC.Collect();
            return;
        }
コード例 #6
0
 public static void CloseFitsFile(ccdsoftImage tsximg)
 {
     try { tsximg.Close(); }
     catch { return; };
     return;
 }
コード例 #7
0
        public bool NewStar(string gname, string dfilepath, string rfilepath)
        {
            //Look for star-like reminant in difference image using the TSX "ShowInventory" (Sextractor) function
            //   return true if star-like object found, false if not.
            //

            //Open a new TSX Image object, then load and open difference image
            ccdsoftImage tsx_dif = new ccdsoftImage();

            tsx_dif.Path = dfilepath;
            tsx_dif.Open();
            //Prepare TSX to close the image window when closing the image
            tsx_dif.DetachOnClose = 0;
            //Look for stars using Sextractor
            //  If fails, close the object and image
            try
            {
                int tdstat = tsx_dif.ShowInventory();
            }
            catch
            {
                tsx_dif.Close();
                LogEntry("No suspects:  Sextractor failed on Difference Image.");
                return(false);
            }
            // Sextractor didnt// run into any problems, but may have found nothing
            //   Check how many objects found, if none then close up and return false
            //   If something is found, then leave the window open and return "true"
            var dMagArr = tsx_dif.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryMagnitude);
            //double[] FWHMArr = Convert.ToDouble(tDiff.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryFWHM));
            var dXPosArr = tsx_dif.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryX);
            var dYPosArr = tsx_dif.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryY);
            //double[] ElpArr = Convert.ToDouble(tDiff.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryEllipticity));
            var dClsArr = tsx_dif.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryClass);

            if (dMagArr.Length == 0)
            {
                tsx_dif.Close();
                LogEntry("No suspects:  No light sources found on Difference Image.");
                return(false);
            }
            else
            {
                //We have at least one hit in the box.  Now look to see if any don//t match up with
                //  light sources found in the reduced reference image.
                //Open a new TSX Image object, then load and open difference image
                ccdsoftImage tsx_ref = new ccdsoftImage();
                tsx_ref.Path = rfilepath;
                tsx_ref.Open();
                //Prepare TSX to close the image window when closing the image
                tsx_ref.DetachOnClose = 0;
                //Look for stars using Sextractor
                //  If fails, close the object and image
                try
                {
                    int cdstat = tsx_ref.ShowInventory();
                }
                catch
                {
                    tsx_ref.Close();
                    tsx_dif.Close();
                    LogEntry("No suspects:  Sextractor failed on Reference Image.");
                    return(false);
                }
                // Sextractor didnt// run into any problems, but may have found nothing
                //   Check how many objects found, if none then close up and return false
                //   If something is found, then leave the window open and return "true"
                var rMagArr = tsx_ref.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryMagnitude);
                //double[] FWHMArr = Convert.ToDouble(tDiff.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryFWHM));
                var rXPosArr = tsx_ref.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryX);
                var rYPosArr = tsx_ref.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryY);
                //double[] ElpArr = Convert.ToDouble(tDiff.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryEllipticity));
                var rClsArr = tsx_ref.InventoryArray((int)ccdsoftInventoryIndex.cdInventoryClass);
                //So let//s make being within 20 pixels (40 arcsec) of each other sufficient for calling two light sources the same.
                //Proceed through the light source array looking for matches, there shouldn//t be many
                int     proximity = 20;
                Boolean nomatch;
                for (int di = 0; di < dXPosArr.Length; di++)
                {
                    double dXpos = Convert.ToDouble(dXPosArr[di]);
                    double dYpos = Convert.ToDouble(dYPosArr[di]);
                    double dCls  = Convert.ToDouble(dClsArr[di]);
                    nomatch = true;
                    if (dCls >= 0.8)
                    {
                        for (int ri = 0; ri < rXPosArr.Length; ri++)
                        {
                            double rXpos = Convert.ToDouble(rXPosArr[ri]);
                            double rYpos = Convert.ToDouble(rYPosArr[ri]);

                            if ((Math.Abs(dXpos - rXpos) <= proximity) && (Math.Abs(dYpos - rYpos) <= proximity))
                            {
                                nomatch = false;
                                break;
                            }
                        }
                        if (nomatch)
                        {
                            // A suspect has been found. Log it//s x,y location on the Difference image, then
                            //  Get its location (RA,Dec) by using XYToRADec method that runs yet another Image Link
                            //  on the current image file (not the cropped one), extrapolating the cropped difference image x,y
                            //  to the uncropped current image, then using TSX to convert the extrapolated X,Y to an RA,Dec.
                            //
                            //  Add to Suspect List then, log, close, collect and return

                            //  We may do more later...
                            LogEntry("Suspect without alibi in " + dfilepath + " at X= " + Convert.ToInt32(dXpos) + "   Y= " + Convert.ToInt32(dYpos));

                            double    xCurPos = ((dXpos - (tsx_dif.WidthInPixels) / 2)) + (grandeWidth / 2);
                            double    yCurPos = ((dYpos - (tsx_dif.HeightInPixels) / 2)) + (grandeHeight / 2);
                            XYToRADec ss_perp = new XYToRADec(curImagePath, xCurPos, yCurPos);
                            double    pRA     = ss_perp.RA;
                            double    pDec    = ss_perp.Dec;
                            LogEntry("Suspect//s coordinates (RA,Dec) = " + pRA.ToString() + " Hrs, " + pDec.ToString() + " Deg");

                            //Now create a new entry and save the suspect in the suspect file
                            Suspect ss_sus = new Suspect();
                            ss_sus.GalaxyName = gname;
                            ss_sus.Event      = DateTime.Now;
                            ss_sus.SuspectRA  = pRA;
                            ss_sus.SuspectDec = pDec;
                            ss_sus.SuspectCurrentLocationX = dXpos;
                            ss_sus.SuspectCurrentLocationY = dYpos;
                            ss_sus.Store();

                            tsx_dif.Close();
                            tsx_dif = null;
                            tsx_ref.Close();
                            tsx_ref = null;
                            ss_perp = null;
                            ss_sus  = null;
                            GC.Collect();
                            return(true);
                        }
                    }
                }
                //If no suspects found, log, close, collect and return;
                LogEntry("All suspects have alibis from Reference image.");
                tsx_dif.Close();
                tsx_dif = null;
                tsx_ref.Close();
                tsx_ref = null;
                return(false);
            }
        }