6 #include <TClonesArray.h>
10 #include "AliEMCALGeometry.h"
14 #include "AliTLorentzVector.h"
23 fJetAcceptanceType(kUser),
39 fLeadingHadronType(0),
41 fMinNConstituents(-1),
44 fParticleContainer(0),
54 fBaseClassName =
"AliEmcalJet";
55 SetClassName(
"AliEmcalJet");
61 fJetAcceptanceType(kUser),
77 fLeadingHadronType(0),
79 fMinNConstituents(-1),
82 fParticleContainer(0),
100 AliParticleContainer(GenerateJetName(jetType, jetAlgo, recoScheme, radius, partCont, clusCont, tag)),
101 fJetAcceptanceType(kUser),
106 fFlavourSelection(0),
113 fZLeadingEmcCut(10.),
117 fLeadingHadronType(0),
119 fMinNConstituents(-1),
122 fParticleContainer(partCont),
123 fClusterContainer(clusCont),
154 AliDebug(2,Form(
"%s: set TPC acceptance cuts",
GetName()));
158 AliDebug(2,Form(
"%s: set TPC acceptance cuts",
GetName()));
162 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",
GetName()));
165 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",
GetName()));
169 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",
GetName()));
173 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",
GetName()));
185 fGeom = AliEMCALGeometry::GetInstance();
187 AliError(Form(
"%s: Can not create geometry",
GetName()));
200 AliError(Form(
"%s: Could not retrieve rho %s!",
GetName(),
fRhoName.Data()));
248 if (option.Contains(
"rho")) {
256 if (jet->
Pt() > jetMax->
Pt()) jetMax = jet;
270 if(i<0 || i>
fClArray->GetEntriesFast())
return 0;
281 UInt_t rejectionReason = 0;
283 if(!
AcceptJet(jet, rejectionReason))
return 0;
343 return jet->
Pt() -
fRho->GetVal()*jet->
Area();
356 Double_t p = jet->
P();
357 Double_t e = TMath::Sqrt(mass*mass + p*p);
359 mom.SetPtEtaPhiE(jet->
Pt(), jet->
Eta(), jet->
Phi(), e);
377 mom.SetPtEtaPhiM(0, 0, 0, 0);
424 if (!r)
return kFALSE;
426 AliTLorentzVector mom;
438 if (!r)
return kFALSE;
440 AliTLorentzVector mom;
453 AliDebug(11,
"No jet found");
459 AliDebug(11,
"Cut rejecting jet: Bit map");
465 AliDebug(11,
"Cut rejecting jet: Area");
471 AliDebug(11,
"Cut rejecting jet: AreaEmc");
477 AliDebug(11,
"Cut rejecting jet: ZLeading");
483 AliDebug(11,
"Cut rejecting jet: ZLeadEmc");
489 AliDebug(11,
"Cut rejecting jet: NEF");
495 AliDebug(11,
"Cut rejecting jet: minimum number of constituents");
502 AliDebug(11,
"Cut rejecting jet: Bias");
509 AliDebug(11,
"Cut rejecting jet: Bias");
516 AliDebug(11,
"Cut rejecting jet: Bias");
523 AliDebug(11,
"Cut rejecting jet: MaxTrackPt");
530 AliDebug(11,
"Cut rejecting jet: MaxClusPt");
536 AliDebug(11,
"Cut rejecting jet: Flavour");
542 AliDebug(11,
"Cut rejecting jet: tag status");
564 Double_t maxClusterPt = 0;
565 Double_t maxClusterEta = 0;
566 Double_t maxClusterPhi = 0;
568 Double_t maxTrackPt = 0;
569 Double_t maxTrackEta = 0;
570 Double_t maxTrackPhi = 0;
575 TLorentzVector nPart;
576 cluster->GetMomentum(nPart, const_cast<Double_t*>(
fVertex));
578 maxClusterEta = nPart.Eta();
579 maxClusterPhi = nPart.Phi();
580 maxClusterPt = nPart.Pt();
587 maxTrackEta = track->Eta();
588 maxTrackPhi = track->Phi();
589 maxTrackPt = track->Pt();
593 if (maxTrackPt > maxClusterPt)
594 mom.SetPtEtaPhiM(maxTrackPt,maxTrackEta,maxTrackPhi,0.139);
596 mom.SetPtEtaPhiM(maxClusterPt,maxClusterEta,maxClusterPhi,0.139);
608 cluster->GetMomentum(mom, const_cast<Double_t*>(
fVertex));
610 return GetZ(jet,mom);
628 mom.SetPtEtaPhiM(track->Pt(),track->Eta(),track->Phi(),0.139);
630 return GetZ(jet,mom);
642 Double_t pJetSq = jet->
Px()*jet->
Px() + jet->
Py()*jet->
Py() + jet->
Pz()*jet->
Pz();
645 AliWarning(Form(
"%s: strange, pjet*pjet seems to be zero pJetSq: %.3f",
GetName(), pJetSq));
649 Double_t z = (mom.Px()*jet->
Px() + mom.Py()*jet->
Py() + mom.Pz()*jet->
Pz()) / pJetSq;
652 AliWarning(Form(
"%s: z = %.3ff < 0, returning 0...",
GetName(), z));
672 SetPhiLimits(
fGeom->GetArm1PhiMin() * TMath::DegToRad() + r,
fGeom->GetEMCALPhiMax() * TMath::DegToRad() - r);
676 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for EMCAL year 2011!!");
690 SetPhiLimits(
fGeom->GetDCALPhiMin() * TMath::DegToRad() + r,
fGeom->GetDCALPhiMax() * TMath::DegToRad() - r);
693 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for DCAL year 2015!!");
713 Printf(
"Print jet cuts for %s",arrName.Data());
716 Printf(
"JetPtCut: %f",
fMinPt);
717 Printf(
"JetPtCutMax: %f",
fMaxPt);
720 Printf(
"JetMinEta: %f",
fMinEta);
721 Printf(
"JetMaxEta: %f",
fMaxEta);
722 Printf(
"JetMinPhi: %f",
fMinPhi);
723 Printf(
"JetMaxPhi: %f",
fMaxPhi);
784 Double_t fraction = 0.;
785 Double_t jetPt2 = jet2->
Pt();
787 if(!cont2) bgeom = kFALSE;
790 AliVParticle *vpf = 0x0;
793 Int_t idx = (Int_t)jet2->
TrackAt(icc);
795 AliVParticle *p2 = 0x0;
796 if(bgeom) p2 =
static_cast<AliVParticle*
>(jet2->
TrackAt(icc, cont2->
GetArray()));
799 if(!bgeom && idx == jet1->
TrackAt(icf) && iFound==0 ) {
802 if(vpf) sumPt += vpf->Pt();
808 if(!
SamePart(vpf, p2, 1.e-4))
continue;
813 fraction = sumPt/jetPt2;
832 ::Warning(
"AliJetContainer::GenerateJetName",
"Unknown jet finding algorithm '%d'!", jetAlgo);
842 typeString =
"Charged";
845 typeString =
"Neutral";
849 TString radiusString = TString::Format(
"R%03.0f", radius*100.0);
853 trackString =
"_" + TString(partCont->
GetTitle());
856 TString clusterString;
858 clusterString =
"_" + TString(clusCont->
GetTitle());
861 TString recombSchemeString;
862 switch (recoScheme) {
864 recombSchemeString =
"E_scheme";
867 recombSchemeString =
"pt_scheme";
870 recombSchemeString =
"pt2_scheme";
873 recombSchemeString =
"Et_scheme";
876 recombSchemeString =
"Et2_scheme";
879 recombSchemeString =
"BIpt_scheme";
882 recombSchemeString =
"BIpt2_scheme";
885 recombSchemeString =
"ext_scheme";
888 ::Error(
"AliJetContainer::GenerateJetName",
"Recombination %d scheme not recognized.", recoScheme);
891 TString name = TString::Format(
"%s_%s%s%s%s%s_%s",
892 tag.Data(), algoString.Data(), typeString.Data(), radiusString.Data(), trackString.Data(), clusterString.Data(), recombSchemeString.Data());
900 static TString jetString;
912 return jetString.Data();
const char * GetTitle() const
void SetArray(AliVEvent *event)
Float_t fMinTrackPt
maximum cluster constituent pt to accept the jet
Double_t GetZ(const AliEmcalJet *jet, TLorentzVector mom) const
Float_t fJetAreaCut
selection on jet flavour
Double_t GetRhoVal() const
Float_t fJetRadius
acceptance type
Double_t fMinPhi
Min. cut on particle .
AliEmcalJet * ClosestJet() const
Cut on the z of the leading particle in the EMCAL.
AliRhoParameter * fRhoMass
! event rho mass for these jets
Int_t GetTagStatus() const
virtual Bool_t ApplyJetCuts(const AliEmcalJet *clus, UInt_t &rejectionReason) const
const char * GetTitle() const
Int_t GetIndexFromLabel(Int_t lab) const
Cut on the jet area in the EMCAL.
void LoadRhoMass(AliVEvent *event)
AliRhoParameter * fRho
cluster container (jet constituents)
JetAcceptanceType fJetAcceptanceType
Double_t GetLocalVal(Double_t phi, Double_t r, Double_t n) const
UInt_t fBitMap
bitmap mask
Float_t fNEFMinCut
maximum z,leading charged
void SetMinPt(Double_t min)
Double_t GetJetPtCorrLocal(Int_t i) const
virtual void SetArray(AliVEvent *event)
virtual Bool_t AcceptJet(Int_t i, UInt_t &rejectionReason) const
void LoadLocalRho(AliVEvent *event)
Double_t fMinPt
Min. cut on particle .
AliParticleContainer * fParticleContainer
jet tag status
void SetEtaLimits(Double_t min, Double_t max)
AliEmcalJet * GetAcceptJetWithLabel(Int_t lab) const
Bool_t GetMomentum(TLorentzVector &mom, Int_t i) const
static TString GenerateJetName(EJetType_t jetType, EJetAlgo_t jetAlgo, ERecoScheme_t recoScheme, Double_t radius, AliParticleContainer *partCont, AliClusterContainer *clusCont, TString tag)
UShort_t GetNumberOfConstituents() const
Container for particles within the EMCAL framework.
Cut on flavour content in the jet.
UShort_t GetNumberOfTracks() const
AliLocalRhoParameter * fLocalRho
! event local rho for these jets
Float_t fAreaEmcCut
cut on jet area
void GetMomentum(TLorentzVector &vec) const
Int_t fLeadingHadronType
maximum NEF in a jet
AliEmcalJet * GetLeadingJet(const char *opt="")
void GetLeadingHadronMomentum(TLorentzVector &mom, const AliEmcalJet *jet) const
Bool_t GetAcceptMomentum(TLorentzVector &mom, Int_t i) const
Int_t fRunNumber
! run number
AliVParticle * GetLeadingTrack(TClonesArray *tracks) const
Double_t GetLeadingHadronPt(const AliEmcalJet *jet) const
void LoadRho(AliVEvent *event)
Double_t GetMinPt() const
Float_t fMaxClusterPt
maximum cluster constituent pt to accept the jet
Bool_t GetNextAcceptMomentum(TLorentzVector &mom)
const char * GetTitle() const
Double_t fMaxPhi
Max. cut on particle .
Cut on the z of the leading charged constituent.
AliEmcalJet * GetJetWithLabel(Int_t lab) const
Float_t fMinClusterPt
minimum cut on jet emcal area
Double_t MaxTrackPt() const
AliVCluster * GetLeadingCluster(TClonesArray *clusters) const
TClonesArray * GetArray() const
TString fLocalRhoName
Name of rho object.
Float_t fZLeadingChCut
maximum z,leading neutral
void SetClassName(const char *clname)
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)
void SetJetEtaPhiDCAL(Double_t r=0.)
const TString & GetArrayName() const
Double_t fMassHypothesis
if < 0 it will use a PID mass when available
Double_t fVertex[3]
! event vertex array
AliEmcalJet * GetNextJet()
const char * GetName() const
Double_t fMaxPt
Max. cut on particle .
AliEMCALGeometry * fGeom
! emcal geometry
TString fRhoMassName
Name of local rho object.
Cut on the minimum of the leading particle.
Double_t GetZLeadingCharged(const AliEmcalJet *jet) const
Cut on the neutral energy fraction.
static Bool_t SamePart(const AliVParticle *part1, const AliVParticle *part2, Double_t dist=1.e-4)
Short_t TrackAt(Int_t idx) const
Double_t fMinEta
Min. cut on particle .
Bool_t TestFlavourTag(Int_t tag) const
Int_t fTagStatus
jet trigger
Float_t fZLeadingEmcCut
maximum track constituent pt to accept the jet
AliEmcalJet * GetAcceptJet(Int_t i) const
TString fBaseClassName
name of the base class that this container can handle
Cut on the minimum number of constituents.
Double_t MaxClusterPt() const
Double_t GetZLeadingEmc(const AliEmcalJet *jet) const
Float_t fMaxTrackPt
maximum track constituent pt to accept the jet
void SetJetEtaPhiTPC(Double_t r=0.)
Double_t GetFractionSharedPt(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
Double_t fMaxEta
Max. cut on particle .
void SetJetEtaPhiEMCAL(Double_t r=0.)
virtual Bool_t ApplyKinematicCuts(const AliTLorentzVector &mom, UInt_t &rejectionReason) const
Cut on the maximum cluster .
TClonesArray * fClArray
! Pointer to array in input event
Int_t GetNEntries() const
void SetPhiLimits(Double_t min, Double_t max)
Cut on the maximum track .
Float_t fNEFMaxCut
minimum NEF in a jet
Bool_t GetMomentumFromJet(TLorentzVector &mom, const AliEmcalJet *jet, Double_t mass) const
Int_t fCurrentID
! current ID for automatic loops
AliClusterContainer * fClusterContainer
particle container (jet constituents)
Bool_t GetNextMomentum(TLorentzVector &mom)
Container structure for EMCAL clusters.
void ResetCurrentID(Int_t i=-1)
Int_t fMinNConstituents
how many jets are to be considered the leading jet(s)
Double_t MaxPartPt() const
TString fRhoName
jet radius
ClassImp(AliJetContainer) AliJetContainer
AliEmcalJet * GetJet(Int_t i) const
Double_t GetJetPtCorr(Int_t i) const
Int_t fFlavourSelection
Name of rho mass object.