Changeset 1499 in Sophya for trunk/SophyaExt/FitsIOServer


Ignore:
Timestamp:
May 17, 2001, 6:26:45 PM (24 years ago)
Author:
lemeur
Message:

lecture xntuple par blocs et complement de types

Location:
trunk/SophyaExt/FitsIOServer
Files:
2 edited

Legend:

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

    r1418 r1499  
    680680  int ncol;
    681681  long nels=1;
     682  int ligneAsolue = NoLine+1;
    682683  for (ncol=0; ncol<nbcols_; ncol++)
    683684    {
     685      int repetition =repeat_[ncol];
     686      int ligneALire = ligneAsolue/repetition;
     687      int premierElement  = ligneAsolue-ligneALire*repetition;
     688      if (premierElement != 0 )
     689        {
     690          ligneALire++;
     691        }
     692      else premierElement = repetition;
     693
    684694      switch (types_[ncol])
    685695        {
    686696        case FitsDataType_double :
    687           fits_read_col(fptr_,TDOUBLE,ncol+1,NoLine+1,1,1,&dnull,&ddata[dcount++],&anull,&status);
     697          {
     698          fits_read_col(fptr_,TDOUBLE,ncol+1,ligneALire,premierElement,1,&dnull,&ddata[dcount++],&anull,&status);
    688699            break;
    689         case FitsDataType_float :
    690           fits_read_col(fptr_,TFLOAT,ncol+1,NoLine+1,1,1,&fnull,&fdata[fcount++],&anull,&status);
     700          }
     701        case FitsDataType_float :         
     702          fits_read_col(fptr_,TFLOAT,ncol+1,ligneALire,premierElement,1,&fnull,&fdata[fcount++],&anull,&status);
    691703          break;
    692704        case  FitsDataType_int :
    693           fits_read_col(fptr_,TINT,ncol+1,NoLine+1,1,1,&inull,&idata[icount++],
     705          fits_read_col(fptr_,TINT,ncol+1,ligneALire,premierElement,1,&inull,&idata[icount++],
    694706                        &anull,&status);
    695707          break;
     708        case  FitsDataType_long :
     709          fits_read_col(fptr_,TLONG,ncol+1,ligneALire,premierElement,1,&inull,&idata[icount++], &anull,&status);
     710        case  FitsDataType_byte :
     711          {
     712            unsigned char uschar = 0;
     713            fits_read_col(fptr_,TBYTE,ncol+1,ligneALire,premierElement,1,&inull,&uschar, &anull,&status);
     714            idata[icount++] = (int)uschar;
     715          }
     716          break;
    696717        case FitsDataType_char :
    697           fits_read_col(fptr_,TSTRING,ncol+1,NoLine+1,1,1,cnull,&cdata[ccount++],&anull,&status);
     718          fits_read_col(fptr_,TSTRING,ncol+1,ligneALire,premierElement,1,cnull,&cdata[ccount++],&anull,&status);
    698719          break;
    699720        }
     
    15861607      cout << " WARNING : types don't match (PutColToFits) : on fits file= " << code << " to be written= DOUBLE " << endl;
    15871608    }
     1609  //  cout << " 10 elements de colonne " << endl;
     1610  //  for (int toto=0; toto < 10; toto++) cout << donnees[toto] << endl;
    15881611  fits_write_col(fptr_,TDOUBLE,nocol+1,1,1,nentries, donnees ,&status);
    15891612  if( status )  printerror( status,"erreur ecriture du fichier fits" );
  • trunk/SophyaExt/FitsIOServer/fitsxntuple.cc

    r1371 r1499  
    9090      else if (ss == FitsFile::FitsDataType_float) FfitsCol.push_back(k);
    9191      else if (ss == FitsFile::FitsDataType_int) IfitsCol.push_back(k);
     92      else if (ss == FitsFile::FitsDataType_long) IfitsCol.push_back(k);
     93      else if (ss == FitsFile::FitsDataType_byte) IfitsCol.push_back(k);
    9294      else if (ss == FitsFile::FitsDataType_char) SfitsCol.push_back(k);
    9395      else {
     
    122124      ColName[compt++][LONNOM] =  '\0';
    123125    }
    124 
     126  int ND = DfitsCol.size();
     127  int NF = FfitsCol.size();
     128  int NI = IfitsCol.size();
     129  int NS = SfitsCol.size();
    125130  if(dobj_ == NULL)
    126131    {
    127       dobj_= new XNTuple(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(),ColName);
     132      dobj_= new XNTuple(ND, NF, NI, NS,ColName);
    128133      ownobj_ = true;     
    129134    }
     
    132137      if (ownobj_)
    133138        {
    134           (*dobj_)= XNTuple(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(),ColName);
     139          (*dobj_)= XNTuple(ND, NF, NI, NS,ColName);
    135140        }
    136141      else
    137142        {
    138           if (DfitsCol.size() != dobj_->NDVar() || FfitsCol.size() != dobj_->NFVar() ||  IfitsCol.size() != dobj_->NIVar() || SfitsCol.size() != dobj_->NSVar())
     143          if (ND != dobj_->NDVar() || NF != dobj_->NFVar() ||  NI != dobj_->NIVar() || NS != dobj_->NSVar())
    139144            {
    140145              cout << " WARNING : FITS_XNTuple : XNTuple reconfigured " << endl;
    141               (*dobj_)= XNTuple(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), SfitsCol.size(),ColName);
     146              (*dobj_)= XNTuple(ND, NF, NI, NS,ColName);
    142147            }
    143148        }
     
    155160    char** cligne;
    156161
    157   if (DfitsCol.size()>0) dligne = new double[DfitsCol.size()];
     162  if (ND>0) dligne = new double[ND];
    158163  else dligne=NULL;
    159   if (FfitsCol.size()>0) fligne = new float[FfitsCol.size()];
     164  if (NF>0) fligne = new float[NF];
    160165  else fligne=NULL;
    161   if (IfitsCol.size()>0) iligne = new int[IfitsCol.size()];
     166  if (NI) iligne = new int[NI];
    162167  else iligne=NULL;
    163   if (SfitsCol.size()>0)
    164     {
    165       cligne = new char*[SfitsCol.size()];
     168  if (NS)
     169    {
     170      cligne = new char*[NS];
    166171      int  taille_des_chaines=0;
    167       for (k=0; k< SfitsCol.size(); k++)  taille_des_chaines = max( taille_des_chaines, is.ColStringLengthFromFits(SfitsCol[k]) );
    168       for (k=0; k<SfitsCol.size(); k++) cligne[k]=new char[taille_des_chaines+1];
     172      for (k=0; k< NS; k++)  taille_des_chaines = max( taille_des_chaines, is.ColStringLengthFromFits(SfitsCol[k]) );
     173      for (k=0; k<NS; k++) cligne[k]=new char[taille_des_chaines+1];
    169174    }
    170175  else cligne=NULL;
     
    196201void FITS_XNTuple::WriteToFits(FitsOutFile& os)
    197202{
     203
    198204  if(dobj_ == NULL)
    199205    {
     
    206212  // table will have 'nrows' rows
    207213  int nrows = dobj_->NEntry();
     214  cout << " FITS_XNTuple::WriteToFits : nombre de lignes a ecrire " << nrows << endl;
    208215  // get names and values from the join DVList object
    209216  DVList dvl= dobj_->Info();
Note: See TracChangeset for help on using the changeset viewer.