diff --git a/DataFormats/Scouting/BuildFile.xml b/DataFormats/Scouting/BuildFile.xml
index 06d710ca67c99..041bf1d5692dc 100644
--- a/DataFormats/Scouting/BuildFile.xml
+++ b/DataFormats/Scouting/BuildFile.xml
@@ -1,4 +1,4 @@
-
+
diff --git a/DataFormats/Scouting/interface/Run3ScoutingCaloJet.h b/DataFormats/Scouting/interface/Run3ScoutingCaloJet.h
new file mode 100644
index 0000000000000..b0b0e7b4f7a15
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingCaloJet.h
@@ -0,0 +1,101 @@
+#ifndef DataFormats_Run3ScoutingCaloJet_h
+#define DataFormats_Run3ScoutingCaloJet_h
+
+#include
+
+//class for holding calo jet information, for use in data scouting
+//IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingCaloJet {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingCaloJet(float pt,
+ float eta,
+ float phi,
+ float m,
+ float jetArea,
+ float maxEInEmTowers,
+ float maxEInHadTowers,
+ float hadEnergyInHB,
+ float hadEnergyInHE,
+ float hadEnergyInHF,
+ float emEnergyInEB,
+ float emEnergyInEE,
+ float emEnergyInHF,
+ float towersArea,
+ float mvaDiscriminator,
+ float btagDiscriminator)
+ : pt_(pt),
+ eta_(eta),
+ phi_(phi),
+ m_(m),
+ jetArea_(jetArea),
+ maxEInEmTowers_(maxEInEmTowers),
+ maxEInHadTowers_(maxEInHadTowers),
+ hadEnergyInHB_(hadEnergyInHB),
+ hadEnergyInHE_(hadEnergyInHE),
+ hadEnergyInHF_(hadEnergyInHF),
+ emEnergyInEB_(emEnergyInEB),
+ emEnergyInEE_(emEnergyInEE),
+ emEnergyInHF_(emEnergyInHF),
+ towersArea_(towersArea),
+ mvaDiscriminator_(mvaDiscriminator),
+ btagDiscriminator_(btagDiscriminator) {}
+ //default constructor
+ Run3ScoutingCaloJet()
+ : pt_(0),
+ eta_(0),
+ phi_(0),
+ m_(0),
+ jetArea_(0),
+ maxEInEmTowers_(0),
+ maxEInHadTowers_(0),
+ hadEnergyInHB_(0),
+ hadEnergyInHE_(0),
+ hadEnergyInHF_(0),
+ emEnergyInEB_(0),
+ emEnergyInEE_(0),
+ emEnergyInHF_(0),
+ towersArea_(0),
+ mvaDiscriminator_(0),
+ btagDiscriminator_(0) {}
+
+ //accessor functions
+ float pt() const { return pt_; }
+ float eta() const { return eta_; }
+ float phi() const { return phi_; }
+ float m() const { return m_; }
+ float jetArea() const { return jetArea_; }
+ float maxEInEmTowers() const { return maxEInEmTowers_; }
+ float maxEInHadTowers() const { return maxEInHadTowers_; }
+ float hadEnergyInHB() const { return hadEnergyInHB_; }
+ float hadEnergyInHE() const { return hadEnergyInHE_; }
+ float hadEnergyInHF() const { return hadEnergyInHF_; }
+ float emEnergyInEB() const { return emEnergyInEB_; }
+ float emEnergyInEE() const { return emEnergyInEE_; }
+ float emEnergyInHF() const { return emEnergyInHF_; }
+ float towersArea() const { return towersArea_; }
+ float mvaDiscriminator() const { return mvaDiscriminator_; }
+ float btagDiscriminator() const { return btagDiscriminator_; }
+
+private:
+ float pt_;
+ float eta_;
+ float phi_;
+ float m_;
+ float jetArea_;
+ float maxEInEmTowers_;
+ float maxEInHadTowers_;
+ float hadEnergyInHB_;
+ float hadEnergyInHE_;
+ float hadEnergyInHF_;
+ float emEnergyInEB_;
+ float emEnergyInEE_;
+ float emEnergyInHF_;
+ float towersArea_;
+ float mvaDiscriminator_;
+ float btagDiscriminator_;
+};
+
+typedef std::vector Run3ScoutingCaloJetCollection;
+
+#endif
diff --git a/DataFormats/Scouting/interface/Run3ScoutingElectron.h b/DataFormats/Scouting/interface/Run3ScoutingElectron.h
new file mode 100644
index 0000000000000..d973b3f235370
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingElectron.h
@@ -0,0 +1,129 @@
+#ifndef DataFormats_Run3ScoutingElectron_h
+#define DataFormats_Run3ScoutingElectron_h
+
+#include
+
+// Class for holding electron information, for use in data scouting
+// IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingElectron {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingElectron(float pt,
+ float eta,
+ float phi,
+ float m,
+ float d0,
+ float dz,
+ float dEtaIn,
+ float dPhiIn,
+ float sigmaIetaIeta,
+ float hOverE,
+ float ooEMOop,
+ int missingHits,
+ int charge,
+ float ecalIso,
+ float hcalIso,
+ float trackIso,
+ float r9,
+ float sMin,
+ float sMaj,
+ unsigned int seedId,
+ std::vector energyMatrix,
+ std::vector timingMatrix)
+ : pt_(pt),
+ eta_(eta),
+ phi_(phi),
+ m_(m),
+ d0_(d0),
+ dz_(dz),
+ dEtaIn_(dEtaIn),
+ dPhiIn_(dPhiIn),
+ sigmaIetaIeta_(sigmaIetaIeta),
+ hOverE_(hOverE),
+ ooEMOop_(ooEMOop),
+ missingHits_(missingHits),
+ charge_(charge),
+ ecalIso_(ecalIso),
+ hcalIso_(hcalIso),
+ trackIso_(trackIso),
+ r9_(r9),
+ sMin_(sMin),
+ sMaj_(sMaj),
+ seedId_(seedId),
+ energyMatrix_(std::move(energyMatrix)),
+ timingMatrix_(std::move(timingMatrix)) {}
+ //default constructor
+ Run3ScoutingElectron()
+ : pt_(0),
+ eta_(0),
+ phi_(0),
+ m_(0),
+ d0_(0),
+ dz_(0),
+ dEtaIn_(0),
+ dPhiIn_(0),
+ sigmaIetaIeta_(0),
+ hOverE_(0),
+ ooEMOop_(0),
+ missingHits_(0),
+ charge_(0),
+ ecalIso_(0),
+ hcalIso_(0),
+ trackIso_(0),
+ r9_(0),
+ sMin_(0),
+ sMaj_(0),
+ seedId_(0) {}
+
+ //accessor functions
+ float pt() const { return pt_; }
+ float eta() const { return eta_; }
+ float phi() const { return phi_; }
+ float m() const { return m_; }
+ float d0() const { return d0_; }
+ float dz() const { return dz_; }
+ float dEtaIn() const { return dEtaIn_; }
+ float dPhiIn() const { return dPhiIn_; }
+ float sigmaIetaIeta() const { return sigmaIetaIeta_; }
+ float hOverE() const { return hOverE_; }
+ float ooEMOop() const { return ooEMOop_; }
+ int missingHits() const { return missingHits_; }
+ int charge() const { return charge_; }
+ float ecalIso() const { return ecalIso_; }
+ float hcalIso() const { return hcalIso_; }
+ float trackIso() const { return trackIso_; }
+ float r9() const { return r9_; }
+ float sMin() const { return sMin_; }
+ float sMaj() const { return sMaj_; }
+ unsigned int seedId() const { return seedId_; }
+ std::vector const& energyMatrix() const { return energyMatrix_; }
+ std::vector const& timingMatrix() const { return timingMatrix_; }
+
+private:
+ float pt_;
+ float eta_;
+ float phi_;
+ float m_;
+ float d0_;
+ float dz_;
+ float dEtaIn_;
+ float dPhiIn_;
+ float sigmaIetaIeta_;
+ float hOverE_;
+ float ooEMOop_;
+ int missingHits_;
+ int charge_;
+ float ecalIso_;
+ float hcalIso_;
+ float trackIso_;
+ float r9_;
+ float sMin_;
+ float sMaj_;
+ unsigned int seedId_;
+ std::vector energyMatrix_;
+ std::vector timingMatrix_;
+};
+
+typedef std::vector Run3ScoutingElectronCollection;
+
+#endif
diff --git a/DataFormats/Scouting/interface/Run3ScoutingMuon.h b/DataFormats/Scouting/interface/Run3ScoutingMuon.h
new file mode 100644
index 0000000000000..85e67d553a16e
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingMuon.h
@@ -0,0 +1,304 @@
+#ifndef DataFormats_Run3ScoutingMuon_h
+#define DataFormats_Run3ScoutingMuon_h
+
+#include
+#include "DataFormats/TrackReco/interface/Track.h"
+
+// Class for holding muon information, for use in data scouting
+// IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingMuon {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingMuon(float pt,
+ float eta,
+ float phi,
+ float m,
+ unsigned int type,
+ int charge,
+ float normalizedChi2,
+ float ecalIso,
+ float hcalIso,
+ float trackIso,
+ int nValidStandAloneMuonHits,
+ int nStandAloneMuonMatchedStations,
+ int nValidRecoMuonHits,
+ int nRecoMuonChambers,
+ int nRecoMuonChambersCSCorDT,
+ int nRecoMuonMatches,
+ int nRecoMuonMatchedStations,
+ unsigned int nRecoMuonExpectedMatchedStations,
+ unsigned int recoMuonStationMask,
+ int nRecoMuonMatchedRPCLayers,
+ unsigned int recoMuonRPClayerMask,
+ int nValidPixelHits,
+ int nValidStripHits,
+ int nPixelLayersWithMeasurement,
+ int nTrackerLayersWithMeasurement,
+ float trk_chi2,
+ float trk_ndof,
+ float trk_dxy,
+ float trk_dz,
+ float trk_qoverp,
+ float trk_lambda,
+ float trk_pt,
+ float trk_phi,
+ float trk_eta,
+ float trk_dxyError,
+ float trk_dzError,
+ float trk_qoverpError,
+ float trk_lambdaError,
+ float trk_phiError,
+ float trk_dsz,
+ float trk_dszError,
+ float trk_qoverp_lambda_cov,
+ float trk_qoverp_phi_cov,
+ float trk_qoverp_dxy_cov,
+ float trk_qoverp_dsz_cov,
+ float trk_lambda_phi_cov,
+ float trk_lambda_dxy_cov,
+ float trk_lambda_dsz_cov,
+ float trk_phi_dxy_cov,
+ float trk_phi_dsz_cov,
+ float trk_dxy_dsz_cov,
+ float trk_vx,
+ float trk_vy,
+ float trk_vz,
+ reco::HitPattern trk_hitPattern,
+ std::vector vtxIndx)
+ : pt_(pt),
+ eta_(eta),
+ phi_(phi),
+ m_(m),
+ type_(type),
+ charge_(charge),
+ normalizedChi2_(normalizedChi2),
+ ecalIso_(ecalIso),
+ hcalIso_(hcalIso),
+ trackIso_(trackIso),
+ nValidStandAloneMuonHits_(nValidStandAloneMuonHits),
+ nStandAloneMuonMatchedStations_(nStandAloneMuonMatchedStations),
+ nValidRecoMuonHits_(nValidRecoMuonHits),
+ nRecoMuonChambers_(nRecoMuonChambers),
+ nRecoMuonChambersCSCorDT_(nRecoMuonChambersCSCorDT),
+ nRecoMuonMatches_(nRecoMuonMatches),
+ nRecoMuonMatchedStations_(nRecoMuonMatchedStations),
+ nRecoMuonExpectedMatchedStations_(nRecoMuonExpectedMatchedStations),
+ recoMuonStationMask_(recoMuonStationMask),
+ nRecoMuonMatchedRPCLayers_(nRecoMuonMatchedRPCLayers),
+ recoMuonRPClayerMask_(recoMuonRPClayerMask),
+ nValidPixelHits_(nValidPixelHits),
+ nValidStripHits_(nValidStripHits),
+ nPixelLayersWithMeasurement_(nPixelLayersWithMeasurement),
+ nTrackerLayersWithMeasurement_(nTrackerLayersWithMeasurement),
+ trk_chi2_(trk_chi2),
+ trk_ndof_(trk_ndof),
+ trk_dxy_(trk_dxy),
+ trk_dz_(trk_dz),
+ trk_qoverp_(trk_qoverp),
+ trk_lambda_(trk_lambda),
+ trk_pt_(trk_pt),
+ trk_phi_(trk_phi),
+ trk_eta_(trk_eta),
+ trk_dxyError_(trk_dxyError),
+ trk_dzError_(trk_dzError),
+ trk_qoverpError_(trk_qoverpError),
+ trk_lambdaError_(trk_lambdaError),
+ trk_phiError_(trk_phiError),
+ trk_dsz_(trk_dsz),
+ trk_dszError_(trk_dszError),
+ trk_qoverp_lambda_cov_(trk_qoverp_lambda_cov),
+ trk_qoverp_phi_cov_(trk_qoverp_phi_cov),
+ trk_qoverp_dxy_cov_(trk_qoverp_dxy_cov),
+ trk_qoverp_dsz_cov_(trk_qoverp_dsz_cov),
+ trk_lambda_phi_cov_(trk_lambda_phi_cov),
+ trk_lambda_dxy_cov_(trk_lambda_dxy_cov),
+ trk_lambda_dsz_cov_(trk_lambda_dsz_cov),
+ trk_phi_dxy_cov_(trk_phi_dxy_cov),
+ trk_phi_dsz_cov_(trk_phi_dsz_cov),
+ trk_dxy_dsz_cov_(trk_dxy_dsz_cov),
+ trk_vx_(trk_vx),
+ trk_vy_(trk_vy),
+ trk_vz_(trk_vz),
+ trk_hitPattern_(trk_hitPattern),
+ vtxIndx_(std::move(vtxIndx)) {}
+ //default constructor
+ Run3ScoutingMuon()
+ : pt_(0),
+ eta_(0),
+ phi_(0),
+ m_(0),
+ type_(0),
+ charge_(0),
+ normalizedChi2_(0),
+ ecalIso_(0),
+ hcalIso_(0),
+ trackIso_(0),
+ nValidStandAloneMuonHits_(0),
+ nStandAloneMuonMatchedStations_(0),
+ nValidRecoMuonHits_(0),
+ nRecoMuonChambers_(0),
+ nRecoMuonChambersCSCorDT_(0),
+ nRecoMuonMatches_(0),
+ nRecoMuonMatchedStations_(0),
+ nRecoMuonExpectedMatchedStations_(0),
+ recoMuonStationMask_(0),
+ nRecoMuonMatchedRPCLayers_(0),
+ recoMuonRPClayerMask_(0),
+ nValidPixelHits_(0),
+ nValidStripHits_(0),
+ nPixelLayersWithMeasurement_(0),
+ nTrackerLayersWithMeasurement_(0),
+ trk_chi2_(0),
+ trk_ndof_(0),
+ trk_dxy_(0),
+ trk_dz_(0),
+ trk_qoverp_(0),
+ trk_lambda_(0),
+ trk_pt_(0),
+ trk_phi_(0),
+ trk_eta_(0),
+ trk_dxyError_(0),
+ trk_dzError_(0),
+ trk_qoverpError_(0),
+ trk_lambdaError_(0),
+ trk_phiError_(0),
+ trk_dsz_(0),
+ trk_dszError_(0),
+ trk_qoverp_lambda_cov_(0),
+ trk_qoverp_phi_cov_(0),
+ trk_qoverp_dxy_cov_(0),
+ trk_qoverp_dsz_cov_(0),
+ trk_lambda_phi_cov_(0),
+ trk_lambda_dxy_cov_(0),
+ trk_lambda_dsz_cov_(0),
+ trk_phi_dxy_cov_(0),
+ trk_phi_dsz_cov_(0),
+ trk_dxy_dsz_cov_(0),
+ trk_vx_(0),
+ trk_vy_(0),
+ trk_vz_(0),
+ vtxIndx_(0) {}
+
+ //accessor functions
+ float pt() const { return pt_; }
+ float eta() const { return eta_; }
+ float phi() const { return phi_; }
+ float m() const { return m_; }
+ unsigned int type() const { return type_; }
+ bool isGlobalMuon() const { return type_ & 1 << 1; }
+ bool isTrackerMuon() const { return type_ & 1 << 2; }
+ int charge() const { return charge_; }
+ float normalizedChi2() const { return normalizedChi2_; }
+ float ecalIso() const { return ecalIso_; }
+ float hcalIso() const { return hcalIso_; }
+ float trackIso() const { return trackIso_; }
+ int nValidStandAloneMuonHits() const { return nValidStandAloneMuonHits_; }
+ int nStandAloneMuonMatchedStations() const { return nStandAloneMuonMatchedStations_; }
+ int nValidRecoMuonHits() const { return nValidRecoMuonHits_; }
+ int nRecoMuonChambers() const { return nRecoMuonChambers_; }
+ int nRecoMuonChambersCSCorDT() const { return nRecoMuonChambersCSCorDT_; }
+ int nRecoMuonMatches() const { return nRecoMuonMatches_; }
+ int nRecoMuonMatchedStations() const { return nRecoMuonMatchedStations_; }
+ unsigned int nRecoMuonExpectedMatchedStations() const { return nRecoMuonExpectedMatchedStations_; }
+ unsigned int recoMuonStationMask() const { return recoMuonStationMask_; }
+ int nRecoMuonMatchedRPCLayers() const { return nRecoMuonMatchedRPCLayers_; }
+ unsigned int recoMuonRPClayerMask() const { return recoMuonRPClayerMask_; }
+ int nValidPixelHits() const { return nValidPixelHits_; }
+ int nValidStripHits() const { return nValidStripHits_; }
+ int nPixelLayersWithMeasurement() const { return nPixelLayersWithMeasurement_; }
+ int nTrackerLayersWithMeasurement() const { return nTrackerLayersWithMeasurement_; }
+ float trk_chi2() const { return trk_chi2_; }
+ float trk_ndof() const { return trk_ndof_; }
+ float trk_dxy() const { return trk_dxy_; }
+ float trk_dz() const { return trk_dz_; }
+ float trk_qoverp() const { return trk_qoverp_; }
+ float trk_lambda() const { return trk_lambda_; }
+ float trk_pt() const { return trk_pt_; }
+ float trk_phi() const { return trk_phi_; }
+ float trk_eta() const { return trk_eta_; }
+ float trk_dxyError() const { return trk_dxyError_; }
+ float trk_dzError() const { return trk_dzError_; }
+ float trk_qoverpError() const { return trk_qoverpError_; }
+ float trk_lambdaError() const { return trk_lambdaError_; }
+ float trk_phiError() const { return trk_phiError_; }
+ float trk_dsz() const { return trk_dsz_; }
+ float trk_dszError() const { return trk_dszError_; }
+ //add off-diagonal covariance matrix parameter, the above "Error" variables correspond to the diagonal, enum for Cov matrix (qoverp, lambda, phi, dxy, dsz), see https://github.com/cms-sw/cmssw/blob/CMSSW_11_2_X/DataFormats/TrackReco/src/TrackBase.cc for details
+ float trk_qoverp_lambda_cov() const { return trk_qoverp_lambda_cov_; }
+ float trk_qoverp_phi_cov() const { return trk_qoverp_phi_cov_; }
+ float trk_qoverp_dxy_cov() const { return trk_qoverp_dxy_cov_; }
+ float trk_qoverp_dsz_cov() const { return trk_qoverp_dsz_cov_; }
+ float trk_lambda_phi_cov() const { return trk_lambda_phi_cov_; }
+ float trk_lambda_dxy_cov() const { return trk_lambda_dxy_cov_; }
+ float trk_lambda_dsz_cov() const { return trk_lambda_dsz_cov_; }
+ float trk_phi_dxy_cov() const { return trk_phi_dxy_cov_; }
+ float trk_phi_dsz_cov() const { return trk_phi_dsz_cov_; }
+ float trk_dxy_dsz_cov() const { return trk_dxy_dsz_cov_; }
+ float trk_vx() const { return trk_vx_; }
+ float trk_vy() const { return trk_vy_; }
+ float trk_vz() const { return trk_vz_; }
+ reco::HitPattern const& trk_hitPattern() const { return trk_hitPattern_; }
+ std::vector const& vtxIndx() const { return vtxIndx_; }
+
+private:
+ float pt_;
+ float eta_;
+ float phi_;
+ float m_;
+ unsigned int type_;
+ int charge_;
+ float normalizedChi2_;
+ float ecalIso_;
+ float hcalIso_;
+ float trackIso_;
+ int nValidStandAloneMuonHits_;
+ int nStandAloneMuonMatchedStations_;
+ int nValidRecoMuonHits_;
+ int nRecoMuonChambers_;
+ int nRecoMuonChambersCSCorDT_;
+ int nRecoMuonMatches_;
+ int nRecoMuonMatchedStations_;
+ unsigned int nRecoMuonExpectedMatchedStations_;
+ unsigned int recoMuonStationMask_;
+ int nRecoMuonMatchedRPCLayers_;
+ unsigned int recoMuonRPClayerMask_;
+ int nValidPixelHits_;
+ int nValidStripHits_;
+ int nPixelLayersWithMeasurement_;
+ int nTrackerLayersWithMeasurement_;
+ float trk_chi2_;
+ float trk_ndof_;
+ float trk_dxy_;
+ float trk_dz_;
+ float trk_qoverp_;
+ float trk_lambda_;
+ float trk_pt_;
+ float trk_phi_;
+ float trk_eta_;
+ float trk_dxyError_;
+ float trk_dzError_;
+ float trk_qoverpError_;
+ float trk_lambdaError_;
+ float trk_phiError_;
+ float trk_dsz_;
+ float trk_dszError_;
+ float trk_qoverp_lambda_cov_;
+ float trk_qoverp_phi_cov_;
+ float trk_qoverp_dxy_cov_;
+ float trk_qoverp_dsz_cov_;
+ float trk_lambda_phi_cov_;
+ float trk_lambda_dxy_cov_;
+ float trk_lambda_dsz_cov_;
+ float trk_phi_dxy_cov_;
+ float trk_phi_dsz_cov_;
+ float trk_dxy_dsz_cov_;
+ float trk_vx_;
+ float trk_vy_;
+ float trk_vz_;
+ reco::HitPattern trk_hitPattern_;
+ std::vector vtxIndx_;
+};
+
+typedef std::vector Run3ScoutingMuonCollection;
+
+#endif
diff --git a/DataFormats/Scouting/interface/Run3ScoutingPFJet.h b/DataFormats/Scouting/interface/Run3ScoutingPFJet.h
new file mode 100644
index 0000000000000..3ca6f3e0b9551
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingPFJet.h
@@ -0,0 +1,135 @@
+#ifndef DataFormats_Run3ScoutingPFJet_h
+#define DataFormats_Run3ScoutingPFJet_h
+
+#include
+
+//class for holding PF jet information, for use in data scouting
+//IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingPFJet {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingPFJet(float pt,
+ float eta,
+ float phi,
+ float m,
+ float jetArea,
+ float chargedHadronEnergy,
+ float neutralHadronEnergy,
+ float photonEnergy,
+ float electronEnergy,
+ float muonEnergy,
+ float HFHadronEnergy,
+ float HFEMEnergy,
+ int chargedHadronMultiplicity,
+ int neutralHadronMultiplicity,
+ int photonMultiplicity,
+ int electronMultiplicity,
+ int muonMultiplicity,
+ int HFHadronMultiplicity,
+ int HFEMMultiplicity,
+ float HOEnergy,
+ float csv,
+ float mvaDiscriminator,
+ std::vector constituents)
+ : pt_(pt),
+ eta_(eta),
+ phi_(phi),
+ m_(m),
+ jetArea_(jetArea),
+ chargedHadronEnergy_(chargedHadronEnergy),
+ neutralHadronEnergy_(neutralHadronEnergy),
+ photonEnergy_(photonEnergy),
+ electronEnergy_(electronEnergy),
+ muonEnergy_(muonEnergy),
+ HFHadronEnergy_(HFHadronEnergy),
+ HFEMEnergy_(HFEMEnergy),
+ chargedHadronMultiplicity_(chargedHadronMultiplicity),
+ neutralHadronMultiplicity_(neutralHadronMultiplicity),
+ photonMultiplicity_(photonMultiplicity),
+ electronMultiplicity_(electronMultiplicity),
+ muonMultiplicity_(muonMultiplicity),
+ HFHadronMultiplicity_(HFHadronMultiplicity),
+ HFEMMultiplicity_(HFEMMultiplicity),
+ HOEnergy_(HOEnergy),
+ csv_(csv),
+ mvaDiscriminator_(mvaDiscriminator),
+ constituents_(std::move(constituents)) {}
+ //default constructor
+ Run3ScoutingPFJet()
+ : pt_(0),
+ eta_(0),
+ phi_(0),
+ m_(0),
+ jetArea_(0),
+ chargedHadronEnergy_(0),
+ neutralHadronEnergy_(0),
+ photonEnergy_(0),
+ electronEnergy_(0),
+ muonEnergy_(0),
+ HFHadronEnergy_(0),
+ HFEMEnergy_(0),
+ chargedHadronMultiplicity_(0),
+ neutralHadronMultiplicity_(0),
+ photonMultiplicity_(0),
+ electronMultiplicity_(0),
+ muonMultiplicity_(0),
+ HFHadronMultiplicity_(0),
+ HFEMMultiplicity_(0),
+ HOEnergy_(0),
+ csv_(0),
+ mvaDiscriminator_(0) {}
+
+ //accessor functions
+ float pt() const { return pt_; }
+ float eta() const { return eta_; }
+ float phi() const { return phi_; }
+ float m() const { return m_; }
+ float jetArea() const { return jetArea_; }
+ float chargedHadronEnergy() const { return chargedHadronEnergy_; }
+ float neutralHadronEnergy() const { return neutralHadronEnergy_; }
+ float photonEnergy() const { return photonEnergy_; }
+ float electronEnergy() const { return electronEnergy_; }
+ float muonEnergy() const { return muonEnergy_; }
+ float HFHadronEnergy() const { return HFHadronEnergy_; }
+ float HFEMEnergy() const { return HFEMEnergy_; }
+ int chargedHadronMultiplicity() const { return chargedHadronMultiplicity_; }
+ int neutralHadronMultiplicity() const { return neutralHadronMultiplicity_; }
+ int photonMultiplicity() const { return photonMultiplicity_; }
+ int electronMultiplicity() const { return electronMultiplicity_; }
+ int muonMultiplicity() const { return muonMultiplicity_; }
+ int HFHadronMultiplicity() const { return HFHadronMultiplicity_; }
+ int HFEMMultiplicity() const { return HFEMMultiplicity_; }
+ float HOEnergy() const { return HOEnergy_; }
+ float csv() const { return csv_; }
+ float mvaDiscriminator() const { return mvaDiscriminator_; }
+ std::vector const& constituents() const { return constituents_; }
+
+private:
+ float pt_;
+ float eta_;
+ float phi_;
+ float m_;
+ float jetArea_;
+ float chargedHadronEnergy_;
+ float neutralHadronEnergy_;
+ float photonEnergy_;
+ float electronEnergy_;
+ float muonEnergy_;
+ float HFHadronEnergy_;
+ float HFEMEnergy_;
+ int chargedHadronMultiplicity_;
+ int neutralHadronMultiplicity_;
+ int photonMultiplicity_;
+ int electronMultiplicity_;
+ int muonMultiplicity_;
+ int HFHadronMultiplicity_;
+ int HFEMMultiplicity_;
+ float HOEnergy_;
+ float csv_;
+ float mvaDiscriminator_;
+ std::vector constituents_;
+};
+
+typedef std::vector Run3ScoutingPFJetCollection;
+
+#endif
diff --git a/DataFormats/Scouting/interface/Run3ScoutingParticle.h b/DataFormats/Scouting/interface/Run3ScoutingParticle.h
new file mode 100644
index 0000000000000..4ebcf71d8f823
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingParticle.h
@@ -0,0 +1,35 @@
+#ifndef DataFormats_Run3ScoutingParticle_h
+#define DataFormats_Run3ScoutingParticle_h
+
+#include
+
+//class for holding PF candidate information, for use in data scouting
+//IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingParticle {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingParticle(float pt, float eta, float phi, float m, int pdgId, int vertex)
+ : pt_(pt), eta_(eta), phi_(phi), m_(m), pdgId_(pdgId), vertex_(vertex) {}
+ //default constructor
+ Run3ScoutingParticle() : pt_(0), eta_(0), phi_(0), m_(0), pdgId_(0), vertex_(-1) {}
+
+ //accessor functions
+ float pt() const { return pt_; }
+ float eta() const { return eta_; }
+ float phi() const { return phi_; }
+ float m() const { return m_; }
+ int pdgId() const { return pdgId_; }
+ int vertex() const { return vertex_; }
+
+private:
+ float pt_;
+ float eta_;
+ float phi_;
+ float m_;
+ int pdgId_;
+ int vertex_;
+};
+
+typedef std::vector Run3ScoutingParticleCollection;
+
+#endif
diff --git a/DataFormats/Scouting/interface/Run3ScoutingPhoton.h b/DataFormats/Scouting/interface/Run3ScoutingPhoton.h
new file mode 100644
index 0000000000000..f0e4971e06c81
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingPhoton.h
@@ -0,0 +1,96 @@
+#ifndef DataFormats_Run3ScoutingPhoton_h
+#define DataFormats_Run3ScoutingPhoton_h
+
+#include
+
+// Class for holding photon information, for use in data scouting
+// IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingPhoton {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingPhoton(float pt,
+ float eta,
+ float phi,
+ float m,
+ float sigmaIetaIeta,
+ float hOverE,
+ float ecalIso,
+ float hcalIso,
+ float trkIso,
+ float r9,
+ float sMin,
+ float sMaj,
+ unsigned int seedId,
+ std::vector energyMatrix,
+ std::vector timingMatrix)
+ : pt_(pt),
+ eta_(eta),
+ phi_(phi),
+ m_(m),
+ sigmaIetaIeta_(sigmaIetaIeta),
+ hOverE_(hOverE),
+ ecalIso_(ecalIso),
+ hcalIso_(hcalIso),
+ trkIso_(trkIso),
+ r9_(r9),
+ sMin_(sMin),
+ sMaj_(sMaj),
+ seedId_(seedId),
+ energyMatrix_(std::move(energyMatrix)),
+ timingMatrix_(std::move(timingMatrix)) {}
+ //default constructor
+ Run3ScoutingPhoton()
+ : pt_(0),
+ eta_(0),
+ phi_(0),
+ m_(0),
+ sigmaIetaIeta_(0),
+ hOverE_(0),
+ ecalIso_(0),
+ hcalIso_(0),
+ trkIso_(0),
+ r9_(0),
+ sMin_(0),
+ sMaj_(0),
+ seedId_(0),
+ energyMatrix_(0),
+ timingMatrix_(0) {}
+
+ //accessor functions
+ float pt() const { return pt_; }
+ float eta() const { return eta_; }
+ float phi() const { return phi_; }
+ float m() const { return m_; }
+ float sigmaIetaIeta() const { return sigmaIetaIeta_; }
+ float hOverE() const { return hOverE_; }
+ float ecalIso() const { return ecalIso_; }
+ float hcalIso() const { return hcalIso_; }
+ float trkIso() const { return trkIso_; }
+ float r9() const { return r9_; }
+ float sMin() const { return sMin_; }
+ float sMaj() const { return sMaj_; }
+ float seedId() const { return seedId_; }
+ std::vector const& energyMatrix() const { return energyMatrix_; }
+ std::vector const& timingMatrix() const { return timingMatrix_; }
+
+private:
+ float pt_;
+ float eta_;
+ float phi_;
+ float m_;
+ float sigmaIetaIeta_;
+ float hOverE_;
+ float ecalIso_;
+ float hcalIso_;
+ float trkIso_;
+ float r9_;
+ float sMin_;
+ float sMaj_;
+ unsigned int seedId_;
+ std::vector energyMatrix_;
+ std::vector timingMatrix_;
+};
+
+typedef std::vector Run3ScoutingPhotonCollection;
+
+#endif
diff --git a/DataFormats/Scouting/interface/Run3ScoutingTrack.h b/DataFormats/Scouting/interface/Run3ScoutingTrack.h
new file mode 100644
index 0000000000000..1e310d65b7582
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingTrack.h
@@ -0,0 +1,192 @@
+#ifndef DataFormats_Run3ScoutingTrack_h
+#define DataFormats_Run3ScoutingTrack_h
+
+#include
+
+//class for holding track information, for use in data scouting
+// IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingTrack {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingTrack(float tk_pt,
+ float tk_eta,
+ float tk_phi,
+ float tk_chi2,
+ float tk_ndof,
+ int tk_charge,
+ float tk_dxy,
+ float tk_dz,
+ int tk_nValidPixelHits,
+ int tk_nTrackerLayersWithMeasurement,
+ int tk_nValidStripHits,
+ float tk_qoverp,
+ float tk_lambda,
+ float tk_dxy_Error,
+ float tk_dz_Error,
+ float tk_qoverp_Error,
+ float tk_lambda_Error,
+ float tk_phi_Error,
+ float tk_dsz,
+ float tk_dsz_Error,
+ float tk_qoverp_lambda_cov,
+ float tk_qoverp_phi_cov,
+ float tk_qoverp_dxy_cov,
+ float tk_qoverp_dsz_cov,
+ float tk_lambda_phi_cov,
+ float tk_lambda_dxy_cov,
+ float tk_lambda_dsz_cov,
+ float tk_phi_dxy_cov,
+ float tk_phi_dsz_cov,
+ float tk_dxy_dsz_cov,
+ int tk_vtxInd,
+ float tk_vx,
+ float tk_vy,
+ float tk_vz)
+ : tk_pt_(tk_pt),
+ tk_eta_(tk_eta),
+ tk_phi_(tk_phi),
+ tk_chi2_(tk_chi2),
+ tk_ndof_(tk_ndof),
+ tk_charge_(tk_charge),
+ tk_dxy_(tk_dxy),
+ tk_dz_(tk_dz),
+ tk_nValidPixelHits_(tk_nValidPixelHits),
+ tk_nTrackerLayersWithMeasurement_(tk_nTrackerLayersWithMeasurement),
+ tk_nValidStripHits_(tk_nValidStripHits),
+ tk_qoverp_(tk_qoverp),
+ tk_lambda_(tk_lambda),
+ tk_dxy_Error_(tk_dxy_Error),
+ tk_dz_Error_(tk_dz_Error),
+ tk_qoverp_Error_(tk_qoverp_Error),
+ tk_lambda_Error_(tk_lambda_Error),
+ tk_phi_Error_(tk_phi_Error),
+ tk_dsz_(tk_dsz),
+ tk_dsz_Error_(tk_dsz_Error),
+ tk_qoverp_lambda_cov_(tk_qoverp_lambda_cov),
+ tk_qoverp_phi_cov_(tk_qoverp_phi_cov),
+ tk_qoverp_dxy_cov_(tk_qoverp_dxy_cov),
+ tk_qoverp_dsz_cov_(tk_qoverp_dsz_cov),
+ tk_lambda_phi_cov_(tk_lambda_phi_cov),
+ tk_lambda_dxy_cov_(tk_lambda_dxy_cov),
+ tk_lambda_dsz_cov_(tk_lambda_dsz_cov),
+ tk_phi_dxy_cov_(tk_phi_dxy_cov),
+ tk_phi_dsz_cov_(tk_phi_dsz_cov),
+ tk_dxy_dsz_cov_(tk_dxy_dsz_cov),
+ tk_vtxInd_(tk_vtxInd),
+ tk_vx_(tk_vx),
+ tk_vy_(tk_vy),
+ tk_vz_(tk_vz) {}
+ //default constructor
+ Run3ScoutingTrack()
+ : tk_pt_(0),
+ tk_eta_(0),
+ tk_phi_(0),
+ tk_chi2_(0),
+ tk_ndof_(0),
+ tk_charge_(0),
+ tk_dxy_(0),
+ tk_dz_(0),
+ tk_nValidPixelHits_(0),
+ tk_nTrackerLayersWithMeasurement_(0),
+ tk_nValidStripHits_(0),
+ tk_qoverp_(0),
+ tk_lambda_(0),
+ tk_dxy_Error_(0),
+ tk_dz_Error_(0),
+ tk_qoverp_Error_(0),
+ tk_lambda_Error_(0),
+ tk_phi_Error_(0),
+ tk_dsz_(0),
+ tk_dsz_Error_(0),
+ tk_qoverp_lambda_cov_(0),
+ tk_qoverp_phi_cov_(0),
+ tk_qoverp_dxy_cov_(0),
+ tk_qoverp_dsz_cov_(0),
+ tk_lambda_phi_cov_(0),
+ tk_lambda_dxy_cov_(0),
+ tk_lambda_dsz_cov_(0),
+ tk_phi_dxy_cov_(0),
+ tk_phi_dsz_cov_(0),
+ tk_dxy_dsz_cov_(0),
+ tk_vtxInd_(0),
+ tk_vx_(0),
+ tk_vy_(0),
+ tk_vz_(0) {}
+
+ //accessor functions
+ float tk_pt() const { return tk_pt_; }
+ float tk_eta() const { return tk_eta_; }
+ float tk_phi() const { return tk_phi_; }
+ float tk_chi2() const { return tk_chi2_; }
+ float tk_ndof() const { return tk_ndof_; }
+ int tk_charge() const { return tk_charge_; }
+ float tk_dxy() const { return tk_dxy_; }
+ float tk_dz() const { return tk_dz_; }
+ int tk_nValidPixelHits() const { return tk_nValidPixelHits_; }
+ int tk_nTrackerLayersWithMeasurement() const { return tk_nTrackerLayersWithMeasurement_; }
+ int tk_nValidStripHits() const { return tk_nValidStripHits_; }
+ float tk_qoverp() const { return tk_qoverp_; }
+ float tk_lambda() const { return tk_lambda_; }
+ float tk_dxy_Error() const { return tk_dxy_Error_; }
+ float tk_dz_Error() const { return tk_dz_Error_; }
+ float tk_qoverp_Error() const { return tk_qoverp_Error_; }
+ float tk_lambda_Error() const { return tk_lambda_Error_; }
+ float tk_phi_Error() const { return tk_phi_Error_; }
+ float tk_dsz() const { return tk_dsz_; }
+ float tk_dsz_Error() const { return tk_dsz_Error_; }
+ //add off-diagonal covariance matrix parameter, the above "Error" variables correspond to the diagonal, enum for Cov matrix (qoverp, lambda, phi, dxy, dsz), see https://github.com/cms-sw/cmssw/blob/CMSSW_11_2_X/DataFormats/TrackReco/src/TrackBase.cc for details
+ float tk_qoverp_lambda_cov() const { return tk_qoverp_lambda_cov_; }
+ float tk_qoverp_phi_cov() const { return tk_qoverp_phi_cov_; }
+ float tk_qoverp_dxy_cov() const { return tk_qoverp_dxy_cov_; }
+ float tk_qoverp_dsz_cov() const { return tk_qoverp_dsz_cov_; }
+ float tk_lambda_phi_cov() const { return tk_lambda_phi_cov_; }
+ float tk_lambda_dxy_cov() const { return tk_lambda_dxy_cov_; }
+ float tk_lambda_dsz_cov() const { return tk_lambda_dsz_cov_; }
+ float tk_phi_dxy_cov() const { return tk_phi_dxy_cov_; }
+ float tk_phi_dsz_cov() const { return tk_phi_dsz_cov_; }
+ float tk_dxy_dsz_cov() const { return tk_dxy_dsz_cov_; }
+ int tk_vtxInd() const { return tk_vtxInd_; }
+ float tk_vx() const { return tk_vx_; }
+ float tk_vy() const { return tk_vy_; }
+ float tk_vz() const { return tk_vz_; }
+
+private:
+ float tk_pt_;
+ float tk_eta_;
+ float tk_phi_;
+ float tk_chi2_;
+ float tk_ndof_;
+ int tk_charge_;
+ float tk_dxy_;
+ float tk_dz_;
+ int tk_nValidPixelHits_;
+ int tk_nTrackerLayersWithMeasurement_;
+ int tk_nValidStripHits_;
+ float tk_qoverp_;
+ float tk_lambda_;
+ float tk_dxy_Error_;
+ float tk_dz_Error_;
+ float tk_qoverp_Error_;
+ float tk_lambda_Error_;
+ float tk_phi_Error_;
+ float tk_dsz_;
+ float tk_dsz_Error_;
+ float tk_qoverp_lambda_cov_;
+ float tk_qoverp_phi_cov_;
+ float tk_qoverp_dxy_cov_;
+ float tk_qoverp_dsz_cov_;
+ float tk_lambda_phi_cov_;
+ float tk_lambda_dxy_cov_;
+ float tk_lambda_dsz_cov_;
+ float tk_phi_dxy_cov_;
+ float tk_phi_dsz_cov_;
+ float tk_dxy_dsz_cov_;
+ int tk_vtxInd_;
+ float tk_vx_;
+ float tk_vy_;
+ float tk_vz_;
+};
+
+typedef std::vector Run3ScoutingTrackCollection;
+
+#endif
diff --git a/DataFormats/Scouting/interface/Run3ScoutingVertex.h b/DataFormats/Scouting/interface/Run3ScoutingVertex.h
new file mode 100644
index 0000000000000..0f5ffebfcba9f
--- /dev/null
+++ b/DataFormats/Scouting/interface/Run3ScoutingVertex.h
@@ -0,0 +1,71 @@
+#ifndef DataFormats_Run3ScoutingVertex_h
+#define DataFormats_Run3ScoutingVertex_h
+
+#include
+
+//class for holding vertex information, for use in data scouting
+//IMPORTANT: the content of this class should be changed only in backwards compatible ways!
+class Run3ScoutingVertex {
+public:
+ //constructor with values for all data fields
+ Run3ScoutingVertex(float x,
+ float y,
+ float z,
+ float zError,
+ float xError,
+ float yError,
+ int tracksSize,
+ float chi2,
+ int ndof,
+ bool isValidVtx)
+ : x_(x),
+ y_(y),
+ z_(z),
+ zError_(zError),
+ xError_(xError),
+ yError_(yError),
+ tracksSize_(tracksSize),
+ chi2_(chi2),
+ ndof_(ndof),
+ isValidVtx_(isValidVtx) {}
+ //default constructor
+ Run3ScoutingVertex()
+ : x_(0),
+ y_(0),
+ z_(0),
+ zError_(0),
+ xError_(0),
+ yError_(0),
+ tracksSize_(0),
+ chi2_(0),
+ ndof_(0),
+ isValidVtx_(false) {}
+
+ //accessor functions
+ float x() const { return x_; }
+ float y() const { return y_; }
+ float z() const { return z_; }
+ float zError() const { return zError_; }
+ float xError() const { return xError_; }
+ float yError() const { return yError_; }
+ int tracksSize() const { return tracksSize_; }
+ float chi2() const { return chi2_; }
+ int ndof() const { return ndof_; }
+ bool isValidVtx() const { return isValidVtx_; }
+
+private:
+ float x_;
+ float y_;
+ float z_;
+ float zError_;
+ float xError_;
+ float yError_;
+ int tracksSize_;
+ float chi2_;
+ int ndof_;
+ bool isValidVtx_;
+};
+
+typedef std::vector Run3ScoutingVertexCollection;
+
+#endif
diff --git a/DataFormats/Scouting/src/classes.h b/DataFormats/Scouting/src/classes.h
index 9e3ff39e7ea89..1243b1da0bf7e 100644
--- a/DataFormats/Scouting/src/classes.h
+++ b/DataFormats/Scouting/src/classes.h
@@ -6,5 +6,13 @@
#include "DataFormats/Scouting/interface/ScoutingElectron.h"
#include "DataFormats/Scouting/interface/ScoutingMuon.h"
#include "DataFormats/Scouting/interface/ScoutingPhoton.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingCaloJet.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingPFJet.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingParticle.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingTrack.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingVertex.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingElectron.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingMuon.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingPhoton.h"
#include "DataFormats/Common/interface/Wrapper.h"
#include "DataFormats/Common/interface/Ref.h"
diff --git a/DataFormats/Scouting/src/classes_def.xml b/DataFormats/Scouting/src/classes_def.xml
index 1e94bbf80b77b..e5810d434b250 100755
--- a/DataFormats/Scouting/src/classes_def.xml
+++ b/DataFormats/Scouting/src/classes_def.xml
@@ -26,7 +26,31 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -35,6 +59,14 @@
+
+
+
+
+
+
+
+
@@ -43,4 +75,12 @@
+
+
+
+
+
+
+
+
diff --git a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc
index 1b8106b087249..1db10bb1d818d 100644
--- a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc
+++ b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc
@@ -5,7 +5,7 @@
//
/**\class HLTScoutingEgammaProducer HLTScoutingEgammaProducer.cc HLTrigger/Egamma/src/HLTScoutingEgammaProducer.cc
-Description: Producer for ScoutingElectron and ScoutingPhoton
+Description: Producer for Run3ScoutingElectron and Run3ScoutingPhoton
*/
//
@@ -16,6 +16,29 @@ Description: Producer for ScoutingElectron and ScoutingPhoton
#include "HLTScoutingEgammaProducer.h"
+// function to find rechhit associated to detid and return energy
+float recHitE(const DetId id, const EcalRecHitCollection& recHits) {
+ if (id == DetId(0)) {
+ return 0;
+ } else {
+ EcalRecHitCollection::const_iterator it = recHits.find(id);
+ if (it != recHits.end())
+ return (*it).energy();
+ }
+ return 0;
+}
+
+float recHitT(const DetId id, const EcalRecHitCollection& recHits) {
+ if (id == DetId(0)) {
+ return 0;
+ } else {
+ EcalRecHitCollection::const_iterator it = recHits.find(id);
+ if (it != recHits.end())
+ return (*it).time();
+ }
+ return 0;
+}
+
//
// constructors and destructor
//
@@ -25,6 +48,7 @@ HLTScoutingEgammaProducer::HLTScoutingEgammaProducer(const edm::ParameterSet& iC
EgammaGsfTrackCollection_(
consumes(iConfig.getParameter("EgammaGsfTracks"))),
SigmaIEtaIEtaMap_(consumes(iConfig.getParameter("SigmaIEtaIEtaMap"))),
+ R9Map_(consumes(iConfig.getParameter("r9Map"))),
HoverEMap_(consumes(iConfig.getParameter("HoverEMap"))),
DetaMap_(consumes(iConfig.getParameter("DetaMap"))),
DphiMap_(consumes(iConfig.getParameter("DphiMap"))),
@@ -35,10 +59,15 @@ HLTScoutingEgammaProducer::HLTScoutingEgammaProducer(const edm::ParameterSet& iC
HcalPFClusterIsoMap_(consumes(iConfig.getParameter("HcalPFClusterIsoMap"))),
egammaPtCut(iConfig.getParameter("egammaPtCut")),
egammaEtaCut(iConfig.getParameter("egammaEtaCut")),
- egammaHoverECut(iConfig.getParameter("egammaHoverECut")) {
+ egammaHoverECut(iConfig.getParameter("egammaHoverECut")),
+ mantissaPrecision(iConfig.getParameter("mantissaPrecision")),
+ saveRecHitTiming(iConfig.getParameter("saveRecHitTiming")),
+ rechitMatrixSize(iConfig.getParameter("rechitMatrixSize")), //(2n+1)^2
+ ecalRechitEB_(consumes(iConfig.getParameter("ecalRechitEB"))),
+ ecalRechitEE_(consumes(iConfig.getParameter("ecalRechitEE"))) {
//register products
- produces();
- produces();
+ produces();
+ produces();
}
HLTScoutingEgammaProducer::~HLTScoutingEgammaProducer() = default;
@@ -47,8 +76,8 @@ HLTScoutingEgammaProducer::~HLTScoutingEgammaProducer() = default;
void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm::EventSetup const& setup) const {
using namespace edm;
- std::unique_ptr outElectrons(new ScoutingElectronCollection());
- std::unique_ptr outPhotons(new ScoutingPhotonCollection());
+ auto outElectrons = std::make_unique();
+ auto outPhotons = std::make_unique();
// Get RecoEcalCandidate
Handle EgammaCandidateCollection;
@@ -74,6 +103,13 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e
return;
}
+ Handle R9Map;
+ if (!iEvent.getByToken(R9Map_, R9Map)) {
+ iEvent.put(std::move(outElectrons));
+ iEvent.put(std::move(outPhotons));
+ return;
+ }
+
// Get HoverEMap
Handle HoverEMap;
if (!iEvent.getByToken(HoverEMap_, HoverEMap)) {
@@ -138,6 +174,15 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e
return;
}
+ edm::Handle rechitsEB;
+ edm::Handle rechitsEE;
+ iEvent.getByToken(ecalRechitEB_, rechitsEB);
+ iEvent.getByToken(ecalRechitEE_, rechitsEE);
+
+ edm::ESHandle pTopology;
+ setup.get().get(pTopology);
+ const CaloTopology* topology = pTopology.product();
+
// Produce electrons and photons
int index = 0;
for (auto& candidate : *EgammaCandidateCollection) {
@@ -146,8 +191,6 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e
if (candidateRef.isNull() && !candidateRef.isAvailable())
continue;
- if ((*HoverEMap)[candidateRef] > egammaHoverECut)
- continue;
if (candidate.pt() < egammaPtCut)
continue;
if (fabs(candidate.eta()) > egammaEtaCut)
@@ -156,6 +199,33 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e
reco::SuperClusterRef scRef = candidate.superCluster();
if (scRef.isNull() && !scRef.isAvailable())
continue;
+
+ reco::CaloClusterPtr SCseed = candidate.superCluster()->seed();
+ const EcalRecHitCollection* rechits = (std::abs(scRef->eta()) < 1.479) ? rechitsEB.product() : rechitsEE.product();
+ Cluster2ndMoments moments = EcalClusterTools::cluster2ndMoments(*SCseed, *rechits);
+ float sMin = moments.sMin;
+ float sMaj = moments.sMaj;
+
+ unsigned int seedId = (*SCseed).seed();
+
+ std::vector mDetIds = EcalClusterTools::matrixDetId((topology), (*SCseed).seed(), rechitMatrixSize);
+
+ int detSize = mDetIds.size();
+ std::vector mEnergies(detSize, 0.);
+ std::vector mTimes(detSize, 0.);
+
+ for (int i = 0; i < detSize; i++) {
+ mEnergies[i] =
+ MiniFloatConverter::reduceMantissaToNbitsRounding(recHitE(mDetIds.at(i), *rechits), mantissaPrecision);
+ if (saveRecHitTiming)
+ mTimes[i] =
+ MiniFloatConverter::reduceMantissaToNbitsRounding(recHitT(mDetIds.at(i), *rechits), mantissaPrecision);
+ }
+
+ float HoE = 999.;
+ if (candidate.superCluster()->energy() != 0.)
+ HoE = (*HoverEMap)[candidateRef] / candidate.superCluster()->energy();
+
float d0 = 0.0;
float dz = 0.0;
int charge = -999;
@@ -176,10 +246,17 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e
candidate.phi(),
candidate.mass(),
(*SigmaIEtaIEtaMap)[candidateRef],
- (*HoverEMap)[candidateRef],
+ HoE,
(*EcalPFClusterIsoMap)[candidateRef],
- (*HcalPFClusterIsoMap)[candidateRef]);
- } else { // Candidate is a scouting electron
+ (*HcalPFClusterIsoMap)[candidateRef],
+ 0.,
+ (*R9Map)[candidateRef],
+ sMin,
+ sMaj,
+ seedId,
+ mEnergies,
+ mTimes); //read for(ieta){for(iphi){}}
+ } else { // Candidate is a scouting electron
outElectrons->emplace_back(candidate.pt(),
candidate.eta(),
candidate.phi(),
@@ -189,13 +266,19 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e
(*DetaMap)[candidateRef],
(*DphiMap)[candidateRef],
(*SigmaIEtaIEtaMap)[candidateRef],
- (*HoverEMap)[candidateRef],
+ HoE,
(*OneOEMinusOneOPMap)[candidateRef],
(*MissingHitsMap)[candidateRef],
charge,
(*EcalPFClusterIsoMap)[candidateRef],
(*HcalPFClusterIsoMap)[candidateRef],
- (*EleGsfTrackIsoMap)[candidateRef]);
+ (*EleGsfTrackIsoMap)[candidateRef],
+ (*R9Map)[candidateRef],
+ sMin,
+ sMaj,
+ seedId,
+ mEnergies,
+ mTimes); //read for(ieta){for(iphi){}}
}
}
@@ -210,8 +293,9 @@ void HLTScoutingEgammaProducer::fillDescriptions(edm::ConfigurationDescriptions&
desc.add("EgammaCandidates", edm::InputTag("hltEgammaCandidates"));
desc.add("EgammaGsfTracks", edm::InputTag("hltEgammaGsfTracks"));
desc.add("SigmaIEtaIEtaMap", edm::InputTag("hltEgammaClusterShape:sigmaIEtaIEta5x5"));
+ desc.add("r9Map", edm::InputTag("hltEgammaR9ID:r95x5"));
desc.add("HoverEMap", edm::InputTag("hltEgammaHoverE"));
- desc.add("DetaMap", edm::InputTag("hltEgammaGsfTrackVars:Deta"));
+ desc.add("DetaMap", edm::InputTag("hltEgammaGsfTrackVars:DetaSeed"));
desc.add("DphiMap", edm::InputTag("hltEgammaGsfTrackVars:Dphi"));
desc.add("MissingHitsMap", edm::InputTag("hltEgammaGsfTrackVars:MissingHits"));
desc.add("OneOEMinusOneOPMap", edm::InputTag("hltEgammaGsfTrackVars:OneOESuperMinusOneOP"));
@@ -221,6 +305,11 @@ void HLTScoutingEgammaProducer::fillDescriptions(edm::ConfigurationDescriptions&
desc.add("egammaPtCut", 4.0);
desc.add("egammaEtaCut", 2.5);
desc.add("egammaHoverECut", 1.0);
+ desc.add("saveRecHitTiming", false);
+ desc.add("mantissaPrecision", 10)->setComment("default float16, change to 23 for float32");
+ desc.add("rechitMatrixSize", 10);
+ desc.add("ecalRechitEB", edm::InputTag("hltEcalRecHit:EcalRecHitsEB"));
+ desc.add("ecalRechitEE", edm::InputTag("hltEcalRecHit:EcalRecHitsEE"));
descriptions.add("hltScoutingEgammaProducer", desc);
}
diff --git a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h
index 5d81146da48ea..0ce58ad785728 100644
--- a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h
+++ b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.h
@@ -38,8 +38,18 @@ Description: Producer for ScoutingElectron and ScoutingPhoton
#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
-#include "DataFormats/Scouting/interface/ScoutingElectron.h"
-#include "DataFormats/Scouting/interface/ScoutingPhoton.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingElectron.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingPhoton.h"
+
+#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
+#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h"
+#include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
+#include "DataFormats/DetId/interface/DetId.h"
+#include "Geometry/CaloTopology/interface/CaloTopology.h"
+#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
+#include "RecoEcal/EgammaCoreTools/interface/EcalTools.h"
+#include "DataFormats/EcalDetId/interface/EBDetId.h"
+#include "DataFormats/Math/interface/libminifloat.h"
class HLTScoutingEgammaProducer : public edm::global::EDProducer<> {
typedef edm::AssociationMap, float, unsigned int> >
@@ -57,6 +67,7 @@ class HLTScoutingEgammaProducer : public edm::global::EDProducer<> {
const edm::EDGetTokenT EgammaCandidateCollection_;
const edm::EDGetTokenT EgammaGsfTrackCollection_;
const edm::EDGetTokenT SigmaIEtaIEtaMap_;
+ const edm::EDGetTokenT R9Map_;
const edm::EDGetTokenT HoverEMap_;
const edm::EDGetTokenT DetaMap_;
const edm::EDGetTokenT DphiMap_;
@@ -66,9 +77,17 @@ class HLTScoutingEgammaProducer : public edm::global::EDProducer<> {
const edm::EDGetTokenT EleGsfTrackIsoMap_;
const edm::EDGetTokenT HcalPFClusterIsoMap_;
+ //const EcalClusterLazyTools::ESGetTokens ecalClusterToolsESGetTokens_;
+
const double egammaPtCut;
const double egammaEtaCut;
const double egammaHoverECut;
+ const int mantissaPrecision;
+ const bool saveRecHitTiming;
+ const int rechitMatrixSize;
+
+ const edm::EDGetTokenT ecalRechitEB_;
+ const edm::EDGetTokenT ecalRechitEE_;
};
#endif
diff --git a/HLTrigger/JetMET/plugins/HLTScoutingCaloProducer.cc b/HLTrigger/JetMET/plugins/HLTScoutingCaloProducer.cc
index 52cce8433cf2a..2567b77386bb7 100644
--- a/HLTrigger/JetMET/plugins/HLTScoutingCaloProducer.cc
+++ b/HLTrigger/JetMET/plugins/HLTScoutingCaloProducer.cc
@@ -5,7 +5,7 @@
//
/**\class HLTScoutingCaloProducer HLTScoutingCaloProducer.cc HLTrigger/JetMET/plugins/HLTScoutingCaloProducer.cc
-Description: Producer for ScoutingCaloJets from reco::CaloJet objects
+Description: Producer for Run3ScoutingCaloJets from reco::CaloJet objects
*/
//
@@ -31,8 +31,8 @@ Description: Producer for ScoutingCaloJets from reco::CaloJet objects
#include "DataFormats/METReco/interface/CaloMET.h"
#include "DataFormats/BTauReco/interface/JetTag.h"
-#include "DataFormats/Scouting/interface/ScoutingCaloJet.h"
-#include "DataFormats/Scouting/interface/ScoutingVertex.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingCaloJet.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingVertex.h"
#include "DataFormats/Math/interface/deltaR.h"
@@ -79,7 +79,7 @@ HLTScoutingCaloProducer::HLTScoutingCaloProducer(const edm::ParameterSet& iConfi
doJetBTags(iConfig.getParameter("doJetBTags")),
doJetIDTags(iConfig.getParameter("doJetIDTags")) {
//register products
- produces();
+ produces();
produces("rho");
produces("caloMetPt");
produces("caloMetPhi");
@@ -93,7 +93,7 @@ void HLTScoutingCaloProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
//get calo jets
Handle caloJetCollection;
- std::unique_ptr outCaloJets(new ScoutingCaloJetCollection());
+ std::unique_ptr outCaloJets(new Run3ScoutingCaloJetCollection());
if (iEvent.getByToken(caloJetCollection_, caloJetCollection)) {
//get jet tags
Handle caloJetBTagCollection;
@@ -156,7 +156,7 @@ void HLTScoutingCaloProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
Handle rho;
std::unique_ptr outRho(new double(-999));
if (iEvent.getByToken(rho_, rho)) {
- outRho.reset(new double(*rho));
+ outRho = std::make_unique(*rho);
}
//get MET
@@ -164,8 +164,8 @@ void HLTScoutingCaloProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
std::unique_ptr outMetPt(new double(-999));
std::unique_ptr outMetPhi(new double(-999));
if (doMet && iEvent.getByToken(metCollection_, metCollection)) {
- outMetPt.reset(new double(metCollection->front().pt()));
- outMetPhi.reset(new double(metCollection->front().phi()));
+ outMetPt = std::make_unique(metCollection->front().pt());
+ outMetPhi = std::make_unique(metCollection->front().phi());
}
//put output
diff --git a/HLTrigger/JetMET/plugins/HLTScoutingPFProducer.cc b/HLTrigger/JetMET/plugins/HLTScoutingPFProducer.cc
index 33093fe7c23ba..51575ae169b54 100644
--- a/HLTrigger/JetMET/plugins/HLTScoutingPFProducer.cc
+++ b/HLTrigger/JetMET/plugins/HLTScoutingPFProducer.cc
@@ -33,9 +33,9 @@ Description: Producer for ScoutingPFJets from reco::PFJet objects, ScoutingVerte
#include "DataFormats/VertexReco/interface/VertexFwd.h"
#include "DataFormats/BTauReco/interface/JetTag.h"
-#include "DataFormats/Scouting/interface/ScoutingPFJet.h"
-#include "DataFormats/Scouting/interface/ScoutingParticle.h"
-#include "DataFormats/Scouting/interface/ScoutingVertex.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingPFJet.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingParticle.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingVertex.h"
#include "DataFormats/Math/interface/deltaR.h"
@@ -89,8 +89,8 @@ HLTScoutingPFProducer::HLTScoutingPFProducer(const edm::ParameterSet &iConfig)
doCandidates(iConfig.getParameter("doCandidates")),
doMet(iConfig.getParameter("doMet")) {
//register products
- produces();
- produces();
+ produces();
+ produces();
produces("rho");
produces("pfMetPt");
produces("pfMetPhi");
@@ -104,7 +104,7 @@ void HLTScoutingPFProducer::produce(edm::StreamID sid, edm::Event &iEvent, edm::
//get vertices
Handle vertexCollection;
- std::unique_ptr outVertices(new ScoutingVertexCollection());
+ std::unique_ptr outVertices(new Run3ScoutingVertexCollection());
if (iEvent.getByToken(vertexCollection_, vertexCollection)) {
for (auto &vtx : *vertexCollection) {
outVertices->emplace_back(vtx.x(),
@@ -124,7 +124,7 @@ void HLTScoutingPFProducer::produce(edm::StreamID sid, edm::Event &iEvent, edm::
Handle rho;
std::unique_ptr outRho(new double(-999));
if (iEvent.getByToken(rho_, rho)) {
- outRho.reset(new double(*rho));
+ outRho = std::make_unique(*rho);
}
//get MET
@@ -132,13 +132,13 @@ void HLTScoutingPFProducer::produce(edm::StreamID sid, edm::Event &iEvent, edm::
std::unique_ptr outMetPt(new double(-999));
std::unique_ptr outMetPhi(new double(-999));
if (doMet && iEvent.getByToken(metCollection_, metCollection)) {
- outMetPt.reset(new double(metCollection->front().pt()));
- outMetPhi.reset(new double(metCollection->front().phi()));
+ outMetPt = std::make_unique(metCollection->front().pt());
+ outMetPhi = std::make_unique(metCollection->front().phi());
}
//get PF candidates
Handle pfCandidateCollection;
- std::unique_ptr outPFCandidates(new ScoutingParticleCollection());
+ std::unique_ptr outPFCandidates(new Run3ScoutingParticleCollection());
if (doCandidates && iEvent.getByToken(pfCandidateCollection_, pfCandidateCollection)) {
for (auto &cand : *pfCandidateCollection) {
if (cand.pt() > pfCandidatePtCut && std::abs(cand.eta()) < pfCandidateEtaCut) {
@@ -168,7 +168,7 @@ void HLTScoutingPFProducer::produce(edm::StreamID sid, edm::Event &iEvent, edm::
//get PF jets
Handle pfJetCollection;
- std::unique_ptr outPFJets(new ScoutingPFJetCollection());
+ std::unique_ptr outPFJets(new Run3ScoutingPFJetCollection());
if (iEvent.getByToken(pfJetCollection_, pfJetCollection)) {
//get PF jet tags
Handle pfJetTagCollection;
@@ -263,7 +263,7 @@ void HLTScoutingPFProducer::fillDescriptions(edm::ConfigurationDescriptions &des
desc.add("pfJetEtaCut", 3.0);
desc.add("pfCandidatePtCut", 0.6);
desc.add("pfCandidateEtaCut", 5.0);
- desc.add("mantissaPrecision", 23);
+ desc.add("mantissaPrecision", 10)->setComment("default float16, change to 23 for float32");
desc.add("doJetTags", true);
desc.add("doCandidates", true);
desc.add("doMet", true);
diff --git a/HLTrigger/JetMET/plugins/HLTScoutingPrimaryVertexProducer.cc b/HLTrigger/JetMET/plugins/HLTScoutingPrimaryVertexProducer.cc
index 3f87620924e76..abd787a463bb1 100644
--- a/HLTrigger/JetMET/plugins/HLTScoutingPrimaryVertexProducer.cc
+++ b/HLTrigger/JetMET/plugins/HLTScoutingPrimaryVertexProducer.cc
@@ -14,7 +14,7 @@
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"
-#include "DataFormats/Scouting/interface/ScoutingVertex.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingVertex.h"
#include "DataFormats/Math/interface/deltaR.h"
class HLTScoutingPrimaryVertexProducer : public edm::global::EDProducer<> {
@@ -35,7 +35,7 @@ class HLTScoutingPrimaryVertexProducer : public edm::global::EDProducer<> {
HLTScoutingPrimaryVertexProducer::HLTScoutingPrimaryVertexProducer(const edm::ParameterSet& iConfig)
: vertexCollection_(consumes(iConfig.getParameter("vertexCollection"))) {
//register products
- produces("primaryVtx");
+ produces("primaryVtx");
}
HLTScoutingPrimaryVertexProducer::~HLTScoutingPrimaryVertexProducer() = default;
@@ -49,7 +49,7 @@ void HLTScoutingPrimaryVertexProducer::produce(edm::StreamID sid,
//get vertices
Handle vertexCollection;
- std::unique_ptr outVertices(new ScoutingVertexCollection());
+ std::unique_ptr outVertices(new Run3ScoutingVertexCollection());
if (iEvent.getByToken(vertexCollection_, vertexCollection)) {
for (auto& vtx : *vertexCollection) {
diff --git a/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.cc b/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.cc
index cdd946fba6994..f3bca0c645cb5 100644
--- a/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.cc
+++ b/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.cc
@@ -24,19 +24,20 @@ Description: Producer for ScoutingMuon
HLTScoutingMuonProducer::HLTScoutingMuonProducer(const edm::ParameterSet& iConfig)
: ChargedCandidateCollection_(
consumes(iConfig.getParameter("ChargedCandidates"))),
+ displacedvertexCollection_(
+ consumes(iConfig.getParameter("displacedvertexCollection"))),
+ MuonCollection_(consumes(iConfig.getParameter("InputMuons"))),
+ linkToken_(consumes(iConfig.getParameter("InputLinks"))),
TrackCollection_(consumes(iConfig.getParameter("Tracks"))),
EcalPFClusterIsoMap_(consumes(iConfig.getParameter("EcalPFClusterIsoMap"))),
HcalPFClusterIsoMap_(consumes(iConfig.getParameter("HcalPFClusterIsoMap"))),
TrackIsoMap_(consumes>(iConfig.getParameter("TrackIsoMap"))),
- displacedvertexCollection_(
- consumes(iConfig.getParameter("displacedvertexCollection"))),
muonPtCut(iConfig.getParameter("muonPtCut")),
muonEtaCut(iConfig.getParameter("muonEtaCut")),
- minVtxProbCut(iConfig.getParameter("minVtxProbCut")),
- linkToken_(consumes(iConfig.getParameter("InputLinks"))) {
+ minVtxProbCut(iConfig.getParameter("minVtxProbCut")) {
//register products
- produces();
- produces("displacedVtx");
+ produces();
+ produces("displacedVtx");
}
HLTScoutingMuonProducer::~HLTScoutingMuonProducer() = default;
@@ -45,35 +46,14 @@ HLTScoutingMuonProducer::~HLTScoutingMuonProducer() = default;
void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm::EventSetup const& setup) const {
using namespace edm;
- std::unique_ptr outMuons(new ScoutingMuonCollection());
- std::unique_ptr dispVertices(new ScoutingVertexCollection());
+ std::unique_ptr outMuons(new Run3ScoutingMuonCollection());
+ std::unique_ptr dispVertices(new Run3ScoutingVertexCollection());
// Get RecoChargedCandidate
Handle ChargedCandidateCollection;
if (!iEvent.getByToken(ChargedCandidateCollection_, ChargedCandidateCollection)) {
iEvent.put(std::move(outMuons));
- return;
- }
-
- // Get Track
- Handle TrackCollection;
- if (!iEvent.getByToken(TrackCollection_, TrackCollection)) {
- iEvent.put(std::move(outMuons));
- return;
- }
-
- // Get EcalPFClusterIsoMap
- Handle EcalPFClusterIsoMap;
- iEvent.getByToken(EcalPFClusterIsoMap_, EcalPFClusterIsoMap);
-
- // Get HcalPFClusterIsoMap
- Handle HcalPFClusterIsoMap;
- iEvent.getByToken(HcalPFClusterIsoMap_, HcalPFClusterIsoMap);
-
- // Get TrackIsoMap
- Handle> TrackIsoMap;
- if (!iEvent.getByToken(TrackIsoMap_, TrackIsoMap)) {
- iEvent.put(std::move(outMuons));
+ iEvent.put(std::move(dispVertices), "displacedVtx");
return;
}
@@ -128,15 +108,39 @@ void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
}
}
+ // Get Muon collection
+ Handle MuonCollection;
+ if (!iEvent.getByToken(MuonCollection_, MuonCollection)) {
+ iEvent.put(std::move(outMuons));
+ iEvent.put(std::move(dispVertices), "displacedVtx");
+ return;
+ }
+
+ // Get Links collection
+ edm::Handle links;
+ if (!iEvent.getByToken(linkToken_, links)) {
+ iEvent.put(std::move(outMuons));
+ iEvent.put(std::move(dispVertices), "displacedVtx");
+ return;
+ }
+
+ // Get EcalPFClusterIsoMap
+ Handle EcalPFClusterIsoMap;
+ iEvent.getByToken(EcalPFClusterIsoMap_, EcalPFClusterIsoMap);
+
+ // Get HcalPFClusterIsoMap
+ Handle HcalPFClusterIsoMap;
+ iEvent.getByToken(HcalPFClusterIsoMap_, HcalPFClusterIsoMap);
+
+ // Get TrackIsoMap
+ Handle> TrackIsoMap;
+ iEvent.getByToken(TrackIsoMap_, TrackIsoMap);
+
// Produce muons
std::vector vtxInd;
float minDR2 = 1e-06;
int index = 0;
- // Read Links collection:
- edm::Handle links;
- iEvent.getByToken(linkToken_, links);
-
for (auto& muon : *ChargedCandidateCollection) {
reco::RecoChargedCandidateRef muonRef = getRef(ChargedCandidateCollection, index);
++index;
@@ -147,8 +151,8 @@ void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
if (track.isNull() || !track.isAvailable())
continue;
- int validmuhit = 0;
- int matchedsta = 0;
+ int validStandAloneMuonHits = 0;
+ int matchedStandAloneMuonStations = 0;
for (auto const& link : *links) {
const reco::Track& trackerTrack = *link.trackerTrack();
float dR2 = deltaR2(track->eta(), track->phi(), trackerTrack.eta(), trackerTrack.phi());
@@ -157,9 +161,44 @@ void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
dPt = dPt / track->pt();
if (dR2 < 0.02 * 0.02 and dPt < 0.001) {
- const reco::TrackRef staTrack = link.standAloneTrack();
- validmuhit = staTrack->hitPattern().numberOfValidMuonHits();
- matchedsta = staTrack->hitPattern().muonStationsWithValidHits();
+ if (link.standAloneTrack().isNonnull()) {
+ validStandAloneMuonHits = link.standAloneTrack()->hitPattern().numberOfValidMuonHits();
+ matchedStandAloneMuonStations = link.standAloneTrack()->hitPattern().muonStationsWithValidHits();
+ }
+ }
+ }
+
+ unsigned int recoMuonType = 2; // Global muon
+ float normalizedChi2 = 999.0;
+ int nRecoMuonValidMuonHits = 0;
+ int nRecoMuonChambers = 0;
+ int nRecoMuonChambersCSCorDT = 0;
+ int nRecoMuonMatches = 0;
+ int nRecoMuonMatchedStations = 0;
+ unsigned int nRecoMuonExpectedMatchedStations = 0;
+ unsigned int recoMuonStationMask = 0;
+ int nRecoMuonMatchedRPCLayers = 0;
+ unsigned int recoMuonRPClayerMask = 0;
+ for (auto const& recoMu : *MuonCollection) {
+ float dR2 = deltaR2(muon.eta(), muon.phi(), recoMu.eta(), recoMu.phi());
+ float dPt = std::abs(muon.pt() - recoMu.pt());
+ if (muon.pt() != 0)
+ dPt = dPt / muon.pt();
+
+ if (dR2 < 0.02 * 0.02 and dPt < 0.001) {
+ if (recoMu.globalTrack().isNonnull()) {
+ normalizedChi2 = recoMu.globalTrack()->normalizedChi2();
+ nRecoMuonValidMuonHits = recoMu.globalTrack()->hitPattern().numberOfValidMuonHits();
+ }
+ recoMuonType = recoMu.type();
+ nRecoMuonChambers = recoMu.numberOfChambers();
+ nRecoMuonChambersCSCorDT = recoMu.numberOfChambersCSCorDT();
+ nRecoMuonMatches = recoMu.numberOfMatches();
+ nRecoMuonMatchedStations = recoMu.numberOfMatchedStations();
+ nRecoMuonExpectedMatchedStations = recoMu.expectedNnumberOfMatchedStations();
+ recoMuonStationMask = recoMu.stationMask();
+ nRecoMuonMatchedRPCLayers = recoMu.numberOfMatchedRPCLayers();
+ recoMuonRPClayerMask = recoMu.RPClayerMask();
}
}
@@ -178,6 +217,11 @@ void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
hcalisopf = (*HcalPFClusterIsoMap)[muonRef];
}
+ double trackiso = -1.0;
+ if (TrackIsoMap.isValid()) {
+ trackiso = (*TrackIsoMap)[muonRef];
+ }
+
vtxInd.reserve(vtxMuPair.size());
for (unsigned int i = 0; i < vtxMuPair.size(); i++) {
float dr2_1 = reco::deltaR2(((vtxMuPair[i]).first), muon);
@@ -190,20 +234,31 @@ void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
muon.eta(),
muon.phi(),
muon.mass(),
+ recoMuonType,
+ track->charge(),
+ normalizedChi2,
ecalisopf,
hcalisopf,
- (*TrackIsoMap)[muonRef],
+ trackiso,
+ validStandAloneMuonHits,
+ matchedStandAloneMuonStations,
+ nRecoMuonValidMuonHits,
+ nRecoMuonChambers,
+ nRecoMuonChambersCSCorDT,
+ nRecoMuonMatches,
+ nRecoMuonMatchedStations,
+ nRecoMuonExpectedMatchedStations,
+ recoMuonStationMask,
+ nRecoMuonMatchedRPCLayers,
+ recoMuonRPClayerMask,
+ track->hitPattern().numberOfValidPixelHits(),
+ track->hitPattern().numberOfValidStripHits(),
+ track->hitPattern().pixelLayersWithMeasurement(),
+ track->hitPattern().trackerLayersWithMeasurement(),
track->chi2(),
track->ndof(),
- track->charge(),
track->dxy(),
track->dz(),
- validmuhit,
- track->hitPattern().numberOfValidPixelHits(),
- matchedsta,
- track->hitPattern().trackerLayersWithMeasurement(),
- 2, // Global muon
- track->hitPattern().numberOfValidStripHits(),
track->qoverp(),
track->lambda(),
track->pt(),
@@ -216,6 +271,20 @@ void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
track->phiError(),
track->dsz(),
track->dszError(),
+ track->covariance(0, 1),
+ track->covariance(0, 2),
+ track->covariance(0, 3),
+ track->covariance(0, 4),
+ track->covariance(1, 2),
+ track->covariance(1, 3),
+ track->covariance(1, 4),
+ track->covariance(2, 3),
+ track->covariance(2, 4),
+ track->covariance(3, 4),
+ track->vx(),
+ track->vy(),
+ track->vz(),
+ track->hitPattern(),
vtxInd);
vtxInd.clear();
}
@@ -228,16 +297,18 @@ void HLTScoutingMuonProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm
// ------------ method fills 'descriptions' with the allowed parameters for the module ------------
void HLTScoutingMuonProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
- desc.add("ChargedCandidates", edm::InputTag("hltIterL3MuonCandidates"));
+ desc.add("ChargedCandidates", edm::InputTag("hltIterL3MuonCandidatesNoVtx"));
+ desc.add("displacedvertexCollection", edm::InputTag("hltDisplacedmumuVtxProducer"));
+ desc.add("InputMuons", edm::InputTag("hltIterL3MuonsNoVtx"));
+ desc.add("InputLinks", edm::InputTag("hltL3MuonsIterL3LinksNoVtx"));
desc.add("Tracks", edm::InputTag("hltPixelTracks"));
- desc.add("EcalPFClusterIsoMap", edm::InputTag("hltMuonEcalMFPFClusterIsoForMuons"));
- desc.add("HcalPFClusterIsoMap", edm::InputTag("hltMuonHcalRegPFClusterIsoForMuons"));
- desc.add("TrackIsoMap", edm::InputTag("hltMuonTkRelIsolationCut0p07Map:combinedRelativeIsoDeposits"));
- desc.add("displacedvertexCollection", edm::InputTag("hltPixelVertices"));
+ desc.add("EcalPFClusterIsoMap", edm::InputTag("hltMuonEcalMFPFClusterIsoForMuonsNoVtx"));
+ desc.add("HcalPFClusterIsoMap", edm::InputTag("hltMuonHcalPFClusterIsoForMuonsNoVtx"));
+ desc.add("TrackIsoMap",
+ edm::InputTag("hltMuonTkRelIsolationCut0p09MapNoVtx:combinedRelativeIsoDeposits"));
desc.add("muonPtCut", 3.0);
desc.add("muonEtaCut", 2.4);
desc.add("minVtxProbCut", 0.001);
- desc.add("InputLinks", edm::InputTag("hltL3MuonsIterL3Links"));
descriptions.add("hltScoutingMuonProducer", desc);
}
diff --git a/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.h b/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.h
index e508e04f45aa7..b1c8f3e199c82 100644
--- a/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.h
+++ b/HLTrigger/Muon/plugins/HLTScoutingMuonProducer.h
@@ -8,7 +8,7 @@
//
/**\class HLTScoutingMuonProducer HLTScoutingMuonProducer.h HLTScoutingMuonProducer.h
-Description: Producer for ScoutingMuon
+Description: Producer for Run3ScoutingMuon
*/
//
@@ -39,10 +39,11 @@ Description: Producer for ScoutingMuon
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"
-#include "DataFormats/Scouting/interface/ScoutingMuon.h"
-#include "DataFormats/Scouting/interface/ScoutingVertex.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingMuon.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingVertex.h"
#include "DataFormats/MuonReco/interface/MuonTrackLinks.h"
+#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/MuonReco/interface/MuonFwd.h"
class HLTScoutingMuonProducer : public edm::global::EDProducer<> {
@@ -59,17 +60,17 @@ class HLTScoutingMuonProducer : public edm::global::EDProducer<> {
void produce(edm::StreamID sid, edm::Event& iEvent, edm::EventSetup const& setup) const final;
const edm::EDGetTokenT ChargedCandidateCollection_;
+ const edm::EDGetTokenT displacedvertexCollection_;
+ const edm::EDGetTokenT MuonCollection_;
+ const edm::EDGetTokenT linkToken_;
const edm::EDGetTokenT TrackCollection_;
const edm::EDGetTokenT EcalPFClusterIsoMap_;
const edm::EDGetTokenT HcalPFClusterIsoMap_;
const edm::EDGetTokenT> TrackIsoMap_;
- const edm::EDGetTokenT displacedvertexCollection_;
const double muonPtCut;
const double muonEtaCut;
const double minVtxProbCut;
-
- const edm::EDGetTokenT linkToken_;
};
#endif
diff --git a/HLTrigger/Muon/plugins/HLTScoutingTrackProducer.cc b/HLTrigger/Muon/plugins/HLTScoutingTrackProducer.cc
index 25f2d43950d64..95a4bb35bad9d 100644
--- a/HLTrigger/Muon/plugins/HLTScoutingTrackProducer.cc
+++ b/HLTrigger/Muon/plugins/HLTScoutingTrackProducer.cc
@@ -4,7 +4,7 @@
// Class: HLTScoutingTrackProducer
//
/**\class HLTScoutingTrackProducer HLTScoutingTrackProducer.cc HLTScoutingTrackProducer.cc
-Description: Producer for Scouting Tracks
+Description: Producer for Run3 Scouting Tracks
*/
//
@@ -22,13 +22,15 @@ Description: Producer for Scouting Tracks
#include "DataFormats/TrackReco/interface/HitPattern.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"
+#include "DataFormats/TrackReco/interface/TrackBase.h"
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"
-#include "DataFormats/Scouting/interface/ScoutingMuon.h"
-#include "DataFormats/Scouting/interface/ScoutingTrack.h"
-#include "DataFormats/Scouting/interface/ScoutingVertex.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingMuon.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingTrack.h"
+#include "DataFormats/Scouting/interface/Run3ScoutingVertex.h"
#include "DataFormats/MuonReco/interface/MuonTrackLinks.h"
#include "DataFormats/MuonReco/interface/MuonFwd.h"
+#include "DataFormats/Math/interface/libminifloat.h"
class HLTScoutingTrackProducer : public edm::global::EDProducer<> {
public:
@@ -41,15 +43,22 @@ class HLTScoutingTrackProducer : public edm::global::EDProducer<> {
void produce(edm::StreamID sid, edm::Event& iEvent, edm::EventSetup const& setup) const final;
const edm::EDGetTokenT otherTrackCollection_;
+ const edm::EDGetTokenT vertexCollection_;
+
+ const int mantissaPrecision;
+ const double vtxMinDist;
};
//
// constructors and destructor
//
HLTScoutingTrackProducer::HLTScoutingTrackProducer(const edm::ParameterSet& iConfig)
- : otherTrackCollection_(consumes(iConfig.getParameter("OtherTracks"))) {
+ : otherTrackCollection_(consumes(iConfig.getParameter("OtherTracks"))),
+ vertexCollection_(consumes(iConfig.getParameter("vertexCollection"))),
+ mantissaPrecision(iConfig.getParameter("mantissaPrecision")),
+ vtxMinDist(iConfig.getParameter("vtxMinDist")) {
//register products
- produces();
+ produces();
}
HLTScoutingTrackProducer::~HLTScoutingTrackProducer() = default;
@@ -58,33 +67,66 @@ HLTScoutingTrackProducer::~HLTScoutingTrackProducer() = default;
void HLTScoutingTrackProducer::produce(edm::StreamID sid, edm::Event& iEvent, edm::EventSetup const& setup) const {
using namespace edm;
- std::unique_ptr outTrack(new ScoutingTrackCollection());
+ std::unique_ptr outTrack(new Run3ScoutingTrackCollection());
Handle otherTrackCollection;
+ Handle vertexCollection;
if (iEvent.getByToken(otherTrackCollection_, otherTrackCollection)) {
- // Produce tracks in event
+ //match tracks to vertices
for (auto& trk : *otherTrackCollection) {
- outTrack->emplace_back(trk.pt(),
- trk.eta(),
- trk.phi(),
- trk.chi2(),
+ int vtxInd = -1;
+ double min_dist = vtxMinDist;
+ int vtxIt = 0;
+
+ if (iEvent.getByToken(vertexCollection_, vertexCollection)) {
+ for (auto& vrt : *vertexCollection) {
+ double min_dist_tmp = pow(trk.dz(vrt.position()), 2); // hltPixelVertices only clustered in Z
+
+ if (min_dist_tmp < min_dist) {
+ min_dist = min_dist_tmp;
+ vtxInd = vtxIt;
+ }
+
+ vtxIt++;
+ }
+ }
+
+ //fill track information
+ outTrack->emplace_back(MiniFloatConverter::reduceMantissaToNbitsRounding(trk.pt(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.eta(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.phi(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.chi2(), mantissaPrecision),
trk.ndof(),
trk.charge(),
- trk.dxy(),
- trk.dz(),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.dxy(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.dz(), mantissaPrecision),
trk.hitPattern().numberOfValidPixelHits(),
trk.hitPattern().trackerLayersWithMeasurement(),
trk.hitPattern().numberOfValidStripHits(),
- trk.qoverp(),
- trk.lambda(),
- trk.dxyError(),
- trk.dzError(),
- trk.qoverpError(),
- trk.lambdaError(),
- trk.phiError(),
- trk.dsz(),
- trk.dszError());
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.qoverp(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.lambda(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.dxyError(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.dzError(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.qoverpError(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.lambdaError(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.phiError(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.dsz(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.dszError(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(0, 1), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(0, 2), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(0, 3), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(0, 4), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(1, 2), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(1, 3), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(1, 4), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(2, 3), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(2, 4), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.covariance(3, 4), mantissaPrecision),
+ vtxInd,
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.vx(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.vy(), mantissaPrecision),
+ MiniFloatConverter::reduceMantissaToNbitsRounding(trk.vz(), mantissaPrecision));
}
}
@@ -95,6 +137,10 @@ void HLTScoutingTrackProducer::produce(edm::StreamID sid, edm::Event& iEvent, ed
void HLTScoutingTrackProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add