CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
DeepTauId Class Reference
Inheritance diagram for DeepTauId:
deep_tau::DeepTauBase edm::stream::EDProducer< edm::GlobalCache< DeepTauCache > >

Public Member Functions

 DeepTauId (const edm::ParameterSet &cfg, const deep_tau::DeepTauCache *cache)
 
const std::map< BasicDiscriminator, size_t > matchDiscriminatorIndices (edm::Event &event, edm::EDGetTokenT< reco::TauDiscriminatorContainer > discriminatorContainerToken, std::vector< BasicDiscriminator > requiredDiscr)
 
- Public Member Functions inherited from deep_tau::DeepTauBase
 DeepTauBase (const edm::ParameterSet &cfg, const OutputCollection &outputs, const DeepTauCache *cache)
 
void produce (edm::Event &event, const edm::EventSetup &es) override
 
 ~DeepTauBase () override
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< DeepTauCache > >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
static const OutputCollectionGetOutputs ()
 
static void globalEndJob (const deep_tau::DeepTauCache *cache_)
 
static std::unique_ptr< deep_tau::DeepTauCacheinitializeGlobalCache (const edm::ParameterSet &cfg)
 
- Static Public Member Functions inherited from deep_tau::DeepTauBase
static void globalEndJob (const DeepTauCache *cache)
 
static std::unique_ptr< DeepTauCacheinitializeGlobalCache (const edm::ParameterSet &cfg)
 

Static Public Attributes

static constexpr float default_value = -999.
 

Private Member Functions

void checkInputs (const tensorflow::Tensor &inputs, const std::string &block_name, int n_inputs, const CellGrid *grid=nullptr) const
 
template<typename CandidateCastType , typename TauCastType >
void createConvFeatures (const TauCastType &tau, const size_t tau_index, const edm::RefToBase< reco::BaseTau > tau_ref, const reco::Vertex &pv, double rho, const std::vector< pat::Electron > *electrons, const std::vector< pat::Muon > *muons, const edm::View< reco::Candidate > &pfCands, const CellGrid &grid, TauFunc tau_funcs, bool is_inner)
 
template<typename CandidateCastType , typename TauCastType >
void createEgammaBlockInputs (unsigned idx, const TauCastType &tau, const size_t tau_index, const edm::RefToBase< reco::BaseTau > tau_ref, const reco::Vertex &pv, double rho, const std::vector< pat::Electron > *electrons, const edm::View< reco::Candidate > &pfCands, const Cell &cell_map, TauFunc tau_funcs, bool is_inner)
 
template<typename CandidateCastType , typename TauCastType >
void createHadronsBlockInputs (unsigned idx, const TauCastType &tau, const size_t tau_index, const edm::RefToBase< reco::BaseTau > tau_ref, const reco::Vertex &pv, double rho, const edm::View< reco::Candidate > &pfCands, const Cell &cell_map, TauFunc tau_funcs, bool is_inner)
 
template<typename CandidateCastType , typename TauCastType >
void createMuonBlockInputs (unsigned idx, const TauCastType &tau, const size_t tau_index, const edm::RefToBase< reco::BaseTau > tau_ref, const reco::Vertex &pv, double rho, const std::vector< pat::Muon > *muons, const edm::View< reco::Candidate > &pfCands, const Cell &cell_map, TauFunc tau_funcs, bool is_inner)
 
template<typename CandidateCastType , typename TauCastType >
void createTauBlockInputs (const TauCastType &tau, const size_t &tau_index, const edm::RefToBase< reco::BaseTau > tau_ref, const reco::Vertex &pv, double rho, TauFunc tau_funcs)
 
template<typename Collection , typename TauCastType >
void fillGrids (const TauCastType &tau, const Collection &objects, CellGrid &inner_grid, CellGrid &outer_grid)
 
tensorflow::Tensor getPartialPredictions (bool is_inner)
 
tensorflow::Tensor getPredictions (edm::Event &event, edm::Handle< TauCollection > taus) override
 
template<typename CandidateCastType , typename TauCastType >
void getPredictionsV2 (TauCollection::const_reference &tau, const size_t tau_index, const edm::RefToBase< reco::BaseTau > tau_ref, const std::vector< pat::Electron > *electrons, const std::vector< pat::Muon > *muons, const edm::View< reco::Candidate > &pfCands, const reco::Vertex &pv, double rho, const edm::EventNumber_t &eventnr, std::vector< tensorflow::Tensor > &pred_vector, TauFunc tau_funcs)
 
void saveInputs (const tensorflow::Tensor &inputs, const std::string &block_name, int n_inputs, const CellGrid *grid=nullptr)
 
void setCellConvFeatures (tensorflow::Tensor &convTensor, const tensorflow::Tensor &features, unsigned batch_idx, int eta_index, int phi_index)
 

Static Private Member Functions

static void calculateElectronClusterVars (const pat::Electron *ele, float &elecEe, float &elecEgamma)
 
static bool calculateElectronClusterVarsV2 (const pat::Electron &ele, float &cc_ele_energy, float &cc_gamma_energy, int &cc_n_gamma)
 
template<typename TauCastType >
static bool calculateGottfriedJacksonAngleDifference (const TauCastType &tau, const size_t tau_index, double &gj_diff, TauFunc tau_funcs)
 
template<typename TauCastType >
static float calculateGottfriedJacksonAngleDifference (const TauCastType &tau, const size_t tau_index, TauFunc tau_funcs)
 
template<typename TauCastType >
static const pat::ElectronfindMatchedElectron (const TauCastType &tau, const std::vector< pat::Electron > *electrons, double deltaR)
 
static double getInnerSignalConeRadius (double pt)
 
template<typename T >
static float getValue (T value)
 
template<typename T >
static float getValueLinear (T value, float min_value, float max_value, bool positive)
 
template<typename T >
static float getValueNorm (T value, float mean, float sigma, float n_sigmas_max=5)
 
static bool isAbove (double value, double min)
 
static bool isInEcalCrack (double eta)
 
template<typename CandidateCollection , typename TauCastType >
static void processIsolationPFComponents (const TauCastType &tau, const CandidateCollection &candidates, LorentzVectorXYZ &p4, float &pt, float &d_eta, float &d_phi, float &m, float &n)
 
template<typename CandidateCollection , typename TauCastType >
static void processSignalPFComponents (const TauCastType &tau, const CandidateCollection &candidates, LorentzVectorXYZ &p4_inner, LorentzVectorXYZ &p4_outer, float &pt_inner, float &dEta_inner, float &dPhi_inner, float &m_inner, float &pt_outer, float &dEta_outer, float &dPhi_outer, float &m_outer, float &n_inner, float &n_outer)
 

Private Attributes

std::map< BasicDiscriminator, size_t > basicDiscrdR03IndexMap_
 
std::map< BasicDiscriminator, size_t > basicDiscrIndexMap_
 
edm::EDGetTokenT< reco::TauDiscriminatorContainerbasicTauDiscriminators_inputToken_
 
edm::EDGetTokenT< reco::TauDiscriminatorContainerbasicTauDiscriminatorsdR03_inputToken_
 
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > convTensor_
 
const int debug_level
 
const bool disable_CellIndex_workaround_
 
const bool disable_dxy_pca_
 
const bool disable_hcalFraction_workaround_
 
bool discrIndicesMapped_ = false
 
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
 
edm::EDGetTokenT< std::vector< pat::Electron > > electrons_token_
 
int file_counter_
 
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
 
std::string input_layer_
 
bool is_first_block_
 
std::ofstream * json_file_
 
edm::EDGetTokenT< std::vector< pat::Muon > > muons_token_
 
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
 
std::string output_layer_
 
edm::EDGetTokenT< edm::AssociationVector< reco::PFTauRefProd, std::vector< reco::PFTauTransverseImpactParameterRef > > > pfTauTransverseImpactParameters_token_
 
edm::EDGetTokenT< double > rho_token_
 
const bool save_inputs_
 
const std::map< std::pair< deep_tau::Scaling::FeatureT, bool >, deep_tau::Scaling::ScalingParams > * scalingParamsMap_
 
const unsigned sub_version_
 
std::unique_ptr< tensorflow::Tensor > tauBlockTensor_
 
std::vector< int > tauInputs_indices_
 
const unsigned version_
 
const unsigned year_
 
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > zeroOutputTensor_
 

Static Private Attributes

static constexpr float pi = M_PI
 

Additional Inherited Members

- Public Types inherited from deep_tau::DeepTauBase
enum  BasicDiscriminator {
  ChargedIsoPtSum, NeutralIsoPtSum, NeutralIsoPtSumWeight, FootprintCorrection,
  PhotonPtSumOutsideSignalCone, PUcorrPtSum
}
 
using CandidateCollection = edm::View< reco::Candidate >
 
using Cutter = TauWPThreshold
 
using CutterPtr = std::unique_ptr< Cutter >
 
using ElectronCollection = pat::ElectronCollection
 
using LorentzVectorXYZ = ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > >
 
using MuonCollection = pat::MuonCollection
 
using OutputCollection = std::map< std::string, Output >
 
using TauCollection = edm::View< reco::BaseTau >
 
using TauDiscriminator = reco::TauDiscriminatorContainer
 
using TauRef = edm::Ref< TauCollection >
 
using TauRefProd = edm::RefProd< TauCollection >
 
using WPList = std::vector< CutterPtr >
 
- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< DeepTauCache > >
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 
- Public Attributes inherited from deep_tau::DeepTauBase
uint8_t andPrediscriminants_
 
std::vector< TauDiscInfo< pat::PATTauDiscriminator > > patPrediscriminants_
 
std::vector< TauDiscInfo< reco::PFTauDiscriminator > > recoPrediscriminants_
 
- Protected Attributes inherited from deep_tau::DeepTauBase
const DeepTauCachecache_
 
const bool is_online_
 
OutputCollection outputs_
 
edm::EDGetTokenT< CandidateCollectionpfcandToken_
 
edm::EDGetTokenT< TauCollectiontausToken_
 
edm::EDGetTokenT< reco::VertexCollectionvtxToken_
 
std::map< std::string, WPListworkingPoints_
 
- Static Protected Attributes inherited from deep_tau::DeepTauBase
static const std::vector< BasicDiscriminatorrequiredBasicDiscriminators_
 
static const std::vector< BasicDiscriminatorrequiredBasicDiscriminatorsdR03_
 
static const std::map< BasicDiscriminator, std::string > stringFromDiscriminator_
 

Detailed Description

Definition at line 827 of file DeepTauId.cc.

Constructor & Destructor Documentation

◆ DeepTauId()

DeepTauId::DeepTauId ( const edm::ParameterSet cfg,
const deep_tau::DeepTauCache cache 
)
inlineexplicit

Definition at line 918 of file DeepTauId.cc.

References convTensor_, eGammaTensor_, nanoDQM_cfi::Electron, mps_fire::end, Exception, getPartialPredictions(), hadronsTensor_, mps_fire::i, dumpRecoGeometry_cfg::Muon, muonTensor_, dqmiodumpmetadata::n, AlCaHLTBitMon_ParallelJobs::p, scalingParamsMap_, deep_tau::Scaling::scalingParamsMap_PhaseIIv2p5, deep_tau::Scaling::scalingParamsMap_v2p1, deep_tau::Scaling::scalingParamsMap_v2p5, setCellConvFeatures(), findQualityFiles::size, jetUpdater_cfi::sort, sub_version_, tauBlockTensor_, tauInputs_indices_, findQualityFiles::v, version_, year_, and zeroOutputTensor_.

920  electrons_token_(consumes<std::vector<pat::Electron>>(cfg.getParameter<edm::InputTag>("electrons"))),
921  muons_token_(consumes<std::vector<pat::Muon>>(cfg.getParameter<edm::InputTag>("muons"))),
922  rho_token_(consumes<double>(cfg.getParameter<edm::InputTag>("rho"))),
923  basicTauDiscriminators_inputToken_(consumes<reco::TauDiscriminatorContainer>(
924  cfg.getUntrackedParameter<edm::InputTag>("basicTauDiscriminators"))),
925  basicTauDiscriminatorsdR03_inputToken_(consumes<reco::TauDiscriminatorContainer>(
926  cfg.getUntrackedParameter<edm::InputTag>("basicTauDiscriminatorsdR03"))),
928  consumes<edm::AssociationVector<reco::PFTauRefProd, std::vector<reco::PFTauTransverseImpactParameterRef>>>(
929  cfg.getParameter<edm::InputTag>("pfTauTransverseImpactParameters"))),
930  year_(cfg.getParameter<unsigned>("year")),
931  version_(cfg.getParameter<unsigned>("version")),
932  sub_version_(cfg.getParameter<unsigned>("sub_version")),
933  debug_level(cfg.getParameter<int>("debug_level")),
934  disable_dxy_pca_(cfg.getParameter<bool>("disable_dxy_pca")),
935  disable_hcalFraction_workaround_(cfg.getParameter<bool>("disable_hcalFraction_workaround")),
936  disable_CellIndex_workaround_(cfg.getParameter<bool>("disable_CellIndex_workaround")),
937  save_inputs_(cfg.getParameter<bool>("save_inputs")),
938  json_file_(nullptr),
939  file_counter_(0) {
940  if (version_ == 2) {
941  using namespace dnn_inputs_v2;
942  namespace sc = deep_tau::Scaling;
943  tauInputs_indices_.resize(TauBlockInputs::NumberOfInputs);
944  std::iota(std::begin(tauInputs_indices_), std::end(tauInputs_indices_), 0);
945 
946  if (sub_version_ == 1) {
947  tauBlockTensor_ = std::make_unique<tensorflow::Tensor>(
948  tensorflow::DT_FLOAT, tensorflow::TensorShape{1, TauBlockInputs::NumberOfInputs});
950  } else if (sub_version_ == 5) {
951  std::sort(TauBlockInputs::varsToDrop.begin(), TauBlockInputs::varsToDrop.end());
952  for (auto v : TauBlockInputs::varsToDrop) {
953  tauInputs_indices_.at(v) = -1; // set index to -1
954  for (std::size_t i = v + 1; i < TauBlockInputs::NumberOfInputs; ++i)
955  tauInputs_indices_.at(i) -= 1; // shift all the following indices by 1
956  }
957  tauBlockTensor_ = std::make_unique<tensorflow::Tensor>(
958  tensorflow::DT_FLOAT,
959  tensorflow::TensorShape{1,
960  static_cast<int>(TauBlockInputs::NumberOfInputs) -
961  static_cast<int>(TauBlockInputs::varsToDrop.size())});
962  if (year_ == 2026) {
964  } else {
966  }
967  } else
968  throw cms::Exception("DeepTauId") << "subversion " << sub_version_ << " is not supported.";
969 
970  std::map<std::vector<bool>, std::vector<sc::FeatureT>> GridFeatureTypes_map = {
971  {{false}, {sc::FeatureT::TauFlat, sc::FeatureT::GridGlobal}}, // feature types without inner/outer grid split
972  {{false, true},
973  {sc::FeatureT::PfCand_electron,
974  sc::FeatureT::PfCand_muon, // feature types with inner/outer grid split
975  sc::FeatureT::PfCand_chHad,
976  sc::FeatureT::PfCand_nHad,
977  sc::FeatureT::PfCand_gamma,
980 
981  // check that sizes of mean/std/lim_min/lim_max vectors are equal between each other
982  for (const auto& p : GridFeatureTypes_map) {
983  for (auto is_inner : p.first) {
984  for (auto featureType : p.second) {
985  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(featureType, is_inner));
986  if (!(sp.mean_.size() == sp.std_.size() && sp.mean_.size() == sp.lim_min_.size() &&
987  sp.mean_.size() == sp.lim_max_.size()))
988  throw cms::Exception("DeepTauId") << "sizes of scaling parameter vectors do not match between each other";
989  }
990  }
991  }
992 
993  for (size_t n = 0; n < 2; ++n) {
994  const bool is_inner = n == 0;
995  const auto n_cells = is_inner ? number_of_inner_cell : number_of_outer_cell;
996  eGammaTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
997  tensorflow::DT_FLOAT, tensorflow::TensorShape{1, 1, 1, EgammaBlockInputs::NumberOfInputs});
998  muonTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
999  tensorflow::DT_FLOAT, tensorflow::TensorShape{1, 1, 1, MuonBlockInputs::NumberOfInputs});
1000  hadronsTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
1001  tensorflow::DT_FLOAT, tensorflow::TensorShape{1, 1, 1, HadronBlockInputs::NumberOfInputs});
1002  convTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
1003  tensorflow::DT_FLOAT, tensorflow::TensorShape{1, n_cells, n_cells, number_of_conv_features});
1004  zeroOutputTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
1005  tensorflow::DT_FLOAT, tensorflow::TensorShape{1, 1, 1, number_of_conv_features});
1006 
1007  eGammaTensor_[is_inner]->flat<float>().setZero();
1008  muonTensor_[is_inner]->flat<float>().setZero();
1009  hadronsTensor_[is_inner]->flat<float>().setZero();
1010 
1011  setCellConvFeatures(*zeroOutputTensor_[is_inner], getPartialPredictions(is_inner), 0, 0, 0);
1012  }
1013  } else {
1014  throw cms::Exception("DeepTauId") << "version " << version_ << " is not supported.";
1015  }
1016  }
size
Write out results.
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
Definition: DeepTauId.cc:2448
const bool disable_dxy_pca_
Definition: DeepTauId.cc:2444
const bool save_inputs_
Definition: DeepTauId.cc:2451
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > zeroOutputTensor_
Definition: DeepTauId.cc:2448
int file_counter_
Definition: DeepTauId.cc:2454
std::ofstream * json_file_
Definition: DeepTauId.cc:2452
void setCellConvFeatures(tensorflow::Tensor &convTensor, const tensorflow::Tensor &features, unsigned batch_idx, int eta_index, int phi_index)
Definition: DeepTauId.cc:1563
const unsigned version_
Definition: DeepTauId.cc:2441
const unsigned sub_version_
Definition: DeepTauId.cc:2442
const std::map< std::pair< deep_tau::Scaling::FeatureT, bool >, deep_tau::Scaling::ScalingParams > * scalingParamsMap_
Definition: DeepTauId.cc:2450
static const OutputCollection & GetOutputs()
Definition: DeepTauId.cc:831
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > convTensor_
Definition: DeepTauId.cc:2448
const std::map< std::pair< FeatureT, bool >, ScalingParams > scalingParamsMap_v2p5
const unsigned year_
Definition: DeepTauId.cc:2440
const bool disable_CellIndex_workaround_
Definition: DeepTauId.cc:2446
DeepTauBase(const edm::ParameterSet &cfg, const OutputCollection &outputs, const DeepTauCache *cache)
Definition: DeepTauBase.cc:91
const std::map< std::pair< FeatureT, bool >, ScalingParams > scalingParamsMap_v2p1
tensorflow::Tensor getPartialPredictions(bool is_inner)
Definition: DeepTauId.cc:1457
edm::EDGetTokenT< edm::AssociationVector< reco::PFTauRefProd, std::vector< reco::PFTauTransverseImpactParameterRef > > > pfTauTransverseImpactParameters_token_
Definition: DeepTauId.cc:2438
edm::EDGetTokenT< reco::TauDiscriminatorContainer > basicTauDiscriminators_inputToken_
Definition: DeepTauId.cc:2435
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
Definition: DeepTauId.cc:2448
const bool disable_hcalFraction_workaround_
Definition: DeepTauId.cc:2445
def cache(function)
Definition: utilities.py:3
edm::EDGetTokenT< reco::TauDiscriminatorContainer > basicTauDiscriminatorsdR03_inputToken_
Definition: DeepTauId.cc:2436
std::vector< int > tauInputs_indices_
Definition: DeepTauId.cc:2455
const int debug_level
Definition: DeepTauId.cc:2443
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
Definition: DeepTauId.cc:2448
edm::EDGetTokenT< std::vector< pat::Electron > > electrons_token_
Definition: DeepTauId.cc:2432
edm::EDGetTokenT< std::vector< pat::Muon > > muons_token_
Definition: DeepTauId.cc:2433
edm::EDGetTokenT< double > rho_token_
Definition: DeepTauId.cc:2434
const std::map< std::pair< FeatureT, bool >, ScalingParams > scalingParamsMap_PhaseIIv2p5
std::unique_ptr< tensorflow::Tensor > tauBlockTensor_
Definition: DeepTauId.cc:2447

