1 #include <TClonesArray.h> 6 #include <TLorentzVector.h> 8 #include "AliVCluster.h" 9 #include "AliAODCaloCluster.h" 10 #include "AliESDCaloCluster.h" 11 #include "AliVTrack.h" 20 #include "AliAnalysisManager.h" 33 fHistJetsPtLeadHad(0),
34 fHistJetsCorrPtArea(0),
35 fHistPtDEtaDPhiTrackClus(0),
36 fHistPtDEtaDPhiClusTrack(0),
49 fHistTracksPt =
new TH1*[fNcentBins];
50 fHistNTracks =
new TH1*[fNcentBins];
51 fHistClustersPt =
new TH1*[fNcentBins];
52 fHistLeadingJetPt =
new TH1*[fNcentBins];
53 fHistJetsPhiEta =
new TH2*[fNcentBins];
54 fHistJetsPtArea =
new TH2*[fNcentBins];
55 fHistJetsPtLeadHad =
new TH2*[fNcentBins];
56 fHistJetsCorrPtArea =
new TH2*[fNcentBins];
58 for (
Int_t i = 0; i < fNcentBins; i++) {
61 fHistClustersPt[i] = 0;
62 fHistLeadingJetPt[i] = 0;
63 fHistJetsPhiEta[i] = 0;
64 fHistJetsPtArea[i] = 0;
65 fHistJetsPtLeadHad[i] = 0;
66 fHistJetsCorrPtArea[i] = 0;
69 SetMakeGeneralHistograms(kTRUE);
80 fHistJetsPtLeadHad(0),
81 fHistJetsCorrPtArea(0),
82 fHistPtDEtaDPhiTrackClus(0),
83 fHistPtDEtaDPhiClusTrack(0),
126 const char *nclusters,
143 ::Error(
"AddTaskEmcalJetSample",
"No analysis manager to connect to.");
149 if (!mgr->GetInputEventHandler())
151 ::Error(
"AddTaskEmcalJetSample",
"This task requires an input event handler");
163 if (strcmp(njets,
"")) {
167 if (strcmp(nrho,
"")) {
171 if (strcmp(type,
"")) {
176 Printf(
"name: %s",name.Data());
183 if (trackName ==
"mcparticles") {
184 partCont = jetTask->AddMCParticleContainer(ntracks);
186 else if (trackName ==
"tracks" || trackName ==
"Tracks") {
187 partCont = jetTask->AddTrackContainer(ntracks);
189 else if (!trackName.IsNull()) {
196 AliJetContainer *jetCont = jetTask->AddJetContainer(njets,strType,jetradius);
211 mgr->AddTask(jetTask);
214 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer() ;
216 contname +=
"_histos";
217 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname.Data(),
218 TList::Class(),AliAnalysisManager::kOutputContainer,
219 Form(
"%s", AliAnalysisManager::GetCommonFileName()));
220 mgr->ConnectInput (jetTask, 0, cinput1 );
221 mgr->ConnectOutput (jetTask, 1, coutput1 );
248 histname =
"fHistTracksPt_";
251 fHistTracksPt[i]->GetXaxis()->SetTitle(
"p_{T,track} (GeV/c)");
255 histname =
"fHistNTracks_";
257 fHistNTracks[i] =
new TH1F(histname.Data(), histname.Data(), 200, 0., 199.);
262 histname =
"fHistClustersPt_";
271 histname =
"fHistLeadingJetPt_";
278 histname =
"fHistJetsPhiEta_";
280 fHistJetsPhiEta[i] =
new TH2F(histname.Data(), histname.Data(), 50, -1, 1, 101, 0, TMath::Pi()*2 + TMath::Pi()/200);
285 histname =
"fHistJetsPtArea_";
292 histname =
"fHistJetsPtLeadHad_";
301 histname =
"fHistJetsCorrPtArea_";
311 histname =
"fHistPtDEtaDPhiTrackClus";
312 fHistPtDEtaDPhiTrackClus =
new TH3F(histname.Data(),Form(
"%s;#it{p}_{T}^{track};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
315 histname =
"fHistPtDEtaDPhiClusTrack";
316 fHistPtDEtaDPhiClusTrack =
new TH3F(histname.Data(),Form(
"%s;#it{p}_{T}^{clus};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
319 fHistClustDx =
new TH1F(
"fHistClustDx",
"fHistClustDx;Dx",1000,0.,1.);
322 fHistClustDz =
new TH1F(
"fHistClustDz",
"fHistClustDz;Dz",1000,0.,1.);
325 fNAccJets =
new TH1F(
"fNAccJets",
"fNAccJets;N/ev",11,-0.5, 9.5);
328 fhZg =
new TH1F(
"fhZg",
"#it{Z}_{g}; #it{Z}_{g}; Entries", 200, 0., 0.5);
331 fhCorrPtZg =
new TH2F(
"fhCorrPtZg",
"#it{Z}_{g}; p_{T}^{corr} [GeV/c]; #it{Z}_{g}", 16, 0, 160, 20, 0., 0.5);
334 fhCorrPtZg2 =
new TH2F(
"fhCorrPtZg2",
"#it{Z}_{g}; p_{T}^{corr} [GeV/c]; #it{Z}_{g}", 16, 0, 160, 20, 0., 0.5);
337 fhCorrPtZgD =
new TH2F(
"fhCorrPtZgD",
"#it{Z}_{g}; p_{T}^{corr} [GeV/c]; #it{Z}_{g}", 16, 0, 160, 20, 0., 0.5);
340 fhCorrPtRg =
new TH2F(
"fhCorrPtRg",
"R_{g}; p_{T}^{corr} [GeV/c]; R_{g}", 16, 0, 160, 40, 0., 0.5);
343 fhCorrPtRgD =
new TH2F(
"fhCorrPtRgD",
"R_{g}; p_{T}^{corr} [GeV/c]; R_{g}", 16, 0, 160, 40, 0., 0.5);
346 fhCorrPtZgRg =
new TH3F(
"fhCorrPtZgRg",
"fhCorrPtZgRg", 8, 0, 160, 10, 0., 0.5, 10, 0, 0.5);
349 fhCorrPtZgSDstep =
new TH3F(
"fhCorrPtZgSDstep",
"fhCorrPtZgSDstep", 16, 0, 160, 20, 0., 0.5, 20, 0, 20);
352 fhCorrPtRgSDstep =
new TH3F(
"fhCorrPtRgSDstep",
"fhCorrPtRgSDstep", 16, 0, 160, 20, 0., 0.5, 20, 0, 20);
355 fhCorrPtPtfrac =
new TH2F(
"fhCorrPtPtfrac",
"#deltap_{T}; p_{T}^{corr} [GeV/c]; #deltap_{T}", 16, 0, 160, 80, 0., 1.0);
358 fhCorrPtDropCount =
new TH2F(
"fhCorrPtDropCount",
"fhCorrPtDropCount; p_{T}^{corr} [GeV/c]; Counts", 16, 0, 160, 50, 0., 50);
383 TLorentzVector nPart;
384 cluster->GetMomentum(nPart,
fVertex);
386 Double_t dx = cluster->GetTrackDx();
387 Double_t dz = cluster->GetTrackDz();
409 Double_t jetpt_ungrmd = jet->Pt() / ( jet->GetShapeProperties()->GetSoftDropPtfrac() );
411 std::vector<fastjet::PseudoJet> particles;
412 UShort_t ntracks = jet->GetNumberOfTracks();
413 for (
int j = 0; j < ntracks; j++) {
414 particles.push_back( fastjet::PseudoJet( jet->Track(j)->Px(), jet->Track(j)->Py(), jet->Track(j)->Pz(), jet->Track(j)->E() ) );
416 fastjet::JetDefinition jet_def(fastjet::cambridge_algorithm, 0.4, fastjet::E_scheme);
417 fastjet::ClusterSequence cs(particles, jet_def);
418 std::vector<fastjet::PseudoJet> jets = sorted_by_pt(cs.inclusive_jets());
420 if (jets.size() > 0) {
426 fhZg->Fill(jet->GetShapeProperties()->GetSoftDropZg());
429 fhCorrPtZgRg->Fill(jetpt_ungrmd -
fJetsCont->
GetRhoVal() * jet->Area(), jet->GetShapeProperties()->GetSoftDropZg(), jet->GetShapeProperties()->GetSoftDropdR() );
457 Int_t emc1 = track->GetEMCALcluster();
471 TLorentzVector nPart;
472 cluster->GetMomentum(nPart,
fVertex);
476 AliVTrack *mt = NULL;
477 AliAODCaloCluster *acl =
dynamic_cast<AliAODCaloCluster*
>(cluster);
479 if(acl->GetNTracksMatched()>1)
480 mt = static_cast<AliVTrack*>(acl->GetTrackMatched(0));
483 AliESDCaloCluster *ecl =
dynamic_cast<AliESDCaloCluster*
>(cluster);
484 Int_t im = ecl->GetTrackMatchedIndex();
509 fastjet::PseudoJet jet1;
510 fastjet::PseudoJet jet2;
512 if ( jet.has_parents(jet1, jet2) ) {
517 Float_t dr = TMath::Sqrt( jet1.plain_distance(jet2) );
520 if (pt1 < pt2) z = pt1/(pt1+pt2);
521 else z = pt2/(pt1+pt2);
540 fastjet::PseudoJet jet1;
541 fastjet::PseudoJet jet2;
543 if ( !(jet.has_parents(jet1, jet2)) ) {
550 Float_t dr = TMath::Sqrt( jet1.plain_distance(jet2) );
551 Float_t angular_term = TMath::Power(dr/0.4, beta);
554 if (pt1 < pt2) z = pt1/(pt1+pt2);
555 else z = pt2/(pt1+pt2);
557 if ( z > (zcut*angular_term) )
return z;
TH2 * fhCorrPtZgD
! iterative SD, distribution of zg, jet pt-diff
TObjArray fClusterCollArray
cluster collection array
AliClusterContainer * fCaloClustersCont
Tracks.
virtual AliVParticle * GetNextAcceptParticle()
void UserCreateOutputObjects()
Double_t GetRhoVal() const
AliJetContainer * GetJetContainer(Int_t i=0) const
void CheckClusTrackMatching()
TH2 * fhCorrPtRgD
! iterative SD, distribution of Rg, jet pt-diff
const TString & GetRhoName(Int_t c=0) const
void SetLeadingHadronType(Int_t t)
TH3 * fhCorrPtZgSDstep
! iterative SD, distribution of zg, jet pt-diff, SD step diff
void SoftDropDeepDeclustering(fastjet::PseudoJet jet, const Float_t inpt)
TH3 * fHistPtDEtaDPhiClusTrack
track pt, delta eta, delta phi to matched cluster
Double_t fMinBinPt
min pt in histograms
AliClusterContainer * GetClusterContainer() const
static AliAnalysisTaskSoftDrop * AddTaskSoftDrop(const char *ntracks="usedefault", const char *nclusters="usedefault", const char *njets="Jets", const char *nrho="Rho", Int_t nCentBins=1, Double_t jetradius=0.2, Double_t jetptcut=1, Double_t jetareacut=0.6, const char *type="EMCAL", Int_t leadhadtype=0, const char *taskname="AliAnalysisTaskSoftDrop")
Int_t fCentBin
!event centrality bin
TH1 ** fHistLeadingJetPt
Cluster pt spectrum.
void SetPercAreaCut(Float_t p)
TH1 ** fHistNTracks
cluster pt, delta eta, delta phi to matched track
Container for particles within the EMCAL framework.
AliJetContainer * fJetsCont
TObjArray fParticleCollArray
particle/track collection array
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
void SetRhoName(const char *n)
AliParticleContainer * GetParticleContainer() const
TH2 ** fHistJetsPtArea
Phi-Eta distribution of jets.
AliEmcalJet * GetLeadingJet(const char *opt="")
TH2 * fhCorrPtRg
! distribution of groomed jet radius, jet pt-diff
void SetJetPtCut(Float_t cut)
Double_t GetLeadingHadronPt(const AliEmcalJet *jet) const
void Terminate(Option_t *option)
virtual AliVParticle * GetParticle(Int_t i=-1) const
TH2 * fhCorrPtDropCount
! distribution of dropped branches number, jet pt-diff
Int_t fNcentBins
how many centrality bins
TH2 * fhCorrPtZg
! distribution of zg, jet pt-diff
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
TH2 ** fHistJetsCorrPtArea
Jet pt vs. leading hadron.
TH1 * fhZg
number of jets per event
virtual ~AliAnalysisTaskSoftDrop()
AliParticleContainer * fTracksCont
Jets.
AliVCluster * GetCluster(Int_t i) const
TObjArray fJetCollArray
jet collection array
Bool_t FillHistograms()
Function filling histograms.
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
void ConnectParticleContainer(AliParticleContainer *c)
TH3 * fhCorrPtZgRg
! iterative SD, distribution of zg, jet pt-diff, Rg diff
Int_t fSDM
number of the SD iterations
AliAnalysisTaskSoftDrop()
AliEmcalList * fOutput
!output list
Double_t fMaxBinPt
max pt in histograms
TH1 * fHistClustDx
number of tracks per event
TH2 ** fHistJetsPhiEta
Leading jet pt spectrum.
Double_t fVertex[3]
!event vertex
TH2 * fhCorrPtPtfrac
! distribution of ptfrac, jet pt-diff
TH2 * fhCorrPtZg2
! other SD settings
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
TH1 ** fHistClustersPt
Track pt spectrum.
void UserCreateOutputObjects()
Main initialization function on the worker.
static void GetEtaPhiDiff(const AliVTrack *t, const AliVCluster *v, Double_t &phidiff, Double_t &etadiff)
const AliJetIterableContainer accepted() const
TH3 * fHistPtDEtaDPhiTrackClus
Jet pt - bkg vs. area.
Int_t GetNAcceptedParticles() const
void ExecOnce()
Perform steps needed to initialize the analysis.
void ConnectClusterContainer(AliClusterContainer *c)
static Float_t SoftDropDeclustering(fastjet::PseudoJet jet, const Float_t zcut, const Float_t beta)
Container structure for EMCAL clusters.
AliVCluster * GetNextAcceptCluster()
Container for jet within the EMCAL jet framework.
TH2 ** fHistJetsPtLeadHad
Jet pt vs. area.
Int_t fNbins
no. of pt bins
TH3 * fhCorrPtRgSDstep
! iterative SD, distribution of zg, jet pt-diff, SD step diff