7 #include <TClonesArray.h>
11 #include <THnSparse.h>
14 #include <TLorentzVector.h>
21 #include "TMatrixDSym.h"
22 #include "TMatrixDSymEigen.h"
25 #include "AliVCluster.h"
26 #include "AliVTrack.h"
31 #include "AliMCEvent.h"
32 #include "AliGenPythiaEventHeader.h"
33 #include "AliAODMCHeader.h"
34 #include "AliMCEvent.h"
35 #include "AliAnalysisManager.h"
40 #include "AliAODEvent.h"
52 fMinFractionShared(0),
55 fJetSelection(kInclusive),
61 fangWindowRecoil(0.6),
68 fOneConstSelectOn(kFALSE),
87 SetMakeGeneralHistograms(kTRUE);
94 fMinFractionShared(0),
97 fJetSelection(kInclusive),
103 fangWindowRecoil(0.6),
107 fCentSelectOn(kTRUE),
110 fOneConstSelectOn(kFALSE),
133 DefineOutput(1, TTree::Class());
150 Bool_t oldStatus = TH1::AddDirectoryStatus();
151 TH1::AddDirectory(kFALSE);
159 fShapesVarNames[0] =
"ptJet";
160 fShapesVarNames[1] =
"ptDJet";
161 fShapesVarNames[2] =
"angularity";
162 fShapesVarNames[3] =
"angularitysquared";
163 fShapesVarNames[4]=
"hardtrack";
164 fShapesVarNames[5]=
"hard2track";
165 fShapesVarNames[6]=
"corefrac";
166 fShapesVarNames[7]=
"nsubjet1";
167 fShapesVarNames[8]=
"nsubjet2";
168 fShapesVarNames[9]=
"subjetfrac";
169 fShapesVarNames[10]=
"mass";
171 cout<<
"looping over variables"<<endl;
178 fh2ResponseUW=
new TH2F(
"fh2ResponseUW",
"fh2ResponseUW", 100, 0, 200, 100, 0, 200);
180 fh2ResponseW=
new TH2F(
"fh2ResponseW",
"fh2ResponseW", 100, 0, 200, 100, 0, 200);
182 fPhiJetCorr6=
new TH2F(
"fPhiJetCorr6",
"fPhiJetCorr6", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
184 fEtaJetCorr6=
new TH2F(
"fEtaJetCorr6",
"fEtaJetCorr6", 50, -1.5, 1.5, 50, -1.5, 1.5);
187 fPhiJetCorr7=
new TH2F(
"fPhiJetCorr7",
"fPhiJetCorr7", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
189 fEtaJetCorr7=
new TH2F(
"fEtaJetCorr7",
"fEtaJetCorr7", 50, -1.5, 1.5, 50, -1.5, 1.5);
192 fPtJetCorr=
new TH2F(
"fPtJetCorr",
"fPtJetCorr", 100, 0, 200, 100, 0, 200);
194 fPtJet=
new TH1F(
"fPtJet",
"fPtJet", 100, 0, 200);
197 fhpTjetpT=
new TH2F(
"fhpTjetpT",
"fhpTjetpT", 200, 0, 200, 200, 0, 200);
199 fhPt=
new TH1F(
"fhPt",
"fhPt", 200, 0, 200);
201 fhPhi=
new TH1F(
"fhPhi",
"fhPhi", 100, -TMath::Pi(), TMath::Pi());
204 fNbOfConstvspT=
new TH2F(
"fNbOfConstvspT",
"fNbOfConstvspT", 100, 0, 100, 200, 0, 200);
208 TH1::AddDirectory(oldStatus);
232 AliAODTrack *triggerHadron = 0x0;
239 if (triggerHadronLabel==-99999) {
245 TClonesArray *trackArrayAn = partContAn->GetArray();
246 triggerHadron =
static_cast<AliAODTrack*
>(trackArrayAn->At(triggerHadronLabel));
248 if (!triggerHadron) {
259 fhPt->Fill(triggerHadron->Pt());
264 jetCont->ResetCurrentID();
332 AliVParticle *vp1 = 0x0;
337 Printf(
"AliVParticle associated to constituent not found");
342 Double_t dr2 = (vp1->Eta()-jet->
Eta())*(vp1->Eta()-jet->
Eta()) + dphi*dphi;
344 num=num+vp1->Pt()*dr;
368 AliVParticle *vp1 = 0x0;
373 Printf(
"AliVParticle associated to constituent not found");
378 Double_t dr2 = (vp1->Eta()-jet->
Eta())*(vp1->Eta()-jet->
Eta()) + dphi*dphi;
380 num=num+vp1->Pt()*TMath::Sqrt(dr);
406 AliVParticle *vp1 = 0x0;
411 Printf(
"AliVParticle associated to constituent not found");
415 num=num+vp1->Pt()*vp1->Pt();
418 return TMath::Sqrt(num)/den;
428 return PTD(jet, jetContNb);
442 AliVParticle *vp1 = 0x0;
444 std::vector<int> ordindex;
446 if(ordindex.size()<1)
return -1;
450 Printf(
"AliVParticle associated to Leading constituent not found");
482 AliVParticle *vp1 = 0x0;
483 AliVParticle *vp2 = 0x0;
484 std::vector<int> ordindex;
488 if(ordindex.size()<2)
return -1;
493 Printf(
"AliVParticle associated to Subleading constituent not found");
522 AliVParticle *JetParticle=0x0;
524 Double_t SubJetiness_Denominator = 0;
531 for (
Int_t j=1; j<=N; j++){
539 DeltaR1=TMath::Power((Reclusterer->
GetJet(Index)->
Pt()),A)*TMath::Power((TMath::Sqrt((((JetParticle->Eta())-(Reclusterer->
GetJet(Index)->
Eta()))*((JetParticle->Eta())- (Reclusterer->
GetJet(Index)->
Eta())))+((
RelativePhi((Reclusterer->
GetJet(Index)->
Phi()),JetParticle->Phi()))*(
RelativePhi((Reclusterer->
GetJet(Index)->
Phi()),JetParticle->Phi()))))),B);
542 DeltaR2=TMath::Power((Reclusterer->
GetJet(Index)->
Pt()),A)*TMath::Power((TMath::Sqrt((((JetParticle->Eta())-(Reclusterer->
GetJet(Index)->
Eta()))*((JetParticle->Eta())- (Reclusterer->
GetJet(Index)->
Eta())))+((
RelativePhi((Reclusterer->
GetJet(Index)->
Phi()),JetParticle->Phi()))*(
RelativePhi((Reclusterer->
GetJet(Index)->
Phi()),JetParticle->Phi()))))),B);
543 if (DeltaR2<DeltaR1) DeltaR1=DeltaR2;
546 SubJetiness_Numerator=SubJetiness_Numerator+(JetParticle->Pt()*DeltaR1);
547 if (A>=0) SubJetiness_Denominator=SubJetiness_Denominator+(TMath::Power((Reclusterer->
GetJet(
SubJetOrdering(Jet,Reclusterer,1,0,kTRUE))->
Pt()),A)*JetParticle->Pt()*TMath::Power(JetRadius,B));
548 else SubJetiness_Denominator=SubJetiness_Denominator+(TMath::Power((Reclusterer->
GetJet(
SubJetOrdering(Jet,Reclusterer,N,0,kTRUE))->
Pt()),A)*JetParticle->Pt()*TMath::Power(JetRadius,B));
550 if (SubJetiness_Denominator!=0 && !Error)
return SubJetiness_Numerator/SubJetiness_Denominator;
561 AliVParticle *JetParticle=0x0;
563 Double_t SubJetiness_Denominator = 0;
567 if(Index==-999)
return -2;
568 SubJetiness_Numerator=(Reclusterer->
GetJet(Index)->
Pt());
569 SubJetiness_Denominator=Jet->
Pt();
570 return SubJetiness_Numerator/SubJetiness_Denominator;
587 AliVParticle *vp1 = 0x0;
592 Printf(
"AliVParticle associated to constituent not found");
597 Double_t dr2 = (vp1->Eta()-jet->
Eta())*(vp1->Eta()-jet->
Eta()) + dphi*dphi;
602 return num/jet->
Pt();
627 Int_t ArraySize =N+1;
630 for (
Int_t i=0; i<ArraySize; i++){
631 JetSorter->SetAt(0,i);
633 for (
Int_t i=0; i<ArraySize; i++){
634 JetIndexSorter->SetAt(0,i);
638 SubJet=Reclusterer->
GetJet(i);
639 if (Type==0) SortingVariable=SubJet->
Pt();
640 else if (Type==1) SortingVariable=SubJet->
E();
641 else if (Type==2) SortingVariable=SubJet->
M();
642 for (
Int_t j=0; j<N; j++){
643 if (SortingVariable>JetSorter->GetAt(j)){
644 for (
Int_t k=N-1; k>=j; k--){
645 JetSorter->SetAt(JetSorter->GetAt(k),k+1);
646 JetIndexSorter->SetAt(JetIndexSorter->GetAt(k),k+1);
648 JetSorter->SetAt(SortingVariable,j);
649 JetIndexSorter->SetAt(i,j);
654 if (!Index)
return JetSorter->GetAt(N-1);
655 else return JetIndexSorter->GetAt(N-1);
679 TClonesArray *tracksArray = partCont->GetArray();
681 if(!partCont || !tracksArray)
return -99999;
682 AliAODTrack *track = 0x0;
688 for (
Int_t iTrigger=0; iTrigger<100; iTrigger++) triggers[iTrigger] = 0;
691 for(
Int_t iTrack=0; iTrack <= tracksArray->GetEntriesFast(); iTrack++){
696 if (!emcPart)
continue;
697 if(TMath::Abs(emcPart->
Eta())>0.9)
continue;
698 if (emcPart->
Pt()<0.15)
continue;
700 if ((emcPart->
Pt() >= minpT) && (emcPart->
Pt()< maxpT)) {
701 trackList->Add(emcPart);
702 triggers[iTT] = iTrack;
707 track =
static_cast<AliAODTrack*
>(tracksArray->At(iTrack));
708 if (!track)
continue;
709 if(TMath::Abs(track->Eta())>0.9)
continue;
710 if (track->Pt()<0.15)
continue;
711 if (!(track->TestFilterBit(768)))
continue;
713 if ((track->Pt() >= minpT) && (track->Pt()< maxpT)) {
714 trackList->Add(track);
715 triggers[iTT] = iTrack;
722 if (iTT == 0)
return -99999;
723 Int_t nbRn = 0, index = 0 ;
724 TRandom3* random =
new TRandom3(0);
725 nbRn = random->Integer(iTT);
727 index = triggers[nbRn];
742 const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
743 Double_t dVtx[3]={vert->GetX(),vert->GetY(),vert->GetZ()};
744 if(Reclusterer->AliEmcalJetFinder::Filter(Jet, JetCont, dVtx)){;}
754 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
755 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
756 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
757 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
758 double dphi = mphi-vphi;
759 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
760 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
Float_t GetJetSecHardTrack(AliEmcalJet *jet, Int_t jetContNb)
void SetRadius(Double_t val)
Double_t GetFirstOrderSubtractedAngularity() const
void SetJetMinPt(Double_t val)
Float_t GetJetCoreFrac(AliEmcalJet *jet, Int_t jetContNb)
JetSelectionType fJetSelection
AliJetContainer * GetJetContainer(Int_t i=0) const
AliEmcalJetFinder * Recluster(AliEmcalJet *Jet, Int_t JetContNb, Double_t SubJetRadius, Double_t SubJetMinPt, Int_t Algorithm, const char *Name)
Int_t SelectTrigger(Float_t minpT, Float_t maxpT)
void Terminate(Option_t *option)
Double_t GetSecondOrderSubtractedpTD() const
Bool_t RetrieveEventObjects()
Double_t GetFirstOrderSubtractedLeSub() const
virtual ~AliAnalysisTaskFakeJets()
Double_t NSubJettiness(AliEmcalJet *Jet, Int_t JetContNb, Double_t JetRadius, AliEmcalJetFinder *Reclusterer, Int_t N, Int_t A, Int_t B)
Float_t GetJetHardTrack(AliEmcalJet *jet, Int_t jetContNb)
Float_t CoreFrac(AliEmcalJet *jet, Int_t jetContNb)
Container for particles within the EMCAL framework.
Int_t TrackAt(Int_t idx) const
Double_t GetFirstOrderSubtractedpTD() const
Float_t Angularity(AliEmcalJet *jet, Int_t jetContNb)
UShort_t GetNumberOfTracks() const
Float_t HardTrack(AliEmcalJet *jet, Int_t jetContNb)
TString kData
Declare data MC or deltaAOD.
Double_t GetSubjetFraction(AliEmcalJet *Jet, Int_t JetContNb, Double_t JetRadius, AliEmcalJetFinder *Reclusterer)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
Double_t GetSecondOrderSubtractedLeSub() const
AliParticleContainer * GetParticleContainer() const
Bool_t FillHistograms()
Function filling histograms.
void SetJetAlgorithm(Int_t val)
Float_t GetJetpTD(AliEmcalJet *jet, Int_t jetContNb)
Double_t GetSecondOrderSubtractedAngularity() const
Float_t AngularitySquared(AliEmcalJet *jet, Int_t jetContNb)
Double_t fCent
!event centrality
Double_t GetSecondOrderSubtracted() const
Float_t GetJetMass(AliEmcalJet *jet, Int_t jetContNb)
AliEmcalJet * GetNextAcceptJet()
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)
AliEmcalJet * GetJet(Int_t index)
Float_t GetJetAngularity(AliEmcalJet *jet, Int_t jetContNb)
AliEmcalList * fOutput
!output list
Float_t PTD(AliEmcalJet *jet, Int_t jetContNb)
Double_t SubJetOrdering(AliEmcalJet *Jet, AliEmcalJetFinder *Reclusterer, Int_t N, Int_t Type, Bool_t Index)
void SetMakeGeneralHistograms(Bool_t g)
Float_t GetJetAngularitySquared(AliEmcalJet *jet, Int_t jetContNb)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
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.
Float_t GetJetNumberOfConstituents(AliEmcalJet *jet, Int_t jetContNb)
void UserCreateOutputObjects()
Main initialization function on the worker.
Float_t SecHardTrack(AliEmcalJet *jet, Int_t jetContNb)
AliEmcalJetShapeProperties * GetShapeProperties() const
AliAnalysisTaskFakeJets()
Double_t RelativePhi(Double_t mphi, Double_t vphi)
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
Double_t GetFirstOrderSubtracted() const
Container for jet within the EMCAL jet framework.
void UserCreateOutputObjects()
std::vector< int > GetPtSortedTrackConstituentIndexes(TClonesArray *tracks) const