33 |
|
#include "DataFormats/BTauReco/interface/JetTag.h" |
34 |
|
#include "DataFormats/TrackReco/interface/Track.h" |
35 |
|
#include "DataFormats/BeamSpot/interface/BeamSpot.h" |
36 |
+ |
#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" |
37 |
+ |
|
38 |
|
//#include "RecoVertex/PrimaryVertexProducer/interface/VertexHigherPtSquared.h" |
39 |
|
|
40 |
|
//GenParticles |
98 |
|
// Counting variables // |
99 |
|
|
100 |
|
int eventNumber, runNumber, lumiSection, bunchCross; |
101 |
< |
|
101 |
> |
double ptHat, qScale; |
102 |
> |
|
103 |
|
TTree* sTree; |
104 |
|
TFile* ntupleFile; |
105 |
|
|
130 |
|
TProfile * p1_nVtcs; |
131 |
|
|
132 |
|
|
130 |
– |
|
133 |
|
}; |
134 |
|
|
135 |
< |
MPIntuple::MPIntuple(const edm::ParameterSet& iConfig): |
134 |
< |
|
135 |
< |
PFJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag")), |
136 |
< |
GenJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("GenJetTag")), |
137 |
< |
PrimaryVtxHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PrimaryVtxTag")), |
138 |
< |
doGenJets_(iConfig.getUntrackedParameter<bool>("doGenJets")), |
139 |
< |
doPFJets_(iConfig.getUntrackedParameter<bool>("doPFJets")), |
140 |
< |
triggerHLT_(iConfig.getUntrackedParameter<bool>("triggerHLT")), |
141 |
< |
rootfilename(iConfig.getUntrackedParameter<string>("rootfilename")), |
142 |
< |
hlTriggerResults_(iConfig.getUntrackedParameter<string>("HLTriggerResults","TriggerResults")), |
143 |
< |
hltName_(iConfig.getUntrackedParameter<string>("hltName","HLT")) |
135 |
> |
MPIntuple::MPIntuple(const edm::ParameterSet& iConfig) |
136 |
|
{ |
137 |
+ |
PFJetHandle_ = iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag"); |
138 |
+ |
GenJetHandle_ = iConfig.getUntrackedParameter<edm::InputTag>("GenJetTag"); |
139 |
+ |
PrimaryVtxHandle_ = iConfig.getUntrackedParameter<edm::InputTag>("PrimaryVtxTag"); |
140 |
+ |
doGenJets_ = iConfig.getUntrackedParameter<bool>("doGenJets"); |
141 |
+ |
doPFJets_ = iConfig.getUntrackedParameter<bool>("doPFJets"); |
142 |
+ |
triggerHLT_ = iConfig.getUntrackedParameter<bool>("triggerHLT"); |
143 |
+ |
rootfilename = iConfig.getUntrackedParameter<string>("rootfilename"); |
144 |
+ |
hlTriggerResults_ = iConfig.getUntrackedParameter<string>("HLTriggerResults","TriggerResults"); |
145 |
+ |
hltName_ = iConfig.getUntrackedParameter<string>("hltName","HLT"); |
146 |
|
} |
147 |
|
|
148 |
|
MPIntuple::~MPIntuple() |
158 |
|
void MPIntuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) |
159 |
|
{ |
160 |
|
|
160 |
– |
|
161 |
|
eventNumber = iEvent.id().event(); |
162 |
|
runNumber = iEvent.id().run(); |
163 |
|
lumiSection = (unsigned int)iEvent.getLuminosityBlock().luminosityBlock(); |
164 |
|
bunchCross = (unsigned int)iEvent.bunchCrossing(); |
165 |
|
isRealData = iEvent.isRealData(); |
166 |
|
|
167 |
+ |
|
168 |
|
edm::Handle<reco::BeamSpot> beamSpotHandle; |
169 |
|
iEvent.getByLabel("offlineBeamSpot", beamSpotHandle); |
170 |
|
reco::BeamSpot vertexBeamSpot = *beamSpotHandle; |
188 |
|
if(!myVtx.isValid() || myVtx.isFake()) continue; |
189 |
|
TCPrimaryVtx* vtxCon = new ((*primaryVtx)[vtxCount]) TCPrimaryVtx; |
190 |
|
|
191 |
+ |
cout<<myVtx.nTracks()<<endl; |
192 |
+ |
|
193 |
|
vtxCon->SetPosition(myVtx.x(), myVtx.y(), myVtx.z()); |
194 |
|
vtxCon->SetNDof(myVtx.ndof()); |
195 |
|
vtxCon->SetChi2(myVtx.chi2()); |
276 |
|
|
277 |
|
float sumTrackZ, sumTrackIP; |
278 |
|
float meanTrackZ, meanTrackIP; |
279 |
< |
int nAssociatedTracks = 0; |
279 |
> |
int nAssociatedTracks = -1; |
280 |
> |
|
281 |
> |
sumTrackZ = sumTrackIP = 0; |
282 |
> |
meanTrackZ = meanTrackIP = -999; |
283 |
|
|
284 |
< |
sumTrackZ = sumTrackIP = 0; |
279 |
< |
meanTrackZ = meanTrackIP = -999; |
284 |
> |
if(myJet.pt() > 20 && fabs(myJet.eta()) < 2.4){ |
285 |
|
|
286 |
< |
if(myJet.pt() > 20){ |
286 |
> |
nAssociatedTracks = 0; |
287 |
|
|
288 |
|
for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){ |
289 |
|
|
290 |
< |
const reco::Track& myTrack = **iTrack; |
291 |
< |
|
292 |
< |
sumTrackZ += myTrack.vz(); |
293 |
< |
sumTrackIP += myTrack.dxy(vertexBeamSpot.position()); |
290 |
> |
const reco::Track &myJetTrack = **iTrack; |
291 |
> |
//const reco::TrackRef &myTrackRef = *iTrack; |
292 |
> |
|
293 |
> |
sumTrackZ += myJetTrack.vz(); |
294 |
> |
sumTrackIP += myJetTrack.dxy(vertexBeamSpot.position()); |
295 |
|
++nAssociatedTracks; |
296 |
< |
|
296 |
> |
|
297 |
> |
for(VertexCollection::const_iterator vtx_iter = primaryVtcs->begin(); vtx_iter!= primaryVtcs->end(); ++vtx_iter){ |
298 |
> |
|
299 |
> |
reco::Vertex myVtx = reco::Vertex(*vtx_iter); |
300 |
> |
if(!myVtx.isValid() || myVtx.isFake()) continue; |
301 |
> |
|
302 |
> |
for(Vertex::trackRef_iterator iTrackRef = myVtx.tracks_begin(); iTrackRef != myVtx.tracks_end(); ++iTrackRef){ |
303 |
> |
const edm::RefToBase<reco::Track> &myTrackRef = *iTrackRef; |
304 |
> |
|
305 |
> |
if(myTrackRef.isAvailable()){ |
306 |
> |
|
307 |
> |
const reco::Track &myVertexTrack = *myTrackRef.get(); |
308 |
> |
|
309 |
> |
cout<<"Vertex track z = "<<myVertexTrack.vz()<<endl; |
310 |
> |
cout<<"Jet track z = "<<myJetTrack.vz()<<endl; |
311 |
> |
|
312 |
> |
} |
313 |
> |
} |
314 |
> |
} |
315 |
|
} |
316 |
|
|
317 |
|
meanTrackZ = sumTrackZ/nAssociatedTracks; |
318 |
|
h1_nAssociatedTracks->Fill(nAssociatedTracks); |
319 |
< |
h2_nAssTracksVsJetPt->Fill(nAssociatedTracks, myJet.pt()); |
319 |
> |
h2_nAssTracksVsJetPt->Fill(myJet.pt(), nAssociatedTracks); |
320 |
|
|
321 |
|
for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){ |
322 |
|
|
323 |
< |
const reco::Track& myTrack = **iTrack; |
323 |
> |
const reco::Track &myJetTrack = **iTrack; |
324 |
|
|
325 |
< |
h1_trackZ->Fill(meanTrackZ - myTrack.vz()); |
326 |
< |
h1_trackDxy->Fill(myTrack.dxy(vertexBeamSpot.position())); |
325 |
> |
if(nAssociatedTracks == 3) h1_trackZ->Fill(meanTrackZ - myJetTrack.vz()); |
326 |
> |
h1_trackDxy->Fill(myJetTrack.dxy(vertexBeamSpot.position())); |
327 |
|
|
328 |
|
} |
329 |
|
|
350 |
|
|
351 |
|
if(!isRealData){ |
352 |
|
|
353 |
+ |
Handle<GenEventInfoProduct> GenInfoHandle; |
354 |
+ |
iEvent.getByLabel("generator", GenInfoHandle); |
355 |
+ |
|
356 |
|
Handle<reco::GenJetCollection> GenJets; |
357 |
|
iEvent.getByLabel(GenJetHandle_, GenJets); |
358 |
+ |
|
359 |
+ |
ptHat = qScale = -1; |
360 |
+ |
|
361 |
+ |
if(GenInfoHandle.isValid()){ |
362 |
+ |
|
363 |
+ |
qScale = GenInfoHandle->qScale(); |
364 |
+ |
ptHat = (GenInfoHandle->hasBinningValues() ? GenInfoHandle->binningValues()[0] : 0.0); |
365 |
+ |
|
366 |
+ |
} |
367 |
|
|
368 |
|
for(GenJetCollection::const_iterator jet_iter = GenJets->begin(); jet_iter!= GenJets->end(); ++jet_iter){ |
369 |
|
|
416 |
|
} |
417 |
|
} |
418 |
|
//cout<< "total status: "<<hex<<triggerStatus<<endl; |
419 |
< |
|
419 |
> |
|
420 |
|
|
421 |
|
|
422 |
|
if((pfCount > 3 || genCount > 3) && vtxCount > 0) sTree -> Fill(); |
440 |
|
h1_trackDxy = new TH1F("h1_trackDxy", "dxy for all associated tracks", 50, -0.4, 0.4); |
441 |
|
h1_allTrackDeltaZ_PV = new TH1F("h1_allTrackDeltaZ_PV", "#Delta z between jet and primary vertex", 60, -0.3, 0.3); |
442 |
|
h1_allTrackDeltaZ_LJ = new TH1F("h1_allTrackDeltaZ_LJ", "#Delta z between leading jet and other jet vertices", 60, -0.3, 0.3); |
443 |
< |
h2_nAssTracksVsJetPt = new TH2F("h2_nAssTracksVsJetPt", "nTracks vs Jet p_{T}", 20, -0.5, 19.5, 50, 0, 100); |
443 |
> |
h2_nAssTracksVsJetPt = new TH2F("h2_nAssTracksVsJetPt", "nTracks vs Jet p_{T}", 50, 0, 100, 20, -0.5, 19.5); |
444 |
|
p1_nVtcs = new TProfile("p1_nVtcs", "<N> per run", 5200.0, 132300.0, 137500.0, 0.0, 6.0); |
445 |
|
|
446 |
|
jet_ak5PF = new TClonesArray("TCJet"); |
458 |
|
sTree->Branch("triggerStatus",&triggerStatus, "triggerStatus/i"); |
459 |
|
sTree->Branch("isRealData",&isRealData, "isRealData/i"); |
460 |
|
sTree->Branch("bunchCross",&bunchCross, "bunchCross/i"); |
461 |
+ |
sTree->Branch("ptHat",&ptHat, "ptHat/d"); |
462 |
|
|
463 |
|
} |
464 |
|
|
466 |
|
void MPIntuple::endJob() |
467 |
|
{ |
468 |
|
|
469 |
+ |
ntupleFile->cd(); |
470 |
+ |
|
471 |
|
h1_trackZ->Write(); |
472 |
|
h1_nAssociatedTracks->Write(); |
473 |
|
h1_trackDxy->Write(); |