16 #include <TClonesArray.h>
18 #include "AliVEvent.h"
20 #include "AliEMCALGeometry.h"
37 fJetAcceptanceType(kUser),
53 fLeadingHadronType(0),
55 fMinNConstituents(-1),
58 fParticleContainer(0),
68 fBaseClassName =
"AliEmcalJet";
69 SetClassName(
"AliEmcalJet");
78 fJetAcceptanceType(kUser),
94 fLeadingHadronType(0),
96 fMinNConstituents(-1),
99 fParticleContainer(0),
100 fClusterContainer(0),
109 fBaseClassName =
"AliEmcalJet";
110 SetClassName(
"AliEmcalJet");
129 AliParticleContainer(GenerateJetName(jetType, jetAlgo, recoScheme, radius, partCont, clusCont, tag)),
130 fJetAcceptanceType(kUser),
135 fFlavourSelection(0),
142 fZLeadingEmcCut(10.),
146 fLeadingHadronType(0),
148 fMinNConstituents(-1),
151 fParticleContainer(partCont),
152 fClusterContainer(clusCont),
159 fBaseClassName =
"AliEmcalJet";
160 SetClassName(
"AliEmcalJet");
172 AliEmcalContainer::SetArray(event);
188 AliDebug(2,Form(
"%s: set TPC acceptance cuts",GetName()));
192 AliDebug(2,Form(
"%s: set TPC acceptance cuts",GetName()));
196 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",GetName()));
200 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",GetName()));
204 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",GetName()));
208 AliDebug(2,Form(
"%s: set EMCAL acceptance cuts",GetName()));
224 fGeom = AliEMCALGeometry::GetInstance();
226 AliError(Form(
"%s: Can not create geometry", GetName()));
243 AliError(Form(
"%s: Could not retrieve rho %s!", GetName(),
fRhoName.Data()));
262 AliError(Form(
"%s: Could not retrieve rho %s!", GetName(),
fLocalRhoName.Data()));
281 AliError(Form(
"%s: Could not retrieve rho_mass %s!", GetName(),
fRhoMassName.Data()));
298 Int_t tempID = fCurrentID;
304 if (option.Contains(
"rho")) {
312 if (jet->
Pt() > jetMax->
Pt()) jetMax = jet;
328 if (i < 0 || i > fClArray->GetEntriesFast())
return 0;
342 UInt_t rejectionReason = 0;
344 if(!
AcceptJet(jet, rejectionReason))
return 0;
357 const Int_t njets = GetNEntries();
361 if (fCurrentID >= njets)
break;
376 const Int_t njets = GetNEntries();
380 if (fCurrentID >= njets)
break;
397 return jet->
Pt() -
fRho->GetVal()*jet->
Area();
422 Double_t p = jet->
P();
423 Double_t e = TMath::Sqrt(mass*mass + p*p);
425 mom.SetPtEtaPhiE(jet->
Pt(), jet->
Eta(), jet->
Phi(), e);
440 if (fMassHypothesis >= 0) {
449 mom.SetPtEtaPhiM(0, 0, 0, 0);
521 if (!s)
return kFALSE;
525 if (!r)
return kFALSE;
543 if (!s)
return kFALSE;
547 if (!r)
return kFALSE;
566 AliDebug(11,
"No jet found");
567 rejectionReason |= kNullObject;
571 if (jet->TestBits(fBitMap) != (Int_t)fBitMap) {
572 AliDebug(11,
"Cut rejecting jet: Bit map");
573 rejectionReason |= kBitMapCut;
578 AliDebug(11,
"Cut rejecting jet: Area");
579 rejectionReason |= kAreaCut;
584 AliDebug(11,
"Cut rejecting jet: AreaEmc");
585 rejectionReason |= kAreaEmcCut;
590 AliDebug(11,
"Cut rejecting jet: ZLeading");
591 rejectionReason |= kZLeadingChCut;
596 AliDebug(11,
"Cut rejecting jet: ZLeadEmc");
597 rejectionReason |= kZLeadingEmcCut;
602 AliDebug(11,
"Cut rejecting jet: NEF");
603 rejectionReason |= kNEFCut;
608 AliDebug(11,
"Cut rejecting jet: minimum number of constituents");
609 rejectionReason |= kMinNConstituents;
615 AliDebug(11,
"Cut rejecting jet: Bias");
616 rejectionReason |= kMinLeadPtCut;
622 AliDebug(11,
"Cut rejecting jet: Bias");
623 rejectionReason |= kMinLeadPtCut;
629 AliDebug(11,
"Cut rejecting jet: Bias");
630 rejectionReason |= kMinLeadPtCut;
636 AliDebug(11,
"Cut rejecting jet: MaxTrackPt");
637 rejectionReason |= kMaxTrackPtCut;
643 AliDebug(11,
"Cut rejecting jet: MaxClusPt");
644 rejectionReason |= kMaxClusterPtCut;
649 AliDebug(11,
"Cut rejecting jet: Flavour");
650 rejectionReason |= kFlavourCut;
655 AliDebug(11,
"Cut rejecting jet: tag status");
656 rejectionReason |= kTagStatus;
688 Double_t maxClusterPt = 0;
689 Double_t maxClusterEta = 0;
690 Double_t maxClusterPhi = 0;
692 Double_t maxTrackPt = 0;
693 Double_t maxTrackEta = 0;
694 Double_t maxTrackPhi = 0;
699 TLorentzVector nPart;
700 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
702 maxClusterEta = nPart.Eta();
703 maxClusterPhi = nPart.Phi();
704 maxClusterPt = nPart.Pt();
711 maxTrackEta = track->Eta();
712 maxTrackPhi = track->Phi();
713 maxTrackPt = track->Pt();
717 if (maxTrackPt > maxClusterPt)
718 mom.SetPtEtaPhiM(maxTrackPt,maxTrackEta,maxTrackPhi,0.139);
720 mom.SetPtEtaPhiM(maxClusterPt,maxClusterEta,maxClusterPhi,0.139);
736 cluster->GetMomentum(mom, fVertex);
738 return GetZ(jet,mom);
763 mom.SetPtEtaPhiM(track->Pt(),track->Eta(),track->Phi(),0.139);
765 return GetZ(jet,mom);
785 Double_t pJetSq = jet->
Px()*jet->
Px() + jet->
Py()*jet->
Py() + jet->
Pz()*jet->
Pz();
788 AliWarning(Form(
"%s: strange, pjet*pjet seems to be zero pJetSq: %.3f",GetName(), pJetSq));
792 Double_t z = (mom.Px()*jet->
Px() + mom.Py()*jet->
Py() + mom.Pz()*jet->
Pz()) / pJetSq;
795 AliWarning(Form(
"%s: z = %.3ff < 0, returning 0...",GetName(), z));
812 SetEtaLimits(
fGeom->GetArm1EtaMin() + r,
fGeom->GetArm1EtaMax() - r);
815 SetPhiLimits(1.405 + r, 3.135 - r);
818 SetPhiLimits(
fGeom->GetArm1PhiMin() * TMath::DegToRad() + r,
fGeom->GetEMCALPhiMax() * TMath::DegToRad() - r);
822 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for EMCAL year 2011!!");
823 SetEtaLimits(-0.7 + r, 0.7 - r);
824 SetPhiLimits(1.405 + r, 3.135 - r);
838 SetEtaLimits(
fGeom->GetArm1EtaMin() + r,
fGeom->GetArm1EtaMax() - r);
839 SetPhiLimits(
fGeom->GetDCALPhiMin() * TMath::DegToRad() + r,
fGeom->GetDCALPhiMax() * TMath::DegToRad() - r);
842 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for DCAL year 2015!!");
843 SetEtaLimits(-0.7 + r, 0.7 - r);
844 SetPhiLimits(4.538 + r, 5.727 - r);
855 SetEtaLimits(-0.9 + r, 0.9 - r);
864 TString arrName = GetArrayName();
865 Printf(
"Print jet cuts for %s",arrName.Data());
868 Printf(
"JetPtCut: %f", fMinPt);
869 Printf(
"JetPtCutMax: %f", fMaxPt);
872 Printf(
"JetMinEta: %f", fMinEta);
873 Printf(
"JetMaxEta: %f", fMaxEta);
874 Printf(
"JetMinPhi: %f", fMinPhi);
875 Printf(
"JetMaxPhi: %f", fMaxPhi);
925 if (!jet2)
return -1;
927 Double_t jetPt2 = jet2->
Pt();
928 if (jetPt2 <= 0)
return -1;
931 if (!cont2) bgeom = kFALSE;
933 AliVParticle *vpf = 0x0;
936 Int_t idx = (Int_t)jet2->
TrackAt(icc);
938 AliVParticle *p2 = 0x0;
939 if (bgeom) p2 =
static_cast<AliVParticle*
>(jet2->
TrackAt(icc, cont2->GetArray()));
942 if (!bgeom && idx == jet1->
TrackAt(icf) && iFound == 0 ) {
945 if (vpf) sumPt += vpf->Pt();
951 if (!SamePart(vpf, p2, 1.e-4))
continue;
957 Double_t fraction = sumPt / jetPt2;
985 ::Warning(
"AliJetContainer::GenerateJetName",
"Unknown jet finding algorithm '%d'!", jetAlgo);
995 typeString =
"Charged";
998 typeString =
"Neutral";
1002 TString radiusString = TString::Format(
"R%03.0f", radius*100.0);
1004 TString trackString;
1006 trackString =
"_" + TString(partCont->
GetTitle());
1009 TString clusterString;
1011 clusterString =
"_" + TString(clusCont->
GetTitle());
1014 TString recombSchemeString;
1015 switch (recoScheme) {
1017 recombSchemeString =
"E_scheme";
1020 recombSchemeString =
"pt_scheme";
1023 recombSchemeString =
"pt2_scheme";
1026 recombSchemeString =
"Et_scheme";
1029 recombSchemeString =
"Et2_scheme";
1032 recombSchemeString =
"BIpt_scheme";
1035 recombSchemeString =
"BIpt2_scheme";
1038 recombSchemeString =
"ext_scheme";
1041 ::Error(
"AliJetContainer::GenerateJetName",
"Recombination %d scheme not recognized.", recoScheme);
1044 TString name = TString::Format(
"%s_%s%s%s%s%s_%s",
1045 tag.Data(), algoString.Data(), typeString.Data(), radiusString.Data(), trackString.Data(), clusterString.Data(), recombSchemeString.Data());
1093 static TString jetString;
1095 if (GetMinPt() == 0) {
1096 jetString = TString::Format(
"_%s_pT0000", GetArrayName().
Data());
1098 else if (GetMinPt() < 1.0) {
1099 jetString = TString::Format(
"_%s_pT0%3.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
1102 jetString = TString::Format(
"_%s_pT%4.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
1105 return jetString.Data();
1116 AliDebug(11,
"No jet found");
1117 rejectionReason |= kNullObject;
1123 AliDebug(11,
"Jet overlaps with TPC hole");
1124 rejectionReason |= kOverlapTpcHole;
const char * GetTitle() const
Float_t fMinTrackPt
maximum cluster constituent pt to accept the jet
Float_t fJetAreaCut
selection on jet flavour
Double_t GetRhoVal() const
Float_t fJetRadius
acceptance type
void LoadRho(const AliVEvent *event)
AliEmcalJet * ClosestJet() const
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
AliRhoParameter * fRho
cluster container (jet constituents)
JetAcceptanceType fJetAcceptanceType
Double_t GetLocalVal(Double_t phi, Double_t r, Double_t n) const
Declaration of class AliTLorentzVector.
Float_t fNEFMinCut
maximum z,leading charged
Double_t GetJetPtCorrLocal(Int_t i) const
virtual Bool_t AcceptJet(Int_t i, UInt_t &rejectionReason) const
void LoadRhoMass(const AliVEvent *event)
AliParticleContainer * fParticleContainer
jet tag status
virtual Bool_t CheckTpcHolesOverlap(const AliEmcalJet *clus, UInt_t &rejectionReason) 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.
const AliJetIterableMomentumContainer all_momentum() const
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
Double_t fTpcHoleWidth
position(in radians) of the malfunctioning TPC sector
AliEmcalJet * GetLeadingJet(const char *opt="")
void GetLeadingHadronMomentum(TLorentzVector &mom, const AliEmcalJet *jet) const
Bool_t GetAcceptMomentum(TLorentzVector &mom, Int_t i) const
const AliJetIterableMomentumContainer accepted_momentum() const
Int_t fRunNumber
! run number
AliVParticle * GetLeadingTrack(TClonesArray *tracks) const
Double_t GetLeadingHadronPt(const AliEmcalJet *jet) const
Float_t fMaxClusterPt
maximum cluster constituent pt to accept the jet
Bool_t GetNextAcceptMomentum(TLorentzVector &mom)
const char * GetTitle() const
Float_t fMinClusterPt
minimum cut on jet emcal area
Double_t MaxTrackPt() const
AliVCluster * GetLeadingCluster(TClonesArray *clusters) const
TString fLocalRhoName
Name of rho object.
Float_t fZLeadingChCut
maximum z,leading neutral
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.)
AliEmcalJet * GetNextJet()
AliEMCALGeometry * fGeom
! emcal geometry
TString fRhoMassName
Name of local rho object.
Double_t GetZLeadingCharged(const AliEmcalJet *jet) const
Short_t TrackAt(Int_t idx) const
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Bool_t TestFlavourTag(Int_t tag) const
EMCALIterableContainer::AliEmcalIterableContainerT< AliEmcalJet, EMCALIterableContainer::operator_star_object< AliEmcalJet > > AliJetIterableContainer
void SetArray(const AliVEvent *event)
void LoadLocalRho(const AliVEvent *event)
Int_t fTagStatus
jet trigger
EMCALIterableContainer::AliEmcalIterableContainerT< AliEmcalJet, EMCALIterableContainer::operator_star_pair< AliEmcalJet > > AliJetIterableMomentumContainer
Float_t fZLeadingEmcCut
maximum track constituent pt to accept the jet
AliEmcalJet * GetAcceptJet(Int_t i) const
Double_t MaxClusterPt() const
Represent a jet reconstructed using the EMCal jet framework.
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
void SetJetEtaPhiEMCAL(Double_t r=0.)
virtual Bool_t ApplyKinematicCuts(const AliTLorentzVector &mom, UInt_t &rejectionReason) const
const AliJetIterableContainer accepted() const
Float_t fNEFMaxCut
minimum NEF in a jet
Bool_t GetMomentumFromJet(TLorentzVector &mom, const AliEmcalJet *jet, Double_t mass) const
AliClusterContainer * fClusterContainer
particle container (jet constituents)
Bool_t GetNextMomentum(TLorentzVector &mom)
Container structure for EMCAL clusters.
Int_t fMinNConstituents
how many jets are to be considered the leading jet(s)
Double_t MaxPartPt() const
Container for jet within the EMCAL jet framework.
Double_t GetZ(const AliEmcalJet *jet, const TLorentzVector &mom) const
TString fRhoName
jet radius
AliEmcalJet * GetJet(Int_t i) const
const AliJetIterableContainer all() const
Double_t GetJetPtCorr(Int_t i) const
Int_t fFlavourSelection
Name of rho mass object.