X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ANALYSIS%2FAliPhysicsSelection.cxx;h=c0f942f70ad71f34dcdd5399e193d558a5f88f3f;hb=0ab8c127930f797eeee1e808b627b30f6b0099cb;hp=47b785afd9fda3ad24ccb964ba79382588e5ba88;hpb=559b5ed7cddfd4024f1785abd9880e0f532276b7;p=u%2Fmrichter%2FAliRoot.git diff --git a/ANALYSIS/AliPhysicsSelection.cxx b/ANALYSIS/AliPhysicsSelection.cxx index 47b785afd9f..c0f942f70ad 100644 --- a/ANALYSIS/AliPhysicsSelection.cxx +++ b/ANALYSIS/AliPhysicsSelection.cxx @@ -124,11 +124,16 @@ #include "AliOADBPhysicsSelection.h" #include "AliOADBFillingScheme.h" #include "AliOADBTriggerAnalysis.h" +#include "AliInputEventHandler.h" +#include "AliAnalysisManager.h" +using std::cout; +using std::endl; ClassImp(AliPhysicsSelection) AliPhysicsSelection::AliPhysicsSelection() : AliAnalysisCuts("AliPhysicsSelection", "AliPhysicsSelection"), + fPassName(""), fCurrentRun(-1), fMC(kFALSE), fCollTrigClasses(), @@ -490,6 +495,9 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) // (with all AliTriggerAnalysis tokens? Only we the tokens // actually used in the selection?) and clean up + AliESDVZERO *esdV0 = aEsd->GetVZEROData(); + if(!esdV0) fSkipV0 = kTRUE; + // hardware trigger Int_t fastORHW = triggerAnalysis->EvaluateTrigger(aEsd, AliTriggerAnalysis::kSPDGFO); // SPD number of chips from trigger bits (!) // Int_t fastORHWL1 = triggerAnalysis->EvaluateTrigger(aEsd, AliTriggerAnalysis::kSPDGFOL1); // SPD number of chips from trigger bits in second layer (!) @@ -522,8 +530,11 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) Bool_t zdcA = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kZDCTDCA)); Bool_t zdcC = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kZDCTDCC)); Bool_t zdcTime = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kZDCTime)); + Bool_t znABG = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kZNABG)); + Bool_t znCBG = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kZNCBG)); Bool_t laserCut = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kTPCLaserWarmUp)); + Bool_t hvDipCut = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kTPCHVdip)); // Some "macros" Bool_t mb1 = (fastOROffline > 0 || v0A || v0C) && (!v0BG); @@ -539,6 +550,8 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) if(fmd) ntrig += 1; if(ssdClusters>1) ntrig += 1;*/ + // // EMCAL offline trigger validation + // Bool_t emcCut = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kEMCAL)); // <--- @@ -605,6 +618,9 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) if (laserCut) fHistStatistics[iHistStat]->Fill(kStatLaserCut, i); + if (hvDipCut) + fHistStatistics[iHistStat]->Fill(kHVdipCut, i); + //if(ntrig >= 2 && !v0BG) // fHistStatistics[iHistStat]->Fill(kStatAny2Hits, i); @@ -629,10 +645,17 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) if (zdcTime) fHistStatistics[iHistStat]->Fill(kStatZDCTime, i); + if (znABG) + fHistStatistics[iHistStat]->Fill(kStatZNABG, i); + if (znCBG) + fHistStatistics[iHistStat]->Fill(kStatZNCBG, i); if (v0A && v0C && !v0BG && (!bgID && fIsPP)) fHistStatistics[iHistStat]->Fill(kStatV0, i); + if (v0A && v0C && !v0BG && (!bgID && fIsPP) && !znABG && !znCBG) + fHistStatistics[iHistStat]->Fill(kStatV0ZN, i); + if (bgID && !v0BG) fHistStatistics[iHistStat]->Fill(kStatBG, i); @@ -857,6 +880,7 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) Bool_t AliPhysicsSelection::Initialize(const AliESDEvent* aEsd) { + DetectPassName(); // initializes the object for the given ESD AliInfo(Form("Initializing for beam type: %s", aEsd->GetESDRun()->GetBeamType())); @@ -886,7 +910,7 @@ Bool_t AliPhysicsSelection::Initialize(Int_t runNumber) AliInfo("Using Standard OADB"); AliOADBContainer * psContainer = (AliOADBContainer*) foadb->Get("physSel"); if (!psContainer) AliFatal("Cannot fetch OADB container for Physics selection"); - fPSOADB = (AliOADBPhysicsSelection*) psContainer->GetObject(runNumber, fIsPP ? "oadbDefaultPP" : "oadbDefaultPbPb"); + fPSOADB = (AliOADBPhysicsSelection*) psContainer->GetObject(runNumber, fIsPP ? "oadbDefaultPP" : "oadbDefaultPbPb",fPassName); if (!fPSOADB) AliFatal(Form("Cannot find physics selection object for run %d", runNumber)); } else { AliInfo("Using Custom OADB"); @@ -894,13 +918,13 @@ Bool_t AliPhysicsSelection::Initialize(Int_t runNumber) if(!fFillOADB || !fUsingCustomClasses) { // if it's already set and custom class is required, we use the one provided by the user AliOADBContainer * fillContainer = (AliOADBContainer*) foadb->Get("fillScheme"); if (!fillContainer) AliFatal("Cannot fetch OADB container for filling scheme"); - fFillOADB = (AliOADBFillingScheme*) fillContainer->GetObject(runNumber, "Default"); + fFillOADB = (AliOADBFillingScheme*) fillContainer->GetObject(runNumber, "Default",fPassName); if (!fFillOADB) AliFatal(Form("Cannot find filling scheme object for run %d", runNumber)); } if(!fTriggerOADB || !fUsingCustomClasses) { // if it's already set and custom class is required, we use the one provided by the user AliOADBContainer * triggerContainer = (AliOADBContainer*) foadb->Get("trigAnalysis"); if (!triggerContainer) AliFatal("Cannot fetch OADB container for trigger analysis"); - fTriggerOADB = (AliOADBTriggerAnalysis*) triggerContainer->GetObject(runNumber, "Default"); + fTriggerOADB = (AliOADBTriggerAnalysis*) triggerContainer->GetObject(runNumber, "Default",fPassName); fTriggerOADB->Print(); if (!fTriggerOADB) AliFatal(Form("Cannot find trigger analysis object for run %d", runNumber)); } @@ -994,13 +1018,15 @@ Bool_t AliPhysicsSelection::Initialize(Int_t runNumber) AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis; triggerAnalysis->SetAnalyzeMC(fMC); - triggerAnalysis->EnableHistograms(); + triggerAnalysis->EnableHistograms(fIsPP); triggerAnalysis->SetSPDGFOThreshhold(1); triggerAnalysis->SetDoFMD(kFALSE); triggerAnalysis->SetCorrZDCCutParams(fTriggerOADB->GetZDCCutRefSumCorr(), fTriggerOADB->GetZDCCutRefDeltaCorr(), fTriggerOADB->GetZDCCutSigmaSumCorr(), fTriggerOADB->GetZDCCutSigmaDeltaCorr()); + triggerAnalysis->SetZNCorrCutParams(fTriggerOADB->GetZDCCutZNATimeCorrMin(),fTriggerOADB->GetZDCCutZNATimeCorrMax(), + fTriggerOADB->GetZDCCutZNCTimeCorrMin(),fTriggerOADB->GetZDCCutZNCTimeCorrMax()); fTriggerAnalysis.Add(triggerAnalysis); } @@ -1111,16 +1137,20 @@ TH2F * AliPhysicsSelection::BookHistStatistics(const char * tag) { h->GetXaxis()->SetBinLabel(kStatT0BG, "T0BG"); h->GetXaxis()->SetBinLabel(kStatT0PileUp, "T0 PileUp"); h->GetXaxis()->SetBinLabel(kStatLaserCut, "TPC Laser Wup Cut"); + h->GetXaxis()->SetBinLabel(kHVdipCut, "TPC HV dip Cut"); h->GetXaxis()->SetBinLabel(kStatV0ABG, "V0A BG"); h->GetXaxis()->SetBinLabel(kStatV0CBG, "V0C BG"); h->GetXaxis()->SetBinLabel(kStatZDCA, "ZDCA"); h->GetXaxis()->SetBinLabel(kStatZDCC, "ZDCC"); h->GetXaxis()->SetBinLabel(kStatZDCAC, "ZDCA & ZDCC"); h->GetXaxis()->SetBinLabel(kStatZDCTime, "ZDC Time Cut"); + h->GetXaxis()->SetBinLabel(kStatZNABG, "ZNA BG"); + h->GetXaxis()->SetBinLabel(kStatZNCBG, "ZNC BG"); h->GetXaxis()->SetBinLabel(kStatMB1, "(FO >= 1 | V0A | V0C) & !V0 BG"); h->GetXaxis()->SetBinLabel(kStatMB1Prime, "(FO >= 2 | (FO >= 1 & (V0A | V0C)) | (V0A &v0C) ) & !V0 BG"); //h->GetXaxis()->SetBinLabel(kStatFO1AndV0, "FO >= 1 & (V0A | V0C) & !V0 BG"); h->GetXaxis()->SetBinLabel(kStatV0, "V0A & V0C & !V0 BG & !BG ID"); + h->GetXaxis()->SetBinLabel(kStatV0ZN, "V0A & V0C & !V0 BG & !BG ID & !ZN BG"); h->GetXaxis()->SetBinLabel(kStatOffline, "Offline Trigger"); //h->GetXaxis()->SetBinLabel(kStatAny2Hits, "2 Hits & !V0 BG"); h->GetXaxis()->SetBinLabel(kStatBG, "Background identification"); @@ -1632,7 +1662,7 @@ void AliPhysicsSelection::SaveHistograms(const char* folder) for (Int_t iTrigClass = 0; iTrigClass < kNClasses; iTrigClass++){ delete [] rows[iTrigClass]; } - } + } // end of ComputeBackground fHistStatistics[0]->Write(); fHistStatistics[1]->Write(); @@ -1929,3 +1959,68 @@ void AliPhysicsSelection::AddBGTriggerClass(const char* className){ fUsingCustomClasses = kTRUE; } + + +void AliPhysicsSelection::DetectPassName(){ + if (fMC) return; + AliInputEventHandler* handler = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!handler) return; + TObject* prodInfoData = handler->GetUserInfo()->FindObject("alirootVersion"); + TString filePath; + if (prodInfoData) { + // take filePath from UserInfo - available only from ~LHC12d period + TString str(prodInfoData->GetTitle()); + TObjArray* tokens = str.Tokenize(";"); + for (Int_t i=0;i<=tokens->GetLast();i++) { + TObjString* stObj = (TObjString*) tokens->At(i); + TString s = stObj->GetString(); + if (s.Contains("OutputDir")) { + filePath = s; + break; + } + } + delete tokens; + } else { + // guess name from the input filename + // may be a problem for local analysis + filePath = handler->GetTree()->GetCurrentFile()->GetName(); + } + + TString passName=""; + + TObjArray* tokens = filePath.Tokenize("/"); + for (Int_t i=0;i<=tokens->GetLast();i++) { + TObjString* stObj = (TObjString*) tokens->At(i); + TString s = stObj->GetString(); + if (s.Contains("pass")) { + passName = s; + break; + } + } + delete tokens; + // + // temporary patch for LEGO train runners + // + if (!passName.Contains("pass")){ // try with "_" as a fallback (as it is the case in the test data of the LEGO train) + TObjArray* tokens2 = filePath.Tokenize("_"); + for (Int_t i=0;i<=tokens2->GetLast();i++) { + TObjString* stObj = (TObjString*) tokens2->At(i); + TString s = stObj->GetString(); + if (s.Contains("pass")) { + passName = s; + break; + } + } + delete tokens2; + } + + + if (!passName.Contains("pass")){ + AliError(" Failed to find reconstruction pass name:"); + AliError(" --> If these are MC data: please set kTRUE first argument of AddTaskPhysicsSelection"); + AliFatal(" --> If these are real data: please insert pass name inside the path of your local file, e.g. /your_path/pass2/AliESDs.root"); + } + + AliInfo(Form("pass name: %s\n",passName.Data())); + fPassName = passName; +}