Changeset 3114 in Sophya for trunk/SophyaExt/FitsIOServer/fabtwriter.cc
- Timestamp:
- Dec 13, 2006, 6:44:39 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fabtwriter.cc
r2789 r3114 884 884 <<" Naxis1 "<<Naxis[0]<<" Naxis2 "<<Naxis[1]<<endl; 885 885 } 886 887 888 ////////////////////////////////////////////////////////////////// 889 ////////////////////////////////////////////////////////////////// 890 ////////////////////////////////////////////////////////////////// 891 ////////////////////////////////////////////////////////////////// 892 /*! 893 \class SOPHYA::FitsImg3DWriter 894 \ingroup FitsIOServer 895 Class for writing an 3D image into FITS file 896 */ 897 898 /*! 899 Constructor. 900 \param fname : FITS file name to be written (a new fits file is created) 901 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 902 \param lp : debug level 903 */ 904 FitsImg3DWriter::FitsImg3DWriter(string fname,int bitpix,int lp) 905 : FitsWriter(fname,lp) 906 { 907 BitPix = bitpix; 908 HduType = IMAGE_HDU; 909 FirstTime = true; 910 Naxis[0] = Naxis[1] = Naxis[2] = 0; 911 } 912 913 /*! 914 Constructor. 915 \param cfname : FITS file name to be written (a new fits file is created) 916 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 917 \param lp : debug level 918 */ 919 FitsImg3DWriter::FitsImg3DWriter(const char* cfname,int bitpix,int lp) 920 : FitsWriter(cfname,lp) 921 { 922 BitPix = bitpix; 923 HduType = IMAGE_HDU; 924 FirstTime = true; 925 Naxis[0] = Naxis[1] = Naxis[2] = 0; 926 } 927 928 /*! 929 Constructor. 930 \param fname : FITS file name to be written (created or updated) 931 \param update : file is created if FALSE, open for update if TRUE 932 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 933 \param lp : debug level 934 */ 935 FitsImg3DWriter::FitsImg3DWriter(string fname,bool update,int bitpix,int lp) 936 : FitsWriter(fname,update,lp) 937 { 938 BitPix = bitpix; 939 HduType = IMAGE_HDU; 940 FirstTime = true; 941 Naxis[0] = Naxis[1] = Naxis[2] = 0; 942 } 943 944 /*! 945 Constructor. 946 \param cfname : FITS file name to be written (created or updated) 947 \param update : file is created if FALSE, open for update if TRUE 948 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 949 \param lp : debug level 950 */ 951 FitsImg3DWriter::FitsImg3DWriter(const char* cfname,bool update,int bitpix,int lp) 952 : FitsWriter(cfname,update,lp) 953 { 954 BitPix = bitpix; 955 HduType = IMAGE_HDU; 956 FirstTime = true; 957 Naxis[0] = Naxis[1] = Naxis[2] = 0; 958 } 959 960 /*! Destructor */ 961 FitsImg3DWriter::~FitsImg3DWriter() 962 { 963 } 964 965 /*! Create the 3D image. Done at the first write request. */ 966 void FitsImg3DWriter::createimg(void) 967 { 968 if(!FirstTime) 969 throw NotAvailableOperation("FitsImg3DWriter::createimg: already created 3D image\n"); 970 if(Naxis[0]<=0 || Naxis[1]<=0 || Naxis[2]<=0) 971 throw ParmError("FitsImg3DWriter::createimg: bad Naxis 1 or 2 or 3 value\n"); 972 973 int sta=0; 974 if(fits_create_img(FitsPtr,BitPix,3,Naxis,&sta)) { 975 printerror(sta); 976 throw NullPtrError("FitsImg3DWriter::createimg: Error creating 3D image extension\n"); 977 } 978 979 FirstTime = false; 980 } 981 982 /*! 983 Write an unsigned short 3D image to FITS file. 984 */ 985 void FitsImg3DWriter::Write(TArray<uint_2>& data) 986 { 987 if(data.Rank()!=3) 988 throw ParmError("FitsImg3DRd::Write(TArray<uint_2>): not a 3D array\n"); 989 990 Naxis[0]=data.SizeX(); Naxis[1]=data.SizeY(); Naxis[2]=data.SizeZ(); createimg(); 991 uint_2* arr = new uint_2[Naxis[0]]; 992 993 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) { 994 for(int i=0;i<Naxis[0];i++) arr[i] = data(i,j,k); 995 long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 996 fits_write_img(FitsPtr,TUSHORT,deb,nel,arr,&sta); 997 if(sta) { 998 printerrorwrite("uint_2",j,k,sta); delete [] arr; 999 throw 1000 NotAvailableOperation("FitsImg3DRd::Write(TArray<uint_2>): Error Writing Fits file\n"); 1001 } 1002 } 1003 1004 delete [] arr; 1005 } 1006 1007 /*! Write a long 3D image to FITS file. */ 1008 void FitsImg3DWriter::Write(TArray<int_4>& data) 1009 { 1010 if(data.Rank()!=3) 1011 throw ParmError("FitsImg3DRd::Write(TArray<int_4>): not a 3D array\n"); 1012 1013 int T = (sizeof(long)==4) ? TLONG: TINT; 1014 Naxis[0]=data.SizeX(); Naxis[1]=data.SizeY(); Naxis[2]=data.SizeZ(); createimg(); 1015 int_4* arr = new int_4[Naxis[0]]; 1016 1017 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) { 1018 for(int i=0;i<Naxis[0];i++) arr[i] = data(i,j,k); 1019 long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1020 fits_write_img(FitsPtr,T,deb,nel,arr,&sta); 1021 if(sta) { 1022 printerrorwrite("int_4",j,k,sta); delete [] arr; 1023 throw 1024 NotAvailableOperation("FitsImg3DRd::Write(TArray<int_4>): Error Writing Fits file\n"); 1025 } 1026 } 1027 1028 delete [] arr; 1029 } 1030 1031 /*! Write a float 3D image to FITS file. */ 1032 void FitsImg3DWriter::Write(TArray<float>& data) 1033 { 1034 if(data.Rank()!=3) 1035 throw ParmError("FitsImg3DRd::Write(TArray<float>): not a 3D array\n"); 1036 1037 Naxis[0]=data.SizeX(); Naxis[1]=data.SizeY(); Naxis[2]=data.SizeZ(); createimg(); 1038 float* arr = new float[Naxis[0]]; 1039 1040 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) { 1041 for(int i=0;i<Naxis[0];i++) arr[i] = data(i,j,k); 1042 long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1043 fits_write_img(FitsPtr,TFLOAT,deb,nel,arr,&sta); 1044 if(sta) { 1045 printerrorwrite("float",j,k,sta); delete [] arr; 1046 throw 1047 NotAvailableOperation("FitsImg3DRd::Write(TArray<float>): Error Writing Fits file\n"); 1048 } 1049 } 1050 1051 delete [] arr; 1052 } 1053 1054 /*! Write a double 3D image to FITS file. */ 1055 void FitsImg3DWriter::Write(TArray<double>& data) 1056 { 1057 if(data.Rank()!=3) 1058 throw ParmError("FitsImg3DRd::Write(TArray<double>): not a 3D array\n"); 1059 1060 Naxis[0]=data.SizeX(); Naxis[1]=data.SizeY(); Naxis[2]=data.SizeZ(); createimg(); 1061 double* arr = new double[Naxis[0]]; 1062 1063 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) { 1064 for(int i=0;i<Naxis[0];i++) arr[i] = data(i,j,k); 1065 long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1066 fits_write_img(FitsPtr,TDOUBLE,deb,nel,arr,&sta); 1067 if(sta) { 1068 printerrorwrite("double",j,k,sta); delete [] arr; 1069 throw 1070 NotAvailableOperation("FitsImg3DRd::Write(TArray<double>): Error Writing Fits file\n"); 1071 } 1072 } 1073 1074 delete [] arr; 1075 } 1076 1077 /*! Print infos. */ 1078 void FitsImg3DWriter::Print(ostream& os) const 1079 { 1080 os<<"FitsImg3DWriter::Print: FitsFN "<<FitsFN<<endl 1081 <<" HduType "<<HduType<<" NOverFlow "<<NOverFlow<<" BitPix "<<BitPix 1082 <<" Naxis1 "<<Naxis[0]<<" Naxis2 "<<Naxis[1]<<" Naxis3 "<<Naxis[2]<<endl; 1083 }
Note:
See TracChangeset
for help on using the changeset viewer.