Index: /trunk/ArchTOIPipe/Kernel/fitstoirdr.cc
===================================================================
--- /trunk/ArchTOIPipe/Kernel/fitstoirdr.cc	(revision 2057)
+++ /trunk/ArchTOIPipe/Kernel/fitstoirdr.cc	(revision 2058)
@@ -3,5 +3,5 @@
 //                               Christophe Magneville
 //                               Reza Ansari
-// $Id: fitstoirdr.cc,v 1.29 2002-06-03 14:23:39 ansari Exp $
+// $Id: fitstoirdr.cc,v 1.30 2002-06-18 12:21:08 ansari Exp $
 
 #include "fitstoirdr.h"
@@ -22,4 +22,8 @@
   implicitSN = false;
   implicitSNStart = 0;
+
+  // Variables rajoutee pour gerer les fichiers de flag de LevelS Reza 18/6/2002
+  sepFlagfile = false;
+  fptrflg = NULL;
 }
 
@@ -63,5 +67,5 @@
     fits_report_error(stderr, fstatus);
     fits_unlock();
-    throw IOExc("fitsio error");
+    throw IOExc("FITSTOIReader::openFile() fitsio error");
   }
   
@@ -89,8 +93,39 @@
     firstSn = (int) (y+.1);
   }
+
+  // Ouverture fichier de flag separe  de LevelS (Reza 18/6/2002)
+  if (sepFlagfile) {
+    fits_open_file(&fptrflg,sepFlagFileName.c_str(),READONLY,&fstatus);
+    if (fstatus != 0) {
+      fits_report_error(stderr, fstatus);
+      fits_unlock();
+      throw IOExc("FITSTOIReader::openFile() - sepFlagfile open fitsio error");
+    }
+    fits_movabs_hdu(fptrflg, 2, NULL, &fstatus);
+    if (fstatus != 0) {
+      fits_report_error(stderr, fstatus);
+      fits_unlock();
+      throw IOExc("FITSTOIReader::openFile() - sepFlagfile fits_movabs_hdu(2) fitsio error");
+    }
+    long nrowsflg;
+    fits_get_num_rows(fptrflg,&nrowsflg,&fstatus);
+    if (nrows != nrowsflg) {
+      cerr << " FITSTOIReader::openFile()/Error: Different NRows in flag and data files!" << endl;
+      fits_unlock();
+      throw ParmError("FITSTOIReader::openFile() Different NRows in flag and data files");
+    }
+  }
+  // 
   fits_unlock();  
 }
 
 void FITSTOIReader::init() {
+
+  // Modif pour fichiers de flag separe de LevelS (Reza 18/6/2002)
+  if (sepFlagfile && (allfn.size() > 1) ) {
+    cerr << "FITSTOIReader::init()/Error- Multiple files and separate flag file not allowed !"<<endl;
+    throw ParmError("FITSTOIReader::init() Multiple files and separate flag file not allowed");
+  }
+
   openFile(allfn.front());
 
@@ -148,4 +183,16 @@
 }
 
+void FITSTOIReader::setFlagFile(string fn, vector<FlagToiDef> flags)
+{
+  if (flags.size() < 1) {
+    cerr << " FITSTOIReader::setFlagFile()/Error flag.size() = 0 ! " << endl;
+    throw ParmError("FITSTOIReader::setFlagFile() flag.size() = 0");
+  }
+
+  sepFlagfile = true;
+  sepFlagFileName = fn;
+  sepFlagCols =  flags;
+}
+
 void FITSTOIReader::run() {
   for (vector<string>::iterator i=allfn.begin(); i!=allfn.end(); i++) {
@@ -154,4 +201,14 @@
     else run1();              // Lecture un echantillon a la fois
   }
+  fits_lock();
+  if (fptr) {
+    fits_close_file(fptr,&fstatus);
+    fptr = NULL;
+  }
+  if (sepFlagfile && fptrflg) {
+    fits_close_file(fptrflg,&fstatus);
+    fptrflg = NULL;
+  }
+  fits_unlock();
 }
 
@@ -198,4 +255,14 @@
 	fits_read_col_lng(fptr,j+2,i+1,1,1,0,&flg,&anyNul,&fstatus);
       }
