91 #include "TObjString.h" 100 #include <ext/hash_map> 103 using namespace reco;
107 #define MAX_VERTICES 1000 108 #define MAX_HSCPS 10000 109 #define MAX_GENS 10000 110 #define MAX_ECALCRYS 10 120 void endJob()
override;
137 bool Event_triggerL1Bits[192];
138 bool Event_triggerHLTBits[128];
139 bool Event_technicalBits[64];
260 m_gtReadoutRecordToken = consumes<L1GlobalTriggerReadoutRecord>(
InputTag(
"gtDigis"));
261 m_trToken = consumes<edm::TriggerResults>(
InputTag(
"TriggerResults"));
262 m_recoVertexToken = consumes<reco::VertexCollection>(
InputTag(
"offlinePrimaryVertices"));
263 m_genParticlesToken = mayConsume<GenParticleCollection>(
InputTag(
"genParticles"));
264 m_HSCPsToken = consumes<susybsm::HSCParticleCollection>(iConfig.
getParameter<
InputTag>(
"HSCParticles"));
269 std::cout <<
"######################################################" << endl;
270 std::cout <<
" USE OF THE HSCPTreeBuilder is deprecated! " << endl;
271 std::cout <<
"better to use the HSCParticle Producer and then FWLite" << endl;
272 std::cout <<
"######################################################" << endl;
278 TTree::SetMaxTreeSize(1000 * Long64_t(2000000000));
279 MyTree = tfs->make<TTree>(
"HscpTree",
"HscpTree");
281 MyTree->Branch(
"Event_EventNumber", &Event_EventNumber,
"Event_EventNumber/i");
282 MyTree->Branch(
"Event_RunNumber", &Event_RunNumber,
"Event_RunNumber/i");
283 MyTree->Branch(
"Event_LumiSection", &Event_LumiSection,
"Event_LumiSection/i");
284 MyTree->Branch(
"Event_BXCrossing", &Event_BXCrossing,
"Event_BXCrossing/i");
285 MyTree->Branch(
"Event_Orbit", &Event_Orbit,
"Event_Orbit/i");
286 MyTree->Branch(
"Event_Store", &Event_Store,
"Event_Store/i");
287 MyTree->Branch(
"Event_Time", &Event_Time,
"Event_Time/i");
288 MyTree->Branch(
"Event_PhysicsDeclared", &Event_PhysicsDeclared,
"Event_PhysicsDeclared/O");
289 MyTree->Branch(
"Event_technicalBits", Event_technicalBits,
"Event_technicalBits[64]/O");
290 MyTree->Branch(
"Event_triggerL1Bits", Event_triggerL1Bits,
"Event_triggerL1Bits[192]/O");
291 MyTree->Branch(
"Event_triggerHLTBits", Event_triggerHLTBits,
"Event_triggerHLTBits[128]/O");
292 MyTree->Branch(
"Event_BField", &Event_BField,
"Event_BField/F");
294 if (reccordVertexInfo) {
295 MyTree->Branch(
"NVertices", &NVertices,
"NVertices/I");
296 MyTree->Branch(
"Vertex_x", Vertex_x,
"Vertex_x[NVertices]/F");
297 MyTree->Branch(
"Vertex_y", Vertex_y,
"Vertex_y[NVertices]/F");
298 MyTree->Branch(
"Vertex_z", Vertex_z,
"Vertex_z[NVertices]/F");
299 MyTree->Branch(
"Vertex_x_err", Vertex_x_err,
"Vertex_x_err[NVertices]/F");
300 MyTree->Branch(
"Vertex_y_err", Vertex_y_err,
"Vertex_y_err[NVertices]/F");
301 MyTree->Branch(
"Vertex_z_err", Vertex_z_err,
"Vertex_z_err[NVertices]/F");
302 MyTree->Branch(
"Vertex_TrackSize", Vertex_TrackSize,
"Vertex_TrackSize[NVertices]/I");
303 MyTree->Branch(
"Vertex_chi2", Vertex_chi2,
"Vertex_chi2[NVertices]/F");
304 MyTree->Branch(
"Vertex_ndof", Vertex_ndof,
"Vertex_ndof[NVertices]/F");
305 MyTree->Branch(
"Vertex_isFake", Vertex_isFake,
"Vertex_isFake[NVertices]/O");
308 MyTree->Branch(
"NHSCPs", &NHSCPs,
"NHSCPs/I");
309 MyTree->Branch(
"Hscp_hasTrack", Hscp_hasTrack,
"Hscp_hasTrack[NHSCPs]/O");
310 MyTree->Branch(
"Hscp_hasMuon", Hscp_hasMuon,
"Hscp_hasMuon[NHSCPs]/O");
311 MyTree->Branch(
"Hscp_hasRpc", Hscp_hasRpc,
"Hscp_hasRpc[NHSCPs]/O");
312 MyTree->Branch(
"Hscp_hasCalo", Hscp_hasCalo,
"Hscp_hasCalo[NHSCPs]/O");
313 MyTree->Branch(
"Hscp_type", Hscp_type,
"Hscp_type[NHSCPs]/I");
314 MyTree->Branch(
"Track_NOH", Track_NOH,
"Track_NOH[NHSCPs]/I");
315 MyTree->Branch(
"Track_p", Track_p,
"Track_p[NHSCPs]/F");
316 MyTree->Branch(
"Track_pt", Track_pt,
"Track_pt[NHSCPs]/F");
317 MyTree->Branch(
"Track_pt_err", Track_pt_err,
"Track_pt_err[NHSCPs]/F");
318 MyTree->Branch(
"Track_chi2", Track_chi2,
"Track_chi2[NHSCPs]/F");
319 MyTree->Branch(
"Track_ndof", Track_ndof,
"Track_ndof[NHSCPs]/F");
320 MyTree->Branch(
"Track_eta", Track_eta,
"Track_eta[NHSCPs]/F");
321 MyTree->Branch(
"Track_eta_err", Track_eta_err,
"Track_eta_err[NHSCPs]/F");
322 MyTree->Branch(
"Track_phi", Track_phi,
"Track_phi[NHSCPs]/F");
323 MyTree->Branch(
"Track_phi_err", Track_phi_err,
"Track_phi_err[NHSCPs]/F");
324 MyTree->Branch(
"Track_d0", Track_d0,
"Track_d0[NHSCPs]/F");
325 MyTree->Branch(
"Track_dz", Track_dz,
"Track_dz[NHSCPs]/F");
326 MyTree->Branch(
"Track_quality", Track_quality,
"Track_quality[NHSCPs]/I");
327 MyTree->Branch(
"Track_charge", Track_charge,
"Track_charge[NHSCPs]/I");
328 MyTree->Branch(
"Track_dEdxE1", Track_dEdxE1,
"Track_dEdxE1[NHSCPs]/F");
329 MyTree->Branch(
"Track_dEdxE1_NOS", Track_dEdxE1_NOS,
"Track_dEdxE1_NOS[NHSCPs]/F");
330 MyTree->Branch(
"Track_dEdxE1_NOM", Track_dEdxE1_NOM,
"Track_dEdxE1_NOM[NHSCPs]/I");
331 MyTree->Branch(
"Track_dEdxE2", Track_dEdxE2,
"Track_dEdxE2[NHSCPs]/F");
332 MyTree->Branch(
"Track_dEdxE2_NOS", Track_dEdxE2_NOS,
"Track_dEdxE2_NOS[NHSCPs]/F");
333 MyTree->Branch(
"Track_dEdxE2_NOM", Track_dEdxE2_NOM,
"Track_dEdxE2_NOM[NHSCPs]/I");
334 MyTree->Branch(
"Track_dEdxE3", Track_dEdxE3,
"Track_dEdxE3[NHSCPs]/F");
335 MyTree->Branch(
"Track_dEdxE3_NOS", Track_dEdxE3_NOS,
"Track_dEdxE3_NOS[NHSCPs]/F");
336 MyTree->Branch(
"Track_dEdxE3_NOM", Track_dEdxE3_NOM,
"Track_dEdxE3_NOM[NHSCPs]/I");
337 MyTree->Branch(
"Track_dEdxD1", Track_dEdxD1,
"Track_dEdxD1[NHSCPs]/F");
338 MyTree->Branch(
"Track_dEdxD1_NOS", Track_dEdxD1_NOS,
"Track_dEdxD1_NOS[NHSCPs]/F");
339 MyTree->Branch(
"Track_dEdxD1_NOM", Track_dEdxD1_NOM,
"Track_dEdxD1_NOM[NHSCPs]/I");
340 MyTree->Branch(
"Track_dEdxD2", Track_dEdxD2,
"Track_dEdxD2[NHSCPs]/F");
341 MyTree->Branch(
"Track_dEdxD2_NOS", Track_dEdxD2_NOS,
"Track_dEdxD2_NOS[NHSCPs]/F");
342 MyTree->Branch(
"Track_dEdxD2_NOM", Track_dEdxD2_NOM,
"Track_dEdxD2_NOM[NHSCPs]/I");
343 MyTree->Branch(
"Track_dEdxD3", Track_dEdxD3,
"Track_dEdxD3[NHSCPs]/F");
344 MyTree->Branch(
"Track_dEdxD3_NOS", Track_dEdxD3_NOS,
"Track_dEdxD3_NOS[NHSCPs]/F");
345 MyTree->Branch(
"Track_dEdxD3_NOM", Track_dEdxD3_NOM,
"Track_dEdxD3_NOM[NHSCPs]/I");
346 MyTree->Branch(
"Muon_p", Muon_p,
"Muon_p[NHSCPs]/F");
347 MyTree->Branch(
"Muon_pt", Muon_pt,
"Muon_pt[NHSCPs]/F");
348 MyTree->Branch(
"Muon_eta", Muon_eta,
"Muon_eta[NHSCPs]/F");
349 MyTree->Branch(
"Muon_phi", Muon_phi,
"Muon_phi[NHSCPs]/F");
350 MyTree->Branch(
"Muon_type", Muon_type,
"Muon_type[NHSCPs]/i");
351 MyTree->Branch(
"Muon_qualityValid", Muon_qualityValid,
"Muon_qualityValid[NHSCPs]/O");
352 MyTree->Branch(
"Muon_charge", Muon_charge,
"Muon_charge[NHSCPs]/i");
353 MyTree->Branch(
"Muon_dt_IBeta", Muon_dt_IBeta,
"Muon_dt_IBeta[NHSCPs]/F");
354 MyTree->Branch(
"Muon_dt_IBeta_err", Muon_dt_IBeta_err,
"Muon_dt_IBeta_err[NHSCPs]/F");
355 MyTree->Branch(
"Muon_dt_fIBeta", Muon_dt_fIBeta,
"Muon_dt_fIBeta[NHSCPs]/F");
356 MyTree->Branch(
"Muon_dt_fIBeta_err", Muon_dt_fIBeta_err,
"Muon_dt_fIBeta_err[NHSCPs]/F");
357 MyTree->Branch(
"Muon_dt_ndof", Muon_dt_ndof,
"Muon_dt_ndof[NHSCPs]/I");
358 MyTree->Branch(
"Muon_csc_IBeta", Muon_csc_IBeta,
"Muon_csc_IBeta[NHSCPs]/F");
359 MyTree->Branch(
"Muon_csc_IBeta_err", Muon_csc_IBeta_err,
"Muon_csc_IBeta_err[NHSCPs]/F");
360 MyTree->Branch(
"Muon_csc_fIBeta", Muon_csc_fIBeta,
"Muon_csc_fIBeta[NHSCPs]/F");
361 MyTree->Branch(
"Muon_csc_fIBeta_err", Muon_csc_fIBeta_err,
"Muon_csc_fIBeta_err[NHSCPs]/F");
362 MyTree->Branch(
"Muon_csc_ndof", Muon_csc_ndof,
"Muon_csc_ndof[NHSCPs]/I");
363 MyTree->Branch(
"Muon_cb_IBeta", Muon_cb_IBeta,
"Muon_cb_IBeta[NHSCPs]/F");
364 MyTree->Branch(
"Muon_cb_IBeta_err", Muon_cb_IBeta_err,
"Muon_cb_IBeta_err[NHSCPs]/F");
365 MyTree->Branch(
"Muon_cb_fIBeta", Muon_cb_fIBeta,
"Muon_cb_fIBeta[NHSCPs]/F");
366 MyTree->Branch(
"Muon_cb_fIBeta_err", Muon_cb_fIBeta_err,
"Muon_cb_fIBeta_err[NHSCPs]/F");
367 MyTree->Branch(
"Muon_cb_ndof", Muon_cb_ndof,
"Muon_cb_ndof[NHSCPs]/I");
369 MyTree->Branch(
"Rpc_beta", Rpc_beta,
"Rpc_beta[NHSCPs]/F");
371 MyTree->Branch(
"Calo_ecal_crossedE", Calo_ecal_crossedE,
"Calo_ecal_crossedE[NHSCPs]/F");
372 MyTree->Branch(
"Calo_ecal_beta", Calo_ecal_beta,
"Calo_ecal_beta[NHSCPs]/F");
373 MyTree->Branch(
"Calo_ecal_beta_err", Calo_ecal_beta_err,
"Calo_ecal_beta_err[NHSCPs]/F");
374 MyTree->Branch(
"Calo_ecal_invBeta_err", Calo_ecal_invBeta_err,
"Calo_ecal_invBeta_err[NHSCPs]/F");
375 MyTree->Branch(
"Calo_ecal_dEdx", Calo_ecal_dEdx,
"Calo_ecal_dEdx[NHSCPs]/F");
376 MyTree->Branch(
"Calo_ecal_time", Calo_ecal_time,
"Calo_ecal_time[NHSCPs]/F");
377 MyTree->Branch(
"Calo_ecal_time_err", Calo_ecal_time_err,
"Calo_ecal_time_err[NHSCPs]/F");
378 MyTree->Branch(
"Calo_ecal_numCrysCrossed", Calo_ecal_numCrysCrossed,
"Calo_ecal_numCrysCrossed[NHSCPs]/I");
379 MyTree->Branch(
"Calo_ecal_swissCrossKs", Calo_ecal_swissCrossKs,
"Calo_ecal_swissCrossKs[NHSCPs][10]/F");
380 MyTree->Branch(
"Calo_ecal_e1OverE9s", Calo_ecal_e1OverE9s,
"Calo_ecal_e1OverE9s[NHSCPs][10]/F");
381 MyTree->Branch(
"Calo_ecal_trackLengths", Calo_ecal_trackLengths,
"Calo_ecal_trackLengths[NHSCPs][10]/F");
382 MyTree->Branch(
"Calo_ecal_trackExitEtas", Calo_ecal_trackExitEtas,
"Calo_ecal_trackExitEtas[NHSCPs][10]/F");
383 MyTree->Branch(
"Calo_ecal_trackExitPhis", Calo_ecal_trackExitPhis,
"Calo_ecal_trackExitPhis[NHSCPs][10]/F");
384 MyTree->Branch(
"Calo_ecal_energies", Calo_ecal_energies,
"Calo_ecal_energies[NHSCPs][10]/F");
386 "Calo_ecal_outOfTimeEnergies", Calo_ecal_outOfTimeEnergies,
"Calo_ecal_outOfTimeEnergies[NHSCPs][10]/F");
387 MyTree->Branch(
"Calo_ecal_chi2s", Calo_ecal_chi2s,
"Calo_ecal_chi2s[NHSCPs][10]/F");
388 MyTree->Branch(
"Calo_ecal_outOfTimeChi2s", Calo_ecal_outOfTimeChi2s,
"Calo_ecal_outOfTimeChi2s[NHSCPs][10]/F");
389 MyTree->Branch(
"Calo_ecal_times", Calo_ecal_times,
"Calo_ecal_times[NHSCPs][10]/F");
390 MyTree->Branch(
"Calo_ecal_timeErrors", Calo_ecal_timeErrors,
"Calo_ecal_timeErrors[NHSCPs][10]/F");
391 MyTree->Branch(
"Calo_ecal_detIds", Calo_ecal_detIds,
"Calo_ecal_detIds[NHSCPs][10]/I");
393 if (reccordGenInfo) {
394 MyTree->Branch(
"NGens", &NGens,
"NGens/I");
395 MyTree->Branch(
"Gen_pdgId", Gen_pdgId,
"Gen_pdgId[NGens]/i");
396 MyTree->Branch(
"Gen_charge", Gen_charge,
"Gen_charge[NGens]/F");
397 MyTree->Branch(
"Gen_p", Gen_p,
"Gen_p[NGens]/F");
398 MyTree->Branch(
"Gen_px", Gen_px,
"Gen_px[NGens]/F");
399 MyTree->Branch(
"Gen_py", Gen_py,
"Gen_py[NGens]/F");
400 MyTree->Branch(
"Gen_pz", Gen_pz,
"Gen_pz[NGens]/F");
401 MyTree->Branch(
"Gen_pt", Gen_pt,
"Gen_pt[NGens]/F");
402 MyTree->Branch(
"Gen_eta", Gen_eta,
"Gen_eta[NGens]/F");
403 MyTree->Branch(
"Gen_phi", Gen_phi,
"Gen_phi[NGens]/F");
404 MyTree->Branch(
"Gen_beta", Gen_beta,
"Gen_beta[NGens]/F");
405 MyTree->Branch(
"Gen_mass", Gen_mass,
"Gen_mass[NGens]/F");
414 cout <<
"I'm in HSCPTreeBuilder::analyze!" << endl;
416 Event_EventNumber = iEvent.
id().
event();
417 Event_RunNumber = iEvent.
id().
run();
432 iEvent.
getByToken(m_gtReadoutRecordToken, h_gtReadoutRecord);
433 L1GtFdlWord fdlWord = h_gtReadoutRecord->gtFdlWord();
435 Event_PhysicsDeclared = h_gtReadoutRecord->gtFdlWord().physicsDeclared();
436 for (
unsigned int i = 0;
i < 64; ++
i) {
437 Event_technicalBits[
i] = L1technical[
i];
440 for (
unsigned int i = 0;
i < 128; ++
i) {
441 Event_triggerL1Bits[
i] = L1decision[
i];
444 for (
unsigned int i = 0;
i < 64; ++
i) {
445 Event_triggerL1Bits[128 +
i] = L1decisionE[
i];
451 for (
unsigned int i = 0;
i < trh->
size() &&
i < 128; ++
i) {
452 Event_triggerHLTBits[
i] = trh->
at(
i).
accept();
456 iEvent.
getByToken(m_recoVertexToken, recoVertexHandle);
459 if (reccordVertexInfo) {
461 for (
unsigned int i = 0;
i < recoVertex.size();
i++) {
462 Vertex_x[NVertices] = recoVertex[
i].x();
463 Vertex_y[NVertices] = recoVertex[
i].y();
464 Vertex_z[NVertices] = recoVertex[
i].z();
465 Vertex_x_err[NVertices] = recoVertex[
i].xError();
466 Vertex_y_err[NVertices] = recoVertex[
i].yError();
467 Vertex_z_err[NVertices] = recoVertex[
i].zError();
468 Vertex_TrackSize[NVertices] = recoVertex[
i].tracksSize();
469 Vertex_chi2[NVertices] = recoVertex[
i].chi2();
470 Vertex_ndof[NVertices] = recoVertex[
i].ndof();
471 Vertex_isFake[NVertices] = recoVertex[
i].isFake();
478 iEvent.
getByToken(m_HSCPsToken, HSCPCollectionHandle);
482 for (
unsigned int i = 0;
i < HSCPCollection.size();
i++) {
492 Hscp_type[NHSCPs] = hscp.
type();
494 if (track.
isNonnull() && Hscp_hasTrack[NHSCPs]) {
495 Track_p[NHSCPs] = track->p();
496 Track_pt[NHSCPs] = track->pt();
497 Track_pt_err[NHSCPs] = track->ptError();
498 Track_eta[NHSCPs] = track->eta();
499 Track_eta_err[NHSCPs] = track->etaError();
500 Track_phi[NHSCPs] = track->phi();
501 Track_phi_err[NHSCPs] = track->phiError();
502 Track_NOH[NHSCPs] = track->found();
503 Track_chi2[NHSCPs] = track->chi2();
504 Track_ndof[NHSCPs] = track->ndof();
505 Track_d0[NHSCPs] = -1.0f * track->dxy(recoVertex[0].
position());
506 Track_dz[NHSCPs] = -1.0f * track->dz(recoVertex[0].
position());
507 Track_quality[NHSCPs] = track->qualityMask();
508 Track_charge[NHSCPs] = track->charge();
530 if (muon.
isNonnull() && Hscp_hasMuon[NHSCPs]) {
531 Muon_p[NHSCPs] = muon->p();
532 Muon_pt[NHSCPs] = muon->pt();
533 Muon_eta[NHSCPs] = muon->eta();
534 Muon_phi[NHSCPs] = muon->phi();
535 Muon_type[NHSCPs] = muon->type();
536 Muon_qualityValid[NHSCPs] = muon->isQualityValid();
537 Muon_charge[NHSCPs] = muon->charge();
584 if (Hscp_hasRpc[NHSCPs]) {
585 Rpc_beta[NHSCPs] = hscp.
rpc().
beta;
591 if (reccordGenInfo) {
593 iEvent.
getByToken(m_genParticlesToken, genParticles);
595 for (
unsigned int i = 0;
i < genParticles->size();
i++) {
603 Gen_pdgId[NGens] = part.
pdgId();
604 Gen_charge[NGens] = part.
charge();
605 Gen_p[NGens] = part.
p();
606 Gen_px[NGens] = part.
px();
607 Gen_py[NGens] = part.
py();
608 Gen_pz[NGens] = part.
pz();
609 Gen_pt[NGens] = part.
pt();
610 Gen_eta[NGens] = part.
eta();
611 Gen_phi[NGens] = part.
phi();
612 Gen_beta[NGens] = part.
p() / part.
energy();
613 Gen_mass[NGens] = part.
mass();
unsigned int Event_LumiSection
T getParameter(std::string const &) const
EventNumber_t event() const
int pdgId() const final
PDG identifier.
T getUntrackedParameter(std::string const &, T const &) const
const TechnicalTriggerWord & gtTechnicalTriggerWord() const
get/set technical trigger bits
EventAuxiliary const & eventAuxiliary() const override
bool isNonnull() const
Checks for non-null.
double eta() const final
momentum pseudorapidity
~HSCPTreeBuilder() override
const RPCBetaMeasurement & rpc() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double px() const final
x coordinate of momentum vector
Timestamp const & time() const
unsigned int Event_BXCrossing
double pt() const final
transverse momentum
std::vector< Vertex > VertexCollection
collection of Vertex objects
int charge() const final
electric charge
int bunchCrossing() const
HSCPTreeBuilder(const edm::ParameterSet &)
bool Event_PhysicsDeclared
LuminosityBlockNumber_t luminosityBlock() const
bool filter(edm::Event &, const edm::EventSetup &) override
std::vector< bool > DecisionWordExtended
std::vector< HSCParticle > HSCParticleCollection
#define DEFINE_FWK_MODULE(type)
unsigned int Event_EventNumber
double pz() const final
z coordinate of momentum vector
std::vector< bool > DecisionWord
typedefs
unsigned int size() const
Get number of paths stored.
double energy() const final
energy
EDGetTokenT< L1GlobalTriggerReadoutRecord > m_gtReadoutRecordToken
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
const edm::EventSetup * iSetup_
const edm::Event * iEvent_
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
const HLTPathStatus & at(const unsigned int i) const
reco::MuonRef muonRef() const
double p() const final
magnitude of momentum vector
EDGetTokenT< GenParticleCollection > m_genParticlesToken
EDGetTokenT< edm::TriggerResults > m_trToken
T const * product() const
double py() const final
y coordinate of momentum vector
const DecisionWord & gtDecisionWord() const
get/set/print algorithms bits (decision word)
bool accept() const
has this path accepted the event?
reco::TrackRef trackRef() const
static int position[264][3]
int status() const final
status word
const DecisionWordExtended & gtDecisionWordExtended() const
get/set extended algorithms bits (extended decision word)
edm::Service< TFileService > tfs
EDGetTokenT< reco::VertexCollection > m_recoVertexToken
double phi() const final
momentum azimuthal angle
T const * product() const
TimeValue_t value() const
double mass() const final
mass
unsigned int Event_RunNumber
EDGetTokenT< susybsm::HSCParticleCollection > m_HSCPsToken