#include "hwalltaskset.h"
#include "hwalldigitizer.h"
#include "hwallcalibrater.h"
#include "hwallonehitf.h"
#include "hwallhitf.h"
#include "hwallhitfsim.h"
#include "hwalleventplanef.h"
#include "TObjString.h"
using namespace std;
HWallTaskSet::HWallTaskSet(const Text_t name[],const Text_t title[])
: HTaskSet(name,title)
{
    fdoEventPlane = kTRUE;
}
HWallTaskSet::~HWallTaskSet(void)
{
}
HTask* HWallTaskSet::make(const Char_t* select,const Option_t* option) {
    
    
    
    HTaskSet *tasks    = new HTaskSet("Wall","List of Forward Wall tasks");
    TString sel = select;
    TString opt = option;
    sel.ToLower();
    opt.ToLower();
    parseArguments(opt);
    if(sel.CompareTo("") == 0){
	Error("make()","You have to specify \"real\" or \"simulation\" in \"select\"! (has been moved from \"option\")");
	exit(1);
    }
    if(sel.CompareTo("simulation") == 0){
	tasks->add( new HWallDigitizer("wall.digi","wall.digi"));
	tasks->add( new HWallHitFSim("wall.hitfs","wall.hitfs"));
    }
    if(sel.CompareTo("real") == 0){
	tasks->add( new HWallCalibrater("wall.cal","wall.cal") );
	tasks->add( new HWallOneHitF("wall.onehitf","wall.onehitf"));
	tasks->add( new HWallHitF("wall.hitf","wall.hitf"));
    }
    if(fdoEventPlane) tasks->add(new HWallEventPlaneF("wall.eventplane","wall.eventplane")) ;
    return tasks;
}
void HWallTaskSet::parseArguments(TString s1)
{
    s1.ToLower();
    s1.ReplaceAll(" ", "");
    if (0 != s1.Length()) {
	TIterator*   myiter     = NULL;
	TObjString*  stemp      = NULL;
	TString      argument;
	TObjArray* myarguments = s1 .Tokenize(",");
	
	
	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("noeventplane")) {
		fdoEventPlane = kFALSE;
	    } else {
               Warning("parseArguments()","Unknown option \"%s\" will be ignored!",argument.Data());
	    }
	}
	delete myiter;
	myiter = NULL;
	myarguments ->Delete();
	delete myarguments;
    }
}
ClassImp(HWallTaskSet)