Index: trunk/Poubelle/archTOI.old/archeopsfile.cc
===================================================================
--- trunk/Poubelle/archTOI.old/archeopsfile.cc	(revision 425)
+++ trunk/Poubelle/archTOI.old/archeopsfile.cc	(revision 426)
@@ -867,5 +867,5 @@
 
 
-long ArcheopsFile::getRawBolo(int ibolo, int imesure) {    // donnee brute, avec seulement soustraction offset
+double ArcheopsFile::getRawBolo(int ibolo, int imesure) {    // donnee brute, avec seulement soustraction offset
   int nb_coups,aa;  
   block_type_bolo* blk = imesure >= 0 ? lastBolo() : llastBolo();
@@ -883,5 +883,5 @@
   //cout << s*(((val_DS(ibolo,imesure)-aa)<<1)/nb_coups) << "\n";
 
-  return s*(((val_DS(ibolo,imesure)-aa)<<1)/nb_coups);
+  return s*(((val_DS(ibolo,imesure)-aa)<<1)/double(nb_coups));
 }
 
@@ -1020,9 +1020,9 @@
 }
 
-long ArcheopsFile::getSSTSignalCN(int idiode, int imesure) {
+double ArcheopsFile::getSSTSignalCN(int idiode, int imesure) {
   return getSSTRawSignalCN(SSTHandler::getDiodPermut(idiode),imesure);
 }
 
-long ArcheopsFile::getSSTRawSignalCN(int ichannel, int imesure) {
+double ArcheopsFile::getSSTRawSignalCN(int ichannel, int imesure) {
   // Si pas bloc comprime -> 0
   if (lastSSTComp() == NULL) return 0;
Index: trunk/Poubelle/archTOI.old/archeopsfile.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeopsfile.h	(revision 425)
+++ trunk/Poubelle/archTOI.old/archeopsfile.h	(revision 426)
@@ -130,5 +130,5 @@
   int getBoloBlockNum();
   int getBoloCompBlockNum();
-  long getRawBolo(int ibolo, int imesure);   // donnee brute, avec seulement soustraction offset
+  double getRawBolo(int ibolo, int imesure);   // donnee brute, avec seulement soustraction offset
   double getRawBoloCN(int ibolo, int imesure);  // bruit de compression, sur donnee brute
   double getMuVBoloCN(int ibolo, int imesure);  // bruit de compression, en microVolts
@@ -152,6 +152,6 @@
   long getSSTRawSignal(int iDiode, int imesure);
   long getSSTSignal(int iDiode, int imesure);
-  long getSSTRawSignalCN(int iDiode, int imesure);
-  long getSSTSignalCN(int iDiode, int imesure);
+  double getSSTRawSignalCN(int iDiode, int imesure);
+  double getSSTSignalCN(int iDiode, int imesure);
   double getSSTStarZ(int iStar, int imesure);
   double getSSTStarF(int iStar, int imesure);
Index: trunk/Poubelle/archTOI.old/archtoi.cc
===================================================================
--- trunk/Poubelle/archTOI.old/archtoi.cc	(revision 425)
+++ trunk/Poubelle/archTOI.old/archtoi.cc	(revision 426)
@@ -133,5 +133,5 @@
   cout << "processing" << endl;
   while (iter.Next()) {
-    int nn = iter.getSampleIndex();
+    int nn = iter.getSampleIndex() / iter.getUnderSampling(); // Only for tick mark...
     #ifdef __MWERKS__
     yield();
Index: trunk/Poubelle/archTOI.old/asigps.cc
===================================================================
--- trunk/Poubelle/archTOI.old/asigps.cc	(revision 425)
+++ trunk/Poubelle/archTOI.old/asigps.cc	(revision 426)
@@ -13,6 +13,6 @@
   double omjd=0;
   while (f) {
-    char line[200];
-    f.getline(line,200);
+    char line[500];
+    f.getline(line,500);
     if (!f) break;
     char*p = line;
Index: trunk/Poubelle/archTOI.old/templocator.cc
===================================================================
--- trunk/Poubelle/archTOI.old/templocator.cc	(revision 425)
+++ trunk/Poubelle/archTOI.old/templocator.cc	(revision 426)
@@ -85,6 +85,91 @@
   double azCr1, azCr2;
   int rc = PlGalCross(ts/3600., lat, (90. - 41.), alpG, delG, azCr1, azCr2);
+  if (rc != 0) return; // pas deux points d'intersection
   
+  // Il faut determiner le croisement principal, ie le plus proche
+  // du centre galactique. Pendant le vol de Trapani, c'etait celui
+  // le plus proche de 220° d'azimut.
+  
+  double azCross = azCr1;
+  if (fabs(azCr2-220) < fabs(azCr1-220)) azCross = azCr2;
+  
+  double rotSpeed = 360./(crossings[icross] - crossings[icross-1]); // °/sample
+  
+  azimBolGC = azCross + (sampleNum - crossings[icross-1])*rotSpeed;
+  if (azimBolGC > 360) azimBolGC -= 360;
 }
+
+void TempLocator::getAltAzBolo(int sampleNum, int ibolo, double& elv, double& az) {
+  findGeomFromGC(sampleNum);
+  double delElv = 0;
+  double delAz = 0;  // relative to ch3-bolo6
+  elv = -99999;
+  az  = -99999;
+  switch (ibolo) {
+    case 11:
+      delElv =   0;
+      delAz  =   0.78;
+      break;
+    case 8:
+      delElv =   0.78 * sqrt(3.)/2.;
+      delAz  =   0.78 * 3./2.;
+      break;
+    case 13:
+      delElv = - 0.78 * sqrt(3.)/2.;
+      delAz  =   0.78 * 3./2.;
+      break;
+    case 9:
+      delElv =   0.78 * sqrt(3.)/2.;
+      delAz  =   0.78 * 1./2.;
+      break;
+    case 4:
+      delElv =   0.;
+      delAz  =   0.78 * 2.;
+      break;
+    case 15:
+      delElv =   0.;
+      delAz  =   0.;
+      break;
+    default:
+      return;
+  }
+  delAz /= cos(41 * M_PI/180);
+  elv = 41. + delElv;
+  az  = azimBolGC + delAz;
+  return;
+}
+
+double TempLocator::getAzimutBolo(int sampleNum, int ibolo) {
+  double elv, az;
+  getAltAzBolo(sampleNum, ibolo, elv, az);
+  return az;
+}
+
+double TempLocator::getElvBolo(int sampleNum, int ibolo) {
+  double elv, az;
+  getAltAzBolo(sampleNum, ibolo, elv, az);
+  return elv;
+}
+
+double TempLocator::getAlphaBolo(int sampleNum, int ibolo) {
+  double elv, az;
+  getAltAzBolo(sampleNum, ibolo, elv, az);
+  double ha;
+  aa_hadec (lat * M_PI/180, elv * M_PI/180, az * M_PI/180, &ha, &dec);
+  ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
+  dec = dec * 180. / M_PI;
+  return ra;
+}
+
+double TempLocator::getDeltaBolo(int sampleNum, int ibolo) {
+  double elv, az;
+  getAltAzBolo(sampleNum, ibolo, elv, az);
+  double ha;
+  aa_hadec (lat * M_PI/180, elv * M_PI/180, az * M_PI/180, &ha, &dec);
+  ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
+  dec = dec * 180. / M_PI;
+  return dec;
+}
+
 
 
Index: trunk/Poubelle/archTOI.old/templocator.h
===================================================================
--- trunk/Poubelle/archTOI.old/templocator.h	(revision 425)
+++ trunk/Poubelle/archTOI.old/templocator.h	(revision 426)
@@ -19,4 +19,6 @@
   double getAlphaBolo(int sampleNum, int ibolo);
   double getDeltaBolo(int sampleNum, int ibolo);
+  
+  void getAltAzBolo(int sampleNum, int ibolo, double& elv, double& az);
 
 protected:
Index: trunk/Poubelle/archTOI.old/toiiter.cc
===================================================================
--- trunk/Poubelle/archTOI.old/toiiter.cc	(revision 425)
+++ trunk/Poubelle/archTOI.old/toiiter.cc	(revision 426)
@@ -52,4 +52,6 @@
  
  initDone = false;
+ 
+ underSample = 1;
 }
 
@@ -87,4 +89,5 @@
   
   initDone = x.initDone;
+  underSample = x.underSample;
 }
 
@@ -238,5 +241,5 @@
         trigMask |= block_gps_mask;
         break;
-      case azimut:
+      case azimutBolo:
         trigMask |= block_bolo_mask;
         //file->needSSTProcessMask(SSTHandler::findPeriod);
@@ -353,6 +356,11 @@
 }
 
-
 bool TOIIter::Next() {
+  for (int ii=0; ii<underSample; ii++)
+    if (!Next1()) return false;
+  return true;
+}
+
+bool TOIIter::Next1() {
   if (!initDone) Init();
   while (1) {
@@ -484,13 +492,13 @@
    case tsid:
      return file->hasGPSPos();
-   case azimut:
+   case azimutBolo:
    case alphaAxis:
    case deltaAxis:
+   case alphaBolo:
+   case deltaBolo:
      return true;
      //return (file->lastGPS() != NULL && file->lastSST() != NULL);
    case alphaSst:
    case deltaSst:
-   case alphaBolo:
-   case deltaBolo:
      return false;
      
@@ -589,7 +597,9 @@
      tSid.setLongitude(file->getGPSLong());
      return tSid.getLST(getMJD());
-   case azimut:
+   case azimutBolo:
    case alphaAxis:
-   case deltaAxis: {
+   case deltaAxis: 
+   case alphaBolo:
+   case deltaBolo: {
         double lat, lon;
         if (auxGPS) {
@@ -606,4 +616,7 @@
         if ((kind) == alphaAxis) return tempLocator.getAlphaZenith();
         if ((kind) == deltaAxis) return tempLocator.getDeltaZenith();
+        if ((kind) == azimutBolo) return tempLocator.getAzimutBolo(getSampleIndex(),index);
+        if ((kind) == alphaBolo) return tempLocator.getAlphaBolo(getSampleIndex(),index);
+        if ((kind) == deltaBolo) return tempLocator.getDeltaBolo(getSampleIndex(),index);
         return 0;
      }
@@ -668,5 +681,7 @@
      case altitude:
        return file->blockNum() == file->getGPSBlockNum() && imes==0;
-     case azimut:
+     case azimutBolo:
+     case alphaBolo:
+     case deltaBolo:
        return true; // $CHECK$ with SSTHandler
      case alphaAxis:
@@ -726,4 +741,8 @@
 }
  
+int TOIIter::getUnderSampling() {
+  return underSample;
+}
+
 int TOIIter::getSampleIndex() {
   if (!initDone) Init();
Index: trunk/Poubelle/archTOI.old/toiiter.h
===================================================================
--- trunk/Poubelle/archTOI.old/toiiter.h	(revision 425)
+++ trunk/Poubelle/archTOI.old/toiiter.h	(revision 426)
@@ -47,5 +47,5 @@
   altitude,      // position ballon, m
   tsid,          // temps sideral en secondes
-  azimut,        // azimut centre optique ??? 
+  azimutBolo,    // azimut 
   alphaAxis,     // 
   deltaAxis,     //
@@ -79,4 +79,5 @@
    int    getBlockSampleIndex();        // numero d''echantillon dans dernier bloc bolo
    int    getSampleIndex();             // numero d''echantillon 
+   int    getUnderSampling();           
    double getMJD();            
 
@@ -103,4 +104,5 @@
    void ScanFiles(); // Parcourt tous les fichiers, cherche le premier echantillon...
    
+   bool Next1();
    bool NextSample(); // no test of trange
    bool NextFile();
@@ -147,4 +149,6 @@
    TSid tSid;
    
+   int underSample;
+   
    private:
    bool initDone;
Index: trunk/Poubelle/archTOI.old/toisvr.cc
===================================================================
--- trunk/Poubelle/archTOI.old/toisvr.cc	(revision 425)
+++ trunk/Poubelle/archTOI.old/toisvr.cc	(revision 426)
@@ -40,4 +40,10 @@
   if (tEnd>0)   iter.tEnd = tEnd;
 }
+
+void TOISvr::setUnderSample(int n) {
+  if (n<=1) n=1;
+  iter.underSample = n;
+}
+
   
 void TOISvr::addInfo(TOIKind kind, int index, bool triggering, bool interp) {
@@ -133,5 +139,5 @@
     else tsttoi(altitude)
     else tsttoi(tsid)
-    else tsttoi(azimut)
+    else tsttoi(azimutBolo)
     else tsttoi(alphaAxis)
     else tsttoi(deltaAxis)
@@ -198,4 +204,6 @@
   } else if (key == "#FILE") {
     addFile(arg);
+  } else if (key == "#UNDERSAMPLE") {
+    setUnderSample(atoi(arg.c_str()));
   } else if (key == "#RECORDER") {
     onBoardRecorderFiles(true);
@@ -228,9 +236,14 @@
   processRequest("#PERECH 0.005836818076");
   processRequest("#ASIGPS ASI_GPS_archeops1999.ascii");
+  processRequest("#COMMENT Archtoi -- 23 september 1999 -- Eric Aubourg CEA/DAPNIA");
   processRequest("#COMMENT ***WARNING***");
   processRequest("#COMMENT ***SOME TOI'S ARE PRELIMINARY***");
   processRequest("#COMMENT gyroSpeed is not calibrated");
-  processRequest("#COMMENT azimut/alpha/delta use galaxy crossings");
+  processRequest("#COMMENT azimut/alpha/delta use galaxy crossings and ASI GPS data");
   processRequest("#COMMENT and assume no pendulation");
-  
-}
+  processRequest("#COMMENT boloTens2 is not protected against glitches");
+  processRequest("#COMMENT sst software has not been updated to last DY code");
+  processRequest("#COMMENT trajectory info only while italian TM got GPS info");
+  processRequest("#COMMENT boloTemp is not implemented");
+  
+}
Index: trunk/Poubelle/archTOI.old/toisvr.h
===================================================================
--- trunk/Poubelle/archTOI.old/toisvr.h	(revision 425)
+++ trunk/Poubelle/archTOI.old/toisvr.h	(revision 426)
@@ -28,4 +28,5 @@
   
   void setTimeInterval(double tStart, double tEnd);
+  void setUnderSample(int n);
   
   void addInfo(TOIKind kind, int index, bool triggering=true, bool interp=false);
