From fb81cdb776bac74dcb771877467e6ebcd49c7483 Mon Sep 17 00:00:00 2001 From: loizides Date: Thu, 22 Sep 2011 04:03:37 +0000 Subject: [PATCH] handle emcal led events and flag or skip them according to options given --- .../EmcalTasks/AliEmcalPhysicsSelection.cxx | 102 ++++++++++++++++-- .../EmcalTasks/AliEmcalPhysicsSelection.h | 34 +++++- .../AliEmcalPhysicsSelectionTask.cxx | 33 +++++- .../EmcalTasks/AliEmcalPhysicsSelectionTask.h | 3 +- 4 files changed, 159 insertions(+), 13 deletions(-) diff --git a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.cxx b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.cxx index 11a86023469..fb06d8ce9df 100644 --- a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.cxx +++ b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.cxx @@ -6,21 +6,111 @@ ClassImp(AliEmcalPhysicsSelection) +AliEmcalPhysicsSelection::AliEmcalPhysicsSelection() : + AliPhysicsSelection(), + fMarkFastOnly(0), + fMarkLedEvent(0), + fSkipFastOnly(0), + fSkipLedEvent(0), + fCellMinE(2), + fClusMinE(5), + fIsFastOnly(0), + fIsLedEvent(0), + fIsGoodEvent(0), + fCellMaxE(0), + fClusMaxE(0) +{ + // Default constructor. +} + //__________________________________________________________________________________________________ UInt_t AliEmcalPhysicsSelection::GetSelectionMask(const TObject* obj) { const AliESDEvent *ev = static_cast(obj); UInt_t res = IsCollisionCandidate(ev); - if (fExcludeFastOnly) { - if (res & AliVEvent::kFastOnly) { - Int_t ncells = ev->GetEMCALCells()->GetNumberOfCells(); - if (ncells>0) { - AliFatal(Form("Number of cells %d, even though EMCAL should not be in fast only partition.",ncells)); + fIsFastOnly = kFALSE; + fIsGoodEvent = kFALSE; + fIsLedEvent = kFALSE; + fCellMaxE = 0; + fClusMaxE = 0; + + if ((res & AliVEvent::kAnyINT) || + (res & AliVEvent::kEMC1) || + (res & AliVEvent::kEMC7)) + fIsGoodEvent = kTRUE; + + AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager(); + am->LoadBranch("EMCALCells."); + am->LoadBranch("CaloClusters"); + + AliESDCaloCells *cells = ev->GetEMCALCells(); + const Short_t nCells = cells->GetNumberOfCells(); + + // mark LHC11a fast only partition if requested + if (res & AliVEvent::kFastOnly) { + fIsFastOnly = kTRUE; + if (fMarkFastOnly||fSkipFastOnly) { + if (nCells>0) { + AliFatal(Form("Number of cells %d, even though EMCAL should not be in fast only partition.",nCells)); } - return 0; + fIsGoodEvent = kFALSE; } } + // count cells above threshold + Int_t nCellCount[10] = {0,0,0,0,0,0,0,0,0,0}; + for(Int_t iCell=0; iCellGetCellNumber(iCell); + Double_t cellE = cells->GetCellAmplitude(cellId); + Int_t sm = cellId / (24*48); + if (cellE>0.1) + ++nCellCount[sm]; + if (cellE>fCellMaxE) + fCellMaxE = cellE; + } + + const Int_t nCaloClusters = ev->GetNumberOfCaloClusters(); + for(Int_t iClus = 0; iClusGetCaloCluster(iClus); + if (!cl->IsEMCAL()) + continue; + Double_t e = cl->E(); + if (e>fClusMaxE) + fClusMaxE = e; + } + + // bad cell criterion for LHC11a from + // https://indico.cern.ch/materialDisplay.py?contribId=4&materialId=slides&confId=147067 + const Int_t runN = ev->GetRunNumber(); + if ((runN>=144871) && (runN<=146860)) { + if (nCellCount[4] > 100) + fIsLedEvent = kTRUE; + else { + if ((runN>=146858) && (runN<=146860)) { + if ((res&AliVEvent::kMB) && (nCellCount[3]>=21)) + fIsLedEvent = kTRUE; + else if ((res&AliVEvent::kEMC1) && (nCellCount[3]>=35)) + fIsLedEvent = kTRUE; + } + } + if (fIsLedEvent) { + fIsGoodEvent = kFALSE; + } + } + + if (fCellMaxE>=fCellMinE) + res |= kEmcalHC; + + if (fClusMaxE>=fClusMinE) + res |= kEmcalHT; + + if (fIsGoodEvent) + res |= kEmcalOk; + + if ((fSkipLedEvent && fIsLedEvent) || + (fSkipFastOnly && fIsFastOnly)) + res = 0; + return res; } diff --git a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.h b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.h index d304341817a..bef1e62b480 100644 --- a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.h +++ b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelection.h @@ -8,16 +8,42 @@ class AliEmcalPhysicsSelection: public AliPhysicsSelection { public: - AliEmcalPhysicsSelection() : AliPhysicsSelection(), fExcludeFastOnly(0) {;} + enum EOfflineEmcalTypes { + kEmcalHC = BIT(28), //=true when EMCAL cell above given Et found + kEmcalHT = BIT(29), //=true when EMCAL cluster above given Et found + kEmcalOk = BIT(31), //=false when EMCAL good event criteria are not met + }; + + AliEmcalPhysicsSelection(); virtual ~AliEmcalPhysicsSelection() {;} virtual UInt_t GetSelectionMask(const TObject* obj); - void SetExcludeFastOnly(Bool_t b) { fExcludeFastOnly = b; } + void SetCellMinE(Double_t e) { fCellMinE = e; } + void SetClusMinE(Double_t e) { fClusMinE = e; } + void SetMarkFastOnly(Bool_t b) { fMarkFastOnly = b; } + void SetMarkLedEvent(Bool_t b) { fMarkLedEvent = b; } + void SetSkipFastOnly(Bool_t b) { fSkipFastOnly = b; } + void SetSkipLedEvent(Bool_t b) { fSkipLedEvent = b; } + Double_t GetCellMaxE() const { return fCellMaxE; } + Double_t GetClusMaxE() const { return fClusMaxE; } + Bool_t IsFastOnly() const { return fIsFastOnly; } + Bool_t IsLedEvent() const { return fIsLedEvent; } + Bool_t IsGoodEvent() const { return fIsGoodEvent; } protected: - Bool_t fExcludeFastOnly; //=true then exclude FastOnly events (only for LHC11a) + Bool_t fMarkFastOnly; //=true then mark FastOnly events (only for LHC11a) + Bool_t fMarkLedEvent; //=true then mark Led events (only for LHC11a) + Bool_t fSkipFastOnly; //=true then skip FastOnly events (only for LHC11a) + Bool_t fSkipLedEvent; //=true then skip Led events (only for LHC11a) + Double_t fCellMinE; //minimum cell energy + Double_t fClusMinE; //minimum clus energy + Bool_t fIsFastOnly; //!=true if FASTONLY event is found + Bool_t fIsLedEvent; //!=true if LED event is found + Bool_t fIsGoodEvent; //!=true if good EMCAL event + Double_t fCellMaxE; //!maximum cell energy in event + Double_t fClusMaxE; //!maximum clus energy in event - ClassDef(AliEmcalPhysicsSelection, 1); // My physics selection + ClassDef(AliEmcalPhysicsSelection, 2); // Emcal physics selection }; #endif diff --git a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.cxx b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.cxx index 3f65bb82c88..daff8b9847f 100644 --- a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.cxx +++ b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.cxx @@ -21,7 +21,8 @@ AliEmcalPhysicsSelectionTask::AliEmcalPhysicsSelectionTask() : fDoWriteHistos(1), fNCalled(0), fNAccepted(0), - fHAcc(0) + fHAcc(0), + fHEvtTypes(0) { // Default constructor. } @@ -32,7 +33,8 @@ AliEmcalPhysicsSelectionTask::AliEmcalPhysicsSelectionTask(const char* opt) : fDoWriteHistos(1), fNCalled(0), fNAccepted(0), - fHAcc(0) + fHAcc(0), + fHEvtTypes(0) { // Constructor. @@ -62,6 +64,16 @@ void AliEmcalPhysicsSelectionTask::UserCreateOutputObjects() AliPhysicsSelectionTask::UserCreateOutputObjects(); fHAcc = new TH1D("hEvCount",";0=rej/1=acc;#",2,-0.5,1.5); fOutput->Add(fHAcc); + fHEvtTypes = new TH1D("hEvtTypes",";#",8,-0.5,7.5); + fHEvtTypes->GetXaxis()->SetBinLabel(1,"All"); + fHEvtTypes->GetXaxis()->SetBinLabel(2,"MB"); + fHEvtTypes->GetXaxis()->SetBinLabel(3,"FO"); + fHEvtTypes->GetXaxis()->SetBinLabel(4,"EMC"); + fHEvtTypes->GetXaxis()->SetBinLabel(5,"Good"); + fHEvtTypes->GetXaxis()->SetBinLabel(6,"HC"); + fHEvtTypes->GetXaxis()->SetBinLabel(7,"HT"); + fHEvtTypes->GetXaxis()->SetBinLabel(8,"LED"); + fOutput->Add(fHEvtTypes); if (!fDoWriteHistos) { fOutput->Remove(fPhysicsSelection); } @@ -83,6 +95,23 @@ void AliEmcalPhysicsSelectionTask::UserExec(const Option_t *opt) } else { fHAcc->Fill(0); } + + AliEmcalPhysicsSelection *ps=static_cast(fPhysicsSelection); + fHEvtTypes->Fill(0); + if (res&AliVEvent::kAnyINT) + fHEvtTypes->Fill(1); + if (ps->IsFastOnly()) + fHEvtTypes->Fill(2); + if ((res&AliVEvent::kEMC1) || (res&AliVEvent::kEMC7)) + fHEvtTypes->Fill(3); + if (ps->IsGoodEvent()) + fHEvtTypes->Fill(4); + if (res&AliEmcalPhysicsSelection::kEmcalHC) + fHEvtTypes->Fill(5); + if (res&AliEmcalPhysicsSelection::kEmcalHT) + fHEvtTypes->Fill(6); + if (ps->IsLedEvent()) + fHEvtTypes->Fill(7); } //__________________________________________________________________________________________________ diff --git a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.h b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.h index 4481a21b7f2..fc9ad478152 100644 --- a/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.h +++ b/PWG4/UserTasks/EmcalTasks/AliEmcalPhysicsSelectionTask.h @@ -27,11 +27,12 @@ class AliEmcalPhysicsSelectionTask : public AliPhysicsSelectionTask { Int_t fNCalled; //!how often was the PS called Int_t fNAccepted; //!how often was the event accepted TH1 *fHAcc; //!acceptance histo + TH1 *fHEvtTypes; //!event types histo private: AliEmcalPhysicsSelectionTask(const AliEmcalPhysicsSelectionTask&); AliEmcalPhysicsSelectionTask& operator=(const AliEmcalPhysicsSelectionTask&); - ClassDef(AliEmcalPhysicsSelectionTask, 1); // Emcal physics selection task + ClassDef(AliEmcalPhysicsSelectionTask, 2); // Emcal physics selection task }; #endif -- 2.43.0