22 #include <TClonesArray.h>
23 #include <THashList.h>
24 #include <THistManager.h>
25 #include <TLorentzVector.h>
29 #include "AliAnalysisUtils.h"
30 #include "AliCentrality.h"
31 #include "AliEMCALGeometry.h"
32 #include "AliEMCALTriggerPatchInfo.h"
34 #include "AliESDEvent.h"
35 #include "AliInputEventHandler.h"
37 #include "AliVCluster.h"
38 #include "AliVVertex.h"
39 #include "AliMultSelection.h"
40 #include "AliMultEstimator.h"
46 namespace EMCalTriggerPtAnalysis {
51 AliAnalysisTaskEmcalClustersRef::AliAnalysisTaskEmcalClustersRef() :
54 fTriggerSelection(NULL),
57 fClusterContainer(
""),
58 fRequestAnalysisUtil(kTRUE),
59 fTriggerStringFromPatches(kFALSE),
60 fCentralityRange(-999., 999.),
61 fVertexRange(-999., 999.)
69 AliAnalysisTaskEmcalClustersRef::AliAnalysisTaskEmcalClustersRef(
const char *name) :
70 AliAnalysisTaskSE(name),
72 fTriggerSelection(NULL),
75 fClusterContainer(
""),
76 fRequestAnalysisUtil(kTRUE),
77 fTriggerStringFromPatches(kFALSE),
78 fCentralityRange(-999., 999.),
79 fVertexRange(-999., 999.)
81 DefineOutput(1, TList::Class());
87 AliAnalysisTaskEmcalClustersRef::~AliAnalysisTaskEmcalClustersRef() {
88 if(fTriggerSelection)
delete fTriggerSelection;
94 void AliAnalysisTaskEmcalClustersRef::UserCreateOutputObjects(){
95 AliInfo(Form(
"Creating histograms for task %s\n", GetName()));
96 fAnalysisUtil =
new AliAnalysisUtils;
98 TArrayD energybinning;
99 CreateEnergyBinning(energybinning);
100 TArrayD smbinning(14); CreateLinearBinning(smbinning, 21, -0.5, 20.5);
101 TArrayD etabinning; CreateLinearBinning(etabinning, 100, -0.7, 0.7);
102 fHistos =
new THistManager(
"Ref");
103 TString triggers[18] = {
104 "MB",
"EMC7",
"DMC7",
105 "EJ1",
"EJ2",
"EG1",
"EG2",
"DJ1",
"DJ2",
"DG1",
"DG2",
106 "MBexcl",
"EMC7excl",
"DMC7excl",
"EG2excl",
"EJ2excl",
"DG2excl",
"DJ2excl"
108 Double_t encuts[5] = {1., 2., 5., 10., 20.};
109 Int_t sectorsWithEMCAL[10] = {4, 5, 6, 7, 8, 9, 13, 14, 15, 16};
110 for(TString *trg = triggers; trg < triggers +
sizeof(triggers)/
sizeof(TString); trg++){
111 fHistos->CreateTH1(Form(
"hEventCount%s", trg->Data()), Form(
"Event count for trigger class %s", trg->Data()), 1, 0.5, 1.5);
112 fHistos->CreateTH1(Form(
"hClusterEnergy%s", trg->Data()), Form(
"Cluster energy for trigger class %s", trg->Data()), energybinning);
113 fHistos->CreateTH1(Form(
"hClusterET%s", trg->Data()), Form(
"Cluster transverse energy for trigger class %s", trg->Data()), energybinning);
114 fHistos->CreateTH1(Form(
"hClusterEnergyFired%s", trg->Data()), Form(
"Cluster energy for trigger class %s, firing the trigger", trg->Data()), energybinning);
115 fHistos->CreateTH1(Form(
"hClusterETFired%s", trg->Data()), Form(
"Cluster transverse energy for trigger class %s, firing the trigger", trg->Data()), energybinning);
116 fHistos->CreateTH2(Form(
"hClusterEnergySM%s", trg->Data()), Form(
"Cluster energy versus supermodule for trigger class %s", trg->Data()), smbinning, energybinning);
117 fHistos->CreateTH2(Form(
"hClusterETSM%s", trg->Data()), Form(
"Cluster transverse energy versus supermodule for trigger class %s", trg->Data()), smbinning, energybinning);
118 fHistos->CreateTH2(Form(
"hClusterEnergyFiredSM%s", trg->Data()), Form(
"Cluster energy versus supermodule for trigger class %s, firing the trigger", trg->Data()), smbinning, energybinning);
119 fHistos->CreateTH2(Form(
"hClusterETFiredSM%s", trg->Data()), Form(
"Cluster transverse energy versus supermodule for trigger class %s, firing the trigger", trg->Data()), smbinning, energybinning);
120 fHistos->CreateTH2(Form(
"hEtaEnergy%s", trg->Data()), Form(
"Cluster energy vs. eta for trigger class %s", trg->Data()), etabinning, energybinning);
121 fHistos->CreateTH2(Form(
"hEtaET%s", trg->Data()), Form(
"Cluster transverse energy vs. eta for trigger class %s", trg->Data()), etabinning, energybinning);
122 fHistos->CreateTH2(Form(
"hEtaEnergyFired%s", trg->Data()), Form(
"Cluster energy vs. eta for trigger class %s, firing the trigger", trg->Data()), etabinning, energybinning);
123 fHistos->CreateTH2(Form(
"hEtaETFired%s", trg->Data()), Form(
"Cluster transverse energy vs. eta for trigger class %s, firing the trigger", trg->Data()), etabinning, energybinning);
124 for(
int ism = 0; ism < 20; ism++){
125 fHistos->CreateTH2(Form(
"hEtaEnergySM%d%s", ism, trg->Data()), Form(
"Cluster energy vs. eta in Supermodule %d for trigger %s", ism, trg->Data()), etabinning, energybinning);
126 fHistos->CreateTH2(Form(
"hEtaETSM%d%s", ism, trg->Data()), Form(
"Cluster transverse energy vs. eta in Supermodule %d for trigger %s", ism, trg->Data()), etabinning, energybinning);
127 fHistos->CreateTH2(Form(
"hEtaEnergyFiredSM%d%s", ism, trg->Data()), Form(
"Cluster energy vs. eta in Supermodule %d for trigger %s, firing the trigger", ism, trg->Data()), etabinning, energybinning);
128 fHistos->CreateTH2(Form(
"hEtaETFiredSM%d%s", ism, trg->Data()), Form(
"Cluster transverse energy vs. eta in Supermodule %d for trigger %s, firing the trigger", ism, trg->Data()), etabinning, energybinning);
130 for(
int isec = 0; isec < 10; isec++){
131 fHistos->CreateTH2(Form(
"hEtaEnergySec%d%s", sectorsWithEMCAL[isec], trg->Data()), Form(
"Cluster energy vs.eta in tracking sector %d for trigger %s", sectorsWithEMCAL[isec], trg->Data()), etabinning, energybinning);
132 fHistos->CreateTH2(Form(
"hEtaETSec%d%s", sectorsWithEMCAL[isec], trg->Data()), Form(
"Cluster transverse energy vs.eta in tracking sector %d for trigger %s", sectorsWithEMCAL[isec], trg->Data()), etabinning, energybinning);
133 fHistos->CreateTH2(Form(
"hEtaEnergyFiredSec%d%s", sectorsWithEMCAL[isec], trg->Data()), Form(
"Cluster energy vs.eta in tracking sector %d for trigger %s, firing the trigger", sectorsWithEMCAL[isec], trg->Data()), etabinning, energybinning);
134 fHistos->CreateTH2(Form(
"hEtaETFiredSec%d%s", sectorsWithEMCAL[isec], trg->Data()), Form(
"Cluster transverse energy vs.eta in tracking sector %d for trigger %s, firing the trigger", sectorsWithEMCAL[isec], trg->Data()), etabinning, energybinning);
136 for(
int ien = 0; ien < 5; ien++){
137 fHistos->CreateTH2(Form(
"hEtaPhi%dG%s", static_cast<int>(encuts[ien]), trg->Data()), Form(
"cluster #eta-#phi map for clusters with energy larger than %f GeV/c for trigger class %s", encuts[ien], trg->Data()), 100, -0.7, 0.7, 200, 0, 2*TMath::Pi());
138 fHistos->CreateTH2(Form(
"hEtaPhiFired%dG%s", static_cast<int>(encuts[ien]), trg->Data()), Form(
"cluster #eta-#phi map for clusters fired the trigger with energy larger than %f GeV/c for trigger class %s", encuts[ien], trg->Data()), 200, -0.7, 0.7, 200, 0, 2*TMath::Pi());
141 PostData(1, fHistos->GetListOfHistograms());
142 AliDebug(1,
"End creating histograms");
150 void AliAnalysisTaskEmcalClustersRef::UserExec(Option_t *){
151 AliDebug(1, Form(
"%s: UserExec start\n", GetName()));
153 fGeometry = AliEMCALGeometry::GetInstance();
155 fGeometry = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
157 TString triggerstring =
"";
158 TClonesArray *triggerpatches =
dynamic_cast<TClonesArray *
>(fInputEvent->FindListObject(
"EmcalTriggers"));
160 if(fTriggerStringFromPatches){
161 triggerstring = GetFiredTriggerClassesFromPatches(triggerpatches);
163 triggerstring = fInputEvent->GetFiredTriggerClasses();
166 UInt_t selectionstatus = fInputHandler->IsEventSelected();
167 std::stringstream triggerdebug;
168 triggerdebug <<
"Offline bits: " << std::bitset<sizeof(UInt_t) * 8>(selectionstatus);
169 AliDebug(2, triggerdebug.str().c_str());
170 Bool_t isMinBias = selectionstatus & AliVEvent::kINT7,
171 isEJ1 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"EJ1"),
172 isEJ2 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"EJ2"),
173 isEG1 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"EG1"),
174 isEG2 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"EG2"),
175 isEMC7 = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains(
"EMC7"),
176 isDJ1 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"DJ1"),
177 isDJ2 = (selectionstatus & AliVEvent::kEMCEJE) && triggerstring.Contains(
"DJ2"),
178 isDG1 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"DG1"),
179 isDG2 = (selectionstatus & AliVEvent::kEMCEGA) && triggerstring.Contains(
"DG2"),
180 isDMC7 = (selectionstatus & AliVEvent::kEMC7) && triggerstring.Contains(
"DMC7");
181 if(triggerpatches && fTriggerSelection){
182 isEJ1 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgEJ1, triggerpatches);
183 isEJ2 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgEJ2, triggerpatches);
184 isEG1 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgEG1, triggerpatches);
185 isEG2 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgEG2, triggerpatches);
186 isEMC7 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgEL0, triggerpatches);
187 isDJ1 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgDJ1, triggerpatches);
188 isDJ2 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgDJ2, triggerpatches);
189 isDG1 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgDG1, triggerpatches);
190 isDG2 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgDG2, triggerpatches);
191 isDMC7 &= fTriggerSelection->IsOfflineSelected(AliEmcalTriggerOfflineSelection::kTrgDL0, triggerpatches);
193 if(!(isMinBias || isEMC7 || isEG1 || isEG2 || isEJ1 || isEJ2 || isDMC7 || isDG1 || isDG2 || isDJ1 || isDJ2)){
194 AliDebug(1, Form(
"%s: Reject trigger\n", GetName()));
197 AliMultSelection *mult =
dynamic_cast<AliMultSelection *
>(InputEvent()->FindListObject(
"MultSelection"));
198 double centrality = mult ? mult->GetEstimator(
"V0M")->GetPercentile() : -1;
199 AliDebug(1, Form(
"%s: Centrality %f\n", GetName(), centrality));
200 if(!fCentralityRange.IsInRange(centrality)){
201 AliDebug(1, Form(
"%s: reject centrality\n", GetName()));
204 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
205 if(!vtx) vtx = fInputEvent->GetPrimaryVertexSPD();
207 if(vtx->GetNContributors() < 1){
208 AliDebug(1, Form(
"%s: Reject contributors\n", GetName()));
212 if(fRequestAnalysisUtil){
213 AliDebug(1, Form(
"%s: Reject analysis util\n", GetName()));
214 if(fInputEvent->IsA() == AliESDEvent::Class() && fAnalysisUtil->IsFirstEventInChunk(fInputEvent))
return;
215 if(!fAnalysisUtil->IsVertexSelected2013pA(fInputEvent))
return;
216 if(fAnalysisUtil->IsPileUpEvent(fInputEvent))
return;
219 if(!fVertexRange.IsInRange(vtx->GetZ())){
220 AliDebug(1, Form(
"%s: Reject z", GetName()));
223 AliDebug(1, Form(
"%s: Event Selected\n", GetName()));
227 fHistos->FillTH1(
"hEventCountMB", 1);
228 if(!(isEMC7 || isDMC7 || isEJ1 || isEJ2 || isEG1 || isEG2 || isDJ1 || isDJ2 || isDG1 || isDG2)){
229 fHistos->FillTH1(
"hEventCountMBexcl", 1);
234 fHistos->FillTH1(
"hEventCountEMC7", 1);
235 if(!(isEJ1 || isEJ2 || isEG1 || isEG2)){
236 fHistos->FillTH1(
"hEventCountEMC7excl", 1);
240 fHistos->FillTH1(
"hEventCountDMC7", 1);
241 if(!(isDJ1 || isDJ2 || isDG1 || isDG2)){
242 fHistos->FillTH1(
"hEventCountEMC7excl", 1);
247 fHistos->FillTH1(
"hEventCountEJ2", 1);
250 fHistos->FillTH1(
"hEventCountEJ2excl", 1);
254 fHistos->FillTH1(
"hEventCountDJ2", 1);
257 fHistos->FillTH1(
"hEventCountDJ2excl", 1);
262 fHistos->FillTH1(
"hEventCountEJ1", 1);
265 fHistos->FillTH1(
"hEventCountDJ1", 1);
269 fHistos->FillTH1(
"hEventCountEG2", 1);
272 fHistos->FillTH1(
"hEventCountEG2excl", 1);
276 fHistos->FillTH1(
"hEventCountDG2", 1);
279 fHistos->FillTH1(
"hEventCountDG2excl", 1);
284 fHistos->FillTH1(
"hEventCountEG1", 1);
287 fHistos->FillTH1(
"hEventCountDG1", 1);
297 TObjArray clusterEvent(1000);
299 TCollection *clusterArray =
dynamic_cast<TClonesArray *
>(fInputEvent->FindListObject(fClusterContainer.Data()));
301 AliError(Form(
"Cluster array with name %s not found in the event", fClusterContainer.Data()));
302 for(
int icl = 0; icl < fInputEvent->GetNumberOfCaloClusters(); icl++){
303 clusterEvent.Add(fInputEvent->GetCaloCluster(icl));
305 clusterArray = &clusterEvent;
308 Double_t vertexpos[3];
309 fInputEvent->GetPrimaryVertex()->GetXYZ(vertexpos);
311 Double_t
energy, eta, phi;
312 for(TIter clustIter = TIter(clusterArray).Begin(); clustIter != TIter::End(); ++clustIter){
313 AliVCluster *clust =
static_cast<AliVCluster *
>(*clustIter);
314 if(!clust->IsEMCAL())
continue;
315 if(clust->GetIsExotic())
continue;
317 TLorentzVector posvec;
318 energy = clust->GetNonLinCorrEnergy();
319 clust->GetMomentum(posvec, vertexpos);
325 FillClusterHistograms(
"MB", energy, posvec.Et(), eta, phi, NULL);
326 if(!(isEMC7 || isDMC7 || isEJ1 || isEJ2 || isEG1 || isEG2 || isDJ1 || isDJ2 || isDG1 || isDG2)){
327 FillClusterHistograms(
"MBexcl", energy, posvec.Et(), eta, phi, NULL);
331 FillClusterHistograms(
"EMC7", energy, posvec.Et(), eta, phi, NULL);
332 if(!(isEJ1 || isEJ2 || isEG1 || isEG2)){
333 FillClusterHistograms(
"EMC7excl", energy, posvec.Et(), eta, phi, NULL);
337 FillClusterHistograms(
"DMC7", energy, posvec.Et(), eta, phi, NULL);
338 if(!(isDJ1 || isDJ2 || isDG1 || isDG2)){
339 FillClusterHistograms(
"DMC7excl", energy, posvec.Et(), eta, phi, NULL);
344 FindPatchesForTrigger(
"EJ2", triggerpatches, ej2patches);
345 FillClusterHistograms(
"EJ2", energy, posvec.Et(), eta, phi, &ej2patches);
348 FillClusterHistograms(
"EJ2excl", energy, posvec.Et(), eta, phi, &ej2patches);
353 FindPatchesForTrigger(
"DJ2", triggerpatches, dj2patches);
354 FillClusterHistograms(
"DJ2", energy, posvec.Et(), eta, phi, &dj2patches);
357 FillClusterHistograms(
"DJ2excl", energy, posvec.Et(), eta, phi, &dj2patches);
362 FindPatchesForTrigger(
"EJ1", triggerpatches, ej1patches);
363 FillClusterHistograms(
"EJ1", energy, posvec.Et(), eta, phi, &ej1patches);
367 FindPatchesForTrigger(
"DJ1", triggerpatches, dj1patches);
368 FillClusterHistograms(
"DJ1", energy, posvec.Et(), eta, phi, &dj1patches);
372 FindPatchesForTrigger(
"EG2", triggerpatches, eg2patches);
373 FillClusterHistograms(
"EG2", energy, posvec.Et(), eta, phi, &eg2patches);
376 FillClusterHistograms(
"EG2excl", energy, posvec.Et(), eta, phi, &eg2patches);
381 FindPatchesForTrigger(
"DG2", triggerpatches, dg2patches);
382 FillClusterHistograms(
"DG2", energy, posvec.Et(), eta, phi, &dg2patches);
385 FillClusterHistograms(
"DG2excl", energy, posvec.Et(), eta, phi, &dg2patches);
390 FindPatchesForTrigger(
"EG1", triggerpatches, eg1patches);
391 FillClusterHistograms(
"EG1", energy, posvec.Et(), eta, phi, &eg1patches);
395 FindPatchesForTrigger(
"DG1", triggerpatches, dg1patches);
396 FillClusterHistograms(
"DG1", energy, posvec.Et(), eta, phi, &dg1patches);
399 PostData(1, fHistos->GetListOfHistograms());
402 void AliAnalysisTaskEmcalClustersRef::FillClusterHistograms(TString triggerclass,
double energy,
double transverseenergy,
double eta,
double phi, TList *triggerpatches){
403 Bool_t hasTriggerPatch = triggerpatches ? CorrelateToTrigger(eta, phi, triggerpatches) : kFALSE;
404 Int_t supermoduleID = -1, sector = -1;
405 fGeometry->SuperModuleNumberFromEtaPhi(eta, phi, supermoduleID);
406 fHistos->FillTH1(Form(
"hClusterEnergy%s", triggerclass.Data()), energy);
407 fHistos->FillTH1(Form(
"hClusterET%s", triggerclass.Data()), transverseenergy);
408 fHistos->FillTH2(Form(
"hEtaEnergy%s", triggerclass.Data()), eta, energy);
409 fHistos->FillTH2(Form(
"hEtaET%s", triggerclass.Data()), eta, transverseenergy);
410 if(supermoduleID >= 0){
411 fHistos->FillTH2(Form(
"hClusterEnergySM%s", triggerclass.Data()), supermoduleID, energy);
412 fHistos->FillTH2(Form(
"hClusterETSM%s", triggerclass.Data()), supermoduleID, transverseenergy);
413 fHistos->FillTH2(Form(
"hEtaEnergySM%d%s", supermoduleID, triggerclass.Data()), eta, energy);
414 fHistos->FillTH2(Form(
"hEtaETSM%d%s", supermoduleID, triggerclass.Data()), eta, transverseenergy);
415 if(supermoduleID < 12)
416 sector = 4 + int(supermoduleID/2);
418 sector = 13 + int((supermoduleID-12)/2);
419 fHistos->FillTH2(Form(
"hEtaEnergySec%d%s", sector, triggerclass.Data()), eta, energy);
420 fHistos->FillTH2(Form(
"hEtaETSec%d%s", sector, triggerclass.Data()), eta, transverseenergy);
423 fHistos->FillTH1(Form(
"hClusterEnergyFired%s", triggerclass.Data()), energy);
424 fHistos->FillTH1(Form(
"hClusterETFired%s", triggerclass.Data()), energy);
425 fHistos->FillTH2(Form(
"hEtaEnergyFired%s", triggerclass.Data()), eta, energy);
426 fHistos->FillTH2(Form(
"hEtaETFired%s", triggerclass.Data()), eta, energy);
427 if(supermoduleID >= 0){
428 fHistos->FillTH2(Form(
"hClusterEnergyFiredSM%s", triggerclass.Data()), supermoduleID, energy);
429 fHistos->FillTH2(Form(
"hClusterETFiredSM%s", triggerclass.Data()), supermoduleID, transverseenergy);
430 fHistos->FillTH2(Form(
"hEtaEnergyFiredSM%d%s", supermoduleID, triggerclass.Data()), eta, energy);
431 fHistos->FillTH2(Form(
"hEtaETFiredSM%d%s", supermoduleID, triggerclass.Data()), eta, transverseenergy);
432 fHistos->FillTH2(Form(
"hEtaEnergyFiredSec%d%s", sector, triggerclass.Data()), eta, energy);
433 fHistos->FillTH2(Form(
"hEtaETFiredSec%d%s", sector, triggerclass.Data()), eta, transverseenergy);
436 Double_t encuts[5] = {1., 2., 5., 10., 20.};
437 for(
int ien = 0; ien < 5; ien++){
438 if(energy > encuts[ien]){
439 fHistos->FillTH2(Form(
"hEtaPhi%dG%s", static_cast<int>(encuts[ien]), triggerclass.Data()), eta, phi);
441 fHistos->FillTH2(Form(
"hEtaPhiFired%dG%s", static_cast<int>(encuts[ien]), triggerclass.Data()), eta, phi);
451 void AliAnalysisTaskEmcalClustersRef::CreateEnergyBinning(TArrayD& binning)
const {
452 std::vector<double> mybinning;
453 std::map<double,double> definitions;
454 definitions.insert(std::pair<double, double>(1, 0.05));
455 definitions.insert(std::pair<double, double>(2, 0.1));
456 definitions.insert(std::pair<double, double>(4, 0.2));
457 definitions.insert(std::pair<double, double>(7, 0.5));
458 definitions.insert(std::pair<double, double>(16, 1));
459 definitions.insert(std::pair<double, double>(32, 2));
460 definitions.insert(std::pair<double, double>(40, 4));
461 definitions.insert(std::pair<double, double>(50, 5));
462 definitions.insert(std::pair<double, double>(100, 10));
463 definitions.insert(std::pair<double, double>(200, 20));
464 double currentval = 0.;
465 mybinning.push_back(currentval);
466 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
467 double limit =
id->first, binwidth =
id->second;
468 while(currentval < limit){
469 currentval += binwidth;
470 mybinning.push_back(currentval);
473 binning.Set(mybinning.size());
475 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
486 void AliAnalysisTaskEmcalClustersRef::CreateLinearBinning(TArrayD& binning,
int nbins,
double min,
double max)
const {
487 double binwidth = (max-min)/static_cast<double>(nbins);
488 binning.Set(nbins+1);
490 double currentlimit = min + binwidth;
491 for(
int ibin = 0; ibin <
nbins; ibin++){
492 binning[ibin+1] = currentlimit;
493 currentlimit += binwidth;
504 Bool_t AliAnalysisTaskEmcalClustersRef::CorrelateToTrigger(Double_t etaclust, Double_t phiclust, TList *triggerpatches)
const {
505 Bool_t hasfound = kFALSE;
506 for(TIter patchIter = TIter(triggerpatches).Begin(); patchIter != TIter::End(); ++patchIter){
507 Double_t boundaries[4];
508 GetPatchBoundaries(*patchIter, boundaries);
509 Double_t
etamin = TMath::Min(boundaries[0], boundaries[1]),
510 etamax = TMath::Max(boundaries[0], boundaries[1]),
511 phimin = TMath::Min(boundaries[2], boundaries[3]),
512 phimax = TMath::Max(boundaries[2], boundaries[3]);
513 if(etaclust > etamin && etaclust < etamax && phiclust >
phimin && phiclust < phimax){
529 void AliAnalysisTaskEmcalClustersRef::FindPatchesForTrigger(TString triggerclass,
const TClonesArray * triggerpatches, TList &foundtriggers)
const {
530 foundtriggers.Clear();
531 if(!triggerpatches)
return;
532 AliEmcalTriggerOfflineSelection::EmcalTriggerClass myclass = AliEmcalTriggerOfflineSelection::kTrgEL0;
533 if(triggerclass ==
"EG1") myclass = AliEmcalTriggerOfflineSelection::kTrgEG1;
534 if(triggerclass ==
"EG2") myclass = AliEmcalTriggerOfflineSelection::kTrgEG2;
535 if(triggerclass ==
"EJ1") myclass = AliEmcalTriggerOfflineSelection::kTrgEJ1;
536 if(triggerclass ==
"EJ2") myclass = AliEmcalTriggerOfflineSelection::kTrgEJ2;
537 if(triggerclass ==
"DMC7") myclass = AliEmcalTriggerOfflineSelection::kTrgDL0;
538 if(triggerclass ==
"DG1") myclass = AliEmcalTriggerOfflineSelection::kTrgDG1;
539 if(triggerclass ==
"DG2") myclass = AliEmcalTriggerOfflineSelection::kTrgDG2;
540 if(triggerclass ==
"DJ1") myclass = AliEmcalTriggerOfflineSelection::kTrgDJ1;
541 if(triggerclass ==
"DJ2") myclass = AliEmcalTriggerOfflineSelection::kTrgDJ2;
542 AliEMCALTriggerPatchInfo *mypatch = NULL;
543 for(TIter patchiter = TIter(triggerpatches).Begin(); patchiter != TIter::End(); ++patchiter){
544 if(!IsOfflineSimplePatch(*patchiter))
continue;
545 if(AliEmcalTriggerOfflineSelection::IsDCAL(myclass)){
546 if(!SelectDCALPatch(*patchiter))
continue;
548 if(SelectDCALPatch(*patchiter))
continue;
550 if(AliEmcalTriggerOfflineSelection::IsSingleShower(myclass)){
551 if(!SelectSingleShowerPatch(*patchiter))
continue;
553 if(!SelectJetPatch(*patchiter))
continue;
555 double threshold = fTriggerSelection ? fTriggerSelection->GetThresholdForTrigger(myclass) : -1;
556 if(GetPatchEnergy(*patchiter) > threshold) foundtriggers.Add(mypatch);
565 TString AliAnalysisTaskEmcalClustersRef::GetFiredTriggerClassesFromPatches(
const TClonesArray* triggerpatches)
const {
566 TString triggerstring =
"";
567 if(!triggerpatches)
return triggerstring;
568 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0, nDJ1 = 0, nDJ2 = 0, nDG1 = 0, nDG2 = 0;
569 double minADC_J1 = 260.,
573 for(TIter patchIter = TIter(triggerpatches).Begin(); patchIter != TIter::End(); ++patchIter){
574 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(*patchIter);
575 if(!patch->IsOfflineSimple())
continue;
576 if(patch->IsJetHighSimple() && patch->GetADCOfflineAmp() > minADC_J1){
577 if(patch->IsDCalPHOS()) nDJ1++;
580 if(patch->IsJetLowSimple() && patch->GetADCOfflineAmp() > minADC_J2){
581 if(patch->IsDCalPHOS()) nDJ2++;
584 if(patch->IsGammaHighSimple() && patch->GetADCOfflineAmp() > minADC_G1){
585 if(patch->IsDCalPHOS()) nDG1++;
588 if(patch->IsGammaLowSimple() && patch->GetADCOfflineAmp() > minADC_G2){
589 if(patch->IsDCalPHOS()) nDG2++;
593 if(nEJ1) triggerstring +=
"EJ1";
595 if(triggerstring.Length()) triggerstring +=
",";
596 triggerstring +=
"EJ2";
599 if(triggerstring.Length()) triggerstring +=
",";
600 triggerstring +=
"EG1";
603 if(triggerstring.Length()) triggerstring +=
",";
604 triggerstring +=
"EG2";
607 if(triggerstring.Length()) triggerstring +=
",";
608 triggerstring +=
"DJ1";
611 if(triggerstring.Length()) triggerstring +=
",";
612 triggerstring +=
"DJ2";
615 if(triggerstring.Length()) triggerstring +=
",";
616 triggerstring +=
"DG1";
619 if(triggerstring.Length()) triggerstring +=
",";
620 triggerstring +=
"DG2";
622 return triggerstring;
625 void AliAnalysisTaskEmcalClustersRef::GetPatchBoundaries(TObject *o, Double_t *boundaries)
const {
626 AliEMCALTriggerPatchInfo *patch=
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
627 boundaries[0] = patch->GetEtaMin();
628 boundaries[1] = patch->GetEtaMax();
629 boundaries[2] = patch->GetPhiMin();
630 boundaries[3] = patch->GetPhiMax();
633 bool AliAnalysisTaskEmcalClustersRef::IsOfflineSimplePatch(TObject *o)
const {
634 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
635 return patch->IsOfflineSimple();
638 bool AliAnalysisTaskEmcalClustersRef::SelectDCALPatch(TObject *o)
const {
639 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
640 return patch->GetRowStart() >= 64;
643 bool AliAnalysisTaskEmcalClustersRef::SelectSingleShowerPatch(TObject *o)
const{
644 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
645 return patch->IsGammaLowSimple();
648 bool AliAnalysisTaskEmcalClustersRef::SelectJetPatch(TObject *o)
const{
649 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
650 if(!patch->IsOfflineSimple())
return false;
651 return patch->IsJetLowSimple();
654 double AliAnalysisTaskEmcalClustersRef::GetPatchEnergy(TObject *o)
const {
656 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(o);
657 energy = patch->GetPatchE();
ClassImp(EMCalTriggerPtAnalysis::AliAnalysisTaskEmcalClustersRef) namespace EMCalTriggerPtAnalysis
Int_t GetRunNumber(TString)