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("OtherTracks", edm::InputTag("hltPixelTracksL3MuonNoVtx")); + desc.add("vertexCollection", edm::InputTag("hltPixelVertices")); + + desc.add("mantissaPrecision", 10); //default float16, change to 23 for float32 + desc.add("vtxMinDist", 0.01); descriptions.add("hltScoutingTrackProducer", desc); }