16 #include <TClonesArray.h> 24 #include "THnSparse.h" 29 #include <AliAnalysisManager.h> 30 #include <AliVEventHandler.h> 31 #include <AliVEvent.h> 32 #include <AliVCluster.h> 33 #include <AliVParticle.h> 35 #include <AliAnalysisDataSlot.h> 36 #include <AliAnalysisDataContainer.h> 69 fJetHadronDeltaPhi(0.6),
70 fMinFractionSharedPt(0.5),
74 fFillTrackHistograms(kTRUE),
75 fFillJetHistograms(kTRUE),
76 fFillRecoilTHnSparse(kTRUE),
77 fFillInclusiveTree(kFALSE),
78 fFillRecoilTree(kFALSE),
80 fRejectionFactorInclusiveJets(1),
82 fHistEvtSelection(0x0),
97 fhPhiHybrPartCor(0x0),
99 fhPtDetMatchedToPart(0x0),
103 fhPhiPhiResidual(0x0),
104 fhPtDetPartRecoil(0x0),
105 fhPtHybrDetRecoil(0x0),
106 fhPtHybrPartRecoil(0x0),
107 fhPtHybrPartCorRecoil(0x0),
109 fhPtDetMatchedToPartRecoil(0x0),
110 fhResidualRecoil(0x0),
111 fhPtResidualRecoil(0x0),
112 fhDphiResidualRecoil(0x0),
113 fhDphiphiResidualRecoil(0x0),
114 fhTTPtDetMatchedToPart(0x0),
115 fhTTPhiDetMatchedToPart(0x0),
116 fhDPhiHybrPartCorRecoil(0x0),
117 fTreeEmbInclusive(0x0),
122 DefineOutput(1, TList::Class());
124 DefineOutput(2, TTree::Class());
126 DefineOutput(3, TTree::Class());
201 DefineOutput(1, TList::Class());
202 DefineOutput(2, TTree::Class());
203 DefineOutput(3, TTree::Class());
229 while ((obj = next())) {
250 while ((clusCont = static_cast<AliClusterContainer*>(next()))) {
251 groupname = clusCont->GetName();
254 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The cluster containers will be filled into the same histograms.", GetName(), groupname.Data()));
259 histname = TString::Format(
"%s/histClusterEnergy_%d", groupname.Data(), cent);
260 histtitle = TString::Format(
"%s;#it{E}_{cluster} (GeV);counts", histname.Data());
263 histname = TString::Format(
"%s/histClusterEnergyExotic_%d", groupname.Data(), cent);
264 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{exotic} (GeV);counts", histname.Data());
267 histname = TString::Format(
"%s/histClusterNonLinCorrEnergy_%d", groupname.Data(), cent);
268 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{non-lin.corr.} (GeV);counts", histname.Data());
271 histname = TString::Format(
"%s/histClusterHadCorrEnergy_%d", groupname.Data(), cent);
272 histtitle = TString::Format(
"%s;#it{E}_{cluster}^{had.corr.} (GeV);counts", histname.Data());
275 histname = TString::Format(
"%s/histClusterPhi_%d", groupname.Data(), cent);
276 histtitle = TString::Format(
"%s;#it{#phi}_{custer};counts", histname.Data());
279 histname = TString::Format(
"%s/histClusterEta_%d", groupname.Data(), cent);
280 histtitle = TString::Format(
"%s;#it{#eta}_{custer};counts", histname.Data());
283 histname = TString::Format(
"%s/histNClusters_%d", groupname.Data(), cent);
284 histtitle = TString::Format(
"%s;number of clusters;events", histname.Data());
294 histname =
"fHistSumNClusters";
295 histtitle = TString::Format(
"%s;Sum of n clusters;events", histname.Data());
317 histname = TString::Format(
"%s/histCellEnergy_%d", groupname.Data(), cent);
318 histtitle = TString::Format(
"%s;#it{E}_{cell} (GeV);counts", histname.Data());
321 histname = TString::Format(
"%s/histNCells_%d", groupname.Data(), cent);
322 histtitle = TString::Format(
"%s;number of cells;events", histname.Data());
345 while ((partCont = static_cast<AliParticleContainer*>(next()))) {
346 groupname = partCont->GetName();
350 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The track containers will be filled into the same histograms.", GetName(), groupname.Data()));
355 histname = TString::Format(
"%s/histTrackPt_%d", groupname.Data(), cent);
356 histtitle = TString::Format(
"%s;#it{p}_{T,track} (GeV/#it{c});counts", histname.Data());
359 histname = TString::Format(
"%s/histTrackPhi_%d", groupname.Data(), cent);
360 histtitle = TString::Format(
"%s;#it{#phi}_{track};counts", histname.Data());
363 histname = TString::Format(
"%s/histTrackEta_%d", groupname.Data(), cent);
364 histtitle = TString::Format(
"%s;#it{#eta}_{track};counts", histname.Data());
367 if (TClass(partCont->GetClassName()).InheritsFrom(
"AliVTrack")) {
368 histname = TString::Format(
"%s/fHistDeltaEtaPt_%d", groupname.Data(), cent);
369 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{#eta}_{track}^{vertex} - #it{#eta}_{track}^{EMCal};counts", histname.Data());
372 histname = TString::Format(
"%s/fHistDeltaPhiPt_%d", groupname.Data(), cent);
373 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{#phi}_{track}^{vertex} - #it{#phi}_{track}^{EMCal};counts", histname.Data());
376 histname = TString::Format(
"%s/fHistDeltaPtvsPt_%d", groupname.Data(), cent);
377 histtitle = TString::Format(
"%s;#it{p}_{T,track}^{vertex} (GeV/#it{c});#it{p}_{T,track}^{vertex} - #it{p}_{T,track}^{EMCal} (GeV/#it{c});counts", histname.Data());
380 histname = TString::Format(
"%s/fHistEoverPvsP_%d", groupname.Data(), cent);
381 histtitle = TString::Format(
"%s;#it{P}_{track} (GeV/#it{c});#it{E}_{cluster} / #it{P}_{track} #it{c};counts", histname.Data());
385 histname = TString::Format(
"%s/histNTracks_%d", groupname.Data(), cent);
386 histtitle = TString::Format(
"%s;number of tracks;events", histname.Data());
396 histname =
"fHistSumNTracks";
397 histtitle = TString::Format(
"%s;Sum of n tracks;events", histname.Data());
418 while ((jetCont = static_cast<AliJetContainer*>(next()))) {
419 groupname = jetCont->GetName();
422 AliWarning(TString::Format(
"%s: Found groupname %s in hist manager. The jet containers will be filled into the same histograms.", GetName(), groupname.Data()));
427 histname = TString::Format(
"%s/histJetPt_%d", groupname.Data(), cent);
428 histtitle = TString::Format(
"%s;#it{p}_{T,jet} (GeV/#it{c});counts", histname.Data());
431 histname = TString::Format(
"%s/histJetArea_%d", groupname.Data(), cent);
432 histtitle = TString::Format(
"%s;#it{A}_{jet};counts", histname.Data());
435 histname = TString::Format(
"%s/histJetPhi_%d", groupname.Data(), cent);
436 histtitle = TString::Format(
"%s;#it{#phi}_{jet};counts", histname.Data());
439 histname = TString::Format(
"%s/histJetEta_%d", groupname.Data(), cent);
440 histtitle = TString::Format(
"%s;#it{#eta}_{jet};counts", histname.Data());
443 histname = TString::Format(
"%s/histNJets_%d", groupname.Data(), cent);
444 histtitle = TString::Format(
"%s;number of jets;events", histname.Data());
453 histname = TString::Format(
"%s/histJetCorrPt_%d", groupname.Data(), cent);
454 histtitle = TString::Format(
"%s;#it{p}_{T,jet}^{corr} (GeV/#it{c});counts", histname.Data());
464 Bool_t oldStatus = TH1::AddDirectoryStatus();
465 TH1::AddDirectory(kFALSE);
497 const Int_t dimSpec = 6;
498 const Int_t nBinsSpec[dimSpec] = {100,100, 280, 50,200,
fNRPBins};
499 const Double_t lowBinSpec[dimSpec] = {0,0,-80, 0,-0.5*TMath::Pi(), 0};
501 fHJetSpec =
new THnSparseF(
"fHJetSpec",
"Recoil jet spectrum",dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
523 fhDphiPtSig =
new TH2F(
"hDphiPtS",
"recoil #Delta #phi vs jet pT signal",100,-2,5,250,-50,200);
525 fhDphiPtSig->GetYaxis()->SetTitle(
"p^{reco,ch}_{T,jet} (GeV/c)");
526 fhDphiPtRef =
new TH2F(
"hDphiPtR",
"recoil #Delta #phi vs jet pT reference",100,-2,5,250,-50,200);
528 fhDphiPtRef->GetYaxis()->SetTitle(
"p^{reco,ch}_{T,jet} (GeV/c)");
534 fhPtHybrDet=
new TH2F(
"hPtHybrDet",
"pT response Pb-Pb+PYTHIA vs PYTHIA",200,0,200,200,0,200);
535 fhPtHybrDet->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
536 fhPtHybrDet->GetYaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
537 fhPtDetPart=
new TH2F(
"hPtDetPart",
"pT response PYTHIA vs part",200,0,200,200,0,200);
538 fhPtDetPart->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
539 fhPtDetPart->GetYaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
541 fhPtHybrPart->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
542 fhPtHybrPart->GetYaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
544 fhPtHybrPartCor->GetXaxis()->SetTitle(
"p^{Pb-Pb+PYTHIA,ch}_{T} (GeV/c)");
547 fhPhiHybrPartCor =
new TH2F(
"hPhiHybrPartCor",Form(
"phi response Pb-Pb+PYTHIA corrected vs part, min shared pT > %.0f",
fMinFractionSharedPt*100),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-0.5*TMath::Pi(),1.5*TMath::Pi());
550 fhResidual =
new TH1F(
"hResidual",
"residual",50,-1,1);
551 fhResidual->GetXaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
553 fhPtResidual->GetXaxis()->SetTitle(
"p^{true}_{T} (GeV/c)");
554 fhPtResidual->GetYaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
555 fhPhiResidual =
new TH1F(
"hPhiResidual",
"residual phi",50,-1,1);
556 fhPhiResidual->GetXaxis()->SetTitle(
"#phi^{reco} - #phi^{true} / #phi^{true}");
557 fhPhiPhiResidual=
new TH2F(
"hPhiPhiResidual",
"pT vs residual",600,-3,3,200,-0.5*TMath::Pi(),1.5*TMath::Pi());
559 fhPhiPhiResidual->GetYaxis()->SetTitle(
"#phi^{reco} - #phi^{true} / #phi^{true}");
561 fhPtDet=
new TH1F(
"hPtDet",
"pT detector level",200,0,200);
562 fhPtDet->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
563 fhPtDetMatchedToPart =
new TH1F(
"hPtDetMatchedToPart",
"pT detector level matched to particle level jet",200,0,200);
566 fhPtHybrDetRecoil=
new TH2F(
"hPtHybrDetRecoil",
"pT response Pb-Pb+PYTHIA vs PYTHIA",200,0,200,200,0,200);
579 fhDPhiHybrPartCorRecoil =
new TH2F(
"hDPhiHybrPartCorRecoil",Form(
"#Delta#phi response Pb-Pb+PYTHIA corrected vs part, min shared pT > %.0f",
fMinFractionSharedPt*100),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-0.5*TMath::Pi(),1.5*TMath::Pi());
583 fhResidualRecoil->GetXaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
586 fhPtResidualRecoil->GetYaxis()->SetTitle(
"p^{reco}_{T} - p^{true}_{T} / p^{true}_{T}");
589 fhDphiResidualRecoil->GetXaxis()->SetTitle(
"#Delta#phi^{reco} - #Delta#phi^{true} / #Delta#phi^{true}");
590 fhDphiphiResidualRecoil=
new TH2F(
"hDphiphiResidualRecoil",
"#Delta#phi vs residual in phi",400,-3,3,200,-0.5*TMath::Pi(),1.5*TMath::Pi());
593 fhPtDetRecoil=
new TH1F(
"hPtDetRecoil",
"pT detector level",200,0,200);
594 fhPtDetRecoil->GetXaxis()->SetTitle(
"p^{reco,PYTHIA,ch}_{T} (GeV/c)");
595 fhPtDetMatchedToPartRecoil =
new TH1F(
"hPtDetMatchedToPartRecoil",
"pT detector level matched to particle level jet",200,0,200);
601 fhTTPhiDetMatchedToPart =
new TH2F(
"hTTPhiDetMatchedToPart",
"trigger track #phi response reco vs partice",200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-0.5*TMath::Pi(),1.5*TMath::Pi());
632 TString varNamesInclusive[8]={
"centrality",
"ptRawRec",
"areaRec",
"ptCorrRec",
"phiRec",
"ptPart",
"phiPart",
"binPtHard"};
633 TString varNamesRecoil[11]={
"centrality",
"ptTT",
"ptRawRec",
"areaRec",
"ptCorrRec",
"phiRec",
"DPhiRec",
"ptPart",
"phiPart",
"DPhiPart",
"binPtHard"};
635 const char* nameEmbInclusive = GetOutputSlot(2)->GetContainer()->GetName();
637 for(
Int_t ivar=0; ivar < 8; ivar++){
643 const char* nameEmbRecoil= GetOutputSlot(3)->GetContainer()->GetName();
645 for(
Int_t ivar=0; ivar < 11; ivar++){
657 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
666 TH1::AddDirectory(oldStatus);
683 AliVEvent *ev = InputEvent();
713 AliError(Form(
"jet container not found - check name %s",
fJetContName.Data()));
715 while ((jetCont = static_cast<AliJetContainer*>(next())))
716 AliError(Form(
"%s",jetCont->GetName()));
722 if(fDebug) Printf(
"centrality: %f\n",
fCent);
733 if(fDebug) Printf(
"rho = %f",rho);
764 if(fDebug) Printf(
"%s class ---> n triggers between %f and %f = %i, index of trigger chosen = %i",dice>
fFrac?
"ref.":
"sig.",minT,maxT,number,nT);
772 for(
Int_t tt=0;tt<ParticleList.GetEntries();tt++){
776 AliVParticle *partback = (AliVParticle*)ParticleList.At(tt);
777 if(!partback)
continue;
778 if(fDebug) Printf(
"trigger particle pt = %f \teta = %f \t phi = %f",partback->Pt(),partback->Eta(),partback->Phi());
786 if(
fCent<20.)
fh2RPTC20->Fill(TMath::Abs(phiBinT),partback->Pt());
787 if(
fCent<10.)
fh2RPTC10->Fill(TMath::Abs(phiBinT),partback->Pt());
797 groupname = jetCont->GetName();
799 for(
auto jetbig : jetCont->
accepted()) {
800 if (!jetbig)
continue;
802 ptbig = jetbig->Pt();
803 etabig = jetbig->Eta();
804 phibig = jetbig->Phi();
805 if(ptbig==0)
continue;
807 areabig = jetbig->Area();
811 if(areabig>=0.07) injet=injet+1;
812 if(areabig>=0.4) injet4=injet4+1;
814 if(fDebug) Printf(
"jet properties...\n\teta = %f \t phi = %f \t pt = %f \t relativephi = %f\t area = %f\t rho = %f",etabig,phibig,ptbig,dphi,areabig,rho);
818 Double_t dPhiShift=phibig-partback->Phi();
819 if(dPhiShift>2*TMath::Pi()) dPhiShift -= 2*TMath::Pi();
820 if(dPhiShift<-2*TMath::Pi()) dPhiShift += 2*TMath::Pi();
821 if(dPhiShift<-0.5*TMath::Pi()) dPhiShift += 2*TMath::Pi();
822 if(dPhiShift>1.5*TMath::Pi()) dPhiShift -= 2*TMath::Pi();
835 if(phitt<0)phitt+=TMath::Pi()*2.;
838 Double_t fillspec[] = {
fCent,areabig,ptcorr,partback->Pt(),dPhiShift,
static_cast<Double_t>(phiBintt)};
850 for(
auto partMC : partCont->
accepted()) {
851 Int_t labtr = partback->GetLabel();
852 Int_t labpa = partMC->GetLabel();
854 ptTTMC = partMC->Pt();
855 phiTTMC = partMC->Phi();
860 if(TTmatched!=1)
continue;
862 Double_t phiTTreco = partback->Phi();
863 if(fDebug) Printf(
"found corresponding truth-level particle, pt reco = %f pt MC = %f, phi reco = %f phi MC = %f",ptTTreco,ptTTMC,phiTTreco,phiTTMC);
867 auto jet2 = jetbig->ClosestJet();
873 auto jet3 = jet2->ClosestJet();
884 if(dPhiPart>2*TMath::Pi()) dPhiPart -= 2*TMath::Pi();
885 if(dPhiPart<-2*TMath::Pi()) dPhiPart += 2*TMath::Pi();
886 if(dPhiPart<-0.5*TMath::Pi()) dPhiPart += 2*TMath::Pi();
887 if(dPhiPart>1.5*TMath::Pi()) dPhiPart -= 2*TMath::Pi();
889 if(fDebug) Printf(
"--- recoil - jet pt = jet hybrid pt = %f\t jet matched det pt = %f\t jet matched particle level pt = %f\t\n\tjet reco phi = %f\t jet particle phi = %f",ptbig,ptJet2,ptJet3,phibig,phiJet3);
895 Double_t residual = (ptcorr - ptJet3) / ptJet3;
896 Double_t residualDphi = (dPhiShift - dPhiPart) / dPhiPart;
936 if(!jetCont || !jetContPart || !jetContTrue)
938 AliError(Form(
"jet container not found - check name %s",
fJetContName.Data()));
940 while ((jetCont = static_cast<AliJetContainer*>(next())))
941 AliError(Form(
"%s",jetCont->GetName()));
947 Printf(
"n particle jets = %i",jetContPart->
GetNJets());
948 Printf(
"n reco jets = %i",jetCont->GetNJets());
949 Printf(
"n PYTHIA jets = %i",jetContTrue->
GetNJets());
954 if (jetCont->GetRhoParameter()) rho = jetCont->GetRhoVal();
981 for(
auto jet1 : jetCont->accepted()) {
985 auto jet2 = jet1->ClosestJet();
991 auto jet3 = jet2->ClosestJet();
1000 if(phiJet3>2*TMath::Pi()) phiJet3 -= 2*TMath::Pi();
1001 if(phiJet3<-2*TMath::Pi()) phiJet3 += 2*TMath::Pi();
1002 if(phiJet3<-0.5*TMath::Pi()) phiJet3 += 2*TMath::Pi();
1003 if(phiJet3>1.5*TMath::Pi()) phiJet3 -= 2*TMath::Pi();
1005 if(phiJet1>2*TMath::Pi()) phiJet1 -= 2*TMath::Pi();
1006 if(phiJet1<-2*TMath::Pi()) phiJet1 += 2*TMath::Pi();
1007 if(phiJet1<-0.5*TMath::Pi()) phiJet1 += 2*TMath::Pi();
1008 if(phiJet1>1.5*TMath::Pi()) phiJet1 -= 2*TMath::Pi();
1010 if(fDebug) Printf(
"--- jet pt = jet hybrid pt = %f\t jet matched det pt = %f\t jet matched particle level pt = %f\t",ptJet1,ptJet2,ptJet3);
1013 Double_t fraction = jetCont->GetFractionSharedPt(jet1);
1019 Double_t residual = (ptCorr - ptJet3) / ptJet3;
1020 Double_t residualPhi = (phiJet1 - phiJet3) / phiJet3;
1073 while ((jetCont = static_cast<AliJetContainer*>(next()))) {
1074 groupname = jetCont->GetName();
1076 for(
auto jet : jetCont->
accepted()) {
1080 histname = TString::Format(
"%s/histJetPt_%d", groupname.Data(),
fCentBin);
1083 histname = TString::Format(
"%s/histJetArea_%d", groupname.Data(),
fCentBin);
1086 histname = TString::Format(
"%s/histJetPhi_%d", groupname.Data(),
fCentBin);
1089 histname = TString::Format(
"%s/histJetEta_%d", groupname.Data(),
fCentBin);
1093 histname = TString::Format(
"%s/histJetCorrPt_%d", groupname.Data(),
fCentBin);
1097 histname = TString::Format(
"%s/histNJets_%d", groupname.Data(),
fCentBin);
1112 UInt_t sumAcceptedTracks = 0;
1115 while ((partCont = static_cast<AliParticleContainer*>(next()))) {
1116 groupname = partCont->GetName();
1118 for(
auto part : partCont->
accepted()) {
1119 if (!part)
continue;
1122 histname = TString::Format(
"%s/histTrackPt_%d", groupname.Data(),
fCentBin);
1125 histname = TString::Format(
"%s/histTrackPhi_%d", groupname.Data(),
fCentBin);
1128 histname = TString::Format(
"%s/histTrackEta_%d", groupname.Data(),
fCentBin);
1131 if (partCont->GetLoadedClass()->InheritsFrom(
"AliVTrack")) {
1132 const AliVTrack* track =
static_cast<const AliVTrack*
>(part);
1134 histname = TString::Format(
"%s/fHistDeltaEtaPt_%d", groupname.Data(),
fCentBin);
1137 histname = TString::Format(
"%s/fHistDeltaPhiPt_%d", groupname.Data(),
fCentBin);
1140 histname = TString::Format(
"%s/fHistDeltaPtvsPt_%d", groupname.Data(),
fCentBin);
1144 Int_t iCluster = track->GetEMCALcluster();
1145 if (iCluster >= 0) {
1148 histname = TString::Format(
"%s/fHistEoverPvsP_%d", groupname.Data(),
fCentBin);
1155 sumAcceptedTracks += count;
1157 histname = TString::Format(
"%s/histNTracks_%d", groupname.Data(),
fCentBin);
1161 histname =
"fHistSumNTracks";
1173 UInt_t sumAcceptedClusters = 0;
1176 while ((clusCont = static_cast<AliClusterContainer*>(next()))) {
1177 groupname = clusCont->GetName();
1179 for(
auto cluster : clusCont->
all()) {
1180 if (!cluster)
continue;
1182 if (cluster->GetIsExotic()) {
1183 histname = TString::Format(
"%s/histClusterEnergyExotic_%d", groupname.Data(),
fCentBin);
1189 for(
auto cluster : clusCont->
accepted()) {
1190 if (!cluster)
continue;
1194 cluster->GetMomentum(nPart,
fVertex);
1196 histname = TString::Format(
"%s/histClusterEnergy_%d", groupname.Data(),
fCentBin);
1199 histname = TString::Format(
"%s/histClusterNonLinCorrEnergy_%d", groupname.Data(),
fCentBin);
1202 histname = TString::Format(
"%s/histClusterHadCorrEnergy_%d", groupname.Data(),
fCentBin);
1205 histname = TString::Format(
"%s/histClusterPhi_%d", groupname.Data(),
fCentBin);
1208 histname = TString::Format(
"%s/histClusterEta_%d", groupname.Data(),
fCentBin);
1211 sumAcceptedClusters += count;
1213 histname = TString::Format(
"%s/histNClusters_%d", groupname.Data(),
fCentBin);
1217 histname =
"fHistSumNClusters";
1237 for (
Short_t pos = 0; pos < ncells; pos++) {
1275 Int_t triggers[100];
1277 for(
Int_t cr=0;cr<100;cr++) triggers[cr]=-1;
1285 groupname = partCont->GetName();
1287 for(
auto part : partCont->
accepted()) {
1288 if (!part)
continue;
1291 if(part->Pt()>=minT && part->Pt()<maxT){
1292 triggers[im]=iCount-1;
1298 if(im>0) rd=
fRandom->Integer(im);
1307 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
1308 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
1309 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
1310 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
1311 double dphi = mphi-vphi;
1312 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
1313 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
1320 if(!(TMath::Abs(phi)<=2*TMath::Pi()))
return -1;
1321 Double_t phiwrtrp=TMath::ACos(TMath::Abs(TMath::Cos(phi)));
Float_t fJetHadronDeltaPhi
max angle from pi (set <0 for no selection)
TH2F * fhPtResidualRecoil
!
THashList * CreateHistoGroup(const char *groupname)
Create a new group of histograms within a parent group.
TObjArray fClusterCollArray
cluster collection array
Float_t fTTLowRef
minimum reference trigger track pt
TH1F * fhDphiResidualRecoil
!
Double_t GetRhoVal() const
const TString & GetRhoName() const
Float_t fFrac
fraction of events that are used to fill signal recoil jet population
Bool_t fFillRecoilTHnSparse
switch to fill recoil THnSparse for main analysis
Int_t SelectTrigger(TList *list, Double_t minT, Double_t maxT, Int_t &number)
AliJetContainer * GetJetContainer(Int_t i=0) const
Float_t fTTUpRef
maximum reference trigger track pt
void AllocateJetCoreHistograms()
void AllocateClusterHistograms()
Int_t GetNParticles() const
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
Declaration of class AliTLorentzVector.
Bool_t fFillInclusiveTree
switch to fill embedding tree with inclusive jet info
Double_t fMinBinPt
min pt in histograms
Double_t fEPV0
!event plane V0
Int_t fCentBin
!event centrality bin
TH1F * fhPtDetMatchedToPartRecoil
!
TH1I * fHistEvtSelection
!
TString fJetContName
Base level jet container name.
Float_t fMinFractionSharedPt
min fraction of pt between hybrid / detector jets
Container for particles within the EMCAL framework.
TString fJetContTrueName
True pp (detector) level jet container name.
TH2F * fhPtDetPartRecoil
!
TString kData
Declare data MC or deltaAOD.
TObjArray fParticleCollArray
particle/track collection array
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
const AliClusterIterableContainer all() const
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
Create a new TH2 within the container.
TObject * FindObject(const char *name) const
Find an object inside the container.
Float_t fTTUpSig
maximum signal trigger track pt
THashList * GetListOfHistograms() const
Get the list of histograms.
Double_t Phi_0_2pi() const
Float_t fTTLowSig
minimum signal trigger track pt
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
BeamType fForceBeamType
forced beam type
Int_t fNcentBins
how many centrality bins
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
TH2F * fhPtHybrDetRecoil
!
AliVCluster * GetAcceptCluster(Int_t i) const
void UserCreateOutputObjects()
TString fJetContPartName
Particle(MC) level jet container name.
TH2F * fhPtHybrPartRecoil
!
TH2F * fhTTPtDetMatchedToPart
!
const AliClusterIterableContainer accepted() const
Double_t fCent
!event centrality
virtual ~AliAnalysisTaskJetCoreEmcal()
Float_t fCentMax
maximum centrality
TString fCaloCellsName
name of calo cell collection
Bool_t fFillJetHistograms
switch to fill jet histograms
Float_t fTreeVarsRecoil[11]
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
Float_t fJetEtaMax
maximum jet eta
TH2F * fhDphiphiResidualRecoil
!
TObjArray fJetCollArray
jet collection array
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Double_t RelativePhi(Double_t mphi, Double_t vphi)
AliVCaloCells * fCaloCells
!cells
Float_t fTreeVarsInclusive[8]
AliRhoParameter * GetRhoParameter()
AliEventCuts fEventCuts
Event cuts.
TH2F * fhDPhiHybrPartCorRecoil
!
AliAnalysisTaskJetCoreEmcal()
AliEmcalList * fOutput
!output list
Double_t fMaxBinPt
max pt in histograms
Int_t fPtHardBin
pt hard bin if running embedding
THistManager fHistManager
Histogram manager.
TH2F * fhPtHybrPartCorRecoil
!
Double_t fVertex[3]
!event vertex
TTree * fTreeEmbInclusive
!
void SetMakeGeneralHistograms(Bool_t g)
void Terminate(Option_t *option)
TH1F * fhPtDetMatchedToPart
!
Base task in the EMCAL jet framework.
Float_t fJetEtaMin
minimum jet eta
Double_t GetFractionSharedPt(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
TH2F * fhTTPhiDetMatchedToPart
!
Declaration of class AliEmcalPythiaInfo.
const AliParticleIterableContainer accepted() const
void UserCreateOutputObjects()
Main initialization function on the worker.
const AliJetIterableContainer accepted() const
Bool_t fFillRecoilTree
switch to fill embedding tree with recoil jet info
void AllocateTrackHistograms()
void AllocateCellHistograms()
Container structure for EMCAL clusters.
Float_t fCentMin
minimum centrality
Container for jet within the EMCAL jet framework.
Bool_t fFillTrackHistograms
switch to fill track histograms
Int_t fNbins
no. of pt bins
Int_t fRejectionFactorInclusiveJets
factor to reject inclusive jets, to reduce size of ttree
void AllocateJetHistograms()
Int_t GetPhiBin(Double_t phi)