#include "TClass.h"
#include "TObjArray.h"
#include "TMath.h"
+#include "THashTable.h"
#include "AliDetectorRecoParam.h"
#include "AliLog.h"
ClassImp(AliRecoParam)
-TString AliRecoParam::fkgEventSpecieName[] = {"Default", "LowMultiplicity", "HighMultiplicity", "Cosmic", "Calibration", "Unknown"} ;
+TString AliRecoParam::fkgEventSpecieName[] = {"Default", "LowMultiplicity", "HighMultiplicity", "Cosmic", "Calib", "Unknown"} ;
AliRecoParam::AliRecoParam():
TObject(),
}
}
-void AliRecoParam::SetEventSpecie(const AliRunInfo *runInfo, const AliEventInfo &evInfo)
+void AliRecoParam::SetEventSpecie(const AliRunInfo *runInfo, const AliEventInfo &evInfo,
+ const THashTable *cosmicTriggersList)
{
- // To be implemented
- // Here we return always kDefault!!
+ // Implemented according to the discussions
+ // and meetings with physics and trigger coordination
fEventSpecie = kDefault;
return;
}
- if (strcmp(runInfo->GetLHCState(),"STABLE_BEAMS") == 0) {
- // In case of stable beams
- if ((strcmp(runInfo->GetBeamType(),"A-A") == 0) ||
+ // Special DAQ events considered as calibration events
+ if (evInfo.GetEventType() != 7) {
+ // START_OF_*, END_OF_*, CALIBRATION etc events
+ fEventSpecie = kCalib;
+ return;
+ }
+
+ if ((strcmp(runInfo->GetLHCState(),"STABLE_BEAMS") == 0) &&
+ ((strcmp(runInfo->GetBeamType(),"A-A") == 0) ||
(strcmp(runInfo->GetBeamType(),"A-") == 0) ||
- (strcmp(runInfo->GetBeamType(),"-A") == 0)) {
- // Heavy ion run (any beam tha is not pp, the event specie is set to kHighMult
+ (strcmp(runInfo->GetBeamType(),"-A") == 0))) {
+ // Heavy ion run (any beam that is not pp, the event specie is set to kHighMult
fEventSpecie = kHighMult;
}
- else if ((strcmp(runInfo->GetBeamType(),"p-p") == 0) ||
- (strcmp(runInfo->GetBeamType(),"p-") == 0) ||
- (strcmp(runInfo->GetBeamType(),"-p") == 0) ||
- (strcmp(runInfo->GetBeamType(),"P-P") == 0) ||
- (strcmp(runInfo->GetBeamType(),"P-") == 0) ||
- (strcmp(runInfo->GetBeamType(),"-P") == 0)) {
+ else if ((strcmp(runInfo->GetLHCState(),"STABLE_BEAMS") == 0) &&
+ ((strcmp(runInfo->GetBeamType(),"p-p") == 0) ||
+ (strcmp(runInfo->GetBeamType(),"p-") == 0) ||
+ (strcmp(runInfo->GetBeamType(),"-p") == 0) ||
+ (strcmp(runInfo->GetBeamType(),"P-P") == 0) ||
+ (strcmp(runInfo->GetBeamType(),"P-") == 0) ||
+ (strcmp(runInfo->GetBeamType(),"-P") == 0))) {
// Proton run, the event specie is set to kLowMult
fEventSpecie = kLowMult;
}
// No beams, we assume cosmic data
fEventSpecie = kCosmic;
}
- else if (strcmp(runInfo->GetBeamType(),"UNKNOWN") == 0) {
- // No LHC beam information is available, we the default
- // event specie
- fEventSpecie = kDefault;
- }
// Now we look into the trigger type in order to decide
// on the remaining cases (cosmic event within LHC run,
- // high-mult event based on high-mult SPD trigger
- // within p-p run, laser triggers within physics run,
- // special DAQ events considered as calibration etc...)
- if (evInfo.GetEventType() != 7) {
- // START_OF_*, END_OF_*, CALIBRATION etc events
- fEventSpecie = kCalib;
- }
-
+ // calibration, for example TPC laser, triggers within physics run
TString triggerClasses = evInfo.GetTriggerClasses();
TObjArray* trClassArray = triggerClasses.Tokenize(" ");
Int_t nTrClasses = trClassArray->GetEntriesFast();
Bool_t cosmicTrigger = kFALSE,
- laserTrigger = kFALSE,
- highMultTrigger = kFALSE,
+ calibTrigger = kFALSE,
otherTrigger = kFALSE;
for( Int_t i=0; i<nTrClasses; ++i ) {
TString trClass = ((TObjString*)trClassArray->At(i))->String();
- if (trClass.BeginsWith("C0A") ||
- trClass.BeginsWith("C0SC") ||
- trClass.BeginsWith("C0OC")) {
- // ACORDE/SPD/TOF cosmic trigger, so we have cosmic event
- // not always true, but we don't have a better idea...
- cosmicTrigger = kTRUE;
- }
- else if (trClass.BeginsWith("C0LSR")) {
- // Laser trigger
- laserTrigger = kTRUE;
+
+ if (trClass.BeginsWith("C0L")) {
+ // Calibration triggers always start with C0L
+ calibTrigger = kTRUE;
+ continue;
}
- else if (trClass.BeginsWith("C0SH")) {
- // High-multiplicity SPD trugger
- // Have to add other high-mult triggers here...
- highMultTrigger = kTRUE;
+
+ if (cosmicTriggersList) {
+ if (cosmicTriggersList->FindObject(trClass.Data())) {
+ // Cosmic trigger accorind to the table
+ // provided in OCDB
+ cosmicTrigger = kTRUE;
+ AliDebug(1,Form("Trigger %s identified as cosmic according to the list defined in OCDB.",
+ trClass.Data()));
+ continue;
+ }
}
else {
- otherTrigger = kTRUE;
+ AliDebug(1,"Cosmic trigger list is not provided, cosmic event specie is effectively disabled!");
}
+
+ otherTrigger = kTRUE;
}
- if (laserTrigger) {
+ if (calibTrigger) {
fEventSpecie = kCalib;
return;
}
- if (cosmicTrigger && !highMultTrigger && !otherTrigger) {
+ if (cosmicTrigger && !otherTrigger) {
fEventSpecie = kCosmic;
return;
}
- if (highMultTrigger) {
- fEventSpecie = kHighMult;
- return;
- }
// Here we have to add if we have other cases
// and also HLT info if any...
- }
}
const AliDetectorRecoParam *AliRecoParam::GetDetRecoParam(Int_t iDet) const
if (fEventSpecie & (1 << iBit)) {
if (fDetRecoParamsIndex[iBit][iDet] >= 0)
return (AliDetectorRecoParam *)fDetRecoParams[iDet]->At(fDetRecoParamsIndex[iBit][iDet]);
- else
+ else if (fDetRecoParamsIndex[0][iDet] >= 0)
return (AliDetectorRecoParam *)fDetRecoParams[iDet]->At(fDetRecoParamsIndex[0][iDet]);
+ else {
+ AliError(Form("no RecoParam set for detector %d", iDet));
+ return NULL;
+ }
}
}
// Default one
AliError(Form("Invalid event specie: %d!",fEventSpecie));
- return (AliDetectorRecoParam *)fDetRecoParams[iDet]->At(fDetRecoParamsIndex[0][iDet]);
+ if (fDetRecoParamsIndex[0][iDet] >= 0)
+ return (AliDetectorRecoParam *)fDetRecoParams[iDet]->At(fDetRecoParamsIndex[0][iDet]);
+
+ AliError(Form("no RecoParam set for detector %d", iDet));
+ return NULL;
}
void AliRecoParam::AddDetRecoParam(Int_t iDet, AliDetectorRecoParam* param)