6 #include <TClonesArray.h>
10 #include <THnSparse.h>
13 #include <TLorentzVector.h>
20 #include "TMatrixDSym.h"
21 #include "TMatrixDSymEigen.h"
24 #include "AliVCluster.h"
25 #include "AliVTrack.h"
30 #include "AliMCEvent.h"
31 #include "AliGenPythiaEventHeader.h"
32 #include "AliAODMCHeader.h"
33 #include "AliMCEvent.h"
34 #include "AliAnalysisManager.h"
42 #include "AliAODEvent.h"
54 fMinFractionShared(0),
57 fJetSelection(kInclusive),
64 fangWindowRecoil(0.6),
71 fOneConstSelectOn(kFALSE),
85 fTreeObservableTagging(0)
88 SetMakeGeneralHistograms(kTRUE);
95 fMinFractionShared(0),
98 fJetSelection(kInclusive),
100 fPtThreshold(-9999.),
105 fangWindowRecoil(0.6),
109 fCentSelectOn(kTRUE),
112 fOneConstSelectOn(kFALSE),
126 fTreeObservableTagging(0)
133 DefineOutput(1, TTree::Class());
150 Bool_t oldStatus = TH1::AddDirectoryStatus();
151 TH1::AddDirectory(kFALSE);
154 const Int_t nVar = 14;
155 const Int_t nVarless = 10;
160 TString *fShapesVarNames =
new TString [nVar];
162 fShapesVarNames[0] =
"partonCode";
163 fShapesVarNames[1] =
"ptJet";
164 fShapesVarNames[2] =
"ptDJet";
165 fShapesVarNames[3] =
"mJet";
167 fShapesVarNames[4] =
"angularity";
168 fShapesVarNames[5] =
"circularity";
169 fShapesVarNames[6] =
"lesub";
172 fShapesVarNames[7] =
"ptJetMatch";
173 fShapesVarNames[8] =
"ptDJetMatch";
174 fShapesVarNames[9] =
"mJetMatch";
176 fShapesVarNames[10] =
"angularityMatch";
177 fShapesVarNames[11] =
"circularityMatch";
178 fShapesVarNames[12] =
"lesubMatch";
180 fShapesVarNames[13]=
"weightPythia";
182 for(Int_t ivar=0; ivar < nVar; ivar++){
183 cout<<
"looping over variables"<<endl;
193 TString *fShapesVarNames =
new TString [nVarless];
194 fShapesVarNames[0] =
"partonCode";
195 fShapesVarNames[1] =
"ptJet";
196 fShapesVarNames[2] =
"ptDJet";
197 fShapesVarNames[3] =
"angularity";
198 fShapesVarNames[4] =
"lesub";
199 fShapesVarNames[5] =
"ptJetMatch";
200 fShapesVarNames[6] =
"ptDJetMatch";
201 fShapesVarNames[7] =
"angularityMatch";
202 fShapesVarNames[8] =
"lesubMatch";
203 fShapesVarNames[9]=
"weightPythia";
205 for(Int_t ivar=0; ivar < nVarless; ivar++){
206 cout<<
"looping over variables"<<endl;
225 fh2ResponseUW=
new TH2F(
"fh2ResponseUW",
"fh2ResponseUW", 100, 0, 200, 100, 0, 200);
227 fh2ResponseW=
new TH2F(
"fh2ResponseW",
"fh2ResponseW", 100, 0, 200, 100, 0, 200);
229 fPhiJetCorr6=
new TH2F(
"fPhiJetCorr6",
"fPhiJetCorr6", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
231 fEtaJetCorr6=
new TH2F(
"fEtaJetCorr6",
"fEtaJetCorr6", 50, -1.5, 1.5, 50, -1.5, 1.5);
234 fPhiJetCorr7=
new TH2F(
"fPhiJetCorr7",
"fPhiJetCorr7", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
236 fEtaJetCorr7=
new TH2F(
"fEtaJetCorr7",
"fEtaJetCorr7", 50, -1.5, 1.5, 50, -1.5, 1.5);
239 fPtJetCorr=
new TH2F(
"fPtJetCorr",
"fPtJetCorr", 100, 0, 200, 100, 0, 200);
241 fPtJet=
new TH1F(
"fPtJet",
"fPtJet", 100, 0, 200);
244 fhpTjetpT=
new TH2F(
"fhpTjetpT",
"fhpTjetpT", 200, 0, 200, 200, 0, 200);
246 fhPt=
new TH1F(
"fhPt",
"fhPt", 200, 0, 200);
248 fhPhi=
new TH1F(
"fhPhi",
"fhPhi", 100, -TMath::Pi(), TMath::Pi());
251 fNbOfConstvspT=
new TH2F(
"fNbOfConstvspT",
"fNbOfConstvspT", 100, 0, 100, 200, 0, 200);
255 TH1::AddDirectory(oldStatus);
280 AliAODTrack *triggerHadron = 0x0;
287 if (triggerHadronLabel==-99999) {
293 TClonesArray *trackArrayAn = partContAn->GetArray();
294 triggerHadron =
static_cast<AliAODTrack*
>(trackArrayAn->At(triggerHadronLabel));
296 if (!triggerHadron) {
307 fhPt->Fill(triggerHadron->Pt());
312 jetCont->ResetCurrentID();
319 Int_t ifound=0, jfound=0;
320 Int_t ilab=-1, jlab=-1;
328 Float_t dphiRecoil = 0.;
350 for(Int_t i = 0; i<jetContUS->
GetNJets(); i++) {
351 jetUS = jetContUS->
GetJet(i);
354 if(ifound==1) ilab = i;
357 if(ilab==-1)
continue;
358 jetUS=jetContUS->
GetJet(ilab);
364 Printf(
"jet2 does not exist, returning");
372 Printf(
"jet3 does not exist, returning");
375 cout<<
"jet 3 exists"<<jet3->
Pt()<<endl;
399 for(Int_t i = 0; i<jetContUS->
GetNJets(); i++) {
400 jetUS = jetContUS->
GetJet(i);
403 if(ifound==1) ilab = i;
406 if(ilab==-1)
continue;
407 jetUS=jetContUS->
GetJet(ilab);
411 Printf(
"jet2 does not exist, returning");
415 for(Int_t j=0; j<jetContPart->
GetNJets(); j++) {
417 jet3 = jetContPart->
GetJet(j);
421 if(jfound==1) jlab = j;
424 if(jlab==-1)
continue;
425 jet3=jetContPart->
GetJet(jlab);
427 Printf(
"jet3 does not exist, returning");
433 Printf(
"jet3 does not exist, returning");
452 Float_t dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
462 dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
476 Double_t ptSubtracted = 0;
507 Float_t ptMatch=0., ptDMatch=0., massMatch=0., constMatch=0.,angulMatch=0.,circMatch=0., lesubMatch=0., sigma2Match=0.;
607 AliVParticle *vp1 = 0x0;
612 Printf(
"AliVParticle associated to constituent not found");
617 Double_t dr2 = (vp1->Eta()-jet->
Eta())*(vp1->Eta()-jet->
Eta()) + dphi*dphi;
618 Double_t dr = TMath::Sqrt(dr2);
619 num=num+vp1->Pt()*dr;
645 AliVParticle *vp1 = 0x0;
650 Printf(
"AliVParticle associated to constituent not found");
654 num=num+vp1->Pt()*vp1->Pt();
657 return TMath::Sqrt(num)/den;
667 return PTD(jet, jetContNb);
682 Double_t pxjet=jet->
Px();
683 Double_t pyjet=jet->
Py();
684 Double_t pzjet=jet->
Pz();
688 TVector3 ppJ1(pxjet, pyjet, pzjet);
689 TVector3 ppJ3(- pxjet* pzjet, - pyjet * pzjet, pxjet * pxjet + pyjet * pyjet);
691 TVector3 ppJ2(-pyjet, pxjet, 0);
693 AliVParticle *vp1 = 0x0;
698 Printf(
"AliVParticle associated to constituent not found");
702 TVector3 pp(vp1->Px(), vp1->Py(), vp1->Pz());
705 TVector3 pLong = pp.Dot(ppJ1) / ppJ1.Mag2() * ppJ1;
706 TVector3 pPerp = pp - pLong;
709 Float_t ppjX = pPerp.Dot(ppJ2);
710 Float_t ppjY = pPerp.Dot(ppJ3);
711 Float_t ppjT = TMath::Sqrt(ppjX * ppjX + ppjY * ppjY);
712 if(ppjT<=0)
return 0;
714 mxx += (ppjX * ppjX / ppjT);
715 myy += (ppjY * ppjY / ppjT);
716 mxy += (ppjX * ppjY / ppjT);
721 if(sump2==0)
return 0;
723 Double_t ele[4] = {mxx / sump2, mxy / sump2, mxy / sump2, myy / sump2};
724 TMatrixDSym m0(2,ele);
727 TMatrixDSymEigen m(m0);
729 TMatrixD evecm = m.GetEigenVectors();
730 eval = m.GetEigenValues();
734 if (eval[0] < eval[1]) jev = 1;
737 evec0 = TMatrixDColumn(evecm, jev);
738 Double_t compx=evec0[0];
739 Double_t compy=evec0[1];
740 TVector2 evec(compx, compy);
742 if(jev==1) circ=2*eval[0];
743 if(jev==0) circ=2*eval[1];
774 AliVParticle *vp1 = 0x0;
775 AliVParticle *vp2 = 0x0;
776 std::vector<int> ordindex;
781 if(ordindex.size()<2)
return -1;
785 Printf(
"AliVParticle associated to Leading constituent not found");
791 Printf(
"AliVParticle associated to Subleading constituent not found");
811 return LeSub(jet, jetContNb);
840 AliVParticle *vp1 = 0x0;
845 Printf(
"AliVParticle associated to constituent not found");
849 Double_t ppt=vp1->Pt();
852 Double_t deta = vp1->Eta()-jet->
Eta();
853 mxx += ppt*ppt*deta*deta;
854 myy += ppt*ppt*dphi*dphi;
855 mxy -= ppt*ppt*deta*TMath::Abs(dphi);
861 if(sump2==0)
return 0;
863 Double_t ele[4] = {mxx , mxy , mxy , myy };
864 TMatrixDSym m0(2,ele);
867 TMatrixDSymEigen m(m0);
869 TMatrixD evecm = m.GetEigenVectors();
870 eval = m.GetEigenValues();
874 if (eval[0] < eval[1]) jev = 1;
877 evec0 = TMatrixDColumn(evecm, jev);
878 Double_t compx=evec0[0];
879 Double_t compy=evec0[1];
880 TVector2 evec(compx, compy);
882 if(jev==1) sig=TMath::Sqrt(TMath::Abs(eval[0])/sump2);
883 if(jev==0) sig=TMath::Sqrt(TMath::Abs(eval[1])/sump2);
897 return Sigma2(jet, jetContNb);
905 TClonesArray *tracksArray = partCont->GetArray();
907 if(!partCont || !tracksArray)
return -99999;
908 AliAODTrack *track = 0x0;
912 TList *trackList =
new TList();
914 for (Int_t iTrigger=0; iTrigger<100; iTrigger++) triggers[iTrigger] = 0;
917 for(Int_t iTrack=0; iTrack <= tracksArray->GetEntriesFast(); iTrack++){
922 if (!emcPart)
continue;
923 if(TMath::Abs(emcPart->
Eta())>0.9)
continue;
924 if (emcPart->
Pt()<0.15)
continue;
926 if ((emcPart->
Pt() >= minpT) && (emcPart->
Pt()< maxpT)) {
927 trackList->Add(emcPart);
928 triggers[iTT] = iTrack;
933 track =
static_cast<AliAODTrack*
>(tracksArray->At(iTrack));
934 if (!track)
continue;
935 if(TMath::Abs(track->Eta())>0.9)
continue;
936 if (track->Pt()<0.15)
continue;
937 if (!(track->TestFilterBit(768)))
continue;
939 if ((track->Pt() >= minpT) && (track->Pt()< maxpT)) {
940 trackList->Add(track);
941 triggers[iTT] = iTrack;
948 if (iTT == 0)
return -99999;
949 Int_t nbRn = 0, index = 0 ;
950 TRandom3* random =
new TRandom3(0);
951 nbRn = random->Integer(iTT);
953 index = triggers[nbRn];
962 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
963 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
964 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
965 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
966 double dphi = mphi-vphi;
967 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
968 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
Int_t SelectTrigger(Float_t minpT, Float_t maxpT)
JetShapeType fJetShapeType
Double_t GetFirstOrderSubtractedAngularity() const
Double_t GetSecondOrderSubtractedSigma2() const
Bool_t RetrieveEventObjects()
Float_t GetPartonEta6() const
AliEmcalJet * ClosestJet() const
virtual ~AliAnalysisTaskEmcalQGTagging()
AliJetContainer * GetJetContainer(Int_t i=0) const
Float_t GetPartonEta7() const
Double_t GetSecondOrderSubtractedConstituent() const
Float_t GetJetMass(AliEmcalJet *jet, Int_t jetContNb)
Float_t GetPythiaEventWeight() const
void UserCreateOutputObjects()
Float_t GetPartonPhi7() const
Double_t GetSecondOrderSubtractedpTD() const
Bool_t RetrieveEventObjects()
Double_t GetFirstOrderSubtractedLeSub() const
Float_t GetJetAngularity(AliEmcalJet *jet, Int_t jetContNb)
Int_t GetPartonFlag7() const
Container for particles within the EMCAL framework.
Float_t GetPartonPhi6() const
Double_t GetFirstOrderSubtractedpTD() const
UShort_t GetNumberOfTracks() const
TString kData
Declare data MC or deltaAOD.
Float_t fMinFractionShared
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Double_t GetSecondOrderSubtractedLeSub() const
Int_t GetPartonFlag6() const
AliParticleContainer * GetParticleContainer() const
Double_t GetFirstOrderSubtractedConstituent() const
Float_t GetJetCircularity(AliEmcalJet *jet, Int_t jetContNb)
Float_t PTD(AliEmcalJet *jet, Int_t jetContNb)
std::vector< int > SortConstituentsPt(TClonesArray *tracks) const
Double_t GetSecondOrderSubtractedAngularity() const
Float_t GetSigma2(AliEmcalJet *jet, Int_t jetContNb)
Double_t fCent
!event centrality
Double_t GetSecondOrderSubtracted() const
AliEmcalJet * GetNextAcceptJet()
Float_t Angularity(AliEmcalJet *jet, Int_t jetContNb)
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)
Float_t LeSub(AliEmcalJet *jet, Int_t jetContNb)
AliAnalysisTaskEmcalQGTagging()
Double_t GetRhoVal(Int_t i=0) const
Double_t GetFirstOrderSubtractedCircularity() const
AliEmcalList * fOutput
!output list
JetSelectionType fJetSelection
Short_t TrackAt(Int_t idx) const
Float_t Sigma2(AliEmcalJet *jet, Int_t jetContNb)
Double_t RelativePhi(Double_t mphi, Double_t vphi)
void Terminate(Option_t *option)
Double_t GetSecondOrderSubtractedCircularity() const
Float_t GetJetNumberOfConstituents(AliEmcalJet *jet, Int_t jetContNb)
Store some informaion about a Pythia eventThis class is used to store some information about a Pythia...
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
const AliEmcalPythiaInfo * GetPythiaInfo() const
Float_t GetJetpTD(AliEmcalJet *jet, Int_t jetContNb)
ClassImp(AliAnalysisTaskEmcalQGTagging) AliAnalysisTaskEmcalQGTagging
Double_t GetFractionSharedPt(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
Declaration of class AliEmcalPythiaInfo.
void UserCreateOutputObjects()
Double_t GetFirstOrderSubtractedSigma2() const
Float_t Circularity(AliEmcalJet *jet, Int_t jetContNb)
AliEmcalJetShapeProperties * GetShapeProperties() const
Float_t GetJetLeSub(AliEmcalJet *jet, Int_t jetContNb)
Float_t GetPartonPt7() const
Double_t GetFirstOrderSubtracted() const
Container for jet within the EMCAL jet framework.
Float_t GetPartonPt6() const
AliEmcalJet * GetJet(Int_t i) const
TTree * fTreeObservableTagging