//  <a target="_top" href="http://webdb.gsi.de/pls/hades_webdbs/hanal.hal_posting_query.show_posting_text?p_id=436">
//  this analysis logbook entry<a>. END_HTML
#include "TObjString.h"
#include "hades.h"
#include "hrich700taskset.h"
#include "hrich700digitizer.h"
#include "hrich700calibrater.h"
#include "hrich700ringfinderhough.h"
using namespace std;
ClassImp(HRich700TaskSet)
HRich700TaskSet::HRich700TaskSet(void)
   : HTaskSet()
{
   
    fNoRingFinder = kFALSE;
    fNoCalibrater = kFALSE;
}
HRich700TaskSet::HRich700TaskSet(const Text_t name[], const Text_t title[])
   : HTaskSet(name, title)
{
    
    fNoRingFinder = kFALSE;
    fNoCalibrater = kFALSE;
}
HRich700TaskSet::~HRich700TaskSet(void)
{
   
}
HTask*
HRich700TaskSet::make(const Char_t *select, const Option_t *option)
{
   HTaskSet* tasks      = new HTaskSet("Rich", "List of Rich tasks");
   TString   sel        = select;
   TString   opt        = option;
   parseArguments(opt);
   sel.ToLower();
   if (0 == sel.CompareTo("simulation") &&
       0 != gHades->getEmbeddingMode()) {
      Error("make", "embeddingMode > 0 in simulation NOT ALLOWED!");
      return NULL;
   }
   if (0 == sel.CompareTo("real"))    
   {
       if(!fNoCalibrater){
	   tasks->add(new HRich700Calibrater("rich.calibrater",  "Rich Calibrater"));
       }
       if( 0 != gHades->getEmbeddingMode()){ 
	   tasks->add(new HRich700Digitizer("rich.digi",  "Rich digitizer"));
       }
   }
   if (0 == sel.CompareTo("simulation"))
   {
       tasks->add(new HRich700Digitizer("rich.digi",  "Rich digitizer"));
   }
   if(!fNoRingFinder)
   {
       tasks->add(new HRich700RingFinderHough("rich.ringfinder",  "Rich ring finder"));
   }
   return tasks;
}
void HRich700TaskSet::parseArguments(TString s1)
{
   s1.ToLower();
   s1.ReplaceAll(" ", "");
   if (0 != s1.Length()) {
      
       
       TObjArray* myarguments = s1.Tokenize(",");
       TIterator*   myiter     = NULL;
       TObjString*  stemp      = NULL;
       TString      argument;
       myiter = myarguments->MakeIterator();
       myiter->Reset();
       while (0 != (stemp = static_cast<TObjString*>(myiter->Next()))) {
	   argument = stemp->GetString();
	   Info("parseArguments()","option: %s", argument.Data() );
	   if (0 == argument.CompareTo("noringfinder")) {
	       fNoRingFinder = kTRUE;
	   }
	   else if (0 == argument.CompareTo("nocalibrater")) {
	       fNoCalibrater = kTRUE;
	   } else {
	       Error("parseArguments","Unknown Option %s found!",argument.Data());
	   }
       }
       delete myiter;
       myiter = NULL;
       myarguments->Delete();
       delete myarguments;
   }
}