Changeset 2450 in Sophya for trunk/SophyaExt


Ignore:
Timestamp:
Oct 29, 2003, 1:51:17 PM (22 years ago)
Author:
cmv
Message:

possibilite d extension fits ds le writer cmv 29/10/2003

Location:
trunk/SophyaExt/FitsIOServer
Files:
2 edited

Legend:

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

    r2174 r2450  
    1212  \verbatim
    1313  //-----------------------------------------------------------
     14  OPENING A NEW FILE AND WRITING INTO
    1415  -- Exemple 1: Writing element by element
    1516  FitsABTWriter fbtw(fitswrit,BINARY_TBL);
    1617  fbtw.SetExtName("MY_OWN_EXTENSION");
    17   fbtw.AddCol("vars",NULL,"km",TSHORT);       // col=0
    18   fbtw.AddCol("vars2",NULL,"km",TSHORT);      // col=1
    19   fbtw.AddCol("varl",NULL,"Degre",TLONG);     // col=2
    20   fbtw.AddCol("varf",NULL,"",TFLOAT);         // col=3
    21   fbtw.AddCol("vard","","arcmin",TDOUBLE);    // col=4
     18  int c1 = fbtw.AddCol("vars",NULL,"km",TSHORT);       // col=0
     19  int c2 = fbtw.AddCol("vars2",NULL,"km",TSHORT);      // col=1
     20  int c3 = fbtw.AddCol("varl",NULL,"Degre",TLONG);     // col=2
     21  int c4 = fbtw.AddCol("varf",NULL,"",TFLOAT);         // col=3
     22  int c5 = fbtw.AddCol("vard","","arcmin",TDOUBLE);    // col=4
    2223  fbtw.SetDebug(3);
    2324  for(long i=0;i<1000;i++) {
    2425    double x = i;
    25     fbtw.Write(0,i,1000.*x); // if overflow, managed by cfitsio
     26    fbtw.Write(c1,i,1000.*x); // if overflow, managed by cfitsio
    2627                             // Write(int,long,double) is called
    27     fbtw.Write(1,i,(short)(1000.*x));
     28    fbtw.Write(c2,i,(short)(1000.*x));
    2829                             // if overflow, managed by language
    2930                             // Write(int,long,short) is called
    30     fbtw.Write(2,i,x);
    31     fbtw.Write(3,i,x);
    32     fbtw.Write(4,i,x);
     31    fbtw.Write(c3,i,x);
     32    fbtw.Write(c4,i,x);
     33    fbtw.Write(c5,i,x);
    3334  }
    3435  cout<<"Number of Overflows when writing: "
     
    5152  }
    5253  \endverbatim
     54  \verbatim
     55  //-----------------------------------------------------------
     56  //-----------------------------------------------------------
     57  //-----------------------------------------------------------
     58  OPENING A NEW FILE AND WRITING 2 TABLE EXTENSIONS SIMULTANEOUSLY INTO
     59 try {
     60
     61   cout<<">>>>> Creating a new fits file with FitsABTWriter"<<endl;
     62   FitsABTWriter fbtw("!cmvtstfits3.fits",BINARY_TBL,3);
     63   //FitsABTWriter fbtw("!cmvtstfits3.fits",false,BINARY_TBL,3);
     64   fbtw.SetExtName("Test fits table 1");
     65   cout<<"Writing Keys"<<endl;
     66   fbtw.WriteKey("MYKEYL",(long)123456789,"my LONG key");
     67   fbtw.WriteKey("MYKEYD",1.9999999,"my DOUBLE key");
     68   fbtw.WriteKey("MYKEYC","how are you ?","my CHAR* key");
     69   dum="do you feel better ?";
     70   fbtw.WriteKey("MYKEYS",dum,"my STRING key");
     71   i1 = fbtw.AddCol("x1",NULL,"unit1",TDOUBLE);
     72   i2 = fbtw.AddCol("x2",NULL,"unit2",TDOUBLE);
     73   i3 = fbtw.AddCol("x3",NULL,"unit3",TDOUBLE);
     74   fbtw.Print();
     75
     76   cout<<">>>>> Another extension fits table with FitsABTWriter"<<endl;
     77   FitsABTWriter fbtw2("cmvtstfits3.fits",true,BINARY_TBL,3);
     78   fbtw2.SetExtName("Test fits table 2");
     79   cout<<"Writing Keys"<<endl;
     80   fbtw2.WriteKey("MYKEYL",(long)-123456789,"my new LONG key");
     81   fbtw2.WriteKey("MYKEYD",-1.9999999,"my new clef DOUBLE key");
     82   fbtw2.WriteKey("MYKEYC","how are you NOW ?","my new CHAR* key");
     83   dum="do you feel better NOW ?";
     84   fbtw2.WriteKey("MYKEYS",dum,"my new STRING key");
     85   i11 = fbtw2.AddCol("x11",NULL,"unit11",TDOUBLE);
     86   i12 = fbtw2.AddCol("x12",NULL,"unit12",TDOUBLE);
     87   i13 = fbtw2.AddCol("x13",NULL,"unit13",TDOUBLE);
     88   fbtw2.Print();
     89
     90   cout<<">>>>> Write into the 2 tables simultaneously"<<endl;
     91   for(int i=0;i<NNN;i++) {
     92     fbtw.Write(i1,i,i+1.);
     93     fbtw.Write(i2,i,i+11.);
     94     fbtw.Write(i3,i,i+101.);
     95     fbtw2.Write(i11,i,-(i+1.));
     96     fbtw2.Write(i12,i,-(i+11.));
     97     fbtw2.Write(i13,i,-(i+101.));
     98   }
     99
     100 } catch (PThrowable & exc) {
     101   cout<<"Exception : "<<(string)typeid(exc).name()
     102       <<" - Msg= "<<exc.Msg()<<endl;
     103   return -2;
     104 } catch (...) {
     105   cout<<" some other exception was caught !"<<endl;
     106   return -2;
     107 }
     108  \endverbatim
    53109*/
    54110
     
    56112/*!
    57113  Constructor.
    58   \param fname : FITS file name to be written
     114  \param fname : FITS file name to be written (a new fits file is created)
    59115  \param hdutype : type of extension to be created (BINARY_TBL or ASCII_TBL)
    60116  \param lp : debug level
     
    62118FitsABTWriter::FitsABTWriter(string fname,int hdutype,int lp)
    63119{
    64   createfits(fname.c_str(),hdutype,lp);
     120  cr_or_upd_fits(fname.c_str(),false,hdutype,lp);
     121}
     122
     123/*!
     124  Constructor.
     125  \param cfname : FITS file name to be written (a new fits file is created)
     126  \param hdutype : type of extension to be created (BINARY_TBL or ASCII_TBL)
     127  \param lp : debug level
     128*/
     129FitsABTWriter::FitsABTWriter(const char* cfname,int hdutype,int lp)
     130{
     131  cr_or_upd_fits(cfname,false,hdutype,lp);
     132}
     133
     134/*!
     135  Constructor.
     136  \param fname : FITS file name to be written (created or updated)
     137  \param update : file is created if FALSE, open for update if TRUE
     138  \param hdutype : type of extension to be created (BINARY_TBL or ASCII_TBL)
     139  \param lp : debug level
     140*/
     141FitsABTWriter::FitsABTWriter(string fname,bool update,int hdutype,int lp)
     142{
     143  cr_or_upd_fits(fname.c_str(),update,hdutype,lp);
     144}
     145
     146/*!
     147  Constructor.
     148  \param cfname : FITS file name to be written (created or updated)
     149  \param update : file is created if FALSE, open for update if TRUE
     150  \param hdutype : type of extension to be created (BINARY_TBL or ASCII_TBL)
     151  \param lp : debug level
     152*/
     153FitsABTWriter::FitsABTWriter(const char* cfname,bool update,int hdutype,int lp)
     154{
     155  cr_or_upd_fits(cfname,update,hdutype,lp);
    65156}
    66157
    67158/*! See FitsABTWriter() */
    68 FitsABTWriter::FitsABTWriter(const char* cfname,int hdutype,int lp)
    69 {
    70   createfits(cfname,hdutype,lp);
    71 }
    72 
    73 /*! See FitsABTWriter() */
    74 void FitsABTWriter::createfits(const char *cfname,int hdutype,int lp)
     159void FitsABTWriter::cr_or_upd_fits(const char *cfname,bool update,int hdutype,int lp)
    75160{
    76161 FirstTime = true;
     
    80165 FitsFN = cfname;
    81166 NOverFlow = 0;
     167 Update = update;
    82168
    83169 if(DbgLevel)
    84    cout<<"FitsABTWriter::createfits FitsFN="<<FitsFN
     170   cout<<"FitsABTWriter::cr_or_upd_fits FitsFN="<<FitsFN
    85171       <<" HduType="<<HduType<<endl;
    86172
    87173 if(FitsFN.size() <= 0 )
    88    throw ParmError("FitsABTWriter::createfits: Fits file name error\n");
     174   throw ParmError("FitsABTWriter::cr_or_upd_fits: Fits file name error\n");
    89175
    90176 if(HduType!=BINARY_TBL && HduType!=ASCII_TBL)
    91    throw TypeMismatchExc("FitsABTWriter::createfits: Only BINARY or ASCII table permitted\n");
    92 
    93  // create new FITS file
     177   throw TypeMismatchExc("FitsABTWriter::cr_or_upd_fits: Only BINARY or ASCII table permitted\n");
     178
     179 // create or update FITS file
    94180 int sta=0;
    95  if(fits_create_file(&FitsPtr,FitsFN.c_str(),&sta)) {
    96    printerror(sta);
    97    throw NullPtrError("FitsABTWriter::createfits: Error creating Fits file\n");
     181 if(Update) {
     182   if(fits_open_file(&FitsPtr,FitsFN.c_str(),READWRITE,&sta)) {
     183     printerror(sta);
     184     throw NullPtrError("FitsABTWriter::cr_or_upd_fits: Error opening Fits file for update\n");
     185   }
     186   if(DbgLevel) cout<<"FitsABTWriter::cr_or_upd_fits: fits file has been opened for update"<<endl;
     187 } else {
     188   if(fits_create_file(&FitsPtr,FitsFN.c_str(),&sta)) {
     189     printerror(sta);
     190     throw NullPtrError("FitsABTWriter::cr_or_upd_fits: Error creating new Fits file\n");
     191   }
     192   if(DbgLevel) cout<<"FitsABTWriter::cr_or_upd_fits: a new fits file has been created"<<endl;
    98193 }
    99194
     
    102197 //if(fits_create_img(FitsPtr,BYTE_IMG,0,naxes,&sta)) {
    103198 //  printerror(sta);
    104  //  throw NullPtrError("FitsABTWriter::createfits: Error creating Primary extension\n");
     199 //  throw NullPtrError("FitsABTWriter::cr_or_upd_fits: Error creating Primary extension\n");
    105200 //}
    106201
     
    144239 if(comment) k.comment=comment; else k.comment="";
    145240 LongKey.push_back(k);
     241}
     242
     243/*! Write a string value into Fits Header */
     244void FitsABTWriter::WriteKey(const char *keyname,string val,char* comment)
     245{
     246 if(keyname==NULL || strlen(keyname)<=0) return;
     247 KeyString k;
     248 k.keyname=keyname;
     249 k.val=val;
     250 if(comment) k.comment=comment; else k.comment="";
     251 StringKey.push_back(k);
    146252}
    147253
     
    167273       printerror(sta);
    168274   }
     275 if(StringKey.size()>0)
     276   for(unsigned int i=0;i<StringKey.size();i++) {
     277     char* key = const_cast<char*>(StringKey[i].keyname.c_str());
     278     char* com = const_cast<char*>(StringKey[i].comment.c_str());
     279     char* val = const_cast<char*>(StringKey[i].val.c_str());
     280     if(fits_update_key(FitsPtr,TSTRING,key,val,com,&sta))
     281       printerror(sta);
     282   }
    169283 DoubleKey.resize(0);
    170284 LongKey.resize(0);
     285 StringKey.resize(0);
    171286}
    172287
  • trunk/SophyaExt/FitsIOServer/fabtwriter.h

    r2322 r2450  
    2121  FitsABTWriter(string fname,int hdutype=BINARY_TBL,int lp=0);
    2222  FitsABTWriter(const char* cfname,int hdutype=BINARY_TBL,int lp=0);
     23  FitsABTWriter(string fname,bool update,int hdutype=BINARY_TBL,int lp=0);
     24  FitsABTWriter(const char* cfname,bool update,int hdutype=BINARY_TBL,int lp=0);
    2325  virtual ~FitsABTWriter();
    2426
     
    2931  //! Write a long value in Fits header.
    3032  void WriteKey(const char *keyname,long val,char* comment=NULL);
     33  //! Write a string value in Fits header.
     34  void WriteKey(const char *keyname,string val,char* comment=NULL);
     35  //! Write a character string value in Fits header.
     36  inline void WriteKey(const char *keyname,char* val,char* comment=NULL)
     37                      {string dum=val; WriteKey(keyname,dum,comment);}
    3138
    3239  //! Add a new column to the FITS table and return its number (see addcol).
     
    7380  struct KeyDouble {string keyname; double val; string comment;};
    7481  struct KeyLong   {string keyname; long   val; string comment;};
     82  struct KeyString {string keyname; string val; string comment;};
    7583
    76   void createfits(const char *cfname,int hdutype,int lp);
     84  void cr_or_upd_fits(const char *cfname,bool update,int hdutype,int lp);
    7785  int addcol(const char* label,const char* tform
    7886            ,const char* tunit,int datatype);
     
    8391
    8492  string FitsFN,ExtName;
     93  bool Update;
    8594  int HduType;
    8695  unsigned short DbgLevel;
     
    94103  vector<struct KeyDouble> DoubleKey;
    95104  vector<struct KeyLong>   LongKey;
     105  vector<struct KeyString> StringKey;
    96106};
    97107
Note: See TracChangeset for help on using the changeset viewer.