Member Function Documentation

◆ calculateElectronClusterVars()

static void DeepTauId::calculateElectronClusterVars ( const pat::Electron ele,
float &  elecEe,
float &  elecEgamma 
)
inlinestaticprivate

Definition at line 2287 of file DeepTauId.cc.

References default_value, HCALHighEnergyHPDFilter_cfi::energy, and pat::Electron::superCluster().

2287  {
2288  if (ele) {
2289  elecEe = elecEgamma = 0;
2290  auto superCluster = ele->superCluster();
2291  if (superCluster.isNonnull() && superCluster.isAvailable() && superCluster->clusters().isNonnull() &&
2292  superCluster->clusters().isAvailable()) {
2293  for (auto iter = superCluster->clustersBegin(); iter != superCluster->clustersEnd(); ++iter) {
2294  const double energy = (*iter)->energy();
2295  if (iter == superCluster->clustersBegin())
2296  elecEe += energy;
2297  else
2298  elecEgamma += energy;
2299  }
2300  }
2301  } else {
2302  elecEe = elecEgamma = default_value;
2303  }
2304  }
static constexpr float default_value
Definition: DeepTauId.cc:829
reco::SuperClusterRef superCluster() const override
override the reco::GsfElectron::superCluster method, to access the internal storage of the superclust...

◆ calculateElectronClusterVarsV2()

static bool DeepTauId::calculateElectronClusterVarsV2 ( const pat::Electron ele,
float &  cc_ele_energy,
float &  cc_gamma_energy,
int &  cc_n_gamma 
)
inlinestaticprivate

Definition at line 1051 of file DeepTauId.cc.

References HCALHighEnergyHPDFilter_cfi::energy, and pat::Electron::superCluster().

Referenced by createEgammaBlockInputs().

1054  {
1055  cc_ele_energy = cc_gamma_energy = 0;
1056  cc_n_gamma = 0;
1057  const auto& superCluster = ele.superCluster();
1058  if (superCluster.isNonnull() && superCluster.isAvailable() && superCluster->clusters().isNonnull() &&
1059  superCluster->clusters().isAvailable()) {
1060  for (auto iter = superCluster->clustersBegin(); iter != superCluster->clustersEnd(); ++iter) {
1061  const float energy = static_cast<float>((*iter)->energy());
1062  if (iter == superCluster->clustersBegin())
1063  cc_ele_energy += energy;
1064  else {
1065  cc_gamma_energy += energy;
1066  ++cc_n_gamma;
1067  }
1068  }
1069  return true;
1070  } else
1071  return false;
1072  }
reco::SuperClusterRef superCluster() const override
override the reco::GsfElectron::superCluster method, to access the internal storage of the superclust...

◆ calculateGottfriedJacksonAngleDifference() [1/2]

template<typename TauCastType >
static bool DeepTauId::calculateGottfriedJacksonAngleDifference ( const TauCastType &  tau,
const size_t  tau_index,
double &  gj_diff,
TauFunc  tau_funcs 
)
inlinestaticprivate

Definition at line 2381 of file DeepTauId.cc.

References funct::abs(), funct::pow(), and metsig::tau.

Referenced by calculateGottfriedJacksonAngleDifference(), and createTauBlockInputs().

2384  {
2385  if (tau_funcs.getHasSecondaryVertex(tau, tau_index)) {
2386  static constexpr double mTau = 1.77682;
2387  const double mAOne = tau.p4().M();
2388  const double pAOneMag = tau.p();
2389  const double argumentThetaGJmax = (std::pow(mTau, 2) - std::pow(mAOne, 2)) / (2 * mTau * pAOneMag);
2390  const double argumentThetaGJmeasured = tau.p4().Vect().Dot(tau_funcs.getFlightLength(tau, tau_index)) /
2391  (pAOneMag * tau_funcs.getFlightLength(tau, tau_index).R());
2392  if (std::abs(argumentThetaGJmax) <= 1. && std::abs(argumentThetaGJmeasured) <= 1.) {
2393  double thetaGJmax = std::asin(argumentThetaGJmax);
2394  double thetaGJmeasured = std::acos(argumentThetaGJmeasured);
2395  gj_diff = thetaGJmeasured - thetaGJmax;
2396  return true;
2397  }
2398  }
2399  return false;
2400  }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29

◆ calculateGottfriedJacksonAngleDifference() [2/2]

template<typename TauCastType >
static float DeepTauId::calculateGottfriedJacksonAngleDifference ( const TauCastType &  tau,
const size_t  tau_index,
TauFunc  tau_funcs 
)
inlinestaticprivate

Definition at line 2403 of file DeepTauId.cc.

References calculateGottfriedJacksonAngleDifference(), default_value, and metsig::tau.

2405  {
2406  double gj_diff;
2407  if (calculateGottfriedJacksonAngleDifference(tau, tau_index, gj_diff, tau_funcs))
2408  return static_cast<float>(gj_diff);
2409  return default_value;
2410  }
static constexpr float default_value
Definition: DeepTauId.cc:829
static bool calculateGottfriedJacksonAngleDifference(const TauCastType &tau, const size_t tau_index, double &gj_diff, TauFunc tau_funcs)
Definition: DeepTauId.cc:2381

◆ checkInputs()

void DeepTauId::checkInputs ( const tensorflow::Tensor &  inputs,
const std::string &  block_name,
int  n_inputs,
const CellGrid *  grid = nullptr 
) const
inlineprivate

Definition at line 1074 of file DeepTauId.cc.

References cms::cuda::assert(), gather_cfg::cout, debug_level, PVValHelper::eta, Exception, alignBH_cfg::fixed, dqmMemoryStats::float, getRunAppsInfo::grid, input, PixelMapPlotter::inputs, edm::isNotFinite(), and phi.

Referenced by getPredictionsV2().

1077  {
1078  if (debug_level >= 1) {
1079  std::cout << "<checkInputs>: block_name = " << block_name << std::endl;
1080  if (block_name == "input_tau") {
1081  for (int input_index = 0; input_index < n_inputs; ++input_index) {
1082  float input = inputs.matrix<float>()(0, input_index);
1083  if (edm::isNotFinite(input)) {
1084  throw cms::Exception("DeepTauId")
1085  << "in the " << block_name
1086  << ", input is not finite, i.e. infinite or NaN, for input_index = " << input_index;
1087  }
1088  if (debug_level >= 2) {
1089  std::cout << block_name << "[var = " << input_index << "] = " << std::setprecision(5) << std::fixed << input
1090  << std::endl;
1091  }
1092  }
1093  } else {
1094  assert(grid);
1095  int n_eta, n_phi;
1096  if (block_name.find("input_inner") != std::string::npos) {
1097  n_eta = 5;
1098  n_phi = 5;
1099  } else if (block_name.find("input_outer") != std::string::npos) {
1100  n_eta = 10;
1101  n_phi = 10;
1102  } else
1103  assert(0);
1104  int eta_phi_index = 0;
1105  for (int eta = -n_eta; eta <= n_eta; ++eta) {
1106  for (int phi = -n_phi; phi <= n_phi; ++phi) {
1107  const CellIndex cell_index{eta, phi};
1108  const auto cell_iter = grid->find(cell_index);
1109  if (cell_iter != grid->end()) {
1110  for (int input_index = 0; input_index < n_inputs; ++input_index) {
1111  float input = inputs.tensor<float, 4>()(eta_phi_index, 0, 0, input_index);
1112  if (edm::isNotFinite(input)) {
1113  throw cms::Exception("DeepTauId")
1114  << "in the " << block_name << ", input is not finite, i.e. infinite or NaN, for eta = " << eta
1115  << ", phi = " << phi << ", input_index = " << input_index;
1116  }
1117  if (debug_level >= 2) {
1118  std::cout << block_name << "[eta = " << eta << "][phi = " << phi << "][var = " << input_index
1119  << "] = " << std::setprecision(5) << std::fixed << input << std::endl;
1120  }
1121  }
1122  eta_phi_index += 1;
1123  }
1124  }
1125  }
1126  }
1127  }
1128  }
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
assert(be >=bs)
static std::string const input
Definition: EdmProvDump.cc:50
const int debug_level
Definition: DeepTauId.cc:2443

◆ createConvFeatures()

template<typename CandidateCastType , typename TauCastType >
void DeepTauId::createConvFeatures ( const TauCastType &  tau,
const size_t  tau_index,
const edm::RefToBase< reco::BaseTau tau_ref,
const reco::Vertex pv,
double  rho,
const std::vector< pat::Electron > *  electrons,
const std::vector< pat::Muon > *  muons,
const edm::View< reco::Candidate > &  pfCands,
const CellGrid &  grid,
TauFunc  tau_funcs,
bool  is_inner 
)
inlineprivate

Definition at line 1482 of file DeepTauId.cc.

References convTensor_, gather_cfg::cout, debug_level, eGammaTensor_, pwdgSkimBPark_cfi::electrons, PVValHelper::eta, getPartialPredictions(), getRunAppsInfo::grid, hadronsTensor_, heavyIonCSV_trainingSettings::idx, createfilelist::int, PDWG_BPHSkim_cff::muons, muonTensor_, phi, MetAnalyzer::pv(), rho, setCellConvFeatures(), metsig::tau, and zeroOutputTensor_.

1492  {
1493  if (debug_level >= 2) {
1494  std::cout << "<DeepTauId::createConvFeatures (is_inner = " << is_inner << ")>:" << std::endl;
1495  }
1496  tensorflow::Tensor& convTensor = *convTensor_.at(is_inner);
1497  eGammaTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
1498  tensorflow::DT_FLOAT,
1499  tensorflow::TensorShape{
1500  (long long int)grid.num_valid_cells(), 1, 1, dnn_inputs_v2::EgammaBlockInputs::NumberOfInputs});
1501  muonTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
1502  tensorflow::DT_FLOAT,
1503  tensorflow::TensorShape{
1504  (long long int)grid.num_valid_cells(), 1, 1, dnn_inputs_v2::MuonBlockInputs::NumberOfInputs});
1505  hadronsTensor_[is_inner] = std::make_unique<tensorflow::Tensor>(
1506  tensorflow::DT_FLOAT,
1507  tensorflow::TensorShape{
1508  (long long int)grid.num_valid_cells(), 1, 1, dnn_inputs_v2::HadronBlockInputs::NumberOfInputs});
1509 
1510  eGammaTensor_[is_inner]->flat<float>().setZero();
1511  muonTensor_[is_inner]->flat<float>().setZero();
1512  hadronsTensor_[is_inner]->flat<float>().setZero();
1513 
1514  unsigned idx = 0;
1515  for (int eta = -grid.maxEtaIndex(); eta <= grid.maxEtaIndex(); ++eta) {
1516  for (int phi = -grid.maxPhiIndex(); phi <= grid.maxPhiIndex(); ++phi) {
1517  if (debug_level >= 2) {
1518  std::cout << "processing ( eta = " << eta << ", phi = " << phi << " )" << std::endl;
1519  }
1520  const CellIndex cell_index{eta, phi};
1521  const auto cell_iter = grid.find(cell_index);
1522  if (cell_iter != grid.end()) {
1523  if (debug_level >= 2) {
1524  std::cout << " creating inputs for ( eta = " << eta << ", phi = " << phi << " ): idx = " << idx
1525  << std::endl;
1526  }
1527  const Cell& cell = cell_iter->second;
1528  createEgammaBlockInputs<CandidateCastType>(
1529  idx, tau, tau_index, tau_ref, pv, rho, electrons, pfCands, cell, tau_funcs, is_inner);
1530  createMuonBlockInputs<CandidateCastType>(
1531  idx, tau, tau_index, tau_ref, pv, rho, muons, pfCands, cell, tau_funcs, is_inner);
1532  createHadronsBlockInputs<CandidateCastType>(
1533  idx, tau, tau_index, tau_ref, pv, rho, pfCands, cell, tau_funcs, is_inner);
1534  idx += 1;
1535  } else {
1536  if (debug_level >= 2) {
1537  std::cout << " skipping creation of inputs, because ( eta = " << eta << ", phi = " << phi
1538  << " ) is not in the grid !!" << std::endl;
1539  }
1540  }
1541  }
1542  }
1543 
1544  const auto predTensor = getPartialPredictions(is_inner);
1545  idx = 0;
1546  for (int eta = -grid.maxEtaIndex(); eta <= grid.maxEtaIndex(); ++eta) {
1547  for (int phi = -grid.maxPhiIndex(); phi <= grid.maxPhiIndex(); ++phi) {
1548  const CellIndex cell_index{eta, phi};
1549  const int eta_index = grid.getEtaTensorIndex(cell_index);
1550  const int phi_index = grid.getPhiTensorIndex(cell_index);
1551 
1552  const auto cell_iter = grid.find(cell_index);
1553  if (cell_iter != grid.end()) {
1554  setCellConvFeatures(convTensor, predTensor, idx, eta_index, phi_index);
1555  idx += 1;
1556  } else {
1557  setCellConvFeatures(convTensor, *zeroOutputTensor_[is_inner], 0, eta_index, phi_index);
1558  }
1559  }
1560  }
1561  }
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
Definition: DeepTauId.cc:2448
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > zeroOutputTensor_
Definition: DeepTauId.cc:2448
void setCellConvFeatures(tensorflow::Tensor &convTensor, const tensorflow::Tensor &features, unsigned batch_idx, int eta_index, int phi_index)
Definition: DeepTauId.cc:1563
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > convTensor_
Definition: DeepTauId.cc:2448
def pv(vc)
Definition: MetAnalyzer.py:7
tensorflow::Tensor getPartialPredictions(bool is_inner)
Definition: DeepTauId.cc:1457
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
Definition: DeepTauId.cc:2448
const int debug_level
Definition: DeepTauId.cc:2443
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
Definition: DeepTauId.cc:2448

◆ createEgammaBlockInputs()

template<typename CandidateCastType , typename TauCastType >
void DeepTauId::createEgammaBlockInputs ( unsigned  idx,
const TauCastType &  tau,
const size_t  tau_index,
const edm::RefToBase< reco::BaseTau tau_ref,
const reco::Vertex pv,
double  rho,
const std::vector< pat::Electron > *  electrons,
const edm::View< reco::Candidate > &  pfCands,
const Cell cell_map,
TauFunc  tau_funcs,
bool  is_inner 
)
inlineprivate

Definition at line 1719 of file DeepTauId.cc.

References funct::abs(), edm::View< T >::at(), calculateElectronClusterVarsV2(), hltPixelTracks_cff::chi2, HLT_2022v15_cff::dPhi, eGammaTensor_, nanoDQM_cfi::Electron, pwdgSkimBPark_cfi::electrons, f, dqmMemoryStats::float, heavyIonCSV_trainingSettings::idx, PixelMapPlotter::inputs, isInEcalCrack(), ndof, rho, ZElectronSkim_cff::rho, scalingParamsMap_, sub_version_, metsig::tau, runTauDisplay::tau_eta, runTauDisplay::tau_pt, and year_.

1729  {
1730  namespace dnn = dnn_inputs_v2::EgammaBlockInputs;
1731  namespace sc = deep_tau::Scaling;
1732  sc::FeatureT ft_global = sc::FeatureT::GridGlobal;
1733  sc::FeatureT ft_PFe = sc::FeatureT::PfCand_electron;
1734  sc::FeatureT ft_PFg = sc::FeatureT::PfCand_gamma;
1736 
1737  // needed to remap indices from scaling vectors to those from dnn_inputs_v2::EgammaBlockInputs
1738  int PFe_index_offset = scalingParamsMap_->at(std::make_pair(ft_global, false)).mean_.size();
1739  int e_index_offset = PFe_index_offset + scalingParamsMap_->at(std::make_pair(ft_PFe, false)).mean_.size();
1740  int PFg_index_offset = e_index_offset + scalingParamsMap_->at(std::make_pair(ft_e, false)).mean_.size();
1741 
1742  // to account for swapped order of PfCand_gamma and Electron blocks for v2p5 training w.r.t. v2p1
1743  int fill_index_offset_e = 0;
1744  int fill_index_offset_PFg = 0;
1745  if (sub_version_ == 5) {
1746  fill_index_offset_e =
1747  scalingParamsMap_->at(std::make_pair(ft_PFg, false)).mean_.size(); // size of PF gamma features
1748  fill_index_offset_PFg =
1749  -scalingParamsMap_->at(std::make_pair(ft_e, false)).mean_.size(); // size of Electron features
1750  }
1751 
1752  tensorflow::Tensor& inputs = *eGammaTensor_.at(is_inner);
1753 
1754  const auto& get = [&](int var_index) -> float& { return inputs.tensor<float, 4>()(idx, 0, 0, var_index); };
1755 
1756  const bool valid_index_pf_ele = cell_map.count(CellObjectType::PfCand_electron);
1757  const bool valid_index_pf_gamma = cell_map.count(CellObjectType::PfCand_gamma);
1758  const bool valid_index_ele = cell_map.count(CellObjectType::Electron);
1759 
1760  if (!cell_map.empty()) {
1761  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_global, false));
1762  get(dnn::rho) = sp.scale(rho, dnn::rho);
1763  get(dnn::tau_pt) = sp.scale(tau.polarP4().pt(), dnn::tau_pt);
1764  get(dnn::tau_eta) = sp.scale(tau.polarP4().eta(), dnn::tau_eta);
1765  get(dnn::tau_inside_ecal_crack) = sp.scale(isInEcalCrack(tau.polarP4().eta()), dnn::tau_inside_ecal_crack);
1766  }
1767  if (valid_index_pf_ele) {
1768  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_PFe, is_inner));
1769  size_t index_pf_ele = cell_map.at(CellObjectType::PfCand_electron);
1770  const auto& ele_cand = dynamic_cast<const CandidateCastType&>(pfCands.at(index_pf_ele));
1771 
1772  get(dnn::pfCand_ele_valid) = sp.scale(valid_index_pf_ele, dnn::pfCand_ele_valid - PFe_index_offset);
1773  get(dnn::pfCand_ele_rel_pt) =
1774  sp.scale(ele_cand.polarP4().pt() / tau.polarP4().pt(), dnn::pfCand_ele_rel_pt - PFe_index_offset);
1775  get(dnn::pfCand_ele_deta) =
1776  sp.scale(ele_cand.polarP4().eta() - tau.polarP4().eta(), dnn::pfCand_ele_deta - PFe_index_offset);
1777  get(dnn::pfCand_ele_dphi) =
1778  sp.scale(dPhi(tau.polarP4(), ele_cand.polarP4()), dnn::pfCand_ele_dphi - PFe_index_offset);
1779  get(dnn::pfCand_ele_pvAssociationQuality) = sp.scale<int>(
1780  candFunc::getPvAssocationQuality(ele_cand), dnn::pfCand_ele_pvAssociationQuality - PFe_index_offset);
1781  get(dnn::pfCand_ele_puppiWeight) = is_inner ? sp.scale(candFunc::getPuppiWeight(ele_cand, 0.9906834f),
1782  dnn::pfCand_ele_puppiWeight - PFe_index_offset)
1783  : sp.scale(candFunc::getPuppiWeight(ele_cand, 0.9669586f),
1784  dnn::pfCand_ele_puppiWeight - PFe_index_offset);
1785  get(dnn::pfCand_ele_charge) = sp.scale(ele_cand.charge(), dnn::pfCand_ele_charge - PFe_index_offset);
1786  get(dnn::pfCand_ele_lostInnerHits) =
1787  sp.scale<int>(candFunc::getLostInnerHits(ele_cand, 0), dnn::pfCand_ele_lostInnerHits - PFe_index_offset);
1788  get(dnn::pfCand_ele_numberOfPixelHits) =
1789  sp.scale(candFunc::getNumberOfPixelHits(ele_cand, 0), dnn::pfCand_ele_numberOfPixelHits - PFe_index_offset);
1790  get(dnn::pfCand_ele_vertex_dx) =
1791  sp.scale(ele_cand.vertex().x() - pv.position().x(), dnn::pfCand_ele_vertex_dx - PFe_index_offset);
1792  get(dnn::pfCand_ele_vertex_dy) =
1793  sp.scale(ele_cand.vertex().y() - pv.position().y(), dnn::pfCand_ele_vertex_dy - PFe_index_offset);
1794  get(dnn::pfCand_ele_vertex_dz) =
1795  sp.scale(ele_cand.vertex().z() - pv.position().z(), dnn::pfCand_ele_vertex_dz - PFe_index_offset);
1796  get(dnn::pfCand_ele_vertex_dx_tauFL) =
1797  sp.scale(ele_cand.vertex().x() - pv.position().x() - tau_funcs.getFlightLength(tau, tau_index).x(),
1798  dnn::pfCand_ele_vertex_dx_tauFL - PFe_index_offset);
1799  get(dnn::pfCand_ele_vertex_dy_tauFL) =
1800  sp.scale(ele_cand.vertex().y() - pv.position().y() - tau_funcs.getFlightLength(tau, tau_index).y(),
1801  dnn::pfCand_ele_vertex_dy_tauFL - PFe_index_offset);
1802  get(dnn::pfCand_ele_vertex_dz_tauFL) =
1803  sp.scale(ele_cand.vertex().z() - pv.position().z() - tau_funcs.getFlightLength(tau, tau_index).z(),
1804  dnn::pfCand_ele_vertex_dz_tauFL - PFe_index_offset);
1805 
1806  const bool hasTrackDetails = candFunc::getHasTrackDetails(ele_cand);
1807  if (hasTrackDetails) {
1808  get(dnn::pfCand_ele_hasTrackDetails) =
1809  sp.scale(hasTrackDetails, dnn::pfCand_ele_hasTrackDetails - PFe_index_offset);
1810  get(dnn::pfCand_ele_dxy) = sp.scale(candFunc::getTauDxy(ele_cand), dnn::pfCand_ele_dxy - PFe_index_offset);
1811  get(dnn::pfCand_ele_dxy_sig) = sp.scale(std::abs(candFunc::getTauDxy(ele_cand)) / ele_cand.dxyError(),
1812  dnn::pfCand_ele_dxy_sig - PFe_index_offset);
1813  get(dnn::pfCand_ele_dz) = sp.scale(candFunc::getTauDz(ele_cand), dnn::pfCand_ele_dz - PFe_index_offset);
1814  get(dnn::pfCand_ele_dz_sig) = sp.scale(std::abs(candFunc::getTauDz(ele_cand)) / ele_cand.dzError(),
1815  dnn::pfCand_ele_dz_sig - PFe_index_offset);
1816  get(dnn::pfCand_ele_track_chi2_ndof) =
1817  candFunc::getPseudoTrack(ele_cand).ndof() > 0
1818  ? sp.scale(candFunc::getPseudoTrack(ele_cand).chi2() / candFunc::getPseudoTrack(ele_cand).ndof(),
1819  dnn::pfCand_ele_track_chi2_ndof - PFe_index_offset)
1820  : 0;
1821  get(dnn::pfCand_ele_track_ndof) =
1822  candFunc::getPseudoTrack(ele_cand).ndof() > 0
1823  ? sp.scale(candFunc::getPseudoTrack(ele_cand).ndof(), dnn::pfCand_ele_track_ndof - PFe_index_offset)
1824  : 0;
1825  }
1826  }
1827  if (valid_index_pf_gamma) {
1828  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_PFg, is_inner));
1829  size_t index_pf_gamma = cell_map.at(CellObjectType::PfCand_gamma);
1830  const auto& gamma_cand = dynamic_cast<const CandidateCastType&>(pfCands.at(index_pf_gamma));
1831 
1832  get(dnn::pfCand_gamma_valid + fill_index_offset_PFg) =
1833  sp.scale(valid_index_pf_gamma, dnn::pfCand_gamma_valid - PFg_index_offset);
1834  get(dnn::pfCand_gamma_rel_pt + fill_index_offset_PFg) =
1835  sp.scale(gamma_cand.polarP4().pt() / tau.polarP4().pt(), dnn::pfCand_gamma_rel_pt - PFg_index_offset);
1836  get(dnn::pfCand_gamma_deta + fill_index_offset_PFg) =
1837  sp.scale(gamma_cand.polarP4().eta() - tau.polarP4().eta(), dnn::pfCand_gamma_deta - PFg_index_offset);
1838  get(dnn::pfCand_gamma_dphi + fill_index_offset_PFg) =
1839  sp.scale(dPhi(tau.polarP4(), gamma_cand.polarP4()), dnn::pfCand_gamma_dphi - PFg_index_offset);
1840  get(dnn::pfCand_gamma_pvAssociationQuality + fill_index_offset_PFg) = sp.scale<int>(
1841  candFunc::getPvAssocationQuality(gamma_cand), dnn::pfCand_gamma_pvAssociationQuality - PFg_index_offset);
1842  get(dnn::pfCand_gamma_fromPV + fill_index_offset_PFg) =
1843  sp.scale<int>(candFunc::getFromPV(gamma_cand), dnn::pfCand_gamma_fromPV - PFg_index_offset);
1844  get(dnn::pfCand_gamma_puppiWeight + fill_index_offset_PFg) =
1845  is_inner ? sp.scale(candFunc::getPuppiWeight(gamma_cand, 0.9084110f),
1846  dnn::pfCand_gamma_puppiWeight - PFg_index_offset)
1847  : sp.scale(candFunc::getPuppiWeight(gamma_cand, 0.4211567f),
1848  dnn::pfCand_gamma_puppiWeight - PFg_index_offset);
1849  get(dnn::pfCand_gamma_puppiWeightNoLep + fill_index_offset_PFg) =
1850  is_inner ? sp.scale(candFunc::getPuppiWeightNoLep(gamma_cand, 0.8857716f),
1851  dnn::pfCand_gamma_puppiWeightNoLep - PFg_index_offset)
1852  : sp.scale(candFunc::getPuppiWeightNoLep(gamma_cand, 0.3822604f),
1853  dnn::pfCand_gamma_puppiWeightNoLep - PFg_index_offset);
1854  get(dnn::pfCand_gamma_lostInnerHits + fill_index_offset_PFg) =
1855  sp.scale<int>(candFunc::getLostInnerHits(gamma_cand, 0), dnn::pfCand_gamma_lostInnerHits - PFg_index_offset);
1856  get(dnn::pfCand_gamma_numberOfPixelHits + fill_index_offset_PFg) = sp.scale(
1857  candFunc::getNumberOfPixelHits(gamma_cand, 0), dnn::pfCand_gamma_numberOfPixelHits - PFg_index_offset);
1858  get(dnn::pfCand_gamma_vertex_dx + fill_index_offset_PFg) =
1859  sp.scale(gamma_cand.vertex().x() - pv.position().x(), dnn::pfCand_gamma_vertex_dx - PFg_index_offset);
1860  get(dnn::pfCand_gamma_vertex_dy + fill_index_offset_PFg) =
1861  sp.scale(gamma_cand.vertex().y() - pv.position().y(), dnn::pfCand_gamma_vertex_dy - PFg_index_offset);
1862  get(dnn::pfCand_gamma_vertex_dz + fill_index_offset_PFg) =
1863  sp.scale(gamma_cand.vertex().z() - pv.position().z(), dnn::pfCand_gamma_vertex_dz - PFg_index_offset);
1864  get(dnn::pfCand_gamma_vertex_dx_tauFL + fill_index_offset_PFg) =
1865  sp.scale(gamma_cand.vertex().x() - pv.position().x() - tau_funcs.getFlightLength(tau, tau_index).x(),
1866  dnn::pfCand_gamma_vertex_dx_tauFL - PFg_index_offset);
1867  get(dnn::pfCand_gamma_vertex_dy_tauFL + fill_index_offset_PFg) =
1868  sp.scale(gamma_cand.vertex().y() - pv.position().y() - tau_funcs.getFlightLength(tau, tau_index).y(),
1869  dnn::pfCand_gamma_vertex_dy_tauFL - PFg_index_offset);
1870  get(dnn::pfCand_gamma_vertex_dz_tauFL + fill_index_offset_PFg) =
1871  sp.scale(gamma_cand.vertex().z() - pv.position().z() - tau_funcs.getFlightLength(tau, tau_index).z(),
1872  dnn::pfCand_gamma_vertex_dz_tauFL - PFg_index_offset);
1873  const bool hasTrackDetails = candFunc::getHasTrackDetails(gamma_cand);
1874  if (hasTrackDetails) {
1875  get(dnn::pfCand_gamma_hasTrackDetails + fill_index_offset_PFg) =
1876  sp.scale(hasTrackDetails, dnn::pfCand_gamma_hasTrackDetails - PFg_index_offset);
1877  get(dnn::pfCand_gamma_dxy + fill_index_offset_PFg) =
1878  sp.scale(candFunc::getTauDxy(gamma_cand), dnn::pfCand_gamma_dxy - PFg_index_offset);
1879  get(dnn::pfCand_gamma_dxy_sig + fill_index_offset_PFg) =
1880  sp.scale(std::abs(candFunc::getTauDxy(gamma_cand)) / gamma_cand.dxyError(),
1881  dnn::pfCand_gamma_dxy_sig - PFg_index_offset);
1882  get(dnn::pfCand_gamma_dz + fill_index_offset_PFg) =
1883  sp.scale(candFunc::getTauDz(gamma_cand), dnn::pfCand_gamma_dz - PFg_index_offset);
1884  get(dnn::pfCand_gamma_dz_sig + fill_index_offset_PFg) =
1885  sp.scale(std::abs(candFunc::getTauDz(gamma_cand)) / gamma_cand.dzError(),
1886  dnn::pfCand_gamma_dz_sig - PFg_index_offset);
1887  get(dnn::pfCand_gamma_track_chi2_ndof + fill_index_offset_PFg) =
1888  candFunc::getPseudoTrack(gamma_cand).ndof() > 0
1889  ? sp.scale(candFunc::getPseudoTrack(gamma_cand).chi2() / candFunc::getPseudoTrack(gamma_cand).ndof(),
1890  dnn::pfCand_gamma_track_chi2_ndof - PFg_index_offset)
1891  : 0;
1892  get(dnn::pfCand_gamma_track_ndof + fill_index_offset_PFg) =
1893  candFunc::getPseudoTrack(gamma_cand).ndof() > 0
1894  ? sp.scale(candFunc::getPseudoTrack(gamma_cand).ndof(), dnn::pfCand_gamma_track_ndof - PFg_index_offset)
1895  : 0;
1896  }
1897  }
1898  if (valid_index_ele) {
1899  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_e, is_inner));
1900  size_t index_ele = cell_map.at(CellObjectType::Electron);
1901  const auto& ele = electrons->at(index_ele);
1902 
1903  get(dnn::ele_valid + fill_index_offset_e) = sp.scale(valid_index_ele, dnn::ele_valid - e_index_offset);
1904  get(dnn::ele_rel_pt + fill_index_offset_e) =
1905  sp.scale(ele.polarP4().pt() / tau.polarP4().pt(), dnn::ele_rel_pt - e_index_offset);
1906  get(dnn::ele_deta + fill_index_offset_e) =
1907  sp.scale(ele.polarP4().eta() - tau.polarP4().eta(), dnn::ele_deta - e_index_offset);
1908  get(dnn::ele_dphi + fill_index_offset_e) =
1909  sp.scale(dPhi(tau.polarP4(), ele.polarP4()), dnn::ele_dphi - e_index_offset);
1910 
1911  float cc_ele_energy, cc_gamma_energy;
1912  int cc_n_gamma;
1913  const bool cc_valid = calculateElectronClusterVarsV2(ele, cc_ele_energy, cc_gamma_energy, cc_n_gamma);
1914  if (cc_valid) {
1915  get(dnn::ele_cc_valid + fill_index_offset_e) = sp.scale(cc_valid, dnn::ele_cc_valid - e_index_offset);
1916  get(dnn::ele_cc_ele_rel_energy + fill_index_offset_e) =
1917  sp.scale(cc_ele_energy / ele.polarP4().pt(), dnn::ele_cc_ele_rel_energy - e_index_offset);
1918  get(dnn::ele_cc_gamma_rel_energy + fill_index_offset_e) =
1919  sp.scale(cc_gamma_energy / cc_ele_energy, dnn::ele_cc_gamma_rel_energy - e_index_offset);
1920  get(dnn::ele_cc_n_gamma + fill_index_offset_e) = sp.scale(cc_n_gamma, dnn::ele_cc_n_gamma - e_index_offset);
1921  }
1922  get(dnn::ele_rel_trackMomentumAtVtx + fill_index_offset_e) =
1923  sp.scale(ele.trackMomentumAtVtx().R() / ele.polarP4().pt(), dnn::ele_rel_trackMomentumAtVtx - e_index_offset);
1924  get(dnn::ele_rel_trackMomentumAtCalo + fill_index_offset_e) = sp.scale(
1925  ele.trackMomentumAtCalo().R() / ele.polarP4().pt(), dnn::ele_rel_trackMomentumAtCalo - e_index_offset);
1926  get(dnn::ele_rel_trackMomentumOut + fill_index_offset_e) =
1927  sp.scale(ele.trackMomentumOut().R() / ele.polarP4().pt(), dnn::ele_rel_trackMomentumOut - e_index_offset);
1928  get(dnn::ele_rel_trackMomentumAtEleClus + fill_index_offset_e) = sp.scale(
1929  ele.trackMomentumAtEleClus().R() / ele.polarP4().pt(), dnn::ele_rel_trackMomentumAtEleClus - e_index_offset);
1930  get(dnn::ele_rel_trackMomentumAtVtxWithConstraint + fill_index_offset_e) =
1931  sp.scale(ele.trackMomentumAtVtxWithConstraint().R() / ele.polarP4().pt(),
1932  dnn::ele_rel_trackMomentumAtVtxWithConstraint - e_index_offset);
1933  get(dnn::ele_rel_ecalEnergy + fill_index_offset_e) =
1934  sp.scale(ele.ecalEnergy() / ele.polarP4().pt(), dnn::ele_rel_ecalEnergy - e_index_offset);
1935  get(dnn::ele_ecalEnergy_sig + fill_index_offset_e) =
1936  sp.scale(ele.ecalEnergy() / ele.ecalEnergyError(), dnn::ele_ecalEnergy_sig - e_index_offset);
1937  get(dnn::ele_eSuperClusterOverP + fill_index_offset_e) =
1938  sp.scale(ele.eSuperClusterOverP(), dnn::ele_eSuperClusterOverP - e_index_offset);
1939  get(dnn::ele_eSeedClusterOverP + fill_index_offset_e) =
1940  sp.scale(ele.eSeedClusterOverP(), dnn::ele_eSeedClusterOverP - e_index_offset);
1941  get(dnn::ele_eSeedClusterOverPout + fill_index_offset_e) =
1942  sp.scale(ele.eSeedClusterOverPout(), dnn::ele_eSeedClusterOverPout - e_index_offset);
1943  get(dnn::ele_eEleClusterOverPout + fill_index_offset_e) =
1944  sp.scale(ele.eEleClusterOverPout(), dnn::ele_eEleClusterOverPout - e_index_offset);
1945  get(dnn::ele_deltaEtaSuperClusterTrackAtVtx + fill_index_offset_e) =
1946  sp.scale(ele.deltaEtaSuperClusterTrackAtVtx(), dnn::ele_deltaEtaSuperClusterTrackAtVtx - e_index_offset);
1947  get(dnn::ele_deltaEtaSeedClusterTrackAtCalo + fill_index_offset_e) =
1948  sp.scale(ele.deltaEtaSeedClusterTrackAtCalo(), dnn::ele_deltaEtaSeedClusterTrackAtCalo - e_index_offset);
1949  get(dnn::ele_deltaEtaEleClusterTrackAtCalo + fill_index_offset_e) =
1950  sp.scale(ele.deltaEtaEleClusterTrackAtCalo(), dnn::ele_deltaEtaEleClusterTrackAtCalo - e_index_offset);
1951  get(dnn::ele_deltaPhiEleClusterTrackAtCalo + fill_index_offset_e) =
1952  sp.scale(ele.deltaPhiEleClusterTrackAtCalo(), dnn::ele_deltaPhiEleClusterTrackAtCalo - e_index_offset);
1953  get(dnn::ele_deltaPhiSuperClusterTrackAtVtx + fill_index_offset_e) =
1954  sp.scale(ele.deltaPhiSuperClusterTrackAtVtx(), dnn::ele_deltaPhiSuperClusterTrackAtVtx - e_index_offset);
1955  get(dnn::ele_deltaPhiSeedClusterTrackAtCalo + fill_index_offset_e) =
1956  sp.scale(ele.deltaPhiSeedClusterTrackAtCalo(), dnn::ele_deltaPhiSeedClusterTrackAtCalo - e_index_offset);
1957  const bool mva_valid =
1958  (ele.mvaInput().earlyBrem > -2) ||
1959  (year_ !=
1960  2026); // Known issue that input can be invalid in Phase2 samples (early/lateBrem==-2, hadEnergy==0, sigmaEtaEta/deltaEta==3.40282e+38). Unknown if also in Run2/3, so don't change there
1961  if (mva_valid) {
1962  get(dnn::ele_mvaInput_earlyBrem + fill_index_offset_e) =
1963  sp.scale(ele.mvaInput().earlyBrem, dnn::ele_mvaInput_earlyBrem - e_index_offset);
1964  get(dnn::ele_mvaInput_lateBrem + fill_index_offset_e) =
1965  sp.scale(ele.mvaInput().lateBrem, dnn::ele_mvaInput_lateBrem - e_index_offset);
1966  get(dnn::ele_mvaInput_sigmaEtaEta + fill_index_offset_e) =
1967  sp.scale(ele.mvaInput().sigmaEtaEta, dnn::ele_mvaInput_sigmaEtaEta - e_index_offset);
1968  get(dnn::ele_mvaInput_hadEnergy + fill_index_offset_e) =
1969  sp.scale(ele.mvaInput().hadEnergy, dnn::ele_mvaInput_hadEnergy - e_index_offset);
1970  get(dnn::ele_mvaInput_deltaEta + fill_index_offset_e) =
1971  sp.scale(ele.mvaInput().deltaEta, dnn::ele_mvaInput_deltaEta - e_index_offset);
1972  }
1973  const auto& gsfTrack = ele.gsfTrack();
1974  if (gsfTrack.isNonnull()) {
1975  get(dnn::ele_gsfTrack_normalizedChi2 + fill_index_offset_e) =
1976  sp.scale(gsfTrack->normalizedChi2(), dnn::ele_gsfTrack_normalizedChi2 - e_index_offset);
1977  get(dnn::ele_gsfTrack_numberOfValidHits + fill_index_offset_e) =
1978  sp.scale(gsfTrack->numberOfValidHits(), dnn::ele_gsfTrack_numberOfValidHits - e_index_offset);
1979  get(dnn::ele_rel_gsfTrack_pt + fill_index_offset_e) =
1980  sp.scale(gsfTrack->pt() / ele.polarP4().pt(), dnn::ele_rel_gsfTrack_pt - e_index_offset);
1981  get(dnn::ele_gsfTrack_pt_sig + fill_index_offset_e) =
1982  sp.scale(gsfTrack->pt() / gsfTrack->ptError(), dnn::ele_gsfTrack_pt_sig - e_index_offset);
1983  }
1984  const auto& closestCtfTrack = ele.closestCtfTrackRef();
1985  const bool has_closestCtfTrack = closestCtfTrack.isNonnull();
1986  if (has_closestCtfTrack) {
1987  get(dnn::ele_has_closestCtfTrack + fill_index_offset_e) =
1988  sp.scale(has_closestCtfTrack, dnn::ele_has_closestCtfTrack - e_index_offset);
1989  get(dnn::ele_closestCtfTrack_normalizedChi2 + fill_index_offset_e) =
1990  sp.scale(closestCtfTrack->normalizedChi2(), dnn::ele_closestCtfTrack_normalizedChi2 - e_index_offset);
1991  get(dnn::ele_closestCtfTrack_numberOfValidHits + fill_index_offset_e) =
1992  sp.scale(closestCtfTrack->numberOfValidHits(), dnn::ele_closestCtfTrack_numberOfValidHits - e_index_offset);
1993  }
1994  }
1995  }
static bool isInEcalCrack(double eta)
Definition: DeepTauId.cc:2412
const unsigned sub_version_
Definition: DeepTauId.cc:2442
const std::map< std::pair< deep_tau::Scaling::FeatureT, bool >, deep_tau::Scaling::ScalingParams > * scalingParamsMap_
Definition: DeepTauId.cc:2450
const unsigned year_
Definition: DeepTauId.cc:2440
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
const_reference at(size_type pos) const
static bool calculateElectronClusterVarsV2(const pat::Electron &ele, float &cc_ele_energy, float &cc_gamma_energy, int &cc_n_gamma)
Definition: DeepTauId.cc:1051
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
Definition: DeepTauId.cc:2448

◆ createHadronsBlockInputs()

template<typename CandidateCastType , typename TauCastType >
void DeepTauId::createHadronsBlockInputs ( unsigned  idx,
const TauCastType &  tau,
const size_t  tau_index,
const edm::RefToBase< reco::BaseTau tau_ref,
const reco::Vertex pv,
double  rho,
const edm::View< reco::Candidate > &  pfCands,
const Cell cell_map,
TauFunc  tau_funcs,
bool  is_inner 
)
inlineprivate

Definition at line 2149 of file DeepTauId.cc.

References funct::abs(), edm::View< T >::at(), hltPixelTracks_cff::chi2, disable_hcalFraction_workaround_, HLT_2022v15_cff::dPhi, f, dqmMemoryStats::float, hadronsTensor_, heavyIonCSV_trainingSettings::idx, PixelMapPlotter::inputs, isInEcalCrack(), ndof, rho, ZElectronSkim_cff::rho, scalingParamsMap_, metsig::tau, runTauDisplay::tau_eta, and runTauDisplay::tau_pt.

2158  {
2159  namespace dnn = dnn_inputs_v2::HadronBlockInputs;
2160  namespace sc = deep_tau::Scaling;
2161  sc::FeatureT ft_global = sc::FeatureT::GridGlobal;
2162  sc::FeatureT ft_PFchH = sc::FeatureT::PfCand_chHad;
2163  sc::FeatureT ft_PFnH = sc::FeatureT::PfCand_nHad;
2164 
2165  // needed to remap indices from scaling vectors to those from dnn_inputs_v2::HadronBlockInputs
2166  int PFchH_index_offset = scalingParamsMap_->at(std::make_pair(ft_global, false)).mean_.size();
2167  int PFnH_index_offset = PFchH_index_offset + scalingParamsMap_->at(std::make_pair(ft_PFchH, false)).mean_.size();
2168 
2169  tensorflow::Tensor& inputs = *hadronsTensor_.at(is_inner);
2170 
2171  const auto& get = [&](int var_index) -> float& { return inputs.tensor<float, 4>()(idx, 0, 0, var_index); };
2172 
2173  const bool valid_chH = cell_map.count(CellObjectType::PfCand_chargedHadron);
2174  const bool valid_nH = cell_map.count(CellObjectType::PfCand_neutralHadron);
2175 
2176  if (!cell_map.empty()) {
2177  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_global, false));
2178  get(dnn::rho) = sp.scale(rho, dnn::rho);
2179  get(dnn::tau_pt) = sp.scale(tau.polarP4().pt(), dnn::tau_pt);
2180  get(dnn::tau_eta) = sp.scale(tau.polarP4().eta(), dnn::tau_eta);
2181  get(dnn::tau_inside_ecal_crack) = sp.scale(isInEcalCrack(tau.polarP4().eta()), dnn::tau_inside_ecal_crack);
2182  }
2183  if (valid_chH) {
2184  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_PFchH, is_inner));
2185  size_t index_chH = cell_map.at(CellObjectType::PfCand_chargedHadron);
2186  const auto& chH_cand = dynamic_cast<const CandidateCastType&>(pfCands.at(index_chH));
2187 
2188  get(dnn::pfCand_chHad_valid) = sp.scale(valid_chH, dnn::pfCand_chHad_valid - PFchH_index_offset);
2189  get(dnn::pfCand_chHad_rel_pt) =
2190  sp.scale(chH_cand.polarP4().pt() / tau.polarP4().pt(), dnn::pfCand_chHad_rel_pt - PFchH_index_offset);
2191  get(dnn::pfCand_chHad_deta) =
2192  sp.scale(chH_cand.polarP4().eta() - tau.polarP4().eta(), dnn::pfCand_chHad_deta - PFchH_index_offset);
2193  get(dnn::pfCand_chHad_dphi) =
2194  sp.scale(dPhi(tau.polarP4(), chH_cand.polarP4()), dnn::pfCand_chHad_dphi - PFchH_index_offset);
2195  get(dnn::pfCand_chHad_leadChargedHadrCand) =
2196  sp.scale(&chH_cand == dynamic_cast<const CandidateCastType*>(tau.leadChargedHadrCand().get()),
2197  dnn::pfCand_chHad_leadChargedHadrCand - PFchH_index_offset);
2198  get(dnn::pfCand_chHad_pvAssociationQuality) = sp.scale<int>(
2199  candFunc::getPvAssocationQuality(chH_cand), dnn::pfCand_chHad_pvAssociationQuality - PFchH_index_offset);
2200  get(dnn::pfCand_chHad_fromPV) =
2201  sp.scale<int>(candFunc::getFromPV(chH_cand), dnn::pfCand_chHad_fromPV - PFchH_index_offset);
2202  const float default_chH_pw_inner = 0.7614090f;
2203  const float default_chH_pw_outer = 0.1974930f;
2204  get(dnn::pfCand_chHad_puppiWeight) = is_inner ? sp.scale(candFunc::getPuppiWeight(chH_cand, default_chH_pw_inner),
2205  dnn::pfCand_chHad_puppiWeight - PFchH_index_offset)
2206  : sp.scale(candFunc::getPuppiWeight(chH_cand, default_chH_pw_outer),
2207  dnn::pfCand_chHad_puppiWeight - PFchH_index_offset);
2208  get(dnn::pfCand_chHad_puppiWeightNoLep) =
2209  is_inner ? sp.scale(candFunc::getPuppiWeightNoLep(chH_cand, default_chH_pw_inner),
2210  dnn::pfCand_chHad_puppiWeightNoLep - PFchH_index_offset)
2211  : sp.scale(candFunc::getPuppiWeightNoLep(chH_cand, default_chH_pw_outer),
2212  dnn::pfCand_chHad_puppiWeightNoLep - PFchH_index_offset);
2213  get(dnn::pfCand_chHad_charge) = sp.scale(chH_cand.charge(), dnn::pfCand_chHad_charge - PFchH_index_offset);
2214  get(dnn::pfCand_chHad_lostInnerHits) =
2215  sp.scale<int>(candFunc::getLostInnerHits(chH_cand, 0), dnn::pfCand_chHad_lostInnerHits - PFchH_index_offset);
2216  get(dnn::pfCand_chHad_numberOfPixelHits) = sp.scale(candFunc::getNumberOfPixelHits(chH_cand, 0),
2217  dnn::pfCand_chHad_numberOfPixelHits - PFchH_index_offset);
2218  get(dnn::pfCand_chHad_vertex_dx) =
2219  sp.scale(chH_cand.vertex().x() - pv.position().x(), dnn::pfCand_chHad_vertex_dx - PFchH_index_offset);
2220  get(dnn::pfCand_chHad_vertex_dy) =
2221  sp.scale(chH_cand.vertex().y() - pv.position().y(), dnn::pfCand_chHad_vertex_dy - PFchH_index_offset);
2222  get(dnn::pfCand_chHad_vertex_dz) =
2223  sp.scale(chH_cand.vertex().z() - pv.position().z(), dnn::pfCand_chHad_vertex_dz - PFchH_index_offset);
2224  get(dnn::pfCand_chHad_vertex_dx_tauFL) =
2225  sp.scale(chH_cand.vertex().x() - pv.position().x() - tau_funcs.getFlightLength(tau, tau_index).x(),
2226  dnn::pfCand_chHad_vertex_dx_tauFL - PFchH_index_offset);
2227  get(dnn::pfCand_chHad_vertex_dy_tauFL) =
2228  sp.scale(chH_cand.vertex().y() - pv.position().y() - tau_funcs.getFlightLength(tau, tau_index).y(),
2229  dnn::pfCand_chHad_vertex_dy_tauFL - PFchH_index_offset);
2230  get(dnn::pfCand_chHad_vertex_dz_tauFL) =
2231  sp.scale(chH_cand.vertex().z() - pv.position().z() - tau_funcs.getFlightLength(tau, tau_index).z(),
2232  dnn::pfCand_chHad_vertex_dz_tauFL - PFchH_index_offset);
2233 
2234  const bool hasTrackDetails = candFunc::getHasTrackDetails(chH_cand);
2235  if (hasTrackDetails) {
2236  get(dnn::pfCand_chHad_hasTrackDetails) =
2237  sp.scale(hasTrackDetails, dnn::pfCand_chHad_hasTrackDetails - PFchH_index_offset);
2238  get(dnn::pfCand_chHad_dxy) =
2239  sp.scale(candFunc::getTauDxy(chH_cand), dnn::pfCand_chHad_dxy - PFchH_index_offset);
2240  get(dnn::pfCand_chHad_dxy_sig) = sp.scale(std::abs(candFunc::getTauDxy(chH_cand)) / chH_cand.dxyError(),
2241  dnn::pfCand_chHad_dxy_sig - PFchH_index_offset);
2242  get(dnn::pfCand_chHad_dz) = sp.scale(candFunc::getTauDz(chH_cand), dnn::pfCand_chHad_dz - PFchH_index_offset);
2243  get(dnn::pfCand_chHad_dz_sig) = sp.scale(std::abs(candFunc::getTauDz(chH_cand)) / chH_cand.dzError(),
2244  dnn::pfCand_chHad_dz_sig - PFchH_index_offset);
2245  get(dnn::pfCand_chHad_track_chi2_ndof) =
2246  candFunc::getPseudoTrack(chH_cand).ndof() > 0
2247  ? sp.scale(candFunc::getPseudoTrack(chH_cand).chi2() / candFunc::getPseudoTrack(chH_cand).ndof(),
2248  dnn::pfCand_chHad_track_chi2_ndof - PFchH_index_offset)
2249  : 0;
2250  get(dnn::pfCand_chHad_track_ndof) =
2251  candFunc::getPseudoTrack(chH_cand).ndof() > 0
2252  ? sp.scale(candFunc::getPseudoTrack(chH_cand).ndof(), dnn::pfCand_chHad_track_ndof - PFchH_index_offset)
2253  : 0;
2254  }
2255  float hcal_fraction = candFunc::getHCalFraction(chH_cand, disable_hcalFraction_workaround_);
2256  get(dnn::pfCand_chHad_hcalFraction) =
2257  sp.scale(hcal_fraction, dnn::pfCand_chHad_hcalFraction - PFchH_index_offset);
2258  get(dnn::pfCand_chHad_rawCaloFraction) =
2259  sp.scale(candFunc::getRawCaloFraction(chH_cand), dnn::pfCand_chHad_rawCaloFraction - PFchH_index_offset);
2260  }
2261  if (valid_nH) {
2262  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_PFnH, is_inner));
2263  size_t index_nH = cell_map.at(CellObjectType::PfCand_neutralHadron);
2264  const auto& nH_cand = dynamic_cast<const CandidateCastType&>(pfCands.at(index_nH));
2265 
2266  get(dnn::pfCand_nHad_valid) = sp.scale(valid_nH, dnn::pfCand_nHad_valid - PFnH_index_offset);
2267  get(dnn::pfCand_nHad_rel_pt) =
2268  sp.scale(nH_cand.polarP4().pt() / tau.polarP4().pt(), dnn::pfCand_nHad_rel_pt - PFnH_index_offset);
2269  get(dnn::pfCand_nHad_deta) =
2270  sp.scale(nH_cand.polarP4().eta() - tau.polarP4().eta(), dnn::pfCand_nHad_deta - PFnH_index_offset);
2271  get(dnn::pfCand_nHad_dphi) =
2272  sp.scale(dPhi(tau.polarP4(), nH_cand.polarP4()), dnn::pfCand_nHad_dphi - PFnH_index_offset);
2273  get(dnn::pfCand_nHad_puppiWeight) = is_inner ? sp.scale(candFunc::getPuppiWeight(nH_cand, 0.9798355f),
2274  dnn::pfCand_nHad_puppiWeight - PFnH_index_offset)
2275  : sp.scale(candFunc::getPuppiWeight(nH_cand, 0.7813260f),
2276  dnn::pfCand_nHad_puppiWeight - PFnH_index_offset);
2277  get(dnn::pfCand_nHad_puppiWeightNoLep) = is_inner
2278  ? sp.scale(candFunc::getPuppiWeightNoLep(nH_cand, 0.9046796f),
2279  dnn::pfCand_nHad_puppiWeightNoLep - PFnH_index_offset)
2280  : sp.scale(candFunc::getPuppiWeightNoLep(nH_cand, 0.6554860f),
2281  dnn::pfCand_nHad_puppiWeightNoLep - PFnH_index_offset);
2282  float hcal_fraction = candFunc::getHCalFraction(nH_cand, disable_hcalFraction_workaround_);
2283  get(dnn::pfCand_nHad_hcalFraction) = sp.scale(hcal_fraction, dnn::pfCand_nHad_hcalFraction - PFnH_index_offset);
2284  }
2285  }
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
Definition: DeepTauId.cc:2448
static bool isInEcalCrack(double eta)
Definition: DeepTauId.cc:2412
const std::map< std::pair< deep_tau::Scaling::FeatureT, bool >, deep_tau::Scaling::ScalingParams > * scalingParamsMap_
Definition: DeepTauId.cc:2450
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
const_reference at(size_type pos) const
const bool disable_hcalFraction_workaround_
Definition: DeepTauId.cc:2445

◆ createMuonBlockInputs()

template<typename CandidateCastType , typename TauCastType >
void DeepTauId::createMuonBlockInputs ( unsigned  idx,
const TauCastType &  tau,
const size_t  tau_index,
const edm::RefToBase< reco::BaseTau tau_ref,
const reco::Vertex pv,
double  rho,
const std::vector< pat::Muon > *  muons,
const edm::View< reco::Candidate > &  pfCands,
const Cell cell_map,
TauFunc  tau_funcs,
bool  is_inner 
)
inlineprivate

Definition at line 1998 of file DeepTauId.cc.

References funct::abs(), edm::View< T >::at(), hltPixelTracks_cff::chi2, MuonSubdetId::CSC, HLT_2022v15_cff::dPhi, MuonSubdetId::DT, f, dqmMemoryStats::float, heavyIonCSV_trainingSettings::idx, PixelMapPlotter::inputs, isInEcalCrack(), dumpRecoGeometry_cfg::Muon, PDWG_BPHSkim_cff::muons, muonTensor_, ndof, pat::Muon::PV2D, rho, ZElectronSkim_cff::rho, MuonSubdetId::RPC, scalingParamsMap_, relativeConstraints::station, metsig::tau, runTauDisplay::tau_eta, and runTauDisplay::tau_pt.

2008  {
2009  namespace dnn = dnn_inputs_v2::MuonBlockInputs;
2010  namespace sc = deep_tau::Scaling;
2011  sc::FeatureT ft_global = sc::FeatureT::GridGlobal;
2012  sc::FeatureT ft_PFmu = sc::FeatureT::PfCand_muon;
2014 
2015  // needed to remap indices from scaling vectors to those from dnn_inputs_v2::MuonBlockInputs
2016  int PFmu_index_offset = scalingParamsMap_->at(std::make_pair(ft_global, false)).mean_.size();
2017  int mu_index_offset = PFmu_index_offset + scalingParamsMap_->at(std::make_pair(ft_PFmu, false)).mean_.size();
2018 
2019  tensorflow::Tensor& inputs = *muonTensor_.at(is_inner);
2020 
2021  const auto& get = [&](int var_index) -> float& { return inputs.tensor<float, 4>()(idx, 0, 0, var_index); };
2022 
2023  const bool valid_index_pf_muon = cell_map.count(CellObjectType::PfCand_muon);
2024  const bool valid_index_muon = cell_map.count(CellObjectType::Muon);
2025 
2026  if (!cell_map.empty()) {
2027  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_global, false));
2028  get(dnn::rho) = sp.scale(rho, dnn::rho);
2029  get(dnn::tau_pt) = sp.scale(tau.polarP4().pt(), dnn::tau_pt);
2030  get(dnn::tau_eta) = sp.scale(tau.polarP4().eta(), dnn::tau_eta);
2031  get(dnn::tau_inside_ecal_crack) = sp.scale(isInEcalCrack(tau.polarP4().eta()), dnn::tau_inside_ecal_crack);
2032  }
2033  if (valid_index_pf_muon) {
2034  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_PFmu, is_inner));
2035  size_t index_pf_muon = cell_map.at(CellObjectType::PfCand_muon);
2036  const auto& muon_cand = dynamic_cast<const CandidateCastType&>(pfCands.at(index_pf_muon));
2037 
2038  get(dnn::pfCand_muon_valid) = sp.scale(valid_index_pf_muon, dnn::pfCand_muon_valid - PFmu_index_offset);
2039  get(dnn::pfCand_muon_rel_pt) =
2040  sp.scale(muon_cand.polarP4().pt() / tau.polarP4().pt(), dnn::pfCand_muon_rel_pt - PFmu_index_offset);
2041  get(dnn::pfCand_muon_deta) =
2042  sp.scale(muon_cand.polarP4().eta() - tau.polarP4().eta(), dnn::pfCand_muon_deta - PFmu_index_offset);
2043  get(dnn::pfCand_muon_dphi) =
2044  sp.scale(dPhi(tau.polarP4(), muon_cand.polarP4()), dnn::pfCand_muon_dphi - PFmu_index_offset);
2045  get(dnn::pfCand_muon_pvAssociationQuality) = sp.scale<int>(
2046  candFunc::getPvAssocationQuality(muon_cand), dnn::pfCand_muon_pvAssociationQuality - PFmu_index_offset);
2047  get(dnn::pfCand_muon_fromPV) =
2048  sp.scale<int>(candFunc::getFromPV(muon_cand), dnn::pfCand_muon_fromPV - PFmu_index_offset);
2049  get(dnn::pfCand_muon_puppiWeight) = is_inner ? sp.scale(candFunc::getPuppiWeight(muon_cand, 0.9786588f),
2050  dnn::pfCand_muon_puppiWeight - PFmu_index_offset)
2051  : sp.scale(candFunc::getPuppiWeight(muon_cand, 0.8132477f),
2052  dnn::pfCand_muon_puppiWeight - PFmu_index_offset);
2053  get(dnn::pfCand_muon_charge) = sp.scale(muon_cand.charge(), dnn::pfCand_muon_charge - PFmu_index_offset);
2054  get(dnn::pfCand_muon_lostInnerHits) =
2055  sp.scale<int>(candFunc::getLostInnerHits(muon_cand, 0), dnn::pfCand_muon_lostInnerHits - PFmu_index_offset);
2056  get(dnn::pfCand_muon_numberOfPixelHits) = sp.scale(candFunc::getNumberOfPixelHits(muon_cand, 0),
2057  dnn::pfCand_muon_numberOfPixelHits - PFmu_index_offset);
2058  get(dnn::pfCand_muon_vertex_dx) =
2059  sp.scale(muon_cand.vertex().x() - pv.position().x(), dnn::pfCand_muon_vertex_dx - PFmu_index_offset);
2060  get(dnn::pfCand_muon_vertex_dy) =
2061  sp.scale(muon_cand.vertex().y() - pv.position().y(), dnn::pfCand_muon_vertex_dy - PFmu_index_offset);
2062  get(dnn::pfCand_muon_vertex_dz) =
2063  sp.scale(muon_cand.vertex().z() - pv.position().z(), dnn::pfCand_muon_vertex_dz - PFmu_index_offset);
2064  get(dnn::pfCand_muon_vertex_dx_tauFL) =
2065  sp.scale(muon_cand.vertex().x() - pv.position().x() - tau_funcs.getFlightLength(tau, tau_index).x(),
2066  dnn::pfCand_muon_vertex_dx_tauFL - PFmu_index_offset);
2067  get(dnn::pfCand_muon_vertex_dy_tauFL) =
2068  sp.scale(muon_cand.vertex().y() - pv.position().y() - tau_funcs.getFlightLength(tau, tau_index).y(),
2069  dnn::pfCand_muon_vertex_dy_tauFL - PFmu_index_offset);
2070  get(dnn::pfCand_muon_vertex_dz_tauFL) =
2071  sp.scale(muon_cand.vertex().z() - pv.position().z() - tau_funcs.getFlightLength(tau, tau_index).z(),
2072  dnn::pfCand_muon_vertex_dz_tauFL - PFmu_index_offset);
2073 
2074  const bool hasTrackDetails = candFunc::getHasTrackDetails(muon_cand);
2075  if (hasTrackDetails) {
2076  get(dnn::pfCand_muon_hasTrackDetails) =
2077  sp.scale(hasTrackDetails, dnn::pfCand_muon_hasTrackDetails - PFmu_index_offset);
2078  get(dnn::pfCand_muon_dxy) = sp.scale(candFunc::getTauDxy(muon_cand), dnn::pfCand_muon_dxy - PFmu_index_offset);
2079  get(dnn::pfCand_muon_dxy_sig) = sp.scale(std::abs(candFunc::getTauDxy(muon_cand)) / muon_cand.dxyError(),
2080  dnn::pfCand_muon_dxy_sig - PFmu_index_offset);
2081  get(dnn::pfCand_muon_dz) = sp.scale(candFunc::getTauDz(muon_cand), dnn::pfCand_muon_dz - PFmu_index_offset);
2082  get(dnn::pfCand_muon_dz_sig) = sp.scale(std::abs(candFunc::getTauDz(muon_cand)) / muon_cand.dzError(),
2083  dnn::pfCand_muon_dz_sig - PFmu_index_offset);
2084  get(dnn::pfCand_muon_track_chi2_ndof) =
2085  candFunc::getPseudoTrack(muon_cand).ndof() > 0
2086  ? sp.scale(candFunc::getPseudoTrack(muon_cand).chi2() / candFunc::getPseudoTrack(muon_cand).ndof(),
2087  dnn::pfCand_muon_track_chi2_ndof - PFmu_index_offset)
2088  : 0;
2089  get(dnn::pfCand_muon_track_ndof) =
2090  candFunc::getPseudoTrack(muon_cand).ndof() > 0
2091  ? sp.scale(candFunc::getPseudoTrack(muon_cand).ndof(), dnn::pfCand_muon_track_ndof - PFmu_index_offset)
2092  : 0;
2093  }
2094  }
2095  if (valid_index_muon) {
2096  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft_mu, is_inner));
2097  size_t index_muon = cell_map.at(CellObjectType::Muon);
2098  const auto& muon = muons->at(index_muon);
2099 
2100  get(dnn::muon_valid) = sp.scale(valid_index_muon, dnn::muon_valid - mu_index_offset);
2101  get(dnn::muon_rel_pt) = sp.scale(muon.polarP4().pt() / tau.polarP4().pt(), dnn::muon_rel_pt - mu_index_offset);
2102  get(dnn::muon_deta) = sp.scale(muon.polarP4().eta() - tau.polarP4().eta(), dnn::muon_deta - mu_index_offset);
2103  get(dnn::muon_dphi) = sp.scale(dPhi(tau.polarP4(), muon.polarP4()), dnn::muon_dphi - mu_index_offset);
2104  get(dnn::muon_dxy) = sp.scale(muon.dB(pat::Muon::PV2D), dnn::muon_dxy - mu_index_offset);
2105  get(dnn::muon_dxy_sig) =
2106  sp.scale(std::abs(muon.dB(pat::Muon::PV2D)) / muon.edB(pat::Muon::PV2D), dnn::muon_dxy_sig - mu_index_offset);
2107 
2108  const bool normalizedChi2_valid = muon.globalTrack().isNonnull() && muon.normChi2() >= 0;
2109  if (normalizedChi2_valid) {
2110  get(dnn::muon_normalizedChi2_valid) =
2111  sp.scale(normalizedChi2_valid, dnn::muon_normalizedChi2_valid - mu_index_offset);
2112  get(dnn::muon_normalizedChi2) = sp.scale(muon.normChi2(), dnn::muon_normalizedChi2 - mu_index_offset);
2113  if (muon.innerTrack().isNonnull())
2114  get(dnn::muon_numberOfValidHits) =
2115  sp.scale(muon.numberOfValidHits(), dnn::muon_numberOfValidHits - mu_index_offset);
2116  }
2117  get(dnn::muon_segmentCompatibility) =
2118  sp.scale(muon.segmentCompatibility(), dnn::muon_segmentCompatibility - mu_index_offset);
2119  get(dnn::muon_caloCompatibility) =
2120  sp.scale(muon.caloCompatibility(), dnn::muon_caloCompatibility - mu_index_offset);
2121 
2122  const bool pfEcalEnergy_valid = muon.pfEcalEnergy() >= 0;
2123  if (pfEcalEnergy_valid) {
2124  get(dnn::muon_pfEcalEnergy_valid) =
2125  sp.scale(pfEcalEnergy_valid, dnn::muon_pfEcalEnergy_valid - mu_index_offset);
2126  get(dnn::muon_rel_pfEcalEnergy) =
2127  sp.scale(muon.pfEcalEnergy() / muon.polarP4().pt(), dnn::muon_rel_pfEcalEnergy - mu_index_offset);
2128  }
2129 
2130  MuonHitMatchV2 hit_match(muon);
2131  static const std::map<int, std::pair<int, int>> muonMatchHitVars = {
2132  {MuonSubdetId::DT, {dnn::muon_n_matches_DT_1, dnn::muon_n_hits_DT_1}},
2133  {MuonSubdetId::CSC, {dnn::muon_n_matches_CSC_1, dnn::muon_n_hits_CSC_1}},
2134  {MuonSubdetId::RPC, {dnn::muon_n_matches_RPC_1, dnn::muon_n_hits_RPC_1}}};
2135 
2136  for (int subdet : hit_match.MuonHitMatchV2::consideredSubdets()) {
2137  const auto& matchHitVar = muonMatchHitVars.at(subdet);
2138  for (int station = MuonHitMatchV2::first_station_id; station <= MuonHitMatchV2::last_station_id; ++station) {
2139  const unsigned n_matches = hit_match.nMatches(subdet, station);
2140  const unsigned n_hits = hit_match.nHits(subdet, station);
2141  get(matchHitVar.first + station - 1) = sp.scale(n_matches, matchHitVar.first + station - 1 - mu_index_offset);
2142  get(matchHitVar.second + station - 1) = sp.scale(n_hits, matchHitVar.second + station - 1 - mu_index_offset);
2143  }
2144  }
2145  }
2146  }
static bool isInEcalCrack(double eta)
Definition: DeepTauId.cc:2412
const std::map< std::pair< deep_tau::Scaling::FeatureT, bool >, deep_tau::Scaling::ScalingParams > * scalingParamsMap_
Definition: DeepTauId.cc:2450
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
const_reference at(size_type pos) const
static constexpr int RPC
Definition: MuonSubdetId.h:13
static constexpr int DT
Definition: MuonSubdetId.h:11
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
Definition: DeepTauId.cc:2448
static constexpr int CSC
Definition: MuonSubdetId.h:12

◆ createTauBlockInputs()

template<typename CandidateCastType , typename TauCastType >
void DeepTauId::createTauBlockInputs ( const TauCastType &  tau,
const size_t &  tau_index,
const edm::RefToBase< reco::BaseTau tau_ref,
const reco::Vertex pv,
double  rho,
TauFunc  tau_funcs 
)
inlineprivate

Definition at line 1574 of file DeepTauId.cc.

References funct::abs(), calculateGottfriedJacksonAngleDifference(), disable_dxy_pca_, reco::tau::eratio(), getValueLinear(), PixelMapPlotter::inputs, deep_tau::DeepTauBase::is_online_, isAbove(), isInEcalCrack(), reco::tau::n_photons_total(), pi, reco::tau::pt_weighted_deta_strip(), reco::tau::pt_weighted_dphi_strip(), reco::tau::pt_weighted_dr_iso(), reco::tau::pt_weighted_dr_signal(), rho, ZElectronSkim_cff::rho, scalingParamsMap_, sub_version_, metsig::tau, runTauDisplay::tau_eta, runTauDisplay::tau_mass, runTauDisplay::tau_phi, runTauDisplay::tau_pt, tauBlockTensor_, and tauInputs_indices_.

1579  {
1580  namespace dnn = dnn_inputs_v2::TauBlockInputs;
1581  namespace sc = deep_tau::Scaling;
1582  sc::FeatureT ft = sc::FeatureT::TauFlat;
1583  const sc::ScalingParams& sp = scalingParamsMap_->at(std::make_pair(ft, false));
1584 
1585  tensorflow::Tensor& inputs = *tauBlockTensor_;
1586  inputs.flat<float>().setZero();
1587 
1588  const auto& get = [&](int var_index) -> float& {
1589  return inputs.matrix<float>()(0, tauInputs_indices_.at(var_index));
1590  };
1591 
1592  auto leadChargedHadrCand = dynamic_cast<const CandidateCastType*>(tau.leadChargedHadrCand().get());
1593 
1594  get(dnn::rho) = sp.scale(rho, tauInputs_indices_[dnn::rho]);
1595  get(dnn::tau_pt) = sp.scale(tau.polarP4().pt(), tauInputs_indices_[dnn::tau_pt]);
1596  get(dnn::tau_eta) = sp.scale(tau.polarP4().eta(), tauInputs_indices_[dnn::tau_eta]);
1597  if (sub_version_ == 1) {
1598  get(dnn::tau_phi) = getValueLinear(tau.polarP4().phi(), -pi, pi, false);
1599  }
1600  get(dnn::tau_mass) = sp.scale(tau.polarP4().mass(), tauInputs_indices_[dnn::tau_mass]);
1601  get(dnn::tau_E_over_pt) = sp.scale(tau.p4().energy() / tau.p4().pt(), tauInputs_indices_[dnn::tau_E_over_pt]);
1602  get(dnn::tau_charge) = sp.scale(tau.charge(), tauInputs_indices_[dnn::tau_charge]);
1603  get(dnn::tau_n_charged_prongs) = sp.scale(tau.decayMode() / 5 + 1, tauInputs_indices_[dnn::tau_n_charged_prongs]);
1604  get(dnn::tau_n_neutral_prongs) = sp.scale(tau.decayMode() % 5, tauInputs_indices_[dnn::tau_n_neutral_prongs]);
1605  get(dnn::chargedIsoPtSum) =
1606  sp.scale(tau_funcs.getChargedIsoPtSum(tau, tau_ref), tauInputs_indices_[dnn::chargedIsoPtSum]);
1607  get(dnn::chargedIsoPtSumdR03_over_dR05) =
1608  sp.scale(tau_funcs.getChargedIsoPtSumdR03(tau, tau_ref) / tau_funcs.getChargedIsoPtSum(tau, tau_ref),
1609  tauInputs_indices_[dnn::chargedIsoPtSumdR03_over_dR05]);
1610  if (sub_version_ == 1)
1611  get(dnn::footprintCorrection) =
1612  sp.scale(tau_funcs.getFootprintCorrectiondR03(tau, tau_ref), tauInputs_indices_[dnn::footprintCorrection]);
1613  else if (sub_version_ == 5)
1614  get(dnn::footprintCorrection) =
1615  sp.scale(tau_funcs.getFootprintCorrection(tau, tau_ref), tauInputs_indices_[dnn::footprintCorrection]);
1616 
1617  get(dnn::neutralIsoPtSum) =
1618  sp.scale(tau_funcs.getNeutralIsoPtSum(tau, tau_ref), tauInputs_indices_[dnn::neutralIsoPtSum]);
1619  get(dnn::neutralIsoPtSumWeight_over_neutralIsoPtSum) =
1620  sp.scale(tau_funcs.getNeutralIsoPtSumWeight(tau, tau_ref) / tau_funcs.getNeutralIsoPtSum(tau, tau_ref),
1621  tauInputs_indices_[dnn::neutralIsoPtSumWeight_over_neutralIsoPtSum]);
1622  get(dnn::neutralIsoPtSumWeightdR03_over_neutralIsoPtSum) =
1623  sp.scale(tau_funcs.getNeutralIsoPtSumdR03Weight(tau, tau_ref) / tau_funcs.getNeutralIsoPtSum(tau, tau_ref),
1624  tauInputs_indices_[dnn::neutralIsoPtSumWeightdR03_over_neutralIsoPtSum]);
1625  get(dnn::neutralIsoPtSumdR03_over_dR05) =
1626  sp.scale(tau_funcs.getNeutralIsoPtSumdR03(tau, tau_ref) / tau_funcs.getNeutralIsoPtSum(tau, tau_ref),
1627  tauInputs_indices_[dnn::neutralIsoPtSumdR03_over_dR05]);
1628  get(dnn::photonPtSumOutsideSignalCone) = sp.scale(tau_funcs.getPhotonPtSumOutsideSignalCone(tau, tau_ref),
1629  tauInputs_indices_[dnn::photonPtSumOutsideSignalCone]);
1630  get(dnn::puCorrPtSum) = sp.scale(tau_funcs.getPuCorrPtSum(tau, tau_ref), tauInputs_indices_[dnn::puCorrPtSum]);
1631  // The global PCA coordinates were used as inputs during the NN training, but it was decided to disable
1632  // them for the inference, because modeling of dxy_PCA in MC poorly describes the data, and x and y coordinates
1633  // in data results outside of the expected 5 std. dev. input validity range. On the other hand,
1634  // these coordinates are strongly era-dependent. Kept as comment to document what NN expects.
1635  if (sub_version_ == 1) {
1636  if (!disable_dxy_pca_) {
1637  auto const pca = tau_funcs.getdxyPCA(tau, tau_index);
1638  get(dnn::tau_dxy_pca_x) = sp.scale(pca.x(), tauInputs_indices_[dnn::tau_dxy_pca_x]);
1639  get(dnn::tau_dxy_pca_y) = sp.scale(pca.y(), tauInputs_indices_[dnn::tau_dxy_pca_y]);
1640  get(dnn::tau_dxy_pca_z) = sp.scale(pca.z(), tauInputs_indices_[dnn::tau_dxy_pca_z]);
1641  } else {
1642  get(dnn::tau_dxy_pca_x) = 0;
1643  get(dnn::tau_dxy_pca_y) = 0;
1644  get(dnn::tau_dxy_pca_z) = 0;
1645  }
1646  }
1647 
1648  const bool tau_dxy_valid =
1649  isAbove(tau_funcs.getdxy(tau, tau_index), -10) && isAbove(tau_funcs.getdxyError(tau, tau_index), 0);
1650  if (tau_dxy_valid) {
1651  get(dnn::tau_dxy_valid) = sp.scale(tau_dxy_valid, tauInputs_indices_[dnn::tau_dxy_valid]);
1652  get(dnn::tau_dxy) = sp.scale(tau_funcs.getdxy(tau, tau_index), tauInputs_indices_[dnn::tau_dxy]);
1653  get(dnn::tau_dxy_sig) =
1654  sp.scale(std::abs(tau_funcs.getdxy(tau, tau_index)) / tau_funcs.getdxyError(tau, tau_index),
1655  tauInputs_indices_[dnn::tau_dxy_sig]);
1656  }
1657  const bool tau_ip3d_valid =
1658  isAbove(tau_funcs.getip3d(tau, tau_index), -10) && isAbove(tau_funcs.getip3dError(tau, tau_index), 0);
1659  if (tau_ip3d_valid) {
1660  get(dnn::tau_ip3d_valid) = sp.scale(tau_ip3d_valid, tauInputs_indices_[dnn::tau_ip3d_valid]);
1661  get(dnn::tau_ip3d) = sp.scale(tau_funcs.getip3d(tau, tau_index), tauInputs_indices_[dnn::tau_ip3d]);
1662  get(dnn::tau_ip3d_sig) =
1663  sp.scale(std::abs(tau_funcs.getip3d(tau, tau_index)) / tau_funcs.getip3dError(tau, tau_index),
1664  tauInputs_indices_[dnn::tau_ip3d_sig]);
1665  }
1666  if (leadChargedHadrCand) {
1667  const bool hasTrackDetails = candFunc::getHasTrackDetails(*leadChargedHadrCand);
1668  const float tau_dz = (is_online_ && !hasTrackDetails) ? 0 : candFunc::getTauDz(*leadChargedHadrCand);
1669  get(dnn::tau_dz) = sp.scale(tau_dz, tauInputs_indices_[dnn::tau_dz]);
1670  get(dnn::tau_dz_sig_valid) =
1671  sp.scale(candFunc::getTauDZSigValid(*leadChargedHadrCand), tauInputs_indices_[dnn::tau_dz_sig_valid]);
1672  const double dzError = hasTrackDetails ? leadChargedHadrCand->dzError() : -999.;
1673  get(dnn::tau_dz_sig) = sp.scale(std::abs(tau_dz) / dzError, tauInputs_indices_[dnn::tau_dz_sig]);
1674  }
1675  get(dnn::tau_flightLength_x) =
1676  sp.scale(tau_funcs.getFlightLength(tau, tau_index).x(), tauInputs_indices_[dnn::tau_flightLength_x]);
1677  get(dnn::tau_flightLength_y) =
1678  sp.scale(tau_funcs.getFlightLength(tau, tau_index).y(), tauInputs_indices_[dnn::tau_flightLength_y]);
1679  get(dnn::tau_flightLength_z) =
1680  sp.scale(tau_funcs.getFlightLength(tau, tau_index).z(), tauInputs_indices_[dnn::tau_flightLength_z]);
1681  if (sub_version_ == 1)
1682  get(dnn::tau_flightLength_sig) = 0.55756444; //This value is set due to a bug in the training
1683  else if (sub_version_ == 5)
1684  get(dnn::tau_flightLength_sig) =
1685  sp.scale(tau_funcs.getFlightLengthSig(tau, tau_index), tauInputs_indices_[dnn::tau_flightLength_sig]);
1686 
1687  get(dnn::tau_pt_weighted_deta_strip) = sp.scale(reco::tau::pt_weighted_deta_strip(tau, tau.decayMode()),
1688  tauInputs_indices_[dnn::tau_pt_weighted_deta_strip]);
1689 
1690  get(dnn::tau_pt_weighted_dphi_strip) = sp.scale(reco::tau::pt_weighted_dphi_strip(tau, tau.decayMode()),
1691  tauInputs_indices_[dnn::tau_pt_weighted_dphi_strip]);
1692  get(dnn::tau_pt_weighted_dr_signal) = sp.scale(reco::tau::pt_weighted_dr_signal(tau, tau.decayMode()),
1693  tauInputs_indices_[dnn::tau_pt_weighted_dr_signal]);
1694  get(dnn::tau_pt_weighted_dr_iso) =
1695  sp.scale(reco::tau::pt_weighted_dr_iso(tau, tau.decayMode()), tauInputs_indices_[dnn::tau_pt_weighted_dr_iso]);
1696  get(dnn::tau_leadingTrackNormChi2) =
1697  sp.scale(tau_funcs.getLeadingTrackNormChi2(tau), tauInputs_indices_[dnn::tau_leadingTrackNormChi2]);
1698  const auto eratio = reco::tau::eratio(tau);
1699  const bool tau_e_ratio_valid = std::isnormal(eratio) && eratio > 0.f;
1700  get(dnn::tau_e_ratio_valid) = sp.scale(tau_e_ratio_valid, tauInputs_indices_[dnn::tau_e_ratio_valid]);
1701  get(dnn::tau_e_ratio) = tau_e_ratio_valid ? sp.scale(eratio, tauInputs_indices_[dnn::tau_e_ratio]) : 0.f;
1702  const double gj_angle_diff = calculateGottfriedJacksonAngleDifference(tau, tau_index, tau_funcs);
1703  const bool tau_gj_angle_diff_valid = (std::isnormal(gj_angle_diff) || gj_angle_diff == 0) && gj_angle_diff >= 0;
1704  get(dnn::tau_gj_angle_diff_valid) =
1705  sp.scale(tau_gj_angle_diff_valid, tauInputs_indices_[dnn::tau_gj_angle_diff_valid]);
1706  get(dnn::tau_gj_angle_diff) =
1707  tau_gj_angle_diff_valid ? sp.scale(gj_angle_diff, tauInputs_indices_[dnn::tau_gj_angle_diff]) : 0;
1708  get(dnn::tau_n_photons) = sp.scale(reco::tau::n_photons_total(tau), tauInputs_indices_[dnn::tau_n_photons]);
1709  get(dnn::tau_emFraction) = sp.scale(tau_funcs.getEmFraction(tau), tauInputs_indices_[dnn::tau_emFraction]);
1710 
1711  get(dnn::tau_inside_ecal_crack) =
1712  sp.scale(isInEcalCrack(tau.p4().eta()), tauInputs_indices_[dnn::tau_inside_ecal_crack]);
1713  get(dnn::leadChargedCand_etaAtEcalEntrance_minus_tau_eta) =
1714  sp.scale(tau_funcs.getEtaAtEcalEntrance(tau) - tau.p4().eta(),
1715  tauInputs_indices_[dnn::leadChargedCand_etaAtEcalEntrance_minus_tau_eta]);
1716  }
unsigned int n_photons_total(const reco::PFTau &tau)
return total number of pf photon candidates with pT>500 MeV, which are associated to signal ...
float pt_weighted_dr_signal(const reco::PFTau &tau, int dm)
const bool disable_dxy_pca_
Definition: DeepTauId.cc:2444
static float getValueLinear(T value, float min_value, float max_value, bool positive)
Definition: DeepTauId.cc:1033
static bool isAbove(double value, double min)
Definition: DeepTauId.cc:1049
static bool isInEcalCrack(double eta)
Definition: DeepTauId.cc:2412
const unsigned sub_version_
Definition: DeepTauId.cc:2442
const std::map< std::pair< deep_tau::Scaling::FeatureT, bool >, deep_tau::Scaling::ScalingParams > * scalingParamsMap_
Definition: DeepTauId.cc:2450
static constexpr float pi
Definition: DeepTauId.cc:1025
float pt_weighted_deta_strip(const reco::PFTau &tau, int dm)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float pt_weighted_dr_iso(const reco::PFTau &tau, int dm)
static bool calculateGottfriedJacksonAngleDifference(const TauCastType &tau, const size_t tau_index, double &gj_diff, TauFunc tau_funcs)
Definition: DeepTauId.cc:2381
float pt_weighted_dphi_strip(const reco::PFTau &tau, int dm)
float eratio(const reco::PFTau &tau)
return ratio of energy in ECAL over sum of energy in ECAL and HCAL
std::vector< int > tauInputs_indices_
Definition: DeepTauId.cc:2455
std::unique_ptr< tensorflow::Tensor > tauBlockTensor_
Definition: DeepTauId.cc:2447

◆ fillDescriptions()

static void DeepTauId::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
inlinestatic

Definition at line 873 of file DeepTauId.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addOptional(), submitPVResolutionJobs::desc, HLT_2022v15_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

873  {
875  desc.add<edm::InputTag>("electrons", edm::InputTag("slimmedElectrons"));
876  desc.add<edm::InputTag>("muons", edm::InputTag("slimmedMuons"));
877  desc.add<edm::InputTag>("taus", edm::InputTag("slimmedTaus"));
878  desc.add<edm::InputTag>("pfcands", edm::InputTag("packedPFCandidates"));
879  desc.add<edm::InputTag>("vertices", edm::InputTag("offlineSlimmedPrimaryVertices"));
880  desc.add<edm::InputTag>("rho", edm::InputTag("fixedGridRhoAll"));
881  desc.add<std::vector<std::string>>("graph_file",
882  {"RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6.pb"});
883  desc.add<bool>("mem_mapped", false);
884  desc.add<unsigned>("year", 2017);
885  desc.add<unsigned>("version", 2);
886  desc.add<unsigned>("sub_version", 1);
887  desc.add<int>("debug_level", 0);
888  desc.add<bool>("disable_dxy_pca", false);
889  desc.add<bool>("disable_hcalFraction_workaround", false);
890  desc.add<bool>("disable_CellIndex_workaround", false);
891  desc.add<bool>("save_inputs", false);
892  desc.add<bool>("is_online", false);
893 
894  desc.add<std::vector<std::string>>("VSeWP", {"-1."});
895  desc.add<std::vector<std::string>>("VSmuWP", {"-1."});
896  desc.add<std::vector<std::string>>("VSjetWP", {"-1."});
897 
898  desc.addUntracked<edm::InputTag>("basicTauDiscriminators", edm::InputTag("basicTauDiscriminators"));
899  desc.addUntracked<edm::InputTag>("basicTauDiscriminatorsdR03", edm::InputTag("basicTauDiscriminatorsdR03"));
900  desc.add<edm::InputTag>("pfTauTransverseImpactParameters", edm::InputTag("hpsPFTauTransverseImpactParameters"));
901 
902  {
903  edm::ParameterSetDescription pset_Prediscriminants;
904  pset_Prediscriminants.add<std::string>("BooleanOperator", "and");
905  {
907  psd1.add<double>("cut");
908  psd1.add<edm::InputTag>("Producer");
909  pset_Prediscriminants.addOptional<edm::ParameterSetDescription>("decayMode", psd1);
910  }
911  desc.add<edm::ParameterSetDescription>("Prediscriminants", pset_Prediscriminants);
912  }
913 
914  descriptions.add("DeepTau", desc);
915  }
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ fillGrids()

template<typename Collection , typename TauCastType >
void DeepTauId::fillGrids ( const TauCastType &  tau,
const Collection &  objects,
CellGrid &  inner_grid,
CellGrid &  outer_grid 
)
inlineprivate

Definition at line 1421 of file DeepTauId.cc.

References reco::deltaPhi(), getInnerSignalConeRadius(), getRunAppsInfo::grid, dqmiodumpmetadata::n, getGTfromDQMFile::obj, funct::pow(), and metsig::tau.

Referenced by getPredictionsV2().

1421  {
1422  static constexpr double outer_dR2 = 0.25; //0.5^2
1423  const double inner_radius = getInnerSignalConeRadius(tau.polarP4().pt());
1424  const double inner_dR2 = std::pow(inner_radius, 2);
1425 
1426  const auto addObject = [&](size_t n, double deta, double dphi, CellGrid& grid) {
1427  const auto& obj = objects.at(n);
1428  const CellObjectType obj_type = GetCellObjectType(obj);
1429  if (obj_type == CellObjectType::Other)
1430  return;
1431  CellIndex cell_index;
1432  if (grid.tryGetCellIndex(deta, dphi, cell_index)) {
1433  Cell& cell = grid[cell_index];
1434  auto iter = cell.find(obj_type);
1435  if (iter != cell.end()) {
1436  const auto& prev_obj = objects.at(iter->second);
1437  if (obj.polarP4().pt() > prev_obj.polarP4().pt())
1438  iter->second = n;
1439  } else {
1440  cell[obj_type] = n;
1441  }
1442  }
1443  };
1444 
1445  for (size_t n = 0; n < objects.size(); ++n) {
1446  const auto& obj = objects.at(n);
1447  const double deta = obj.polarP4().eta() - tau.polarP4().eta();
1448  const double dphi = reco::deltaPhi(obj.polarP4().phi(), tau.polarP4().phi());
1449  const double dR2 = std::pow(deta, 2) + std::pow(dphi, 2);
1450  if (dR2 < inner_dR2)
1451  addObject(n, deta, dphi, inner_grid);
1452  if (dR2 < outer_dR2)
1453  addObject(n, deta, dphi, outer_grid);
1454  }
1455  }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:26
static double getInnerSignalConeRadius(double pt)
Definition: DeepTauId.cc:2373
CellObjectType
Definition: DeepTauId.cc:690
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29

◆ findMatchedElectron()

template<typename TauCastType >
static const pat::Electron* DeepTauId::findMatchedElectron ( const TauCastType &  tau,
const std::vector< pat::Electron > *  electrons,
double  deltaR 
)
inlinestaticprivate

Definition at line 2418 of file DeepTauId.cc.

References PbPb_ZMuSkimMuonDPG_cff::deltaR, reco::deltaR2(), pwdgSkimBPark_cfi::electrons, reco::LeafCandidate::pt(), and metsig::tau.

2420  {
2421  const double dR2 = deltaR * deltaR;
2422  const pat::Electron* matched_ele = nullptr;
2423  for (const auto& ele : *electrons) {
2424  if (reco::deltaR2(tau.p4(), ele.p4()) < dR2 && (!matched_ele || matched_ele->pt() < ele.pt())) {
2425  matched_ele = &ele;
2426  }
2427  }
2428  return matched_ele;
2429  }
double pt() const final
transverse momentum
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
Analysis-level electron class.
Definition: Electron.h:51

◆ getInnerSignalConeRadius()

static double DeepTauId::getInnerSignalConeRadius ( double  pt)
inlinestaticprivate

Definition at line 2373 of file DeepTauId.cc.

References SiStripPI::max, cosmictrackSelector_cfi::min_pt, and DiDispStaMuonMonitor_cfi::pt.

Referenced by fillGrids(), and processSignalPFComponents().

2373  {
2374  static constexpr double min_pt = 30., min_radius = 0.05, cone_opening_coef = 3.;
2375  // This is equivalent of the original formula (std::max(std::min(0.1, 3.0/pt), 0.05)
2376  return std::max(cone_opening_coef / std::max(pt, min_pt), min_radius);
2377  }

◆ GetOutputs()

static const OutputCollection& DeepTauId::GetOutputs ( )
inlinestatic

Definition at line 831 of file DeepTauId.cc.

References GetRecoTauVFromDQM_MC_cff::Output, and deep_tau::DeepTauBase::outputs_.

831  {
832  static constexpr size_t e_index = 0, mu_index = 1, tau_index = 2, jet_index = 3;
833  static const OutputCollection outputs_ = {
834  {"VSe", Output({tau_index}, {e_index, tau_index})},
835  {"VSmu", Output({tau_index}, {mu_index, tau_index})},
836  {"VSjet", Output({tau_index}, {jet_index, tau_index})},
837  };
838  return outputs_;
839  }
std::map< std::string, Output > OutputCollection
Definition: DeepTauBase.h:91
OutputCollection outputs_
Definition: DeepTauBase.h:134

◆ getPartialPredictions()

tensorflow::Tensor DeepTauId::getPartialPredictions ( bool  is_inner)
inlineprivate

Definition at line 1457 of file DeepTauId.cc.

References deep_tau::DeepTauBase::cache_, eGammaTensor_, deep_tau::DeepTauCache::getSession(), hadronsTensor_, muonTensor_, and tensorflow::run().

Referenced by createConvFeatures(), and DeepTauId().

1457  {
1458  std::vector<tensorflow::Tensor> pred_vector;
1459  if (is_inner) {
1460  tensorflow::run(&(cache_->getSession("inner")),
1461  {
1462  {"input_inner_egamma", *eGammaTensor_.at(is_inner)},
1463  {"input_inner_muon", *muonTensor_.at(is_inner)},
1464  {"input_inner_hadrons", *hadronsTensor_.at(is_inner)},
1465  },
1466  {"inner_all_dropout_4/Identity"},
1467  &pred_vector);
1468  } else {
1469  tensorflow::run(&(cache_->getSession("outer")),
1470  {
1471  {"input_outer_egamma", *eGammaTensor_.at(is_inner)},
1472  {"input_outer_muon", *muonTensor_.at(is_inner)},
1473  {"input_outer_hadrons", *hadronsTensor_.at(is_inner)},
1474  },
1475  {"outer_all_dropout_4/Identity"},
1476  &pred_vector);
1477  }
1478  return pred_vector.at(0);
1479  }
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
Definition: DeepTauId.cc:2448
const DeepTauCache * cache_
Definition: DeepTauBase.h:135
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Definition: TensorFlow.cc:286
tensorflow::Session & getSession(const std::string &name="") const
Definition: DeepTauBase.h:57
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
Definition: DeepTauId.cc:2448
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
Definition: DeepTauId.cc:2448

◆ getPredictions()

tensorflow::Tensor DeepTauId::getPredictions ( edm::Event event,
edm::Handle< TauCollection taus 
)
inlineoverrideprivatevirtual

Implements deep_tau::DeepTauBase.

Definition at line 1191 of file DeepTauId.cc.

References deep_tau::DeepTauBase::andPrediscriminants_, basicDiscrdR03IndexMap_, basicDiscrIndexMap_, HLT_2022v15_cff::basicTauDiscriminators, basicTauDiscriminators_inputToken_, HLT_2022v15_cff::basicTauDiscriminatorsdR03, basicTauDiscriminatorsdR03_inputToken_, discrIndicesMapped_, electrons_token_, Exception, f, deep_tau::DeepTauBase::is_online_, dqmdumpme::k, matchDiscriminatorIndices(), muons_token_, deep_tau::NumberOfOutputs, deep_tau::DeepTauBase::patPrediscriminants_, deep_tau::DeepTauBase::pfcandToken_, HLT_2022v15_cff::pfTauTransverseImpactParameters, pfTauTransverseImpactParameters_token_, deep_tau::DeepTauBase::recoPrediscriminants_, deep_tau::DeepTauBase::requiredBasicDiscriminators_, deep_tau::DeepTauBase::requiredBasicDiscriminatorsdR03_, rho, rho_token_, Tau3MuMonitor_cff::taus, version_, AlignmentTracksFromVertexSelector_cfi::vertices, and deep_tau::DeepTauBase::vtxToken_.

1191  {
1192  // Empty dummy vectors
1193  const std::vector<pat::Electron> electron_collection_default;
1194  const std::vector<pat::Muon> muon_collection_default;
1195  const reco::TauDiscriminatorContainer basicTauDiscriminators_default;
1196  const reco::TauDiscriminatorContainer basicTauDiscriminatorsdR03_default;
1198  pfTauTransverseImpactParameters_default;
1199 
1200  const std::vector<pat::Electron>* electron_collection;
1201  const std::vector<pat::Muon>* muon_collection;
1206 
1207  if (!is_online_) {
1208  electron_collection = &event.get(electrons_token_);
1209  muon_collection = &event.get(muons_token_);
1210  pfTauTransverseImpactParameters = &pfTauTransverseImpactParameters_default;
1211  basicTauDiscriminators = &basicTauDiscriminators_default;
1212  basicTauDiscriminatorsdR03 = &basicTauDiscriminatorsdR03_default;
1213  } else {
1214  electron_collection = &electron_collection_default;
1215  muon_collection = &muon_collection_default;
1219 
1220  // Get indices for discriminators
1221  if (!discrIndicesMapped_) {
1226  discrIndicesMapped_ = true;
1227  }
1228  }
1229 
1230  TauFunc tauIDs = {basicTauDiscriminators,
1235 
1237  event.getByToken(pfcandToken_, pfCands);
1238 
1240  event.getByToken(vtxToken_, vertices);
1241 
1243  event.getByToken(rho_token_, rho);
1244 
1245  auto const& eventnr = event.id().event();
1246 
1247  tensorflow::Tensor predictions(tensorflow::DT_FLOAT, {static_cast<int>(taus->size()), deep_tau::NumberOfOutputs});
1248 
1249  for (size_t tau_index = 0; tau_index < taus->size(); ++tau_index) {
1250  const edm::RefToBase<reco::BaseTau> tauRef = taus->refAt(tau_index);
1251 
1252  std::vector<tensorflow::Tensor> pred_vector;
1253 
1254  bool passesPrediscriminants;
1255  if (is_online_) {
1256  passesPrediscriminants = tauIDs.passPrediscriminants<std::vector<TauDiscInfo<reco::PFTauDiscriminator>>>(
1258  } else {
1259  passesPrediscriminants = tauIDs.passPrediscriminants<std::vector<TauDiscInfo<pat::PATTauDiscriminator>>>(
1261  }
1262 
1263  if (passesPrediscriminants) {
1264  if (version_ == 2) {
1265  if (is_online_) {
1266  getPredictionsV2<reco::PFCandidate, reco::PFTau>(taus->at(tau_index),
1267  tau_index,
1268  tauRef,
1269  electron_collection,
1270  muon_collection,
1271  *pfCands,
1272  vertices->at(0),
1273  *rho,
1274  eventnr,
1275  pred_vector,
1276  tauIDs);
1277  } else
1278  getPredictionsV2<pat::PackedCandidate, pat::Tau>(taus->at(tau_index),
1279  tau_index,
1280  tauRef,
1281  electron_collection,
1282  muon_collection,
1283  *pfCands,
1284  vertices->at(0),
1285  *rho,
1286  eventnr,
1287  pred_vector,
1288  tauIDs);
1289  } else {
1290  throw cms::Exception("DeepTauId") << "version " << version_ << " is not supported.";
1291  }
1292 
1293  for (int k = 0; k < deep_tau::NumberOfOutputs; ++k) {
1294  const float pred = pred_vector[0].flat<float>()(k);
1295  if (!(pred >= 0 && pred <= 1))
1296  throw cms::Exception("DeepTauId")
1297  << "invalid prediction = " << pred << " for tau_index = " << tau_index << ", pred_index = " << k;
1298  predictions.matrix<float>()(tau_index, k) = pred;
1299  }
1300  } else {
1301  // This else statement was added as a part of the DeepTau@HLT development. It does not affect the current state
1302  // of offline DeepTauId code as there the preselection is not used (it was added in the DeepTau@HLT). It returns
1303  // default values for deepTau score if the preselection failed. Before this statement the values given for this tau
1304  // were random. k == 2 corresponds to the tau score and all other k values to e, mu and jets. By defining in this way
1305  // the final score is -1.
1306  for (int k = 0; k < deep_tau::NumberOfOutputs; ++k) {
1307  predictions.matrix<float>()(tau_index, k) = (k == 2) ? -1.f : 2.f;
1308  }
1309  }
1310  }
1311  return predictions;
1312  }
std::map< BasicDiscriminator, size_t > basicDiscrdR03IndexMap_
Definition: DeepTauId.cc:2460
std::map< BasicDiscriminator, size_t > basicDiscrIndexMap_
Definition: DeepTauId.cc:2459
const unsigned version_
Definition: DeepTauId.cc:2441
static const std::vector< BasicDiscriminator > requiredBasicDiscriminatorsdR03_
Definition: DeepTauBase.h:139
const std::map< BasicDiscriminator, size_t > matchDiscriminatorIndices(edm::Event &event, edm::EDGetTokenT< reco::TauDiscriminatorContainer > discriminatorContainerToken, std::vector< BasicDiscriminator > requiredDiscr)
Definition: DeepTauId.cc:841
double f[11][100]
static const std::vector< BasicDiscriminator > requiredBasicDiscriminators_
Definition: DeepTauBase.h:138
edm::EDGetTokenT< edm::AssociationVector< reco::PFTauRefProd, std::vector< reco::PFTauTransverseImpactParameterRef > > > pfTauTransverseImpactParameters_token_
Definition: DeepTauId.cc:2438
bool discrIndicesMapped_
Definition: DeepTauId.cc:2458
uint8_t andPrediscriminants_
Definition: DeepTauBase.h:111
edm::EDGetTokenT< reco::TauDiscriminatorContainer > basicTauDiscriminators_inputToken_
Definition: DeepTauId.cc:2435
edm::EDGetTokenT< reco::TauDiscriminatorContainer > basicTauDiscriminatorsdR03_inputToken_
Definition: DeepTauId.cc:2436
std::vector< TauDiscInfo< pat::PATTauDiscriminator > > patPrediscriminants_
Definition: DeepTauBase.h:112
edm::EDGetTokenT< std::vector< pat::Electron > > electrons_token_
Definition: DeepTauId.cc:2432
edm::EDGetTokenT< std::vector< pat::Muon > > muons_token_
Definition: DeepTauId.cc:2433
edm::EDGetTokenT< double > rho_token_
Definition: DeepTauId.cc:2434
edm::EDGetTokenT< CandidateCollection > pfcandToken_
Definition: DeepTauBase.h:130
std::vector< TauDiscInfo< reco::PFTauDiscriminator > > recoPrediscriminants_
Definition: DeepTauBase.h:113
Definition: event.py:1
constexpr int NumberOfOutputs
Definition: DeepTauId.cc:20
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
Definition: DeepTauBase.h:131

◆ getPredictionsV2()

template<typename CandidateCastType , typename TauCastType >
void DeepTauId::getPredictionsV2 ( TauCollection::const_reference tau,
const size_t  tau_index,
const edm::RefToBase< reco::BaseTau tau_ref,
const std::vector< pat::Electron > *  electrons,
const std::vector< pat::Muon > *  muons,
const edm::View< reco::Candidate > &  pfCands,
const reco::Vertex pv,
double  rho,
const edm::EventNumber_t eventnr,
std::vector< tensorflow::Tensor > &  pred_vector,
TauFunc  tau_funcs 
)
inlineprivate

Definition at line 1315 of file DeepTauId.cc.

References cms::cuda::assert(), deep_tau::DeepTauBase::cache_, checkInputs(), convTensor_, gather_cfg::cout, debug_level, disable_CellIndex_workaround_, eGammaTensor_, pwdgSkimBPark_cfi::electrons, file_counter_, fillGrids(), deep_tau::DeepTauCache::getSession(), hadronsTensor_, heavyIonCSV_trainingSettings::idx, is_first_block_, json_file_, label, PDWG_BPHSkim_cff::muons, muonTensor_, deep_tau::NumberOfOutputs, rho, tensorflow::run(), save_inputs_, saveInputs(), AlCaHLTBitMon_QueryRunRegistry::string, metsig::tau, tauBlockTensor_, and cond::impl::to_string().

1325  {
1326  using namespace dnn_inputs_v2;
1327  if (debug_level >= 2) {
1328  std::cout << "<DeepTauId::getPredictionsV2 (moduleLabel = " << moduleDescription().moduleLabel()
1329  << ")>:" << std::endl;
1330  std::cout << " tau: pT = " << tau.pt() << ", eta = " << tau.eta() << ", phi = " << tau.phi()
1331  << ", eventnr = " << eventnr << std::endl;
1332  }
1333  CellGrid inner_grid(number_of_inner_cell, number_of_inner_cell, 0.02, 0.02, disable_CellIndex_workaround_);
1334  CellGrid outer_grid(number_of_outer_cell, number_of_outer_cell, 0.05, 0.05, disable_CellIndex_workaround_);
1335  fillGrids(dynamic_cast<const TauCastType&>(tau), *electrons, inner_grid, outer_grid);
1336  fillGrids(dynamic_cast<const TauCastType&>(tau), *muons, inner_grid, outer_grid);
1337  fillGrids(dynamic_cast<const TauCastType&>(tau), pfCands, inner_grid, outer_grid);
1338 
1339  createTauBlockInputs<CandidateCastType>(
1340  dynamic_cast<const TauCastType&>(tau), tau_index, tau_ref, pv, rho, tau_funcs);
1341  checkInputs(*tauBlockTensor_, "input_tau", static_cast<int>(tauBlockTensor_->shape().dim_size(1)));
1342  createConvFeatures<CandidateCastType>(dynamic_cast<const TauCastType&>(tau),
1343  tau_index,
1344  tau_ref,
1345  pv,
1346  rho,
1347  electrons,
1348  muons,
1349  pfCands,
1350  inner_grid,
1351  tau_funcs,
1352  true);
1353  checkInputs(*eGammaTensor_[true], "input_inner_egamma", EgammaBlockInputs::NumberOfInputs, &inner_grid);
1354  checkInputs(*muonTensor_[true], "input_inner_muon", MuonBlockInputs::NumberOfInputs, &inner_grid);
1355  checkInputs(*hadronsTensor_[true], "input_inner_hadrons", HadronBlockInputs::NumberOfInputs, &inner_grid);
1356  createConvFeatures<CandidateCastType>(dynamic_cast<const TauCastType&>(tau),
1357  tau_index,
1358  tau_ref,
1359  pv,
1360  rho,
1361  electrons,
1362  muons,
1363  pfCands,
1364  outer_grid,
1365  tau_funcs,
1366  false);
1367  checkInputs(*eGammaTensor_[false], "input_outer_egamma", EgammaBlockInputs::NumberOfInputs, &outer_grid);
1368  checkInputs(*muonTensor_[false], "input_outer_muon", MuonBlockInputs::NumberOfInputs, &outer_grid);
1369  checkInputs(*hadronsTensor_[false], "input_outer_hadrons", HadronBlockInputs::NumberOfInputs, &outer_grid);
1370 
1371  if (save_inputs_) {
1372  std::string json_file_name = "DeepTauId_" + std::to_string(eventnr) + "_" + std::to_string(tau_index) + ".json";
1373  json_file_ = new std::ofstream(json_file_name.data());
1374  is_first_block_ = true;
1375  (*json_file_) << "{";
1376  saveInputs(*tauBlockTensor_, "input_tau", static_cast<int>(tauBlockTensor_->shape().dim_size(1)));
1377  saveInputs(
1378  *eGammaTensor_[true], "input_inner_egamma", dnn_inputs_v2::EgammaBlockInputs::NumberOfInputs, &inner_grid);
1379  saveInputs(*muonTensor_[true], "input_inner_muon", dnn_inputs_v2::MuonBlockInputs::NumberOfInputs, &inner_grid);
1380  saveInputs(
1381  *hadronsTensor_[true], "input_inner_hadrons", dnn_inputs_v2::HadronBlockInputs::NumberOfInputs, &inner_grid);
1382  saveInputs(
1383  *eGammaTensor_[false], "input_outer_egamma", dnn_inputs_v2::EgammaBlockInputs::NumberOfInputs, &outer_grid);
1384  saveInputs(*muonTensor_[false], "input_outer_muon", dnn_inputs_v2::MuonBlockInputs::NumberOfInputs, &outer_grid);
1385  saveInputs(
1386  *hadronsTensor_[false], "input_outer_hadrons", dnn_inputs_v2::HadronBlockInputs::NumberOfInputs, &outer_grid);
1387  (*json_file_) << "}";
1388  delete json_file_;
1389  ++file_counter_;
1390  }
1391 
1392  tensorflow::run(&(cache_->getSession("core")),
1393  {{"input_tau", *tauBlockTensor_},
1394  {"input_inner", *convTensor_.at(true)},
1395  {"input_outer", *convTensor_.at(false)}},
1396  {"main_output/Softmax"},
1397  &pred_vector);
1398  if (debug_level >= 1) {
1399  std::cout << "output = { ";
1400  for (int idx = 0; idx < deep_tau::NumberOfOutputs; ++idx) {
1401  if (idx > 0)
1402  std::cout << ", ";
1404  if (idx == 0)
1405  label = "e";
1406  else if (idx == 1)
1407  label = "mu";
1408  else if (idx == 2)
1409  label = "tau";
1410  else if (idx == 3)
1411  label = "jet";
1412  else
1413  assert(0);
1414  std::cout << label << " = " << pred_vector[0].flat<float>()(idx);
1415  }
1416  std::cout << " }" << std::endl;
1417  }
1418  }
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
Definition: DeepTauId.cc:2448
void fillGrids(const TauCastType &tau, const Collection &objects, CellGrid &inner_grid, CellGrid &outer_grid)
Definition: DeepTauId.cc:1421
const bool save_inputs_
Definition: DeepTauId.cc:2451
int file_counter_
Definition: DeepTauId.cc:2454
const DeepTauCache * cache_
Definition: DeepTauBase.h:135
std::ofstream * json_file_
Definition: DeepTauId.cc:2452
std::string to_string(const V &value)
Definition: OMSAccess.h:71
assert(be >=bs)
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > convTensor_
Definition: DeepTauId.cc:2448
char const * label
bool is_first_block_
Definition: DeepTauId.cc:2453
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Definition: TensorFlow.cc:286
void saveInputs(const tensorflow::Tensor &inputs, const std::string &block_name, int n_inputs, const CellGrid *grid=nullptr)
Definition: DeepTauId.cc:1130
const bool disable_CellIndex_workaround_
Definition: DeepTauId.cc:2446
void checkInputs(const tensorflow::Tensor &inputs, const std::string &block_name, int n_inputs, const CellGrid *grid=nullptr) const
Definition: DeepTauId.cc:1074
tensorflow::Session & getSession(const std::string &name="") const
Definition: DeepTauBase.h:57
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
Definition: DeepTauId.cc:2448
const int debug_level
Definition: DeepTauId.cc:2443
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
Definition: DeepTauId.cc:2448
constexpr int NumberOfOutputs
Definition: DeepTauId.cc:20
std::unique_ptr< tensorflow::Tensor > tauBlockTensor_
Definition: DeepTauId.cc:2447

◆ getValue()

template<typename T >
static float DeepTauId::getValue ( T  value)
inlinestaticprivate

Definition at line 1028 of file DeepTauId.cc.

References f, and relativeConstraints::value.

Referenced by getValueLinear(), and getValueNorm().

1028  {
1029  return std::isnormal(value) ? static_cast<float>(value) : 0.f;
1030  }
double f[11][100]
Definition: value.py:1

◆ getValueLinear()

template<typename T >
static float DeepTauId::getValueLinear ( T  value,
float  min_value,
float  max_value,
bool  positive 
)
inlinestaticprivate

Definition at line 1033 of file DeepTauId.cc.

References getValue(), hcaldqm::quantity::max_value, and hcaldqm::quantity::min_value.

Referenced by createTauBlockInputs().

1033  {
1034  const float fixed_value = getValue(value);
1035  const float clamped_value = std::clamp(fixed_value, min_value, max_value);
1036  float transformed_value = (clamped_value - min_value) / (max_value - min_value);
1037  if (!positive)
1038  transformed_value = transformed_value * 2 - 1;
1039  return transformed_value;
1040  }
const std::map< ValueQuantityType, double > min_value
static float getValue(T value)
Definition: DeepTauId.cc:1028
Definition: value.py:1
const std::map< ValueQuantityType, double > max_value

◆ getValueNorm()

template<typename T >
static float DeepTauId::getValueNorm ( T  value,
float  mean,
float  sigma,
float  n_sigmas_max = 5 
)
inlinestaticprivate

Definition at line 1043 of file DeepTauId.cc.

References getValue(), and SiStripPI::mean.

1043  {
1044  const float fixed_value = getValue(value);
1045  const float norm_value = (fixed_value - mean) / sigma;
1046  return std::clamp(norm_value, -n_sigmas_max, n_sigmas_max);
1047  }
static float getValue(T value)
Definition: DeepTauId.cc:1028
Definition: value.py:1

◆ globalEndJob()

static void DeepTauId::globalEndJob ( const deep_tau::DeepTauCache cache_)
inlinestatic

Definition at line 1022 of file DeepTauId.cc.

References deep_tau::DeepTauBase::cache_.

1022 { return DeepTauBase::globalEndJob(cache_); }
const DeepTauCache * cache_
Definition: DeepTauBase.h:135

◆ initializeGlobalCache()

static std::unique_ptr<deep_tau::DeepTauCache> DeepTauId::initializeGlobalCache ( const edm::ParameterSet cfg)
inlinestatic

Definition at line 1018 of file DeepTauId.cc.

References looper::cfg.

1018  {
1019  return DeepTauBase::initializeGlobalCache(cfg);
1020  }

◆ isAbove()

static bool DeepTauId::isAbove ( double  value,
double  min 
)
inlinestaticprivate

Definition at line 1049 of file DeepTauId.cc.

References SiStripPI::min.

Referenced by createTauBlockInputs().

1049 { return std::isnormal(value) && value > min; }
Definition: value.py:1

◆ isInEcalCrack()

static bool DeepTauId::isInEcalCrack ( double  eta)
inlinestaticprivate

Definition at line 2412 of file DeepTauId.cc.

References funct::abs(), and PVValHelper::eta.

Referenced by createEgammaBlockInputs(), createHadronsBlockInputs(), createMuonBlockInputs(), and createTauBlockInputs().

2412  {
2413  const double abs_eta = std::abs(eta);
2414  return abs_eta > 1.46 && abs_eta < 1.558;
2415  }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ matchDiscriminatorIndices()

const std::map<BasicDiscriminator, size_t> DeepTauId::matchDiscriminatorIndices ( edm::Event event,
edm::EDGetTokenT< reco::TauDiscriminatorContainer discriminatorContainerToken,
std::vector< BasicDiscriminator requiredDiscr 
)
inline

Definition at line 841 of file DeepTauId.cc.

References Exception, edm::ParameterSet::getParameter(), mps_fire::i, dqmiolumiharvest::j, edm::parameterSet(), AlCaHLTBitMon_QueryRunRegistry::string, and deep_tau::DeepTauBase::stringFromDiscriminator_.

Referenced by getPredictions().

844  {
845  std::map<std::string, size_t> discrIndexMapStr;
846  auto const aHandle = event.getHandle(discriminatorContainerToken);
847  auto const aProv = aHandle.provenance();
848  if (aProv == nullptr)
849  aHandle.whyFailed()->raise();
850  const auto& psetsFromProvenance = edm::parameterSet(aProv->stable(), event.processHistory());
851  auto const idlist = psetsFromProvenance.getParameter<std::vector<edm::ParameterSet>>("IDdefinitions");
852  for (size_t j = 0; j < idlist.size(); ++j) {
853  std::string idname = idlist[j].getParameter<std::string>("IDname");
854  if (discrIndexMapStr.count(idname)) {
855  throw cms::Exception("DeepTauId")
856  << "basic discriminator " << idname << " appears more than once in the input.";
857  }
858  discrIndexMapStr[idname] = j;
859  }
860 
861  //translate to a map of <BasicDiscriminator, index> and check if all discriminators are present
862  std::map<BasicDiscriminator, size_t> discrIndexMap;
863  for (size_t i = 0; i < requiredDiscr.size(); i++) {
864  if (discrIndexMapStr.find(stringFromDiscriminator_.at(requiredDiscr[i])) == discrIndexMapStr.end())
865  throw cms::Exception("DeepTauId") << "Basic Discriminator " << stringFromDiscriminator_.at(requiredDiscr[i])
866  << " was not provided in the config file.";
867  else
868  discrIndexMap[requiredDiscr[i]] = discrIndexMapStr[stringFromDiscriminator_.at(requiredDiscr[i])];
869  }
870  return discrIndexMap;
871  }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
ParameterSet const & parameterSet(StableProvenance const &provenance, ProcessHistory const &history)
Definition: Provenance.cc:11
static const std::map< BasicDiscriminator, std::string > stringFromDiscriminator_
Definition: DeepTauBase.h:137

◆ processIsolationPFComponents()

template<typename CandidateCollection , typename TauCastType >
static void DeepTauId::processIsolationPFComponents ( const TauCastType &  tau,
const CandidateCollection candidates,
LorentzVectorXYZ p4,
float &  pt,
float &  d_eta,
float &  d_phi,
float &  m,
float &  n 
)
inlinestaticprivate

Definition at line 2351 of file DeepTauId.cc.

References HLT_2022v15_cff::candidates, default_value, HLT_2022v15_cff::dEta, HLT_2022v15_cff::dPhi, visualization-live-secondInstance_cfg::m, dqmiodumpmetadata::n, DiDispStaMuonMonitor_cfi::pt, and metsig::tau.

2358  {
2359  p4 = LorentzVectorXYZ(0, 0, 0, 0);
2360  n = 0;
2361 
2362  for (const auto& cand : candidates) {
2363  p4 += cand->p4();
2364  ++n;
2365  }
2366 
2367  pt = n != 0 ? p4.Pt() : default_value;
2368  d_eta = n != 0 ? dEta(p4, tau.p4()) : default_value;
2369  d_phi = n != 0 ? dPhi(p4, tau.p4()) : default_value;
2370  m = n != 0 ? p4.mass() : default_value;
2371  }
static constexpr float default_value
Definition: DeepTauId.cc:829
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > LorentzVectorXYZ
Definition: DeepTauBase.h:75

◆ processSignalPFComponents()

template<typename CandidateCollection , typename TauCastType >
static void DeepTauId::processSignalPFComponents ( const TauCastType &  tau,
const CandidateCollection candidates,
LorentzVectorXYZ p4_inner,
LorentzVectorXYZ p4_outer,
float &  pt_inner,
float &  dEta_inner,
float &  dPhi_inner,
float &  m_inner,
float &  pt_outer,
float &  dEta_outer,
float &  dPhi_outer,
float &  m_outer,
float &  n_inner,
float &  n_outer 
)
inlinestaticprivate

Definition at line 2307 of file DeepTauId.cc.

References HLT_2022v15_cff::candidates, default_value, reco::deltaR(), HLT_2022v15_cff::dEta, HLT_2022v15_cff::dPhi, HGC3DClusterGenMatchSelector_cfi::dR, getInnerSignalConeRadius(), and metsig::tau.

2320  {
2321  p4_inner = LorentzVectorXYZ(0, 0, 0, 0);
2322  p4_outer = LorentzVectorXYZ(0, 0, 0, 0);
2323  n_inner = 0;
2324  n_outer = 0;
2325 
2326  const double innerSigCone_radius = getInnerSignalConeRadius(tau.pt());
2327  for (const auto& cand : candidates) {
2328  const double dR = reco::deltaR(cand->p4(), tau.leadChargedHadrCand()->p4());
2329  const bool isInside_innerSigCone = dR < innerSigCone_radius;
2330  if (isInside_innerSigCone) {
2331  p4_inner += cand->p4();
2332  ++n_inner;
2333  } else {
2334  p4_outer += cand->p4();
2335  ++n_outer;
2336  }
2337  }
2338 
2339  pt_inner = n_inner != 0 ? p4_inner.Pt() : default_value;
2340  dEta_inner = n_inner != 0 ? dEta(p4_inner, tau.p4()) : default_value;
2341  dPhi_inner = n_inner != 0 ? dPhi(p4_inner, tau.p4()) : default_value;
2342  m_inner = n_inner != 0 ? p4_inner.mass() : default_value;
2343 
2344  pt_outer = n_outer != 0 ? p4_outer.Pt() : default_value;
2345  dEta_outer = n_outer != 0 ? dEta(p4_outer, tau.p4()) : default_value;
2346  dPhi_outer = n_outer != 0 ? dPhi(p4_outer, tau.p4()) : default_value;
2347  m_outer = n_outer != 0 ? p4_outer.mass() : default_value;
2348  }
static constexpr float default_value
Definition: DeepTauId.cc:829
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > LorentzVectorXYZ
Definition: DeepTauBase.h:75
static double getInnerSignalConeRadius(double pt)
Definition: DeepTauId.cc:2373
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30

◆ saveInputs()

void DeepTauId::saveInputs ( const tensorflow::Tensor &  inputs,
const std::string &  block_name,
int  n_inputs,
const CellGrid *  grid = nullptr 
)
inlineprivate

Definition at line 1130 of file DeepTauId.cc.

References cms::cuda::assert(), gather_cfg::cout, debug_level, PVValHelper::eta, dqmMemoryStats::float, getRunAppsInfo::grid, input, PixelMapPlotter::inputs, is_first_block_, and phi.

Referenced by getPredictionsV2().

1133  {
1134  if (debug_level >= 1) {
1135  std::cout << "<saveInputs>: block_name = " << block_name << std::endl;
1136  }
1137  if (!is_first_block_)
1138  (*json_file_) << ", ";
1139  (*json_file_) << "\"" << block_name << "\": [";
1140  if (block_name == "input_tau") {
1141  for (int input_index = 0; input_index < n_inputs; ++input_index) {
1142  float input = inputs.matrix<float>()(0, input_index);
1143  if (input_index != 0)
1144  (*json_file_) << ", ";
1145  (*json_file_) << input;
1146  }
1147  } else {
1148  assert(grid);
1149  int n_eta, n_phi;
1150  if (block_name.find("input_inner") != std::string::npos) {
1151  n_eta = 5;
1152  n_phi = 5;
1153  } else if (block_name.find("input_outer") != std::string::npos) {
1154  n_eta = 10;
1155  n_phi = 10;
1156  } else
1157  assert(0);
1158  int eta_phi_index = 0;
1159  for (int eta = -n_eta; eta <= n_eta; ++eta) {
1160  if (eta != -n_eta)
1161  (*json_file_) << ", ";
1162  (*json_file_) << "[";
1163  for (int phi = -n_phi; phi <= n_phi; ++phi) {
1164  if (phi != -n_phi)
1165  (*json_file_) << ", ";
1166  (*json_file_) << "[";
1167  const CellIndex cell_index{eta, phi};
1168  const auto cell_iter = grid->find(cell_index);
1169  for (int input_index = 0; input_index < n_inputs; ++input_index) {
1170  float input = 0.;
1171  if (cell_iter != grid->end()) {
1172  input = inputs.tensor<float, 4>()(eta_phi_index, 0, 0, input_index);
1173  }
1174  if (input_index != 0)
1175  (*json_file_) << ", ";
1176  (*json_file_) << input;
1177  }
1178  if (cell_iter != grid->end()) {
1179  eta_phi_index += 1;
1180  }
1181  (*json_file_) << "]";
1182  }
1183  (*json_file_) << "]";
1184  }
1185  }
1186  (*json_file_) << "]";
1187  is_first_block_ = false;
1188  }
assert(be >=bs)
static std::string const input
Definition: EdmProvDump.cc:50
bool is_first_block_
Definition: DeepTauId.cc:2453
const int debug_level
Definition: DeepTauId.cc:2443

◆ setCellConvFeatures()

void DeepTauId::setCellConvFeatures ( tensorflow::Tensor &  convTensor,
const tensorflow::Tensor &  features,
unsigned  batch_idx,
int  eta_index,
int  phi_index 
)
inlineprivate

Definition at line 1563 of file DeepTauId.cc.

References lowptgsfeleseed::features(), dqmMemoryStats::float, and dqmiodumpmetadata::n.

Referenced by createConvFeatures(), and DeepTauId().

1567  {
1568  for (int n = 0; n < dnn_inputs_v2::number_of_conv_features; ++n) {
1569  convTensor.tensor<float, 4>()(0, eta_index, phi_index, n) = features.tensor<float, 4>()(batch_idx, 0, 0, n);
1570  }
1571  }
std::vector< float > features(const reco::PreId &ecal, const reco::PreId &hcal, double rho, const reco::BeamSpot &spot, noZS::EcalClusterLazyTools &ecalTools)

Member Data Documentation

◆ basicDiscrdR03IndexMap_

std::map<BasicDiscriminator, size_t> DeepTauId::basicDiscrdR03IndexMap_
private

Definition at line 2460 of file DeepTauId.cc.

Referenced by getPredictions().

◆ basicDiscrIndexMap_

std::map<BasicDiscriminator, size_t> DeepTauId::basicDiscrIndexMap_
private

Definition at line 2459 of file DeepTauId.cc.

Referenced by getPredictions().

◆ basicTauDiscriminators_inputToken_

edm::EDGetTokenT<reco::TauDiscriminatorContainer> DeepTauId::basicTauDiscriminators_inputToken_
private

Definition at line 2435 of file DeepTauId.cc.

Referenced by getPredictions().

◆ basicTauDiscriminatorsdR03_inputToken_

edm::EDGetTokenT<reco::TauDiscriminatorContainer> DeepTauId::basicTauDiscriminatorsdR03_inputToken_
private

Definition at line 2436 of file DeepTauId.cc.

Referenced by getPredictions().

◆ convTensor_

std::array<std::unique_ptr<tensorflow::Tensor>, 2> DeepTauId::convTensor_
private

Definition at line 2448 of file DeepTauId.cc.

Referenced by createConvFeatures(), DeepTauId(), and getPredictionsV2().

◆ debug_level

const int DeepTauId::debug_level
private

Definition at line 2443 of file DeepTauId.cc.

Referenced by checkInputs(), createConvFeatures(), getPredictionsV2(), and saveInputs().

◆ default_value

constexpr float DeepTauId::default_value = -999.
static

◆ disable_CellIndex_workaround_

const bool DeepTauId::disable_CellIndex_workaround_
private

Definition at line 2446 of file DeepTauId.cc.

Referenced by getPredictionsV2().

◆ disable_dxy_pca_

const bool DeepTauId::disable_dxy_pca_
private

Definition at line 2444 of file DeepTauId.cc.

Referenced by createTauBlockInputs().

◆ disable_hcalFraction_workaround_

const bool DeepTauId::disable_hcalFraction_workaround_
private

Definition at line 2445 of file DeepTauId.cc.

Referenced by createHadronsBlockInputs().

◆ discrIndicesMapped_

bool DeepTauId::discrIndicesMapped_ = false
private

Definition at line 2458 of file DeepTauId.cc.

Referenced by getPredictions().

◆ eGammaTensor_

std::array<std::unique_ptr<tensorflow::Tensor>, 2> DeepTauId::eGammaTensor_
private

◆ electrons_token_

edm::EDGetTokenT<std::vector<pat::Electron> > DeepTauId::electrons_token_
private

Definition at line 2432 of file DeepTauId.cc.

Referenced by getPredictions().

◆ file_counter_

int DeepTauId::file_counter_
private

Definition at line 2454 of file DeepTauId.cc.

Referenced by getPredictionsV2().

◆ hadronsTensor_

std::array<std::unique_ptr<tensorflow::Tensor>, 2> DeepTauId::hadronsTensor_
private

◆ input_layer_

std::string DeepTauId::input_layer_
private

Definition at line 2439 of file DeepTauId.cc.

◆ is_first_block_

bool DeepTauId::is_first_block_
private

Definition at line 2453 of file DeepTauId.cc.

Referenced by getPredictionsV2(), and saveInputs().

◆ json_file_

std::ofstream* DeepTauId::json_file_
private

Definition at line 2452 of file DeepTauId.cc.

Referenced by getPredictionsV2().

◆ muons_token_

edm::EDGetTokenT<std::vector<pat::Muon> > DeepTauId::muons_token_
private

Definition at line 2433 of file DeepTauId.cc.

Referenced by getPredictions().

◆ muonTensor_

std::array<std::unique_ptr<tensorflow::Tensor>, 2> DeepTauId::muonTensor_
private

◆ output_layer_

std::string DeepTauId::output_layer_
private

Definition at line 2439 of file DeepTauId.cc.

◆ pfTauTransverseImpactParameters_token_

edm::EDGetTokenT<edm::AssociationVector<reco::PFTauRefProd, std::vector<reco::PFTauTransverseImpactParameterRef> > > DeepTauId::pfTauTransverseImpactParameters_token_
private

Definition at line 2438 of file DeepTauId.cc.

Referenced by getPredictions().

◆ pi

constexpr float DeepTauId::pi = M_PI
staticprivate

Definition at line 1025 of file DeepTauId.cc.

Referenced by createTauBlockInputs().

◆ rho_token_

edm::EDGetTokenT<double> DeepTauId::rho_token_
private

Definition at line 2434 of file DeepTauId.cc.

Referenced by getPredictions().

◆ save_inputs_

const bool DeepTauId::save_inputs_
private

Definition at line 2451 of file DeepTauId.cc.

Referenced by getPredictionsV2().

◆ scalingParamsMap_

const std::map<std::pair<deep_tau::Scaling::FeatureT, bool>, deep_tau::Scaling::ScalingParams>* DeepTauId::scalingParamsMap_
private

◆ sub_version_

const unsigned DeepTauId::sub_version_
private

Definition at line 2442 of file DeepTauId.cc.

Referenced by createEgammaBlockInputs(), createTauBlockInputs(), and DeepTauId().

◆ tauBlockTensor_

std::unique_ptr<tensorflow::Tensor> DeepTauId::tauBlockTensor_
private

Definition at line 2447 of file DeepTauId.cc.

Referenced by createTauBlockInputs(), DeepTauId(), and getPredictionsV2().

◆ tauInputs_indices_

std::vector<int> DeepTauId::tauInputs_indices_
private

Definition at line 2455 of file DeepTauId.cc.

Referenced by createTauBlockInputs(), and DeepTauId().

◆ version_

const unsigned DeepTauId::version_
private

Definition at line 2441 of file DeepTauId.cc.

Referenced by DeepTauId(), and getPredictions().

◆ year_

const unsigned DeepTauId::year_
private

Definition at line 2440 of file DeepTauId.cc.

Referenced by createEgammaBlockInputs(), and DeepTauId().

◆ zeroOutputTensor_

std::array<std::unique_ptr<tensorflow::Tensor>, 2> DeepTauId::zeroOutputTensor_
private

Definition at line 2448 of file DeepTauId.cc.

Referenced by createConvFeatures(), and DeepTauId().