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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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}
Note: See TracChangeset for help on using the changeset viewer.