Index: trunk/ArchTOIPipe/Kernel/toimanager.cc
===================================================================
--- trunk/ArchTOIPipe/Kernel/toimanager.cc	(revision 2133)
+++ trunk/ArchTOIPipe/Kernel/toimanager.cc	(revision 2187)
@@ -3,5 +3,5 @@
 //                               Christophe Magneville
 //                               Reza Ansari
-// $Id: toimanager.cc,v 1.16 2002-07-26 08:52:43 vfebvre Exp $
+// $Id: toimanager.cc,v 1.17 2002-09-09 15:33:15 aubourg Exp $
 
 #include "toimanager.h"
@@ -10,4 +10,5 @@
 #include <iostream.h>
 #include <unistd.h>
+#include <map>
 
 #ifndef MAXINT
@@ -18,4 +19,10 @@
   reqBegin = 0;
   reqEnd = MAXINT;
+
+  // -----------ajout cgt vf 19/08/2002
+  // par defaut TOISegmented
+  selectTOISegmented(1024, 20);
+  // ----------- fin ajout cgt
+
 }
 
@@ -27,4 +34,6 @@
 }
 
+// ajout vf 26/07/2002
+
 // enregistrement d'un processeur dans la liste des processeurs pour une execution en groupe
 
@@ -37,20 +46,64 @@
 
 
-// demarrage de tous les processeurs
+// demarrage de tous les processeurs et verification auto des samplenum pour chaque processeur parametre
 
 void TOIManager::startAll() {
+  // verification des samplenum
+  bool samples_ok=checkSamplesLimits(1);
+  if (samples_ok) {
+    cout << "All limits ok" << endl << "Starting processors" << endl;
+  } else {
+    cout << "One or more limits ajusted for execution" << endl << "Starting processors" << endl;
+  }
+
+  // mise a jour des limites apres verification
+  checkSamplesLimits(2);
+  checkSamplesLimits(3);
+   
+  // debogage affichage des limites apres calcul
   for (vector<TOIProcessor*>::iterator i = processors.begin();
        i != processors.end(); i++) {
     TOIProcessor* proc = *i;
-    cout << "******************" <<  endl;
-    cout << "starting processor  " <<  endl;
-    cout << "******************" << endl;
+    proc->printLimits();
+  }
+
+  // demarrage
+  for (vector<TOIProcessor*>::iterator i = processors.begin();
+       i != processors.end(); i++) {
+    TOIProcessor* proc = *i;
+    cout << "**********************" <<  endl;
+    cout << "starting processor " <<  endl;
     proc->start();
     cout << "processor started " << endl;
-    cout << "******************" << endl;
-  }
-}
-
-
+  }
+  cout << "**********************" << endl;
+}
+
+bool TOIManager::checkSamplesLimits(int pass)
+{
+  bool processor_ok=true;
+  bool samples_ok=true;
+  for (vector<TOIProcessor*>::iterator i = processors.begin();
+       i != processors.end(); i++) {
+    TOIProcessor* proc = *i;
+    cout << "testing processor limits  " <<  endl;
+    // test du processeur
+    
+    // test seulement pour les processor cle
+    //if (proc->getRequested()) {
+      processor_ok = proc->checkSampleLimits(pass);
+    //}
+    
+    if (processor_ok) {
+      cout << "processor limits ok " << endl;
+    } else {
+      cout << "processor limits ajusted" << endl;
+      samples_ok = false;
+    }
+  }
+  return samples_ok;
+}
+
+// fin ajout vf
 
 void TOIManager::setRequestedSample(int begin, int end) {
@@ -85,4 +138,65 @@
   }
 }
+
+
+// -----------ajout cgt vf 19/08/2002
+
+
+void TOIManager::selectTOISegmented(int bufsz, int maxseg)
+{
+  fgSegmented = true;
+  segBuffsz = bufsz;
+  segMaxseg = maxseg;
+}
+
+void TOIManager::selectTOISeqBuffered(int wsz)
+{
+  fgSegmented = false;
+  segBuffsz = wsz;
+} 
+
+// methode connect de cgt simplifiee et corrigee
+TOI& TOIManager::connect(TOIProcessor& prout, string& out, 
+		  TOIProcessor& prin, string& in, string nom, int wbsz, bool withFlag)
+{
+  TOI* toi;
+  if (nom.length() < 1) {
+    char buff[128];
+    sprintf(buff, "TOI%s_[%s-%s]", nom, in, out);
+    nom = buff;
+  }
+  if (wbsz < 16)   wbsz = segBuffsz;
+  
+  // ajout test pour eviter de creer 2 tois en sortie
+  if ((toi=prout.getOutToi(out)) == NULL) {
+    //cout << "toi cree" << endl;
+    if (fgSegmented) toi = new TOISegmented(nom, wbsz, segMaxseg);
+    else toi = new TOISeqBuffered(nom, wbsz);
+    // on ajoute le toi de sortie
+    prout.addOutput(out, toi);
+  } else {
+    //cout << "toi deja cree stop" << endl;
+  }
+
+  if (withFlag) { // Si c'est un FITSTOIWriter
+    FITSTOIWriter* ftw = dynamic_cast< FITSTOIWriter* >(&prin);
+    if (ftw) ftw->addInput(in, toi, withFlag);
+    else prin.addInput(in, toi);
+  }
+  else prin.addInput(in, toi);
+  return(*toi);
+}
+
+
+TOI& TOIManager::connect(TOIProcessor& prout, const char* out, 
+		  TOIProcessor& prin, const char* in, string nom, int wbsz, bool withFlag)
+{
+  string outs = out;  
+  string ins = in;
+  return connect(prout, outs, prin, ins, nom, wbsz, withFlag);
+}
+
+// ----------- fin ajout cgt
+
 
 
@@ -164,2 +278,16 @@
 
 }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
