Changeset 2907 in Sophya for trunk/SophyaExt


Ignore:
Timestamp:
Jan 17, 2006, 10:09:29 AM (20 years ago)
Author:
ansari
Message:

debug/check fits : gestion NTuple colonnes double + init hdunum_ ds FitsFile(FitsInOutFile&) + correction gestion TArray/TMatrix/TVector ds fitsarrhand.h - Reza 17/01/2006

Location:
trunk/SophyaExt/FitsIOServer
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaExt/FitsIOServer/fitsarrhand.h

    r2898 r2907  
    8888      if ( dobj == NULL) {
    8989        if (naxis == 1) dobj = new TVector<T>;
    90         else if (naxis == 1) dobj = new TMatrix<T>;
     90        else if (naxis == 2) {
     91          if ( (naxes[0] == 1) || (naxes[1] == 1) ) 
     92            dobj = new TVector<T>; 
     93          else dobj = new TMatrix<T>;
     94        }
    9195        else dobj = new TArray<T>;
    9296        ownobj = true;
  • trunk/SophyaExt/FitsIOServer/fitsfile.cc

    r2898 r2907  
    298298{
    299299  InitNull();
     300  hdunum_ = fios.CurrentHDU();
    300301}
    301302
     
    11451146    {
    11461147      fits_read_col(fptr_,TFLOAT,ncol+1,NoLine+1,1,1,&fnull,&fdata[ncol],&anynul,&status);
     1148      if (status)
     1149        {
     1150          ResetStatus(status);
     1151          break;
     1152        }
     1153    }
     1154}
     1155
     1156/*!
     1157Get the NoLine-th float 'line'  from the current BINTABLE extension on FITS file,
     1158*/
     1159void FitsInFile::GetBinTabLine(int NoLine, double* ddata)
     1160{
     1161  int status= 0;
     1162  int    anynul;
     1163  double dnull= fnull_;
     1164  long nels=1;
     1165  int ncol;
     1166  for (ncol=0; ncol<nbcols_; ncol++)
     1167    {
     1168      fits_read_col(fptr_, TDOUBLE, ncol+1,NoLine+1,1,1,&dnull,&ddata[ncol],&anynul,&status);
    11471169      if (status)
    11481170        {
  • trunk/SophyaExt/FitsIOServer/fitsfile.h

    r2897 r2907  
    285285 void   GetBinTabLine(long NoLine, BnTblLine& ligne) ;
    286286 void   GetBinTabLine(int NoLine, float* fdata) ;
     287 void   GetBinTabLine(int NoLine, double* ddata) ;
    287288 void   GetBinTabFCol(r_8* valeurs, int nentries, int NoCol) const;
    288289 void   GetBinTabFCol(r_4* valeurs, int nentries, int NoCol) const;
  • trunk/SophyaExt/FitsIOServer/fitsntuple.cc

    r2898 r2907  
    104104      ColName[k][LONNOM] =  '\0';
    105105    }
     106  // Reza Dec 2006 : Colonnes du NTuple de type double par defaut
    106107  for (k=0; k<nbcols;k++)
    107108    {
    108109      FitsFile::FitsDataType ss= is.ColTypeFromFits(k);
    109110      string type;
    110       if (ss !=  FitsFile::FitsDataType_float)
     111      if ( (ss !=  FitsFile::FitsDataType_double) && (ss != FitsFile::FitsDataType_float) )
    111112        {
    112           if (ss == FitsFile::FitsDataType_double) type= string("double");
     113          if (ss == FitsFile::FitsDataType_int) type= string("integer");
    113114          else
    114             if (ss == FitsFile::FitsDataType_int) type= string("integer");
     115            if (ss == FitsFile::FitsDataType_char) type = string("char*");
    115116            else
    116               if (ss == FitsFile::FitsDataType_char) type = string("char*");
    117               else
    118                 type = string("unknown");
     117              type = string("unknown");
    119118          cout << " WARNING: the column " << k << " on fits file is not float but : " << type << endl;
    120119        }
    121120    }
     121  bool fgdouble = true;
     122  if ( is.ColTypeFromFits(0) == FitsFile::FitsDataType_float ) fgdouble = false;
    122123  if(dobj_ == NULL)
    123124    {
    124       dobj_= new NTuple(nbcols,ColName);
     125      dobj_= new NTuple(nbcols,ColName,512,fgdouble);
    125126      ownobj_ = true;     
    126127    }
     
    128129    {
    129130      dobj_->Clean();
    130       (*dobj_) = NTuple(nbcols,ColName);
     131      (*dobj_) = NTuple(nbcols,ColName,512,fgdouble);
    131132    }
    132133  for (k=0; k<nbcols;k++)
     
    136137  delete [] ColName;
    137138
    138   float* ligne = new float[nbcols];
     139  // Reza Dec 2006 : Colonnes du NTuple de type double par defaut
     140  double* dligne = NULL;
     141  float* fligne = NULL;
     142  if (fgdouble) dligne = new double[nbcols];
     143  else fligne = new float[nbcols];
    139144
    140145  int firstln, lastln;
     
    150155    }
    151156  int numLigne;
    152   for (numLigne=firstln; numLigne < lastln; numLigne++)
    153     {
    154       is.GetBinTabLine(numLigne, ligne);
    155       dobj_->Fill((r_4*)ligne);
    156     }
    157   delete [] ligne;
     157  if (fgdouble)
     158    for (numLigne=firstln; numLigne < lastln; numLigne++) {
     159      is.GetBinTabLine(numLigne, dligne);
     160      dobj_->Fill((r_8*)dligne);
     161    }
     162  else
     163    for (numLigne=firstln; numLigne < lastln; numLigne++) {
     164      is.GetBinTabLine(numLigne, fligne);
     165      dobj_->Fill((r_4*)fligne);
     166    }
     167 
     168  if (dligne) delete [] dligne;
     169  if (fligne) delete [] fligne;
    158170
    159171  dobj_->Info()=is.DVListFromFits();
     
    191203    }
    192204
    193   string type(ncols, 'E');
    194   vector<int> dummy;
    195 
    196   os.makeHeaderBntblOnFits(type,Noms, nentries, ncols, &dvl, extname, dummy);
    197    float* column =  new float[nentries];
    198    for (k=0; k<ncols;k++)
    199      {
    200        int j;
    201        for(j = 0; j < nentries; j++) column[j]= dobj_->GetVal(j,k);
    202        os.PutColToFits(k, nentries, column);
    203      }
    204    delete [] column;
    205 
    206 }
    207 
     205  // Gestion NTuple en double ou float / Reza Jan 2006
     206  if (dobj_->mFgDouble) {    // NTuple avec colonnes double
     207    string type(ncols, 'D');
     208    vector<int> dummy;
     209   
     210    os.makeHeaderBntblOnFits(type,Noms, nentries, ncols, &dvl, extname, dummy);
     211    double* column =  new double[nentries];
     212    for (k=0; k<ncols;k++)
     213      {
     214        int j;
     215        for(j = 0; j < nentries; j++) column[j]= dobj_->GetCell(j,k);
     216        os.PutColToFits(k, nentries, column);
     217      }
     218    delete [] column;
     219  }
     220  else {   // NTuple avec colonnes float
     221    string type(ncols, 'E');
     222    vector<int> dummy;
     223   
     224    os.makeHeaderBntblOnFits(type,Noms, nentries, ncols, &dvl, extname, dummy);
     225    float* column =  new float[nentries];
     226    for (k=0; k<ncols;k++)
     227      {
     228        int j;
     229        for(j = 0; j < nentries; j++) column[j]= dobj_->GetVal(j,k);
     230        os.PutColToFits(k, nentries, column);
     231      }
     232    delete [] column;
     233  }
     234}
     235
Note: See TracChangeset for help on using the changeset viewer.