X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSTriggerFOProcessor.cxx;h=7f044bbcaeb3f5d4e838dee24981be16b061cf63;hb=9473f43a8542301f4738a390c7230a0ca5ad2d1c;hp=0ed9853a6cc172f4e1edf24cc6a6027f5a4bd89a;hpb=ad7f2bfa13b73e2fb13f097a478710c3bc1d47a3;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSTriggerFOProcessor.cxx b/ITS/AliITSTriggerFOProcessor.cxx index 0ed9853a6cc..7f044bbcaeb 100644 --- a/ITS/AliITSTriggerFOProcessor.cxx +++ b/ITS/AliITSTriggerFOProcessor.cxx @@ -21,6 +21,8 @@ #include "AliITSTriggerConditions.h" #include +/* $Id$ */ + AliITSTriggerFOProcessor::AliITSTriggerFOProcessor() : fFOInner(0), fFOOuter(0), fTriggerCond(NULL) { @@ -53,7 +55,7 @@ AliITSTriggerFOProcessor& AliITSTriggerFOProcessor::operator=(const AliITSTrigge return *this; } //______________________________________________________________________ -void AliITSTriggerFOProcessor::SetTriggerConditions(AliITSTriggerConditions* ocdbCond) { +void AliITSTriggerFOProcessor::SetTriggerConditions(AliITSTriggerConditions* const ocdbCond) { // Method to give pointer to the OCDB conditions entry fTriggerCond = ocdbCond; } @@ -76,7 +78,7 @@ const Char_t* AliITSTriggerFOProcessor::GetOutputLabel(Short_t index) const { return fTriggerCond->GetAlgoLabelI(index); } //______________________________________________________________________ -void AliITSTriggerFOProcessor::PreprocessFOSignals(AliITSFOSignalsSPD* signals) { +void AliITSTriggerFOProcessor::PreprocessFOSignals(AliITSFOSignalsSPD* const signals) { // Pre-process the fast-or signals to retrieve some data needed by most algorithms if (fTriggerCond==NULL) { Error("AliITSTriggerFOProcessor::PreprocessFOSignals","Trigger conditions entry not yet given."); @@ -115,18 +117,17 @@ Bool_t AliITSTriggerFOProcessor::ProcessFOSignalsLabel(const Char_t* label, AliI Error("AliITSTriggerFOProcessor::ProcessFOSignalsLabel", "No conditions for label '%s'.",label); return kFALSE; } - + if (strcmp(label, "0SMB") == 0) return ProcessFOSignalsTHRTotalAndTHRInnerAndTHROuter(index, signals); else if (strcmp(label, "0SH1") == 0) return ProcessFOSignalsTHRInnerAndTHROuter(index, signals); else if (strcmp(label, "0SH2") == 0) return ProcessFOSignalsTHRInnerAndTHROuter(index, signals); else if (strcmp(label, "0SH3") == 0) return ProcessFOSignalsTHRInnerAndTHROuter(index, signals); else if (strcmp(label, "0SH4") == 0) return ProcessFOSignalsTHRInnerAndTHROuter(index, signals); else if (strcmp(label, "0SPF") == 0) return ProcessFOSignalsTHRTotalAndTHRInnerAndTHROuter(index, signals); - else if (strcmp(label, "0SBK") == 0) return ProcessFOSignalsInnerGTOuterPlusOffset(index, signals); - else if (strcmp(label, "0SBK") == 0) return ProcessFOSignalsOuterGTInnerPlusOffset(index, signals); + else if (strcmp(label, "0SX1") == 0) return ProcessFOSignalsInnerGTOuterPlusOffset(index, signals); + else if (strcmp(label, "0SX2") == 0) return ProcessFOSignalsOuterGTInnerPlusOffset(index, signals); else if (strcmp(label, "0SBK") == 0) return ProcessFOSignalsTHRTotal(index, signals); - else if (strcmp(label, "SPD_GFO_L0") == 0) return ProcessFOSignalsTHRTotal(index, signals); - else if (strcmp(label, "SPD_HMULT_L0") == 0) return ProcessFOSignalsTHRTotal(index, signals); + else if (strcmp(label, "0SCO") == 0) return ProcessFOSignalsCosmic(index, signals); else { Error("AliITSTriggerFOProcessor::ProcessFOSignalsLabel", "Algorithm not yet implemented for label '%s'.",label); @@ -196,7 +197,7 @@ Bool_t AliITSTriggerFOProcessor::ProcessFOSignalsTHRTotal(Short_t index, AliITSF } // Get parameter values: - Int_t thIO = fTriggerCond->GetAlgoParamValueIN(index, "total_threshold"); + Int_t thIO = fTriggerCond->GetAlgoParamValueIN(index, "background_threshold_both"); if (thIO<0) { Error("AliITSTriggerFOProcessor::ProcessFOSignalsTHRTotal","Parameter 'total_threshold' not defined"); return kFALSE; @@ -215,7 +216,7 @@ Bool_t AliITSTriggerFOProcessor::ProcessFOSignalsInnerGTOuterPlusOffset(Short_t } // Get parameter values: - Int_t offset = fTriggerCond->GetAlgoParamValueIN(index, "offset"); + Int_t offset = fTriggerCond->GetAlgoParamValueIN(index, "background_offset_inner"); if (offset<0) { Error("AliITSTriggerFOProcessor::ProcessFOSignalsInnerGTOuterPlusOffset","Parameter 'offset' not defined"); return kFALSE; @@ -234,7 +235,7 @@ Bool_t AliITSTriggerFOProcessor::ProcessFOSignalsOuterGTInnerPlusOffset(Short_t } // Get parameter values: - Int_t offset = fTriggerCond->GetAlgoParamValueIN(index, "offset"); + Int_t offset = fTriggerCond->GetAlgoParamValueIN(index, "background_offset_outer"); if (offset<0) { Error("AliITSTriggerFOProcessor::ProcessFOSignalsOuterGTInnerPlusOffset","Parameter 'offset' not defined"); return kFALSE; @@ -243,4 +244,66 @@ Bool_t AliITSTriggerFOProcessor::ProcessFOSignalsOuterGTInnerPlusOffset(Short_t // Evaluate: return (fFOOuter >= fFOInner + offset); } +//______________________________________________________________________ +Bool_t AliITSTriggerFOProcessor::ProcessFOSignalsCosmic(Short_t index, AliITSFOSignalsSPD* const signals) { + // NB: For every event - Always call PreprocessFOSignals before calling this method + // Process algorithm 'cosmic' (index is needed to get the correct parameters from the ocdb object) + if (fTriggerCond==NULL) { + Error("AliITSTriggerFOProcessor::ProcessFOSignalsCosmic","Trigger conditions entry not yet given."); + return kFALSE; + } + + // Get parameter values: + Int_t cosmicParam = fTriggerCond->GetAlgoParamValueIN(index, "cosmic_mode"); + if (cosmicParam<0) { + Error("AliITSTriggerFOProcessor::ProcessFOSignalsCosmic","Parameter 'cosmic_mode' not defined"); + return kFALSE; + } + + // Evaluate: + + UShort_t topOuter = 0; + UShort_t topInner = 0; + UShort_t bottomOuter = 0; + UShort_t bottomInner = 0; + + Int_t eq = -1; + Int_t hs = -1; + Int_t chip = -1; + while (signals->GetNextSignal(eq,hs,chip)) { + if (fTriggerCond->IsChipActive( (UInt_t)eq, (UInt_t)hs, (UInt_t)chip) ) { + if (hs<=1) { + if (eq%10 < 5) topInner++; + else bottomInner++; + } + else { + if (eq%10 < 5) topOuter++; + else bottomOuter++; + } + } + } + + // top outer & bottom outer + if (cosmicParam == 0) return (topOuter>0 && bottomOuter>0); + // inner & outer + if (cosmicParam == 1) return (fFOInner>0 && fFOOuter>0); + // double layer ( >=2 of top inner, top outer, bottom inner, bottom outer ) + if (cosmicParam == 2) { + UShort_t nHalfLayers = 0; + if (topOuter>0) nHalfLayers++; + if (topInner>0) nHalfLayers++; + if (bottomOuter>0) nHalfLayers++; + if (bottomInner>0) nHalfLayers++; + return (nHalfLayers>=2); + } + // top outer & top inner & bottom outer & bottom inner + if (cosmicParam == 3) return (topOuter>0 && topInner>0 && bottomOuter>0 && bottomInner>0); + // top outer & bottom outer & inner + if (cosmicParam == 4) return (topOuter>0 && bottomOuter>0 && fFOInner>0); + // global or + if (cosmicParam == 5) return (fFOOuter>0 || fFOInner>0); + + Error("AliITSTriggerFOProcessor::ProcessFOSignalsCosmic","'cosmic_algorithm_parameter' = %d not defined",cosmicParam); + return kFALSE; +}