+
+      if (sepFlagfile) { // Ajout Reza (18/6/2002) pour fichier de flags separe
+	int sflg;
+	flg = 0;
+	for(int skf=0; skf<sepFlagCols.size(); skf++) {
+	  fits_read_col_int(fptrflg, skf+1, i+1,1,1,0,&sflg,&anyNul,&fstatus);
+	  if (sflg) flg |= sepFlagCols[skf];
+	}
+      }  // Fin modif pour fichier de flags separe (18/6/2002)
+
       tabflag[k] = flg;
       //      fits_unlock();
@@ -237,4 +304,10 @@
  }
  uint_8 * tmpflg = new uint_8[Buff_Sz];
+
+ // Ajout Reza (18/6/2002) pour fichier de flags separe
+ int* stmpflg = NULL; 
+ if (sepFlagfile) stmpflg = new int[Buff_Sz];
+ // Fin modif pour fichier de flags separe (18/6/2002)
+ 
 
  TOIManager* mgr = TOIManager::getManager();
@@ -286,4 +359,16 @@
        if(colflg[k]==NULL)  continue;
        fits_read_col_lng(fptr,j+2,ideb+1,1,n,0,colflg[k],&anyNul,&fstatus);
+       // Ajout Reza (18/6/2002) pour fichier de flags separe
+       if (sepFlagfile) { 
+	 uint_8 sflg = 0;
+	 int sjj;
+	 for(sjj=0; sjj<n; sjj++) colflg[k][sjj] = 0;
+	 for(int skf=0; skf<sepFlagCols.size(); skf++) {
+ 	   fits_read_col_int(fptrflg, skf+1, ideb+1,1,n,0,stmpflg,&anyNul,&fstatus);
+	   for(sjj=0; sjj<n; sjj++) 
+	     if (stmpflg) colflg[k][sjj] |= sepFlagCols[skf];
+	 }
+       }  // Fin modif pour fichier de flags separe (18/6/2002)
+
      }
      if(fstatus!=0) {
@@ -316,4 +401,5 @@
  delete [] samplenum;
  delete [] tmpflg;
+ if (sepFlagfile) delete [] stmpflg;
  {for(int k=0; k<getNOut(); k++) {
    if(colval[k]!=NULL) delete [] colval[k];
Index: /trunk/ArchTOIPipe/Kernel/fitstoirdr.h
===================================================================
--- /trunk/ArchTOIPipe/Kernel/fitstoirdr.h	(revision 2057)
+++ /trunk/ArchTOIPipe/Kernel/fitstoirdr.h	(revision 2058)
@@ -5,5 +5,5 @@
 //                               Christophe Magneville
 //                               Reza Ansari
-// $Id: fitstoirdr.h,v 1.11 2002-05-13 13:11:32 ansari Exp $
+// $Id: fitstoirdr.h,v 1.12 2002-06-18 12:21:08 ansari Exp $
 
 
@@ -17,5 +17,5 @@
 #include <map>
 #include "fitsio.h"
-
+#include "flagtoidef.h"
 
 class FITSTOIReader : public TOIProcessor {
@@ -30,4 +30,11 @@
 
   virtual void addFile(string fn);
+
+  // Methode rajoutee pour gerer les fichiers de flag de LevelS 
+  // Reza 18/6/2002 
+  // fn : Nom du fichier FITS, 
+  // flags: Indique le nombre de colonne et la correspondence avec les
+  // flags d'ArchTOIPipe flags[0..N-1] ---> 1ere...Neme colonnes
+  virtual void setFlagFile(string fn, vector<FlagToiDef> flags); 
 
   virtual void init();  
@@ -65,4 +72,10 @@
   int_8 totnscount;   // Nombre total d'echantillon processe
 
+  // Variables rajoutee pour gerer les fichiers de flag de LevelS (Reza 18/6/2002)
+  bool sepFlagfile;
+  string sepFlagFileName;
+  vector<FlagToiDef> sepFlagCols;
+  fitsfile* fptrflg;
+
 };
 
Index: /trunk/ArchTOIPipe/ProcWSophya/toi2map.cc
===================================================================
--- /trunk/ArchTOIPipe/ProcWSophya/toi2map.cc	(revision 2057)
+++ /trunk/ArchTOIPipe/ProcWSophya/toi2map.cc	(revision 2058)
@@ -3,5 +3,5 @@
 //                               Christophe Magneville
 //                               Reza Ansari
-// $Id: toi2map.cc,v 1.26 2002-06-11 17:14:25 ansari Exp $
+// $Id: toi2map.cc,v 1.27 2002-06-18 12:21:08 ansari Exp $
 
 #include "machdefs.h"
@@ -20,4 +20,5 @@
  SetCoorIn();
  SetCoorMap();
+ SetCalibrationFactor();
  SetTestFlag();
  SetTestMin();
@@ -195,5 +196,5 @@
   int_4 ipix = mMap->PixIndexSph(theta,phi);
   if ((ipix < 0) || (ipix >= mMap->NbPixels()) ) continue;
-  (*mMap)(ipix) += bolo;    
+  (*mMap)(ipix) += bolo*mCalibFactor;    
   ((*mWMap)(ipix)) += 1;
   mNSnFill++;
Index: /trunk/ArchTOIPipe/ProcWSophya/toi2map.h
===================================================================
--- /trunk/ArchTOIPipe/ProcWSophya/toi2map.h	(revision 2057)
+++ /trunk/ArchTOIPipe/ProcWSophya/toi2map.h	(revision 2058)
@@ -5,5 +5,5 @@
 //                               Christophe Magneville
 //                               Reza Ansari
-// $Id: toi2map.h,v 1.15 2002-05-16 20:39:53 ansari Exp $
+// $Id: toi2map.h,v 1.16 2002-06-18 12:21:09 ansari Exp $
 
 #ifndef TOI2MAP_H
@@ -58,4 +58,10 @@
               {mTypCoorMap = DecodeTypAstro(ctype);}
 
+  // Facteur de calibration 
+  inline void SetCalibrationFactor(double fac = 1.) 
+              { mCalibFactor = fac; }
+  inline double GetCalibrationFactor()
+              {	return 	mCalibFactor; }
+     
   // Test on flag value ? if yes, BAD sample have flag matching mBadFlag
   inline void SetTestFlag(bool tflg=false, uint_8 badflg=FlgToiAll)
@@ -81,4 +87,5 @@
   double mActualYear;
 
+  double mCalibFactor;
   bool mTFlag,mTMin,mTMax;
   uint_8 mBadFlag;
Index: /trunk/ArchTOIPipe/TestPipes/toistat.cc
===================================================================
--- /trunk/ArchTOIPipe/TestPipes/toistat.cc	(revision 2057)
+++ /trunk/ArchTOIPipe/TestPipes/toistat.cc	(revision 2058)
@@ -45,5 +45,5 @@
     cout << "\n Usage : toistat [-intoi toiname] [-start snb] [-end sne] \n" 
 	 << "         [-wtoi sz] [-wclean wsz,nbw] [-range min,max] [-cleannsig nsig] \n"
-	 << "         [-outppf] [-noprstat] [-useseqbuff] \n"
+	 << "         [-sepflg sepFlagFile] [-outppf] [-noprstat] [-useseqbuff] \n"
 	 << "         inFitsName outFileName \n" 
 	 << "   -start snb : sets the start sample num \n"
@@ -52,4 +52,5 @@
 	 << "              default= -16000,16000\n"
 	 << "   -intoi toiName : select input TOI name (def bolo)\n"
+	 << "   -sepflg sepFlagFileName: sets separate flag file (Level2)\n" 
 	 << "   -wtoi sz : sets TOISeqBuff buffer size (def= 8192)\n"
 	 << "   -wclean wsz,nbw : sets cleaner window parameters (256,5) \n"
@@ -90,4 +91,8 @@
   int clean_nbw = 5;
   double clean_nsig = 999999.;
+
+// Fichier de flag separe / Level2 / Reza 18/6/2002
+  string sepflagfile;   
+  bool sepflg = false;  
 
   // File names 
@@ -130,4 +135,9 @@
       intoi = arg[ia+1]; ia++;
     }    
+    else if (strcmp(arg[ia],"-sepflg") == 0) {
+      if (ia == narg-1) Usage(true);  
+      sepflagfile = arg[ia+1]; 
+      sepflg = true; ia++;
+    }    
     else if (strcmp(arg[ia],"-outppf") == 0)  fgoutppf = true;
 
@@ -166,4 +176,12 @@
     cout << "> Creating FITSTOIReader object - InFile=" << infile << endl;
     FITSTOIReader r(infile); 
+    if (sepflg) {
+      cout << " Setting separate flag file for InTOI_bolo File=" << sepflagfile 
+	   << " (Flags=FlgToiSpike, FlgToiSource)" << endl;
+      vector<FlagToiDef> flgcol;
+      flgcol.push_back(FlgToiSpike);
+      flgcol.push_back(FlgToiSource);
+      r.setFlagFile(sepflagfile, flgcol);
+    }
 
     cout << "> Creating SimpleCleaner() " << endl;
Index: /trunk/ArchTOIPipe/TestPipes/tsttoi2map.cc
===================================================================
--- /trunk/ArchTOIPipe/TestPipes/tsttoi2map.cc	(revision 2057)
+++ /trunk/ArchTOIPipe/TestPipes/tsttoi2map.cc	(revision 2058)
@@ -27,5 +27,5 @@
      <<"           [-a label_coord1] [-d label_coord2] [-b label_bolomuv]"<<endl
      <<"           [-n nlat] [-i c,h] [-o c,h]"<<endl
-     <<"           [-m vmin] [-M vmax] [-f flag]"<<endl
+     <<"           [-m vmin] [-M vmax] [-f flag] [-F sepFlagFileName]"<<endl
      <<"           fitsin_point fitsin_bolo fitsphout [fitsphwout]"<<endl
      <<" -p lp : print level (def=0)"<<endl
@@ -44,5 +44,8 @@
      <<" -f flag : samples are bad if match flag"<<endl
      <<" -N nbfiles : Number of fitsin_point files fitsin_point%d.fits 0..nb-1"<<endl
+     <<" -c calibcoeff : Coefficient de calibration a appliquer (def=1.)"<<endl
      <<" -I : sampleNum are implicit in fits files (def=no)"<<endl
+     <<" -F sepFlagFileName : separate flag file name for levelS"<<endl
+     <<"                      (FlagColName: Glitch PtSrc)"<<endl
      <<" fitsin_point : fits file for pointing"<<endl
      <<" fitsin_bolo : fits file for bolo values"<<endl
@@ -70,6 +73,10 @@
 bool fgprstat = true;
 int nbpointfiles = 0;
+double coeffcalib = 1.;
+string sepflagfile;   // Fichier de flag separe / Level2 / Reza 18/6/2002
+bool sepflg = false;  //   "     "     "      "       "       "       "
+
 int c;
-while((c = getopt(narg,arg,"hIp:s:w:a:d:b:n:i:o:m:M:f:e:N:")) != -1) {
+while((c = getopt(narg,arg,"hIp:s:w:a:d:b:n:i:o:m:M:f:e:N:c:F:")) != -1) {
   switch (c) {
   case 's' :
@@ -125,6 +132,13 @@
     nbpointfiles = atoi(optarg);
     break;
+  case 'c' :
+    coeffcalib = atof(optarg);
+    break;
   case 'I' :
     snimplicit = true;
+    break;
+  case 'F' :
+    sepflagfile = optarg;
+    sepflg = true;
     break;
   case 'h' :
@@ -154,5 +168,6 @@
     <<"  ...... ctype="<<tcoormap<<endl;
 cout<<"Equinoxe "<<equi<<" years"<<endl;
-
+cout<<"CoeffCalib "<<coeffcalib<<endl;
+ 
 SophyaInit();
 InitTim();
@@ -170,4 +185,15 @@
  if(ncolb<1) exit(-4);
 
+
+ sepflagfile = optarg;
+ sepflg = true;
+ if (sepflg) {
+   cout << " Setting separate flag file for InTOI_bolo File=" << sepflagfile 
+	<< " (Flags=FlgToiSpike, FlgToiSource)" << endl;
+   vector<FlagToiDef> flgcol;
+   flgcol.push_back(FlgToiSpike);
+   flgcol.push_back(FlgToiSource);
+   rfitsb.setFlagFile(sepflagfile, flgcol);
+ }
  string pointfileI = fitsin_point;
  MuTyV numf=0;
@@ -212,4 +238,5 @@
  toi2m.SetTestMin(tmin,vmin);
  toi2m.SetTestMax(tmax,vmax);
+ toi2m.SetCalibrationFactor(coeffcalib);
  toi2m.Print(cout);
 
