Changeset 3668 in Sophya for trunk/SophyaExt/FitsIOServer
- Timestamp:
- Oct 24, 2009, 11:46:29 PM (16 years ago)
- Location:
- trunk/SophyaExt/FitsIOServer
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fabtwriter.cc
r3660 r3668 736 736 Constructor. 737 737 \param fname : FITS file name to be written (a new fits file is created) 738 \param bitpix : image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 738 \param bitpix standard: image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 739 \param bitpix extended: image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 739 740 \param lp : debug level 740 741 */ … … 751 752 Constructor. 752 753 \param cfname : FITS file name to be written (a new fits file is created) 753 \param bitpix : image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 754 \param bitpix standard: image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 755 \param bitpix extended: image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 754 756 \param lp : debug level 755 757 */ … … 767 769 \param fname : FITS file name to be written (created or updated) 768 770 \param update : file is created if FALSE, open for update if TRUE 769 \param bitpix : image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 771 \param bitpix standard: image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 772 \param bitpix extended: image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 770 773 \param lp : debug level 771 774 */ … … 783 786 \param cfname : FITS file name to be written (created or updated) 784 787 \param update : file is created if FALSE, open for update if TRUE 785 \param bitpix : image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 788 \param bitpix standard: image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 789 \param bitpix extended: image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 786 790 \param lp : debug level 787 791 */ … … 815 819 816 820 FirstTime = false; 821 } 822 823 /*! 824 Write an unsigned byte image to FITS file. 825 \warning TMatrix data(Naxis2,Naxis1) means Data(row,column) 826 */ 827 void FitsImg2DWriter::Write(TMatrix<uint_1>& data) 828 { 829 Naxis[0]=data.NCols(); Naxis[1]=data.NRows(); createimg(); 830 uint_1* arr = new uint_1[Naxis[0]]; 831 832 for(LONGLONG l=0;l<Naxis[1];l++) { 833 for(LONGLONG c=0;c<Naxis[0];c++) arr[c] = data(l,c); 834 LONGLONG deb = l*Naxis[0]+1, nel = Naxis[0]; int sta=0; 835 fits_write_img(FitsPtr,TBYTE,deb,nel,arr,&sta); 836 if(sta) { 837 printerrorwrite("uint_1",0,l,sta); delete [] arr; 838 throw 839 NotAvailableOperation("FitsImg2DRd::Write(TMatrix<uint_1>): Error Writing Fits file\n"); 840 } 841 } 842 843 delete [] arr; 817 844 } 818 845 … … 923 950 Constructor. 924 951 \param fname : FITS file name to be written (a new fits file is created) 925 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 952 \param bitpix standard: 3D image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 953 \param bitpix extended: 3D image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 926 954 \param lp : debug level 927 955 */ … … 938 966 Constructor. 939 967 \param cfname : FITS file name to be written (a new fits file is created) 940 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 968 \param bitpix standard: 3D image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 969 \param bitpix extended: 3D image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 941 970 \param lp : debug level 942 971 */ … … 954 983 \param fname : FITS file name to be written (created or updated) 955 984 \param update : file is created if FALSE, open for update if TRUE 956 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 985 \param bitpix standard: 3D image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 986 \param bitpix extended: 3D image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 957 987 \param lp : debug level 958 988 */ … … 970 1000 \param cfname : FITS file name to be written (created or updated) 971 1001 \param update : file is created if FALSE, open for update if TRUE 972 \param bitpix : 3D image type (BYTE_IMG,USHORT_IMG,SHORT_IMG,LONG_IMG,FLOAT_IMG,DOUBLE_IMG) 1002 \param bitpix standard: 3D image type (BYTE_IMG,SHORT_IMG,LONG_IMG,LONGLONG_IMG,FLOAT_IMG,DOUBLE_IMG) 1003 \param bitpix extended: 3D image type (SBYTE_IMG,USHORT_IMG,ULONG_IMG) 973 1004 \param lp : debug level 974 1005 */ … … 1002 1033 1003 1034 FirstTime = false; 1035 } 1036 1037 /*! Create the 3D imageby yourself, ONLY use it with Write(TVector<>& data) */ 1038 void FitsImg3DWriter::CreateImg(LONGLONG naxis1,LONGLONG naxis2,LONGLONG naxis3) 1039 { 1040 Naxis[0]=naxis1; 1041 Naxis[1]=naxis2; 1042 Naxis[2]=naxis3; 1043 createimg(); 1044 } 1045 1046 /*! 1047 Write an unsigned byte 3D image to FITS file. 1048 */ 1049 void FitsImg3DWriter::Write(TArray<uint_1>& data) 1050 { 1051 if(data.Rank()!=3) 1052 throw ParmError("FitsImg3DRd::Write(TArray<uint_1>): not a 3D array\n"); 1053 1054 Naxis[0]=data.SizeX(); Naxis[1]=data.SizeY(); Naxis[2]=data.SizeZ(); createimg(); 1055 uint_1* arr = new uint_1[Naxis[0]]; 1056 1057 for(LONGLONG k=0;k<Naxis[2];k++) for(LONGLONG j=0;j<Naxis[1];j++) { 1058 for(LONGLONG i=0;i<Naxis[0];i++) arr[i] = data(i,j,k); 1059 LONGLONG deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1060 fits_write_img(FitsPtr,TBYTE,deb,nel,arr,&sta); 1061 if(sta) { 1062 printerrorwrite("uint_1",j,k,sta); delete [] arr; 1063 throw 1064 NotAvailableOperation("FitsImg3DRd::Write(TArray<uint_1>): Error Writing Fits file\n"); 1065 } 1066 } 1067 1068 delete [] arr; 1004 1069 } 1005 1070 … … 1099 1164 } 1100 1165 1166 /*! 1167 Write an unsigned byte Vector<> image to 3D FITS file. 1168 Vector is stored in Naxis1, j (resp. k) indicate place within Naxis2 (resp. Naxis3): 1169 so IMG(i,j,k) = Vector(i) 1170 */ 1171 void FitsImg3DWriter::Write(LONGLONG j, LONGLONG k,TVector<uint_1>& data) 1172 { 1173 if(FirstTime) 1174 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_1>&): use CreateImg first !\n"); 1175 if(data.Size()!=Naxis[0]) 1176 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_1>&): wrong vector size\n"); 1177 if(j<0 || j>=Naxis[1] || k<0 || k>=Naxis[2]) 1178 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_1>&): j or k out of range\n"); 1179 uint_1* arr = const_cast<uint_1 *>(data.Data()); 1180 LONGLONG deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1181 fits_write_img(FitsPtr,TBYTE,deb,nel,arr,&sta); 1182 if(sta) { 1183 printerrorwrite("uint_1",j,k,sta); delete [] arr; 1184 throw 1185 NotAvailableOperation("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_1>&): Error Writing Fits file\n"); 1186 } 1187 } 1188 1189 /*! 1190 Write an unsigned short Vector<> image to 3D FITS file. 1191 Vector is stored in Naxis1, j (resp. k) indicate place within Naxis2 (resp. Naxis3): 1192 so IMG(i,j,k) = Vector(i) 1193 */ 1194 void FitsImg3DWriter::Write(LONGLONG j, LONGLONG k,TVector<uint_2>& data) 1195 { 1196 if(FirstTime) 1197 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_2>&): use CreateImg first !\n"); 1198 if(data.Size()!=Naxis[0]) 1199 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_2>&): wrong vector size\n"); 1200 if(j<0 || j>=Naxis[1] || k<0 || k>=Naxis[2]) 1201 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_2>&): j or k out of range\n"); 1202 uint_2* arr = const_cast<uint_2 *>(data.Data()); 1203 LONGLONG deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1204 fits_write_img(FitsPtr,TUSHORT,deb,nel,arr,&sta); 1205 if(sta) { 1206 printerrorwrite("uint_2",j,k,sta); delete [] arr; 1207 throw 1208 NotAvailableOperation("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<uint_2>&): Error Writing Fits file\n"); 1209 } 1210 } 1211 1212 /*! 1213 Write an long Vector<> image to 3D FITS file. 1214 Vector is stored in Naxis1, j (resp. k) indicate place within Naxis2 (resp. Naxis3): 1215 so IMG(i,j,k) = Vector(i) 1216 */ 1217 void FitsImg3DWriter::Write(LONGLONG j, LONGLONG k,TVector<int_4>& data) 1218 { 1219 if(FirstTime) 1220 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<int_4>&): use CreateImg first !\n"); 1221 if(data.Size()!=Naxis[0]) 1222 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<int_4>&): wrong vector size\n"); 1223 if(j<0 || j>=Naxis[1] || k<0 || k>=Naxis[2]) 1224 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<int_4>&): j or k out of range\n"); 1225 int T = (sizeof(long)==4) ? TLONG: TINT; 1226 int_4* arr = const_cast<int_4 *>(data.Data()); 1227 LONGLONG deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1228 fits_write_img(FitsPtr,T,deb,nel,arr,&sta); 1229 if(sta) { 1230 printerrorwrite("int_4",j,k,sta); delete [] arr; 1231 throw 1232 NotAvailableOperation("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<int_4>&): Error Writing Fits file\n"); 1233 } 1234 } 1235 1236 /*! 1237 Write an float Vector<> image to 3D FITS file. 1238 Vector is stored in Naxis1, j (resp. k) indicate place within Naxis2 (resp. Naxis3): 1239 so IMG(i,j,k) = Vector(i) 1240 */ 1241 void FitsImg3DWriter::Write(LONGLONG j, LONGLONG k,TVector<float>& data) 1242 { 1243 if(FirstTime) 1244 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<float>&): use CreateImg first !\n"); 1245 if(data.Size()!=Naxis[0]) 1246 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<float>&): wrong vector size\n"); 1247 if(j<0 || j>=Naxis[1] || k<0 || k>=Naxis[2]) 1248 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<float>&): j or k out of range\n"); 1249 float* arr = const_cast<float *>(data.Data()); 1250 LONGLONG deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1251 fits_write_img(FitsPtr,TFLOAT,deb,nel,arr,&sta); 1252 if(sta) { 1253 printerrorwrite("float",j,k,sta); delete [] arr; 1254 throw 1255 NotAvailableOperation("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<float>&): Error Writing Fits file\n"); 1256 } 1257 } 1258 1259 /*! 1260 Write an double Vector<> image to 3D FITS file. 1261 Vector is stored in Naxis1, j (resp. k) indicate place within Naxis2 (resp. Naxis3): 1262 so IMG(i,j,k) = Vector(i) 1263 */ 1264 void FitsImg3DWriter::Write(LONGLONG j, LONGLONG k,TVector<double>& data) 1265 { 1266 if(FirstTime) 1267 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<double>&): use CreateImg first !\n"); 1268 if(data.Size()!=Naxis[0]) 1269 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<double>&): wrong vector size\n"); 1270 if(j<0 || j>=Naxis[1] || k<0 || k>=Naxis[2]) 1271 throw ParmError("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<double>&): j or k out of range\n"); 1272 double* arr = const_cast<double *>(data.Data()); 1273 LONGLONG deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0]; int sta=0; 1274 fits_write_img(FitsPtr,TDOUBLE,deb,nel,arr,&sta); 1275 if(sta) { 1276 printerrorwrite("double",j,k,sta); delete [] arr; 1277 throw 1278 NotAvailableOperation("FitsImg3DRd::Write(LONGLONG,LONGLONG,TVector<double>&): Error Writing Fits file\n"); 1279 } 1280 } 1281 1101 1282 /*! Print infos. */ 1102 1283 void FitsImg3DWriter::Print(ostream& os) const -
trunk/SophyaExt/FitsIOServer/fabtwriter.h
r3572 r3668 148 148 virtual ~FitsImg2DWriter(); 149 149 150 void Write(TMatrix<uint_1>& data); 150 151 void Write(TMatrix<uint_2>& data); 151 152 void Write(TMatrix<int_4>& data); … … 177 178 virtual ~FitsImg3DWriter(); 178 179 180 void CreateImg(LONGLONG naxis1,LONGLONG naxis2,LONGLONG naxis3); 181 182 void Write(TArray<uint_1>& data); 179 183 void Write(TArray<uint_2>& data); 180 184 void Write(TArray<int_4>& data); … … 182 186 void Write(TArray<double>& data); 183 187 188 void Write(LONGLONG j,LONGLONG k,TVector<uint_1>& data); 189 void Write(LONGLONG j,LONGLONG k,TVector<uint_2>& data); 190 void Write(LONGLONG j,LONGLONG k,TVector<int_4>& data); 191 void Write(LONGLONG j,LONGLONG k,TVector<float>& data); 192 void Write(LONGLONG j,LONGLONG k,TVector<double>& data); 193 184 194 //! Print to os 185 195 virtual void Print(ostream& os) const;
Note:
See TracChangeset
for help on using the changeset viewer.