Ignore:
Timestamp:
Oct 24, 2009, 11:46:29 PM (16 years ago)
Author:
cmv
Message:

add uint_1 for FitsImg2DWriter et FitsImg3DWriter, cmv 24/10/2009

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaExt/FitsIOServer/fabtwriter.cc

    r3660 r3668  
    736736  Constructor.
    737737  \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)
    739740  \param lp : debug level
    740741*/
     
    751752  Constructor.
    752753  \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)
    754756  \param lp : debug level
    755757*/
     
    767769  \param fname : FITS file name to be written (created or updated)
    768770  \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)
    770773  \param lp : debug level
    771774*/
     
    783786  \param cfname : FITS file name to be written (created or updated)
    784787  \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)
    786790  \param lp : debug level
    787791*/
     
    815819
    816820 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*/
     827void 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;
    817844}
    818845
     
    923950  Constructor.
    924951  \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)
    926954  \param lp : debug level
    927955*/
     
    938966  Constructor.
    939967  \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)
    941970  \param lp : debug level
    942971*/
     
    954983  \param fname : FITS file name to be written (created or updated)
    955984  \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)
    957987  \param lp : debug level
    958988*/
     
    9701000  \param cfname : FITS file name to be written (created or updated)
    9711001  \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)
    9731004  \param lp : debug level
    9741005*/
     
    10021033
    10031034 FirstTime = false;
     1035}
     1036
     1037/*! Create the 3D imageby yourself, ONLY use it with Write(TVector<>& data) */
     1038void 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*/
     1049void 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;
    10041069}
    10051070
     
    10991164}
    11001165
     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*/
     1171void 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*/
     1194void 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*/
     1217void 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*/
     1241void 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*/
     1264void 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
    11011282/*! Print infos. */
    11021283void FitsImg3DWriter::Print(ostream& os) const
Note: See TracChangeset for help on using the changeset viewer.