6 #include <TClonesArray.h>
11 #include <THnSparse.h>
14 #include <TLorentzVector.h>
20 #include <AliAnalysisDataSlot.h>
21 #include <AliAnalysisDataContainer.h>
23 #include "TMatrixDSym.h"
24 #include "TMatrixDSymEigen.h"
27 #include "AliVCluster.h"
28 #include "AliVTrack.h"
33 #include "AliMCEvent.h"
34 #include "AliGenPythiaEventHeader.h"
35 #include "AliAODMCHeader.h"
36 #include "AliMCEvent.h"
37 #include "AliAnalysisManager.h"
44 #include "AliAODEvent.h"
46 #include "AliMultSelection.h"
72 fMinFractionShared(0),
75 fJetSelection(kInclusive),
78 fPtMinTriggerHadron(20.),
79 fPtMaxTriggerHadron(50.),
80 fRecoilAngularWindow(0.6),
92 fSharedFractionPtMin(0.5),
107 fhNumberOfJetTracks(0x0),
111 fhPtTriggerHadron(0x0),
112 fh2PtTriggerHadronJet(0x0),
113 fhPhiTriggerHadronJet(0x0),
114 fhPhiTriggerHadronEventPlane(0x0),
115 fhPhiTriggerHadronEventPlaneTPC(0x0)
121 SetMakeGeneralHistograms(kTRUE);
122 DefineOutput(1, TList::Class());
123 DefineOutput(2, TTree::Class());
130 fMinFractionShared(0),
131 fJetShapeType(
kData),
132 fJetShapeSub(kNoSub),
133 fJetSelection(kInclusive),
134 fPtThreshold(-9999.),
136 fPtMinTriggerHadron(20.),
137 fPtMaxTriggerHadron(50.),
138 fRecoilAngularWindow(0.6),
142 fCentSelectOn(kTRUE),
150 fSharedFractionPtMin(0.5),
157 fNsubMeasure(kFALSE),
165 fhNumberOfJetTracks(0x0),
169 fhPtTriggerHadron(0x0),
170 fh2PtTriggerHadronJet(0x0),
171 fhPhiTriggerHadronJet(0x0),
172 fhPhiTriggerHadronEventPlane(0x0),
173 fhPhiTriggerHadronEventPlaneTPC(0x0)
181 DefineOutput(1, TList::Class());
182 DefineOutput(2, TTree::Class());
198 Bool_t oldStatus = TH1::AddDirectoryStatus();
199 TH1::AddDirectory(kFALSE);
200 TH1::AddDirectory(oldStatus);
201 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
205 const Int_t nVarMin = 13;
208 fJetInfoVarNames[0] =
"Pt";
209 fJetInfoVarNames[1] =
"Phi";
210 fJetInfoVarNames[2] =
"Eta";
211 fJetInfoVarNames[3] =
"SymParam";
212 fJetInfoVarNames[4] =
"Tau1";
213 fJetInfoVarNames[5] =
"Tau2";
214 fJetInfoVarNames[6] =
"Mass";
215 fJetInfoVarNames[7] =
"NTracks";
216 fJetInfoVarNames[8] =
"JetPtNoCut";
217 fJetInfoVarNames[9] =
"PTD";
218 fJetInfoVarNames[10] =
"Angularity";
219 fJetInfoVarNames[11] =
"Centrality";
220 fJetInfoVarNames[12] =
"DelR";
223 for(
Int_t ivar=0; ivar < nVarMin; ivar++){
224 cout<<
"looping over variables"<<endl;
231 fhJetPt=
new TH1F(
"fhJetPt",
"Jet Pt",1500,-0.5,149.5 );
233 fhJetPhi=
new TH1F(
"fhJetPhi",
"Jet Phi",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
237 fhJetMass=
new TH1F(
"fhJetMass",
"Jet Mass", 4000,-0.5, 39.5);
239 fhJetRadius=
new TH1F(
"fhJetRadius",
"Jet Radius", 100, -0.05,0.995);
241 fhNumberOfJetTracks=
new TH1F(
"fhNumberOfJetTracks",
"Number of Tracks within a Jet", 300, -0.5,299.5);
243 fhJetCounter=
new TH1F(
"fhJetCounter",
"Jet Counter", 150, -0.5, 149.5);
245 fhJetArea=
new TH1F(
"fhJetArea",
"Jet Area", 400,-0.5, 1.95);
247 fhTrackPt=
new TH1F(
"fhTrackPt",
"Track Pt",600,-0.5,59.5);
251 fhPtTriggerHadron=
new TH1F(
"fhPtTriggerHadron",
"fhPtTriggerHadron",1500,-0.5,149.5);
255 fhPhiTriggerHadronJet=
new TH1F(
"fhPhiTriggerHadronJet",
"fhPhiTriggerHadronJet",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
257 fhPhiTriggerHadronEventPlane=
new TH1F(
"fhPhiTriggerHadronEventPlane",
"fhPhiTriggerHadronEventPlane",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
259 fhPhiTriggerHadronEventPlaneTPC=
new TH1F(
"fhPhiTriggerHadronEventPlaneTPC",
"fhPhiTriggerHadronEventPlaneTPC",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
281 AliMultSelection *MultSelection = 0x0;
284 Error(
"UserExec",
"AOD not available");
287 MultSelection = (AliMultSelection * ) fEvent->FindListObject(
"MultSelection");
289 AliWarning(
"AliMultSelection object not found!");
292 Percentile_1 = MultSelection->GetMultiplicityPercentile(
"V0M");
298 AliAODTrack *TriggerHadron = 0x0;
302 if (TriggerHadronLabel==-99999)
return 0;
306 TClonesArray *TrackArray = PartCont->GetArray();
307 TriggerHadron =
static_cast<AliAODTrack*
>(TrackArray->At(TriggerHadronLabel));
308 if (!TriggerHadron)
return 0;
322 Bool_t EventCounter=kFALSE;
326 JetCont->ResetCurrentID();
331 else JetPt_ForThreshold = Jet1->
Pt();
350 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
351 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
386 if(Phi < -1*TMath::Pi()) Phi += (2*TMath::Pi());
387 else if (Phi > TMath::Pi()) Phi -= (2*TMath::Pi());
389 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
390 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
396 if(Phi1 < -1*TMath::Pi()) Phi1 += (2*TMath::Pi());
397 else if (Phi1 > TMath::Pi()) Phi1 -= (2*TMath::Pi());
398 if(Phi2 < -1*TMath::Pi()) Phi2 += (2*TMath::Pi());
399 else if (Phi2 > TMath::Pi()) Phi2 -= (2*TMath::Pi());
401 if(DeltaPhi < -1*TMath::Pi()) DeltaPhi += (2*TMath::Pi());
402 else if (DeltaPhi > TMath::Pi()) DeltaPhi -= (2*TMath::Pi());
415 AliVParticle *Particle=0x0;
421 if(!Particle)
continue;
423 Angularity_Numerator=Angularity_Numerator+(Particle->Pt()*TMath::Sqrt(((Particle->Eta()-Jet->
Eta())*(Particle->Eta()-Jet->
Eta()))+(DeltaPhi*
DeltaPhi)));
424 Angularity_Denominator= Angularity_Denominator+Particle->Pt();
426 if(Angularity_Denominator!=0)
return Angularity_Numerator/Angularity_Denominator;
439 AliVParticle *Particle=0x0;
443 if(!Particle)
continue;
444 PTD_Numerator=PTD_Numerator+(Particle->Pt()*Particle->Pt());
445 PTD_Denominator=PTD_Denominator+Particle->Pt();
447 if(PTD_Denominator!=0)
return TMath::Sqrt(PTD_Numerator)/PTD_Denominator;
454 std::vector<fastjet::PseudoJet> fInputVectors;
455 Double_t JetInvMass=0, PseudJetInvMass=0, TrackMom = 0, TrackEnergy = 0;
458 Double_t FJTrackEta[9999],FJTrackPhi[9999],FJTrackPt[9999],EmcalJetTrackEta[9999],EmcalJetTrackPhi[9999],EmcalJetTrackPt[9999];
459 UShort_t FJNTracks=0,EmcalJetNTracks=0;
461 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
462 JetInvMass += fTrk->M();
464 fastjet::PseudoJet PseudoTracks(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
465 TrackMom += TMath::Sqrt(TMath::Power(fTrk->Px(),2)+TMath::Power(fTrk->Py(),2)+TMath::Power(fTrk->Pz(),2));
466 TrackEnergy += fTrk->E();
467 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
468 PseudJetInvMass += PseudoTracks.m();
469 fInputVectors.push_back(PseudoTracks);
470 EmcalJetTrackEta[i]=fTrk->Eta();
471 EmcalJetTrackPhi[i]=fTrk->Phi();
472 EmcalJetTrackPt[i]=fTrk->Pt();
475 fastjet::JetDefinition *fJetDef;
476 fastjet::ClusterSequence *fClustSeqSA;
480 fJetDef =
new fastjet::JetDefinition(fastjet::antikt_algorithm,
fJetRadius*2, static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
483 fClustSeqSA =
new fastjet::ClusterSequence(fInputVectors, *fJetDef);
484 }
catch (fastjet::Error) {
485 AliError(
" [w] FJ Exception caught.");
489 std::vector<fastjet::PseudoJet> fOutputJets;
491 fOutputJets=fClustSeqSA->inclusive_jets(0);
494 std::vector<fastjet::PseudoJet> jet_constituents = fOutputJets[0].constituents();
495 Float_t NSubjettinessResult1, NSubjettinessResult2, NSubBeta = 1, R0=0.4;
496 std::vector<fastjet::PseudoJet> Subjet_Axes;
497 fastjet::PseudoJet SubJet1_Axis,SubJet2_Axis;
498 if(jet_constituents.size()>=2){
499 fastjet::contrib::Nsubjettiness nSub1(1,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(NSubBeta,R0));
500 fastjet::contrib::Nsubjettiness nSub2(2,fastjet::contrib::KT_Axes(),fastjet::contrib::NormalizedMeasure(NSubBeta,R0));
502 NSubjettinessResult1 = nSub1.result(fOutputJets[0]);
503 NSubjettinessResult2 = nSub2.result(fOutputJets[0]);
504 Subjet_Axes = nSub2.currentAxes();
505 SubJet1_Axis = Subjet_Axes[0];
506 SubJet2_Axis = Subjet_Axes[1];
508 Double_t SubJet1_Eta=SubJet1_Axis.pseudorapidity();
509 Double_t SubJet2_Eta=SubJet2_Axis.pseudorapidity();
510 Double_t SubJet1_Phi=SubJet1_Axis.phi();
511 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
512 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
513 Double_t SubJet2_Phi=SubJet2_Axis.phi();
514 if(SubJet1_Phi < -1*TMath::Pi()) SubJet1_Phi += (2*TMath::Pi());
515 else if (SubJet1_Phi > TMath::Pi()) SubJet1_Phi -= (2*TMath::Pi());
517 Double_t DeltaPhiSubJets,DeltaEtaSubJets;
518 DeltaPhiSubJets=SubJet1_Phi-SubJet2_Phi;
519 DeltaEtaSubJets=SubJet1_Eta-SubJet2_Eta;
520 if(DeltaPhiSubJets < -1*TMath::Pi()) DeltaPhiSubJets += (2*TMath::Pi());
521 else if (DeltaPhiSubJets > TMath::Pi()) DeltaPhiSubJets -= (2*TMath::Pi());
523 DelR = TMath::Power(TMath::Power(DeltaPhiSubJets,2)+TMath::Power(DeltaEtaSubJets,2),0.5);
528 fastjet::contrib::SoftDrop softdrop(beta, zcut);
529 fastjet::PseudoJet finaljet = softdrop(fOutputJets[0]);
533 std::vector<fastjet::PseudoJet> fSDTracks=finaljet.constituents();
534 Double_t FastjetTrackDelR,EmcalTrackDelR;
536 if(i<=finaljet.constituents().size()){
537 FastjetTrackDelR = TMath::Sqrt(TMath::Power(fSDTracks[i].eta()-JetEta,2)+TMath::Power(fSDTracks[i].phi()-JetPhi,2));
538 FJTrackEta[i]=fSDTracks[i].eta();
539 FJTrackPhi[i]=fSDTracks[i].phi();
540 FJTrackPt[i]=fSDTracks[i].perp();
543 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
544 EmcalTrackDelR = TMath::Sqrt(TMath::Power(fTrk->Eta()-JetEta,2)+TMath::Power(fTrk->Phi()-JetPhi,2));
547 Int_t nConstituents(fClustSeqSA->constituents(finaljet).size());
550 SymParam=(finaljet.structure_of<fastjet::contrib::SoftDrop>().symmetry());
551 Mu=(finaljet.structure_of<fastjet::contrib::SoftDrop>().mu());
552 DeltaR=(finaljet.structure_of<fastjet::contrib::SoftDrop>().delta_R());
565 TClonesArray *TracksArray = PartCont->GetArray();
566 if(!PartCont || !TracksArray)
return -99999;
567 AliAODTrack *Track = 0x0;
568 Int_t Trigger_Index[100];
569 for (
Int_t i=0; i<100; i++) Trigger_Index[i] = 0;
570 Int_t Trigger_Counter = 0;
571 for(
Int_t i=0; i < TracksArray->GetEntriesFast(); i++){
572 if((Track = static_cast<AliAODTrack*>(PartCont->
GetAcceptTrack(i)))){
573 if (!Track)
continue;
575 if(TMath::Abs(Track->Eta())>0.9)
continue;
576 if (Track->Pt()<0.15)
continue;
577 if ((Track->Pt() >= PtMin) && (Track->Pt()< PtMax)) {
578 Trigger_Index[Trigger_Counter] = i;
583 if (Trigger_Counter == 0)
return -99999;
584 Int_t RandomNumber = 0, Index = 0 ;
585 TRandom3* Random =
new TRandom3(0);
586 RandomNumber = Random->Integer(Trigger_Counter);
587 Index = Trigger_Index[RandomNumber];
virtual ~AliAnalysisTaskRecoilJetYield()
Bool_t RetrieveEventObjects()
JetShapeType fJetShapeType
Double_t PTD(AliEmcalJet *Jet, Int_t JetContNb)
static Double_t DeltaPhi(Double_t phia, Double_t phib, Double_t rMin=-TMath::Pi()/2, Double_t rMax=3 *TMath::Pi()/2)
AliJetContainer * GetJetContainer(Int_t i=0) const
ClassImp(AliAnalysisTaskRecoilJetYield) AliAnalysisTaskRecoilJetYield
Container with name, TClonesArray and cuts for particles.
Double_t fEPV0
!event plane V0
Bool_t RetrieveEventObjects()
UShort_t GetNumberOfConstituents() const
Container for particles within the EMCAL framework.
UShort_t GetNumberOfTracks() const
TString kData
Declare data MC or deltaAOD.
AliParticleContainer * GetParticleContainer() const
void Terminate(Option_t *option)
TH1F * fhPhiTriggerHadronEventPlane
TH1F * fhPhiTriggerHadronJet
Int_t SelectTriggerHadron(Float_t PtMin, Float_t PtMax)
Double_t fCent
!event centrality
Double_t Angularity(AliEmcalJet *Jet, Int_t JetContNb)
Float_t fPtMinTriggerHadron
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)
Double_t RelativePhi(Double_t Phi1, Double_t Phi2)
void UserCreateOutputObjects()
Double_t GetRhoVal(Int_t i=0) const
AliAnalysisTaskRecoilJetYield()
AliEmcalList * fOutput
!output list
TH1F * fhNumberOfJetTracks
Short_t TrackAt(Int_t idx) const
AliTrackContainer * GetTrackContainer(Int_t i=0) const
Double_t DeltaR(const AliVParticle *part1, const AliVParticle *part2)
void SetMakeGeneralHistograms(Bool_t g)
virtual AliVTrack * GetAcceptTrack(Int_t i=-1) const
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Double_t fJetInfoVar[nBranch]
void SetNumberOfTracks(Int_t n)
void SoftDrop(AliEmcalJet *fJet, AliJetContainer *fJetCont, double zcut, double beta)
Float_t fPtMaxTriggerHadron
TH1F * fhPhiTriggerHadronEventPlaneTPC
void UserCreateOutputObjects()
Float_t fRecoilAngularWindow
TH2F * fh2PtTriggerHadronJet
JetSelectionType fJetSelection
Double_t RelativePhiEventPlane(Double_t EventPlane, Double_t Phi)
Container for jet within the EMCAL jet framework.