#include "TH2.h"
#include "TH3.h"
#include "TMath.h"
#include "TRandom3.h"
#include "TLorentzVector.h"
#include "AliEmcalJet.h"
#include "AliVParticle.h"
#include "AliEmcalJetByJetCorrection.h"
ClassImp(AliEmcalJetByJetCorrection)
AliEmcalJetByJetCorrection::AliEmcalJetByJetCorrection() :
TNamed(),
fh3JetPtDRTrackPt(0x0),
fBinWidthJetPt(10.),
fJetPtMin(0.),
fJetPtMax(150.),
fCollTemplates(),
fInitialized(kFALSE),
fEfficiencyFixed(1.),
fhEfficiency(0)
{
fCollTemplates.SetOwner(kTRUE);
}
AliEmcalJetByJetCorrection::AliEmcalJetByJetCorrection(const char* name) :
TNamed(name, name),
fh3JetPtDRTrackPt(0x0),
fBinWidthJetPt(10.),
fJetPtMin(0.),
fJetPtMax(150.),
fCollTemplates(),
fInitialized(kFALSE),
fEfficiencyFixed(1.),
fhEfficiency(0)
{
fCollTemplates.SetOwner(kTRUE);
}
AliEmcalJetByJetCorrection::AliEmcalJetByJetCorrection(const AliEmcalJetByJetCorrection &other) :
TNamed(other),
fh3JetPtDRTrackPt(other.fh3JetPtDRTrackPt),
fBinWidthJetPt(other.fBinWidthJetPt),
fJetPtMin(other.fJetPtMin),
fJetPtMax(other.fJetPtMax),
fCollTemplates(other.fCollTemplates),
fInitialized(other.fInitialized),
fEfficiencyFixed(other.fEfficiencyFixed),
fhEfficiency(other.fhEfficiency)
{
}
AliEmcalJetByJetCorrection& AliEmcalJetByJetCorrection::operator=(const AliEmcalJetByJetCorrection &other)
{
if (&other == this) return *this;
TNamed::operator=(other);
fh3JetPtDRTrackPt = other.fh3JetPtDRTrackPt;
fBinWidthJetPt = other.fBinWidthJetPt;
fJetPtMin = other.fJetPtMin;
fJetPtMax = other.fJetPtMax;
fCollTemplates = other.fCollTemplates;
fInitialized = other.fInitialized;
fEfficiencyFixed = other.fEfficiencyFixed;
fhEfficiency = other.fhEfficiency;
return *this;
}
AliEmcalJet* AliEmcalJetByJetCorrection::Eval(const AliEmcalJet *jet, TClonesArray *fTracks) {
if(!fInitialized) {
Printf("AliEmcalJetByJetCorrection %s not initialized",GetName());
return NULL;
}
Int_t bin = GetJetPtBin(jet->Pt());
if(bin<0 || bin>fCollTemplates.GetEntriesFast()) return NULL;
TH2D *hTemplate = static_cast<TH2D*>(fCollTemplates.At(bin));
Double_t meanPt = GetMeanPtConstituents(jet,fTracks);
Double_t eff = GetEfficiency(meanPt);
Int_t np = TMath::FloorNint((double)jet->GetNumberOfTracks() * (1./eff -1.));
TLorentzVector corrVec; corrVec.SetPtEtaPhiM(jet->Pt(),jet->Eta(),jet->Phi(),jet->M());
Double_t mass = 0.13957;
for(Int_t i = 0; i<np; i++) {
Double_t r;
Double_t pt;
hTemplate->GetRandom2(r,pt);
Double_t t = TMath::TwoPi()*gRandom->Uniform(1.);
Double_t deta = r*TMath::Cos(t);
Double_t dphi = r*TMath::Sin(t);
TLorentzVector curVec;
curVec.SetPtEtaPhiM(pt,deta+jet->Eta(),dphi+jet->Phi(),mass);
corrVec+=curVec;
}
AliEmcalJet *jetCorr = new AliEmcalJet(corrVec.Pt(),corrVec.Eta(),corrVec.Phi(),corrVec.M());
return jetCorr;
}
void AliEmcalJetByJetCorrection::Init() {
if(!fh3JetPtDRTrackPt) {
Printf("%s fh3JetPtDRTrackPt not known",GetName());
fInitialized = kFALSE;
return;
}
if(fJetPtMax>fh3JetPtDRTrackPt->GetXaxis()->GetXmax())
fJetPtMax = fh3JetPtDRTrackPt->GetXaxis()->GetXmax();
if(fJetPtMin<fh3JetPtDRTrackPt->GetXaxis()->GetXmin())
fJetPtMin = fh3JetPtDRTrackPt->GetXaxis()->GetXmin();
Double_t eps = 0.00001;
Int_t counter = 0;
for(Double_t ptmin = fJetPtMin; ptmin<fJetPtMax; ptmin+=fBinWidthJetPt) {
Int_t binMin = fh3JetPtDRTrackPt->GetXaxis()->FindBin(ptmin+eps);
Int_t binMax = fh3JetPtDRTrackPt->GetXaxis()->FindBin(ptmin+fBinWidthJetPt-eps);
fh3JetPtDRTrackPt->GetXaxis()->SetRange(binMin,binMax);
TH2D *h2 = dynamic_cast<TH2D*>(fh3JetPtDRTrackPt->Project3D("zy"));
h2->SetName(Form("hPtR_%.0f_%.0f",fh3JetPtDRTrackPt->GetXaxis()->GetBinLowEdge(binMin),fh3JetPtDRTrackPt->GetXaxis()->GetBinUpEdge(binMax)));
fCollTemplates.Add(h2);
counter++;
}
fInitialized = kTRUE;
}
Int_t AliEmcalJetByJetCorrection::GetJetPtBin(const Double_t jetpt) const {
if(jetpt<fJetPtMin || jetpt>=fJetPtMax)
return -1;
Int_t bin = TMath::FloorNint((jetpt - fJetPtMin)/fBinWidthJetPt);
return bin;
}
Double_t AliEmcalJetByJetCorrection::GetEfficiency(const Double_t pt) const {
Double_t eff = 1.;
if(fEfficiencyFixed<1.) return fEfficiencyFixed;
else if(fhEfficiency) {
Int_t bin = fhEfficiency->GetXaxis()->FindBin(pt);
eff = fhEfficiency->GetBinContent(bin);
}
return eff;
}
Double_t AliEmcalJetByJetCorrection::GetMeanPtConstituents(const AliEmcalJet *jet, TClonesArray *fTracks) const {
if(!jet || !fTracks) return -1.;
if(jet->GetNumberOfTracks()<1) return -1;
AliVParticle *vp;
Double_t sumPtCh = 0.;
for(Int_t icc=0; icc<jet->GetNumberOfTracks(); icc++) {
vp = static_cast<AliVParticle*>(jet->TrackAt(icc, fTracks));
if(!vp) continue;
sumPtCh+=vp->Pt();
}
Double_t meanpt = sumPtCh/(double)(jet->GetNumberOfTracks());
return meanpt;
}
AliEmcalJetByJetCorrection.cxx:1 AliEmcalJetByJetCorrection.cxx:2 AliEmcalJetByJetCorrection.cxx:3 AliEmcalJetByJetCorrection.cxx:4 AliEmcalJetByJetCorrection.cxx:5 AliEmcalJetByJetCorrection.cxx:6 AliEmcalJetByJetCorrection.cxx:7 AliEmcalJetByJetCorrection.cxx:8 AliEmcalJetByJetCorrection.cxx:9 AliEmcalJetByJetCorrection.cxx:10 AliEmcalJetByJetCorrection.cxx:11 AliEmcalJetByJetCorrection.cxx:12 AliEmcalJetByJetCorrection.cxx:13 AliEmcalJetByJetCorrection.cxx:14 AliEmcalJetByJetCorrection.cxx:15 AliEmcalJetByJetCorrection.cxx:16 AliEmcalJetByJetCorrection.cxx:17 AliEmcalJetByJetCorrection.cxx:18 AliEmcalJetByJetCorrection.cxx:19 AliEmcalJetByJetCorrection.cxx:20 AliEmcalJetByJetCorrection.cxx:21 AliEmcalJetByJetCorrection.cxx:22 AliEmcalJetByJetCorrection.cxx:23 AliEmcalJetByJetCorrection.cxx:24 AliEmcalJetByJetCorrection.cxx:25 AliEmcalJetByJetCorrection.cxx:26 AliEmcalJetByJetCorrection.cxx:27 AliEmcalJetByJetCorrection.cxx:28 AliEmcalJetByJetCorrection.cxx:29 AliEmcalJetByJetCorrection.cxx:30 AliEmcalJetByJetCorrection.cxx:31 AliEmcalJetByJetCorrection.cxx:32 AliEmcalJetByJetCorrection.cxx:33 AliEmcalJetByJetCorrection.cxx:34 AliEmcalJetByJetCorrection.cxx:35 AliEmcalJetByJetCorrection.cxx:36 AliEmcalJetByJetCorrection.cxx:37 AliEmcalJetByJetCorrection.cxx:38 AliEmcalJetByJetCorrection.cxx:39 AliEmcalJetByJetCorrection.cxx:40 AliEmcalJetByJetCorrection.cxx:41 AliEmcalJetByJetCorrection.cxx:42 AliEmcalJetByJetCorrection.cxx:43 AliEmcalJetByJetCorrection.cxx:44 AliEmcalJetByJetCorrection.cxx:45 AliEmcalJetByJetCorrection.cxx:46 AliEmcalJetByJetCorrection.cxx:47 AliEmcalJetByJetCorrection.cxx:48 AliEmcalJetByJetCorrection.cxx:49 AliEmcalJetByJetCorrection.cxx:50 AliEmcalJetByJetCorrection.cxx:51 AliEmcalJetByJetCorrection.cxx:52 AliEmcalJetByJetCorrection.cxx:53 AliEmcalJetByJetCorrection.cxx:54 AliEmcalJetByJetCorrection.cxx:55 AliEmcalJetByJetCorrection.cxx:56 AliEmcalJetByJetCorrection.cxx:57 AliEmcalJetByJetCorrection.cxx:58 AliEmcalJetByJetCorrection.cxx:59 AliEmcalJetByJetCorrection.cxx:60 AliEmcalJetByJetCorrection.cxx:61 AliEmcalJetByJetCorrection.cxx:62 AliEmcalJetByJetCorrection.cxx:63 AliEmcalJetByJetCorrection.cxx:64 AliEmcalJetByJetCorrection.cxx:65 AliEmcalJetByJetCorrection.cxx:66 AliEmcalJetByJetCorrection.cxx:67 AliEmcalJetByJetCorrection.cxx:68 AliEmcalJetByJetCorrection.cxx:69 AliEmcalJetByJetCorrection.cxx:70 AliEmcalJetByJetCorrection.cxx:71 AliEmcalJetByJetCorrection.cxx:72 AliEmcalJetByJetCorrection.cxx:73 AliEmcalJetByJetCorrection.cxx:74 AliEmcalJetByJetCorrection.cxx:75 AliEmcalJetByJetCorrection.cxx:76 AliEmcalJetByJetCorrection.cxx:77 AliEmcalJetByJetCorrection.cxx:78 AliEmcalJetByJetCorrection.cxx:79 AliEmcalJetByJetCorrection.cxx:80 AliEmcalJetByJetCorrection.cxx:81 AliEmcalJetByJetCorrection.cxx:82 AliEmcalJetByJetCorrection.cxx:83 AliEmcalJetByJetCorrection.cxx:84 AliEmcalJetByJetCorrection.cxx:85 AliEmcalJetByJetCorrection.cxx:86 AliEmcalJetByJetCorrection.cxx:87 AliEmcalJetByJetCorrection.cxx:88 AliEmcalJetByJetCorrection.cxx:89 AliEmcalJetByJetCorrection.cxx:90 AliEmcalJetByJetCorrection.cxx:91 AliEmcalJetByJetCorrection.cxx:92 AliEmcalJetByJetCorrection.cxx:93 AliEmcalJetByJetCorrection.cxx:94 AliEmcalJetByJetCorrection.cxx:95 AliEmcalJetByJetCorrection.cxx:96 AliEmcalJetByJetCorrection.cxx:97 AliEmcalJetByJetCorrection.cxx:98 AliEmcalJetByJetCorrection.cxx:99 AliEmcalJetByJetCorrection.cxx:100 AliEmcalJetByJetCorrection.cxx:101 AliEmcalJetByJetCorrection.cxx:102 AliEmcalJetByJetCorrection.cxx:103 AliEmcalJetByJetCorrection.cxx:104 AliEmcalJetByJetCorrection.cxx:105 AliEmcalJetByJetCorrection.cxx:106 AliEmcalJetByJetCorrection.cxx:107 AliEmcalJetByJetCorrection.cxx:108 AliEmcalJetByJetCorrection.cxx:109 AliEmcalJetByJetCorrection.cxx:110 AliEmcalJetByJetCorrection.cxx:111 AliEmcalJetByJetCorrection.cxx:112 AliEmcalJetByJetCorrection.cxx:113 AliEmcalJetByJetCorrection.cxx:114 AliEmcalJetByJetCorrection.cxx:115 AliEmcalJetByJetCorrection.cxx:116 AliEmcalJetByJetCorrection.cxx:117 AliEmcalJetByJetCorrection.cxx:118 AliEmcalJetByJetCorrection.cxx:119 AliEmcalJetByJetCorrection.cxx:120 AliEmcalJetByJetCorrection.cxx:121 AliEmcalJetByJetCorrection.cxx:122 AliEmcalJetByJetCorrection.cxx:123 AliEmcalJetByJetCorrection.cxx:124 AliEmcalJetByJetCorrection.cxx:125 AliEmcalJetByJetCorrection.cxx:126 AliEmcalJetByJetCorrection.cxx:127 AliEmcalJetByJetCorrection.cxx:128 AliEmcalJetByJetCorrection.cxx:129 AliEmcalJetByJetCorrection.cxx:130 AliEmcalJetByJetCorrection.cxx:131 AliEmcalJetByJetCorrection.cxx:132 AliEmcalJetByJetCorrection.cxx:133 AliEmcalJetByJetCorrection.cxx:134 AliEmcalJetByJetCorrection.cxx:135 AliEmcalJetByJetCorrection.cxx:136 AliEmcalJetByJetCorrection.cxx:137 AliEmcalJetByJetCorrection.cxx:138 AliEmcalJetByJetCorrection.cxx:139 AliEmcalJetByJetCorrection.cxx:140 AliEmcalJetByJetCorrection.cxx:141 AliEmcalJetByJetCorrection.cxx:142 AliEmcalJetByJetCorrection.cxx:143 AliEmcalJetByJetCorrection.cxx:144 AliEmcalJetByJetCorrection.cxx:145 AliEmcalJetByJetCorrection.cxx:146 AliEmcalJetByJetCorrection.cxx:147 AliEmcalJetByJetCorrection.cxx:148 AliEmcalJetByJetCorrection.cxx:149 AliEmcalJetByJetCorrection.cxx:150 AliEmcalJetByJetCorrection.cxx:151 AliEmcalJetByJetCorrection.cxx:152 AliEmcalJetByJetCorrection.cxx:153 AliEmcalJetByJetCorrection.cxx:154 AliEmcalJetByJetCorrection.cxx:155 AliEmcalJetByJetCorrection.cxx:156 AliEmcalJetByJetCorrection.cxx:157 AliEmcalJetByJetCorrection.cxx:158 AliEmcalJetByJetCorrection.cxx:159 AliEmcalJetByJetCorrection.cxx:160 AliEmcalJetByJetCorrection.cxx:161 AliEmcalJetByJetCorrection.cxx:162 AliEmcalJetByJetCorrection.cxx:163 AliEmcalJetByJetCorrection.cxx:164 AliEmcalJetByJetCorrection.cxx:165 AliEmcalJetByJetCorrection.cxx:166 AliEmcalJetByJetCorrection.cxx:167 AliEmcalJetByJetCorrection.cxx:168 AliEmcalJetByJetCorrection.cxx:169 AliEmcalJetByJetCorrection.cxx:170 AliEmcalJetByJetCorrection.cxx:171 AliEmcalJetByJetCorrection.cxx:172 AliEmcalJetByJetCorrection.cxx:173 AliEmcalJetByJetCorrection.cxx:174 AliEmcalJetByJetCorrection.cxx:175 AliEmcalJetByJetCorrection.cxx:176 AliEmcalJetByJetCorrection.cxx:177 AliEmcalJetByJetCorrection.cxx:178 AliEmcalJetByJetCorrection.cxx:179 AliEmcalJetByJetCorrection.cxx:180 AliEmcalJetByJetCorrection.cxx:181 AliEmcalJetByJetCorrection.cxx:182 AliEmcalJetByJetCorrection.cxx:183 AliEmcalJetByJetCorrection.cxx:184 AliEmcalJetByJetCorrection.cxx:185 AliEmcalJetByJetCorrection.cxx:186 AliEmcalJetByJetCorrection.cxx:187 AliEmcalJetByJetCorrection.cxx:188 AliEmcalJetByJetCorrection.cxx:189 AliEmcalJetByJetCorrection.cxx:190 AliEmcalJetByJetCorrection.cxx:191 AliEmcalJetByJetCorrection.cxx:192 AliEmcalJetByJetCorrection.cxx:193 AliEmcalJetByJetCorrection.cxx:194 AliEmcalJetByJetCorrection.cxx:195 AliEmcalJetByJetCorrection.cxx:196