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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.