ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/src/HistosJets.cc
Revision: 1.13
Committed: Tue Feb 9 14:52:25 2010 UTC (15 years, 3 months ago) by amagnan
Content type: text/plain
Branch: MAIN
CVS Tags: v00-05-00, HbbAnaFor35X, v00-04-02, v00-04-01, v00-04-00
Changes since 1.12: +1 -1 lines
Log Message:
export code to CMSSW_3_4_X

File Contents

# User Rev Content
1 amagnan 1.1 #include <iostream>
2     #include <fstream>
3    
4 amagnan 1.4 #include "Math/VectorUtil.h"
5    
6 amagnan 1.1 #include "UserCode/HbbAnalysis/interface/HistosJets.hh"
7    
8     namespace HbbAnalysis {//namespace
9    
10 amagnan 1.6 void HistosJets::FillEventHistograms(const edm::Handle<std::vector<pat::Jet> >& aJetCol,
11     const JetFlavour & aFlavour){
12 amagnan 1.1
13     p_nJets->Fill(aJetCol->size());
14 amagnan 1.4 jetFlav_ = aFlavour;
15 amagnan 1.1
16     }
17    
18 amagnan 1.6
19    
20     void HistosJets::FillHistograms(const pat::Jet & aJet,
21 amagnan 1.11 const edm::Handle<reco::GenParticleCollection> & aGenParticles){//FillHistograms
22 amagnan 1.1
23 amagnan 1.7 FillBaseHistograms(aJet.pt(),aJet.eta(),aJet.phi(),aJet.charge());
24 amagnan 1.1
25     p_partonFlavour->Fill(aJet.partonFlavour());
26 amagnan 1.13 p_hasJetCorrFactors->Fill(aJet.hasCorrFactors());
27 amagnan 1.1
28     const std::vector<std::pair<std::string, float> > & lPairDiscri = aJet.getPairDiscri();
29     const unsigned int lNTags = lPairDiscri.size();
30 amagnan 1.2 if (debug_ > 1) std::cout << "numberOfTags = " << lNTags << std::endl;
31 amagnan 1.1 assert (lNTags <= 11);
32    
33 amagnan 1.9 for (unsigned int i(0); i<lNTags; i++){
34     p_bDiscriminator[i][0]->Fill(lPairDiscri.at(i).second);
35     }
36    
37    
38 amagnan 1.5 if (jetFlav_.nPartons()){//if partons found....
39    
40 amagnan 1.10 unsigned int lFlav[3] = {0,0,0};
41 amagnan 1.5 lFlav[0] = jetFlav_.partonMatchingGenJet(aJet,aGenParticles,0.4).second;
42     lFlav[1] = jetFlav_.leptonMatchingGenJet(aJet,aGenParticles,0.4);
43     lFlav[2] = jetFlav_.leptonMatchingRecoJet(aJet,aGenParticles,0.4);
44     assert (lFlav[0] < 4);
45 amagnan 1.4
46 amagnan 1.5 int lIndex = jetFlav_.partonMatchingGenJet(aJet,aGenParticles,0.4).first;
47    
48     if (lIndex != -1 && aJet.genJet()){
49 amagnan 1.4
50 amagnan 1.5 int lPartonFlav = jetFlav_.partonFlavour(lIndex);
51    
52     //fill all even if no match within 0.4 found to see the distribution
53     //referring to the first parton matched with genjet (lIndex), so it should be consistent....
54     p_dRgenjetparton[0]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.parton(aGenParticles,lIndex).p4(),aJet.genJet()->p4()));
55     p_dRrecojetparton[0]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.parton(aGenParticles,lIndex).p4(),aJet.p4()));
56     if (jetFlav_.hasStableElectron(lIndex)) {
57     p_dRgenjetlepton[0]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableElectron(aGenParticles,lIndex).p4(),aJet.genJet()->p4()));
58     p_dRrecojetlepton[0]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableElectron(aGenParticles,lIndex).p4(),aJet.p4()));
59     }
60     else if (jetFlav_.hasStableMuon(lIndex)) {
61     p_dRgenjetlepton[0]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableMuon(aGenParticles,lIndex).p4(),aJet.genJet()->p4()));
62     p_dRrecojetlepton[0]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableMuon(aGenParticles,lIndex).p4(),aJet.p4()));
63     }
64 amagnan 1.4
65 amagnan 1.5 if (lPartonFlav > 0) {
66     p_dRgenjetparton[lPartonFlav]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.parton(aGenParticles,lIndex).p4(),aJet.genJet()->p4()));
67     p_dRrecojetparton[lPartonFlav]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.parton(aGenParticles,lIndex).p4(),aJet.p4()));
68     if (jetFlav_.hasStableElectron(lIndex)) {
69     p_dRgenjetlepton[lPartonFlav]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableElectron(aGenParticles,lIndex).p4(),aJet.genJet()->p4()));
70     p_dRrecojetlepton[lPartonFlav]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableElectron(aGenParticles,lIndex).p4(),aJet.p4()));
71     }
72     else if (jetFlav_.hasStableMuon(lIndex)) {
73     p_dRgenjetlepton[lPartonFlav]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableMuon(aGenParticles,lIndex).p4(),aJet.genJet()->p4()));
74     p_dRrecojetlepton[lPartonFlav]->Fill(ROOT::Math::VectorUtil::DeltaR(jetFlav_.stableMuon(aGenParticles,lIndex).p4(),aJet.p4()));
75     }
76 amagnan 1.4 }
77 amagnan 1.5 else std::cout << "--- WARNING ! partonFlavour = " << lPartonFlav << ", should be 1, 2 or 3." << std::endl;
78 amagnan 1.4 }
79    
80    
81 amagnan 1.5 for (unsigned int i(0); i<lNTags; i++){
82     if (debug_ > 1) std::cout << "tag " << i << ", name=" << lPairDiscri.at(i).first << ",value = " << lPairDiscri.at(i).second << std::endl;
83     if (lFlav[0]){
84 amagnan 1.9 //p_bDiscriminator[i][0]->Fill(lPairDiscri.at(i).second);
85 amagnan 1.10
86 amagnan 1.5 //if matching between parton and genjet
87     //+ matching between lepton and genjet and recojet
88 amagnan 1.10 if ( ( (jetFlav_.flavourIni()>3 && jetFlav_.flavourIni()!= 21) &&
89     (lFlav[0] == 1 || (lFlav[0] > 1 && lFlav[1]>0 && lFlav[2]>0) ) ) ||
90     ( (jetFlav_.flavourIni() == 3 || jetFlav_.flavourIni()== 21) && lFlav[0]>1)
91     )
92 amagnan 1.5 p_bDiscriminator[i][lFlav[0]]->Fill(lPairDiscri.at(i).second);
93     }
94 amagnan 1.4 }
95    
96    
97 amagnan 1.5 if (lFlav[0] && aJet.genJet()){
98     p_pTgenjet[0]->Fill(aJet.genJet()->pt());
99     p_etagenjet[0]->Fill(aJet.genJet()->eta());
100     p_phigenjet[0]->Fill(aJet.genJet()->phi());
101     p_pTrecojet[0]->Fill(aJet.pt());
102     p_etarecojet[0]->Fill(aJet.eta());
103     p_phirecojet[0]->Fill(aJet.phi());
104     if (aJet.genJet()->pt() > 0) p_pTrecoOverpTgenjet[0]->Fill(aJet.pt()/aJet.genJet()->pt());
105 amagnan 1.10 if ( lFlav[0] == 1 || (lFlav[0] >1 && lFlav[1]> 0 && lFlav[2] > 0)){
106 amagnan 1.5 p_pTgenjet[lFlav[0]]->Fill(aJet.genJet()->pt());
107     p_etagenjet[lFlav[0]]->Fill(aJet.genJet()->eta());
108     p_phigenjet[lFlav[0]]->Fill(aJet.genJet()->phi());
109     p_pTrecojet[lFlav[0]]->Fill(aJet.pt());
110     p_etarecojet[lFlav[0]]->Fill(aJet.eta());
111     p_phirecojet[lFlav[0]]->Fill(aJet.phi());
112     if (aJet.genJet()->pt() > 0) p_pTrecoOverpTgenjet[lFlav[0]]->Fill(aJet.pt()/aJet.genJet()->pt());
113     }
114 amagnan 1.4 }
115    
116 amagnan 1.5 if (aJet.genJet() && fabs(aJet.genJet()->eta())<2 && aJet.genJet()->pt()>20) {
117     int binEta = static_cast<int>((aJet.genJet()->eta()+2.)/0.2);
118     int binpt;
119     if (aJet.genJet()->pt() < 100) binpt = static_cast<int>((aJet.genJet()->pt()-20)/10.);
120     else if (aJet.genJet()->pt() < 120) binpt = 8;
121     else binpt = 9;
122 amagnan 1.4
123    
124 amagnan 1.5 if (lFlav[0]){
125     p_pTrecoOverpTgenjet_vseta[0][binEta]->Fill(aJet.pt()/aJet.genJet()->pt());
126     p_pTrecoOverpTgenjet_vspt[0][binpt]->Fill(aJet.pt()/aJet.genJet()->pt());
127 amagnan 1.10 if ( lFlav[0] == 1 || (lFlav[0] >1 && lFlav[1] > 0 && lFlav[2] > 0)){
128 amagnan 1.5 p_pTrecoOverpTgenjet_vseta[lFlav[0]][binEta]->Fill(aJet.pt()/aJet.genJet()->pt());
129     p_pTrecoOverpTgenjet_vspt[lFlav[0]][binpt]->Fill(aJet.pt()/aJet.genJet()->pt());
130     }
131 amagnan 1.4 }
132     }
133 amagnan 1.5 }//if partons found
134 amagnan 1.1
135 amagnan 1.4 p_nAssociatedTracks->Fill((aJet.associatedTracks()).size());
136     p_isCaloJet->Fill(aJet.isCaloJet());
137     p_isPFJet->Fill(aJet.isPFJet());
138     p_isBasicJet->Fill(aJet.isBasicJet());
139    
140     //================== Calo Jet specific information ====================
141     if (aJet.isCaloJet()) {
142     p_maxEInEmTowers->Fill(aJet.maxEInEmTowers());
143     p_maxEInHadTowers->Fill(aJet.maxEInHadTowers());
144     p_energyFractionHadronic->Fill(aJet.energyFractionHadronic());
145     p_emEnergyFraction->Fill(aJet.emEnergyFraction());
146     p_hadEnergyInHB->Fill(aJet.hadEnergyInHB());
147     p_hadEnergyInHO->Fill(aJet.hadEnergyInHO());
148     p_hadEnergyInHE->Fill(aJet.hadEnergyInHE());
149     p_hadEnergyInHF->Fill(aJet.hadEnergyInHF());
150     p_emEnergyInEB->Fill(aJet.emEnergyInEB());
151     p_emEnergyInEE->Fill(aJet.emEnergyInEE());
152     p_emEnergyInHF->Fill(aJet.emEnergyInHF());
153     p_towersArea->Fill(aJet.towersArea());
154     p_n90->Fill(aJet.n90());
155     p_n60->Fill(aJet.n60());
156     }
157 amagnan 1.1
158 amagnan 1.4 // //================== PF Jet specific information ====================
159     if (aJet.isPFJet()){
160     p_chargedHadronEnergy->Fill(aJet.chargedHadronEnergy());
161     p_chargedHadronEnergyFraction->Fill(aJet.chargedHadronEnergyFraction());
162     p_neutralHadronEnergy->Fill(aJet.neutralHadronEnergy());
163     p_neutralHadronEnergyFraction->Fill(aJet.neutralHadronEnergyFraction());
164     p_chargedEmEnergy->Fill(aJet.chargedEmEnergy());
165     p_chargedEmEnergyFraction->Fill(aJet.chargedEmEnergyFraction());
166     p_chargedMuEnergy->Fill(aJet.chargedMuEnergy());
167     p_chargedMuEnergyFraction->Fill(aJet.chargedMuEnergyFraction());
168     p_neutralEmEnergy->Fill(aJet.neutralEmEnergy());
169     p_neutralEmEnergyFraction->Fill(aJet.neutralEmEnergyFraction());
170     p_chargedMultiplicity->Fill(aJet.chargedMultiplicity());
171     p_neutralMultiplicity->Fill(aJet.neutralMultiplicity());
172     p_muonMultiplicity->Fill(aJet.muonMultiplicity());
173     }
174 amagnan 1.1
175    
176     }//FillHistograms
177    
178     }//namespace