gnuastro-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnuastro-commits] master 06798a5 035/113: Crop's --checkcenter works on


From: Mohammad Akhlaghi
Subject: [gnuastro-commits] master 06798a5 035/113: Crop's --checkcenter works on 3D dataset
Date: Fri, 16 Apr 2021 10:33:38 -0400 (EDT)

branch: master
commit 06798a5d07e53555dd56387cdd5f6a557d32a7c2
Author: Mohammad Akhlaghi <akhlaghi@gnu.org>
Commit: Mohammad Akhlaghi <akhlaghi@gnu.org>

    Crop's --checkcenter works on 3D dataset
    
    Surprisingly, the Crop program's `--checkcenter' option wasn't yet
    configured for 3D datasets. With this commit, checking the center is now
    possible on 3D datasets too.
---
 bin/crop/onecrop.c | 36 +++++++++++++++++++++++++++++-------
 1 file changed, 29 insertions(+), 7 deletions(-)

diff --git a/bin/crop/onecrop.c b/bin/crop/onecrop.c
index 5afff2c..c68c405 100644
--- a/bin/crop/onecrop.c
+++ b/bin/crop/onecrop.c
@@ -847,15 +847,24 @@ onecrop_center_filled(struct onecropparams *crp)
   fitsfile *ofp=crp->outfits;
   int status=0, anynul=0, type;
   long checkcenter=p->checkcenter;
-  long naxes[2], fpixel[2], lpixel[2], inc[2]={1,1};
+  long naxes[3], fpixel[3], lpixel[3], inc[3]={1,1,1};
 
   /* If checkcenter is zero, then don't check. */
   if(checkcenter==0) return GAL_BLANK_UINT8;
 
   /* Get the final size of the output image. */
   gal_fits_img_info(ofp, &type, &ndim, &dsize, NULL, NULL);
-  naxes[0]=dsize[1];
-  naxes[1]=dsize[0];
+  if(ndim==2)
+    {
+      naxes[0]=dsize[1];
+      naxes[1]=dsize[0];
+    }
+  else
+    {
+      naxes[0]=dsize[2];
+      naxes[1]=dsize[1];
+      naxes[2]=dsize[0];
+    }
 
   /* Get the size and range of the central region to check. The +1 is
      because in FITS, counting begins from 1, not zero. It might happen
@@ -864,10 +873,23 @@ onecrop_center_filled(struct onecropparams *crp)
      full image to check. */
   size = ( (naxes[0]>checkcenter ? checkcenter : naxes[0])
            * (naxes[1]>checkcenter ? checkcenter : naxes[1]) );
-  fpixel[0] = naxes[0]>checkcenter ? (naxes[0]/2+1)-checkcenter/2 : 1;
-  fpixel[1] = naxes[1]>checkcenter ? (naxes[1]/2+1)-checkcenter/2 : 1;
-  lpixel[0] = naxes[0]>checkcenter ? (naxes[0]/2+1)+checkcenter/2 : naxes[0];
-  lpixel[1] = naxes[1]>checkcenter ? (naxes[1]/2+1)+checkcenter/2 : naxes[1];
+  fpixel[0] = naxes[0]>checkcenter ? ((naxes[0]/2+1)-checkcenter/2) : 1;
+  fpixel[1] = naxes[1]>checkcenter ? ((naxes[1]/2+1)-checkcenter/2) : 1;
+  lpixel[0] = ( naxes[0]>checkcenter
+                ? ((naxes[0]/2+1)+checkcenter/2) : naxes[0] );
+  lpixel[1] = ( naxes[1]>checkcenter
+                ? ((naxes[1]/2+1)+checkcenter/2) : naxes[1] );
+
+
+  /* For the third dimension. */
+  if(ndim==3)
+    {
+      size *= (naxes[2]>checkcenter ? checkcenter : naxes[2]);
+      fpixel[2] = naxes[2]>checkcenter ? ((naxes[2]/2+1)-checkcenter/2) : 1;
+      lpixel[2] = ( naxes[2]>checkcenter
+                    ? ((naxes[2]/2+1)+checkcenter/2) : naxes[2] );
+    }
+
 
   /* For a check:
   printf("naxes: %ld, %ld\nfpixel: (%ld, %ld)\nlpixel: (%ld, %ld)\n"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]