Changeset 1815 in Sophya


Ignore:
Timestamp:
Dec 14, 2001, 7:36:25 PM (24 years ago)
Author:
ansari
Message:

Modif DataCircleFits par Touze - Reza 14/12/01

Location:
trunk
Files:
3 edited

Legend:

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

    r1770 r1815  
    1111, _ICircle(0)
    1212, _mesures(NULL)
    13 ,_stored_data(false)
     13, _stored_data(false)
    1414{;}
    1515
    16 DataCircleFits::DataCircleFits(FitsInFile& is,int hdunum,bool sdata) :
     16DataCircleFits::DataCircleFits(fitsfile *is,int hdunum,bool sdata) :
    1717  _fptr(NULL)
    1818, _NMeasurements(0)
    1919, _ICircle(hdunum)
    2020, _mesures(NULL)
    21 ,_stored_data(sdata)
     21, _stored_data(sdata)
    2222{
    2323
    2424  // pointer to the FITS file
    25   _fptr= &is;
     25  _fptr= is;
     26  int status = 0;
    2627
    2728  // move to the HDU containing a circle
    28   _fptr->ReadHeader(hdunum);
    29 
    30   // reference on a DVList containing the keywords
    31   DVList dvl= _fptr->DVListFromFits();
     29  fits_movabs_hdu(_fptr,hdunum,NULL,&status);
    3230
    3331  // angles of the circle
    34   double theta= dvl.GetD("CIRTHETA");
    35   double phi  = dvl.GetD("CIRPHI");
    36   double aperture= dvl.GetD("CIRAPER");
     32  double theta;
     33  fits_read_key(_fptr,TDOUBLE,"CIRTHETA",&theta,NULL,&status);
     34
     35  double phi;
     36  fits_read_key(_fptr,TDOUBLE,"CIRPHI",&phi,NULL,&status);
     37
     38  double aperture;
     39  fits_read_key(_fptr,TDOUBLE,"CIRAPER",&aperture,NULL,&status);
    3740
    3841  UnitVector temp(theta,phi);
    3942  SetCircle(temp,aperture);
    4043
    41  _NMeasurements= dvl.GetI("NSAMPLES");
     44  fits_read_key(_fptr,TINT,"NSAMPLES",&_NMeasurements,NULL,&status);
    4245
    43  if(_stored_data) {
    44    _mesures= new double[_NMeasurements];
     46  if(_stored_data) {
     47    // vector repeat value for the column (there is only 1 column)
     48    long repeat;
     49    fits_get_coltype(_fptr,1,NULL,&repeat,NULL,&status);
     50
     51    double dnull= 0.;
     52    int    anull;
     53    _mesures= new double[_NMeasurements];
    4554   int i;
    4655   for(i = 0; i < _NMeasurements; i++) {
    47      _fptr->GetBinTabLine(i,&_mesures[i],NULL,NULL,NULL);
     56     // row index: range 1 to NAXIS2
     57     int index= i+1;
     58     
     59     // starting line index
     60     int stline= index/repeat;
     61     int stelem= index-stline*repeat;
     62     if(stelem != 0) {
     63       stline++;
     64     } else {
     65       stelem= repeat;
     66     }
     67     fits_read_col(_fptr,TDOUBLE,1,stline,stelem,1,&dnull,&_mesures[i],&anull,&status);
    4868   }
    49  }
     69  }
    5070}
    51 
     71 
    5272DataCircleFits::~DataCircleFits() {
    5373
     
    6383
    6484  double dtab;
    65   int ibin= (int)floor(psi*_NMeasurements/2./M_PI);
     85  int ibin= nint(psi*_NMeasurements/(2.*M_PI));
     86  //cout << " ibin= " << ibin << ", " << psi << endl;
    6687
    6788  if(_stored_data) {
    6889    dtab= _mesures[ibin];
    6990  } else {
    70     _fptr->ReadHeader(_ICircle);
    71     _fptr->GetBinTabLine(ibin,&dtab,NULL,NULL,NULL);
     91    int status= 0;
     92    fits_movabs_hdu(_fptr,_ICircle,NULL,&status);
     93
     94    // vector repeat value for the column (there is only 1 column)
     95    long repeat;
     96    fits_get_coltype(_fptr,1,NULL,&repeat,NULL,&status);
     97   
     98    double dnull= 0.;
     99    int    anull;
     100
     101    int index= ibin+1;
     102    // starting line index
     103    int stline= index/repeat;
     104    int stelem= index-stline*repeat;
     105    if(stelem != 0) {
     106      stline++;
     107    } else {
     108      stelem= repeat;
     109    }
     110    fits_read_col(_fptr,TDOUBLE,1,stline,stelem,1,&dnull,&dtab,&anull,&status);
    72111  }
    73112  //cout << "DataCircleFits:: bin= " << ibin << ", " << dtab << endl;
     
    81120      << NMeasurements() << endl;
    82121}
     122
     123double DataCircleFits::getTMeasure(double psi) const {
     124
     125  if(_mesures == NULL) {
     126    cout << "  DataCircleFits::getTMeasure data must be stored"
     127         << " in an array... verify the option" << endl;
     128    exit(0);
     129  }
     130  int ibin= nint(psi*_NMeasurements/(2.*M_PI));
     131  return _mesures[ibin];
     132}
     133double DataCircleFits::getTOffset() {
     134
     135  int status= 0;
     136  fits_movabs_hdu(_fptr,_ICircle,NULL,&status);
     137
     138  double omes= 0.0;
     139  fits_read_key_dbl(_fptr,"OFFSET",&omes,NULL,&status);
     140  return omes;
     141}
  • trunk/SophyaExt/FitsIOServer/datacirclefits.h

    r1770 r1815  
    33
    44#include "datacirclebase.h"
    5 #include "fitsfile.h"
     5#include "FitsIO/fitsio.h"
    66
    77class DataCircleFits : public DataCircleBase {
     
    1010
    1111  DataCircleFits();
    12   DataCircleFits(FitsInFile&,int,bool);
     12  DataCircleFits(fitsfile*,int,bool);
    1313  virtual ~DataCircleFits();
    1414
     
    1717  virtual void print(ostream&) const;
    1818
     19  double getTMeasure(double) const;
     20  double getTOffset();
     21
    1922 private:
    2023
    21   FitsInFile* _fptr;
     24  fitsfile* _fptr;
    2225  int _ICircle;
    2326  int _NMeasurements;
  • trunk/SophyaPI/PI/Tests/Makefile

    r1449 r1815  
    11MODULECXXREPNAME := PITest
    22MODULEDECCXXFLAGS := -msg_quiet
    3 include $(EROSDEVREP)/Include/Makefile.h
     3include $(DPCDEVREP)/Include/Makefile.h
    44
    55
     
    1212endif
    1313else
    14 LIBF =  $(SLB)libPIE.so $(SLB)libpeida.so $(SLB)liberosc.so
    15 LIBS = -L$(SLB) -lPIE -lpeida -lerosc -lnr  -lm
     14LIBF =  $(SLB)libPI.so $(SLB)libsophya.so
     15LIBS = -L$(SLB) -lPI -lsophya  -lm
    1616endif
    1717
Note: See TracChangeset for help on using the changeset viewer.