20 |
|
#include "Geometry/Records/interface/CaloGeometryRecord.h" |
21 |
|
#include "DataFormats/Math/interface/deltaPhi.h" |
22 |
|
|
23 |
< |
// Jet and vertex functions |
23 |
> |
// Libraries for objects |
24 |
|
#include "DataFormats/JetReco/interface/CaloJet.h" |
25 |
|
#include "DataFormats/JetReco/interface/CaloJetCollection.h" |
26 |
|
#include "DataFormats/JetReco/interface/PFJet.h" |
31 |
|
#include "DataFormats/VertexReco/interface/Vertex.h" |
32 |
|
#include "DataFormats/VertexReco/interface/VertexFwd.h" |
33 |
|
#include "DataFormats/BTauReco/interface/JetTag.h" |
34 |
+ |
#include "DataFormats/TrackReco/interface/Track.h" |
35 |
|
//#include "RecoVertex/PrimaryVertexProducer/interface/VertexHigherPtSquared.h" |
36 |
|
|
37 |
|
//GenParticles |
51 |
|
|
52 |
|
//Root stuff |
53 |
|
#include "TROOT.h" |
54 |
+ |
#include "TH1.h" |
55 |
+ |
#include "TProfile.h" |
56 |
|
#include "TFile.h" |
57 |
|
#include "TTree.h" |
58 |
|
#include "TString.h" |
115 |
|
vector<string> hlNames; |
116 |
|
unsigned int triggerStatus; |
117 |
|
|
118 |
+ |
//Histograms |
119 |
+ |
TH1F * h1_trackZ; |
120 |
+ |
TProfile * p1_nVtcs; |
121 |
+ |
|
122 |
+ |
|
123 |
|
|
124 |
|
}; |
125 |
|
|
166 |
|
void MPIntuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) |
167 |
|
{ |
168 |
|
|
169 |
+ |
|
170 |
|
eventNumber = iEvent.id().event(); |
171 |
|
runNumber = iEvent.id().run(); |
172 |
|
lumiSection = (unsigned int)iEvent.getLuminosityBlock().luminosityBlock(); |
189 |
|
const reco::JetTagCollection & bTags2 = *(bTagHandle2.product()); |
190 |
|
reco::JetTagCollection::const_iterator jet_it_2; |
191 |
|
|
192 |
+ |
|
193 |
|
const JetCorrector* correctorL2 = JetCorrector::getJetCorrector ("ak5PFL2Relative",iSetup); |
194 |
|
const JetCorrector* correctorL3 = JetCorrector::getJetCorrector ("ak5PFL3Absolute",iSetup); |
195 |
|
|
201 |
|
for(PFJetCollection::const_iterator jet_iter = PFJets->begin(); jet_iter!= PFJets->end(); ++jet_iter){ |
202 |
|
|
203 |
|
reco::PFJet myJet = reco::PFJet(*jet_iter); |
194 |
– |
|
195 |
– |
// float scale2 = correctorL2->correction(myJet); |
196 |
– |
// float scale3 = correctorL3->correction(myJet); |
197 |
– |
|
204 |
|
if(myJet.et() > 5){ |
205 |
|
|
206 |
|
for(jet_it_1 = bTags1.begin(); jet_it_1 != bTags1.end(); jet_it_1++) { |
214 |
|
TCJet* jetCon = new ((*jet_ak5PF)[PFcount]) TCJet; |
215 |
|
|
216 |
|
jetCon->SetP4(myJet.px(), myJet.py(), myJet.pz(), myJet.energy()); |
217 |
< |
jetCon->SetVtx(myJet.vx(), myJet.vy(), myJet.vz()); |
217 |
> |
jetCon->SetVtx(-999.0, -999.0, -999.0); |
218 |
|
|
219 |
|
jetCon->SetChHadFrac(myJet.chargedHadronEnergyFraction()); |
220 |
|
jetCon->SetNeuHadFrac(myJet.neutralHadronEnergyFraction()); |
239 |
|
jetCon->SetJetCorr(2, scale2); |
240 |
|
jetCon->SetJetCorr(3, scale3); |
241 |
|
|
242 |
+ |
//get associated tracks |
243 |
+ |
|
244 |
+ |
const reco::TrackRefVector &tracks = myJet.getTrackRefs(); |
245 |
+ |
|
246 |
+ |
float sumTrackZ = 0; |
247 |
+ |
float meanTrackZ = -999; |
248 |
+ |
int nAssociatedTracks = 0; |
249 |
+ |
|
250 |
+ |
if(myJet.pt() > 5){ |
251 |
+ |
|
252 |
+ |
for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){ |
253 |
+ |
|
254 |
+ |
const reco::Track& myTrack = **iTrack; |
255 |
+ |
|
256 |
+ |
sumTrackZ += myTrack.vz(); |
257 |
+ |
++nAssociatedTracks; |
258 |
+ |
|
259 |
+ |
} |
260 |
+ |
|
261 |
+ |
meanTrackZ = sumTrackZ/nAssociatedTracks; |
262 |
+ |
|
263 |
+ |
for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){ |
264 |
+ |
|
265 |
+ |
const reco::Track& myTrack = **iTrack; |
266 |
+ |
|
267 |
+ |
h1_trackZ->Fill(meanTrackZ - myTrack.vz()); |
268 |
+ |
|
269 |
+ |
} |
270 |
+ |
|
271 |
+ |
} |
272 |
+ |
|
273 |
+ |
jetCon->SetVtx(0, 0, meanTrackZ); |
274 |
+ |
|
275 |
|
++PFcount; |
276 |
|
} |
277 |
|
} |
317 |
|
|
318 |
|
} |
319 |
|
|
320 |
+ |
p1_nVtcs->Fill(runNumber, Vtxcount); |
321 |
|
|
322 |
|
if(triggerHLT_){ |
323 |
|
|
354 |
|
} |
355 |
|
} |
356 |
|
// cout<< "total status: "<<hex<<triggerStatus<<endl; |
357 |
< |
|
358 |
< |
if((PFcount > 3 || Gencount > 3) && Vtxcount > 0) sTree -> Fill(); |
359 |
< |
|
357 |
> |
|
358 |
> |
|
359 |
> |
|
360 |
> |
if((PFcount > 3 || Gencount > 3) && Vtxcount > 0) sTree -> Fill(); |
361 |
> |
|
362 |
|
jet_ak5PF->Clear(); |
363 |
|
primaryVtx->Clear(); |
364 |
|
jetP4_ak5Gen->Clear(); |
372 |
|
|
373 |
|
ntupleFile = new TFile(rootfilename.c_str(), "RECREATE"); |
374 |
|
sTree = new TTree("mpiTree", "Tree for Jets"); |
375 |
< |
|
375 |
> |
|
376 |
> |
h1_trackZ = new TH1F("h1_trackZ", "#Delta z for associated tracks", 50, -0.2, 0.2); |
377 |
> |
p1_nVtcs = new TProfile("p1_nVtcs", "<N> per run", 5200.0, 132300.0, 137500.0, 0.0, 6.0); |
378 |
> |
|
379 |
|
jet_ak5PF = new TClonesArray("TCJet"); |
380 |
|
jetP4_ak5Gen = new TClonesArray("TLorentzVector"); |
381 |
|
primaryVtx = new TClonesArray("TCPrimaryVtx"); |
382 |
|
|
383 |
+ |
|
384 |
|
sTree->Branch("jet_ak5PF",&jet_ak5PF, 6400, 0); |
385 |
|
sTree->Branch("jetP4_ak5Gen",&jetP4_ak5Gen, 6400, 0); |
386 |
|
sTree->Branch("primaryVtx",&primaryVtx, 6400, 0); |
397 |
|
// ------------ method called once each job just after ending the event loop ------------ |
398 |
|
void MPIntuple::endJob() |
399 |
|
{ |
400 |
+ |
|
401 |
+ |
h1_trackZ->Write(); |
402 |
+ |
p1_nVtcs->Write(); |
403 |
+ |
|
404 |
|
ntupleFile->Write(); |
405 |
|
ntupleFile->Close(); |
406 |
|
|