100 #include "TObjString.h"
104 #include "TProfile.h"
109 #include <ext/hash_map>
113 using namespace reco;
115 using namespace __gnu_cxx;
117 #define MAX_VERTICES 1000
118 #define MAX_HSCPS 10000
119 #define MAX_GENS 10000
120 #define MAX_ECALCRYS 10
131 virtual void endJob() ;
143 bool Event_triggerL1Bits[192];
144 bool Event_triggerHLTBits[128];
145 bool Event_technicalBits[64];
272 std::cout <<
"######################################################" << endl;
273 std::cout <<
" USE OF THE HSCPTreeBuilder is deprecated! " << endl;
274 std::cout <<
"better to use the HSCParticle Producer and then FWLite" << endl;
275 std::cout <<
"######################################################" << endl;
287 TTree::SetMaxTreeSize(1000*Long64_t(2000000000));
288 MyTree = tfs->make<TTree> (
"HscpTree",
"HscpTree");
290 MyTree->Branch(
"Event_EventNumber" ,&Event_EventNumber ,
"Event_EventNumber/i");
291 MyTree->Branch(
"Event_RunNumber" ,&Event_RunNumber ,
"Event_RunNumber/i");
292 MyTree->Branch(
"Event_LumiSection" ,&Event_LumiSection ,
"Event_LumiSection/i");
293 MyTree->Branch(
"Event_BXCrossing" ,&Event_BXCrossing ,
"Event_BXCrossing/i");
294 MyTree->Branch(
"Event_Orbit" ,&Event_Orbit ,
"Event_Orbit/i");
295 MyTree->Branch(
"Event_Store" ,&Event_Store ,
"Event_Store/i");
296 MyTree->Branch(
"Event_Time" ,&Event_Time ,
"Event_Time/i");
297 MyTree->Branch(
"Event_PhysicsDeclared" ,&Event_PhysicsDeclared ,
"Event_PhysicsDeclared/O");
298 MyTree->Branch(
"Event_technicalBits" ,Event_technicalBits ,
"Event_technicalBits[64]/O");
299 MyTree->Branch(
"Event_triggerL1Bits" ,Event_triggerL1Bits ,
"Event_triggerL1Bits[192]/O");
300 MyTree->Branch(
"Event_triggerHLTBits" ,Event_triggerHLTBits ,
"Event_triggerHLTBits[128]/O");
301 MyTree->Branch(
"Event_BField" ,&Event_BField ,
"Event_BField/F");
303 if(reccordVertexInfo){
304 MyTree->Branch(
"NVertices" ,&NVertices ,
"NVertices/I");
305 MyTree->Branch(
"Vertex_x" ,Vertex_x ,
"Vertex_x[NVertices]/F");
306 MyTree->Branch(
"Vertex_y" ,Vertex_y ,
"Vertex_y[NVertices]/F");
307 MyTree->Branch(
"Vertex_z" ,Vertex_z ,
"Vertex_z[NVertices]/F");
308 MyTree->Branch(
"Vertex_x_err" ,Vertex_x_err ,
"Vertex_x_err[NVertices]/F");
309 MyTree->Branch(
"Vertex_y_err" ,Vertex_y_err ,
"Vertex_y_err[NVertices]/F");
310 MyTree->Branch(
"Vertex_z_err" ,Vertex_z_err ,
"Vertex_z_err[NVertices]/F");
311 MyTree->Branch(
"Vertex_TrackSize",Vertex_TrackSize,
"Vertex_TrackSize[NVertices]/I");
312 MyTree->Branch(
"Vertex_chi2" ,Vertex_chi2 ,
"Vertex_chi2[NVertices]/F");
313 MyTree->Branch(
"Vertex_ndof" ,Vertex_ndof ,
"Vertex_ndof[NVertices]/F");
314 MyTree->Branch(
"Vertex_isFake" ,Vertex_isFake ,
"Vertex_isFake[NVertices]/O");
317 MyTree->Branch(
"NHSCPs" ,&NHSCPs ,
"NHSCPs/I");
318 MyTree->Branch(
"Hscp_hasTrack" ,Hscp_hasTrack ,
"Hscp_hasTrack[NHSCPs]/O");
319 MyTree->Branch(
"Hscp_hasMuon" ,Hscp_hasMuon ,
"Hscp_hasMuon[NHSCPs]/O");
320 MyTree->Branch(
"Hscp_hasRpc" ,Hscp_hasRpc ,
"Hscp_hasRpc[NHSCPs]/O");
321 MyTree->Branch(
"Hscp_hasCalo" ,Hscp_hasCalo ,
"Hscp_hasCalo[NHSCPs]/O");
322 MyTree->Branch(
"Hscp_type" ,Hscp_type ,
"Hscp_type[NHSCPs]/I");
323 MyTree->Branch(
"Track_NOH" ,Track_NOH ,
"Track_NOH[NHSCPs]/I");
324 MyTree->Branch(
"Track_p" ,Track_p ,
"Track_p[NHSCPs]/F");
325 MyTree->Branch(
"Track_pt" ,Track_pt ,
"Track_pt[NHSCPs]/F");
326 MyTree->Branch(
"Track_pt_err" ,Track_pt_err ,
"Track_pt_err[NHSCPs]/F");
327 MyTree->Branch(
"Track_chi2" ,Track_chi2 ,
"Track_chi2[NHSCPs]/F");
328 MyTree->Branch(
"Track_ndof" ,Track_ndof ,
"Track_ndof[NHSCPs]/F");
329 MyTree->Branch(
"Track_eta" ,Track_eta ,
"Track_eta[NHSCPs]/F");
330 MyTree->Branch(
"Track_eta_err" ,Track_eta_err ,
"Track_eta_err[NHSCPs]/F");
331 MyTree->Branch(
"Track_phi" ,Track_phi ,
"Track_phi[NHSCPs]/F");
332 MyTree->Branch(
"Track_phi_err" ,Track_phi_err ,
"Track_phi_err[NHSCPs]/F");
333 MyTree->Branch(
"Track_d0" ,Track_d0 ,
"Track_d0[NHSCPs]/F");
334 MyTree->Branch(
"Track_dz" ,Track_dz ,
"Track_dz[NHSCPs]/F");
335 MyTree->Branch(
"Track_quality" ,Track_quality ,
"Track_quality[NHSCPs]/I");
336 MyTree->Branch(
"Track_charge" ,Track_charge ,
"Track_charge[NHSCPs]/I");
337 MyTree->Branch(
"Track_dEdxE1" ,Track_dEdxE1 ,
"Track_dEdxE1[NHSCPs]/F");
338 MyTree->Branch(
"Track_dEdxE1_NOS" ,Track_dEdxE1_NOS ,
"Track_dEdxE1_NOS[NHSCPs]/F");
339 MyTree->Branch(
"Track_dEdxE1_NOM" ,Track_dEdxE1_NOM ,
"Track_dEdxE1_NOM[NHSCPs]/I");
340 MyTree->Branch(
"Track_dEdxE2" ,Track_dEdxE2 ,
"Track_dEdxE2[NHSCPs]/F");
341 MyTree->Branch(
"Track_dEdxE2_NOS" ,Track_dEdxE2_NOS ,
"Track_dEdxE2_NOS[NHSCPs]/F");
342 MyTree->Branch(
"Track_dEdxE2_NOM" ,Track_dEdxE2_NOM ,
"Track_dEdxE2_NOM[NHSCPs]/I");
343 MyTree->Branch(
"Track_dEdxE3" ,Track_dEdxE3 ,
"Track_dEdxE3[NHSCPs]/F");
344 MyTree->Branch(
"Track_dEdxE3_NOS" ,Track_dEdxE3_NOS ,
"Track_dEdxE3_NOS[NHSCPs]/F");
345 MyTree->Branch(
"Track_dEdxE3_NOM" ,Track_dEdxE3_NOM ,
"Track_dEdxE3_NOM[NHSCPs]/I");
346 MyTree->Branch(
"Track_dEdxD1" ,Track_dEdxD1 ,
"Track_dEdxD1[NHSCPs]/F");
347 MyTree->Branch(
"Track_dEdxD1_NOS" ,Track_dEdxD1_NOS ,
"Track_dEdxD1_NOS[NHSCPs]/F");
348 MyTree->Branch(
"Track_dEdxD1_NOM" ,Track_dEdxD1_NOM ,
"Track_dEdxD1_NOM[NHSCPs]/I");
349 MyTree->Branch(
"Track_dEdxD2" ,Track_dEdxD2 ,
"Track_dEdxD2[NHSCPs]/F");
350 MyTree->Branch(
"Track_dEdxD2_NOS" ,Track_dEdxD2_NOS ,
"Track_dEdxD2_NOS[NHSCPs]/F");
351 MyTree->Branch(
"Track_dEdxD2_NOM" ,Track_dEdxD2_NOM ,
"Track_dEdxD2_NOM[NHSCPs]/I");
352 MyTree->Branch(
"Track_dEdxD3" ,Track_dEdxD3 ,
"Track_dEdxD3[NHSCPs]/F");
353 MyTree->Branch(
"Track_dEdxD3_NOS" ,Track_dEdxD3_NOS ,
"Track_dEdxD3_NOS[NHSCPs]/F");
354 MyTree->Branch(
"Track_dEdxD3_NOM" ,Track_dEdxD3_NOM ,
"Track_dEdxD3_NOM[NHSCPs]/I");
355 MyTree->Branch(
"Muon_p" ,Muon_p ,
"Muon_p[NHSCPs]/F");
356 MyTree->Branch(
"Muon_pt" ,Muon_pt ,
"Muon_pt[NHSCPs]/F");
357 MyTree->Branch(
"Muon_eta" ,Muon_eta ,
"Muon_eta[NHSCPs]/F");
358 MyTree->Branch(
"Muon_phi" ,Muon_phi ,
"Muon_phi[NHSCPs]/F");
359 MyTree->Branch(
"Muon_type" ,Muon_type ,
"Muon_type[NHSCPs]/i");
360 MyTree->Branch(
"Muon_qualityValid" ,Muon_qualityValid ,
"Muon_qualityValid[NHSCPs]/O");
361 MyTree->Branch(
"Muon_charge" ,Muon_charge ,
"Muon_charge[NHSCPs]/i");
362 MyTree->Branch(
"Muon_dt_IBeta" ,Muon_dt_IBeta ,
"Muon_dt_IBeta[NHSCPs]/F");
363 MyTree->Branch(
"Muon_dt_IBeta_err" ,Muon_dt_IBeta_err ,
"Muon_dt_IBeta_err[NHSCPs]/F");
364 MyTree->Branch(
"Muon_dt_fIBeta" ,Muon_dt_fIBeta ,
"Muon_dt_fIBeta[NHSCPs]/F");
365 MyTree->Branch(
"Muon_dt_fIBeta_err" ,Muon_dt_fIBeta_err ,
"Muon_dt_fIBeta_err[NHSCPs]/F");
366 MyTree->Branch(
"Muon_dt_ndof" ,Muon_dt_ndof ,
"Muon_dt_ndof[NHSCPs]/I");
367 MyTree->Branch(
"Muon_csc_IBeta" ,Muon_csc_IBeta ,
"Muon_csc_IBeta[NHSCPs]/F");
368 MyTree->Branch(
"Muon_csc_IBeta_err" ,Muon_csc_IBeta_err ,
"Muon_csc_IBeta_err[NHSCPs]/F");
369 MyTree->Branch(
"Muon_csc_fIBeta" ,Muon_csc_fIBeta ,
"Muon_csc_fIBeta[NHSCPs]/F");
370 MyTree->Branch(
"Muon_csc_fIBeta_err",Muon_csc_fIBeta_err,
"Muon_csc_fIBeta_err[NHSCPs]/F");
371 MyTree->Branch(
"Muon_csc_ndof" ,Muon_csc_ndof ,
"Muon_csc_ndof[NHSCPs]/I");
372 MyTree->Branch(
"Muon_cb_IBeta" ,Muon_cb_IBeta ,
"Muon_cb_IBeta[NHSCPs]/F");
373 MyTree->Branch(
"Muon_cb_IBeta_err" ,Muon_cb_IBeta_err ,
"Muon_cb_IBeta_err[NHSCPs]/F");
374 MyTree->Branch(
"Muon_cb_fIBeta" ,Muon_cb_fIBeta ,
"Muon_cb_fIBeta[NHSCPs]/F");
375 MyTree->Branch(
"Muon_cb_fIBeta_err" ,Muon_cb_fIBeta_err ,
"Muon_cb_fIBeta_err[NHSCPs]/F");
376 MyTree->Branch(
"Muon_cb_ndof" ,Muon_cb_ndof ,
"Muon_cb_ndof[NHSCPs]/I");
378 MyTree->Branch(
"Rpc_beta" ,Rpc_beta ,
"Rpc_beta[NHSCPs]/F");
380 MyTree->Branch(
"Calo_ecal_crossedE" ,Calo_ecal_crossedE ,
"Calo_ecal_crossedE[NHSCPs]/F");
381 MyTree->Branch(
"Calo_ecal_beta" ,Calo_ecal_beta ,
"Calo_ecal_beta[NHSCPs]/F");
382 MyTree->Branch(
"Calo_ecal_beta_err" ,Calo_ecal_beta_err ,
"Calo_ecal_beta_err[NHSCPs]/F");
383 MyTree->Branch(
"Calo_ecal_invBeta_err" ,Calo_ecal_invBeta_err ,
"Calo_ecal_invBeta_err[NHSCPs]/F");
384 MyTree->Branch(
"Calo_ecal_dEdx" ,Calo_ecal_dEdx ,
"Calo_ecal_dEdx[NHSCPs]/F");
385 MyTree->Branch(
"Calo_ecal_time" ,Calo_ecal_time ,
"Calo_ecal_time[NHSCPs]/F");
386 MyTree->Branch(
"Calo_ecal_time_err" ,Calo_ecal_time_err ,
"Calo_ecal_time_err[NHSCPs]/F");
387 MyTree->Branch(
"Calo_ecal_numCrysCrossed" ,Calo_ecal_numCrysCrossed,
"Calo_ecal_numCrysCrossed[NHSCPs]/I");
388 MyTree->Branch(
"Calo_ecal_swissCrossKs" ,Calo_ecal_swissCrossKs ,
"Calo_ecal_swissCrossKs[NHSCPs][10]/F");
389 MyTree->Branch(
"Calo_ecal_e1OverE9s" ,Calo_ecal_e1OverE9s ,
"Calo_ecal_e1OverE9s[NHSCPs][10]/F");
390 MyTree->Branch(
"Calo_ecal_trackLengths" ,Calo_ecal_trackLengths ,
"Calo_ecal_trackLengths[NHSCPs][10]/F");
391 MyTree->Branch(
"Calo_ecal_trackExitEtas" ,Calo_ecal_trackExitEtas ,
"Calo_ecal_trackExitEtas[NHSCPs][10]/F");
392 MyTree->Branch(
"Calo_ecal_trackExitPhis" ,Calo_ecal_trackExitPhis ,
"Calo_ecal_trackExitPhis[NHSCPs][10]/F");
393 MyTree->Branch(
"Calo_ecal_energies" ,Calo_ecal_energies ,
"Calo_ecal_energies[NHSCPs][10]/F");
394 MyTree->Branch(
"Calo_ecal_outOfTimeEnergies",Calo_ecal_outOfTimeEnergies ,
"Calo_ecal_outOfTimeEnergies[NHSCPs][10]/F");
395 MyTree->Branch(
"Calo_ecal_chi2s" ,Calo_ecal_chi2s ,
"Calo_ecal_chi2s[NHSCPs][10]/F");
396 MyTree->Branch(
"Calo_ecal_outOfTimeChi2s" ,Calo_ecal_outOfTimeChi2s ,
"Calo_ecal_outOfTimeChi2s[NHSCPs][10]/F");
397 MyTree->Branch(
"Calo_ecal_times" ,Calo_ecal_times ,
"Calo_ecal_times[NHSCPs][10]/F");
398 MyTree->Branch(
"Calo_ecal_timeErrors" ,Calo_ecal_timeErrors ,
"Calo_ecal_timeErrors[NHSCPs][10]/F");
399 MyTree->Branch(
"Calo_ecal_detIds" ,Calo_ecal_detIds ,
"Calo_ecal_detIds[NHSCPs][10]/I");
402 MyTree->Branch(
"NGens" ,&NGens ,
"NGens/I");
403 MyTree->Branch(
"Gen_pdgId" ,Gen_pdgId ,
"Gen_pdgId[NGens]/i");
404 MyTree->Branch(
"Gen_charge" ,Gen_charge ,
"Gen_charge[NGens]/F");
405 MyTree->Branch(
"Gen_p" ,Gen_p ,
"Gen_p[NGens]/F");
406 MyTree->Branch(
"Gen_px" ,Gen_px ,
"Gen_px[NGens]/F");
407 MyTree->Branch(
"Gen_py" ,Gen_py ,
"Gen_py[NGens]/F");
408 MyTree->Branch(
"Gen_pz" ,Gen_pz ,
"Gen_pz[NGens]/F");
409 MyTree->Branch(
"Gen_pt" ,Gen_pt ,
"Gen_pt[NGens]/F");
410 MyTree->Branch(
"Gen_eta" ,Gen_eta ,
"Gen_eta[NGens]/F");
411 MyTree->Branch(
"Gen_phi" ,Gen_phi ,
"Gen_phi[NGens]/F");
412 MyTree->Branch(
"Gen_beta" ,Gen_beta ,
"Gen_beta[NGens]/F");
413 MyTree->Branch(
"Gen_mass" ,Gen_mass ,
"Gen_mass[NGens]/F");
429 if (debug)
cout <<
"I'm in HSCPTreeBuilder::analyze!" << endl;
432 Event_EventNumber = iEvent.
id().
event();
433 Event_RunNumber = iEvent.
id().
run();
448 iEvent.
getByLabel(
"gtDigis", h_gtReadoutRecord);
449 L1GtFdlWord fdlWord = h_gtReadoutRecord->gtFdlWord();
451 Event_PhysicsDeclared = h_gtReadoutRecord->gtFdlWord().physicsDeclared();
452 for (
unsigned int i = 0;
i < 64; ++
i){ Event_technicalBits [
i] = L1technical[
i]; }
454 for (
unsigned int i = 0;
i < 128; ++
i){ Event_triggerL1Bits [
i] = L1decision[
i]; }
456 for (
unsigned int i = 0;
i < 64; ++
i){ Event_triggerL1Bits [128+
i] = L1decisionE[
i]; }
461 for(
unsigned int i=0;
i<trh->size() &&
i<128;++
i){Event_triggerHLTBits[
i] = trh->at(
i).accept();}
464 iEvent.
getByLabel(
"offlinePrimaryVertices", recoVertexHandle);
467 if(reccordVertexInfo){
469 for(
unsigned int i=0;
i<recoVertex.size();
i++){
470 Vertex_x [NVertices] = recoVertex[
i].x();
471 Vertex_y [NVertices] = recoVertex[
i].y();
472 Vertex_z [NVertices] = recoVertex[
i].z();
473 Vertex_x_err [NVertices] = recoVertex[
i].xError();
474 Vertex_y_err [NVertices] = recoVertex[
i].yError();
475 Vertex_z_err [NVertices] = recoVertex[
i].zError();
476 Vertex_TrackSize[NVertices] = recoVertex[
i].tracksSize();
477 Vertex_chi2 [NVertices] = recoVertex[
i].chi2();
478 Vertex_ndof [NVertices] = recoVertex[
i].ndof();
479 Vertex_isFake [NVertices] = recoVertex[
i].isFake();
486 iEvent.
getByLabel(m_HSCPsTag, HSCPCollectionHandle);
490 for(
unsigned int i=0;
i<HSCPCollection.size();
i++){
499 Hscp_type [NHSCPs] = hscp.
type();
502 Track_p [NHSCPs] = track->p();
503 Track_pt [NHSCPs] = track->pt();
504 Track_pt_err [NHSCPs] = track->ptError();
505 Track_eta [NHSCPs] = track->eta();
506 Track_eta_err [NHSCPs] = track->etaError();
507 Track_phi [NHSCPs] = track->phi();
508 Track_phi_err [NHSCPs] = track->phiError();
509 Track_NOH [NHSCPs] = track->found();
510 Track_chi2 [NHSCPs] = track->chi2();
511 Track_ndof [NHSCPs] = track->ndof();
512 Track_d0 [NHSCPs] = -1.0f * track->dxy(recoVertex[0].
position());
513 Track_dz [NHSCPs] = -1.0f * track->dz (recoVertex[0].
position());
514 Track_quality [NHSCPs] = track->qualityMask();
515 Track_charge [NHSCPs] = track->charge();
538 Muon_p [NHSCPs] = muon->p();
539 Muon_pt [NHSCPs] = muon->pt();
540 Muon_eta [NHSCPs] = muon->eta();
541 Muon_phi [NHSCPs] = muon->phi();
542 Muon_type [NHSCPs] = muon->type();
543 Muon_qualityValid [NHSCPs] = muon->isQualityValid();
544 Muon_charge [NHSCPs] = muon->charge();
592 Rpc_beta [NHSCPs] = hscp.
rpc().
beta;
601 iEvent.
getByLabel(
"genParticles", genParticles);
603 for(
unsigned int i=0;
i<genParticles->size();
i++){
605 if(part.
status()!=1)
continue;
606 if(part.
pt()<5)
continue;
609 Gen_pdgId [NGens] = part.
pdgId();
610 Gen_charge[NGens] = part.
charge();
611 Gen_p [NGens] = part.
p();
612 Gen_px [NGens] = part.
px();
613 Gen_py [NGens] = part.
py();
614 Gen_pz [NGens] = part.
pz();
615 Gen_pt [NGens] = part.
pt();
616 Gen_eta [NGens] = part.
eta();
617 Gen_phi [NGens] = part.
phi();
618 Gen_beta [NGens] = part.
p()/part.
energy();
619 Gen_mass [NGens] = part.
mass();
unsigned int Event_LumiSection
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
virtual int pdgId() const
PDG identifier.
const TechnicalTriggerWord & gtTechnicalTriggerWord() const
get/set technical trigger bits
virtual double p() const
magnitude of momentum vector
const RPCBetaMeasurement & rpc() const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
virtual int status() const
status word
virtual bool filter(edm::Event &, const edm::EventSetup &)
Timestamp const & time() const
unsigned int Event_BXCrossing
std::vector< Vertex > VertexCollection
collection of Vertex objects
tuple HSCPTreeBuilder
HSCP TREE BUILDER.
DEFINE_FWK_MODULE(HiMixingModule)
int bunchCrossing() const
virtual double eta() const
momentum pseudorapidity
HSCPTreeBuilder(const edm::ParameterSet &)
static int position[TOTALCHAMBERS][3]
bool Event_PhysicsDeclared
LuminosityBlockNumber_t luminosityBlock() const
bool isNonnull() const
Checks for non-null.
std::vector< bool > DecisionWordExtended
virtual double mass() const
mass
virtual double energy() const
energy
std::vector< HSCParticle > HSCParticleCollection
unsigned int Event_EventNumber
std::vector< bool > DecisionWord
typedefs
virtual int charge() const
electric charge
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
const edm::EventSetup * iSetup_
const edm::Event * iEvent_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
EventAuxiliary const & eventAuxiliary() const
TimeValue_t value() const
reco::MuonRef muonRef() const
tuple filter
USE THIS FOR SKIMMED TRACKS process.p = cms.Path(process.hltLevel1GTSeed*process.skimming*process.offlineBeamSpot*process.TrackRefitter2) OTHERWISE USE THIS.
virtual double px() const
x coordinate of momentum vector
virtual double pt() const
transverse momentum
T const * product() const
const DecisionWord & gtDecisionWord() const
get/set/print algorithms bits (decision word)
T const * product() const
virtual double pz() const
z coordinate of momentum vector
reco::TrackRef trackRef() const
const DecisionWordExtended & gtDecisionWordExtended() const
get/set extended algorithms bits (extended decision word)
edm::Service< TFileService > tfs
virtual double phi() const
momentum azimuthal angle
virtual double py() const
y coordinate of momentum vector
unsigned int Event_RunNumber