Ignore:
Timestamp:
Jun 18, 2002, 2:21:09 PM (23 years ago)
Author:
ansari
Message:

Ajout methode FITSTOIReader::setFlagFile() pour fichiers flag separes
de Level2 - Reza 18/6/2002

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ArchTOIPipe/Kernel/fitstoirdr.cc

    r2041 r2058  
    33//                               Christophe Magneville
    44//                               Reza Ansari
    5 // $Id: fitstoirdr.cc,v 1.29 2002-06-03 14:23:39 ansari Exp $
     5// $Id: fitstoirdr.cc,v 1.30 2002-06-18 12:21:08 ansari Exp $
    66
    77#include "fitstoirdr.h"
     
    2222  implicitSN = false;
    2323  implicitSNStart = 0;
     24
     25  // Variables rajoutee pour gerer les fichiers de flag de LevelS Reza 18/6/2002
     26  sepFlagfile = false;
     27  fptrflg = NULL;
    2428}
    2529
     
    6367    fits_report_error(stderr, fstatus);
    6468    fits_unlock();
    65     throw IOExc("fitsio error");
     69    throw IOExc("FITSTOIReader::openFile() fitsio error");
    6670  }
    6771 
     
    8993    firstSn = (int) (y+.1);
    9094  }
     95
     96  // Ouverture fichier de flag separe  de LevelS (Reza 18/6/2002)
     97  if (sepFlagfile) {
     98    fits_open_file(&fptrflg,sepFlagFileName.c_str(),READONLY,&fstatus);
     99    if (fstatus != 0) {
     100      fits_report_error(stderr, fstatus);
     101      fits_unlock();
     102      throw IOExc("FITSTOIReader::openFile() - sepFlagfile open fitsio error");
     103    }
     104    fits_movabs_hdu(fptrflg, 2, NULL, &fstatus);
     105    if (fstatus != 0) {
     106      fits_report_error(stderr, fstatus);
     107      fits_unlock();
     108      throw IOExc("FITSTOIReader::openFile() - sepFlagfile fits_movabs_hdu(2) fitsio error");
     109    }
     110    long nrowsflg;
     111    fits_get_num_rows(fptrflg,&nrowsflg,&fstatus);
     112    if (nrows != nrowsflg) {
     113      cerr << " FITSTOIReader::openFile()/Error: Different NRows in flag and data files!" << endl;
     114      fits_unlock();
     115      throw ParmError("FITSTOIReader::openFile() Different NRows in flag and data files");
     116    }
     117  }
     118  //
    91119  fits_unlock(); 
    92120}
    93121
    94122void FITSTOIReader::init() {
     123
     124  // Modif pour fichiers de flag separe de LevelS (Reza 18/6/2002)
     125  if (sepFlagfile && (allfn.size() > 1) ) {
     126    cerr << "FITSTOIReader::init()/Error- Multiple files and separate flag file not allowed !"<<endl;
     127    throw ParmError("FITSTOIReader::init() Multiple files and separate flag file not allowed");
     128  }
     129
    95130  openFile(allfn.front());
    96131
     
    148183}
    149184
     185void FITSTOIReader::setFlagFile(string fn, vector<FlagToiDef> flags)
     186{
     187  if (flags.size() < 1) {
     188    cerr << " FITSTOIReader::setFlagFile()/Error flag.size() = 0 ! " << endl;
     189    throw ParmError("FITSTOIReader::setFlagFile() flag.size() = 0");
     190  }
     191
     192  sepFlagfile = true;
     193  sepFlagFileName = fn;
     194  sepFlagCols =  flags;
     195}
     196
    150197void FITSTOIReader::run() {
    151198  for (vector<string>::iterator i=allfn.begin(); i!=allfn.end(); i++) {
     
    154201    else run1();              // Lecture un echantillon a la fois
    155202  }
     203  fits_lock();
     204  if (fptr) {
     205    fits_close_file(fptr,&fstatus);
     206    fptr = NULL;
     207  }
     208  if (sepFlagfile && fptrflg) {
     209    fits_close_file(fptrflg,&fstatus);
     210    fptrflg = NULL;
     211  }
     212  fits_unlock();
    156213}
    157214
     
    198255        fits_read_col_lng(fptr,j+2,i+1,1,1,0,&flg,&anyNul,&fstatus);
    199256      }
     257
     258      if (sepFlagfile) { // Ajout Reza (18/6/2002) pour fichier de flags separe
     259        int sflg;
     260        flg = 0;
     261        for(int skf=0; skf<sepFlagCols.size(); skf++) {
     262          fits_read_col_int(fptrflg, skf+1, i+1,1,1,0,&sflg,&anyNul,&fstatus);
     263          if (sflg) flg |= sepFlagCols[skf];
     264        }
     265      }  // Fin modif pour fichier de flags separe (18/6/2002)
     266
    200267      tabflag[k] = flg;
    201268      //      fits_unlock();
     
    237304 }
    238305 uint_8 * tmpflg = new uint_8[Buff_Sz];
     306
     307 // Ajout Reza (18/6/2002) pour fichier de flags separe
     308 int* stmpflg = NULL;
     309 if (sepFlagfile) stmpflg = new int[Buff_Sz];
     310 // Fin modif pour fichier de flags separe (18/6/2002)
     311 
    239312
    240313 TOIManager* mgr = TOIManager::getManager();
     
    286359       if(colflg[k]==NULL)  continue;
    287360       fits_read_col_lng(fptr,j+2,ideb+1,1,n,0,colflg[k],&anyNul,&fstatus);
     361       // Ajout Reza (18/6/2002) pour fichier de flags separe
     362       if (sepFlagfile) {
     363         uint_8 sflg = 0;
     364         int sjj;
     365         for(sjj=0; sjj<n; sjj++) colflg[k][sjj] = 0;
     366         for(int skf=0; skf<sepFlagCols.size(); skf++) {
     367           fits_read_col_int(fptrflg, skf+1, ideb+1,1,n,0,stmpflg,&anyNul,&fstatus);
     368           for(sjj=0; sjj<n; sjj++)
     369             if (stmpflg) colflg[k][sjj] |= sepFlagCols[skf];
     370         }
     371       }  // Fin modif pour fichier de flags separe (18/6/2002)
     372
    288373     }
    289374     if(fstatus!=0) {
     
    316401 delete [] samplenum;
    317402 delete [] tmpflg;
     403 if (sepFlagfile) delete [] stmpflg;
    318404 {for(int k=0; k<getNOut(); k++) {
    319405   if(colval[k]!=NULL) delete [] colval[k];
Note: See TracChangeset for help on using the changeset viewer.