X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliRecoParam.cxx;h=2da89054e3feb444308294f05054ba26f55c7d47;hb=c7a07b9c92da5209e44096271d542278b8cffe27;hp=7bbf2b120edca6c1167e8efed4502b716795edca;hpb=49ad11d0107852cbeac13d2841a2993e173d8e0f;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliRecoParam.cxx b/STEER/AliRecoParam.cxx index 7bbf2b120ed..2da89054e3f 100644 --- a/STEER/AliRecoParam.cxx +++ b/STEER/AliRecoParam.cxx @@ -25,14 +25,22 @@ // // /////////////////////////////////////////////////////////////////////////////// +#include "TClass.h" #include "TObjArray.h" +#include "TMath.h" +#include "THashTable.h" #include "AliDetectorRecoParam.h" #include "AliLog.h" #include "AliRecoParam.h" +#include "AliRunInfo.h" +#include "AliEventInfo.h" +#include "AliLog.h" ClassImp(AliRecoParam) +TString AliRecoParam::fkgEventSpecieName[] = {"Default", "LowMultiplicity", "HighMultiplicity", "Cosmic", "Calib", "Unknown"} ; + AliRecoParam::AliRecoParam(): TObject(), fEventSpecie(kDefault) @@ -90,6 +98,78 @@ AliRecoParam::~AliRecoParam(){ } } +Int_t AliRecoParam::AConvert(EventSpecie_t es) +{ + //Converts EventSpecie_t into int + Int_t rv = -1 ; + switch (es) { + case kDefault: + rv = 0 ; + break; + case kLowMult: + rv = 1 ; + break; + case kHighMult: + rv = 2 ; + break; + case kCosmic: + rv = 3 ; + break; + case kCalib: + rv = 4 ; + break; + default: + break; + } + + if (rv < 0) + AliFatalClass(Form("Wrong event specie conversion %d", es)) ; + + return rv ; +} + +AliRecoParam::EventSpecie_t AliRecoParam::Convert(Int_t ies) +{ + //Converts int into EventSpecie_t + AliRecoParam::EventSpecie_t es = kDefault ; + if ( ies >> 1) + es = kLowMult ; + if ( ies >> 2) + es = kHighMult ; + if ( ies >> 3) + es = kCosmic ; + if ( ies >> 4) + es = kCalib ; + + return es ; +} + +AliRecoParam::EventSpecie_t AliRecoParam::ConvertIndex(Int_t index) +{ + //Converts index of lists into eventspecie + EventSpecie_t es = kDefault ; + switch (index) { + case 0: + es = kDefault ; + break; + case 1: + es = kLowMult ; + break; + case 2: + es = kHighMult ; + break; + case 3: + es = kCosmic ; + break; + case 4: + es = kCalib ; + break; + default: + break; + } + return es ; +} + void AliRecoParam::Print(Option_t *option) const { // // Print reconstruction setup @@ -110,17 +190,102 @@ void AliRecoParam::Print(Option_t *option) const { } } -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; + + if (strcmp(runInfo->GetRunType(),"PHYSICS")) { + // Not a physics run, the event specie is set to kCalib + fEventSpecie = kCalib; + return; + } + + // 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 that is not pp, the event specie is set to kHighMult + fEventSpecie = kHighMult; + } + 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; + } + else if (strcmp(runInfo->GetBeamType(),"-") == 0) { + // No beams, we assume cosmic data + fEventSpecie = kCosmic; + } + + // Now we look into the trigger type in order to decide + // on the remaining cases (cosmic event within LHC run, + // 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, + calibTrigger = kFALSE, + otherTrigger = kFALSE; + for( Int_t i=0; iAt(i))->String(); + + if (trClass.BeginsWith("C0L")) { + // Calibration triggers always start with C0L + calibTrigger = kTRUE; + continue; + } + + 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 { + AliDebug(1,"Cosmic trigger list is not provided, cosmic event specie is effectively disabled!"); + } + + otherTrigger = kTRUE; + } + + if (calibTrigger) { + fEventSpecie = kCalib; + return; + } + if (cosmicTrigger && !otherTrigger) { + fEventSpecie = kCosmic; + 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 { // Return AliDetectorRecoParam object for a given detector // according to the event specie provided as an argument + if ( iDet >= kNDetectors) return NULL; if (!fDetRecoParams[iDet]) return NULL; if (fDetRecoParams[iDet]->GetEntries() == 0) return NULL; @@ -128,14 +293,22 @@ 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) @@ -179,3 +352,61 @@ Bool_t AliRecoParam::AddDetRecoParamArray(Int_t iDet, TObjArray* parArray) return defaultFound; } + +const char* AliRecoParam::PrintEventSpecie() const +{ + // Print the current + // event specie + switch (fEventSpecie) { + case kDefault: + return fkgEventSpecieName[0].Data() ; + break; + case kLowMult: + return fkgEventSpecieName[1].Data() ; + break; + case kHighMult: + return fkgEventSpecieName[2].Data() ; + break; + case kCosmic: + return fkgEventSpecieName[3].Data() ; + break; + case kCalib: + return fkgEventSpecieName[4].Data() ; + break; + default: + return fkgEventSpecieName[5].Data() ; + break; + } +} + +const char * AliRecoParam::GetEventSpecieName(EventSpecie_t es) +{ + switch (es) { + case kDefault: + return fkgEventSpecieName[0].Data() ; + break; + case kLowMult: + return fkgEventSpecieName[1].Data() ; + break; + case kHighMult: + return fkgEventSpecieName[2].Data() ; + break; + case kCosmic: + return fkgEventSpecieName[3].Data() ; + break; + case kCalib: + return fkgEventSpecieName[4].Data() ; + break; + default: + return fkgEventSpecieName[5].Data() ; + break; + } +} + +const char * AliRecoParam::GetEventSpecieName(Int_t esIndex) +{ + if ( esIndex >= 0 && esIndex < kNSpecies) + return fkgEventSpecieName[esIndex].Data() ; + else + return fkgEventSpecieName[kNSpecies].Data() ; +}