diff --git a/DPGAnalysis/Phase2L1TNanoAOD/python/l1tPh2GTtables_cff.py b/DPGAnalysis/Phase2L1TNanoAOD/python/l1tPh2GTtables_cff.py index d93a5ab626eed..303fd1e33aaca 100644 --- a/DPGAnalysis/Phase2L1TNanoAOD/python/l1tPh2GTtables_cff.py +++ b/DPGAnalysis/Phase2L1TNanoAOD/python/l1tPh2GTtables_cff.py @@ -72,9 +72,8 @@ hwQual = Var("hwQualityFlags_toInt()",int), hwIso = Var("hwIsolationPT_toInt()",int), ## more physical values - ## using the GT scales for HW to physicsal vonversion, see scales in https://github.com/cms-sw/cmssw/blob/master/L1Trigger/Phase2L1GT/python/l1tGTScales.py - iso = Var(f"hwIsolationPT_toInt()*{scale_parameter.isolationPT_lsb.value()}",float, doc = "absolute isolation"), - relIso = Var(f"hwIsolationPT_toInt()*{scale_parameter.isolationPT_lsb.value()} / pt",float, doc = "relative isolation") + iso = Var("isolationPT()",float, doc = "absolute isolation"), + relIso = Var("isolationPT()/pt",float, doc = "relative isolation") ) ) @@ -198,7 +197,7 @@ # l1GTObjVars, mht = Var("pt", float, doc="MHT pt"), mhtPhi = Var("phi", float, doc="MHT phi"), - ht = Var(f"hwScalarSumPT_toInt()*{scale_parameter.scalarSumPT_lsb.value()}", float, doc="HT"), ## HACK via hw value! + ht = Var("scalarSumPT()", float, doc="HT"), ) ) diff --git a/DataFormats/L1Trigger/interface/P2GTCandidate.h b/DataFormats/L1Trigger/interface/P2GTCandidate.h index bb5c1fdcc8514..63ee6ef91a70e 100644 --- a/DataFormats/L1Trigger/interface/P2GTCandidate.h +++ b/DataFormats/L1Trigger/interface/P2GTCandidate.h @@ -161,6 +161,13 @@ namespace l1t { return static_cast(hwIsolationPT_); } + double isolationPT() const { + if (!isolationPT_) { + throw std::invalid_argument("Object doesn't have isolationPT"); + } + return isolationPT_; + } + hwQualityFlags_t hwQualityFlags() const { if (!hwQualityFlags_) { throw std::invalid_argument("Object doesn't have qualityFlags"); @@ -231,6 +238,13 @@ namespace l1t { return static_cast(hwScalarSumPT_); } + double scalarSumPT() const { + if (!scalarSumPT_) { + throw std::invalid_argument("Object doesn't have scalarSumPT"); + } + return scalarSumPT_; + } + hwNumber_of_tracks_t hwNumber_of_tracks() const { if (!hwNumber_of_tracks_) { throw std::invalid_argument("Object doesn't have number_of_tracks"); @@ -320,12 +334,20 @@ namespace l1t { objectType_ == CL2JetsSC4 || objectType_ == CL2JetsSC8; } + bool isEtSum() const { return objectType_ == GCTEtSum || objectType_ == GTTEtSum || objectType_ == CL2EtSum; } + + bool isHtSum() const { + return objectType_ == GCTHtSum || objectType_ == GTTPromptHtSum || objectType_ == GTTDisplacedHtSum || + objectType_ == CL2HtSum; + } + private: Optional hwPT_; Optional hwPhi_; Optional hwEta_; Optional hwZ0_; Optional hwIsolationPT_; + Optional isolationPT_; Optional hwQualityFlags_; Optional hwQualityScore_; Optional hwCharge_; @@ -336,6 +358,7 @@ namespace l1t { Optional hwSeed_pT_; Optional hwSeed_z0_; Optional hwScalarSumPT_; + Optional scalarSumPT_; Optional hwNumber_of_tracks_; Optional hwNumber_of_displaced_tracks_; diff --git a/DataFormats/L1Trigger/src/classes_def.xml b/DataFormats/L1Trigger/src/classes_def.xml index b974886982dc5..6e59c0e15436c 100644 --- a/DataFormats/L1Trigger/src/classes_def.xml +++ b/DataFormats/L1Trigger/src/classes_def.xml @@ -14,7 +14,9 @@ - + + + diff --git a/L1Trigger/Phase2L1GT/plugins/L1GTProducer.cc b/L1Trigger/Phase2L1GT/plugins/L1GTProducer.cc index f07b1c507197b..536b1c78fb253 100644 --- a/L1Trigger/Phase2L1GT/plugins/L1GTProducer.cc +++ b/L1Trigger/Phase2L1GT/plugins/L1GTProducer.cc @@ -240,6 +240,7 @@ namespace l1t { gtObj.hwPT_ = htMiss.Et.V.to_int(); gtObj.hwPhi_ = obj.hwPhi(); gtObj.hwScalarSumPT_ = obj.hwPt(); + gtObj.scalarSumPT_ = scales_.to_scalarSumPT(obj.hwPt()); gtObj.objectType_ = P2GTCandidate::GTTPromptHtSum; outputCollection->push_back(gtObj); @@ -262,6 +263,7 @@ namespace l1t { gtObj.hwPT_ = htMiss.Et.V.to_int(); gtObj.hwPhi_ = obj.hwPhi(); gtObj.hwScalarSumPT_ = obj.hwPt(); + gtObj.scalarSumPT_ = scales_.to_scalarSumPT(obj.hwPt()); gtObj.objectType_ = P2GTCandidate::GTTDisplacedHtSum; outputCollection->push_back(gtObj); @@ -357,6 +359,7 @@ namespace l1t { gtObj.hwZ0_ = hwZ0; gtObj.hwQualityFlags_ = obj.apQualFlags().to_int(); gtObj.hwIsolationPT_ = obj.apIso().to_int(); + gtObj.isolationPT_ = scales_.to_isolationPT(obj.apIso().to_int()); gtObj.hwCharge_ = obj.apCharge().to_int(); gtObj.hwD0_ = obj.apD0().to_int(); gtObj.hwBeta_ = obj.apBeta().to_int(); @@ -427,6 +430,7 @@ namespace l1t { gtObj.hwPhi_ = gtPhoton.v3.phi.V.to_int(); gtObj.hwEta_ = gtPhoton.v3.eta.V.to_int(); gtObj.hwIsolationPT_ = gtPhoton.isolationPT.V.to_int(); + gtObj.isolationPT_ = scales_.to_isolationPT(gtPhoton.isolationPT.V.to_int()); gtObj.hwQualityFlags_ = gtPhoton.qualityFlags.V.to_int(); gtObj.objectType_ = P2GTCandidate::CL2Photons; @@ -452,6 +456,7 @@ namespace l1t { gtObj.hwEta_ = gtElectron.v3.eta.V.to_int(); gtObj.hwZ0_ = hwZ0; gtObj.hwIsolationPT_ = gtElectron.isolationPT.V.to_int(); + gtObj.isolationPT_ = scales_.to_isolationPT(gtElectron.isolationPT.V.to_int()); gtObj.hwQualityFlags_ = gtElectron.qualityFlags.V.to_int(); gtObj.hwQualityScore_ = gtElectron.idScore.V.to_int(); gtObj.hwCharge_ = gtElectron.charge.V.to_int(); @@ -500,6 +505,7 @@ namespace l1t { gtObj.hwPT_ = sum.vector_pt.V.to_int(); gtObj.hwPhi_ = sum.vector_phi.V.to_int(); gtObj.hwScalarSumPT_ = sum.scalar_pt.V.to_int(); + gtObj.scalarSumPT_ = scales_.to_scalarSumPT(sum.scalar_pt.V.to_int()); gtObj.objectType_ = P2GTCandidate::CL2EtSum; outputCollection->push_back(gtObj); @@ -517,6 +523,7 @@ namespace l1t { gtObj.hwPT_ = mht.hwPt(); gtObj.hwPhi_ = mht.hwPhi(); gtObj.hwScalarSumPT_ = ht.hwPt(); + gtObj.scalarSumPT_ = scales_.to_scalarSumPT(ht.hwPt()); gtObj.objectType_ = P2GTCandidate::CL2HtSum; outputCollection->push_back(gtObj);