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; }
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; }
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; }
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; }
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; }
public static void CloseFitsFile(ccdsoftImage tsximg) { try { tsximg.Close(); } catch { return; }; return; }
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); } }