From 733f054287849e9387057f9f8a445b6236ab6bd5 Mon Sep 17 00:00:00 2001 From: jgrosseo Date: Thu, 4 Feb 2010 17:44:32 +0000 Subject: [PATCH] adding v0 fake counting --- ANALYSIS/AliPhysicsSelection.cxx | 37 +++++++++++++++--------- ANALYSIS/AliPhysicsSelectionTask.h | 2 +- ANALYSIS/AliTriggerAnalysis.cxx | 45 +++++++++++++++++++++++++++++- ANALYSIS/AliTriggerAnalysis.h | 9 ++++-- 4 files changed, 75 insertions(+), 18 deletions(-) diff --git a/ANALYSIS/AliPhysicsSelection.cxx b/ANALYSIS/AliPhysicsSelection.cxx index e76baa5548b..5dd4d09ef6c 100644 --- a/ANALYSIS/AliPhysicsSelection.cxx +++ b/ANALYSIS/AliPhysicsSelection.cxx @@ -233,8 +233,12 @@ Bool_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) // replay CINT1B hardware trigger // TODO this has to depend on the actual hardware trigger (and that depends on the run...) Int_t fastORHW = triggerAnalysis->SPDFiredChips(aEsd, 1); // SPD number of chips from trigger bits (!) - Bool_t v0A = triggerAnalysis->IsOfflineTriggerFired(aEsd, AliTriggerAnalysis::kV0A); - Bool_t v0C = triggerAnalysis->IsOfflineTriggerFired(aEsd, AliTriggerAnalysis::kV0C); + + AliTriggerAnalysis::V0Decision v0ADecision = triggerAnalysis->V0Trigger(aEsd, AliTriggerAnalysis::kASide); + AliTriggerAnalysis::V0Decision v0CDecision = triggerAnalysis->V0Trigger(aEsd, AliTriggerAnalysis::kCSide); + + Bool_t v0A = (v0ADecision == AliTriggerAnalysis::kV0BB); + Bool_t v0C = (v0CDecision == AliTriggerAnalysis::kV0BB); if (fastORHW == 0 && !v0A && !v0C) { @@ -246,8 +250,8 @@ Bool_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) // offline trigger Int_t fastOROffline = triggerAnalysis->SPDFiredChips(aEsd, 0); // SPD number of chips from clusters (!) - Bool_t v0ABG = triggerAnalysis->IsOfflineTriggerFired(aEsd, AliTriggerAnalysis::kV0ABG); - Bool_t v0CBG = triggerAnalysis->IsOfflineTriggerFired(aEsd, AliTriggerAnalysis::kV0CBG); + Bool_t v0ABG = (v0ADecision == AliTriggerAnalysis::kV0BG); + Bool_t v0CBG = (v0CDecision == AliTriggerAnalysis::kV0BG); Bool_t v0BG = v0ABG || v0CBG; if (fastOROffline > 0) @@ -264,34 +268,39 @@ Bool_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) if (v0CBG) fHistStatistics->Fill(8, i); - if (fastOROffline > 1 && !v0BG) + if (v0ADecision == AliTriggerAnalysis::kV0Fake) fHistStatistics->Fill(9, i); + if (v0CDecision == AliTriggerAnalysis::kV0Fake) + fHistStatistics->Fill(10, i); + + if (fastOROffline > 1 && !v0BG) + fHistStatistics->Fill(11, i); if ((fastOROffline > 0 || v0A || v0C) && !v0BG) - fHistStatistics->Fill(10, i); + fHistStatistics->Fill(12, i); if (fastOROffline > 0 && (v0A || v0C) && !v0BG) - fHistStatistics->Fill(11, i); + fHistStatistics->Fill(13, i); if (v0A && v0C && !v0BG) - fHistStatistics->Fill(12, i); - + fHistStatistics->Fill(14, i); + if (fastOROffline > 1 || (fastOROffline > 0 && (v0A || v0C)) || (v0A && v0C)) { if (!v0BG) { - fHistStatistics->Fill(13, i); + fHistStatistics->Fill(15, i); if (fBackgroundIdentification && !fBackgroundIdentification->IsSelected(const_cast (aEsd))) { AliDebug(AliLog::kDebug, "Rejecting event because of background identification"); - fHistStatistics->Fill(14, i); + fHistStatistics->Fill(16, i); } else { AliDebug(AliLog::kDebug, "Accepted event for histograms"); - fHistStatistics->Fill(15, i); + fHistStatistics->Fill(17, i); fHistBunchCrossing->Fill(aEsd->GetBunchCrossNumber(), i); if (i < fCollTrigClasses.GetEntries() || fSkipTriggerClassSelection) accept = kTRUE; @@ -392,7 +401,7 @@ Bool_t AliPhysicsSelection::Initialize(UInt_t runNumber) if (fHistStatistics) delete fHistStatistics; - fHistStatistics = new TH2F("fHistStatistics", "fHistStatistics;;", 15, 0.5, 15.5, count, -0.5, -0.5 + count); + fHistStatistics = new TH2F("fHistStatistics", "fHistStatistics;;", 17, 0.5, 17.5, count, -0.5, -0.5 + count); Int_t n = 1; fHistStatistics->GetXaxis()->SetBinLabel(n++, "Trigger class"); @@ -403,6 +412,8 @@ Bool_t AliPhysicsSelection::Initialize(UInt_t runNumber) fHistStatistics->GetXaxis()->SetBinLabel(n++, "V0C"); fHistStatistics->GetXaxis()->SetBinLabel(n++, "V0A BG"); fHistStatistics->GetXaxis()->SetBinLabel(n++, "V0C BG"); + fHistStatistics->GetXaxis()->SetBinLabel(n++, "V0A Fake"); + fHistStatistics->GetXaxis()->SetBinLabel(n++, "V0C Fake"); fHistStatistics->GetXaxis()->SetBinLabel(n++, "FO >= 2 &!V0 BG"); fHistStatistics->GetXaxis()->SetBinLabel(n++, "(FO >= 1 | V0A | V0C) & !V0 BG"); fHistStatistics->GetXaxis()->SetBinLabel(n++, "FO >= 1 & (V0A | V0C) & !V0 BG"); diff --git a/ANALYSIS/AliPhysicsSelectionTask.h b/ANALYSIS/AliPhysicsSelectionTask.h index de6752e83b8..e611f6b0c33 100644 --- a/ANALYSIS/AliPhysicsSelectionTask.h +++ b/ANALYSIS/AliPhysicsSelectionTask.h @@ -25,7 +25,7 @@ class AliPhysicsSelectionTask : public AliAnalysisTaskSE { void SetOption(const char* opt) { fOption = opt; } void SetPhysicsSelection(AliPhysicsSelection* physicsSelection) { fPhysicsSelection = physicsSelection; } - AliPhysicsSelection* GetPhysicsSelection() const {return fPhysicsSelection; } + AliPhysicsSelection* GetPhysicsSelection() const { return fPhysicsSelection; } protected: TList* fOutput; //! list send on output slot 1 diff --git a/ANALYSIS/AliTriggerAnalysis.cxx b/ANALYSIS/AliTriggerAnalysis.cxx index 1ae3ce76bbe..c4c6ce89f15 100644 --- a/ANALYSIS/AliTriggerAnalysis.cxx +++ b/ANALYSIS/AliTriggerAnalysis.cxx @@ -29,6 +29,7 @@ #include #include "TParameter.h" #include +#include #include @@ -45,6 +46,7 @@ ClassImp(AliTriggerAnalysis) AliTriggerAnalysis::AliTriggerAnalysis() : fSPDGFOThreshold(2), + fSPDGFOEfficiency(0), fV0TimeOffset(0), fFMDLowCut(0.2), fFMDHitCut(0.5), @@ -175,6 +177,8 @@ const char* AliTriggerAnalysis::GetTriggerName(Trigger trigger) case kSPDGFOBits : str = "SPD GFO Bits"; break; case kV0A : str = "V0 A BB"; break; case kV0C : str = "V0 C BB"; break; + case kV0OR : str = "V0 OR BB"; break; + case kV0AND : str = "V0 AND BB"; break; case kV0ABG : str = "V0 A BG"; break; case kV0CBG : str = "V0 C BG"; break; case kZDC : str = "ZDC"; break; @@ -183,6 +187,7 @@ const char* AliTriggerAnalysis::GetTriggerName(Trigger trigger) case kFMDA : str = "FMD A"; break; case kFMDC : str = "FMD C"; break; case kFPANY : str = "SPD GFO | V0 | ZDC | FMD"; break; + case kNSD1 : str = "NSD1"; break; default: str = ""; break; } @@ -322,6 +327,18 @@ Bool_t AliTriggerAnalysis::IsOfflineTriggerFired(const AliESDEvent* aEsd, Trigge return kTRUE; break; } + case kV0OR: + { + if (V0Trigger(aEsd, kASide) == kV0BB || V0Trigger(aEsd, kCSide) == kV0BB) + return kTRUE; + break; + } + case kV0AND: + { + if (V0Trigger(aEsd, kASide) == kV0BB && V0Trigger(aEsd, kCSide) == kV0BB) + return kTRUE; + break; + } case kV0ABG: { if (V0Trigger(aEsd, kASide) == kV0BG) @@ -370,6 +387,12 @@ Bool_t AliTriggerAnalysis::IsOfflineTriggerFired(const AliESDEvent* aEsd, Trigge return kTRUE; break; } + case kNSD1: + { + if (SPDFiredChips(aEsd, 0) >= 5 || (V0Trigger(aEsd, kASide) == kV0BB && V0Trigger(aEsd, kCSide) == kV0BB)) + return kTRUE; + break; + } default: { AliFatal(Form("Trigger type %d not implemented", triggerNoFlags)); @@ -528,12 +551,21 @@ Int_t AliTriggerAnalysis::SPDFiredChips(const AliESDEvent* aEsd, Int_t origin, B { Int_t nChips = 0; for (Int_t i=0; i<1200; i++) + { if (mult->TestFastOrFiredChips(i) == kTRUE) { + // efficiency simulation (if enabled) + if (fSPDGFOEfficiency) + { + if (gRandom->Uniform() > fSPDGFOEfficiency->GetBinContent(i+1)) + continue; + } + nChips++; if (fillHists) fHistFiredBitsSPD->Fill(i); } + } return nChips; } @@ -555,7 +587,11 @@ AliTriggerAnalysis::V0Decision AliTriggerAnalysis::V0Trigger(const AliESDEvent* { // Returns the V0 trigger decision in V0A | V0C // - // Based on algorithm by Cvetan Cheshkov + // Returns kV0Fake if the calculated average time is in a window where neither BB nor BG is expected. + // The rate of such triggers can be used to estimate the background. Note that the rate has to be + // rescaled with the size of the windows (numerical values see below in the code) + // + // Based on an algorithm by Cvetan Cheshkov AliESDVZERO* esdV0 = aEsd->GetVZEROData(); if (!esdV0) @@ -630,6 +666,8 @@ AliTriggerAnalysis::V0Decision AliTriggerAnalysis::V0Trigger(const AliESDEvent* return kV0BB; if (time > 54 && time < 57.5) return kV0BG; + if (time > 57.5 && time < 72) + return kV0Fake; } if (side == kCSide) @@ -638,6 +676,8 @@ AliTriggerAnalysis::V0Decision AliTriggerAnalysis::V0Trigger(const AliESDEvent* return kV0BB; if (time > 69.5 && time < 73) return kV0BG; + if (time > 55 && time < 69.5) + return kV0Fake; } return kV0Empty; @@ -870,6 +910,9 @@ void AliTriggerAnalysis::SaveHistograms() const fHistFMDSingle->Write(); fHistFMDSum->Write(); + if (fSPDGFOEfficiency) + fSPDGFOEfficiency->Write("fSPDGFOEfficiency"); + fTriggerClasses->Write("fTriggerClasses", TObject::kSingleKey); } diff --git a/ANALYSIS/AliTriggerAnalysis.h b/ANALYSIS/AliTriggerAnalysis.h index d48fdc9ab81..00ff6dd77d1 100644 --- a/ANALYSIS/AliTriggerAnalysis.h +++ b/ANALYSIS/AliTriggerAnalysis.h @@ -24,9 +24,9 @@ class TMap; class AliTriggerAnalysis : public TObject { public: - enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kSPDGFOBits, kV0A, kV0C, kV0ABG, kV0CBG, kZDC, kZDCA, kZDCC, kFMDA, kFMDC, kFPANY, kStartOfFlags = 0x0100, kOfflineFlag = 0x8000 }; // MB1, MB2, MB3 definition from ALICE-INT-2005-025 + enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kSPDGFOBits, kV0A, kV0C, kV0OR, kV0AND, kV0ABG, kV0CBG, kZDC, kZDCA, kZDCC, kFMDA, kFMDC, kFPANY, kNSD1, kStartOfFlags = 0x0100, kOfflineFlag = 0x8000 }; // MB1, MB2, MB3 definition from ALICE-INT-2005-025 enum AliceSide { kASide = 1, kCSide, kCentralBarrel }; - enum V0Decision { kV0Invalid = -1, kV0Empty = 0, kV0BB, kV0BG }; + enum V0Decision { kV0Invalid = -1, kV0Empty = 0, kV0BB, kV0BG, kV0Fake }; AliTriggerAnalysis(); virtual ~AliTriggerAnalysis(); @@ -60,6 +60,7 @@ class AliTriggerAnalysis : public TObject void FillTriggerClasses(const AliESDEvent* aEsd); void SetSPDGFOThreshhold(Int_t t) { fSPDGFOThreshold = t; } + void SetSPDGFOEfficiency(TH1* hist) { fSPDGFOEfficiency = hist; } void SetV0TimeOffset(Float_t offset) { fV0TimeOffset = offset; } void SetFMDThreshold(Float_t low, Float_t hit) { fFMDLowCut = low; fFMDHitCut = hit; } @@ -85,6 +86,8 @@ class AliTriggerAnalysis : public TObject Int_t FMDHitCombinations(const AliESDEvent* aEsd, AliceSide side, Bool_t fillHists = kFALSE); Int_t fSPDGFOThreshold; // number of chips to accept a SPD GF0 trigger + TH1* fSPDGFOEfficiency; // SPD FASTOR efficiency - is applied in SPDFiredChips. Histogram contains efficiency as function of chip number (bin 1..400: first layer; 401..1200: second layer) + Float_t fV0TimeOffset; // time offset applied to the times read from the V0 (in ns) Float_t fFMDLowCut; // @@ -104,7 +107,7 @@ class AliTriggerAnalysis : public TObject Bool_t fMC; // flag if MC is analyzed - ClassDef(AliTriggerAnalysis, 6) + ClassDef(AliTriggerAnalysis, 7) private: AliTriggerAnalysis(const AliTriggerAnalysis&); -- 2.43.0