Skip to content
Snippets Groups Projects
Commit efc469ed authored by Pierre-Alain Loizeau's avatar Pierre-Alain Loizeau
Browse files

mCBM 2020: improve time window event builder algo interface

- Add predefined EventBuilderDetector constants for each of the typical detectors
- Add interface methods taking EventBuilderDetector object as parameter
- Make all other interface methods use the EventBuilderDetector one
- Mark the methods using only ECbmModuleId as deprecated
- Update MQ device accordingly
- Disable clang-formatting in Init method of MQ device
parent 882389a7
No related branches found
No related tags found
No related merge requests found
...@@ -98,96 +98,81 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try { ...@@ -98,96 +98,81 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try {
// InitContainers(); // InitContainers();
/// FIXME: Disable clang formatting for now as it corrupts all alignment
/* clang-format off */
/// Initialize the Algorithm parameters /// Initialize the Algorithm parameters
fpAlgo->SetFillHistos(fbFillHistos); fpAlgo->SetFillHistos(fbFillHistos);
fpAlgo->SetIgnoreTsOverlap(fbIgnoreTsOverlap); fpAlgo->SetIgnoreTsOverlap(fbIgnoreTsOverlap);
/// Extract Event Overlap Mode /// Extract Event Overlap Mode
EOverlapMode mode = EOverlapMode mode =
("NoOverlap" == fsEvtOverMode ("NoOverlap" == fsEvtOverMode ? EOverlapMode::NoOverlap
? EOverlapMode::NoOverlap : ("MergeOverlap" == fsEvtOverMode ? EOverlapMode::MergeOverlap
: ("MergeOverlap" == fsEvtOverMode : ("AllowOverlap" == fsEvtOverMode ? EOverlapMode::AllowOverlap
? EOverlapMode::MergeOverlap : EOverlapMode::NoOverlap)));
: ("AllowOverlap" == fsEvtOverMode ? EOverlapMode::AllowOverlap
: EOverlapMode::NoOverlap)));
fpAlgo->SetEventOverlapMode(mode); fpAlgo->SetEventOverlapMode(mode);
/// Extract refdet /// Extract refdet
ECbmModuleId refDet = EventBuilderDetector refDet = ("kT0" == fsRefDet ? kEventBuilderDetT0
("kT0" == fsRefDet : ("kSts" == fsRefDet ? kEventBuilderDetMuch
? ECbmModuleId::kT0 : ("kMuch" == fsRefDet ? kEventBuilderDetTrd
: ("kSts" == fsRefDet : ("kTrd" == fsRefDet ? kEventBuilderDetTrd
? ECbmModuleId::kSts : ("kTof" == fsRefDet ? kEventBuilderDetTof
: ("kMuch" == fsRefDet : ("kRich" == fsRefDet ? kEventBuilderDetRich
? ECbmModuleId::kMuch : ("kPsd" == fsRefDet ? kEventBuilderDetPsd
: ("kTrd" == fsRefDet : kEventBuilderDetUndef)))))));
? ECbmModuleId::kTrd if (kEventBuilderDetUndef != refDet) {
: ("kTof" == fsRefDet fpAlgo->SetReferenceDetector(refDet);
? ECbmModuleId::kTof } // if( kEventBuilderDetUndef != refDet )
: ("kRich" == fsRefDet else {
? ECbmModuleId::kRich LOG(info) << "CbmDeviceMcbmEventBuilderWin::InitTask => Trying to change "
: ("kPsd" == fsRefDet "reference to unsupported detector, ignored! "
? ECbmModuleId::kPsd << fsRefDet;
: ECbmModuleId::kNotExist))))))); } // else of if( kEventBuilderDetUndef != refDet
fpAlgo->SetReferenceDetector(refDet);
/// Extract detector to add if any /// Extract detector to add if any
for (std::vector<std::string>::iterator itStrAdd = fvsAddDet.begin(); for (std::vector<std::string>::iterator itStrAdd = fvsAddDet.begin();
itStrAdd != fvsAddDet.end(); itStrAdd != fvsAddDet.end();
++itStrAdd) { ++itStrAdd) {
ECbmModuleId addDet = EventBuilderDetector addDet = ("kT0" == *itStrAdd ? kEventBuilderDetT0
("kT0" == *itStrAdd : ("kSts" == *itStrAdd ? kEventBuilderDetSts
? ECbmModuleId::kT0 : ("kMuch" == *itStrAdd ? kEventBuilderDetMuch
: ("kSts" == *itStrAdd : ("kTrd" == *itStrAdd ? kEventBuilderDetTrd
? ECbmModuleId::kSts : ("kTof" == *itStrAdd ? kEventBuilderDetTof
: ("kMuch" == *itStrAdd : ("kRich" == *itStrAdd ? kEventBuilderDetRich
? ECbmModuleId::kMuch : ("kPsd" == *itStrAdd ? kEventBuilderDetPsd
: ("kTrd" == *itStrAdd : kEventBuilderDetUndef)))))));
? ECbmModuleId::kTrd if (kEventBuilderDetUndef != addDet) {
: ("kTof" == *itStrAdd
? ECbmModuleId::kTof
: ("kRich" == *itStrAdd
? ECbmModuleId::kRich
: ("kPsd" == *itStrAdd
? ECbmModuleId::kPsd
: ECbmModuleId::kNotExist)))))));
if (ECbmModuleId::kNotExist != addDet) {
fpAlgo->AddDetector(addDet); fpAlgo->AddDetector(addDet);
} // if( ECbmModuleId::kNotExist != addDet ) } // if( kEventBuilderDetUndef != addDet )
else { else {
LOG(info) << "CbmDeviceMcbmEventBuilderWin::InitTask => Trying to add " LOG(info) << "CbmDeviceMcbmEventBuilderWin::InitTask => Trying to add "
"unsupported detector, ignored! " "unsupported detector, ignored! "
<< (*itStrAdd); << (*itStrAdd);
continue; continue;
} // else of if( ECbmModuleId::kNotExist != addDet } // else of if( kEventBuilderDetUndef != addDet )
} // for( std::vector< std::string >::iterator itStrAdd = fvsAddDet.begin(); itStrAdd != fvsAddDet.end(); ++itStrAdd ) } // for( std::vector< std::string >::iterator itStrAdd = fvsAddDet.begin(); itStrAdd != fvsAddDet.end(); ++itStrAdd )
/// Extract detector to add if any
/// Extract detector to remove if any
for (std::vector<std::string>::iterator itStrRem = fvsDelDet.begin(); for (std::vector<std::string>::iterator itStrRem = fvsDelDet.begin();
itStrRem != fvsDelDet.end(); itStrRem != fvsDelDet.end();
++itStrRem) { ++itStrRem) {
ECbmModuleId remDet = EventBuilderDetector remDet = ("kT0" == *itStrRem ? kEventBuilderDetT0
("kT0" == *itStrRem : ("kSts" == *itStrRem ? kEventBuilderDetSts
? ECbmModuleId::kT0 : ("kMuch" == *itStrRem ? kEventBuilderDetMuch
: ("kSts" == *itStrRem : ("kTrd" == *itStrRem ? kEventBuilderDetTrd
? ECbmModuleId::kSts : ("kTof" == *itStrRem ? kEventBuilderDetTof
: ("kMuch" == *itStrRem : ("kRich" == *itStrRem ? kEventBuilderDetRich
? ECbmModuleId::kMuch : ("kPsd" == *itStrRem ? kEventBuilderDetPsd
: ("kTrd" == *itStrRem : kEventBuilderDetUndef)))))));
? ECbmModuleId::kTrd if (kEventBuilderDetUndef != remDet) {
: ("kTof" == *itStrRem
? ECbmModuleId::kTof
: ("kRich" == *itStrRem
? ECbmModuleId::kRich
: ("kPsd" == *itStrRem
? ECbmModuleId::kPsd
: ECbmModuleId::kNotExist)))))));
if (ECbmModuleId::kNotExist != remDet) {
fpAlgo->RemoveDetector(remDet); fpAlgo->RemoveDetector(remDet);
} // if( ECbmModuleId::kNotExist != remDet ) } // if( kEventBuilderDetUndef != remDet )
else { else {
LOG(info) << "CbmDeviceMcbmEventBuilderWin::InitTask => Trying to remove " LOG(info) << "CbmDeviceMcbmEventBuilderWin::InitTask => Trying to remove "
"unsupported detector, ignored! " "unsupported detector, ignored! "
<< (*itStrRem); << (*itStrRem);
continue; continue;
} // else of if( ECbmModuleId::kNotExist != remDet ) } // else of if( kEventBuilderDetUndef != remDet )
} // for( std::vector< std::string >::iterator itStrAdd = fvsAddDet.begin(); itStrAdd != fvsAddDet.end(); ++itStrAdd ) } // for( std::vector< std::string >::iterator itStrAdd = fvsAddDet.begin(); itStrAdd != fvsAddDet.end(); ++itStrAdd )
/// Extract Trigger window to add if any /// Extract Trigger window to add if any
for (std::vector<std::string>::iterator itStrTrigWin = fvsSetTrigWin.begin(); for (std::vector<std::string>::iterator itStrTrigWin = fvsSetTrigWin.begin();
...@@ -205,22 +190,14 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try { ...@@ -205,22 +190,14 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try {
/// Detector Enum Tag /// Detector Enum Tag
std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel); std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel);
ECbmModuleId selDet = ECbmModuleId selDet = ("kT0" == sSelDet ? ECbmModuleId::kT0
("kT0" == sSelDet : ("kSts" == sSelDet ? ECbmModuleId::kSts
? ECbmModuleId::kT0 : ("kMuch" == sSelDet ? ECbmModuleId::kMuch
: ("kSts" == sSelDet : ("kTrd" == sSelDet ? ECbmModuleId::kTrd
? ECbmModuleId::kSts : ("kTof" == sSelDet ? ECbmModuleId::kTof
: ("kMuch" == sSelDet : ("kRich" == sSelDet ? ECbmModuleId::kRich
? ECbmModuleId::kMuch : ("kPsd" == sSelDet ? ECbmModuleId::kPsd
: ("kTrd" == sSelDet : ECbmModuleId::kNotExist)))))));
? ECbmModuleId::kTrd
: ("kTof" == sSelDet
? ECbmModuleId::kTof
: ("kRich" == sSelDet
? ECbmModuleId::kRich
: ("kPsd" == sSelDet
? ECbmModuleId::kPsd
: ECbmModuleId::kNotExist)))))));
if (ECbmModuleId::kNotExist == selDet) { if (ECbmModuleId::kNotExist == selDet) {
LOG(info) LOG(info)
<< "CbmDeviceMcbmEventBuilderWin::InitTask => " << "CbmDeviceMcbmEventBuilderWin::InitTask => "
...@@ -265,22 +242,14 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try { ...@@ -265,22 +242,14 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try {
/// Detector Enum Tag /// Detector Enum Tag
std::string sSelDet = (*itStrMinNb).substr(0, charPosDel); std::string sSelDet = (*itStrMinNb).substr(0, charPosDel);
ECbmModuleId selDet = ECbmModuleId selDet = ("kT0" == sSelDet ? ECbmModuleId::kT0
("kT0" == sSelDet : ("kSts" == sSelDet ? ECbmModuleId::kSts
? ECbmModuleId::kT0 : ("kMuch" == sSelDet ? ECbmModuleId::kMuch
: ("kSts" == sSelDet : ("kTrd" == sSelDet ? ECbmModuleId::kTrd
? ECbmModuleId::kSts : ("kTof" == sSelDet ? ECbmModuleId::kTof
: ("kMuch" == sSelDet : ("kRich" == sSelDet ? ECbmModuleId::kRich
? ECbmModuleId::kMuch : ("kPsd" == sSelDet ? ECbmModuleId::kPsd
: ("kTrd" == sSelDet : ECbmModuleId::kNotExist)))))));
? ECbmModuleId::kTrd
: ("kTof" == sSelDet
? ECbmModuleId::kTof
: ("kRich" == sSelDet
? ECbmModuleId::kRich
: ("kPsd" == sSelDet
? ECbmModuleId::kPsd
: ECbmModuleId::kNotExist)))))));
if (ECbmModuleId::kNotExist == selDet) { if (ECbmModuleId::kNotExist == selDet) {
LOG(info) LOG(info)
<< "CbmDeviceMcbmEventBuilderWin::InitTask => " << "CbmDeviceMcbmEventBuilderWin::InitTask => "
...@@ -296,6 +265,9 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try { ...@@ -296,6 +265,9 @@ void CbmDeviceMcbmEventBuilderWin::InitTask() try {
fpAlgo->SetTriggerMinNumber(selDet, uMinNb); fpAlgo->SetTriggerMinNumber(selDet, uMinNb);
} // for( std::vector< std::string >::iterator itStrMinNb = fvsSetTrigMinNb.begin(); itStrMinNb != fvsSetTrigMinNb.end(); ++itStrMinNb ) } // for( std::vector< std::string >::iterator itStrMinNb = fvsSetTrigMinNb.begin(); itStrMinNb != fvsSetTrigMinNb.end(); ++itStrMinNb )
/// FIXME: Re-enable clang formatting after formatted lines
/* clang-format on */
/// Create input vectors /// Create input vectors
fvDigiT0 = new std::vector<CbmTofDigi>(); fvDigiT0 = new std::vector<CbmTofDigi>();
fvDigiSts = new std::vector<CbmStsDigi>(); fvDigiSts = new std::vector<CbmStsDigi>();
......
...@@ -707,56 +707,15 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector( ...@@ -707,56 +707,15 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector(
Int_t iTriggerMaxDigisIn, Int_t iTriggerMaxDigisIn,
Double_t fdTimeWinBegIn, Double_t fdTimeWinBegIn,
Double_t fdTimeWinEndIn) { Double_t fdTimeWinEndIn) {
/// Loop on selection detectors
for (std::vector<EventBuilderDetector>::iterator det = fvDets.begin();
det != fvDets.end();
++det) {
if ((*det).detId == refDet) {
LOG(warning)
<< "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => "
"Reference detector already in selection detector list!"
<< sNameIn;
LOG(warning)
<< " => "
"It will be automatically removed from selection detector list!";
LOG(warning)
<< " => "
"Please also remember to update the selection windows to store "
"clusters!";
RemoveDetector(refDet);
} // if( (*det).detId == selDet )
} // for( std::vector< EventBuilderDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
if (fRefDet.detId == refDet) { /// FIXME: Deprecated method to be removed later. For now create temp object.
LOG(warning) SetReferenceDetector(EventBuilderDetector(refDet,
<< "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => " dataTypeIn,
"Doing nothing, identical reference detector already in use"; sNameIn,
} // if( fRefDet.detId == refDet ) uTriggerMinDigisIn,
else { iTriggerMaxDigisIn,
LOG(info) << "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => " fdTimeWinBegIn,
<< "Replacing " << fRefDet.sName << " with " << sNameIn fdTimeWinEndIn) );
<< " as reference detector";
LOG(warning)
<< " => "
"You may want to use AddDetector after this command to add in "
"selection "
<< fRefDet.sName;
LOG(warning)
<< " => "
"Please also remember to update the selection windows!";
} // else of if( fRefDet == refDet )
fRefDet = EventBuilderDetector(refDet,
dataTypeIn,
sNameIn,
uTriggerMinDigisIn,
iTriggerMaxDigisIn,
fdTimeWinBegIn,
fdTimeWinEndIn);
/// Update the variables storing the earliest and latest time window boundaries
UpdateTimeWinBoundariesExtrema();
/// Update the variable storing the size if widest time window for overlap detection
UpdateWidestTimeWinRange();
} }
void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(ECbmModuleId selDet, void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(ECbmModuleId selDet,
ECbmDataType dataTypeIn, ECbmDataType dataTypeIn,
...@@ -765,68 +724,46 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(ECbmModuleId selDet, ...@@ -765,68 +724,46 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(ECbmModuleId selDet,
Int_t iTriggerMaxDigisIn, Int_t iTriggerMaxDigisIn,
Double_t fdTimeWinBegIn, Double_t fdTimeWinBegIn,
Double_t fdTimeWinEndIn) { Double_t fdTimeWinEndIn) {
if (fRefDet.detId == selDet) {
LOG(fatal) << "CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector => Cannot "
"add the reference detector as selection detector!"
<< std::endl
<< "=> Maybe first change the reference detector with "
"SetReferenceDetector?";
} // if( fRefDet == selDet )
/// Loop on selection detectors /// FIXME: Deprecated method to be removed later. For now create temp object.
for (std::vector<EventBuilderDetector>::iterator det = fvDets.begin(); AddDetector(EventBuilderDetector(selDet,
det != fvDets.end(); dataTypeIn,
++det) { sNameIn,
if ((*det).detId == selDet) { uTriggerMinDigisIn,
LOG(warning) << "CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector => " iTriggerMaxDigisIn,
"Doing nothing, selection detector already in list!" fdTimeWinBegIn,
<< sNameIn; fdTimeWinEndIn));
return;
} // if( (*det).detId == selDet )
} // for( std::vector< EventBuilderDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
fvDets.push_back(EventBuilderDetector(selDet,
dataTypeIn,
sNameIn,
uTriggerMinDigisIn,
iTriggerMaxDigisIn,
fdTimeWinBegIn,
fdTimeWinEndIn));
/// Update the variables storing the earliest and latest time window boundaries
UpdateTimeWinBoundariesExtrema();
/// Update the variable storing the size if widest time window for overlap detection
UpdateWidestTimeWinRange();
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector( void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector(
ECbmModuleId refDet) { ECbmModuleId refDet) {
switch (refDet) { switch (refDet) {
case ECbmModuleId::kSts: { case ECbmModuleId::kSts: {
SetReferenceDetector(refDet, ECbmDataType::kStsDigi, "Sts"); SetReferenceDetector(kEventBuilderDetSts);
break; break;
} // case ECbmModuleId::kSts: } // case ECbmModuleId::kSts:
case ECbmModuleId::kMuch: { case ECbmModuleId::kMuch: {
SetReferenceDetector(refDet, ECbmDataType::kMuchDigi, "Mush"); SetReferenceDetector(kEventBuilderDetMuch);
break; break;
} // case ECbmModuleId::kMuch: } // case ECbmModuleId::kMuch:
case ECbmModuleId::kTrd: { case ECbmModuleId::kTrd: {
SetReferenceDetector(refDet, ECbmDataType::kTrdDigi, "Trd"); SetReferenceDetector(kEventBuilderDetTrd);
break; break;
} // case ECbmModuleId::kTrd: } // case ECbmModuleId::kTrd:
case ECbmModuleId::kTof: { case ECbmModuleId::kTof: {
SetReferenceDetector(refDet, ECbmDataType::kTofDigi, "Tof"); SetReferenceDetector(kEventBuilderDetTof);
break; break;
} // case ECbmModuleId::kTof: } // case ECbmModuleId::kTof:
case ECbmModuleId::kRich: { case ECbmModuleId::kRich: {
SetReferenceDetector(refDet, ECbmDataType::kRichDigi, "Rich"); SetReferenceDetector(kEventBuilderDetRich);
break; break;
} // case ECbmModuleId::kRich: } // case ECbmModuleId::kRich:
case ECbmModuleId::kPsd: { case ECbmModuleId::kPsd: {
SetReferenceDetector(refDet, ECbmDataType::kPsdDigi, "Psd"); SetReferenceDetector(kEventBuilderDetPsd);
break; break;
} // case ECbmModuleId::kPsd: } // case ECbmModuleId::kPsd:
case ECbmModuleId::kT0: { case ECbmModuleId::kT0: {
SetReferenceDetector(refDet, ECbmDataType::kT0Digi, "T0"); SetReferenceDetector(kEventBuilderDetT0);
break; break;
} // case ECbmModuleId::kT0: } // case ECbmModuleId::kT0:
default: { default: {
...@@ -850,31 +787,31 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector( ...@@ -850,31 +787,31 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector(
void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(ECbmModuleId selDet) { void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(ECbmModuleId selDet) {
switch (selDet) { switch (selDet) {
case ECbmModuleId::kSts: { case ECbmModuleId::kSts: {
AddDetector(selDet, ECbmDataType::kStsDigi, "Sts"); AddDetector(kEventBuilderDetSts);
break; break;
} // case ECbmModuleId::kSts: } // case ECbmModuleId::kSts:
case ECbmModuleId::kMuch: { case ECbmModuleId::kMuch: {
AddDetector(selDet, ECbmDataType::kMuchDigi, "Mush"); AddDetector(kEventBuilderDetMuch);
break; break;
} // case ECbmModuleId::kMuch: } // case ECbmModuleId::kMuch:
case ECbmModuleId::kTrd: { case ECbmModuleId::kTrd: {
AddDetector(selDet, ECbmDataType::kTrdDigi, "Trd"); AddDetector(kEventBuilderDetTrd);
break; break;
} // case ECbmModuleId::kTrd: } // case ECbmModuleId::kTrd:
case ECbmModuleId::kTof: { case ECbmModuleId::kTof: {
AddDetector(selDet, ECbmDataType::kTofDigi, "Tof"); AddDetector(kEventBuilderDetTof);
break; break;
} // case ECbmModuleId::kTof: } // case ECbmModuleId::kTof:
case ECbmModuleId::kRich: { case ECbmModuleId::kRich: {
AddDetector(selDet, ECbmDataType::kRichDigi, "Rich"); AddDetector(kEventBuilderDetRich);
break; break;
} // case ECbmModuleId::kRich: } // case ECbmModuleId::kRich:
case ECbmModuleId::kPsd: { case ECbmModuleId::kPsd: {
AddDetector(selDet, ECbmDataType::kPsdDigi, "Psd"); AddDetector(kEventBuilderDetPsd);
break; break;
} // case ECbmModuleId::kPsd: } // case ECbmModuleId::kPsd:
case ECbmModuleId::kT0: { case ECbmModuleId::kT0: {
AddDetector(selDet, ECbmDataType::kT0Digi, "T0"); AddDetector(kEventBuilderDetT0);
break; break;
} // case ECbmModuleId::kT0: } // case ECbmModuleId::kT0:
default: { default: {
...@@ -910,6 +847,97 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::RemoveDetector(ECbmModuleId selDet) { ...@@ -910,6 +847,97 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::RemoveDetector(ECbmModuleId selDet) {
<< selDet; << selDet;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector(EventBuilderDetector refDetIn)
{
/// Loop on selection detectors
for (std::vector<EventBuilderDetector>::iterator det = fvDets.begin();
det != fvDets.end();
++det) {
if ((*det) == refDetIn) {
LOG(warning)
<< "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => "
"Reference detector already in selection detector list!"
<< refDetIn.sName;
LOG(warning)
<< " => "
"It will be automatically removed from selection detector list!";
LOG(warning)
<< " => "
"Please also remember to update the selection windows to store "
"clusters!";
RemoveDetector(refDetIn);
} // if( (*det) == refDetIn )
} // for( std::vector< EventBuilderDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
if (fRefDet == refDetIn) {
LOG(warning)
<< "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => "
"Doing nothing, identical reference detector already in use";
} // if( fRefDet == refDetIn )
else {
LOG(info) << "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => "
<< "Replacing " << fRefDet.sName << " with " << refDetIn.sName
<< " as reference detector";
LOG(warning)
<< " => "
"You may want to use AddDetector after this command to add in "
"selection "
<< refDetIn.sName;
LOG(warning)
<< " => "
"Please also remember to update the selection windows!";
} // else of if( fRefDet == refDetIn )
fRefDet = refDetIn;
/// Update the variables storing the earliest and latest time window boundaries
UpdateTimeWinBoundariesExtrema();
/// Update the variable storing the size if widest time window for overlap detection
UpdateWidestTimeWinRange();
}
void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(EventBuilderDetector selDet)
{
if (fRefDet == selDet) {
LOG(fatal) << "CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector => Cannot "
"add the reference detector as selection detector!"
<< std::endl
<< "=> Maybe first change the reference detector with "
"SetReferenceDetector?";
} // if( fRefDet == selDet )
/// Loop on selection detectors
for (std::vector<EventBuilderDetector>::iterator det = fvDets.begin();
det != fvDets.end();
++det) {
if ((*det) == selDet) {
LOG(warning) << "CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector => "
"Doing nothing, selection detector already in list!"
<< selDet.sName;
return;
} // if( (*det) == selDet )
} // for( std::vector< EventBuilderDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
fvDets.push_back(selDet);
/// Update the variables storing the earliest and latest time window boundaries
UpdateTimeWinBoundariesExtrema();
/// Update the variable storing the size if widest time window for overlap detection
UpdateWidestTimeWinRange();
}
void CbmMcbm2019TimeWinEventBuilderAlgo::RemoveDetector(EventBuilderDetector selDet)
{
/// Loop on selection detectors
for (std::vector<EventBuilderDetector>::iterator det = fvDets.begin();
det != fvDets.end();
++det) {
if ((*det) == selDet) {
fvDets.erase(det);
return;
} // if( (*det) == selDet )
} // for( std::vector< EventBuilderDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
LOG(warning) << "CbmMcbm2019TimeWinEventBuilderAlgo::RemoveDetector => Doing "
"nothing, selection detector not in list!"
<< selDet.sName;
}
//----------------------------------------------------------------------
void CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerMinNumber( void CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerMinNumber(
ECbmModuleId selDet, ECbmModuleId selDet,
UInt_t uVal) { UInt_t uVal) {
......
...@@ -59,6 +59,13 @@ public: ...@@ -59,6 +59,13 @@ public:
fdTimeWinEnd = fdTimeWinEndIn; fdTimeWinEnd = fdTimeWinEndIn;
} }
bool operator ==(const EventBuilderDetector &other) const {
return (other.detId == this->detId);
}
bool operator !=(const EventBuilderDetector &other) const {
return (other.detId != this->detId);
}
/// Settings /// Settings
ECbmModuleId detId = ECbmModuleId::kNotExist; ECbmModuleId detId = ECbmModuleId::kNotExist;
ECbmDataType dataType = ECbmDataType::kUnknown; ECbmDataType dataType = ECbmDataType::kUnknown;
...@@ -76,6 +83,37 @@ public: ...@@ -76,6 +83,37 @@ public:
UInt_t fuEndIndex = 0; UInt_t fuEndIndex = 0;
}; };
/// Pre-defined detector types
static const EventBuilderDetector kEventBuilderDetSts = EventBuilderDetector(
ECbmModuleId::kSts,
ECbmDataType::kStsDigi,
"Sts");
static const EventBuilderDetector kEventBuilderDetMuch = EventBuilderDetector(
ECbmModuleId::kMuch,
ECbmDataType::kMuchDigi,
"Much");
static const EventBuilderDetector kEventBuilderDetTrd = EventBuilderDetector(
ECbmModuleId::kTrd,
ECbmDataType::kTrdDigi,
"Trd");
static const EventBuilderDetector kEventBuilderDetTof = EventBuilderDetector(
ECbmModuleId::kTof,
ECbmDataType::kTofDigi,
"Tof");
static const EventBuilderDetector kEventBuilderDetRich = EventBuilderDetector(
ECbmModuleId::kRich,
ECbmDataType::kRichDigi,
"Rich");
static const EventBuilderDetector kEventBuilderDetPsd = EventBuilderDetector(
ECbmModuleId::kPsd,
ECbmDataType::kPsdDigi,
"Psd");
static const EventBuilderDetector kEventBuilderDetT0 = EventBuilderDetector(
ECbmModuleId::kT0,
ECbmDataType::kT0Digi,
"T0");
static const EventBuilderDetector kEventBuilderDetUndef = EventBuilderDetector();
class CbmMcbm2019TimeWinEventBuilderAlgo { class CbmMcbm2019TimeWinEventBuilderAlgo {
public: public:
/** Default constructor **/ /** Default constructor **/
...@@ -116,9 +154,13 @@ public: ...@@ -116,9 +154,13 @@ public:
Double_t fdTimeWinBegIn = -100, Double_t fdTimeWinBegIn = -100,
Double_t fdTimeWinEndIn = 100); Double_t fdTimeWinEndIn = 100);
void SetReferenceDetector(ECbmModuleId refDet); void SetReferenceDetector(ECbmModuleId refDet) __attribute__ ((deprecated));
void AddDetector(ECbmModuleId selDet); void AddDetector(ECbmModuleId selDet) __attribute__ ((deprecated));
void RemoveDetector(ECbmModuleId selDet); void RemoveDetector(ECbmModuleId selDet) __attribute__ ((deprecated));
void SetReferenceDetector(EventBuilderDetector refDetIn);
void AddDetector(EventBuilderDetector selDet);
void RemoveDetector(EventBuilderDetector selDet);
void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal); void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal);
void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal); void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal);
......
...@@ -150,6 +150,17 @@ void CbmMcbm2019TimeWinEventBuilderTask::RemoveDetector(ECbmModuleId selDet) { ...@@ -150,6 +150,17 @@ void CbmMcbm2019TimeWinEventBuilderTask::RemoveDetector(ECbmModuleId selDet) {
if (nullptr != fpAlgo) fpAlgo->RemoveDetector(selDet); if (nullptr != fpAlgo) fpAlgo->RemoveDetector(selDet);
} }
void CbmMcbm2019TimeWinEventBuilderTask::SetReferenceDetector(
EventBuilderDetector refDet) {
if (nullptr != fpAlgo) fpAlgo->SetReferenceDetector(refDet);
}
void CbmMcbm2019TimeWinEventBuilderTask::AddDetector(EventBuilderDetector selDet) {
if (nullptr != fpAlgo) fpAlgo->AddDetector(selDet);
}
void CbmMcbm2019TimeWinEventBuilderTask::RemoveDetector(EventBuilderDetector selDet) {
if (nullptr != fpAlgo) fpAlgo->RemoveDetector(selDet);
}
void CbmMcbm2019TimeWinEventBuilderTask::SetTriggerMinNumber( void CbmMcbm2019TimeWinEventBuilderTask::SetTriggerMinNumber(
ECbmModuleId selDet, ECbmModuleId selDet,
UInt_t uVal) { UInt_t uVal) {
......
...@@ -63,9 +63,13 @@ public: ...@@ -63,9 +63,13 @@ public:
void SetFillHistos(Bool_t bFlag = kTRUE); void SetFillHistos(Bool_t bFlag = kTRUE);
void SetOutFilename(TString sNameIn); void SetOutFilename(TString sNameIn);
void SetReferenceDetector(ECbmModuleId refDet); void SetReferenceDetector(ECbmModuleId refDet) __attribute__ ((deprecated));
void AddDetector(ECbmModuleId selDet); void AddDetector(ECbmModuleId selDet) __attribute__ ((deprecated));
void RemoveDetector(ECbmModuleId selDet); void RemoveDetector(ECbmModuleId selDet) __attribute__ ((deprecated));
void SetReferenceDetector(EventBuilderDetector refDet);
void AddDetector(EventBuilderDetector selDet);
void RemoveDetector(EventBuilderDetector selDet);
void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal); void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal);
void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal); void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment