42 #include "boost/property_tree/ptree.hpp" 43 #include "boost/property_tree/json_parser.hpp" 155 typedef ap_ufixed<PT_W, PT_I, AP_TRN, AP_SAT>
Pt_t;
156 typedef ap_ufixed<ET_W, ET_I, AP_TRN, AP_SAT>
Et_t;
158 typedef ap_ufixed<CALIBPT_W, CALIBPT_I, AP_TRN, AP_SAT>
CalibPt_t;
159 typedef ap_ufixed<ID_W, ID_I, AP_TRN, AP_SAT>
Id_t;
181 template <
class outPrecision,
class inPrecision>
208 template <
int W,
int I, ap_q_mode _AP_Q, ap_o_mode _AP_O>
209 ap_ufixed<W, I>
ap_abs(ap_fixed<W, I, _AP_Q, _AP_O>
x);
349 std::vector<tensorflow::Tensor> outputsIdent,
350 std::vector<tensorflow::Tensor> outputsCalib,
351 std::vector<InputTowerCluster_pstn> clustersNxM_pstn);
363 edm::LogInfo(
"Initialization") <<
"Init NN models Global Cache " << std::endl;
412 EcalEtMinForClustering(iConfig.getParameter<double>(
"EcalEtMinForClustering")),
413 HcalEtMinForClustering(iConfig.getParameter<double>(
"HcalEtMinForClustering")),
414 EtMinForSeeding(iConfig.getParameter<double>(
"EtMinForSeeding")),
415 EtaRestriction(iConfig.getParameter<double>(
"EtaRestriction")),
416 CB_CE_split(iConfig.getParameter<double>(
"CB_CE_split")),
417 PuidThr(iConfig.getParameter<double>(
"PuidThr")),
419 IdWp90_CB(iConfig.getParameter<double>(
"IdWp90_CB")),
420 IdWp95_CB(iConfig.getParameter<double>(
"IdWp95_CB")),
421 IdWp99_CB(iConfig.getParameter<double>(
"IdWp99_CB")),
423 IdWp90_CE(iConfig.getParameter<double>(
"IdWp90_CE")),
424 IdWp95_CE(iConfig.getParameter<double>(
"IdWp95_CE")),
425 IdWp99_CE(iConfig.getParameter<double>(
"IdWp99_CE")),
427 DEBUG(iConfig.getParameter<
bool>(
"DEBUG")) {
438 produces<BXVector<l1t::Tau>>(
"L1NNCaloTauCollectionBXV");
460 if (
hit.towerIEta() == -1016 &&
hit.towerIPhi() == -962) {
478 <<
" TOWERS WITH towerIeta=-1016 AND towerIphi=-962" << std::endl;
497 return a.towerEt >
b.towerEt;
501 std::vector<SimpleHGCluster> AllHGClusters;
505 auto& cl3d = *cl3dIt;
510 l1t::PFCluster cluster(cl3d.pt(), cl3d.eta(), cl3d.phi(), cl3d.hOverE());
514 float pt_new = cl3d.iPt(l1t::HGCalMulticluster::EnergyInterpretation::EM);
516 cluster =
l1t::PFCluster(pt_new, cl3d.eta(), cl3d.phi(), hoe_new, isEM);
520 float had_old = cl3d.
pt() - cluster.emEt();
521 float em_new = cl3d.iPt(l1t::HGCalMulticluster::EnergyInterpretation::EM);
522 float pt_new = had_old + em_new;
523 float hoe_new = em_new > 0 ? (had_old / em_new) : -1;
524 cluster =
l1t::PFCluster(pt_new, cl3d.eta(), cl3d.phi(), hoe_new, isEM);
527 float em_new = cl3d.iPt(l1t::HGCalMulticluster::EnergyInterpretation::EM);
528 float hoe_new = em_new > 0 ? (cl3d.pt() / em_new - 1) : -1;
529 cluster =
l1t::PFCluster(cl3d.pt(), cl3d.eta(), cl3d.phi(), hoe_new, isEM);
535 idScore = cluster.egVsPUMVAOut();
545 HGCluster.showerlength = cl3d.showerLength();
546 HGCluster.coreshowerlength = cl3d.coreShowerLength();
553 AllHGClusters.push_back(HGCluster);
569 std::vector<InputTowerCluster> l1TowerClustersNxM_CB;
570 std::vector<InputTowerCluster_pstn> l1TowerClustersNxM_CB_pstn;
571 std::vector<InputTowerCluster> l1TowerClustersNxM_CE;
572 std::vector<InputTowerCluster_pstn> l1TowerClustersNxM_CE_pstn;
573 std::vector<InputHGCluster> HGClusters;
576 std::vector<InputTowerCluster> AllL1TowerClustersNxM_CE;
577 std::vector<InputTowerCluster_pstn> AllL1TowerClustersNxM_CE_pstn;
579 int Nclusters_CB = 0;
580 int AllNclusters_CE = 0;
581 bool caloTauSeedingFinished =
false;
583 while (!caloTauSeedingFinished) {
593 l1CaloTower.stale4seed) {
601 caloTauSeedingFinished =
true;
606 clNxM_pstn.
fill(l1CaloTower);
607 if (l1CaloTower.isBarrel) {
611 l1CaloTower.stale4seed = 0x1;
612 l1CaloTower.stale = 0x1;
619 dIEtaPhi_t d_iPhi = dPhi<dIEtaPhi_t, IPhi_t>(l1CaloTower.towerIphi, clNxM_pstn.
seedIphi);
623 l1CaloTower.stale4seed = 0x1;
631 l1TowerClustersNxM_CB.push_back(clNxM);
632 l1TowerClustersNxM_CB_pstn.push_back(clNxM_pstn);
635 AllL1TowerClustersNxM_CE.push_back(clNxM);
636 AllL1TowerClustersNxM_CE_pstn.push_back(clNxM_pstn);
644 for (
int clNxMIdx = 0; clNxMIdx < Nclusters_CB; clNxMIdx++) {
647 if (l1CaloTower.stale) {
651 dIEtaPhi_t d_iEta =
tower_dIEta(l1CaloTower.towerIeta, l1TowerClustersNxM_CB_pstn[clNxMIdx].seedIeta);
653 dPhi<dIEtaPhi_t, IPhi_t>(l1CaloTower.towerIphi, l1TowerClustersNxM_CB_pstn[clNxMIdx].seedIphi);
654 int hitIdx = d_iEta * 9 + d_iPhi +
seedIdx;
658 l1TowerClustersNxM_CB[clNxMIdx].fill(hitIdx, l1CaloTower);
659 l1CaloTower.stale = 0x1;
668 int Nclusters_CE = 0;
669 for (
int clNxMIdx = 0; clNxMIdx < AllNclusters_CE; clNxMIdx++) {
671 for (
auto& HGCluster : AllHGClusters) {
678 dEtaPhi_t d_iEta =
tw2cl_dEta(HGCluster.eta, AllL1TowerClustersNxM_CE_pstn[clNxMIdx].seedIeta);
679 dEtaPhi_t d_iPhi =
tw2cl_dPhi(HGCluster.phi, AllL1TowerClustersNxM_CE_pstn[clNxMIdx].seedIphi);
683 HGCluster.stale = 0x1;
685 cl3d.
fill(HGCluster);
686 HGClusters.push_back(cl3d);
687 l1TowerClustersNxM_CE.push_back(AllL1TowerClustersNxM_CE[clNxMIdx]);
688 l1TowerClustersNxM_CE_pstn.push_back(AllL1TowerClustersNxM_CE_pstn[clNxMIdx]);
697 for (
int clNxMIdx = 0; clNxMIdx < Nclusters_CE; clNxMIdx++) {
700 if (l1CaloTower.stale) {
704 dIEtaPhi_t d_iEta =
tower_dIEta(l1CaloTower.towerIeta, l1TowerClustersNxM_CE_pstn[clNxMIdx].seedIeta);
706 dPhi<dIEtaPhi_t, IPhi_t>(l1CaloTower.towerIphi, l1TowerClustersNxM_CE_pstn[clNxMIdx].seedIphi);
707 int hitIdx = d_iEta * 9 + d_iPhi +
seedIdx;
711 l1TowerClustersNxM_CE[clNxMIdx].fill(hitIdx, l1CaloTower);
712 l1CaloTower.stale = 0x1;
721 int batchSize_CB = (
int)(Nclusters_CB);
722 tensorflow::TensorShape imageShape_CB({batchSize_CB,
IEta_dim,
IPhi_dim, 2});
723 tensorflow::TensorShape positionShape_CB({batchSize_CB, 2});
724 tensorflow::Tensor TowerClusterImage_CB(tensorflow::DT_FLOAT, imageShape_CB);
725 tensorflow::Tensor TowerClusterPosition_CB(tensorflow::DT_FLOAT, positionShape_CB);
727 for (
int clNxMIdx = 0; clNxMIdx < Nclusters_CB; clNxMIdx++) {
732 TowerClusterImage_CB.tensor<
float, 4>()(clNxMIdx,
eta,
phi, 0) =
733 (l1TowerClustersNxM_CB[clNxMIdx].towerHits[towerIdx].l1egTowerEt.to_float() +
734 l1TowerClustersNxM_CB[clNxMIdx].towerHits[towerIdx].towerEm.to_float());
735 TowerClusterImage_CB.tensor<
float, 4>()(clNxMIdx,
eta,
phi, 1) =
736 (l1TowerClustersNxM_CB[clNxMIdx].towerHits[towerIdx].towerHad.to_float());
740 TowerClusterPosition_CB.tensor<
float, 2>()(clNxMIdx, 0) =
floatIEta(l1TowerClustersNxM_CB_pstn[clNxMIdx].seedIeta);
741 TowerClusterPosition_CB.tensor<
float, 2>()(clNxMIdx, 1) =
floatIPhi(l1TowerClustersNxM_CB_pstn[clNxMIdx].seedIphi);
749 {
"TowerClusterPosition", TowerClusterPosition_CB}};
750 std::vector<tensorflow::Tensor> CNNmodel_CBoutputs;
752 CNNmodel_CBinputList,
753 {
"TauMinator_CB_conv/middleMan/concat"},
754 &CNNmodel_CBoutputs);
758 std::vector<tensorflow::Tensor> DNN_CBoutputsIdent;
761 {
"TauMinator_CB_ident/sigmoid_IDout/Sigmoid"},
762 &DNN_CBoutputsIdent);
765 std::vector<tensorflow::Tensor> DNN_CBoutputsCalib;
768 {
"TauMinator_CB_calib/DNNout/MatMul"},
769 &DNN_CBoutputsCalib);
772 for (
int clNxMIdx = 0; clNxMIdx < Nclusters_CB; clNxMIdx++) {
774 MakeTauCandidate(
true, clNxMIdx, DNN_CBoutputsIdent, DNN_CBoutputsCalib, l1TowerClustersNxM_CB_pstn);
775 if (
l1Tau.pt() < 0) {
778 L1NNCaloTauCollectionBXV->push_back(0,
l1Tau);
783 int batchSize_CE = (
int)(Nclusters_CE);
784 tensorflow::TensorShape imageShape_CE({batchSize_CE,
IEta_dim,
IPhi_dim, 2});
785 tensorflow::TensorShape positionShape_CE({batchSize_CE, 2});
786 tensorflow::TensorShape cl3dfeatShape_CE({batchSize_CE, 8});
787 tensorflow::Tensor TowerClusterImage_CE(tensorflow::DT_FLOAT, imageShape_CE);
788 tensorflow::Tensor TowerClusterPosition_CE(tensorflow::DT_FLOAT, positionShape_CE);
789 tensorflow::Tensor Cl3dShapeFeatures_CE(tensorflow::DT_FLOAT, cl3dfeatShape_CE);
791 for (
int clNxMIdx = 0; clNxMIdx < Nclusters_CE; clNxMIdx++) {
799 TowerClusterImage_CE.tensor<
float, 4>()(clNxMIdx,
eta,
phi, 0) =
800 (l1TowerClustersNxM_CE[clNxMIdx].towerHits[towerIdx].l1egTowerEt.to_float() +
801 l1TowerClustersNxM_CE[clNxMIdx].towerHits[towerIdx].towerEm.to_float());
802 TowerClusterImage_CE.tensor<
float, 4>()(clNxMIdx,
eta,
phi, 1) =
803 (l1TowerClustersNxM_CE[clNxMIdx].towerHits[towerIdx].towerHad.to_float());
807 TowerClusterPosition_CE.tensor<
float, 2>()(clNxMIdx, 0) =
floatIEta(l1TowerClustersNxM_CE_pstn[clNxMIdx].seedIeta);
808 TowerClusterPosition_CE.tensor<
float, 2>()(clNxMIdx, 1) =
floatIPhi(l1TowerClustersNxM_CE_pstn[clNxMIdx].seedIphi);
810 Cl3dShapeFeatures_CE.tensor<
float, 2>()(clNxMIdx, 0) =
inputScaler(HGClu.
pt.to_float(),
"pt");
813 Cl3dShapeFeatures_CE.tensor<
float, 2>()(clNxMIdx, 3) =
826 {
"TowerClusterPosition", TowerClusterPosition_CE},
827 {
"AssociatedCl3dFeatures", Cl3dShapeFeatures_CE}};
828 std::vector<tensorflow::Tensor> CNNmodel_CEoutputs;
830 CNNmodel_CEinputList,
831 {
"TauMinator_CE_conv/middleMan/concat"},
832 &CNNmodel_CEoutputs);
836 std::vector<tensorflow::Tensor> DNN_CEoutputsIdent;
839 {
"TauMinator_CE_ident/sigmoid_IDout/Sigmoid"},
840 &DNN_CEoutputsIdent);
843 std::vector<tensorflow::Tensor> DNN_CEoutputsCalib;
846 {
"TauMinator_CE_calib/LIN_DNNout/Relu"},
847 &DNN_CEoutputsCalib);
850 for (
int clNxMIdx = 0; clNxMIdx < Nclusters_CE; clNxMIdx++) {
852 MakeTauCandidate(
false, clNxMIdx, DNN_CEoutputsIdent, DNN_CEoutputsCalib, l1TowerClustersNxM_CE_pstn);
853 if (
l1Tau.pt() < 0) {
856 L1NNCaloTauCollectionBXV->push_back(0,
l1Tau);
861 iEvent.put(
std::move(L1NNCaloTauCollectionBXV),
"L1NNCaloTauCollectionBXV");
865 template <
class outPrecision,
class inPrecision>
869 outPrecision dphi0 = dphi > outPrecision(
INTPHI_PI) ? outPrecision(dphi -
INTPHI_2PI) : dphi;
870 outPrecision dphi1 = dphi <= outPrecision(-
INTPHI_PI) ? outPrecision(dphi +
INTPHI_2PI) : dphi;
872 outPrecision
result = dphi > outPrecision(0) ? dphi0 : dphi1;
878 ap_int<12>
mult = iEta_1 * iEta_2;
895 return dPhi<dEtaPhi_t, EtaPhi_t>(
iPhi_1, fineiPhi_2);
907 return iEta_1 - fineiEta_2;
937 template <
int W,
int I, ap_q_mode _AP_Q, ap_o_mode _AP_O>
950 return min(floor(inputF / LSB),
float(
pow(2, nbits) - 1)) * LSB;
954 return min(floor(inputF / LSB),
float(
pow(2, nbits) - 1));
958 float mean = (globalCache()->FeatScaler_CE).get_child(feature).get<
float>(
"mean");
959 float std = (globalCache()->FeatScaler_CE).get_child(feature).get<
float>(
"std");
990 float fphi =
phi.to_float();
1002 std::vector<tensorflow::Tensor> outputsIdent,
1003 std::vector<tensorflow::Tensor> outputsCalib,
1004 std::vector<L1NNCaloTauEmulator::InputTowerCluster_pstn> clustersNxM_pstn) {
1005 int seedIeta = clustersNxM_pstn[clNxMIdx].seedIeta;
1006 int seedIphi = clustersNxM_pstn[clNxMIdx].seedIphi;
1013 float tau_IDscore = outputsIdent[0].matrix<
float>()(0, clNxMIdx);
1014 float tau_calibPt = outputsCalib[0].matrix<
float>()(0, clNxMIdx);
1054 l1Tau.setTowerIEta(seedIeta);
1055 l1Tau.setTowerIPhi(seedIphi);
1066 edm::InputTag(
"l1tHGCalBackEndLayer2Producer",
"HGCalBackendLayer2Processor3DClustering"));
1071 psd0.
add<
bool>(
"isPUFilter",
true);
1078 std::vector<edm::ParameterSet> temp2;
1084 temp2.push_back(temp3);
1090 temp2.push_back(temp3);
1096 temp2.push_back(temp3);
1102 temp2.push_back(temp3);
1108 temp2.push_back(temp3);
1110 psd0.
addVPSet(
"variables", vpsd2, temp2);
1113 "weightsFile",
"L1Trigger/Phase2L1ParticleFlow/data/hgcal_egID/Photon_Pion_vs_Neutrino_BDTweights_1116.xml.gz");
1118 desc.add<
double>(
"EcalEtMinForClustering", 0.0);
1119 desc.add<
double>(
"HcalEtMinForClustering", 0.0);
1120 desc.add<
double>(
"EtMinForSeeding", 2.5);
1121 desc.add<
double>(
"EtaRestriction", 2.4);
1122 desc.add<
double>(
"CB_CE_split", 1.55);
1123 desc.add<
double>(
"PuidThr", -0.1);
1125 desc.add<
std::string>(
"CNNmodel_CB_path",
"L1Trigger/L1CaloTrigger/data/Phase2_NNCaloTaus/v22/CNNmodel_CB.pb");
1126 desc.add<
std::string>(
"DNNident_CB_path",
"L1Trigger/L1CaloTrigger/data/Phase2_NNCaloTaus/v22/DNNident_CB.pb");
1127 desc.add<
std::string>(
"DNNcalib_CB_path",
"L1Trigger/L1CaloTrigger/data/Phase2_NNCaloTaus/v22/DNNcalib_CB.pb");
1128 desc.add<
std::string>(
"CNNmodel_CE_path",
"L1Trigger/L1CaloTrigger/data/Phase2_NNCaloTaus/v22/CNNmodel_CE.pb");
1129 desc.add<
std::string>(
"DNNident_CE_path",
"L1Trigger/L1CaloTrigger/data/Phase2_NNCaloTaus/v22/DNNident_CE.pb");
1130 desc.add<
std::string>(
"DNNcalib_CE_path",
"L1Trigger/L1CaloTrigger/data/Phase2_NNCaloTaus/v22/DNNcalib_CE.pb");
1131 desc.add<
std::string>(
"FeatScaler_CE_path",
"L1Trigger/L1CaloTrigger/data/Phase2_NNCaloTaus/Cl3dFeatScaler_CE.json");
1133 desc.add<
double>(
"IdWp90_CB", 0.706);
1134 desc.add<
double>(
"IdWp95_CB", 0.3432);
1135 desc.add<
double>(
"IdWp99_CB", 0.0337);
1136 desc.add<
double>(
"IdWp90_CE", 0.5711);
1137 desc.add<
double>(
"IdWp95_CE", 0.2742);
1138 desc.add<
double>(
"IdWp99_CE", 0.0394);
1140 desc.add<
bool>(
"DEBUG",
false);
1142 descriptions.
add(
"l1tNNCaloTauEmulator",
desc);
boost::property_tree::ptree FeatScaler_CE
ap_int< IETAPHI_W > IEta_t
tensorflow::Session * CNNmodel_CEsession
tensorflow::GraphDef * DNNident_CB
std::string DNNident_CE_path
std::string DNNcalib_CB_path
edm::EDGetToken hgcalTowersToken
ap_uint< MEANZ_W > Meanz_t
std::vector< NamedTensor > NamedTensorList
static constexpr int ID_I
T getParameter(std::string const &) const
tensorflow::GraphDef * CNNmodel_CB
static constexpr int CALIBPT_W
static constexpr int PUID_W
int apintQuantizer(float inputF, float LSB, int nbits)
outPrecision dPhi(inPrecision iPhi_1, inPrecision iPhi_2)
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
static constexpr int ET_W
static void globalEndJob(const NNmodels_GlobalCache *)
StringCutObjectSelector< l1t::HGCalMulticluster > preEmId
double EcalEtMinForClustering
double pt() const final
transverse momentum
static constexpr float MEANZ_LSB
static constexpr int INTPHI_PI
std::string fullPath() const
static constexpr int PT_W
GraphDef * loadGraphDef(const std::string &pbFile)
static constexpr int INTPHI_2PI
static constexpr int FINEINTPHI_2PI
double HcalEtMinForClustering
edm::Handle< l1tp2::CaloTowerCollection > l1CaloTowerHandle
T const * product() const
static constexpr int SHOWLEN_W
static constexpr float ETAHGCAL_OFFSET
ap_ufixed< CALIBPT_W, CALIBPT_I, AP_TRN, AP_SAT > CalibPt_t
static constexpr int DETAPHI_W
tensorflow::Session * DNNident_CBsession
tensorflow::Session * DNNcalib_CEsession
static constexpr float MEANZ_OFFSET
std::string CNNmodel_CB_path
float floatPuId(PUid_t pu)
void fill(SimpleTowerHit Tower)
static std::unique_ptr< NNmodels_GlobalCache > initializeGlobalCache(const edm::ParameterSet &)
dEtaPhi_t tw2cl_dPhi(EtaPhi_t iPhi_1, IPhi_t iPhi_2)
static constexpr int MEANZ_W
float floatEta(EtaPhi_t eta)
tensorflow::Session * DNNident_CEsession
float correctInputMeanzCl3d(float meanz)
BXVector< HGCalTower > HGCalTowerBxCollection
static constexpr int SHAPEFEAT_W
static constexpr float IETAHGCAL_LSBp
ap_int< DIETAPHI_W > dIEtaPhi_t
tensorflow::GraphDef * DNNcalib_CE
ap_int< DETAPHI_W > dEtaPhi_t
std::string CNNmodel_CE_path
ap_ufixed< PT_W, PT_I, AP_TRN, AP_SAT > Pt_t
void addParameter(std::string const &name, T const &value)
float floatSzz(ShapeFeat_t szz)
BXVector< HGCalMulticluster > HGCalMulticlusterBxCollection
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Abs< T >::type abs(const T &t)
tensorflow::GraphDef * CNNmodel_CE
static constexpr float PTET_LSB
float inputScaler(float inputF, std::string feature)
std::string DNNident_CB_path
#define DEFINE_FWK_MODULE(type)
ap_int< ETAPHI_W > EtaPhi_t
IEta_t makeEndcapHwIEta(float eta)
static constexpr int ID_W
ParameterDescriptionBase * add(U const &iLabel, T const &value)
IPhi_t makeEndcapHwIPhi(float phi)
void produce(edm::Event &, const edm::EventSetup &) override
ap_int< W > ap_abs(ap_int< W > x)
typename CacheTypes::GlobalCache GlobalCache
dIEtaPhi_t tower_dIEta(IEta_t iEta_1, IEta_t iEta_2)
l1tpf::HGC3DClusterEgID VsPuId
static constexpr int CALIBPT_I
static constexpr int ET_I
tensorflow::Session * DNNcalib_CBsession
Session * createSession()
std::string DNNcalib_CE_path
float apfixedQuantizer(float inputF, float LSB, int nbits)
ap_ufixed< ID_W, ID_I, AP_TRN, AP_SAT > Id_t
Log< level::Info, false > LogInfo
edm::Handle< l1t::HGCalTowerBxCollection > hgcalTowersHandle
static constexpr float PUID_LSB
void setLogging(const std::string &level="3")
float correctInputEtaCl3d(float eta)
static constexpr int IETAPHI_W
static constexpr float SZZ_LSB
ap_uint< SHOWLEN_W > ShowLen_t
static constexpr int IETAHGCAL_OFFSET
static constexpr int R2cone
float floatIPhi(IPhi_t phi)
tensorflow::Session * CNNmodel_CBsession
static constexpr int FINEINTPHI_PI
static constexpr float CM2MM
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::EDGetTokenT< l1t::HGCalMulticlusterBxCollection > HGClusterToken
float floatIEta(IEta_t eta)
l1t::Tau MakeTauCandidate(bool isBarrel, int clNxMIdx, std::vector< tensorflow::Tensor > outputsIdent, std::vector< tensorflow::Tensor > outputsCalib, std::vector< InputTowerCluster_pstn > clustersNxM_pstn)
static constexpr int DIETAPHI_W
static constexpr int PT_I
tensorflow::GraphDef * DNNcalib_CB
float floatPhi(EtaPhi_t phi)
float floatShape(ShapeFeat_t shape)
ap_ufixed< ET_W, ET_I, AP_TRN, AP_SAT > Et_t
static constexpr float IETAPHI_LSB
ap_uint< SHAPEFEAT_W > ShapeFeat_t
static constexpr float SHAPEFEAT_LSB
static constexpr float IETAHGCAL_LSB
L1NNCaloTauEmulator(const edm::ParameterSet &, const NNmodels_GlobalCache *)
edm::Handle< l1t::HGCalMulticlusterBxCollection > HGClusterHandle
float floatMeanZ(Meanz_t meanz)
Log< level::Warning, false > LogWarning
static constexpr float ETAPHI_LSB
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
float passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf)
ShowLen_t coreshowerlength
std::string FeatScaler_CE_path
static constexpr int ETAPHI_W
tensorflow::GraphDef * DNNident_CE
dEtaPhi_t tw2cl_dEta(EtaPhi_t iEta_1, IEta_t iEta_2)
Power< A, B >::type pow(const A &a, const B &b)
ap_uint< IETAPHI_W > IPhi_t
float floatMeanZHgcalCoord(Meanz_t meanz)
edm::EDGetTokenT< l1tp2::CaloTowerCollection > l1TowersToken
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.