// ESAF : Euso Simulation and Analysis Framework
// $Id: TriggerEngine.cc,v 1.13 2005/04/15 12:21:54 pesce Exp $
// M. Pallavicini created Oct, 24 2003
#include "TriggerEngine.hh"
#include "PersistencyTriggerEngine.hh"
#include "ChipTrackingTrgEngine.hh"
#include "ChipTrackingTrgEngine0.hh"
#include "ChipTrackingTrgEngine1.hh"
#include "ChipTrackingTrgEngine2.hh"
#include "ChipTrackingTrgEngine3.hh"
#include "CellTrackingTrgEngine.hh"
#include "LblChipTrackingTrgEngine.hh"
ClassImp(TriggerEngine)
// trigger word
int TriggerEngine::fTriggerWord = 0 ;
//trg words of child triggers
map<Int_t,Int_t> TriggerEngine::fTrgWords;
// map with all engines
map<ETriggerTypeIdentifier,TriggerEngine*>* TriggerEngine::fEngines = 0;
//______________________________________________________________________________
TriggerEngine::TriggerEngine(const string& name, ETriggerTypeIdentifier id) : EsafConfigurable() {
//
// Constructor
//
fName = name;
fHasTriggered = false;
fTrgId = id;
fTriggerWord = 0;
}
//______________________________________________________________________________
TriggerEngine::~TriggerEngine() {
//
// Destructor
//
}
//______________________________________________________________________________
map<ETriggerTypeIdentifier,TriggerEngine*> &TriggerEngine::GetEngines( ETriggerTypeIdentifier type) {
//
// return the map of engines
// basically a factory method for all trigger algorythms
// right now static: the same trigger structure for all macrocells
// easy to generalize to macrocell dependent trigger code
//
if ( fEngines ) {
return *fEngines;
}
fEngines = new map<ETriggerTypeIdentifier,TriggerEngine*>;
if ( type & kPersistencyTrigger ) {
(*fEngines)[ kPersistencyTrigger ] = new PersistencyTriggerEngine();
cout << " *** Trigger: Persistency trigger enabled" << endl;
}
if ( type & kContiguityTrigger ) {
// to be done
}
if ( type & kChipTrackingTrigger ) {
(*fEngines)[ kChipTrackingTrigger ] = new ChipTrackingTrgEngine();
cout << " *** Trigger: Chip Tracking trigger enabled" << endl;
}
if ( type & kChipTrackingTrigger0 ) {
(*fEngines)[ kChipTrackingTrigger0 ] = new ChipTrackingTrgEngine0();
cout << " *** Trigger: Chip Tracking 0 trigger enabled" << endl;
}
if ( type & kChipTrackingTrigger1 ) {
(*fEngines)[ kChipTrackingTrigger1 ] = new ChipTrackingTrgEngine1();
cout << " *** Trigger: Chip Tracking 1 trigger enabled" << endl;
}
if ( type & kChipTrackingTrigger2 ) {
(*fEngines)[ kChipTrackingTrigger2 ] = new ChipTrackingTrgEngine2();
cout << " *** Trigger: Chip Tracking 2 trigger enabled" << endl;
}
if ( type & kChipTrackingTrigger3 ) {
(*fEngines)[ kChipTrackingTrigger3 ] = new ChipTrackingTrgEngine3();
cout << " *** Trigger: Chip Tracking 3 trigger enabled" << endl;
}
if ( type & kCellTrackingTrigger ) {
(*fEngines)[ kCellTrackingTrigger ] = new CellTrackingTrgEngine();
cout << " *** Trigger: Cell Tracking trigger enabled" << endl;
}
if ( type & kLblChipTrackingTrigger ) {
(*fEngines)[ kLblChipTrackingTrigger ] = new LblChipTrackingTrgEngine();
cout << " *** Trigger: Lbl Chip Tracking trigger enabled" << endl;
}
return *fEngines;
}
void TriggerEngine::SetTrigger(Int_t word) {
fHasTriggered = true;
fTriggerWord |= (int)GetTriggerId();
if ( !fTrgWords.count((int)GetTriggerId()) ) fTrgWords[(int)GetTriggerId()] = word;
else fTrgWords[(int)GetTriggerId()] |= word;
}