Ignore:
Timestamp:
Oct 3, 2000, 2:14:14 PM (25 years ago)
Author:
ansari
Message:

doc dans .cc

File:
1 edited

Legend:

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

    r1209 r1218  
    88
    99
     10void BnTblLine::setFormat(int dc, int fc, int ic, int cc, vector<string> names)
     11   {
     12    int nbcols = dc + fc + ic + cc;
     13    int maxName = names.size();
     14    if (nbcols != maxName)
     15      {
     16        cout << " WARNING: BnTblLine:: length of vector of column names not equal to total number of columns" << endl;
     17        maxName = nbcols < maxName ? nbcols : maxName;
     18      }
     19    ColName_ = vector<string>(nbcols);
     20     for (int k=0; k < maxName; k++) ColName_[k] = names[k];
     21    if (dc >0) ddata_ = vector<double>(dc);
     22    if (fc >0) fdata_ = vector<float>(fc);
     23    if (ic >0) idata_ = vector<int>(fc);
     24    if (cc >0) cdata_ = vector<string>(fc);
     25   }
     26
     27bool BnTblLine::sameFormat(const BnTblLine& btl) const
     28   {
     29     if (btl.ddata_.size() == ddata_.size() && btl.fdata_.size() == fdata_.size() && btl.idata_.size() == idata_.size() && btl.cdata_.size() == cdata_.size()) return true;
     30     else return false;
     31   }
     32
     33void BnTblLine::Print()
     34   {
     35     int k;
     36     cout << " ********* ligne ************* " << endl;
     37     cout << " *** noms de variables  " << endl;
     38     for (k=0; k < ColName_.size(); k++) cout << ColName_[k] << " ";
     39     cout << endl;
     40     cout << " *** variables doubles  " << endl;
     41     for (k=0; k < ddata_.size(); k++) cout << ddata_[k] << " ";
     42     cout << endl;
     43     cout << " *** variables float  " << endl;
     44     for (k=0; k < fdata_.size(); k++) cout << fdata_[k] << " ";
     45     cout << endl;
     46     cout << " *** variables int  " << endl;
     47     for (k=0; k < idata_.size(); k++) cout << idata_[k] << " ";
     48     cout << endl;
     49     cout << " *** variables string  " << endl;
     50     for (k=0; k < cdata_.size(); k++) cout << cdata_[k] << " ";
     51     cout << endl;
     52     cout << " ***************************** " << endl;
     53   }
     54
     55
     56
     57/*!
     58  \class SOPHYA::FitsIOHandler
     59The class structure is analogous to Sophya-PPersist system :
     60Each SOPHYA object XXX is associated with a object of class FITS_XXX
     61 (inheriting from FitsFileHandler), to which input/output operations with FITS
     62 files are delegated (through a class Hierarchy : FitsFile (virtual),
     63 FitsInFile, FitsOutFile) . A typical example of use is the following :
     64
     65\verbatim
     66  int m=... ;
     67  SphereHEALPix<r_8> sphere1(m);           // definition of the SOPHYA object
     68  .... fill the sphere ....
     69
     70  FITS_SphereHEALPix<r_8> fits_sph1(sphere1);
     71                                           // delegated object
     72  fits_sph.Write("myfile.fits");           // writing on FITS file
     73
     74   FITS_SphereHEALPix<r_8> fits_sph2("myfile.fits");
     75                                           // load a delegated object
     76                                           // from FITS file
     77   SphereHEALPix<r_8> sphere2=(SphereHEALPix<r_8>)fits_sph2;
     78                                           // casting the delegated object
     79                                           // into a SOPHYA object
     80\endverbatim
     81 
     82
     83*/
     84
     85/*! \fn void  SOPHYA::FitsIOHandler::Read(char flnm[],int hdunum)
     86
     87this method is called from inherited objects :
     88
     89opens a file 'flnm'
     90
     91gets parameters in extension-header (hdunum)
     92
     93calls the method 'ReadFromFits' from the inherited  object
     94*/
    1095void   FitsIOHandler::Read(char flnm[],int hdunum)
    1196{
     
    1398  Read(ifts, hdunum);
    1499}
     100
     101  /*! \fn void SOPHYA::FitsIOHandler::Read(FitsInFile& is, int hdunum)
     102Read the data on extension hdunum (or primary header, if hdunum=1) from FitsInFIle. If hdunum is not addressed, , one reads the next extension, with respect to the current position.
     103   */
    15104void FitsIOHandler::Read(FitsInFile& is, int hdunum)
    16105{
     
    21110
    22111
     112/*! \fn void SOPHYA::FitsIOHandler::Write(char flnm[])
     113this method is called from inherited objects.
     114
     115for writing a new object in a new fits-extension :
     116
     117\warning By convention, primary header does not contain fits-image data : i.e.
     118all data are fits-extensions. The first relevant header will have hdunum=2.
     119For switching off this convention use the method :
     120
     121firstImageOnPrimaryHeader() (see below)
     122
     123In that case do not forget to precise hdunum=1 when reading data on primary header.
     124
     125calls the method 'WriteToFits' from the inherited  object
     126
     127*/
    23128void FitsIOHandler::Write(char flnm[])
    24129
     
    33138}
    34139
     140
     141/*!
     142  \class SOPHYA::FitsIOHandler
     143Class (virtual) for managing FITS format files
     144*/
    35145
    36146
     
    87197}
    88198
     199/*!
     200  \class SOPHYA::FitsInFile
     201
     202class for saving  SOPHYA objects on FITS Format Files (uses cfitsio lib)
     203*/
     204
    89205FitsInFile::FitsInFile()
    90206{
    91207  InitNull();
    92208}
    93 //FitsInFile::FitsInFile(char flnm[], int hdunum)
     209
    94210FitsInFile::FitsInFile(char flnm[])
    95211{
     
    118234}
    119235
     236//////////////////////////////////////////////////////////
     237//     methods with general purpose
     238/////////////////////////////////////////////////////////
    120239
    121240int FitsInFile::NbBlocks(char flnm[])
     
    200319}
    201320
     321
     322void FitsInFile::ReadFInit(int hdunum)
     323{
     324   InitNull();
     325  // int status = 0;
     326 
     327  //  fits_open_file(&fptr_,flnm,READONLY,&status);
     328  //  if( status ) printerror( status );
     329
     330  int status = 0;
     331
     332  if (hdunum <= 1)
     333    {
     334      hdunum_ = 1;
     335      // presence of image ?
     336      int naxis= 0;
     337      fits_read_key(fptr_,TINT,"NAXIS",&naxis,NULL,&status);
     338      if( status ) printerror( status );
     339      if (naxis > 0 )       // there is an image
     340        {
     341          hdutype_ = IMAGE_HDU;
     342          GetImageParameters (fptr_, bitpix_, naxis_, naxisn_);
     343          nbData_ =  1;
     344          int k;
     345          for (k=0; k<naxis_; k++) if (naxisn_[k] > 0) nbData_ *= naxisn_[k];
     346          KeywordsIntoDVList(fptr_, dvl_,hdunum_);
     347        }
     348      else
     349        {
     350          throw PException(" first header : no image, probably error in hdunum");
     351        }
     352  //
     353    }
     354  else
     355    {
     356      hdunum_ = hdunum-1;
     357      int hdutype;
     358      fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
     359      if( status ) printerror( status,":FitsFile::ReadF : erreur movabs");
     360      moveToFollowingHeader();
     361    }
     362}
     363
     364
    202365void FitsInFile::GetImageParameters (fitsfile* fileptr,int& bitpix,int& naxis,vector<int>& naxisn)
    203366{
     
    230393
    231394
    232 void FitsInFile::ReadFInit(int hdunum)
    233 {
    234    InitNull();
    235   // int status = 0;
    236  
    237   //  fits_open_file(&fptr_,flnm,READONLY,&status);
    238   //  if( status ) printerror( status );
    239 
    240   int status = 0;
    241 
    242   if (hdunum <= 1)
    243     {
    244       hdunum_ = 1;
    245       // presence of image ?
    246       int naxis= 0;
    247       fits_read_key(fptr_,TINT,"NAXIS",&naxis,NULL,&status);
    248       if( status ) printerror( status );
    249       if (naxis > 0 )       // there is an image
    250         {
    251           hdutype_ = IMAGE_HDU;
    252           GetImageParameters (fptr_, bitpix_, naxis_, naxisn_);
    253           nbData_ =  1;
    254           int k;
    255           for (k=0; k<naxis_; k++) if (naxisn_[k] > 0) nbData_ *= naxisn_[k];
    256           KeywordsIntoDVList(fptr_, dvl_,hdunum_);
    257         }
    258       else
    259         {
    260           throw PException(" first header : no image, probably error in hdunum");
    261         }
    262   //
    263     }
    264   else
    265     {
    266       hdunum_ = hdunum-1;
    267       int hdutype;
    268       fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
    269       if( status ) printerror( status,":FitsFile::ReadF : erreur movabs");
    270       moveToFollowingHeader();
    271     }
    272 }
    273 
     395
     396
     397  /*! \fn DVList SOPHYA::FitsInFile::DVListFromPrimaryHeader() const
     398
     399   \return the keywords of primary header in a DVList
     400
     401*/
    274402DVList  FitsInFile::DVListFromPrimaryHeader() const
    275403   {
     
    308436
    309437
     438
     439
     440
     441/*! \fn int  SOPHYA::FitsInFile::NbColsFromFits() const
     442\return number of columns (return 1 if IMAGE)
     443*/
    310444int  FitsInFile::NbColsFromFits() const
    311445{
     
    320454}
    321455
     456/*! \fn  int SOPHYA::FitsInFile::NentriesFromFits(int nocol) const
     457\return number of data in the current IMAGE extension on FITS file, or number
     458 of data of column number 'nocol' of the current BINTABLE extension
     459*/
    322460int FitsInFile::NentriesFromFits(int nocol) const
    323461{
     
    334472}
    335473
     474/*! \fn char SOPHYA::FitsInFile::ColTypeFromFits(int nocol) const
     475
     476return a character denoting data type of column number 'nocol' in a BINTABLE :
     477
     478D : double
     479
     480E : float
     481
     482I : integer
     483   
     484S : character string
     485
     486  */
     487
    336488char FitsInFile::ColTypeFromFits(int nocol) const
    337489{
     
    342494  return types_[nocol];
    343495}
     496
     497
     498/*! \fn string SOPHYA::FitsInFile::ColNameFromFits(int nocol) const
     499
     500\return name of the column number 'nocol' of the current BINTABLE extension
     501   */
     502
    344503string FitsInFile::ColNameFromFits(int nocol) const
    345504{
     
    350509  return noms_[nocol];
    351510}
     511
     512/*! \fn int DSOPHYA::FitsInFile::ColStringLengthFromFits(int nocol) const
     513
     514 \return number of characters of each data  for the column number 'nocol' (if char* typed) of the current BINTABLE extension
     515*/
    352516
    353517int FitsInFile::ColStringLengthFromFits(int nocol) const
     
    365529  return  taille_des_chaines_[index];
    366530}
     531
     532
     533
     534/*! \fn void  SOPHYA::FitsInFile::GetBinTabLine(int NoLine, double* ddata, float* fdata, int* idata, char ** cdata)
     535
     536Get the NoLine-th 'line'  from the current BINTABLE extension on FITS file,
     537  */
     538
    367539void  FitsInFile::GetBinTabLine(int NoLine, double* ddata, float* fdata, int* idata, char ** cdata)
    368540{
     
    405577}
    406578
     579/*! \fn void   SOPHYA::FitsInFile::GetBinTabLine(long NoLine,  BnTblLine& ligne)
     580Get the NoLine-th 'line'  from the current BINTABLE extension on FITS file,
     581*/
    407582void   FitsInFile::GetBinTabLine(long NoLine,  BnTblLine& ligne)
    408583{
     
    447622}
    448623
     624/*! \fn void SOPHYA::FitsInFile::GetBinTabLine(int NoLine, float* fdata)
     625
     626Get the NoLine-th float 'line'  from the current BINTABLE extension on FITS file,
     627*/
    449628void FitsInFile::GetBinTabLine(int NoLine, float* fdata)
    450629{
     
    466645
    467646
     647/*! \fn void SPOPHYA::FitsInFile::GetBinTabFCol(double* valeurs,int nentries, int NoCol) const
     648
     649fill the array 'valeurs' with double data from the current BINTABLE extension on FITS file, from column number 'NoCol'
     650
     651\param <nentries>  number of data to be read
     652*/
    468653void FitsInFile::GetBinTabFCol(double* valeurs,int nentries, int NoCol) const
    469654    {
     
    499684    }
    500685
     686/*! \fn  void SOPHYA::FitsInFile::GetBinTabFCol(float* valeurs,int nentries, int NoCol) const
     687
     688 same as previous method with float data
     689*/
    501690void FitsInFile::GetBinTabFCol(float* valeurs,int nentries, int NoCol) const
    502691    {
     
    531720    }
    532721
     722/*! \fn void SOPHYA::FitsInFile::GetBinTabFCol(int* valeurs,int nentries, int NoCol) const
     723
     724 same as previous method with int data
     725*/
     726
    533727void FitsInFile::GetBinTabFCol(int* valeurs,int nentries, int NoCol) const
    534728    {
     
    561755    }
    562756
     757/*! \fn void SOPHYA::FitsInFile::GetBinTabFCol(char** valeurs, int nentries, int NoCol) const
     758
     759 same as previous method with char* data
     760*/
     761
    563762void FitsInFile::GetBinTabFCol(char** valeurs, int nentries, int NoCol) const
    564763    {
     
    587786    }
    588787
     788/*! \fn void SOPHYA::FitsInFile::GetSingleColumn(double* map, int nentries) const
     789fill the array 'map' with double data from the current extension on FITS file.
     790If the extension is BINTABLE, the first column is provided.
     791
     792\param <nentries>  number of data to be read
     793*/
    589794void FitsInFile::GetSingleColumn(double* map, int nentries) const
    590795{
     
    619824}
    620825
     826/*! \fn void SOPHYA::FitsInFile::GetSingleColumn(float* map, int nentries) const
     827same as above with float data
     828*/
    621829void FitsInFile::GetSingleColumn(float* map, int nentries) const
    622830{
     
    649857}
    650858
     859/*! \fn void SOPHYA::FitsInFile::GetSingleColumn( int* map, int nentries) const
     860 same as above with int data
     861*/
    651862void FitsInFile::GetSingleColumn( int* map, int nentries) const
    652863{
     
    8661077}
    8671078
     1079
     1080/*!
     1081  \class SOPHYA::FitsOutFile
     1082 Class for loading  SOPHYA objects from FITS Format Files (uses cfitsio lib)
     1083*/
     1084
    8681085FitsOutFile::FitsOutFile()
    8691086{
     
    8711088}
    8721089
     1090   /*! \fn SOPHYA::FitsOutFile::FitsOutFile(char flnm[], WriteMode wrm)
     1091
     1092\param <WriteMode>  enum , WriteMode = clear -> if alreadyy exists, the file will be overwritten (else created) ; WriteMode = append -> further objects will be appended to the file if it exists (else : file created). WriteMode = unknown -> file created if does not exist, else : exception. (the last situation is the default)
     1093
     1094   */
    8731095FitsOutFile::FitsOutFile(char flnm[], WriteMode wrm)
    8741096{
     
    9291151
    9301152
     1153/*! \fn void SOPHYA::FitsOutFile::makeHeaderImageOnFits(char type, int nbdim, int* naxisn,  DVList &dvl)
     1154
     1155create an IMAGE header on FITS file.
     1156\param <type> type of data (see method ColTypeFromFits)
     1157\param <nbdim>  number of dimensions : 1D, 2D, 3D etc. = NAXIS
     1158\param <naxisn>  array containind sizes of the different dimensions
     1159*/
    9311160void FitsOutFile::makeHeaderImageOnFits(char type, int nbdim, int* naxisn,  DVList &dvl)
    9321161{
     
    9681197
    9691198}
     1199
     1200
     1201/*! \fn void SOPHYA::FitsOutFile::PutImageToFits(int nbData, double* map) const
     1202
     1203write double data from array 'map'on an IMAGE extension
     1204\param <nbData>  number of data to be written
     1205*/
    9701206void FitsOutFile::PutImageToFits(int nbData, double* map) const
    9711207{
     
    9771213}
    9781214
     1215/*! \fn void SOPHYA::FitsOutFile::PutImageToFits(int nbData, float* map) const
     1216
     1217same as previous method with float data
     1218*/
    9791219void FitsOutFile::PutImageToFits(int nbData, float* map) const
    9801220{
     
    9861226
    9871227}
     1228
     1229  /*! \fn void SOPHYA::FitsOutFile::PutImageToFits( int nbData, int* map) const
     1230
     1231 same as previous method with int data */
    9881232void FitsOutFile::PutImageToFits( int nbData, int* map) const
    9891233{
     
    9981242
    9991243
     1244/*! \fn void SOPHYA::FitsOutFile::makeHeaderBntblOnFits( string fieldType, vector<string> Noms, int nentries, int tfields, DVList &dvl, string extname, vector<int> taille_des_chaines)
     1245
     1246create an BINTABLE header on FITS file.
     1247\param <fieldType> array conta
     1248ining characters denoting types of the different column (see method ColTypeFromFits)
     1249\param <Noms>  array of the names of columns
     1250\param <nentries>  number of data of each column
     1251\param <tfields> number of columns
     1252\param <dvl> a SOPHYA DVList containing keywords to be appended
     1253\param <extname> keyword EXTNAME for FITS file
     1254\param <taille_des_chaines> vector containing the number of characters of  data  for each char* typed column, with order of appearance in 'fieldType'
     1255*/
    10001256void FitsOutFile::makeHeaderBntblOnFits( string fieldType, vector<string> Noms, int nentries, int tfields, DVList &dvl, string extname, vector<int> taille_des_chaines)
    10011257{
     
    10921348}
    10931349
     1350/*! \fn void SOPHYA::FitsOutFile::PutColToFits(int nocol, int nentries, double* donnees) const
     1351
     1352write double data from array 'donnees ' on column number 'nocol' of a BINTABLE  extension.
     1353\param <nentries>  number of data to be written
     1354*/
    10941355void FitsOutFile::PutColToFits(int nocol, int nentries, double* donnees) const
    10951356{
     
    11141375  if( status )  printerror( status,"erreur ecriture du fichier fits" );
    11151376}
     1377
     1378
     1379
     1380  /*! \fn void SOPHYA::FitsOutFile::PutColToFits(int nocol, int nentries, float* donnees) const
     1381
     1382same as previous method with float data
     1383*/
    11161384void FitsOutFile::PutColToFits(int nocol, int nentries, float* donnees) const
    11171385{
     
    11401408  if( status )  printerror( status,"erreur ecriture du fichier fits" );
    11411409}
     1410
     1411
     1412/*! \fn void FitsOutFile::PutColToFits(int nocol, int nentries, int* donnees) const
     1413
     1414same as previous method with int data
     1415*/
    11421416void FitsOutFile::PutColToFits(int nocol, int nentries, int* donnees) const
    11431417{
     
    11661440  if( status )  printerror( status," ecriture du fichier fits" );
    11671441}
     1442
     1443
     1444/*! \fn void SOPHYA::FitsOutFile::PutColToFits(int nocol, int nentries, char** donnees) const
     1445same as previous method with char* data
     1446*/
    11681447void FitsOutFile::PutColToFits(int nocol, int nentries, char** donnees) const
    11691448{
     
    12281507
    12291508
     1509/* \fn void  SOPHYA::FitsOutFile::DVListIntoPrimaryHeader(DVList& dvl) const
     1510
     1511Put keywords from a DVList into the primary header of the fits-file
     1512*/
    12301513void  FitsOutFile::DVListIntoPrimaryHeader(DVList& dvl) const
    12311514{
Note: See TracChangeset for help on using the changeset viewer.