24 #include <TClonesArray.h>
25 #include <TDirectory.h>
27 #include <THashList.h>
32 #include <TObjArray.h>
33 #include <TObjString.h>
37 #include "AliAODEvent.h"
38 #include "AliESDEvent.h"
39 #include "AliInputEventHandler.h"
40 #include "AliMCEvent.h"
42 #include "AliVCluster.h"
43 #include "AliVParticle.h"
44 #include "AliVTrack.h"
45 #include "AliVVertex.h"
49 #include "AliEMCALTriggerPatchInfo.h"
63 namespace EMCalTriggerPtAnalysis {
68 const Int_t AliAnalysisTaskPtEMCalTrigger::kNJetRadii = 4;
75 AliAnalysisTaskPtEMCalTrigger::AliAnalysisTaskPtEMCalTrigger():
85 fSelectAllTracks(kFALSE),
87 fUseTriggersFromTriggerMaker(kFALSE)
104 fJetContainersData(),
105 fSelectAllTracks(kFALSE),
107 fUseTriggersFromTriggerMaker(kFALSE)
141 AliDebug(1,
"Jet containers for MC truth:");
142 TObjString *contname(NULL);
144 while((contname = dynamic_cast<TObjString *>(contMCIter.Next())))
145 AliDebug(1, Form(
"Next container: %s", contname->String().Data()));
148 AliDebug(1,
"Jet containers for Data:");
149 TObjString *contname(NULL);
151 while((contname = dynamic_cast<TObjString *>(contDataIter.Next())))
152 AliDebug(1, Form(
"Next container: %s", contname->String().Data()));
155 AliDebug(1,
"Jet containers attached to this task:");
158 while((cont = dynamic_cast<AliJetContainer *>(contIter.Next())))
159 AliDebug(1, Form(
"Container: %s", cont->GetName()));
162 std::map<std::string, std::string> triggerCombinations;
163 const char *triggernames[12] = {
"MinBias",
"EMCJHigh",
"EMCJLow",
"EMCGHigh",
"EMCGLow",
"NoEMCal",
"EMCHighBoth",
"EMCHighGammaOnly",
"EMCHighJetOnly",
"EMCLowBoth",
"EMCLowGammaOnly",
"EMCLowJetOnly"},
164 *bitnames[4] = {
"CINT7",
"EMC7",
"kEMCEGA",
"kEMCEJE"};
166 const TAxis *triggeraxis[5]; memset(triggeraxis, 0,
sizeof(
const TAxis *) * 5);
167 const TAxis *bitaxes[4]; memset(bitaxes, 0,
sizeof(
TAxis *) * 4);
168 const char *binlabels[2] = {
"OFF",
"ON"};
169 TAxis mytrgaxis[5], mybitaxis[4];
170 for(
int itrg = 0; itrg < 5; ++itrg){
171 DefineAxis(mytrgaxis[itrg], triggernames[itrg], triggernames[itrg], 2, -0.5, 1.5, binlabels);
172 triggeraxis[itrg] = mytrgaxis+itrg;
174 DefineAxis(mybitaxis[itrg], bitnames[itrg], bitnames[itrg], 2, -0.5, 1.5, binlabels);
175 bitaxes[itrg] = mybitaxis+itrg;
179 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[0],
"min. bias events"));
180 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[1],
"jet-triggered events (high threshold)"));
181 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[2],
"jet-triggered events (low threshold)"));
182 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[3],
"gamma-triggered events (high threshold)"));
183 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[4],
"gamma-triggered events (low threshold)"));
184 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[5],
"non-EMCal-triggered events"));
185 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[6],
"jet and gamma triggered events (high threshold)"));
186 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[7],
"exclusively gamma-triggered events (high threshold)"));
187 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[8],
"exclusively jet-triggered events (high threshold)"));
188 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[9],
"jet and gamma triggered events (low threshold)"));
189 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[10],
"exclusively gamma-triggered events (low threshold)"));
190 triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[11],
"exclusively-triggered events (low threshold)"));
199 TArrayD ptbinning, zvertexBinning, etabinning, pileupaxis(3);
200 pileupaxis[0] = -0.5; pileupaxis[1] = 0.5; pileupaxis[2] = 1.5;
205 DefineAxis(htrackaxes[0],
"pt",
"p_{t} (GeV/c)", ptbinning);
206 DefineAxis(htrackaxes[1],
"eta",
"#eta", etabinning);
207 DefineAxis(htrackaxes[2],
"phi",
"#phi", 20, 0, 2 * TMath::Pi());
208 DefineAxis(htrackaxes[3],
"zvertex",
"z_{V} (cm)", zvertexBinning);
209 DefineAxis(htrackaxes[4],
"pileup",
"Pileup rejection", 2, -0.5, 1.5);
211 DefineAxis(htrackaxes[6],
"mbtrigger",
"Has MB trigger", 2, -0.5, 1.5);
212 const TAxis *trackaxes[7];
213 for(
int iaxis = 0; iaxis < 7; ++iaxis) trackaxes[iaxis] = htrackaxes + iaxis;
214 TAxis hclusteraxes[4];
215 DefineAxis(hclusteraxes[0],
"energy",
"E (GeV)", ptbinning);
216 DefineAxis(hclusteraxes[1],
"zvertex",
"z_{V} (cm)", zvertexBinning);
217 DefineAxis(hclusteraxes[2],
"pileup",
"Pileup rejection", 2,1 -0.5, 1.5);
218 DefineAxis(hclusteraxes[3],
"mbtrigger",
"Has MB trigger", 2, -0.5, 1.5);
219 const TAxis *clusteraxes[4];
220 for(
int iaxis = 0; iaxis < 4; ++iaxis) clusteraxes[iaxis] = hclusteraxes + iaxis;
221 TAxis hpatchenergyaxes[5];
222 DefineAxis(hpatchenergyaxes[0],
"energy",
"Patch energy (GeV)", 100, 0., 100);
223 DefineAxis(hpatchenergyaxes[1],
"eta",
"#eta", etabinning);
224 DefineAxis(hpatchenergyaxes[2],
"phi",
"#phi", 20, 0, 2 * TMath::Pi());
225 DefineAxis(hpatchenergyaxes[3],
"isMain",
"Main trigger", 2, -0.5, 1.5);
226 DefineAxis(hpatchenergyaxes[4],
"emcalgood",
"EMCAL good event", 2, -0.5, 1.5);
227 const TAxis *patchenergyaxes[5];
228 for(
int iaxis = 0; iaxis < 5; ++iaxis) patchenergyaxes[iaxis] = hpatchenergyaxes + iaxis;
229 TAxis hpatchampaxes[5];
230 DefineAxis(hpatchampaxes[0],
"amplitude",
"Patch energy (GeV)", 10000, 0., 10000.);
231 DefineAxis(hpatchampaxes[1],
"eta",
"#eta", etabinning);
232 DefineAxis(hpatchampaxes[2],
"phi",
"#phi", 20, 0, 2 * TMath::Pi());
233 DefineAxis(hpatchampaxes[3],
"isMain",
"Main trigger", 2, -0.5, 1.5);
234 DefineAxis(hpatchampaxes[4],
"emcalgood",
"EMCAL good event", 2, -0.5, 1.5);
235 const TAxis *patchampaxes[5];
236 for(
int iaxis = 0; iaxis < 5; ++iaxis) patchampaxes[iaxis] = hpatchampaxes + iaxis;
237 std::string patchnames[] = {
"Level0",
"JetHigh",
"JetLow",
"GammaHigh",
"GammaLow"};
238 for(std::string * triggerpatch = patchnames; triggerpatch < patchnames +
sizeof(patchnames)/
sizeof(std::string); ++triggerpatch){
239 fHistos->
CreateTHnSparse(Form(
"Energy%s", triggerpatch->c_str()), Form(
"Patch energy for %s trigger patches", triggerpatch->c_str()), 5, patchenergyaxes,
"s");
240 fHistos->
CreateTHnSparse(Form(
"EnergyRough%s", triggerpatch->c_str()), Form(
"Rough patch energy for %s trigger patches", triggerpatch->c_str()), 5, patchenergyaxes,
"s");
241 fHistos->
CreateTHnSparse(Form(
"Amplitude%s", triggerpatch->c_str()), Form(
"Patch amplitude for %s trigger patches", triggerpatch->c_str()), 5, patchampaxes,
"s");
245 fHistos->
CreateTHnSparse(
"hMCtrueParticles",
"Particle-based histogram for MC-true particles", 5, trackaxes,
"s");
249 Form(
"Particle-based histogram for MC-true particles in Jets with radius %.1f",
kJetRadii[irad]*10), 5, trackaxes,
"s");
252 fHistos->
CreateTHnSparse(
"hMCtrueParticlesIsolated",
"Particle-based histogram for isolated MC-true particles", 5, trackaxes,
"s");
254 for(std::map<std::string,std::string>::iterator it = triggerCombinations.begin(); it != triggerCombinations.end(); ++it){
255 const std::string name = it->first, &
title = it->second;
257 fHistos->
CreateTH2(Form(
"hEventHist%s", name.c_str()), Form(
"Event-based data for %s events; pileup rejection; z_{V} (cm)",
title.c_str()), pileupaxis, zvertexBinning);
259 fHistos->
CreateTHnSparse(Form(
"hTrackHist%s", name.c_str()), Form(
"Track-based data for %s events",
title.c_str()), 7, trackaxes,
"s");
260 fHistos->
CreateTHnSparse(Form(
"hTrackInAcceptanceHist%s", name.c_str()), Form(
"Track-based data for %s events for tracks matched to EMCal clusters",
title.c_str()), 7, trackaxes,
"s");
261 fHistos->
CreateTHnSparse(Form(
"hMCTrackHist%s", name.c_str()), Form(
"Track-based data for %s events with MC kinematics",
title.c_str()), 7, trackaxes,
"s");
262 fHistos->
CreateTHnSparse(Form(
"hMCTrackInAcceptanceHist%s", name.c_str()), Form(
"Track-based data for %s events with MC kinematics for tracks matched to EMCal clusters",
title.c_str()), 7, trackaxes,
"s");
264 fHistos->
CreateTHnSparse(Form(
"hClusterCalibHist%s", name.c_str()), Form(
"Calib. cluster-based histogram for %s events",
title.c_str()), 4, clusteraxes,
"s");
265 fHistos->
CreateTHnSparse(Form(
"hClusterUncalibHist%s", name.c_str()), Form(
"Uncalib. cluster-based histogram for %s events",
title.c_str()), 4, clusteraxes,
"s");
270 Form(
"Track-based data for %s events for tracks in jets with Radius %.1f",
title.c_str(),
kJetRadii[irad]), 7, trackaxes,
"s");
272 Form(
"Track-based data for %s events for tracks matched to EMCal clusters in jets with Radius %.1f",
title.c_str(),
kJetRadii[irad]),
275 Form(
"Track-based data for %s events with MC kinematics for tracks in jets with Radius %.1f",
title.c_str(),
kJetRadii[irad]),
278 Form(
"Track-based data for %s events with MC kinematics for tracks matched to EMCal clusters in jets with Radius %.1f",
title.c_str(),
kJetRadii[irad]),
281 Form(
"Calib. cluster-based histogram for %s events for clusters in Jets with radius %.1f",
title.c_str(),
kJetRadii[irad]), 4, clusteraxes,
"s");
285 fHistos->
CreateTHnSparse(Form(
"hTrackHist%sIsolated", name.c_str()), Form(
"Track-based data for %s events for isolated tracks",
title.c_str()), 7, trackaxes,
"s");
286 fHistos->
CreateTHnSparse(Form(
"hTrackInAcceptanceHist%sIsolated", name.c_str()), Form(
"Track-based data for %s events for isolated tracks matched to EMCal clusters",
title.c_str()), 7, trackaxes,
"s");
287 fHistos->
CreateTHnSparse(Form(
"hMCTrackHist%sIsolated", name.c_str()), Form(
"Track-based data for %s events with MC kinematics for isolated tracks",
title.c_str()), 7, trackaxes,
"s");
288 fHistos->
CreateTHnSparse(Form(
"hMCTrackInAcceptanceHist%sIsolated", name.c_str()), Form(
"Track-based data for %s events with MC kinematics for isolated tracks matched to EMCal clusters",
title.c_str()), 7, trackaxes,
"s");
296 while((cutObject = dynamic_cast<AliEmcalTrackSelection *>(cutIter()))){
297 AliESDtrackCuts *cuts =
dynamic_cast<AliESDtrackCuts *
>(cutObject->
GetTrackCuts(0));
299 cuts->DefineHistograms();
314 AliDebug(1,Form(
"Number of calibrated clusters: %d",
fCaloClusters->GetEntries()));
315 AliDebug(1,Form(
"Number of matched tracks: %d",
fTracks->GetEntries()));
324 AliEMCALTriggerPatchInfo *triggerpatch(NULL);
326 while((triggerpatch = dynamic_cast<AliEMCALTriggerPatchInfo *>(patchIter()))){
327 double triggerpatchinfo[5] = {triggerpatch->GetPatchE(), triggerpatch->GetEtaGeo(), triggerpatch->GetPhiGeo(), triggerpatch->IsMainTrigger() ? 1. : 0., emcalGood ? 1. : 0.};
328 double triggerpatchinfoamp[5] = {
static_cast<double>(triggerpatch->GetADCAmp()), triggerpatch->GetEtaGeo(), triggerpatch->GetPhiGeo(), triggerpatch->IsMainTrigger() ? 1. : 0., emcalGood ? 1. : 0.};
329 double triggerpatchinfoer[5] = {triggerpatch->GetADCAmpGeVRough(), triggerpatch->GetEtaGeo(), triggerpatch->GetPhiGeo(), triggerpatch->IsMainTrigger() ? 1. : 0., emcalGood ? 1. : 0.};
330 if(triggerpatch->IsJetHigh()){
335 if(triggerpatch->IsJetLow()){
340 if(triggerpatch->IsGammaHigh()){
345 if(triggerpatch->IsGammaLow()){
350 if(triggerpatch->IsLevel0()){
357 const AliVVertex *vtxTracks = fInputEvent->GetPrimaryVertex(),
359 if(!(vtxTracks && vtxSPD))
return false;
361 if(vtxTracks->GetNContributors() < 1 || vtxSPD->GetNContributors() < 1)
return false;
363 double triggers[5]; memset(triggers, 0,
sizeof(
double) * 5);
364 double triggerbits[4]; memset(triggerbits, 0,
sizeof(
double) * 4);
365 if(fInputHandler->IsEventSelected() & AliVEvent::kINT7){
371 if(fInputHandler->IsEventSelected() & AliVEvent::kEMC7){
374 if(fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA){
377 if(fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE){
382 std::vector<std::string> triggerstrings;
385 AliDebug(1, Form(
"Triggerstring: %s\n", trgstr.Data()));
386 if(trgstr.Contains(
"EJ1")){
387 triggerstrings.push_back(
"EMCJHigh");
389 if(trgstr.Contains(
"EG1"))
390 triggerstrings.push_back(
"EMCHighBoth");
392 triggerstrings.push_back(
"EMCHighJetOnly");
394 if(trgstr.Contains(
"EJ2")){
395 triggerstrings.push_back(
"EMCJLow");
397 if(trgstr.Contains(
"EG2"))
398 triggerstrings.push_back(
"EMCLowBoth");
400 triggerstrings.push_back(
"EMCLowJetOnly");
402 if(trgstr.Contains(
"EG1")){
403 triggerstrings.push_back(
"EMCGHigh");
405 if(!trgstr.Contains(
"EJ1"))
406 triggerstrings.push_back(
"EMCHighGammaOnly");
408 if(trgstr.Contains(
"EG2")){
409 triggerstrings.push_back(
"EMCGLow");
411 if(!trgstr.Contains(
"EJ2"))
412 triggerstrings.push_back(
"EMCLowGammaOnly");
418 bool isPileupEvent = fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5.);
419 isPileupEvent = isPileupEvent || (TMath::Abs(vtxTracks->GetZ() - vtxSPD->GetZ()) > 0.5);
420 double covSPD[6]; vtxSPD->GetCovarianceMatrix(covSPD);
421 isPileupEvent = isPileupEvent || (vtxSPD->IsFromVertexerZ() && TMath::Sqrt(covSPD[5]) > 0.25);
424 const double &zv = vtxTracks->GetZ();
426 if(!triggerstrings.size())
430 for(std::vector<std::string>::iterator it = triggerstrings.begin(); it != triggerstrings.end(); ++it)
436 std::vector<double> coneradii;
440 AliVParticle *part(NULL);
445 TIter particles(jetContMC->GetParticleContainer()->GetArray());
446 while((part = dynamic_cast<AliVParticle *>(particles()))){
447 if(part->Charge() == 0)
continue;
461 sprintf(histname,
"hMCtrueParticlesRad%02d",
int(
kJetRadii[irad]*10));
472 for(
int ipart = 0; ipart < fMCEvent->GetNumberOfTracks(); ipart++){
474 part = fMCEvent->GetTrack(ipart);
475 if(part->Charge() == 0)
continue;
478 if(!fMCEvent->IsPhysicalPrimary(ipart))
continue;
484 AliVTrack *track(NULL);
486 TObject *containerObject(NULL);
491 while((containerObject = dynamic_cast<TObject *>(allTrackIter()))){
492 if((picoTrack = dynamic_cast<AliPicoTrack *>(containerObject))){
495 track =
dynamic_cast<AliVTrack *
>(containerObject);
499 if(triggers[0])
FillTrackHist(
"MinBias", track, zv, isPileupEvent, 0, triggers[0]);
500 if(!triggerstrings.size())
501 FillTrackHist(
"NoEMCal", track, zv, isPileupEvent, 0, triggers[0]);
504 for(std::vector<std::string>::iterator it = triggerstrings.begin(); it != triggerstrings.end(); ++it)
505 FillTrackHist(it->c_str(), track, zv, isPileupEvent, 0, triggers[0]);
520 while((track = dynamic_cast<AliVTrack *>(trackIter()))){
535 FillTrackHist(
"MinBias", track, zv, isPileupEvent, icut + 1, triggers[0]);
536 if(coneradii.size()){
537 for(std::vector<double>::iterator radIter = coneradii.begin(); radIter != coneradii.end(); radIter++)
538 FillTrackHist(
"MinBias", track, zv, isPileupEvent, icut + 1, triggers[0], *radIter);
541 if(!triggerstrings.size()){
542 FillTrackHist(
"NoEMCal", track, zv, isPileupEvent, icut + 1, triggers[0]);
543 for(std::vector<double>::iterator radIter = coneradii.begin(); radIter != coneradii.end(); radIter++)
544 FillTrackHist(
"NoEMCal", track, zv, isPileupEvent, icut + 1, triggers[0], *radIter);
547 for(std::vector<std::string>::iterator it = triggerstrings.begin(); it != triggerstrings.end(); ++it){
548 FillTrackHist(it->c_str(), track, zv, isPileupEvent, icut + 1, triggers[0]);
549 for(std::vector<double>::iterator radIter = coneradii.begin(); radIter != coneradii.end(); radIter++)
550 FillTrackHist(it->c_str(), track, zv, isPileupEvent, icut + 1, triggers[0], *radIter);
558 const AliVCluster *clust(NULL);
559 for(
int icl = 0; icl < fInputEvent->GetNumberOfCaloClusters(); icl++){
560 clust = fInputEvent->GetCaloCluster(icl);
561 if(!clust->IsEMCAL())
continue;
563 if(triggers[0])
FillClusterHist(
"hClusterUncalibHistMinBias", clust, zv, isPileupEvent, triggers[0]);
564 if(!triggerstrings.size()){
565 FillClusterHist(
"hClusterUncalibHistNoEMCal", clust, zv, isPileupEvent, triggers[0]);
567 for(std::vector<std::string>::iterator it = triggerstrings.begin(); it != triggerstrings.end(); ++it){
568 sprintf(histname,
"hClusterUncalibHist%s", it->c_str());
576 while((clust = dynamic_cast<const AliVCluster *>(clustIter()))){
577 if(!clust->IsEMCAL())
continue;
579 if(triggers[0])
FillClusterHist(
"hClusterCalibHistMinBias", clust, zv, isPileupEvent, triggers[0]);
580 if(!triggerstrings.size())
581 FillClusterHist(
"hClusterCalibHistNoEMCal", clust, zv, isPileupEvent, triggers[0]);
583 for(std::vector<std::string>::iterator it = triggerstrings.begin(); it != triggerstrings.end(); ++it){
584 sprintf(histname,
"hClusterCalibHist%s", it->c_str());
601 std::vector<double> mybinning;
602 std::map<double,double> definitions;
603 definitions.insert(std::pair<double,double>(2.5, 0.1));
604 definitions.insert(std::pair<double,double>(7., 0.25));
605 definitions.insert(std::pair<double,double>(15., 0.5));
606 definitions.insert(std::pair<double,double>(25., 1.));
607 definitions.insert(std::pair<double,double>(40., 2.5));
608 definitions.insert(std::pair<double,double>(50., 5.));
609 definitions.insert(std::pair<double,double>(100., 10.));
610 double currentval = 0;
611 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
612 double limit =
id->first, binwidth =
id->second;
613 while(currentval < limit){
614 currentval += binwidth;
615 mybinning.push_back(currentval);
618 binning.Set(mybinning.size());
620 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
630 std::vector<double> mybinning;
631 double currentval = -10;
632 mybinning.push_back(currentval);
633 while(currentval <= 10.){
635 mybinning.push_back(currentval);
637 binning.Set(mybinning.size());
639 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
649 std::vector<double> mybinning;
650 double currentval = -0.8;
651 mybinning.push_back(currentval);
652 while(currentval <= 0.8){
654 mybinning.push_back(currentval);
656 binning.Set(mybinning.size());
658 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
672 const char*
title,
const TArrayD& binning,
const char** labels) {
673 axis.Set(binning.GetSize()-1, binning.GetArray());
675 axis.SetTitle(title);
677 for(
int ib = 1; ib <= axis.GetNbins(); ++ib)
678 axis.SetBinLabel(ib, labels[ib-1]);
694 const char*
title,
int nbins,
double min,
double max,
695 const char** labels) {
696 axis.Set(nbins, min, max);
698 axis.SetTitle(title);
700 for(
int ib = 1; ib <= axis.GetNbins(); ++ib)
701 axis.SetBinLabel(ib, labels[ib-1]);
713 double vz,
bool isPileup) {
715 sprintf(histname,
"hEventHist%s", trigger);
732 const AliVTrack* track,
double vz,
bool isPileup,
int cut,
bool isMinBias,
double jetradius) {
733 double etasign =
fSwapEta ? -1. : 1.;
734 double data[7] = {TMath::Abs(track->Pt()), etasign * track->Eta(), track->Phi(), vz, 0,
static_cast<double>(cut), isMinBias ? 1. : 0.};
735 double dataMC[7] = {0., 0., 0., vz, 0,
static_cast<double>(cut), isMinBias ? 1. : 0.};
736 AliVParticle *assocMC(NULL);
737 if(fMCEvent && (assocMC = fMCEvent->GetTrack(TMath::Abs(track->GetLabel())))){
739 dataMC[0] = TMath::Abs(assocMC->Pt());
740 dataMC[1] = etasign * assocMC->Eta();
741 dataMC[2] = assocMC->Phi();
743 char histname[1024], histnameAcc[1024], histnameMC[1024], histnameMCAcc[1024];
744 sprintf(histname,
"hTrackHist%s", trigger);
745 sprintf(histnameAcc,
"hTrackInAcceptanceHist%s", trigger);
746 sprintf(histnameMC,
"hMCTrackHist%s", trigger);
747 sprintf(histnameMCAcc,
"hMCTrackInAcceptanceHist%s", trigger);
749 char *hnames[] = {histname, histnameAcc, histnameMC, histnameMCAcc};
750 for(
unsigned int iname = 0; iname <
sizeof(hnames)/
sizeof(
char *); iname++){
751 char *myhname = hnames[iname];
752 sprintf(myhname,
"%sRad%02d", myhname,
int(jetradius * 10.));
756 if(track->IsEMCAL()){
758 AliVCluster *emcclust(NULL);
759 AliDebug(2, Form(
"cluster id: %d\n", track->GetEMCALcluster()));
761 AliDebug(2,
"Using calibrated clusters");
762 emcclust =
dynamic_cast<AliVCluster *
>(
fCaloClusters->At(track->GetEMCALcluster()));
764 AliDebug(2,
"Using uncalibrated clusters");
765 emcclust = fInputEvent->GetCaloCluster(track->GetEMCALcluster());
767 if(!emcclust) AliError(
"Null pointer to EMCal cluster");
768 if(emcclust && emcclust->GetNTracksMatched() <= 1){
799 const AliVCluster* clust,
double vz,
bool isPileup,
bool isMinBias) {
800 double data[4] = {clust->E(), vz, 0, isMinBias ? 1. : 0.};
814 double data[5] = {TMath::Abs(track->Pt()), track->Eta(), track->Phi(), vz, 0.};
830 if(!fMCEvent)
return true;
831 AliVParticle *mcassociate = fMCEvent->GetTrack(TMath::Abs(track->GetLabel()));
832 if(!mcassociate)
return false;
833 return fMCEvent->IsPhysicalPrimary(TMath::Abs(track->GetLabel()));
861 AliDebug(1,
"trigger checking");
878 return esd->GetPrimaryVertexSPD();
882 return aod->GetPrimaryVertexSPD();
900 jets->ResetCurrentID();
921 return reconstructedJet->
DeltaR(track) < radius;
934 fInputEvent->GetPrimaryVertex()->GetXYZ(vertexPos);
935 TLorentzVector clustVect;
936 clust->GetMomentum(clustVect, vertexPos);
938 Double_t dPhi = reconstructedJet->
Phi() - clustVect.Phi();
939 Double_t dEta = reconstructedJet->
Eta() - clustVect.Eta();
940 dPhi = TVector2::Phi_mpi_pi ( dPhi );
942 double deltaR = TMath::Sqrt ( dPhi * dPhi + dEta * dEta );
943 return deltaR < radius;
958 const AliVParticle *tmp(NULL);
960 tmp =
dynamic_cast<const AliVParticle *
>(reconstructedJet->
TrackAt(ipart, particles->GetArray()));
961 if((picotmp = dynamic_cast<const AliPicoTrack *>(tmp)))
963 if(!tmp->Compare(track)){
981 jets->ResetCurrentID();
1004 const AliVCluster *tmp(NULL);
1006 tmp =
dynamic_cast<const AliVCluster *
>(reconstructedJet->
ClusterAt(ipart, clusters->GetArray()));
1007 if(!tmp->Compare(clust)){
1023 mycontainer.Add(
new TObjString(contname));
Interface for virtual track selection.
void CreateDefaultPtBinning(TArrayD &binning) const
TList fJetContainersData
List of jet containers for Data.
EMCAL Level1 gamma trigger, low threshold.
AliCutValueRange< double > fEnergyRange
Cluster energy selection range.
EMCAL Level1 jet trigger, low threshold.
Bool_t HasTriggerType(TriggerType triggersel)
void AddESDTrackCuts(AliESDtrackCuts *trackCuts)
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
void FillTrackHist(const char *trigger, const AliVTrack *track, double vz, bool isPileup, int cut, bool isMinBias, double jetradius=-1.)
AliClusterContainer * GetClusterContainer() const
TString BuildTriggerString()
const AliEmcalJet * FoundClusterInJet(const AliVCluster *const clust, AliJetContainer *const jets) const
void AddCutsForAOD(AliESDtrackCuts *trackCuts, UInt_t filterBits)
THistManager * fHistos
Histogram container for the task.
void FillEventHist(const char *trigger, double vz, bool isPileup)
bool IsInRadius(const AliVParticle *const track, const AliEmcalJet *reconstructedJet, Double_t radius) const
void SetLimits(t min, t max)
UShort_t GetNumberOfConstituents() const
Container for particles within the EMCAL framework.
void SetCaloTriggerPatchInfoName(const char *n)
void AddJetContainerName(const Char_t *contname, Bool_t isMC=kFALSE)
UShort_t GetNumberOfTracks() const
AliParticleContainer * GetParticleContainer() const
void FillTHnSparse(const char *name, const double *x, double weight=1., Option_t *opt="")
TList fJetContainersMC
List of jet containers for MC.
TClonesArray * fCaloClusters
!clusters
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
Short_t ClusterAt(Int_t idx) const
THashList * GetListOfHistograms() const
static const Double_t * kJetRadii
Bool_t fSelectAllTracks
Loop over all tracks.
const AliVVertex * GetSPDVertex() const
void FillClusterHist(const char *trigger, const AliVCluster *clust, double vz, bool isPileup, bool isMinBias)
Old charged hadron analysis in EMCAL-triggered events.
void DefineAxis(TAxis &axis, const char *name, const char *title, const TArrayD &binning, const char **labels=NULL)
Bool_t fSwapEta
Allow swapping of the eta sign in asymmetric collision systems.
void FillMCParticleHist(const char *histname, const AliVParticle *const part, double vz, bool isPileup)
AliVCuts * GetTrackCuts(Int_t icut)
virtual void UserCreateOutputObjects()
const AliEmcalJet * FoundTrackInJet(const AliVParticle *const track, AliJetContainer *const jets) const
EMCAL Level1 jet trigger, high threshold.
const Double_t jetRadVals[AliAnalysisTaskPtEMCalTrigger::kNJetRadii]
Implement virtual track selection for AOD analysis.
static const Int_t kNJetRadii
void CreateDefaultZVertexBinning(TArrayD &binning) const
AliEmcalJet * GetNextAcceptJet()
TObjArray fJetCollArray
jet collection array
Double_t DeltaR(const AliVParticle *part) const
bool IsTrueTrack(const AliVTrack *const) const
TList * fListTrackCuts
List of track cuts.
AliVTrack * GetTrack() const
TObjArray * GetAcceptedTracks(const TClonesArray *const tracks)
AliEmcalList * fOutput
!output list
AliCutValueRange< double > fPtRange
Pt Selection Range.
void CreateDefaultEtaBinning(TArrayD &binning) const
TClonesArray * fTracks
!tracks
Short_t TrackAt(Int_t idx) const
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
bool TrackInJet(const AliVParticle *const track, const AliEmcalJet *reconstructedJet, const AliParticleContainer *const particles) const
bool ClusterInJet(const AliVCluster *const clust, const AliEmcalJet *reconstructedJet, const AliClusterContainer *const particles) const
void SetMakeGeneralHistograms(Bool_t g)
TClonesArray * fTriggerPatchInfo
!trigger patch info array
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Container class for histograms.
AliCutValueRange< double > fEtaRange
Eta Selection Range.
~AliAnalysisTaskPtEMCalTrigger()
Bool_t fUseTriggersFromTriggerMaker
Use trigger classes from trigger maker.
EMCAL Level1 gamma trigger, high threshold.
AliCutValueRange< double > fVertexRange
Vertex cut.
void UserCreateOutputObjects()
THnSparse * CreateTHnSparse(const char *name, const char *title, int ndim, const int *nbins, const double *min, const double *max, Option_t *opt="")
Implementation of virtual track selection for ESDs.
Container structure for EMCAL clusters.
AliAnalysisTaskPtEMCalTrigger()
Container for jet within the EMCAL jet framework.
bool IsInRange(t value) const