6 #include <TClonesArray.h> 10 #include <TProfile2D.h> 11 #include <THnSparse.h> 13 #include <TLorentzVector.h> 22 #include "AliVCluster.h" 23 #include "AliVTrack.h" 28 #include "AliMCEvent.h" 29 #include "AliGenPythiaEventHeader.h" 30 #include "AliAODMCHeader.h" 31 #include "AliMCEvent.h" 32 #include "AliAnalysisManager.h" 37 #include "AliAODEvent.h" 47 fMinFractionShared(0),
60 fhnMassResponseCorr(0),
66 fSwitchResolutionhn(1),
68 fListOfOutputFromClass(0),
73 fh3PtDRMass =
new TH3F*[fNcentBins];
74 fh3PtDRRho =
new TH3F*[fNcentBins];
75 fh3PtDRMassCorr =
new TH3F*[fNcentBins];
76 fh3PtDRRhoCorr =
new TH3F*[fNcentBins];
77 fh2PtMass =
new TH2F*[fNcentBins];
78 fh2PtMassCorr =
new TH2F*[fNcentBins];
79 fh3JetPtDRTrackPt =
new TH3F*[fNcentBins];
81 for (
Int_t i = 0; i < fNcentBins; i++) {
84 fh3PtDRMassCorr[i] = 0;
85 fh3PtDRRhoCorr[i] = 0;
88 fh3JetPtDRTrackPt[i] = 0;
91 SetMakeGeneralHistograms(kTRUE);
98 fMinFractionShared(0),
101 fEfficiencyFixed(1.),
111 fhnMassResponseCorr(0),
117 fSwitchResolutionhn(1),
118 fh3JetPtDRTrackPt(0),
119 fListOfOutputFromClass(0),
162 Bool_t oldStatus = TH1::AddDirectoryStatus();
163 TH1::AddDirectory(kFALSE);
165 const Int_t nBinsPt = 200;
171 const Int_t nBinsM = 200;
177 const Int_t nBinsdM = 200;
183 const Int_t nBinsdMr = 200;
187 for(
Int_t i=0; i<=nBinsdMr; i++) binsdMr[i]=(
Double_t)mindMr + (maxdMr-mindMr)/nBinsdMr*(
Double_t)i ;
189 const Int_t nBinsR = 80;
203 const Float_t ptmin3 = ptmax2 ;
205 const Int_t nbin11 = (int)((ptmax1-ptmin1)/binWidth1);
206 const Int_t nbin12 = (int)((ptmax2-ptmin2)/binWidth2)+nbin11;
207 const Int_t nbin13 = (int)((ptmax3-ptmin3)/binWidth3)+nbin12;
208 Int_t nBinsPtTr=nbin13;
211 for(
Int_t i=0; i<=nBinsPtTr; i++) {
212 if(i<=nbin11) binsPtTr[i]=(
Double_t)ptmin1 + (ptmax1-ptmin1)/nbin11*(
Double_t)i ;
213 if(i<=nbin12 && i>nbin11) binsPtTr[i]=(
Double_t)ptmin2 + (ptmax2-ptmin2)/(nbin12-nbin11)*((
Double_t)i-(
Double_t)nbin11) ;
214 if(i<=nbin13 && i>nbin12) binsPtTr[i]=(
Double_t)ptmin3 + (ptmax3-ptmin3)/(nbin13-nbin12)*((
Double_t)i-(
Double_t)nbin12) ;
218 const Int_t nBinsSparse0 = 4;
219 const Int_t nBins0[nBinsSparse0] = {nBinsM,nBinsM,nBinsPt,nBinsPt};
220 const Double_t xmin0[nBinsSparse0] = { minM, minM, minPt, minPt};
221 const Double_t xmax0[nBinsSparse0] = { maxM, maxM, maxPt, maxPt};
222 const Int_t nBinsSparse1 = 5;
223 const Int_t nBins1[nBinsSparse1] = {nBinsdM,nBinsdMr,nBinsM,nBinsPt,nBinsPt};
224 const Double_t xmin1[nBinsSparse1] = { mindM, mindMr, minM, minPt, minPt};
225 const Double_t xmax1[nBinsSparse1] = { maxdM, maxdMr, maxM, maxPt, maxPt};
230 histName = TString::Format(
"fh3PtDRMass_%d",i);
231 histTitle = TString::Format(
"%s;#it{p}_{T,jet};r;sum m",histName.Data());
232 fh3PtDRMass[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
235 histName = TString::Format(
"fh3PtDRRho_%d",i);
236 histTitle = TString::Format(
"%s;#it{p}_{T,jet};r;sum #it{p}_{T}",histName.Data());
237 fh3PtDRRho[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
240 histName = TString::Format(
"fh3PtDRMassCorr_%d",i);
241 histTitle = TString::Format(
"%s;#it{p}_{T,jet};r;sum m",histName.Data());
242 fh3PtDRMassCorr[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
243 fOutput->Add(fh3PtDRMassCorr[i]);
245 histName = TString::Format(
"fh3PtDRRhoCorr_%d",i);
246 histTitle = TString::Format(
"%s;#it{p}_{T,jet};r;sum #it{p}_{T}",histName.Data());
247 fh3PtDRRhoCorr[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
248 fOutput->Add(fh3PtDRRhoCorr[i]);
250 histName = TString::Format(
"fh2PtMass_%d",i);
251 histTitle = TString::Format(
"%s;#it{p}_{T,jet};#it{M}_{jet}",histName.Data());
252 fh2PtMass[i] =
new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM);
255 histName = TString::Format(
"fh2PtMassCorr_%d",i);
256 histTitle = TString::Format(
"%s;#it{p}_{T,jet};#it{M}_{jet}",histName.Data());
257 fh2PtMassCorr[i] =
new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM);
258 fOutput->Add(fh2PtMassCorr[i]);
260 histName = TString::Format(
"fh3JetPtDRTrackPt_%d",i);
261 histTitle = TString::Format(
"%s;#it{p}_{T,jet};r;#it{p}_{T,track}",histName.Data());
262 fh3JetPtDRTrackPt[i] =
new TH3F(histName.Data(),histTitle.Data(),nBinsPt,binsPt,nBinsR,binsR,nBinsPtTr,binsPtTr);
263 fOutput->Add(fh3JetPtDRTrackPt[i]);
266 histName =
"fhnMassResponse";
267 histTitle = Form(
"%s;#it{M}_{det};#it{M}_{part};#it{p}_{T,det};#it{p}_{T,part}",histName.Data());
268 fhnMassResponse =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
271 histName =
"fhnMassResponseCorr";
272 histTitle = Form(
"%s;#it{M}_{det};#it{M}_{part};#it{p}_{T,det};#it{p}_{T,part}",histName.Data());
273 fhnMassResponseCorr =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
274 fOutput->Add(fhnMassResponseCorr);
277 const Int_t nBinsPtMeanTr = 500;
285 fhAllpTRec =
new TH2F(
"fhAllpTRec",
"Jet constituent p_{T} distribution RECO; #it{p}_{T,track}; #it{p}_{T,jet}", nBinsPtMeanTr, minPtMeanTr, maxPtMeanTr, 20,0.,100.);
288 fhAllpTGen->SetTitle(
"Jet constituent p_{T} distribution GENE; #it{p}_{T,track}; #it{p}_{T,jet}");
291 fhAllpTCor->SetTitle(
"Jet constituent p_{T} distribution CORR; #it{p}_{T,track}; #it{p}_{T,jet}");
297 fhtmppTRec =
new TH1F(
"fhtmppTRec",
"htmppTRec", 50, 0.,100.);
301 const Int_t nvars = 7;
302 Int_t nbins[nvars] = {20 , nBinsPtMeanTr, nBinsPtMeanTr, 20, 20, 50, 50};
303 Double_t limslow[nvars] = {-10, minPtMeanTr, minPtMeanTr, 0., 0., 0., 0.};
304 Double_t limshig[nvars] = {10, maxPtMeanTr, maxPtMeanTr, 100., 100., 1.1, 1.1};
305 TString varnames[nvars] = {
"NconstRec-Gen",
"pTtmeanRec",
"pTtmeanGen",
"pTjmeanRec",
"pTjmeanGen",
"efficiencyNconst",
"ConstMatchNormRec"};
306 histName =
"fhConstRecGen";
307 histTitle =
"Constituents QA; ";
for(
Int_t i=0;i<nvars; i++) histTitle += Form(
"%s; ", varnames[i].
Data());
308 fhConstRecGen =
new THnSparseF(histName, histTitle, nvars, nbins, limslow, limshig);
314 histName =
"fhnDeltaMass";
315 histTitle = Form(
"%s; #it{M}_{det} - #it{M}_{part} ;(#it{M}_{det} - #it{M}_{part})/#it{M}_{part}; #it{M}_{part}; #it{p}_{T,det}; #it{p}_{T,part}",histName.Data());
316 fhnDeltaMass =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse1,nBins1,xmin1,xmax1);
319 histName =
"fhnDeltaMassCorr";
320 histTitle = Form(
"%s;#it{M}_{det} - #it{M}_{part} ;(#it{M}_{det} - #it{M}_{part})/#it{M}_{part}; #it{M}_{part}; #it{p}_{T,det}; #it{p}_{T,part}",histName.Data());
321 fhnDeltaMassCorr =
new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse1,nBins1,xmin1,xmax1);
322 fOutput->Add(fhnDeltaMassCorr);
326 TH1::AddDirectory(oldStatus);
330 if(binsPt)
delete [] binsPt;
331 if(binsPtTr)
delete [] binsPtTr;
332 if(binsM)
delete [] binsM;
333 if(binsR)
delete [] binsR;
353 TClonesArray* partArray =
dynamic_cast<TClonesArray*
>(InputEvent()->FindListObject(
fPartArrayN));
355 AliError(
"Array of particles not found, cannot loop into the constituents of the particle level jet");
360 if(!jPart || !jet1)
return -1;
364 Double_t avgpTRec = 0, avgpTGen = 0;
366 if(NconstRec == 0)
return -1;
367 Int_t labels[NconstRec];
368 for(
Int_t i=0 ; i<NconstRec;i++){
369 AliVParticle *vp =
static_cast<AliVParticle*
>(jet1->
TrackAt(i,
fTracks));
375 labels[i]=vp->GetLabel();
379 for(
Int_t i=0 ; i<NconstGen; i++){
380 AliVParticle *vp =
static_cast<AliVParticle*
>(jPart->
TrackAt(i, partArray));
386 for(
Int_t j=0;j<NconstRec;j++){
387 if (vp->GetLabel()==labels[j]){
414 Int_t nmissedthisjet = -10;
416 jetCont->ResetCurrentID();
426 Double_t var[4] = {mJet1,jPart->
M(),ptJet1,jPart->
Pt()};
428 Double_t var1[5] = {mJet1-jPart->
M(),(mJet1-jPart->
M())/jPart->
M(),jPart->
M(), ptJet1,jPart->
Pt()};
437 static Int_t indexes[9999] = {-1};
442 AliVParticle *vp =
static_cast<AliVParticle*
>(jet1->
TrackAt(indexes[i],
fTracks));
448 TLorentzVector sumVec; sumVec.SetPtEtaPhiM(0.,0.,0.,0.);
449 TLorentzVector corrVec; corrVec.SetPtEtaPhiM(0.,0.,0.,0.);
450 TLorentzVector curVec;
452 AliVParticle *vp =
static_cast<AliVParticle*
>(jet1->
TrackAt(indexes[i],
fTracks));
455 curVec.SetPtEtaPhiM(vp->Pt(),vp->Eta(),vp->Phi(),vp->M());
473 curVec.SetPtEtaPhiM(vp->Pt(),deta+jet1->
Eta(),dphi+jet1->
Phi(),vp->M());
483 Double_t varCorr[4] = {corrVec.M(),jPart->
M(),corrVec.Pt(),jPart->
Pt()};
489 if(nmissedthisjet > 0)
493 if(jPart && jetCorr) {
494 Double_t varCorr[4] = {jetCorr->
M(),jPart->
M(),jetCorr->
Pt(),jPart->
Pt()};
496 Double_t varCorr1[5] = {jetCorr->
M()-jPart->
M(),(jetCorr->
M()-jPart->
M())/jPart->
M(),jPart->
M(),jetCorr->
Pt(),jPart->
Pt()};
502 AliError(
"Array of added particles not found, cannot loop into the constituents");
507 Int_t NconstCorr = partArray->GetEntries();
509 for(
Int_t l=0 ; l<NconstCorr; l++){
510 TLorentzVector *vp = (TLorentzVector*)partArray->At(l);
520 nmissedthisjet = -10;
544 if (n < 1)
return kFALSE;
546 for (
Int_t i = 0; i < n; i++) {
547 AliVParticle *vp =
static_cast<AliVParticle*
>(jet->
TrackAt(i,
fTracks));
551 TMath::Sort(n, dr, indexes);
Bool_t GetExternalDefinitionOfNmissed() const
TH2F ** fh2PtMassCorr
! jet pT vs mass corrected
TString fPartArrayN
Array of particles used for jet reconstruction at particle level (need to make it transient probably)...
AliEmcalJet * ClosestJet() const
AliJetContainer * GetJetContainer(Int_t i=0) const
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.
Int_t fContainerBase
jets to be analyzed
Bool_t FillHistograms()
Function filling histograms.
TRandom3 * fRandom
! random number generator
TH3F ** fh3PtDRMassCorr
! jet pT vs dr(jet axis, constituent) vs cumulative mass density corrected
THnSparse * fhnMassResponseCorr
! response matrix corrected
TList * fListOfOutputFromClass
! list of output from class AliEmcalJetByJetCorrection
AliEmcalJet * Eval(const AliEmcalJet *jet, TClonesArray *fTracks)
void SetNMissedTracks(Double_t number)
THnSparse * fhnDeltaMass
! resolution on mass matrix
TH2F ** fh2PtMass
! jet pT vs mass
TH2F * fhAllpTRec
! histogram that stores the pT of the constituents (RECO level)
TH2F * fhAllpTGen
! histogram that stores the pT of the constituents (PART level)
AliAnalysisTaskEmcalJetMassStructure()
Int_t fCentBin
!event centrality bin
Bool_t RetrieveEventObjects()
THnSparse * fhnDeltaMassCorr
! resolution on mass matrix corrected
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
TH3F ** fh3JetPtDRTrackPt
! jet pt vs dr(jet axis, constituent) vs pT,track
AliParticleContainer * GetParticleContainer() const
JetByJetCorrType fCorrType
jet-by-jet correction method
Double_t fEfficiencyFixed
fixed efficiency for all pT and all types of tracks
void UserCreateOutputObjects()
TH3F ** fh3PtDRRho
! jet pT vs dr(jet axis, constituent) vs cumulative pt density
Int_t fNcentBins
how many centrality bins
TH3F ** fh3PtDRRhoCorr
! jet pT vs dr(jet axis, constituent) vs cumulative pt density corrected
Double_t GetSecondOrderSubtracted() const
Bool_t GetSortedArray(Int_t indexes[], Float_t dr[], AliEmcalJet *jet) const
AliEmcalJet * GetNextAcceptJet()
Double_t DeltaR(const AliVParticle *part) const
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)
JetMassType fJetMassType
jet mass type to be used
Double_t GetRhoVal(Int_t i=0) const
TH3F ** fh3PtDRMass
! jet pT vs dr(jet axis, constituent) vs cumulative mass density
Float_t GetJetRadius() const
AliEmcalList * fOutput
!output list
Double_t GetJetMass(AliEmcalJet *jet)
TClonesArray * fTracks
!tracks
AliEmcalJetByJetCorrection * fEJetByJetCorr
object to do jet-by-jet correction
Bool_t fSwitchResolutionhn
switch on/off (default on) the 2 THnSparse for the mass resolution
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
THnSparse * fhnMassResponse
! response matrix
Double_t GetEfficiency(Double_t pt)
virtual ~AliAnalysisTaskEmcalJetMassStructure()
void UserCreateOutputObjects()
Main initialization function on the worker.
AliEmcalJetShapeProperties * GetShapeProperties() const
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
TH2F * fhAllpTCor
! histogram that stores the pT of the constituents (CORR level)
Int_t CalculateNMissingTracks(AliEmcalJet *jet1, AliEmcalJet *jPart)
void Terminate(Option_t *option)
TClonesArray * GetAddedTrackArray() const
TList * GetListOfOutput() const
TH1F * fhtmppTGen
Temporary stores the pT distribution of jet constituents (gen level)
Container for jet within the EMCAL jet framework.
THnSparse * fhConstRecGen
! number of constituent correlation
TH1F * fhtmppTRec
Temporary stores the pT distribution of jet constituents (reco level)