Changeset 3114 in Sophya for trunk/SophyaExt


Ignore:
Timestamp:
Dec 13, 2006, 6:44:39 PM (19 years ago)
Author:
cmv
Message:

1-/ intro des reader et writer pour tableaux 3D
2-/ j enleve la variable redondante FitsPtr :

si travail OK c est une modif mineure
mais ca peut conduire a de gros PB si qquechose a ete oublie
ATTENTION ATTENTION MODIF .... cmv 13/12/2006

Location:
trunk/SophyaExt/FitsIOServer
Files:
4 edited

Legend:

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

    r2791 r3114  
    338338 SetNulVal(); SetDebug(0);
    339339 NFitsRead = 0;
    340  FitsOF = NULL; FitsPtr = NULL;
     340 FitsOF = NULL;
    341341 LineDeb = LineFin = -1;
    342342 Buffer = NULL;
     
    352352 SetNulVal(); SetDebug(lp);
    353353 NFitsRead = 0;
    354  FitsOF = NULL; FitsPtr = NULL;
     354 FitsOF = NULL;
    355355 LineDeb = LineFin = -1;
    356356 Buffer = NULL;
     
    361361   throw NullPtrError("FitsABTColRd::Init: FitsOpenFile pointer is NULL\n");
    362362
    363  FitsPtr = FitsOF->GetFitsPtr();
    364  if(FitsPtr==NULL)
     363 if(GetFitsPtr()==NULL)
    365364   throw NullPtrError("FitsABTColRd::Init: FitsPtr pointer is NULL\n");
    366365
     
    394393
    395394 // Get number of columns
    396  if(fits_get_num_cols(FitsPtr,&NBcol,&sta)) {
     395 if(fits_get_num_cols(GetFitsPtr(),&NBcol,&sta)) {
    397396   FitsOpenFile::printerror(sta);
    398397   throw NotAvailableOperation("FitsABTColRd::Init: Error getting number of columns\n");
     
    403402
    404403 // Get number of rows
    405  if(fits_get_num_rows(FitsPtr,&NBline,&sta)) {
     404 if(fits_get_num_rows(GetFitsPtr(),&NBline,&sta)) {
    406405   FitsOpenFile::printerror(sta);
    407406   throw NotAvailableOperation("FitsABTColRd::Init: Error getting number of rows\n");
     
    415414 if(ColLabel.size() > 0) {
    416415   strcpy(labelcol,ColLabel.c_str());
    417    if(fits_get_colnum(FitsPtr,CASESEN,labelcol,&ColNum,&sta)) {
     416   if(fits_get_colnum(GetFitsPtr(),CASESEN,labelcol,&ColNum,&sta)) {
    418417     FitsOpenFile::printerror(sta);
    419418     throw NotAvailableOperation("FitsABTColRd::Init: Error getting column name\n");
     
    426425
    427426 // Get column type
    428  if(fits_get_coltype(FitsPtr,ColNum+1,&ColTypeCode,NULL,NULL,&sta)) {
     427 if(fits_get_coltype(GetFitsPtr(),ColNum+1,&ColTypeCode,NULL,NULL,&sta)) {
    429428   FitsOpenFile::printerror(sta);
    430429   throw ParmError("FitsABTColRd::Init: Error getting column type\n");
     
    440439 int rc=0;
    441440 if(HDUType()==BINARY_TBL) {
    442    fits_get_bcolparms(FitsPtr,ColNum+1,labelcol,tunit,tform
     441   fits_get_bcolparms(GetFitsPtr(),ColNum+1,labelcol,tunit,tform
    443442                     ,&repeat,&tscale,&tzero,NULL,tdisp,&sta);
    444443 } else {
    445    fits_get_acolparms(FitsPtr,ColNum+1,labelcol,&repeat,tunit,tform
     444   fits_get_acolparms(GetFitsPtr(),ColNum+1,labelcol,&repeat,tunit,tform
    446445                     ,&tscale,&tzero,NULL,tdisp,&sta);
    447446 }
     
    515514double FitsABTColRd::ReadKey(char *keyname)
    516515{
    517  return FitsOpenFile::ReadKey(FitsPtr,keyname);
     516 return FitsOpenFile::ReadKey(GetFitsPtr(),keyname);
    518517}
    519518
     
    525524long FitsABTColRd::ReadKeyL(char *keyname)
    526525{
    527  return FitsOpenFile::ReadKeyL(FitsPtr,keyname);
     526 return FitsOpenFile::ReadKeyL(GetFitsPtr(),keyname);
    528527}
    529528
     
    535534string FitsABTColRd::ReadKeyS(char *keyname)
    536535{
    537  return FitsOpenFile::ReadKeyS(FitsPtr,keyname);
     536 return FitsOpenFile::ReadKeyS(GetFitsPtr(),keyname);
    538537}
    539538
     
    562561   NFitsRead++;
    563562   double val;
    564    fits_read_col(FitsPtr,TDOUBLE,ColNum+1,n+1,1,1,NULL,&val,NULL,&sta);
     563   fits_read_col(GetFitsPtr(),TDOUBLE,ColNum+1,n+1,1,1,NULL,&val,NULL,&sta);
    565564   if(sta) {
    566565     FitsOpenFile::printerror(sta);
     
    597596   //cout<<"DBG-FitsRead: row1="<<row1<<" row2="<<row2<<" nrow="<<nrow
    598597   //    <<" LineDeb,Fin="<<LineDeb<<","<<LineFin<<endl;
    599    fits_read_col(FitsPtr,TDOUBLE,ColNum+1,row1,1,nrow,NULL,Buffer,NULL,&sta);
     598   fits_read_col(GetFitsPtr(),TDOUBLE,ColNum+1,row1,1,nrow,NULL,Buffer,NULL,&sta);
    600599   if(sta) {
    601600     FitsOpenFile::printerror(sta);
     
    655654 //for(long i=n1;i<=n2;i++) data(i-n1) = Read(i);
    656655 int sta=0;
    657  fits_read_col(FitsPtr,TDOUBLE,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
     656 fits_read_col(GetFitsPtr(),TDOUBLE,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
    658657 if(sta) {
    659658   FitsOpenFile::printerror(sta);
     
    679678 //for(long i=n1;i<=n2;i++) data(i-n1) = Read(i);
    680679 int sta=0;
    681  fits_read_col(FitsPtr,TFLOAT,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
     680 fits_read_col(GetFitsPtr(),TFLOAT,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
    682681 if(sta) {
    683682   FitsOpenFile::printerror(sta);
     
    702701
    703702 int sta=0;
    704  fits_read_col(FitsPtr,TUSHORT,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
     703 fits_read_col(GetFitsPtr(),TUSHORT,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
    705704 if(sta) {
    706705   FitsOpenFile::printerror(sta);
     
    727726 int sta=0;
    728727 int T = (sizeof(long)==4) ? TLONG: TINT;
    729  fits_read_col(FitsPtr,T,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
     728 fits_read_col(GetFitsPtr(),T,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
    730729 if(sta) {
    731730   FitsOpenFile::printerror(sta);
     
    751750
    752751 int sta=0;
    753  fits_read_col(FitsPtr,TLONGLONG,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
     752 fits_read_col(GetFitsPtr(),TLONGLONG,ColNum+1,n1+1,1,nread,NULL,data.Data(),NULL,&sta);
    754753 if(sta) {
    755754   FitsOpenFile::printerror(sta);
     
    984983 Naxis[0] = Naxis[1] = 0;
    985984 SetNulVal(); SetDebug(0);
    986  FitsOF = NULL; FitsPtr = NULL;
     985 FitsOF = NULL;
    987986}
    988987
     
    993992 Naxis[0] = Naxis[1] = 0;
    994993 SetNulVal(); SetDebug(lp);
    995  FitsOF = NULL; FitsPtr = NULL;
     994 FitsOF = NULL;
    996995
    997996 // Caracteristiques du FitsOpenFile
     
    1000999   throw NullPtrError("FitsImg2DRd::Init: FitsOpenFile pointer is NULL\n");
    10011000
    1002  FitsPtr = FitsOF->GetFitsPtr();
    1003  if(FitsPtr==NULL)
     1001 if(GetFitsPtr()==NULL)
    10041002   throw NullPtrError("FitsImg2DRd::Init: FitsPtr pointer is NULL\n");
    10051003
     
    10151013     int rc = FitsOF->MoveToHDU(ihdu);
    10161014     if(rc!=ihdu)
    1017        throw RangeCheckError("FitsABTColRd::Init: Error moving to requested HDU\n");
     1015       throw RangeCheckError("FitsImg2DRd::Init: Error moving to requested HDU\n");
    10181016   }
    10191017 } else { // Fits file has already been positionned
    10201018   if(ihdu>0 && ihdu!=HDU())
    1021      throw RangeCheckError("FitsABTColRd::Init: file already posit. at another HDU\n");
     1019     throw RangeCheckError("FitsImg2DRd::Init: file already posit. at another HDU\n");
    10221020 }
    10231021
     
    10291027 // Get NAXIS 1 et 2
    10301028 int nfound=0;
    1031  if(fits_read_keys_lng(FitsPtr,"NAXIS",1,2,Naxis,&nfound,&sta)) {
     1029 if(fits_read_keys_lng(GetFitsPtr(),"NAXIS",1,2,Naxis,&nfound,&sta)) {
    10321030   FitsOpenFile::printerror(sta);
    10331031   throw RangeCheckError("FitsImg2DRd::Init: Error reading NAXIS cards\n");
     
    10561054double FitsImg2DRd::ReadKey(char *keyname)
    10571055{
    1058  return FitsOpenFile::ReadKey(FitsPtr,keyname);
     1056 return FitsOpenFile::ReadKey(GetFitsPtr(),keyname);
    10591057}
    10601058
     
    10661064long FitsImg2DRd::ReadKeyL(char *keyname)
    10671065{
    1068  return FitsOpenFile::ReadKeyL(FitsPtr,keyname);
     1066 return FitsOpenFile::ReadKeyL(GetFitsPtr(),keyname);
    10691067}
    10701068
     
    10761074string FitsImg2DRd::ReadKeyS(char *keyname)
    10771075{
    1078  return FitsOpenFile::ReadKeyS(FitsPtr,keyname);
     1076 return FitsOpenFile::ReadKeyS(GetFitsPtr(),keyname);
    10791077}
    10801078
     
    10901088\warning TMatrix data(Naxis2,Naxis1)
    10911089*/
    1092 long FitsImg2DRd::Read(TMatrix<uint_2>& data)
     1090size_t FitsImg2DRd::Read(TMatrix<uint_2>& data)
    10931091{
    10941092 int sta=0;
     
    10981096 for(int j=0;j<Naxis[1];j++) {
    10991097   long deb = j*Naxis[0]+1, nel = Naxis[0];
    1100    fits_read_img(FitsPtr,TUSHORT,deb,nel,&NulVal,arr,NULL,&sta);
     1098   fits_read_img(GetFitsPtr(),TUSHORT,deb,nel,&NulVal,arr,NULL,&sta);
    11011099   if(sta) {
    11021100     FitsOpenFile::printerror(sta); delete [] arr;
     
    11121110
    11131111/*! Read image into a TMatrix<int_4> */
    1114 long FitsImg2DRd::Read(TMatrix<int_4>& data)
     1112size_t FitsImg2DRd::Read(TMatrix<int_4>& data)
    11151113{
    11161114 int sta=0;
     
    11211119 for(int j=0;j<Naxis[1];j++) {
    11221120   long deb = j*Naxis[0]+1, nel = Naxis[0];
    1123    fits_read_img(FitsPtr,T,deb,nel,&NulVal,arr,NULL,&sta);
     1121   fits_read_img(GetFitsPtr(),T,deb,nel,&NulVal,arr,NULL,&sta);
    11241122   if(sta) {
    11251123     FitsOpenFile::printerror(sta); delete [] arr;
     
    11351133
    11361134/*! Read image into a TMatrix<int_8> */
    1137 long FitsImg2DRd::Read(TMatrix<int_8>& data)
     1135size_t FitsImg2DRd::Read(TMatrix<int_8>& data)
    11381136{
    11391137 int sta=0;
     
    11431141 for(int j=0;j<Naxis[1];j++) {
    11441142   long deb = j*Naxis[0]+1, nel = Naxis[0];
    1145    fits_read_img(FitsPtr,TLONGLONG,deb,nel,&NulVal,arr,NULL,&sta);
     1143   fits_read_img(GetFitsPtr(),TLONGLONG,deb,nel,&NulVal,arr,NULL,&sta);
    11461144   if(sta) {
    11471145     FitsOpenFile::printerror(sta); delete [] arr;
     
    11571155
    11581156/*! Read image into a TMatrix<float> */
    1159 long FitsImg2DRd::Read(TMatrix<float>& data)
     1157size_t FitsImg2DRd::Read(TMatrix<float>& data)
    11601158{
    11611159 int sta=0;
     
    11651163 for(int j=0;j<Naxis[1];j++) {
    11661164   long deb = j*Naxis[0]+1, nel = Naxis[0];
    1167    fits_read_img(FitsPtr,TFLOAT,deb,nel,&NulVal,arr,NULL,&sta);
     1165   fits_read_img(GetFitsPtr(),TFLOAT,deb,nel,&NulVal,arr,NULL,&sta);
    11681166   if(sta) {
    11691167     FitsOpenFile::printerror(sta); delete [] arr;
     
    11791177
    11801178/*! Read image into a TMatrix<double> */
    1181 long FitsImg2DRd::Read(TMatrix<double>& data)
     1179size_t FitsImg2DRd::Read(TMatrix<double>& data)
    11821180{
    11831181 int sta=0;
     
    11871185 for(int j=0;j<Naxis[1];j++) {
    11881186   long deb = j*Naxis[0]+1, nel = Naxis[0];
    1189    fits_read_img(FitsPtr,TDOUBLE,deb,nel,&NulVal,arr,NULL,&sta);
     1187   fits_read_img(GetFitsPtr(),TDOUBLE,deb,nel,&NulVal,arr,NULL,&sta);
    11901188   if(sta) {
    11911189     FitsOpenFile::printerror(sta); delete [] arr;
     
    12571255 if(FitsOF!=NULL) delete FitsOF;
    12581256}
     1257
     1258
     1259
     1260///////////////////////////////////////////////////////////////////
     1261///////////////////////////////////////////////////////////////////
     1262///////////////////////////////////////////////////////////////////
     1263///////////////////////////////////////////////////////////////////
     1264
     1265//! Class for reading a 3D image from a FITS file
     1266
     1267/*!
     1268  \class SOPHYA::FitsImg3DRd
     1269  \ingroup FitsIOServer
     1270  Class for reading a 3D image from a FITS file
     1271*/
     1272
     1273//////////////////////////////////////////////////////////////
     1274/*!
     1275  Constructor.
     1276  \param fof : Pointer to the Class for opening the FITS file
     1277  \param ihdu : number of the HDU where the 3D image is.
     1278  \param lp : debug level
     1279  \verbatim
     1280  - if ihdu<=0 first IMAGE hdu is taken
     1281  - if ihdu>nhdu ihdu is set to nhdu
     1282  \endverbatim
     1283  \warning ihdu = [1,nhdu]
     1284*/
     1285FitsImg3DRd::FitsImg3DRd(FitsOpenFile* fof,int ihdu,int lp)
     1286{
     1287 Init(fof,ihdu,lp);
     1288}
     1289
     1290/*! Constructor by copy */
     1291FitsImg3DRd::FitsImg3DRd(FitsImg3DRd& fbt)
     1292{
     1293 Init(fbt.GetFitsOpenFile(),fbt.HDU(),fbt.DbgLevel);
     1294}
     1295
     1296/*! Constructor by default */
     1297FitsImg3DRd::FitsImg3DRd()
     1298{
     1299 Naxis[0] = Naxis[1] = Naxis[2] = 0;
     1300 SetNulVal(); SetDebug(0);
     1301 FitsOF = NULL;
     1302}
     1303
     1304/*! Init routine called by the constructor */
     1305void FitsImg3DRd::Init(FitsOpenFile* fof,int ihdu,int lp)
     1306{
     1307 // Initialisation des Parametres Generaux
     1308 Naxis[0] = Naxis[1] = Naxis[2] = 0;
     1309 SetNulVal(); SetDebug(lp);
     1310 FitsOF = NULL;
     1311
     1312 // Caracteristiques du FitsOpenFile
     1313 FitsOF = fof;
     1314 if(FitsOF==NULL)
     1315   throw NullPtrError("FitsImg3DRd::Init: FitsOpenFile pointer is NULL\n");
     1316
     1317 if(GetFitsPtr()==NULL)
     1318   throw NullPtrError("FitsImg3DRd::Init: FitsPtr pointer is NULL\n");
     1319
     1320 int sta = 0;
     1321 if(ihdu<0) ihdu=0; if(ihdu>NHDU()) ihdu=NHDU();
     1322
     1323 // Get HDU 3D image
     1324 // ATTENTION: ... cf blabla equivalent dans FitsABTColRd::Init()
     1325 if(FitsOF->GetPosStatus()==false) {
     1326   if(ihdu==0) { // find the first IMAGE_HDU
     1327     FitsOF->MoveToFirst(IMAGE_HDU);
     1328   } else {
     1329     int rc = FitsOF->MoveToHDU(ihdu);
     1330     if(rc!=ihdu)
     1331       throw RangeCheckError("FitsImg3DRd::Init: Error moving to requested HDU\n");
     1332   }
     1333 } else { // Fits file has already been positionned
     1334   if(ihdu>0 && ihdu!=HDU())
     1335     throw RangeCheckError("FitsImg3DRd::Init: file already posit. at another HDU\n");
     1336 }
     1337
     1338 // Check HDUType and set position status to TRUE
     1339 if(HDUType()!=IMAGE_HDU)
     1340   throw TypeMismatchExc("FitsImg3DRd::Init: HDU not IMAGE_HDU\n");
     1341 FitsOF->SetPosStatus(true);
     1342
     1343 // Get NAXIS 1, 2 et 3
     1344 int nfound=0;
     1345 if(fits_read_keys_lng(GetFitsPtr(),"NAXIS",1,3,Naxis,&nfound,&sta)) {
     1346   FitsOpenFile::printerror(sta);
     1347   throw RangeCheckError("FitsImg3DRd::Init: Error reading NAXIS cards\n");
     1348 }
     1349 if(DbgLevel>1)
     1350   cout<<"...Init(hdu="<<HDU()<<")  NAXIS1="<<Naxis[0]<<" NAXIS2="
     1351       <<Naxis[1]<<" NAXIS3="<<Naxis[2]<<" (nfound="<<nfound<<")"<<endl;
     1352 if(nfound!=3 || Naxis[0]<=0 || Naxis[1]<=0 || Naxis[2]<=0)
     1353   throw NotAvailableOperation("FitsImg3DRd::Init: bad Naxis[0-2] value\n");
     1354
     1355}
     1356
     1357/*! Destructor. */
     1358FitsImg3DRd::~FitsImg3DRd()
     1359{
     1360 //--- Surtout on ne "fits_close_file" pas le fichier FITS !!!
     1361 Naxis[0] = Naxis[1] = Naxis[2] = 0;
     1362}
     1363
     1364//////////////////////////////////////////////////////////////
     1365/*!
     1366  Read a fitsheader key into double
     1367  \param keyname : name of the key
     1368  \return value into double
     1369*/
     1370double FitsImg3DRd::ReadKey(char *keyname)
     1371{
     1372 return FitsOpenFile::ReadKey(GetFitsPtr(),keyname);
     1373}
     1374
     1375/*!
     1376  Read a fitsheader key into long
     1377  \param keyname : name of the key
     1378  \return value into long
     1379*/
     1380long FitsImg3DRd::ReadKeyL(char *keyname)
     1381{
     1382 return FitsOpenFile::ReadKeyL(GetFitsPtr(),keyname);
     1383}
     1384
     1385/*!
     1386  Read a fitsheader key into string
     1387  \param keyname : name of the key
     1388  \return value into string
     1389*/
     1390string FitsImg3DRd::ReadKeyS(char *keyname)
     1391{
     1392 return FitsOpenFile::ReadKeyS(GetFitsPtr(),keyname);
     1393}
     1394
     1395//////////////////////////////////////////////////////////////
     1396/* REMARQUE:
     1397 * Dans TArray A(naxis1,naxis2,naxis3);
     1398 *      A(i,j,k) -> i varie le plus vite et k le moins vite
     1399 */
     1400/*!
     1401Read 3D image into a TArray<uint_2>
     1402*/
     1403size_t FitsImg3DRd::Read(TArray<uint_2>& data)
     1404{
     1405 int sta=0;
     1406 uint_2* arr = new uint_2[Naxis[0]];
     1407 sa_size_t ndim[3] = {Naxis[0],Naxis[1],Naxis[2]}; data.ReSize(3,ndim);
     1408
     1409 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) {
     1410   long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0];
     1411   fits_read_img(GetFitsPtr(),TUSHORT,deb,nel,&NulVal,arr,NULL,&sta);
     1412   if(sta) {
     1413     FitsOpenFile::printerror(sta); delete [] arr;
     1414     throw
     1415       NotAvailableOperation("FitsImg3DRd::Read(TArray<uint_2>): Error Reading Fits file\n");
     1416   }
     1417   for(int i=0;i<Naxis[0];i++) data(i,j,k) = arr[i];
     1418 }
     1419
     1420 delete [] arr;
     1421 return Naxis[0]*Naxis[1]*Naxis[2];
     1422 }
     1423
     1424/*! Read 3D image into a TArray<int_4> */
     1425size_t FitsImg3DRd::Read(TArray<int_4>& data)
     1426{
     1427 int sta=0;
     1428 int_4* arr = new int_4[Naxis[0]];
     1429 sa_size_t ndim[3] = {Naxis[0],Naxis[1],Naxis[2]}; data.ReSize(3,ndim);
     1430 int T = (sizeof(long)==4) ? TLONG: TINT;
     1431
     1432 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) {
     1433   long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0];
     1434   fits_read_img(GetFitsPtr(),T,deb,nel,&NulVal,arr,NULL,&sta);
     1435   if(sta) {
     1436     FitsOpenFile::printerror(sta); delete [] arr;
     1437     throw
     1438       NotAvailableOperation("FitsImg3DRd::Read(TArray<int_4>): Error Reading Fits file\n");
     1439   }
     1440   for(int i=0;i<Naxis[0];i++) data(i,j,k) = arr[i];
     1441 }
     1442
     1443 delete [] arr;
     1444 return Naxis[0]*Naxis[1]*Naxis[2];
     1445 }
     1446
     1447/*! Read 3D image into a TArray<int_8> */
     1448size_t FitsImg3DRd::Read(TArray<int_8>& data)
     1449{
     1450 int sta=0;
     1451 int_8* arr = new int_8[Naxis[0]];
     1452 sa_size_t ndim[3] = {Naxis[0],Naxis[1],Naxis[2]}; data.ReSize(3,ndim);
     1453
     1454 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) {
     1455   long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0];
     1456   fits_read_img(GetFitsPtr(),TLONGLONG,deb,nel,&NulVal,arr,NULL,&sta);
     1457   if(sta) {
     1458     FitsOpenFile::printerror(sta); delete [] arr;
     1459     throw
     1460       NotAvailableOperation("FitsImg3DRd::Read(TArray<int_8>): Error Reading Fits file\n");
     1461   }
     1462   for(int i=0;i<Naxis[0];i++) data(i,j,k) = arr[i];
     1463 }
     1464
     1465 delete [] arr;
     1466 return Naxis[0]*Naxis[1]*Naxis[2];
     1467 }
     1468
     1469/*! Read 3D image into a TArray<float> */
     1470size_t FitsImg3DRd::Read(TArray<float>& data)
     1471{
     1472 int sta=0;
     1473 float* arr = new float[Naxis[0]];
     1474 sa_size_t ndim[3] = {Naxis[0],Naxis[1],Naxis[2]}; data.ReSize(3,ndim);
     1475
     1476 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) {
     1477   long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0];
     1478   fits_read_img(GetFitsPtr(),TFLOAT,deb,nel,&NulVal,arr,NULL,&sta);
     1479   if(sta) {
     1480     FitsOpenFile::printerror(sta); delete [] arr;
     1481     throw
     1482       NotAvailableOperation("FitsImg3DRd::Read(TArray<float>): Error Reading Fits file\n");
     1483   }
     1484   for(int i=0;i<Naxis[0];i++) data(i,j,k) = arr[i];
     1485 }
     1486
     1487 delete [] arr;
     1488 return Naxis[0]*Naxis[1]*Naxis[2];
     1489 }
     1490
     1491/*! Read 3D image into a TArray<double> */
     1492size_t FitsImg3DRd::Read(TArray<double>& data)
     1493{
     1494 int sta=0;
     1495 double* arr = new double[Naxis[0]];
     1496 sa_size_t ndim[3] = {Naxis[0],Naxis[1],Naxis[2]}; data.ReSize(3,ndim);
     1497
     1498 for(int k=0;k<Naxis[2];k++) for(int j=0;j<Naxis[1];j++) {
     1499   long deb = Naxis[0]*(j+Naxis[1]*k)+1, nel = Naxis[0];
     1500   fits_read_img(GetFitsPtr(),TDOUBLE,deb,nel,&NulVal,arr,NULL,&sta);
     1501   if(sta) {
     1502     FitsOpenFile::printerror(sta); delete [] arr;
     1503     throw
     1504       NotAvailableOperation("FitsImg3DRd::Read(TArray<double>): Error Reading Fits file\n");
     1505   }
     1506   for(int i=0;i<Naxis[0];i++) data(i,j,k) = arr[i];
     1507 }
     1508
     1509 delete [] arr;
     1510 return Naxis[0]*Naxis[1]*Naxis[2];
     1511 }
     1512
     1513///////////////////////////////////////////////////////////////////
     1514///////////////////////////////////////////////////////////////////
     1515///////////////////////////////////////////////////////////////////
     1516///////////////////////////////////////////////////////////////////
     1517
     1518//! Class for reading a 3D image from a FITS file
     1519
     1520/*!
     1521  \class SOPHYA::FitsImg3DRead
     1522  \ingroup FitsIOServer
     1523  Class for reading a 3D image from a FITS file
     1524*/
     1525
     1526//////////////////////////////////////////////////////////////
     1527/*!
     1528  Constructor.
     1529  \param fname : name of the FITS file
     1530  \param ihdu : number of the HDU where the 3D image is.
     1531  \param lp : debug level
     1532  \verbatim
     1533  - if ihdu<=0 first IMAGE hdu is taken
     1534  - if ihdu>nhdu ihdu is set to nhdu
     1535  \endverbatim
     1536  \warning ihdu = [1,nhdu]
     1537*/
     1538FitsImg3DRead::FitsImg3DRead(string fname,int ihdu,int lp)
     1539: FitsImg3DRd(new FitsOpenFile(fname),ihdu,lp)
     1540{
     1541}
     1542
     1543/*! Constructor. see below */
     1544FitsImg3DRead::FitsImg3DRead(const char * cfname,int ihdu,int lp)
     1545: FitsImg3DRd(new FitsOpenFile(cfname),ihdu,lp)
     1546{
     1547}
     1548
     1549/*! Constructor by default */
     1550FitsImg3DRead::FitsImg3DRead()
     1551: FitsImg3DRd()
     1552{
     1553}
     1554
     1555/*! Constructor by copy */
     1556FitsImg3DRead::FitsImg3DRead(FitsImg3DRead& fimg)
     1557{
     1558 // --- ATTENTION ---
     1559 // FitsImg3DRead ferme le fichier FITS: il faut dupliquer le FitsOpenFile
     1560 FitsOpenFile* fof = new FitsOpenFile(*fimg.GetFitsOpenFile());
     1561 Init(fof,fimg.HDU(),fimg.DbgLevel);
     1562}
     1563
     1564/*! Destructor. */
     1565FitsImg3DRead::~FitsImg3DRead()
     1566{
     1567 // On detruit le FitsOpenFile, cad qu'on ferme (fits_file_close) le fichier FITS
     1568 if(FitsOF!=NULL) delete FitsOF;
     1569}
  • trunk/SophyaExt/FitsIOServer/fabtcolread.h

    r2791 r3114  
    104104  inline FitsOpenFile* GetFitsOpenFile(void) const {return FitsOF;}
    105105  //! Get the FITS file pointer (cfistio pointer)
    106   inline fitsfile* GetFitsPtr(void) const {return FitsPtr;}
     106  inline fitsfile* GetFitsPtr(void) const {return FitsOF->GetFitsPtr();}
    107107  //! Get the number of HDU in the FITS file
    108108  inline int NHDU(void) const
     
    156156  unsigned long NFitsRead;
    157157  FitsOpenFile* FitsOF;
    158   fitsfile* FitsPtr; // Redite avec FitsOF->FitsPtr, mais utilise partout!
    159158  long LineDeb, LineFin;
    160159  double *Buffer;
     
    193192  string ReadKeyS(char *keyname);
    194193
    195   long Read(TMatrix<uint_2>& data);
    196   long Read(TMatrix<int_4>& data);
    197   long Read(TMatrix<int_8>& data);
    198   long Read(TMatrix<float>& data);
    199   long Read(TMatrix<double>& data);
     194  size_t Read(TMatrix<uint_2>& data);
     195  size_t Read(TMatrix<int_4>& data);
     196  size_t Read(TMatrix<int_8>& data);
     197  size_t Read(TMatrix<float>& data);
     198  size_t Read(TMatrix<double>& data);
    200199
    201200  //! Set debug level
     
    206205  inline FitsOpenFile* GetFitsOpenFile(void) const {return FitsOF;}
    207206  //! Get the FITS file pointer (cfistio pointer)
    208   inline fitsfile* GetFitsPtr(void) const {return FitsPtr;}
     207  inline fitsfile* GetFitsPtr(void) const {return FitsOF->GetFitsPtr();}
    209208  //! Get the number of HDU in the FITS file
    210209  inline int NHDU(void) const
     
    229228
    230229  FitsOpenFile* FitsOF;
    231   fitsfile* FitsPtr; // Redite avec FitsOF->FitsPtr, mais utilise partout!
    232230};
    233231
     
    243241};
    244242
     243
     244///////////////////////////////////////////////////////////////////
     245//! Class for reading a 3D image from a FITS file
     246class FitsImg3DRd : public AnyDataObj {
     247public:
     248  FitsImg3DRd(FitsOpenFile* fof,int ihdu=0,int lp=0);
     249  FitsImg3DRd(FitsImg3DRd& fbt);
     250  FitsImg3DRd();
     251  virtual ~FitsImg3DRd();
     252
     253  double ReadKey(char *keyname);
     254  long   ReadKeyL(char *keyname);
     255  string ReadKeyS(char *keyname);
     256
     257  size_t Read(TArray<uint_2>& data);
     258  size_t Read(TArray<int_4>& data);
     259  size_t Read(TArray<int_8>& data);
     260  size_t Read(TArray<float>& data);
     261  size_t Read(TArray<double>& data);
     262
     263  //! Set debug level
     264  inline void    SetDebug(int lp=0) {DbgLevel = (unsigned short) lp;}
     265  //! Set null value to be return when reading null data (0=return the data)
     266  inline void    SetNulVal(double nulval=0.) {NulVal = nulval;}
     267  //! Get the pointer to FitsOpenFile
     268  inline FitsOpenFile* GetFitsOpenFile(void) const {return FitsOF;}
     269  //! Get the FITS file pointer (cfistio pointer)
     270  inline fitsfile* GetFitsPtr(void) const {return FitsOF->GetFitsPtr();}
     271  //! Get the number of HDU in the FITS file
     272  inline int NHDU(void) const
     273         {if(FitsOF) return FitsOF->NHDU(); else return 0;}
     274  //! Get the number of the HDU read
     275  inline int HDU(void) const
     276         {if(FitsOF) return FitsOF->HDU(); else return 0;}
     277  //! Get the HDU type
     278  inline int HDUType(void) const
     279         {if(FitsOF) return FitsOF->HDUType(); else return 0;}
     280  //! Get NAXIS1
     281  inline long Naxis1(void) const {return Naxis[0];}
     282  //! Get NAXIS2
     283  inline long Naxis2(void) const {return Naxis[1];}
     284  //! Get NAXIS3
     285  inline long Naxis3(void) const {return Naxis[2];}
     286
     287protected:
     288  void Init(FitsOpenFile* fof,int ihdu,int lp);
     289
     290  long Naxis[3];
     291  double NulVal;
     292  unsigned short DbgLevel;
     293
     294  FitsOpenFile* FitsOF;
     295};
     296
     297///////////////////////////////////////////////////////////////////
     298//! Class for reading a 3D image from a FITS file
     299class FitsImg3DRead : public FitsImg3DRd {
     300public:
     301  FitsImg3DRead(string fname,int ihdu=0,int lp=0);
     302  FitsImg3DRead(const char *cfname,int ihdu=0,int lp=0);
     303  FitsImg3DRead(FitsImg3DRead& fbt);
     304  FitsImg3DRead();
     305  virtual ~FitsImg3DRead();
     306};
     307
    245308} // namespace SOPHYA
    246309#endif    /* FABTCOLREAD_H_SEEN */
  • trunk/SophyaExt/FitsIOServer/fabtwriter.cc

    r2789 r3114  
    884884  <<"  Naxis1 "<<Naxis[0]<<"  Naxis2 "<<Naxis[1]<<endl;
    885885}
     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*/
     904FitsImg3DWriter::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*/
     919FitsImg3DWriter::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*/
     935FitsImg3DWriter::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*/
     951FitsImg3DWriter::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 */
     961FitsImg3DWriter::~FitsImg3DWriter()
     962{
     963}
     964
     965/*! Create the 3D image. Done at the first write request. */
     966void 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*/
     985void 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. */
     1008void 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. */
     1032void 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. */
     1055void 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. */
     1078void FitsImg3DWriter::Print(ostream& os) const
     1079{
     1080os<<"FitsImg3DWriter::Print: FitsFN "<<FitsFN<<endl
     1081  <<"  HduType "<<HduType<<"  NOverFlow "<<NOverFlow<<"  BitPix "<<BitPix
     1082  <<"  Naxis1 "<<Naxis[0]<<"  Naxis2 "<<Naxis[1]<<"  Naxis3 "<<Naxis[2]<<endl;
     1083}
  • trunk/SophyaExt/FitsIOServer/fabtwriter.h

    r2782 r3114  
    157157};
    158158
     159///////////////////////////////////////////////////////////////////////////
     160///////////////////////////////////////////////////////////////////////////
     161//! Class for writing a FITS Image
     162class FitsImg3DWriter : public FitsWriter {
     163public:
     164  FitsImg3DWriter(string fname,int bitpix=FLOAT_IMG,int lp=0);
     165  FitsImg3DWriter(const char* cfname,int bitpix=FLOAT_IMG,int lp=0);
     166  FitsImg3DWriter(string fname,bool update,int bitpix=FLOAT_IMG,int lp=0);
     167  FitsImg3DWriter(const char* cfname,bool update,int bitpix=FLOAT_IMG,int lp=0);
     168  virtual ~FitsImg3DWriter();
     169
     170  void Write(TArray<uint_2>& data);
     171  void Write(TArray<int_4>& data);
     172  void Write(TArray<float>& data);
     173  void Write(TArray<double>& data);
     174
     175  //! Print to os
     176  virtual void   Print(ostream& os) const;
     177  //! Print to stdout
     178  inline  void   Print(void) const {Print(cout);}
     179
     180protected:
     181  void createimg(void);
     182
     183  int BitPix;
     184  long Naxis[3];
     185  bool FirstTime;
     186};
     187
    159188} // namespace SOPHYA
    160189#endif    /* FABTWRITER_H_SEEN */
Note: See TracChangeset for help on using the changeset viewer.