Ignore:
Timestamp:
Jun 15, 2000, 12:22:23 PM (25 years ago)
Author:
ansari
Message:

modifs pour introduction lecteur de fits par lignes

File:
1 edited

Legend:

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

    r972 r1047  
    1313{
    1414  dobj_ = new XNTuple;
    15   dcolumn_ = NULL;
    16   fcolumn_ = NULL;
    17   icolumn_ = NULL;
    18   ccolumn_ = NULL;
    19   ownobj=true;
     15  InitNull();
     16  ownobj_ = true;
    2017}
    2118
     
    2320{
    2421  dobj_ = new XNTuple;
    25   dcolumn_ = NULL;
    26   fcolumn_ = NULL;
    27   icolumn_ = NULL;
    28   ccolumn_ = NULL;
    29   ownobj=true;
     22  InitNull();
     23  ownobj_ = true;
    3024
    3125  ReadF(inputfile,hdunum);
     
    3630{
    3731  dobj_ = new XNTuple(obj);
    38   dcolumn_ = NULL;
    39   fcolumn_ = NULL;
    40   icolumn_ = NULL;
    41   ccolumn_ = NULL;
    42   ownobj=true;
     32  InitNull();
     33  ownobj_ = true;
     34}
     35FITS_XNTuple::FITS_XNTuple(XNTuple* obj)
     36{
     37  dobj_ = obj;
     38  InitNull();
     39  ownobj_ = false;
    4340}
    4441FITS_XNTuple::~FITS_XNTuple()
     42{
     43  Clean();
     44}
     45
     46void FITS_XNTuple::Clean()
    4547{
    4648  if (dcolumn_ != NULL) delete [] dcolumn_;
     
    5860          cout << "FITS_XNTuple, destructeur: bizarre, ccolumn non vide, sans objet?" << endl;;         }
    5961    }
    60   if (ownobj && dobj_ != NULL) delete dobj_;
    61 }
     62  if (ownobj_ && dobj_ != NULL) delete dobj_;
     63}
     64
     65void FITS_XNTuple::Read(char inputfile[],int hdunum)
     66{
     67  ReadF(inputfile,hdunum);
     68}
     69
     70void FITS_XNTuple::ReadLines(char inputfile[],int firstLine, int numberOfLines,int hdunum)
     71{
     72  fistLineToBeRead_ = firstLine;
     73  numberOfLinesToBeRead_ = numberOfLines;
     74  ReadF(inputfile,hdunum);
     75  //  return dobj_;
     76}
     77
     78
    6279void FITS_XNTuple::Write(char outputfile[], bool OldFile)
    6380{       
     
    6582}
    6683 
    67 void FITS_XNTuple::ReadFromFits(FitsFile& fn)
     84void FITS_XNTuple::ReadFromFits()
    6885{   
    69   if (!fn.IsFitsTable())
     86  //  if (!fn.IsFitsTable())
     87  if (!IsFitsTable())
    7088    {
    7189      throw PException("ReadFromFits: the fits file seems not to be a bintable nor ASCII table");
    7290    }
    7391  int nbcols, nbentries;
    74   nbcols = fn.NbColsFromFits();
     92  //  nbcols = fn.NbColsFromFits();
     93  nbcols = NbColsFromFits();
    7594  nbentries = 0;
    7695  int k;
    77   for (k=0; k<nbcols; k++) nbentries=max( nbentries, fn.NentriesFromFits(k) );
     96  //  for (k=0; k<nbcols; k++) nbentries=max( nbentries, fn.NentriesFromFits(k) );
     97  for (k=0; k<nbcols; k++) nbentries=max( nbentries, NentriesFromFits(k) );
    7898
    7999  //
     
    91111  for (k=0; k<nbcols;k++)
    92112    {
    93       char ss= fn.ColTypeFromFits(k);
     113      //      char ss= fn.ColTypeFromFits(k);
     114      char ss= ColTypeFromFits(k);
    94115      if (ss == 'D') DfitsCol.push_back(k);
    95116      else if (ss == 'E') FfitsCol.push_back(k);
     
    106127    {
    107128      ColName[compt] = new char[LONNOM+1];
    108       strncpy(ColName[compt], fn.ColNameFromFits(DfitsCol[k]).c_str(), LONNOM);
     129      //      strncpy(ColName[compt], fn.ColNameFromFits(DfitsCol[k]).c_str(), LONNOM);
     130      strncpy(ColName[compt], ColNameFromFits(DfitsCol[k]).c_str(), LONNOM);
    109131      ColName[compt++][ LONNOM] =  '\0';
    110132    }
     
    112134    {
    113135      ColName[compt] = new char[LONNOM+1];
    114       strncpy(ColName[compt], fn.ColNameFromFits(FfitsCol[k]).c_str(), LONNOM);
     136      //      strncpy(ColName[compt], fn.ColNameFromFits(FfitsCol[k]).c_str(), LONNOM);
     137      strncpy(ColName[compt], ColNameFromFits(FfitsCol[k]).c_str(), LONNOM);
    115138      ColName[compt++][ LONNOM] =  '\0';
    116139    }
     
    118141    {
    119142      ColName[compt] = new char[LONNOM+1];
    120       strncpy(ColName[compt], fn.ColNameFromFits(IfitsCol[k]).c_str(), LONNOM);
     143      //      strncpy(ColName[compt], fn.ColNameFromFits(IfitsCol[k]).c_str(), LONNOM);
     144      strncpy(ColName[compt], ColNameFromFits(IfitsCol[k]).c_str(), LONNOM);
    121145      ColName[compt++][ LONNOM] =  '\0';
    122146    }
     
    124148    {
    125149      ColName[compt] = new char[LONNOM+1];
    126       strncpy(ColName[compt], fn.ColNameFromFits(SfitsCol[k]).c_str(), LONNOM);
     150      //      strncpy(ColName[compt], fn.ColNameFromFits(SfitsCol[k]).c_str(), LONNOM);
     151      strncpy(ColName[compt], ColNameFromFits(SfitsCol[k]).c_str(), LONNOM);
    127152      ColName[compt++][LONNOM] =  '\0';
    128153    }
    129 
    130154
    131155  if(dobj_ == NULL)
    132156    {
    133157      dobj_= new XNTuple(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(),ColName);
    134       ownobj= true;     
     158      ownobj_ = true;     
    135159    }
    136160  else
    137161    {
    138       dobj_->clean();
     162      if (ownobj_)
     163        {
    139164      (*dobj_)= XNTuple(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(),ColName);
    140     }
     165        }
     166      else
     167        {
     168        if (DfitsCol.size() != dobj_->NDVar() || FfitsCol.size() != dobj_->NFVar() ||  IfitsCol.size() != dobj_->NIVar() || SfitsCol.size() != dobj_->NSVar())
     169
     170          throw  SzMismatchError("FITS_XNTuple : structure incorrecte du ntuple");
     171        }
     172    }
     173
    141174  for (k=0; k<nbcols;k++)
    142175    {
     
    145178  delete [] ColName;
    146179
    147   // j'initialise le NTuple a zero, pour le dimensionner
    148   // (SetXVal suppose que le ntuple est deja dimensionne)
    149   r_8* dligne;
    150   r_4* fligne;
    151   int_4* iligne;
    152   char** cligne;
    153   if (DfitsCol.size()>0)
    154     {
    155       if (dcolumn_ != NULL) delete [] dcolumn_;
    156       dcolumn_ = new double[nbentries];
    157       dligne = new r_8[DfitsCol.size()];
    158       for (k=0; k<DfitsCol.size(); k++) dligne[k]=0.;
    159     }
     180    r_8* dligne;
     181    r_4* fligne;
     182    int_4* iligne;
     183    char** cligne;
     184
     185  if (DfitsCol.size()>0) dligne = new r_8[DfitsCol.size()];
    160186  else dligne=NULL;
    161   if (FfitsCol.size()>0)
    162     {
    163       if (fcolumn_ != NULL) delete [] fcolumn_;
    164       fcolumn_ = new float[nbentries];
    165       fligne = new r_4[FfitsCol.size()];
    166       for (k=0; k<FfitsCol.size(); k++) fligne[k]=0.;
    167     }
     187  if (FfitsCol.size()>0) fligne = new r_4[FfitsCol.size()];
    168188  else fligne=NULL;
    169   if (IfitsCol.size()>0)
    170     {
    171       if (icolumn_ != NULL) delete [] icolumn_;
    172       icolumn_ = new int[nbentries];
    173       iligne = new int_4[IfitsCol.size()];
    174       for (k=0; k<IfitsCol.size(); k++) iligne[k]=0;
    175     }
     189  if (IfitsCol.size()>0) iligne = new int_4[IfitsCol.size()];
    176190  else iligne=NULL;
    177191  if (SfitsCol.size()>0)
    178192    {
    179       if (ccolumn_ != NULL)
    180         {
    181           for (k=0; k<dobj_->NEntry(); k++) delete [] ccolumn_[k];
    182           delete [] ccolumn_;
    183           ccolumn_ = NULL;
    184         }
    185       ccolumn_ = new char*[nbentries];
     193      cligne = new char*[SfitsCol.size()];
    186194      int  taille_des_chaines=0;
    187       for (k=0; k< SfitsCol.size(); k++)  taille_des_chaines = max( taille_des_chaines, fn.ColStringLengthFromFits(SfitsCol[k]) );
    188       for (k=0; k<nbentries;k++) ccolumn_[k]= new char[taille_des_chaines+1];
    189       cligne = new char*[SfitsCol.size()];
    190       for (k=0; k<SfitsCol.size(); k++) cligne[k]=" ";
     195      //      for (k=0; k< SfitsCol.size(); k++)  taille_des_chaines = max( taille_des_chaines, fn.ColStringLengthFromFits(SfitsCol[k]) );
     196      for (k=0; k< SfitsCol.size(); k++)  taille_des_chaines = max( taille_des_chaines, ColStringLengthFromFits(SfitsCol[k]) );
     197      for (k=0; k<SfitsCol.size(); k++) cligne[k]=new char[taille_des_chaines+1];
    191198    }
    192199  else cligne=NULL;
    193 
    194   for (k=0; k<nbentries;k++) dobj_->Fill(dligne, fligne, iligne, cligne);
    195   delete [] dligne;
    196   delete [] fligne;
    197   delete [] iligne;
    198   for (k=0; k< SfitsCol.size(); k++) delete []  cligne[k];
    199   delete [] cligne;
    200    
    201   compt=0;
    202   for (k=0; k<DfitsCol.size(); k++)
    203     {
    204       fn.GetBinTabFCol(dcolumn_, nbentries, DfitsCol[k]);
    205       for (int nent=0; nent<nbentries; nent++) dobj_->SetDVal(nent,compt, dcolumn_[nent]);
    206       compt++;
    207     }
    208  
    209   for (k=0; k<FfitsCol.size(); k++)
    210     {
    211       fn.GetBinTabFCol(fcolumn_,nbentries, FfitsCol[k]);
    212       for (int nent=0; nent<nbentries; nent++) dobj_->SetFVal(nent,compt, fcolumn_[nent]);
    213       compt++;
    214     }
    215              
    216   for (k=0; k<IfitsCol.size(); k++)
    217     {
    218       fn.GetBinTabFCol(icolumn_,nbentries, IfitsCol[k]);
    219       for (int nent=0; nent<nbentries; nent++) dobj_->SetIVal(nent,compt, icolumn_[nent]);
    220       compt++;
    221     }
    222  
    223   for (k=0; k<SfitsCol.size(); k++)
    224     {
    225       fn.GetBinTabFCol(ccolumn_,nbentries, SfitsCol[k]);
    226             for (int nent=0; nent<nbentries; nent++) dobj_->SetSVal(nent,compt, ccolumn_[nent]);
    227       compt++;
    228     }
    229   dobj_->Info()=fn.DVListFromFits();
    230 
    231 }
    232 void FITS_XNTuple::WriteToFits(FitsFile& fn)
     200  int firstln, lastln;
     201  if (numberOfLinesToBeRead_ > 0)
     202    {
     203      firstln = fistLineToBeRead_;
     204      lastln = firstln + numberOfLinesToBeRead_;
     205    }
     206  else
     207    {
     208      firstln = 0;
     209      lastln  = nbentries;
     210    }
     211  int numLigne;
     212  for (numLigne=firstln; numLigne < lastln; numLigne++)
     213    {
     214      //      fn.GetBinTabLine(numLigne, dligne, fligne, iligne, cligne );
     215      GetBinTabLine(numLigne, dligne, fligne, iligne, cligne );
     216      dobj_->Fill(dligne, fligne, iligne, cligne);   
     217    }
     218    delete [] dligne;
     219    delete [] fligne;
     220    delete [] iligne;
     221    for (k=0; k< SfitsCol.size(); k++) delete []  cligne[k];
     222    delete [] cligne;
     223    //  dobj_->Info()=fn.DVListFromFits();
     224  dobj_->Info()=DVListFromFits();
     225
     226}
     227void FITS_XNTuple::WriteToFits()
    233228{
    234229  if(dobj_ == NULL)
     
    276271  for (k=0; k< StringSizes.size(); k++) StringSizes[k]=dobj_->mStrSz;
    277272  // la librairie fitsio ecrit colonne par colonne
    278     fn.makeHeaderBntblOnFits(types, Noms, nrows, ncols, dvl, extname,StringSizes);
     273  //    fn.makeHeaderBntblOnFits(types, Noms, nrows, ncols, dvl, extname,StringSizes);
     274    makeHeaderBntblOnFits(types, Noms, nrows, ncols, dvl, extname,StringSizes);
    279275   for (k=0; k< ncols; k++)
    280276    {
Note: See TracChangeset for help on using the changeset viewer.