AliPhysics  a8afd6c (a8afd6c)
AliJetContainer.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 
16 #include <TClonesArray.h>
17 
18 #include "AliVEvent.h"
19 #include "AliLog.h"
20 #include "AliEMCALGeometry.h"
21 #include "AliParticleContainer.h"
22 #include "AliClusterContainer.h"
23 #include "AliLocalRhoParameter.h"
24 #include "AliTLorentzVector.h"
25 
26 #include "AliJetContainer.h"
27 
29 ClassImp(AliJetContainer);
31 
37  fJetType(kUndefinedJetType),
38  fJetAlgorithm(undefined_jet_algorithm),
39  fRecombinationScheme(undefined_scheme),
40  fJetAcceptanceType(0),
41  fJetRadius(0),
42  fRhoName(),
43  fLocalRhoName(),
44  fRhoMassName(),
45  fFlavourSelection(0),
46  fJetAreaCut(-1),
47  fAreaEmcCut(-1),
48  fMinClusterPt(-1),
49  fMaxClusterPt(1000),
50  fMinTrackPt(-1),
51  fMaxTrackPt(100),
52  fZLeadingEmcCut(10.),
53  fZLeadingChCut(10.),
54  fNEFMinCut(-10.),
55  fNEFMaxCut(10.),
56  fLeadingHadronType(0),
57  fNLeadingJets(1),
58  fMinNConstituents(-1),
59  fJetTrigger(0),
60  fTagStatus(-1),
61  fParticleContainer(0),
62  fClusterContainer(0),
63  fRho(0),
64  fLocalRho(0),
65  fRhoMass(0),
66  fGeom(0),
67  fRunNumber(0),
68  fTpcHolePos(0),
69  fTpcHoleWidth(0)
70 {
71  fBaseClassName = "AliEmcalJet";
72  SetClassName("AliEmcalJet");
73 }
74 
85  fJetRadius(0),
86  fRhoName(),
87  fLocalRhoName(),
88  fRhoMassName(),
90  fJetAreaCut(-1),
91  fAreaEmcCut(-1),
92  fMinClusterPt(-1),
93  fMaxClusterPt(1000),
94  fMinTrackPt(-1),
95  fMaxTrackPt(100),
96  fZLeadingEmcCut(10.),
97  fZLeadingChCut(10.),
98  fNEFMinCut(-10.),
99  fNEFMaxCut(10.),
101  fNLeadingJets(1),
102  fMinNConstituents(-1),
103  fJetTrigger(0),
104  fTagStatus(-1),
107  fRho(0),
108  fLocalRho(0),
109  fRhoMass(0),
110  fGeom(0),
111  fRunNumber(0),
112  fTpcHolePos(0),
113  fTpcHoleWidth(0)
114 {
115  fBaseClassName = "AliEmcalJet";
116  SetClassName("AliEmcalJet");
117  SetMinPt(1);
118 }
119 
134  AliParticleContainer* partCont, AliClusterContainer* clusCont, TString tag):
135  AliParticleContainer(GenerateJetName(jetType, jetAlgo, recoScheme, radius, partCont, clusCont, tag)),
136  fJetType(jetType),
137  fJetAlgorithm(jetAlgo),
138  fRecombinationScheme(recoScheme),
140  fJetRadius(radius),
141  fRhoName(),
142  fLocalRhoName(),
143  fRhoMassName(),
145  fJetAreaCut(-1),
146  fAreaEmcCut(-1),
147  fMinClusterPt(-1),
148  fMaxClusterPt(1000),
149  fMinTrackPt(-1),
150  fMaxTrackPt(100),
151  fZLeadingEmcCut(10.),
152  fZLeadingChCut(10.),
153  fNEFMinCut(-10.),
154  fNEFMaxCut(10.),
156  fNLeadingJets(1),
157  fMinNConstituents(-1),
158  fJetTrigger(0),
159  fTagStatus(-1),
160  fParticleContainer(partCont),
161  fClusterContainer(clusCont),
162  fRho(0),
163  fLocalRho(0),
164  fRhoMass(0),
165  fGeom(0),
166  fRunNumber(0)
167 {
168  fBaseClassName = "AliEmcalJet";
169  SetClassName("AliEmcalJet");
170  SetMinPt(1);
171 }
172 
177 void AliJetContainer::SetArray(const AliVEvent *event)
178 {
179  // Set jet array
180 
181  AliEmcalContainer::SetArray(event);
182 }
183 
191 void AliJetContainer::LoadRho(const AliVEvent *event)
192 {
193  if (!fRhoName.IsNull() && !fRho) {
194  fRho = dynamic_cast<AliRhoParameter*>(event->FindListObject(fRhoName));
195  if (!fRho) {
196  AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoName.Data()));
197  return;
198  }
199  }
200 }
201 
210 void AliJetContainer::LoadLocalRho(const AliVEvent *event)
211 {
212  if (!fLocalRhoName.IsNull() && !fLocalRho) {
213  fLocalRho = dynamic_cast<AliLocalRhoParameter*>(event->FindListObject(fLocalRhoName));
214  if (!fLocalRho) {
215  AliError(Form("%s: Could not retrieve rho %s!", GetName(), fLocalRhoName.Data()));
216  return;
217  }
218  }
219 }
220 
229 void AliJetContainer::LoadRhoMass(const AliVEvent *event)
230 {
231  if (!fRhoMassName.IsNull() && !fRhoMass) {
232  fRhoMass = dynamic_cast<AliRhoParameter*>(event->FindListObject(fRhoMassName));
233  if (!fRhoMass) {
234  AliError(Form("%s: Could not retrieve rho_mass %s!", GetName(), fRhoMassName.Data()));
235  return;
236  }
237  }
238 }
239 
247 {
248  TString option(opt);
249  option.ToLower();
250 
251  Int_t tempID = fCurrentID;
252  ResetCurrentID();
253 
254  AliEmcalJet *jetMax = GetNextAcceptJet();
255  AliEmcalJet *jet = 0;
256 
257  if (option.Contains("rho")) {
258  while ((jet = GetNextAcceptJet())) {
259  if ( (jet->Pt()-jet->Area()*GetRhoVal()) > (jetMax->Pt()-jetMax->Area()*GetRhoVal()) )
260  jetMax = jet;
261  }
262  }
263  else {
264  while ((jet = GetNextAcceptJet())) {
265  if (jet->Pt() > jetMax->Pt()) jetMax = jet;
266  }
267  }
268 
269  fCurrentID = tempID;
270 
271  return jetMax;
272 }
273 
280 {
281  if (i < 0 || i > fClArray->GetEntriesFast()) return 0;
282  AliEmcalJet *jet = static_cast<AliEmcalJet*>(fClArray->At(i));
283  return jet;
284 
285 }
286 
294 {
295  UInt_t rejectionReason = 0;
296  AliEmcalJet *jet = GetJet(i);
297  if(!AcceptJet(jet, rejectionReason)) return 0;
298 
299  return jet;
300 }
301 
309 {
310  const Int_t njets = GetNEntries();
311  AliEmcalJet *jet = 0;
312  do {
313  fCurrentID++;
314  if (fCurrentID >= njets) break;
315  jet = GetAcceptJet(fCurrentID);
316  } while (!jet);
317 
318  return jet;
319 }
320 
328 {
329  const Int_t njets = GetNEntries();
330  AliEmcalJet *jet = 0;
331  do {
332  fCurrentID++;
333  if (fCurrentID >= njets) break;
334  jet = GetJet(fCurrentID);
335  } while (!jet);
336 
337 
338  return jet;
339 }
340 
348 {
349  AliEmcalJet *jet = GetJet(i);
350  return jet->Pt() - fRho->GetVal()*jet->Area();
351 }
352 
360 {
361  AliEmcalJet *jet = GetJet(i);
362 
363  return jet->Pt() - fLocalRho->GetLocalVal(jet->Phi(), fJetRadius)*jet->Area();
364 }
365 
373 Bool_t AliJetContainer::GetMomentumFromJet(TLorentzVector &mom, const AliEmcalJet* jet, Double_t mass) const
374 {
375  Double_t p = jet->P();
376  Double_t e = TMath::Sqrt(mass*mass + p*p);
377 
378  mom.SetPtEtaPhiE(jet->Pt(), jet->Eta(), jet->Phi(), e);
379 
380  return kTRUE;
381 }
382 
390 Bool_t AliJetContainer::GetMomentumFromJet(TLorentzVector &mom, const AliEmcalJet* jet) const
391 {
392  if (jet) {
393  if (fMassHypothesis >= 0) {
394  GetMomentumFromJet(mom, jet, fMassHypothesis);
395  }
396  else {
397  jet->GetMomentum(mom);
398  }
399  return kTRUE;
400  }
401  else {
402  mom.SetPtEtaPhiM(0, 0, 0, 0);
403  return kFALSE;
404  }
405 }
406 
415 Bool_t AliJetContainer::GetMomentum(TLorentzVector &mom, Int_t i) const
416 {
417  AliEmcalJet *jet = GetJet(i);
418  return GetMomentumFromJet(mom, jet);
419 }
420 
430 {
431  AliEmcalJet *jet = GetNextJet();
432  return GetMomentumFromJet(mom, jet);
433 }
434 
444 Bool_t AliJetContainer::GetAcceptMomentum(TLorentzVector &mom, Int_t i) const
445 {
446  AliEmcalJet *jet = GetAcceptJet(i);
447  return GetMomentumFromJet(mom, jet);
448 }
449 
459 {
460  AliEmcalJet *jet = GetNextAcceptJet();
461  return GetMomentumFromJet(mom, jet);
462 }
463 
470 Bool_t AliJetContainer::AcceptJet(const AliEmcalJet *jet, UInt_t &rejectionReason) const
471 {
472  if (fTpcHolePos>0) {
473  Bool_t s = CheckTpcHolesOverlap(jet,rejectionReason);
474  if (!s) return kFALSE;
475  }
476 
477  Bool_t r = ApplyJetCuts(jet, rejectionReason);
478  if (!r) return kFALSE;
479 
480  AliTLorentzVector mom;
481  GetMomentumFromJet(mom, jet);
482 
483  return ApplyKinematicCuts(mom, rejectionReason);
484 }
485 
492 Bool_t AliJetContainer::AcceptJet(Int_t i, UInt_t &rejectionReason) const
493 {
494  if (fTpcHolePos>0) {
495  Bool_t s = CheckTpcHolesOverlap(GetJet(i),rejectionReason);
496  if (!s) return kFALSE;
497  }
498 
499  Bool_t r = ApplyJetCuts(GetJet(i), rejectionReason);
500  if (!r) return kFALSE;
501 
502  AliTLorentzVector mom;
503  GetMomentum(mom, i);
504 
505  return ApplyKinematicCuts(mom, rejectionReason);
506 }
507 
514 Bool_t AliJetContainer::ApplyJetCuts(const AliEmcalJet *jet, UInt_t &rejectionReason) const
515 {
516  // Return true if jet is accepted.
517 
518  if (!jet) {
519  AliDebug(11,"No jet found");
520  rejectionReason |= kNullObject;
521  return kFALSE;
522  }
523 
524  if (jet->TestBits(fBitMap) != (Int_t)fBitMap) {
525  AliDebug(11,"Cut rejecting jet: Bit map");
526  rejectionReason |= kBitMapCut;
527  return kFALSE;
528  }
529 
530  if (jet->Area() <= fJetAreaCut) {
531  AliDebug(11,"Cut rejecting jet: Area");
532  rejectionReason |= kAreaCut;
533  return kFALSE;
534  }
535 
536  if (jet->AreaEmc() < fAreaEmcCut) {
537  AliDebug(11,"Cut rejecting jet: AreaEmc");
538  rejectionReason |= kAreaEmcCut;
539  return kFALSE;
540  }
541 
543  AliDebug(11,"Cut rejecting jet: ZLeading");
544  rejectionReason |= kZLeadingChCut;
545  return kFALSE;
546  }
547 
548  if (fZLeadingEmcCut < 1 && GetZLeadingEmc(jet) > fZLeadingEmcCut) {
549  AliDebug(11,"Cut rejecting jet: ZLeadEmc");
550  rejectionReason |= kZLeadingEmcCut;
551  return kFALSE;
552  }
553 
554  if (jet->NEF() < fNEFMinCut || jet->NEF() > fNEFMaxCut) {
555  AliDebug(11,"Cut rejecting jet: NEF");
556  rejectionReason |= kNEFCut;
557  return kFALSE;
558  }
559 
561  AliDebug(11,"Cut rejecting jet: minimum number of constituents");
562  rejectionReason |= kMinNConstituents;
563  return kFALSE;
564  }
565 
566  if (fLeadingHadronType == 0) {
567  if (jet->MaxTrackPt() < fMinTrackPt) {
568  AliDebug(11,"Cut rejecting jet: Bias");
569  rejectionReason |= kMinLeadPtCut;
570  return kFALSE;
571  }
572  }
573  else if (fLeadingHadronType == 1) {
574  if (jet->MaxClusterPt() < fMinClusterPt) {
575  AliDebug(11,"Cut rejecting jet: Bias");
576  rejectionReason |= kMinLeadPtCut;
577  return kFALSE;
578  }
579  }
580  else {
581  if (jet->MaxTrackPt() < fMinTrackPt && jet->MaxClusterPt() < fMinClusterPt) {
582  AliDebug(11,"Cut rejecting jet: Bias");
583  rejectionReason |= kMinLeadPtCut;
584  return kFALSE;
585  }
586  }
587 
588  if (jet->MaxTrackPt() > fMaxTrackPt) {
589  AliDebug(11,"Cut rejecting jet: MaxTrackPt");
590  rejectionReason |= kMaxTrackPtCut;
591  return kFALSE;
592 
593  }
594 
595  if (jet->MaxClusterPt() > fMaxClusterPt) {
596  AliDebug(11,"Cut rejecting jet: MaxClusPt");
597  rejectionReason |= kMaxClusterPtCut;
598  return kFALSE;
599  }
600 
602  AliDebug(11,"Cut rejecting jet: Flavour");
603  rejectionReason |= kFlavourCut;
604  return kFALSE;
605  }
606 
607  if (fTagStatus>-1 && jet->GetTagStatus()!=fTagStatus) {
608  AliDebug(11,"Cut rejecting jet: tag status");
609  rejectionReason |= kTagStatus;
610  return kFALSE;
611  }
612 
613  // If user sets acceptance selection type, compare it to jet's acceptance type, bitwise
614  if (fJetAcceptanceType != 0) {
615  UInt_t jetAccType = jet->GetJetAcceptanceType();
616  UInt_t isAccepted = jetAccType & fJetAcceptanceType;
617  if (!isAccepted)
618  return kFALSE;
619  }
620 
621  return kTRUE;
622 }
623 
632 {
633  if (fLeadingHadronType == 0) // charged leading hadron
634  return jet->MaxTrackPt();
635  else if (fLeadingHadronType == 1) // neutral leading hadron
636  return jet->MaxClusterPt();
637  else // charged or neutral
638  return jet->MaxPartPt();
639 }
640 
653 void AliJetContainer::GetLeadingHadronMomentum(TLorentzVector &mom, const AliEmcalJet *jet) const
654 {
655  Double_t maxClusterPt = 0;
656  Double_t maxClusterEta = 0;
657  Double_t maxClusterPhi = 0;
658 
659  Double_t maxTrackPt = 0;
660  Double_t maxTrackEta = 0;
661  Double_t maxTrackPhi = 0;
662 
663  if (fLeadingHadronType == 1 || fLeadingHadronType == 2) {
664  AliVCluster *cluster = jet->GetLeadingCluster();
665  if (cluster) {
666  TLorentzVector nPart;
667  cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
668 
669  maxClusterEta = nPart.Eta();
670  maxClusterPhi = nPart.Phi();
671  maxClusterPt = nPart.Pt();
672  }
673  }
674 
675  if (fLeadingHadronType == 0 || fLeadingHadronType == 2) {
676  AliVParticle *track = jet->GetLeadingTrack();
677  if (track) {
678  maxTrackEta = track->Eta();
679  maxTrackPhi = track->Phi();
680  maxTrackPt = track->Pt();
681  }
682  }
683 
684  if (maxTrackPt > maxClusterPt)
685  mom.SetPtEtaPhiM(maxTrackPt,maxTrackEta,maxTrackPhi,0.139);
686  else
687  mom.SetPtEtaPhiM(maxClusterPt,maxClusterEta,maxClusterPhi,0.139);
688 }
689 
697 {
698  TLorentzVector mom;
699 
700  AliVCluster *cluster = jet->GetLeadingCluster();
701  if (cluster) {
702  cluster->GetMomentum(mom, fVertex);
703 
704  return GetZ(jet,mom);
705  }
706  else {
707  return -1;
708  }
709 }
710 
718 {
719  TLorentzVector mom;
720 
721  AliVParticle *track = jet->GetLeadingTrack();
722  if (track) {
723  mom.SetPtEtaPhiM(track->Pt(),track->Eta(),track->Phi(),0.139);
724 
725  return GetZ(jet,mom);
726  }
727  else {
728  return -1;
729  }
730 }
731 
739 Double_t AliJetContainer::GetZ(const AliEmcalJet *jet, const TLorentzVector& mom) const
740 {
741  Double_t pJetSq = jet->Px()*jet->Px() + jet->Py()*jet->Py() + jet->Pz()*jet->Pz();
742 
743  if (pJetSq < 1e-6) {
744  AliWarning(Form("%s: strange, pjet*pjet seems to be zero pJetSq: %.3f",GetName(), pJetSq));
745  return 0;
746  }
747 
748  Double_t z = (mom.Px()*jet->Px() + mom.Py()*jet->Py() + mom.Pz()*jet->Pz()) / pJetSq;
749 
750  if (z < 0) {
751  AliWarning(Form("%s: z = %.3ff < 0, returning 0...",GetName(), z));
752  z = 0;
753  }
754 
755  return z;
756 }
757 
762 {
763  TString arrName = GetArrayName();
764  Printf("Print jet cuts for %s",arrName.Data());
765  Printf("PtBiasJetTrack: %f",fMinTrackPt);
766  Printf("PtBiasJetClus: %f",fMinClusterPt);
767  Printf("JetPtCut: %f", fMinPt);
768  Printf("JetPtCutMax: %f", fMaxPt);
769  Printf("JetAreaCut: %f",fJetAreaCut);
770  Printf("AreaEmcCut: %f",fAreaEmcCut);
771  Printf("JetMinEta: %f", fMinEta);
772  Printf("JetMaxEta: %f", fMaxEta);
773  Printf("JetMinPhi: %f", fMinPhi);
774  Printf("JetMaxPhi: %f", fMaxPhi);
775  Printf("MaxClusterPt: %f",fMaxClusterPt);
776  Printf("MaxTrackPt: %f",fMaxTrackPt);
777  Printf("LeadingHadronType: %d",fLeadingHadronType);
778  Printf("ZLeadingEmcCut: %f",fZLeadingEmcCut);
779  Printf("ZLeadingChCut: %f",fZLeadingChCut);
780 }
781 
786 {
787  fMinTrackPt = 0;
788  fMinClusterPt = 0;
789  fMinPt = 0;
790  fJetAreaCut = -1;
791  fAreaEmcCut = -1;
792  fMinEta = -0.9;
793  fMaxEta = 0.9;
794  fMinPhi = 0;
795  fMaxPhi = 10;
796  fMaxClusterPt = 1000;
797  fMaxTrackPt = 100;
798  fLeadingHadronType = 0;
799  fZLeadingEmcCut = 10.;
800  fZLeadingChCut = 10.;
801 }
802 
808 {
809  return accepted().GetEntries();
810 }
811 
822 {
823  AliEmcalJet *jet2 = jet1->ClosestJet();
824  if (!jet2) return -1;
825 
826  Double_t jetPt2 = jet2->Pt();
827  if (jetPt2 <= 0) return -1;
828 
829  Int_t bgeom = kTRUE;
830  if (!cont2) bgeom = kFALSE;
831  Double_t sumPt = 0.;
832  AliVParticle *vpf = 0x0;
833  Int_t iFound = 0;
834  for (Int_t icc = 0; icc < jet2->GetNumberOfTracks(); icc++) {
835  Int_t idx = (Int_t)jet2->TrackAt(icc);
836  //get particle
837  AliVParticle *p2 = 0x0;
838  if (bgeom) p2 = static_cast<AliVParticle*>(jet2->Track(icc));
839  iFound = 0;
840  for (Int_t icf = 0; icf < jet1->GetNumberOfTracks(); icf++) {
841  if (!bgeom && idx == jet1->TrackAt(icf) && iFound == 0 ) {
842  iFound = 1;
843  vpf = jet1->Track(icf);
844  if (vpf) sumPt += vpf->Pt();
845  continue;
846  }
847  if (bgeom){
848  vpf = jet1->Track(icf);
849  if (!vpf) continue;
850  if (!SamePart(vpf, p2, 1.e-4)) continue; //not the same particle
851  sumPt += vpf->Pt();
852  }
853  }
854  }
855 
856  Double_t fraction = sumPt / jetPt2;
857 
858  return fraction;
859 }
860 
873 {
874  TString algoString;
875  switch (jetAlgo)
876  {
877  case kt_algorithm:
878  algoString = "KT";
879  break;
880  case antikt_algorithm:
881  algoString = "AKT";
882  break;
883  default:
884  ::Warning("AliJetContainer::GenerateJetName", "Unknown jet finding algorithm '%d'!", jetAlgo);
885  algoString = "";
886  }
887 
888  TString typeString;
889  switch (jetType) {
890  case kFullJet:
891  typeString = "Full";
892  break;
893  case kChargedJet:
894  typeString = "Charged";
895  break;
896  case kNeutralJet:
897  typeString = "Neutral";
898  break;
899  }
900 
901  TString radiusString = TString::Format("R%03.0f", radius*100.0);
902 
903  TString trackString;
904  if (partCont) { //Neutral jets on particle level, can have praticle containers
905  trackString = "_" + TString(partCont->GetTitle());
906  }
907 
908  TString clusterString;
909  if (jetType != kChargedJet && clusCont) {
910  clusterString = "_" + TString(clusCont->GetTitle());
911  }
912 
913  TString recombSchemeString;
914  switch (recoScheme) {
915  case E_scheme:
916  recombSchemeString = "E_scheme";
917  break;
918  case pt_scheme:
919  recombSchemeString = "pt_scheme";
920  break;
921  case pt2_scheme:
922  recombSchemeString = "pt2_scheme";
923  break;
924  case Et_scheme:
925  recombSchemeString = "Et_scheme";
926  break;
927  case Et2_scheme:
928  recombSchemeString = "Et2_scheme";
929  break;
930  case BIpt_scheme:
931  recombSchemeString = "BIpt_scheme";
932  break;
933  case BIpt2_scheme:
934  recombSchemeString = "BIpt2_scheme";
935  break;
936  case external_scheme:
937  recombSchemeString = "ext_scheme";
938  break;
939  default:
940  ::Error("AliJetContainer::GenerateJetName", "Recombination %d scheme not recognized.", recoScheme);
941  }
942 
943  TString name = TString::Format("%s_%s%s%s%s%s_%s",
944  tag.Data(), algoString.Data(), typeString.Data(), radiusString.Data(), trackString.Data(), clusterString.Data(), recombSchemeString.Data());
945 
946  return name;
947 }
948 
955  return AliJetIterableContainer(this, false);
956 }
957 
964  return AliJetIterableContainer(this, true);
965 }
966 
973  return AliJetIterableMomentumContainer(this, false);
974 }
975 
982  return AliJetIterableMomentumContainer(this, true);
983 }
984 
990 const char* AliJetContainer::GetTitle() const
991 {
992  static TString jetString;
993 
994  if (GetMinPt() == 0) {
995  jetString = TString::Format("_%s_pT0000", GetArrayName().Data());
996  }
997  else if (GetMinPt() < 1.0) {
998  jetString = TString::Format("_%s_pT0%3.0f", GetArrayName().Data(), GetMinPt()*1000.0);
999  }
1000  else {
1001  jetString = TString::Format("_%s_pT%4.0f", GetArrayName().Data(), GetMinPt()*1000.0);
1002  }
1003 
1004  return jetString.Data();
1005 }
1006 
1013 {
1014  if (!jet) {
1015  AliDebug(11,"No jet found");
1016  rejectionReason |= kNullObject;
1017  return kFALSE;
1018  }
1019 
1020  Double_t disthole = RelativePhi(jet->Phi(), fTpcHolePos);
1021  if (TMath::Abs(disthole) < (fTpcHoleWidth + fJetRadius)){
1022  AliDebug(11,"Jet overlaps with TPC hole");
1023  rejectionReason |= kOverlapTpcHole;
1024  return kFALSE;
1025  }
1026 
1027  return kTRUE;
1028 }
Double_t AreaEmc() const
Definition: AliEmcalJet.h:135
UInt_t fJetTrigger
jet trigger
UInt_t fJetAcceptanceType
Jet acceptance type cut, see AliEmcalJet::JetAcceptanceType.
Double_t Area() const
Definition: AliEmcalJet.h:130
const char * GetTitle() const
Float_t fMinTrackPt
maximum track constituent pt to accept the jet
Float_t fJetAreaCut
cut on jet area
Double_t GetRhoVal() const
Float_t fJetRadius
jet radius
double Double_t
Definition: External.C:58
Double_t fTpcHolePos
position(in radians) of the malfunctioning TPC sector
void LoadRho(const AliVEvent *event)
AliVParticle * GetLeadingTrack(TClonesArray *tracks=0) const
AliEmcalJet * ClosestJet() const
Definition: AliEmcalJet.h:327
AliRhoParameter * fRhoMass
! event rho mass for these jets
Int_t GetTagStatus() const
Definition: AliEmcalJet.h:338
virtual Bool_t ApplyJetCuts(const AliEmcalJet *clus, UInt_t &rejectionReason) const
Double_t Eta() const
Definition: AliEmcalJet.h:121
const char * GetTitle() const
AliRhoParameter * fRho
! event rho for these jets
Double_t Py() const
Definition: AliEmcalJet.h:107
Double_t Phi() const
Definition: AliEmcalJet.h:117
Double_t mass
Double_t GetLocalVal(Double_t phi, Double_t r, Double_t n) const
Declaration of class AliTLorentzVector.
Float_t fNEFMinCut
minimum NEF in a jet
Double_t GetJetPtCorrLocal(Int_t i) const
AliVParticle * Track(Int_t idx) const
virtual Bool_t AcceptJet(Int_t i, UInt_t &rejectionReason) const
ERecoScheme_t fRecombinationScheme
Recombination scheme.
void LoadRhoMass(const AliVEvent *event)
AliParticleContainer * fParticleContainer
particle container (jet constituents)
EJetType_t fJetType
Jet type.
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
Definition: AliEmcalJet.h:140
Container for particles within the EMCAL framework.
const AliJetIterableMomentumContainer all_momentum() const
Int_t TrackAt(Int_t idx) const
Definition: AliEmcalJet.h:160
UShort_t GetNumberOfTracks() const
Definition: AliEmcalJet.h:139
AliLocalRhoParameter * fLocalRho
! event local rho for these jets
Double_t Px() const
Definition: AliEmcalJet.h:106
Float_t fAreaEmcCut
minimum cut on jet emcal area
void GetMomentum(TLorentzVector &vec) const
Int_t fLeadingHadronType
0 = charged, 1 = neutral, 2 = both
Double_t fTpcHoleWidth
width of the malfunctioning TPC area
AliEmcalJet * GetLeadingJet(const char *opt="")
void GetLeadingHadronMomentum(TLorentzVector &mom, const AliEmcalJet *jet) const
Bool_t GetAcceptMomentum(TLorentzVector &mom, Int_t i) const
EJetAlgo_t fJetAlgorithm
Jet algorithm.
const AliJetIterableMomentumContainer accepted_momentum() const
int Int_t
Definition: External.C:63
Int_t fRunNumber
! run number
unsigned int UInt_t
Definition: External.C:33
Double_t GetLeadingHadronPt(const AliEmcalJet *jet) const
UInt_t GetJetAcceptanceType() const
Definition: AliEmcalJet.h:367
Float_t fMaxClusterPt
maximum cluster constituent pt to accept the jet
Bool_t GetNextAcceptMomentum(TLorentzVector &mom)
const char * GetTitle() const
Float_t fMinClusterPt
maximum cluster constituent pt to accept the jet
Double_t MaxTrackPt() const
Definition: AliEmcalJet.h:155
TString fLocalRhoName
Name of local rho object.
Float_t fZLeadingChCut
maximum z,leading charged
AliVCluster * GetLeadingCluster(TClonesArray *clusters=0) const
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 Pt() const
Definition: AliEmcalJet.h:109
AliEmcalJet * GetNextJet()
AliEMCALGeometry * fGeom
! emcal geometry
Double_t P() const
Definition: AliEmcalJet.h:110
Int_t fNLeadingJets
how many jets are to be considered the leading jet(s)
TString fRhoMassName
Name of rho mass object.
Double_t GetZLeadingCharged(const AliEmcalJet *jet) const
Bool_t TestFlavourTag(Int_t tag) const
Definition: AliEmcalJet.h:353
EMCALIterableContainer::AliEmcalIterableContainerT< AliEmcalJet, EMCALIterableContainer::operator_star_object< AliEmcalJet > > AliJetIterableContainer
void SetArray(const AliVEvent *event)
void LoadLocalRho(const AliVEvent *event)
Int_t fTagStatus
jet tag status
EMCALIterableContainer::AliEmcalIterableContainerT< AliEmcalJet, EMCALIterableContainer::operator_star_pair< AliEmcalJet > > AliJetIterableMomentumContainer
Float_t fZLeadingEmcCut
maximum z,leading neutral
AliEmcalJet * GetAcceptJet(Int_t i) const
Double_t MaxClusterPt() const
Definition: AliEmcalJet.h:154
Represent a jet reconstructed using the EMCal jet framework.
Definition: AliEmcalJet.h:51
Double_t GetZLeadingEmc(const AliEmcalJet *jet) const
Double_t Pz() const
Definition: AliEmcalJet.h:108
Float_t fMaxTrackPt
maximum track constituent pt to accept the jet
Double_t GetFractionSharedPt(const AliEmcalJet *jet, AliParticleContainer *cont2=0x0) const
virtual Bool_t ApplyKinematicCuts(const AliTLorentzVector &mom, UInt_t &rejectionReason) const
const AliJetIterableContainer accepted() const
bool Bool_t
Definition: External.C:53
Float_t fNEFMaxCut
maximum NEF in a jet
Double_t NEF() const
Definition: AliEmcalJet.h:148
Bool_t GetMomentumFromJet(TLorentzVector &mom, const AliEmcalJet *jet, Double_t mass) const
AliClusterContainer * fClusterContainer
cluster container (jet constituents)
Bool_t GetNextMomentum(TLorentzVector &mom)
Container structure for EMCAL clusters.
Int_t fMinNConstituents
minimum number of constituents in jet
Double_t MaxPartPt() const
Definition: AliEmcalJet.h:156
Container for jet within the EMCAL jet framework.
Double_t GetZ(const AliEmcalJet *jet, const TLorentzVector &mom) const
TString fRhoName
Name of rho object.
AliEmcalJet * GetJet(Int_t i) const
const AliJetIterableContainer all() const
Double_t GetJetPtCorr(Int_t i) const
Int_t fFlavourSelection
selection on jet flavour