1 |
< |
#include "UserCode/Morgan/interface/JetAnalyzer.h" |
1 |
> |
#include "../interface/JetAnalyzer.h" |
2 |
|
|
3 |
|
using namespace std; |
4 |
|
using namespace reco; |
5 |
|
using namespace edm; |
6 |
|
|
7 |
< |
JetAnalyzer::JetAnalyzer(const edm::ParameterSet& producersNames):verbosity_(0) |
7 |
> |
JetAnalyzer::JetAnalyzer(const edm::ParameterSet& producersNames):verbosity_(0),useMC_(false) |
8 |
|
{ |
9 |
+ |
dataType_ = producersNames.getUntrackedParameter<string>("dataType","unknown"); |
10 |
|
jetProducer_ = producersNames.getParameter<edm::InputTag>("jetProducer"); |
11 |
|
} |
12 |
|
|
13 |
< |
JetAnalyzer::JetAnalyzer(const edm::ParameterSet& producersNames, int verbosity):verbosity_(verbosity) |
13 |
> |
JetAnalyzer::JetAnalyzer(const edm::ParameterSet& producersNames, int verbosity):verbosity_(verbosity),useMC_(false) |
14 |
|
{ |
15 |
+ |
dataType_ = producersNames.getUntrackedParameter<string>("dataType","unknown"); |
16 |
|
jetProducer_ = producersNames.getParameter<edm::InputTag>("jetProducer"); |
17 |
|
} |
18 |
|
|
19 |
+ |
JetAnalyzer::JetAnalyzer(const edm::ParameterSet& producersNames, const edm::ParameterSet& myConfig, int verbosity):verbosity_(verbosity) |
20 |
+ |
{ |
21 |
+ |
dataType_ = producersNames.getUntrackedParameter<string>("dataType","unknown"); |
22 |
+ |
jetProducer_ = producersNames.getParameter<edm::InputTag>("jetProducer"); |
23 |
+ |
useMC_ = myConfig.getParameter<bool>("doMC"); |
24 |
+ |
} |
25 |
+ |
|
26 |
|
JetAnalyzer::~JetAnalyzer() |
27 |
|
{ |
28 |
|
} |
29 |
|
|
30 |
+ |
bool Rsortrule (std::pair <double,double> p1, std::pair <double,double> p2 ) { |
31 |
+ |
return p1.second<p2.second; |
32 |
+ |
} |
33 |
+ |
|
34 |
|
void JetAnalyzer::Process(const edm::Event& iEvent, TClonesArray* rootJets) |
35 |
|
{ |
36 |
|
|
37 |
< |
edm::Handle< reco::CaloJetCollection > recoJets; |
38 |
< |
iEvent.getByLabel(jetProducer_, recoJets); |
39 |
< |
if(verbosity_>1) std::cout << " Number of jets = " << recoJets->size() << " Label: " << jetProducer_.label() << " Instance: " << jetProducer_.instance() << std::endl; |
40 |
< |
for (unsigned int j=0; j<recoJets->size(); j++) |
37 |
> |
edm::Handle< vector< pat::Jet > > recoJets; |
38 |
> |
iEvent.getByLabel(jetProducer_, recoJets); |
39 |
> |
if(verbosity_>1) std::cout <<" Number of jets = "<< recoJets->size()<< " Label: "<<jetProducer_.label()<<" Instance: "<<jetProducer_.instance()<<std::endl; |
40 |
> |
for (unsigned int j=0; j<recoJets->size(); j++) |
41 |
> |
{ |
42 |
> |
TRootJet localJet(TLorentzVector( (*recoJets)[j].px(),(*recoJets)[j].py(),(*recoJets)[j].pz(),(*recoJets)[j].energy() ) , |
43 |
> |
TVector3( (*recoJets)[j].vx() ,(*recoJets)[j].vy() ,(*recoJets)[j].vz() ), |
44 |
> |
abs((*recoJets)[j].pdgId()), |
45 |
> |
(*recoJets)[j].charge() |
46 |
> |
// (*recoJets)[j].genJet() |
47 |
> |
); |
48 |
> |
localJet.setBtag_trackCountingHighEff((*recoJets)[j].bDiscriminator("trackCountingHighEffBJetTags")); |
49 |
> |
localJet.setBtag_trackCountingHighPur((*recoJets)[j].bDiscriminator("trackCountingHighPurBJetTags")); |
50 |
> |
localJet.setBtag_jetProbability((*recoJets)[j].bDiscriminator("jetProbabilityBJetTags")); |
51 |
> |
|
52 |
> |
reco::TrackRefVector tracks = (*recoJets)[j].associatedTracks() ; |
53 |
> |
Float_t pTrackerTot = 0; |
54 |
> |
Float_t ptTrackerTot = 0; |
55 |
> |
// Float_t eTrackerTot = 0; |
56 |
> |
Float_t pTrackerCone01 = 0; |
57 |
> |
Float_t pTrackerCone02 = 0; |
58 |
> |
Float_t pTrackerCone03 = 0; |
59 |
> |
Float_t pTrackerCone04 = 0; |
60 |
> |
Float_t pTrackerCone05 = 0; |
61 |
> |
vector < pair < Float_t , Float_t > > tracksVPair ; |
62 |
> |
pair < Float_t , Float_t > tracksPair; |
63 |
> |
for(unsigned int iTracks = 0; iTracks< (*recoJets)[j].associatedTracks().size() ; iTracks ++) |
64 |
|
{ |
65 |
< |
TRootJet localJet( |
66 |
< |
(*recoJets)[j].px() |
67 |
< |
,(*recoJets)[j].py() |
68 |
< |
,(*recoJets)[j].pz() |
69 |
< |
,(*recoJets)[j].energy() |
70 |
< |
); |
71 |
< |
|
72 |
< |
Float_t anotherInterestingVariable = 999.; |
73 |
< |
localJet.setDummy(anotherInterestingVariable); |
74 |
< |
new( (*rootJets)[j] ) TRootJet(localJet); |
75 |
< |
if(verbosity_>2) cout << " ["<< setw(3) << j << "] " << localJet << endl; |
65 |
> |
// Float_t buzz = tracks[iTracks]->p(); |
66 |
> |
pTrackerTot += tracks[iTracks]->p(); |
67 |
> |
ptTrackerTot += tracks[iTracks]->pt(); |
68 |
> |
tracksPair.first = tracks[iTracks]->p(); |
69 |
> |
tracksPair.second = localJet.DeltaR(TLorentzVector(tracks[iTracks]->px(),tracks[iTracks]->py(),tracks[iTracks]->pz(),0)) ; |
70 |
> |
tracksVPair.push_back(tracksPair); |
71 |
> |
// eTrackerTot += tracks[iTracks]->energy(); |
72 |
> |
if(localJet.DeltaR(TLorentzVector(tracks[iTracks]->px(),tracks[iTracks]->py(),tracks[iTracks]->pz(),0)) < 0.5) |
73 |
> |
{ |
74 |
> |
pTrackerCone05 += tracks[iTracks]->p(); |
75 |
> |
if(localJet.DeltaR(TLorentzVector(tracks[iTracks]->px(),tracks[iTracks]->py(),tracks[iTracks]->pz(),0)) < 0.4) |
76 |
> |
{ |
77 |
> |
pTrackerCone04 += tracks[iTracks]->p(); |
78 |
> |
if(localJet.DeltaR(TLorentzVector(tracks[iTracks]->px(),tracks[iTracks]->py(),tracks[iTracks]->pz(),0)) < 0.3) |
79 |
> |
{ |
80 |
> |
pTrackerCone03 += tracks[iTracks]->p(); |
81 |
> |
if(localJet.DeltaR(TLorentzVector(tracks[iTracks]->px(),tracks[iTracks]->py(),tracks[iTracks]->pz(),0)) < 0.2) |
82 |
> |
{ |
83 |
> |
pTrackerCone02 += tracks[iTracks]->p(); |
84 |
> |
if(localJet.DeltaR(TLorentzVector(tracks[iTracks]->px(),tracks[iTracks]->py(),tracks[iTracks]->pz(),0)) < 0.1) |
85 |
> |
{ |
86 |
> |
pTrackerCone01 += tracks[iTracks]->p(); |
87 |
> |
} |
88 |
> |
} |
89 |
> |
} |
90 |
> |
} |
91 |
> |
} |
92 |
|
} |
93 |
+ |
sort(tracksVPair.begin(),tracksVPair.end(), Rsortrule); |
94 |
+ |
Float_t Rmin = 0; |
95 |
+ |
Float_t pDummy = 0; |
96 |
+ |
for(std::vector<std::pair< Float_t,Float_t > >::iterator i = tracksVPair.begin(); i !=tracksVPair.end(); i++) { |
97 |
+ |
pDummy+=(*i).first; |
98 |
+ |
if (pDummy>0.75*(pTrackerTot)) { |
99 |
+ |
Rmin = (*i).second; |
100 |
+ |
break; |
101 |
+ |
} |
102 |
+ |
} |
103 |
+ |
if (Rmin<1e-5) {Rmin=0.;} |
104 |
+ |
|
105 |
+ |
localJet.setBroadness(Rmin); |
106 |
+ |
localJet.setBroadnessDeltaR01(pTrackerCone01/pTrackerTot); |
107 |
+ |
localJet.setBroadnessDeltaR02(pTrackerCone02/pTrackerTot); |
108 |
+ |
localJet.setBroadnessDeltaR03(pTrackerCone03/pTrackerTot); |
109 |
+ |
localJet.setBroadnessDeltaR04(pTrackerCone04/pTrackerTot); |
110 |
+ |
localJet.setBroadnessDeltaR05(pTrackerCone05/pTrackerTot); |
111 |
+ |
localJet.setChargedPt(ptTrackerTot); |
112 |
+ |
localJet.setPartonFlavour((*recoJets)[j].partonFlavour()); |
113 |
+ |
localJet.setCorrB((*recoJets)[j].correctionFactor(pat::Jet::bCorrection)); |
114 |
+ |
localJet.setCorrC((*recoJets)[j].correctionFactor(pat::Jet::cCorrection)); |
115 |
+ |
localJet.setCorrUDS((*recoJets)[j].correctionFactor(pat::Jet::udsCorrection)); |
116 |
+ |
localJet.setCorrGlu((*recoJets)[j].correctionFactor(pat::Jet::gCorrection)); |
117 |
+ |
localJet.setN90((*recoJets)[j].n90()); |
118 |
+ |
|
119 |
+ |
// we still need to implemente the matching or the referencing of the MC part of the Jet see the boolean "useMC_" |
120 |
+ |
|
121 |
+ |
if((*recoJets)[j].isCaloJet()) { |
122 |
+ |
// do anything related to a CaloJet |
123 |
+ |
localJet.setJetType(1); |
124 |
+ |
localJet.setEcalEnergy((*recoJets)[j].emEnergyFraction()); |
125 |
+ |
localJet.setHcalEnergy((*recoJets)[j].energyFractionHadronic()); |
126 |
+ |
localJet.setChargedEnergy(pTrackerTot); |
127 |
+ |
localJet.setChargedMultiplicity((*recoJets)[j].associatedTracks().size()) ; |
128 |
+ |
localJet.setNeutralMultiplicity((*recoJets)[j].getCaloConstituents().size()) ; |
129 |
+ |
} |
130 |
+ |
if((*recoJets)[j].isPFJet()) { |
131 |
+ |
// do anything related to a PFJet |
132 |
+ |
localJet.setJetType(2); |
133 |
+ |
localJet.setEcalEnergy((*recoJets)[j].chargedEmEnergyFraction() + (*recoJets)[j].neutralEmEnergyFraction()); |
134 |
+ |
localJet.setHcalEnergy((*recoJets)[j].chargedHadronEnergyFraction() + (*recoJets)[j].neutralHadronEnergyFraction()); |
135 |
+ |
localJet.setChargedEnergy((*recoJets)[j].chargedEmEnergy() + (*recoJets)[j].chargedHadronEnergy() + (*recoJets)[j].chargedMuEnergy() ); |
136 |
+ |
localJet.setChargedMultiplicity((int)(*recoJets)[j].chargedMultiplicity()) ; |
137 |
+ |
localJet.setNeutralMultiplicity((int)(*recoJets)[j].neutralMultiplicity()) ; |
138 |
+ |
} |
139 |
+ |
// if it is neither CaloJet nor PFJet we are bad |
140 |
+ |
new( (*rootJets)[j] ) TRootJet(localJet); |
141 |
+ |
if(verbosity_>2) cout << " ["<< setw(3) << j << "] " << localJet << endl; |
142 |
+ |
} |
143 |
|
|
144 |
|
} |