// $Id$
-class AliGenPythiaEventHeader;
class TClonesArray;
-class TH1F;
-class TH2F;
+class TH2;
+class THnSparse;
+class AliNamedArrayI;
+#include "AliEmcalJet.h"
#include "AliAnalysisTaskEmcalJet.h"
class AliJetResponseMaker : public AliAnalysisTaskEmcalJet {
AliJetResponseMaker(const char *name);
virtual ~AliJetResponseMaker();
+ enum MatchingType{
+ kNoMatching = 0,
+ kGeometrical = 1,
+ kMCLabel = 2,
+ kSameCollections = 3
+ };
+
void UserCreateOutputObjects();
- void SetMCJetsName(const char *n) { fMCJetsName = n; }
- void SetMCTracksName(const char *n) { fMCTracksName = n; }
- void SetMaxDistance(Double_t d) { fMaxDistance = d; }
- void SetDoWeighting(Bool_t d = kTRUE) { fDoWeighting = d; }
- void SetMCFiducial(Bool_t f = kTRUE) { fMCFiducial = f; }
- void SetEventWeightHist(Bool_t h) { fEventWeightHist = h; }
- void SetPtHardBin(Int_t b) { fSelectPtHardBin = b; }
- void SetDoMatching(Bool_t b) { fDoMatching = b; }
+ void SetMatching(MatchingType t, Double_t p1=1, Double_t p2=1) { fMatching = t; fMatchingPar1 = p1; fMatchingPar2 = p2; }
+ void SetPtHardBin(Int_t b) { fSelectPtHardBin = b ; }
+ void SetUseCellsToMatch(Bool_t i) { fUseCellsToMatch = i ; }
+ void SetMinJetMCPt(Float_t pt) { fMinJetMCPt = pt ; }
+ void SetHistoType(Int_t b) { fHistoType = b ; }
+ void SetDeltaPtAxis(Int_t b) { fDeltaPtAxis = b ; }
+ void SetDeltaEtaDeltaPhiAxis(Int_t b) { fDeltaEtaDeltaPhiAxis= b ; }
+ void SetNEFAxis(Int_t b) { fNEFAxis = b ; }
+ void SetZAxis(Int_t b) { fZAxis = b ; }
protected:
- Bool_t IsEventSelected();
- Bool_t AcceptJet(AliEmcalJet* jet) const;
void ExecOnce();
- void DoJetLoop(TClonesArray *jets1, TClonesArray *jets2, Bool_t mc);
+ void DoJetLoop();
Bool_t FillHistograms();
- Bool_t RetrieveEventObjects();
Bool_t Run();
+ Bool_t DoJetMatching();
+ void SetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, MatchingType matching);
+ void GetGeometricalMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, Double_t &d) const;
+ void GetMCLabelMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, Double_t &d1, Double_t &d2) const;
+ void GetSameCollectionsMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, Double_t &d1, Double_t &d2) const;
+ void FillMatchingHistos(Double_t Pt1, Double_t Pt2, Double_t Eta1, Double_t Eta2, Double_t Phi1, Double_t Phi2,
+ Double_t A1, Double_t A2, Double_t d, Double_t CE1, Double_t CE2, Double_t CorrPt1, Double_t CorrPt2,
+ Double_t MCPt1, Double_t NEF1, Double_t NEF2, Double_t LeadingPt1, Double_t LeadingPt2);
+ void FillJetHisto(Double_t Phi, Double_t Eta, Double_t Pt, Double_t A, Double_t NEF, Double_t LeadingPt, Double_t CorrPt, Double_t MCPt, Int_t Set);
+ void AllocateTH2();
+ void AllocateTHnSparse();
+
+ MatchingType fMatching; // matching type
+ Double_t fMatchingPar1; // matching parameter for jet1-jet2 matching
+ Double_t fMatchingPar2; // matching parameter for jet2-jet1 matching
+ Bool_t fUseCellsToMatch; // use cells instead of clusters to match jets (slower but sometimes needed)
+ Double_t fMinJetMCPt; // minimum jet MC pt
+ Int_t fHistoType; // histogram type (0=TH2, 1=THnSparse)
+ Int_t fDeltaPtAxis; // add delta pt axis in THnSparse (default=0)
+ Int_t fDeltaEtaDeltaPhiAxis; // add delta eta and delta phi axes in THnSparse (default=0)
+ Int_t fNEFAxis; // add NEF axis in matching THnSparse (default=0)
+ Int_t fZAxis; // add Z axis in matching THnSparse (default=0)
+
+ Bool_t fIsJet1Rho; //!whether the jet1 collection has to be average subtracted
+ Bool_t fIsJet2Rho; //!whether the jet2 collection has to be average subtracted
+
+ TH2 *fHistRejectionReason1; //!Rejection reason vs. jet pt
+ TH2 *fHistRejectionReason2; //!Rejection reason vs. jet pt
+
+ // THnSparse
+ THnSparse *fHistJets1; //!jet1 THnSparse
+ THnSparse *fHistJets2; //!jet2 THnSparse
+ THnSparse *fHistMatching; //!matching THnSparse
+
+ // Jets 1
+ TH2 *fHistJets1PhiEta; //!phi-eta distribution of jets 1
+ TH2 *fHistJets1PtArea; //!inclusive jet pt vs. area histogram 1
+ TH2 *fHistJets1CorrPtArea; //!inclusive jet pt vs. area histogram 1
+ TH2 *fHistJets1NEFvsPt; //!Jet neutral energy fraction vs. jet pt 1
+ TH2 *fHistJets1CEFvsCEFPt; //!Jet charged energy fraction vs. charged jet pt 1
+ TH2 *fHistJets1ZvsPt; //!Constituent Pt over Jet Pt ratio vs. jet pt 1
+
+ // Jets 2
+ TH2 *fHistJets2PhiEta; //!phi-eta distribution of jets 2
+ TH2 *fHistJets2PtArea; //!inclusive jet pt vs. area histogram 2
+ TH2 *fHistJets2CorrPtArea; //!inclusive jet pt vs. area histogram 2
+ TH2 *fHistJets2NEFvsPt; //!Jet neutral energy fraction vs. jet pt 2
+ TH2 *fHistJets2CEFvsCEFPt; //!Jet charged energy fraction vs. charged jet pt 2
+ TH2 *fHistJets2ZvsPt; //!Constituent Pt over Jet Pt ratio vs. jet pt 2
+
+ // Jet1-Jet2 matching
+ TH2 *fHistCommonEnergy1vsJet1Pt; //!common energy 1 (%) vs jet 1 pt
+ TH2 *fHistCommonEnergy2vsJet2Pt; //!common energy 2 (%) vs jet 2 pt
+ TH2 *fHistDistancevsJet1Pt; //!distance vs jet 1 pt
+ TH2 *fHistDistancevsJet2Pt; //!distance vs jet 2 pt
+ TH2 *fHistDistancevsCommonEnergy1; //!distance vs common energy 1 (%)
+ TH2 *fHistDistancevsCommonEnergy2; //!distance vs common energy 2 (%)
+ TH2 *fHistCommonEnergy1vsCommonEnergy2; //!common energy 1 (%) vs common energy 2 (%)
+ TH2 *fHistDeltaEtaDeltaPhi; //!delta eta vs delta phi of matched jets
+
+ TH2 *fHistJet2PtOverJet1PtvsJet2Pt; //!jet 2 pt over jet 1 pt vs jet 2 pt
+ TH2 *fHistJet1PtOverJet2PtvsJet1Pt; //!jet 1 pt over jet 2 pt vs jet 1 pt
+ TH2 *fHistDeltaPtvsJet1Pt; //!delta pt between matched jets vs jet 1 pt
+ TH2 *fHistDeltaPtvsJet2Pt; //!delta pt between matched jets vs jet 2 pt
+ TH2 *fHistDeltaPtOverJet1PtvsJet1Pt; //!delta pt / jet 1 pt between matched jets vs jet 1 pt
+ TH2 *fHistDeltaPtOverJet2PtvsJet2Pt; //!delta pt / jet 2 pt between matched jets vs jet 2 pt
+ TH2 *fHistDeltaPtvsDistance; //!delta pt between matched jets vs distance
+ TH2 *fHistDeltaPtvsCommonEnergy1; //!delta pt between matched jets vs common energy 1 (%)
+ TH2 *fHistDeltaPtvsCommonEnergy2; //!delta pt between matched jets vs common energy 2 (%)
+ TH2 *fHistDeltaPtvsArea1; //!delta pt between matched jets vs jet 1 area
+ TH2 *fHistDeltaPtvsArea2; //!delta pt between matched jets vs jet 2 area
+ TH2 *fHistDeltaPtvsDeltaArea; //!delta pt between matched jets vs delta area
+ TH2 *fHistJet1PtvsJet2Pt; //!correlation jet 1 pt vs jet 2 pt
+
+ TH2 *fHistDeltaCorrPtOverJet1CorrPtvsJet1CorrPt;//!delta pt corr / jet 1 corr pt between matched jets vs jet 1 corr pt
+ TH2 *fHistDeltaCorrPtOverJet2CorrPtvsJet2CorrPt;//!delta pt corr / jet 2 corr pt between matched jets vs jet 2 corr pt
+ TH2 *fHistDeltaCorrPtvsJet1CorrPt; //!delta pt corr between matched jets vs jet 1 corr pt
+ TH2 *fHistDeltaCorrPtvsJet2CorrPt; //!delta pt corr between matched jets vs jet 2 corr pt
+ TH2 *fHistDeltaCorrPtvsDistance; //!delta pt corr between matched jets vs distance
+ TH2 *fHistDeltaCorrPtvsCommonEnergy1; //!delta pt corr between matched jets vs common energy 1 (%)
+ TH2 *fHistDeltaCorrPtvsCommonEnergy2; //!delta pt corr between matched jets vs common energy 2 (%)
+ TH2 *fHistDeltaCorrPtvsArea1; //!delta pt corr between matched jets vs jet 1 area
+ TH2 *fHistDeltaCorrPtvsArea2; //!delta pt corr between matched jets vs jet 2 area
+ TH2 *fHistDeltaCorrPtvsDeltaArea; //!delta pt corr between matched jets vs delta area
+ TH2 *fHistJet1CorrPtvsJet2CorrPt; //!correlation jet 1 corr pt vs jet 2 corr pt
- TString fMCTracksName; // name of MC particle collection
- TString fMCJetsName; // name of MC jet collection
- Double_t fMaxDistance; // maximum distance between matched particle and detector level jets
- Bool_t fDoWeighting; // = true, weight using trials and given x section
- Bool_t fEventWeightHist; // = true create event weight histogram
- Bool_t fMCFiducial; // = true MC jets in fiducial acceptance
- Double_t fMCminEta; // MC jets minimum eta
- Double_t fMCmaxEta; // MC jets maximum eta
- Double_t fMCminPhi; // MC jets minimum phi
- Double_t fMCmaxPhi; // MC jets maximum phi
- Int_t fSelectPtHardBin; // select one pt hard bin for analysis
- Bool_t fDoMatching; // whether or not it should run the matching between MC and rec jets
-
- AliGenPythiaEventHeader *fPythiaHeader; //!event Pythia header
- Double_t fEventWeight; //!event weight
- Int_t fPtHardBin; //!event pt hard bin
- Int_t fNTrials; //!event trials
- TClonesArray *fMCTracks; //!MC particles
- TClonesArray *fMCJets; //!MC jets
- // General histograms
- TH1F *fHistNTrials; //!total number of trials per pt hard bin
- TH1F *fHistEvents; //!total number of events per pt hard bin
- TH1F *fHistEventWeight[11]; //!event weight
- // Particle level jets
- TH2F *fHistMCJetPhiEta; //!phi-eta distribution of jets
- TH1F *fHistMCJetsPt; //!inclusive jet pt spectrum
- TH2F *fHistMCJetPhiEtaFiducial; //!phi-eta distribution of jets in fiducial acceptance (plus lead hadron bias)
- TH1F *fHistMCJetsPtFiducial; //!inclusive jet pt spectrum in fiducial acceptance (plus lead hadron bias)
- TH2F *fHistMCJetsNEFvsPt; //!jet neutral energy fraction vs. jet pt
- TH2F *fHistMCJetsZvsPt; //!constituent Pt over Jet Pt ratio vs. jet pt
- // Detector level jets
- TH2F *fHistJetPhiEta; //!phi-eta distribution of jets
- TH1F *fHistJetsPt; //!inclusive jet pt spectrum
- TH2F *fHistJetsNEFvsPt; //!jet neutral energy fraction vs. jet pt
- TH2F *fHistJetsZvsPt; //!constituent Pt over Jet Pt ratio vs. jet pt
- // Detector-particle level matching
- TH1F *fHistClosestDistance; //!distance between closest particle to detector level jet
- TH1F *fHistClosestDeltaPhi; //!delta phi between closest particle to detector level jet
- TH1F *fHistClosestDeltaEta; //!delta eta between closest particle to detector level jet
- TH1F *fHistClosestDeltaPt; //!delta pt between closest particle to detector level jet
- TH1F *fHistNonMatchedMCJetPt; //!non-matched mc jet pt distribution
- TH1F *fHistNonMatchedJetPt; //!non-matched jet pt distribution
- TH2F *fHistPartvsDetecPt; //!particle vs detector level jet pt
- TH1F *fHistMissedMCJets; //!mc jets not measured
+ TH2 *fHistDeltaMCPtOverJet1MCPtvsJet1MCPt; //!jet 1 MC pt - jet2 pt / jet 1 MC pt vs jet 1 pt
+ TH2 *fHistDeltaMCPtOverJet2PtvsJet2Pt; //!jet 1 MC pt - jet2 pt / jet 2 pt vs jet 2 pt
+ TH2 *fHistDeltaMCPtvsJet1MCPt; //!jet 1 MC pt - jet2 pt vs jet 1 MC pt
+ TH2 *fHistDeltaMCPtvsJet2Pt; //!jet 1 MC pt - jet2 pt vs jet 2 pt
+ TH2 *fHistDeltaMCPtvsDistance; //!jet 1 MC pt - jet2 pt vs distance
+ TH2 *fHistDeltaMCPtvsCommonEnergy1; //!jet 1 MC pt - jet2 pt vs common energy 1 (%)
+ TH2 *fHistDeltaMCPtvsCommonEnergy2; //!jet 1 MC pt - jet2 pt vs common energy 2 (%)
+ TH2 *fHistDeltaMCPtvsArea1; //!jet 1 MC pt - jet2 pt vs jet 1 area
+ TH2 *fHistDeltaMCPtvsArea2; //!jet 1 MC pt - jet2 pt vs jet 2 area
+ TH2 *fHistDeltaMCPtvsDeltaArea; //!jet 1 MC pt - jet2 pt vs delta area
+ TH2 *fHistJet1MCPtvsJet2Pt; //!correlation jet 1 MC pt vs jet 2 pt
private:
AliJetResponseMaker(const AliJetResponseMaker&); // not implemented
AliJetResponseMaker &operator=(const AliJetResponseMaker&); // not implemented
- ClassDef(AliJetResponseMaker, 8) // Jet response matrix producing task
+ ClassDef(AliJetResponseMaker, 24) // Jet response matrix producing task
};
#endif