460 if (
hit.towerIEta() == -1016 &&
hit.towerIPhi() == -962) {
465 SimpleTowerHit l1Hit;
466 l1Hit.isBarrel = 0x1;
471 l1Hit.towerIeta =
hit.towerIEta();
472 l1Hit.towerIphi =
hit.towerIPhi();
478 <<
" TOWERS WITH towerIeta=-1016 AND towerIphi=-962" << std::endl;
483 SimpleTowerHit l1Hit;
484 l1Hit.isBarrel = 0x0;
485 l1Hit.l1egTowerEt = 0.0;
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();
541 SimpleHGCluster HGCluster;
545 HGCluster.showerlength = cl3d.showerLength();
546 HGCluster.coreshowerlength = cl3d.coreShowerLength();
553 AllHGClusters.push_back(HGCluster);
557 std::sort(
begin(AllHGClusters),
end(AllHGClusters), [](
const SimpleHGCluster&
a, SimpleHGCluster&
b) {
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) {
584 InputTowerCluster clNxM;
586 InputTowerCluster_pstn clNxM_pstn;
593 l1CaloTower.stale4seed) {
601 caloTauSeedingFinished =
true;
605 clNxM.fill(
seedIdx, l1CaloTower);
606 clNxM_pstn.fill(l1CaloTower);
607 if (l1CaloTower.isBarrel) {
608 clNxM.barrelSeeded = 0x1;
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++) {
793 InputHGCluster HGClu = HGClusters[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");
812 Cl3dShapeFeatures_CE.tensor<
float, 2>()(clNxMIdx, 2) =
inputScaler(HGClu.showerlength.to_float(),
"showerlength");
813 Cl3dShapeFeatures_CE.tensor<
float, 2>()(clNxMIdx, 3) =
814 inputScaler(HGClu.coreshowerlength.to_float(),
"coreshowerlength");
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");
edm::EDGetToken hgcalTowersToken
std::vector< NamedTensor > NamedTensorList
static constexpr int PUID_W
int apintQuantizer(float inputF, float LSB, int nbits)
static constexpr int ET_W
StringCutObjectSelector< l1t::HGCalMulticluster > preEmId
double pt() const final
transverse momentum
static constexpr float MEANZ_LSB
static constexpr int PT_W
edm::Handle< l1tp2::CaloTowerCollection > l1CaloTowerHandle
T const * product() const
dEtaPhi_t tw2cl_dPhi(EtaPhi_t iPhi_1, IPhi_t iPhi_2)
static constexpr int MEANZ_W
float floatEta(EtaPhi_t eta)
float correctInputMeanzCl3d(float meanz)
static constexpr int SHAPEFEAT_W
ap_int< DIETAPHI_W > dIEtaPhi_t
ap_int< DETAPHI_W > dEtaPhi_t
ap_ufixed< PT_W, PT_I, AP_TRN, AP_SAT > Pt_t
float floatSzz(ShapeFeat_t szz)
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)
static constexpr float PTET_LSB
float inputScaler(float inputF, std::string feature)
IEta_t makeEndcapHwIEta(float eta)
IPhi_t makeEndcapHwIPhi(float phi)
ap_int< W > ap_abs(ap_int< W > x)
dIEtaPhi_t tower_dIEta(IEta_t iEta_1, IEta_t iEta_2)
l1tpf::HGC3DClusterEgID VsPuId
float apfixedQuantizer(float inputF, float LSB, int nbits)
edm::Handle< l1t::HGCalTowerBxCollection > hgcalTowersHandle
static constexpr float PUID_LSB
void setLogging(const std::string &level="3")
float correctInputEtaCl3d(float eta)
static constexpr float SZZ_LSB
static constexpr int R2cone
float floatIPhi(IPhi_t phi)
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)
float floatShape(ShapeFeat_t shape)
static constexpr float SHAPEFEAT_LSB
edm::Handle< l1t::HGCalMulticlusterBxCollection > HGClusterHandle
Log< level::Warning, false > LogWarning
static constexpr float ETAPHI_LSB
float passID(l1t::HGCalMulticluster c, l1t::PFCluster &cpf)
static constexpr int ETAPHI_W
dEtaPhi_t tw2cl_dEta(EtaPhi_t iEta_1, IEta_t iEta_2)
float floatMeanZHgcalCoord(Meanz_t meanz)
edm::EDGetTokenT< l1tp2::CaloTowerCollection > l1TowersToken