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();
418 Event_LumiSection =
iEvent.eventAuxiliary().luminosityBlock();
419 Event_BXCrossing =
iEvent.eventAuxiliary().bunchCrossing();
420 Event_Orbit =
iEvent.eventAuxiliary().orbitNumber();
421 Event_Store =
iEvent.eventAuxiliary().storeNumber();
422 Event_Time =
iEvent.eventAuxiliary().time().value();
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];
450 iEvent.getByToken(m_trToken, trh);
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) {
468 Vertex_TrackSize[NVertices] =
recoVertex[
i].tracksSize();
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();
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) {
597 if (
part.status() != 1)
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();