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, 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_
 
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 917 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_v2p1, deep_tau::Scaling::scalingParamsMap_v2p5, setCellConvFeatures(), findQualityFiles::size, jetsAK4_CHS_cff::sort, sub_version_, tauBlockTensor_, tauInputs_indices_, findQualityFiles::v, version_, and zeroOutputTensor_.

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

Member Function Documentation

◆ calculateElectronClusterVars()

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

Definition at line 2269 of file DeepTauId.cc.

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

2269  {
2270  if (ele) {
2271  elecEe = elecEgamma = 0;
2272  auto superCluster = ele->superCluster();
2273  if (superCluster.isNonnull() && superCluster.isAvailable() && superCluster->clusters().isNonnull() &&
2274  superCluster->clusters().isAvailable()) {
2275  for (auto iter = superCluster->clustersBegin(); iter != superCluster->clustersEnd(); ++iter) {
2276  const double energy = (*iter)->energy();
2277  if (iter == superCluster->clustersBegin())
2278  elecEe += energy;
2279  else
2280  elecEgamma += energy;
2281  }
2282  }
2283  } else {
2284  elecEe = elecEgamma = default_value;
2285  }
2286  }
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 1045 of file DeepTauId.cc.

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

Referenced by createEgammaBlockInputs().

1048  {
1049  cc_ele_energy = cc_gamma_energy = 0;
1050  cc_n_gamma = 0;
1051  const auto& superCluster = ele.superCluster();
1052  if (superCluster.isNonnull() && superCluster.isAvailable() && superCluster->clusters().isNonnull() &&
1053  superCluster->clusters().isAvailable()) {
1054  for (auto iter = superCluster->clustersBegin(); iter != superCluster->clustersEnd(); ++iter) {
1055  const float energy = static_cast<float>((*iter)->energy());
1056  if (iter == superCluster->clustersBegin())
1057  cc_ele_energy += energy;
1058  else {
1059  cc_gamma_energy += energy;
1060  ++cc_n_gamma;
1061  }
1062  }
1063  return true;
1064  } else
1065  return false;
1066  }
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 2363 of file DeepTauId.cc.

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

Referenced by calculateGottfriedJacksonAngleDifference(), and createTauBlockInputs().

2366  {
2367  if (tau_funcs.getHasSecondaryVertex(tau, tau_index)) {
2368  static constexpr double mTau = 1.77682;
2369  const double mAOne = tau.p4().M();
2370  const double pAOneMag = tau.p();
2371  const double argumentThetaGJmax = (std::pow(mTau, 2) - std::pow(mAOne, 2)) / (2 * mTau * pAOneMag);
2372  const double argumentThetaGJmeasured = tau.p4().Vect().Dot(tau_funcs.getFlightLength(tau, tau_index)) /
2373  (pAOneMag * tau_funcs.getFlightLength(tau, tau_index).R());
2374  if (std::abs(argumentThetaGJmax) <= 1. && std::abs(argumentThetaGJmeasured) <= 1.) {
2375  double thetaGJmax = std::asin(argumentThetaGJmax);
2376  double thetaGJmeasured = std::acos(argumentThetaGJmeasured);
2377  gj_diff = thetaGJmeasured - thetaGJmax;
2378  return true;
2379  }
2380  }
2381  return false;
2382  }
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 2385 of file DeepTauId.cc.

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

2387  {
2388  double gj_diff;
2389  if (calculateGottfriedJacksonAngleDifference(tau, tau_index, gj_diff, tau_funcs))
2390  return static_cast<float>(gj_diff);
2391  return default_value;
2392  }
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:2363

◆ 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 1068 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().

1071  {
1072  if (debug_level >= 1) {
1073  std::cout << "<checkInputs>: block_name = " << block_name << std::endl;
1074  if (block_name == "input_tau") {
1075  for (int input_index = 0; input_index < n_inputs; ++input_index) {
1076  float input = inputs.matrix<float>()(0, input_index);
1077  if (edm::isNotFinite(input)) {
1078  throw cms::Exception("DeepTauId")
1079  << "in the " << block_name
1080  << ", input is not finite, i.e. infinite or NaN, for input_index = " << input_index;
1081  }
1082  if (debug_level >= 2) {
1083  std::cout << block_name << "[var = " << input_index << "] = " << std::setprecision(5) << std::fixed << input
1084  << std::endl;
1085  }
1086  }
1087  } else {
1088  assert(grid);
1089  int n_eta, n_phi;
1090  if (block_name.find("input_inner") != std::string::npos) {
1091  n_eta = 5;
1092  n_phi = 5;
1093  } else if (block_name.find("input_outer") != std::string::npos) {
1094  n_eta = 10;
1095  n_phi = 10;
1096  } else
1097  assert(0);
1098  int eta_phi_index = 0;
1099  for (int eta = -n_eta; eta <= n_eta; ++eta) {
1100  for (int phi = -n_phi; phi <= n_phi; ++phi) {
1101  const CellIndex cell_index{eta, phi};
1102  const auto cell_iter = grid->find(cell_index);
1103  if (cell_iter != grid->end()) {
1104  for (int input_index = 0; input_index < n_inputs; ++input_index) {
1105  float input = inputs.tensor<float, 4>()(eta_phi_index, 0, 0, input_index);
1106  if (edm::isNotFinite(input)) {
1107  throw cms::Exception("DeepTauId")
1108  << "in the " << block_name << ", input is not finite, i.e. infinite or NaN, for eta = " << eta
1109  << ", phi = " << phi << ", input_index = " << input_index;
1110  }
1111  if (debug_level >= 2) {
1112  std::cout << block_name << "[eta = " << eta << "][phi = " << phi << "][var = " << input_index
1113  << "] = " << std::setprecision(5) << std::fixed << input << std::endl;
1114  }
1115  }
1116  eta_phi_index += 1;
1117  }
1118  }
1119  }
1120  }
1121  }
1122  }
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:2424

◆ 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 1470 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_.

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

◆ 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 1707 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, and runTauDisplay::tau_pt.

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

◆ 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 2131 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.

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

◆ 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 1980 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.

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

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

◆ 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>("version", 2);
885  desc.add<unsigned>("sub_version", 1);
886  desc.add<int>("debug_level", 0);
887  desc.add<bool>("disable_dxy_pca", false);
888  desc.add<bool>("disable_hcalFraction_workaround", false);
889  desc.add<bool>("disable_CellIndex_workaround", false);
890  desc.add<bool>("save_inputs", false);
891  desc.add<bool>("is_online", false);
892 
893  desc.add<std::vector<std::string>>("VSeWP", {"-1."});
894  desc.add<std::vector<std::string>>("VSmuWP", {"-1."});
895  desc.add<std::vector<std::string>>("VSjetWP", {"-1."});
896 
897  desc.addUntracked<edm::InputTag>("basicTauDiscriminators", edm::InputTag("basicTauDiscriminators"));
898  desc.addUntracked<edm::InputTag>("basicTauDiscriminatorsdR03", edm::InputTag("basicTauDiscriminatorsdR03"));
899  desc.add<edm::InputTag>("pfTauTransverseImpactParameters", edm::InputTag("hpsPFTauTransverseImpactParameters"));
900 
901  {
902  edm::ParameterSetDescription pset_Prediscriminants;
903  pset_Prediscriminants.add<std::string>("BooleanOperator", "and");
904  {
906  psd1.add<double>("cut");
907  psd1.add<edm::InputTag>("Producer");
908  pset_Prediscriminants.addOptional<edm::ParameterSetDescription>("decayMode", psd1);
909  }
910  desc.add<edm::ParameterSetDescription>("Prediscriminants", pset_Prediscriminants);
911  }
912 
913  descriptions.add("DeepTau", desc);
914  }
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 1409 of file DeepTauId.cc.

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

Referenced by getPredictionsV2().

1409  {
1410  static constexpr double outer_dR2 = 0.25; //0.5^2
1411  const double inner_radius = getInnerSignalConeRadius(tau.polarP4().pt());
1412  const double inner_dR2 = std::pow(inner_radius, 2);
1413 
1414  const auto addObject = [&](size_t n, double deta, double dphi, CellGrid& grid) {
1415  const auto& obj = objects.at(n);
1416  const CellObjectType obj_type = GetCellObjectType(obj);
1417  if (obj_type == CellObjectType::Other)
1418  return;
1419  CellIndex cell_index;
1420  if (grid.tryGetCellIndex(deta, dphi, cell_index)) {
1421  Cell& cell = grid[cell_index];
1422  auto iter = cell.find(obj_type);
1423  if (iter != cell.end()) {
1424  const auto& prev_obj = objects.at(iter->second);
1425  if (obj.polarP4().pt() > prev_obj.polarP4().pt())
1426  iter->second = n;
1427  } else {
1428  cell[obj_type] = n;
1429  }
1430  }
1431  };
1432 
1433  for (size_t n = 0; n < objects.size(); ++n) {
1434  const auto& obj = objects.at(n);
1435  const double deta = obj.polarP4().eta() - tau.polarP4().eta();
1436  const double dphi = reco::deltaPhi(obj.polarP4().phi(), tau.polarP4().phi());
1437  const double dR2 = std::pow(deta, 2) + std::pow(dphi, 2);
1438  if (dR2 < inner_dR2)
1439  addObject(n, deta, dphi, inner_grid);
1440  if (dR2 < outer_dR2)
1441  addObject(n, deta, dphi, outer_grid);
1442  }
1443  }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:26
static double getInnerSignalConeRadius(double pt)
Definition: DeepTauId.cc:2355
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 2400 of file DeepTauId.cc.

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

2402  {
2403  const double dR2 = deltaR * deltaR;
2404  const pat::Electron* matched_ele = nullptr;
2405  for (const auto& ele : *electrons) {
2406  if (reco::deltaR2(tau.p4(), ele.p4()) < dR2 && (!matched_ele || matched_ele->pt() < ele.pt())) {
2407  matched_ele = &ele;
2408  }
2409  }
2410  return matched_ele;
2411  }
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 2355 of file DeepTauId.cc.

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

Referenced by fillGrids(), and processSignalPFComponents().

2355  {
2356  static constexpr double min_pt = 30., min_radius = 0.05, cone_opening_coef = 3.;
2357  // This is equivalent of the original formula (std::max(std::min(0.1, 3.0/pt), 0.05)
2358  return std::max(cone_opening_coef / std::max(pt, min_pt), min_radius);
2359  }

◆ 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 1445 of file DeepTauId.cc.

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

Referenced by createConvFeatures(), and DeepTauId().

1445  {
1446  std::vector<tensorflow::Tensor> pred_vector;
1447  if (is_inner) {
1448  tensorflow::run(&(cache_->getSession("inner")),
1449  {
1450  {"input_inner_egamma", *eGammaTensor_.at(is_inner)},
1451  {"input_inner_muon", *muonTensor_.at(is_inner)},
1452  {"input_inner_hadrons", *hadronsTensor_.at(is_inner)},
1453  },
1454  {"inner_all_dropout_4/Identity"},
1455  &pred_vector);
1456  } else {
1457  tensorflow::run(&(cache_->getSession("outer")),
1458  {
1459  {"input_outer_egamma", *eGammaTensor_.at(is_inner)},
1460  {"input_outer_muon", *muonTensor_.at(is_inner)},
1461  {"input_outer_hadrons", *hadronsTensor_.at(is_inner)},
1462  },
1463  {"outer_all_dropout_4/Identity"},
1464  &pred_vector);
1465  }
1466  return pred_vector.at(0);
1467  }
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
Definition: DeepTauId.cc:2429
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:213
tensorflow::Session & getSession(const std::string &name="") const
Definition: DeepTauBase.h:57
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
Definition: DeepTauId.cc:2429
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
Definition: DeepTauId.cc:2429

◆ getPredictions()

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

Implements deep_tau::DeepTauBase.

Definition at line 1185 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_.

1185  {
1186  // Empty dummy vectors
1187  const std::vector<pat::Electron> electron_collection_default;
1188  const std::vector<pat::Muon> muon_collection_default;
1189  const reco::TauDiscriminatorContainer basicTauDiscriminators_default;
1190  const reco::TauDiscriminatorContainer basicTauDiscriminatorsdR03_default;
1192  pfTauTransverseImpactParameters_default;
1193 
1194  const std::vector<pat::Electron>* electron_collection;
1195  const std::vector<pat::Muon>* muon_collection;
1200 
1201  if (!is_online_) {
1202  electron_collection = &event.get(electrons_token_);
1203  muon_collection = &event.get(muons_token_);
1204  pfTauTransverseImpactParameters = &pfTauTransverseImpactParameters_default;
1205  basicTauDiscriminators = &basicTauDiscriminators_default;
1206  basicTauDiscriminatorsdR03 = &basicTauDiscriminatorsdR03_default;
1207  } else {
1208  electron_collection = &electron_collection_default;
1209  muon_collection = &muon_collection_default;
1213 
1214  // Get indices for discriminators
1215  if (!discrIndicesMapped_) {
1220  discrIndicesMapped_ = true;
1221  }
1222  }
1223 
1224  TauFunc tauIDs = {basicTauDiscriminators,
1229 
1231  event.getByToken(pfcandToken_, pfCands);
1232 
1234  event.getByToken(vtxToken_, vertices);
1235 
1237  event.getByToken(rho_token_, rho);
1238 
1239  tensorflow::Tensor predictions(tensorflow::DT_FLOAT, {static_cast<int>(taus->size()), deep_tau::NumberOfOutputs});
1240 
1241  for (size_t tau_index = 0; tau_index < taus->size(); ++tau_index) {
1242  const edm::RefToBase<reco::BaseTau> tauRef = taus->refAt(tau_index);
1243 
1244  std::vector<tensorflow::Tensor> pred_vector;
1245 
1246  bool passesPrediscriminants;
1247  if (is_online_) {
1248  passesPrediscriminants = tauIDs.passPrediscriminants<std::vector<TauDiscInfo<reco::PFTauDiscriminator>>>(
1250  } else {
1251  passesPrediscriminants = tauIDs.passPrediscriminants<std::vector<TauDiscInfo<pat::PATTauDiscriminator>>>(
1253  }
1254 
1255  if (passesPrediscriminants) {
1256  if (version_ == 2) {
1257  if (is_online_) {
1258  getPredictionsV2<reco::PFCandidate, reco::PFTau>(taus->at(tau_index),
1259  tau_index,
1260  tauRef,
1261  electron_collection,
1262  muon_collection,
1263  *pfCands,
1264  vertices->at(0),
1265  *rho,
1266  pred_vector,
1267  tauIDs);
1268  } else
1269  getPredictionsV2<pat::PackedCandidate, pat::Tau>(taus->at(tau_index),
1270  tau_index,
1271  tauRef,
1272  electron_collection,
1273  muon_collection,
1274  *pfCands,
1275  vertices->at(0),
1276  *rho,
1277  pred_vector,
1278  tauIDs);
1279  } else {
1280  throw cms::Exception("DeepTauId") << "version " << version_ << " is not supported.";
1281  }
1282 
1283  for (int k = 0; k < deep_tau::NumberOfOutputs; ++k) {
1284  const float pred = pred_vector[0].flat<float>()(k);
1285  if (!(pred >= 0 && pred <= 1))
1286  throw cms::Exception("DeepTauId")
1287  << "invalid prediction = " << pred << " for tau_index = " << tau_index << ", pred_index = " << k;
1288  predictions.matrix<float>()(tau_index, k) = pred;
1289  }
1290  } else {
1291  // This else statement was added as a part of the DeepTau@HLT development. It does not affect the current state
1292  // of offline DeepTauId code as there the preselection is not used (it was added in the DeepTau@HLT). It returns
1293  // default values for deepTau score if the preselection failed. Before this statement the values given for this tau
1294  // were random. k == 2 corresponds to the tau score and all other k values to e, mu and jets. By defining in this way
1295  // the final score is -1.
1296  for (int k = 0; k < deep_tau::NumberOfOutputs; ++k) {
1297  predictions.matrix<float>()(tau_index, k) = (k == 2) ? -1.f : 2.f;
1298  }
1299  }
1300  }
1301  return predictions;
1302  }
std::map< BasicDiscriminator, size_t > basicDiscrdR03IndexMap_
Definition: DeepTauId.cc:2441
std::map< BasicDiscriminator, size_t > basicDiscrIndexMap_
Definition: DeepTauId.cc:2440
const unsigned version_
Definition: DeepTauId.cc:2422
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:2420
bool discrIndicesMapped_
Definition: DeepTauId.cc:2439
uint8_t andPrediscriminants_
Definition: DeepTauBase.h:111
edm::EDGetTokenT< reco::TauDiscriminatorContainer > basicTauDiscriminators_inputToken_
Definition: DeepTauId.cc:2417
edm::EDGetTokenT< reco::TauDiscriminatorContainer > basicTauDiscriminatorsdR03_inputToken_
Definition: DeepTauId.cc:2418
std::vector< TauDiscInfo< pat::PATTauDiscriminator > > patPrediscriminants_
Definition: DeepTauBase.h:112
edm::EDGetTokenT< std::vector< pat::Electron > > electrons_token_
Definition: DeepTauId.cc:2414
edm::EDGetTokenT< std::vector< pat::Muon > > muons_token_
Definition: DeepTauId.cc:2415
edm::EDGetTokenT< double > rho_token_
Definition: DeepTauId.cc:2416
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,
std::vector< tensorflow::Tensor > &  pred_vector,
TauFunc  tau_funcs 
)
inlineprivate

Definition at line 1305 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().

1314  {
1315  using namespace dnn_inputs_v2;
1316  if (debug_level >= 2) {
1317  std::cout << "<DeepTauId::getPredictionsV2 (moduleLabel = " << moduleDescription().moduleLabel()
1318  << ")>:" << std::endl;
1319  std::cout << " tau: pT = " << tau.pt() << ", eta = " << tau.eta() << ", phi = " << tau.phi() << std::endl;
1320  }
1321  CellGrid inner_grid(number_of_inner_cell, number_of_inner_cell, 0.02, 0.02, disable_CellIndex_workaround_);
1322  CellGrid outer_grid(number_of_outer_cell, number_of_outer_cell, 0.05, 0.05, disable_CellIndex_workaround_);
1323  fillGrids(dynamic_cast<const TauCastType&>(tau), *electrons, inner_grid, outer_grid);
1324  fillGrids(dynamic_cast<const TauCastType&>(tau), *muons, inner_grid, outer_grid);
1325  fillGrids(dynamic_cast<const TauCastType&>(tau), pfCands, inner_grid, outer_grid);
1326 
1327  createTauBlockInputs<CandidateCastType>(
1328  dynamic_cast<const TauCastType&>(tau), tau_index, tau_ref, pv, rho, tau_funcs);
1329  checkInputs(*tauBlockTensor_, "input_tau", static_cast<int>(tauBlockTensor_->shape().dim_size(1)));
1330  createConvFeatures<CandidateCastType>(dynamic_cast<const TauCastType&>(tau),
1331  tau_index,
1332  tau_ref,
1333  pv,
1334  rho,
1335  electrons,
1336  muons,
1337  pfCands,
1338  inner_grid,
1339  tau_funcs,
1340  true);
1341  checkInputs(*eGammaTensor_[true], "input_inner_egamma", EgammaBlockInputs::NumberOfInputs, &inner_grid);
1342  checkInputs(*muonTensor_[true], "input_inner_muon", MuonBlockInputs::NumberOfInputs, &inner_grid);
1343  checkInputs(*hadronsTensor_[true], "input_inner_hadrons", HadronBlockInputs::NumberOfInputs, &inner_grid);
1344  createConvFeatures<CandidateCastType>(dynamic_cast<const TauCastType&>(tau),
1345  tau_index,
1346  tau_ref,
1347  pv,
1348  rho,
1349  electrons,
1350  muons,
1351  pfCands,
1352  outer_grid,
1353  tau_funcs,
1354  false);
1355  checkInputs(*eGammaTensor_[false], "input_outer_egamma", EgammaBlockInputs::NumberOfInputs, &outer_grid);
1356  checkInputs(*muonTensor_[false], "input_outer_muon", MuonBlockInputs::NumberOfInputs, &outer_grid);
1357  checkInputs(*hadronsTensor_[false], "input_outer_hadrons", HadronBlockInputs::NumberOfInputs, &outer_grid);
1358 
1359  if (save_inputs_) {
1360  std::string json_file_name = "DeepTauId_" + std::to_string(file_counter_) + ".json";
1361  json_file_ = new std::ofstream(json_file_name.data());
1362  is_first_block_ = true;
1363  (*json_file_) << "{";
1364  saveInputs(*tauBlockTensor_, "input_tau", static_cast<int>(tauBlockTensor_->shape().dim_size(1)));
1365  saveInputs(
1366  *eGammaTensor_[true], "input_inner_egamma", dnn_inputs_v2::EgammaBlockInputs::NumberOfInputs, &inner_grid);
1367  saveInputs(*muonTensor_[true], "input_inner_muon", dnn_inputs_v2::MuonBlockInputs::NumberOfInputs, &inner_grid);
1368  saveInputs(
1369  *hadronsTensor_[true], "input_inner_hadrons", dnn_inputs_v2::HadronBlockInputs::NumberOfInputs, &inner_grid);
1370  saveInputs(
1371  *eGammaTensor_[false], "input_outer_egamma", dnn_inputs_v2::EgammaBlockInputs::NumberOfInputs, &outer_grid);
1372  saveInputs(*muonTensor_[false], "input_outer_muon", dnn_inputs_v2::MuonBlockInputs::NumberOfInputs, &outer_grid);
1373  saveInputs(
1374  *hadronsTensor_[false], "input_outer_hadrons", dnn_inputs_v2::HadronBlockInputs::NumberOfInputs, &outer_grid);
1375  (*json_file_) << "}";
1376  delete json_file_;
1377  ++file_counter_;
1378  }
1379 
1380  tensorflow::run(&(cache_->getSession("core")),
1381  {{"input_tau", *tauBlockTensor_},
1382  {"input_inner", *convTensor_.at(true)},
1383  {"input_outer", *convTensor_.at(false)}},
1384  {"main_output/Softmax"},
1385  &pred_vector);
1386  if (debug_level >= 1) {
1387  std::cout << "output = { ";
1388  for (int idx = 0; idx < deep_tau::NumberOfOutputs; ++idx) {
1389  if (idx > 0)
1390  std::cout << ", ";
1392  if (idx == 0)
1393  label = "e";
1394  else if (idx == 1)
1395  label = "mu";
1396  else if (idx == 2)
1397  label = "tau";
1398  else if (idx == 3)
1399  label = "jet";
1400  else
1401  assert(0);
1402  std::cout << label << " = " << pred_vector[0].flat<float>()(idx);
1403  }
1404  std::cout << " }" << std::endl;
1405  }
1406  }
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > hadronsTensor_
Definition: DeepTauId.cc:2429
void fillGrids(const TauCastType &tau, const Collection &objects, CellGrid &inner_grid, CellGrid &outer_grid)
Definition: DeepTauId.cc:1409
const bool save_inputs_
Definition: DeepTauId.cc:2432
int file_counter_
Definition: DeepTauId.cc:2435
const DeepTauCache * cache_
Definition: DeepTauBase.h:135
std::ofstream * json_file_
Definition: DeepTauId.cc:2433
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:2429
char const * label
bool is_first_block_
Definition: DeepTauId.cc:2434
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Definition: TensorFlow.cc:213
void saveInputs(const tensorflow::Tensor &inputs, const std::string &block_name, int n_inputs, const CellGrid *grid=nullptr)
Definition: DeepTauId.cc:1124
const bool disable_CellIndex_workaround_
Definition: DeepTauId.cc:2427
void checkInputs(const tensorflow::Tensor &inputs, const std::string &block_name, int n_inputs, const CellGrid *grid=nullptr) const
Definition: DeepTauId.cc:1068
tensorflow::Session & getSession(const std::string &name="") const
Definition: DeepTauBase.h:57
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > eGammaTensor_
Definition: DeepTauId.cc:2429
const int debug_level
Definition: DeepTauId.cc:2424
std::array< std::unique_ptr< tensorflow::Tensor >, 2 > muonTensor_
Definition: DeepTauId.cc:2429
constexpr int NumberOfOutputs
Definition: DeepTauId.cc:20
std::unique_ptr< tensorflow::Tensor > tauBlockTensor_
Definition: DeepTauId.cc:2428

◆ getValue()

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

Definition at line 1022 of file DeepTauId.cc.

References f, and relativeConstraints::value.

Referenced by getValueLinear(), and getValueNorm().

1022  {
1023  return std::isnormal(value) ? static_cast<float>(value) : 0.f;
1024  }
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 1027 of file DeepTauId.cc.

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

Referenced by createTauBlockInputs().

1027  {
1028  const float fixed_value = getValue(value);
1029  const float clamped_value = std::clamp(fixed_value, min_value, max_value);
1030  float transformed_value = (clamped_value - min_value) / (max_value - min_value);
1031  if (!positive)
1032  transformed_value = transformed_value * 2 - 1;
1033  return transformed_value;
1034  }
const std::map< ValueQuantityType, double > min_value
static float getValue(T value)
Definition: DeepTauId.cc:1022
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 1037 of file DeepTauId.cc.

References getValue(), and SiStripPI::mean.

1037  {
1038  const float fixed_value = getValue(value);
1039  const float norm_value = (fixed_value - mean) / sigma;
1040  return std::clamp(norm_value, -n_sigmas_max, n_sigmas_max);
1041  }
static float getValue(T value)
Definition: DeepTauId.cc:1022
Definition: value.py:1

◆ globalEndJob()

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

Definition at line 1016 of file DeepTauId.cc.

References deep_tau::DeepTauBase::cache_.

1016 { 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 1012 of file DeepTauId.cc.

References looper::cfg.

1012  {
1013  return DeepTauBase::initializeGlobalCache(cfg);
1014  }

◆ isAbove()

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

Definition at line 1043 of file DeepTauId.cc.

References SiStripPI::min.

Referenced by createTauBlockInputs().

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

◆ isInEcalCrack()

static bool DeepTauId::isInEcalCrack ( double  eta)
inlinestaticprivate

Definition at line 2394 of file DeepTauId.cc.

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

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

2394  {
2395  const double abs_eta = std::abs(eta);
2396  return abs_eta > 1.46 && abs_eta < 1.558;
2397  }
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 2333 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.

2340  {
2341  p4 = LorentzVectorXYZ(0, 0, 0, 0);
2342  n = 0;
2343 
2344  for (const auto& cand : candidates) {
2345  p4 += cand->p4();
2346  ++n;
2347  }
2348 
2349  pt = n != 0 ? p4.Pt() : default_value;
2350  d_eta = n != 0 ? dEta(p4, tau.p4()) : default_value;
2351  d_phi = n != 0 ? dPhi(p4, tau.p4()) : default_value;
2352  m = n != 0 ? p4.mass() : default_value;
2353  }
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 2289 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.

2302  {
2303  p4_inner = LorentzVectorXYZ(0, 0, 0, 0);
2304  p4_outer = LorentzVectorXYZ(0, 0, 0, 0);
2305  n_inner = 0;
2306  n_outer = 0;
2307 
2308  const double innerSigCone_radius = getInnerSignalConeRadius(tau.pt());
2309  for (const auto& cand : candidates) {
2310  const double dR = reco::deltaR(cand->p4(), tau.leadChargedHadrCand()->p4());
2311  const bool isInside_innerSigCone = dR < innerSigCone_radius;
2312  if (isInside_innerSigCone) {
2313  p4_inner += cand->p4();
2314  ++n_inner;
2315  } else {
2316  p4_outer += cand->p4();
2317  ++n_outer;
2318  }
2319  }
2320 
2321  pt_inner = n_inner != 0 ? p4_inner.Pt() : default_value;
2322  dEta_inner = n_inner != 0 ? dEta(p4_inner, tau.p4()) : default_value;
2323  dPhi_inner = n_inner != 0 ? dPhi(p4_inner, tau.p4()) : default_value;
2324  m_inner = n_inner != 0 ? p4_inner.mass() : default_value;
2325 
2326  pt_outer = n_outer != 0 ? p4_outer.Pt() : default_value;
2327  dEta_outer = n_outer != 0 ? dEta(p4_outer, tau.p4()) : default_value;
2328  dPhi_outer = n_outer != 0 ? dPhi(p4_outer, tau.p4()) : default_value;
2329  m_outer = n_outer != 0 ? p4_outer.mass() : default_value;
2330  }
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:2355
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 1124 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().

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

◆ setCellConvFeatures()

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

Definition at line 1551 of file DeepTauId.cc.

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

Referenced by createConvFeatures(), and DeepTauId().

1555  {
1556  for (int n = 0; n < dnn_inputs_v2::number_of_conv_features; ++n) {
1557  convTensor.tensor<float, 4>()(0, eta_index, phi_index, n) = features.tensor<float, 4>()(batch_idx, 0, 0, n);
1558  }
1559  }
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 2441 of file DeepTauId.cc.

Referenced by getPredictions().

◆ basicDiscrIndexMap_

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

Definition at line 2440 of file DeepTauId.cc.

Referenced by getPredictions().

◆ basicTauDiscriminators_inputToken_

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

Definition at line 2417 of file DeepTauId.cc.

Referenced by getPredictions().

◆ basicTauDiscriminatorsdR03_inputToken_

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

Definition at line 2418 of file DeepTauId.cc.

Referenced by getPredictions().

◆ convTensor_

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

Definition at line 2429 of file DeepTauId.cc.

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

◆ debug_level

const int DeepTauId::debug_level
private

Definition at line 2424 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 2427 of file DeepTauId.cc.

Referenced by getPredictionsV2().

◆ disable_dxy_pca_

const bool DeepTauId::disable_dxy_pca_
private

Definition at line 2425 of file DeepTauId.cc.

Referenced by createTauBlockInputs().

◆ disable_hcalFraction_workaround_

const bool DeepTauId::disable_hcalFraction_workaround_
private

Definition at line 2426 of file DeepTauId.cc.

Referenced by createHadronsBlockInputs().

◆ discrIndicesMapped_

bool DeepTauId::discrIndicesMapped_ = false
private

Definition at line 2439 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 2414 of file DeepTauId.cc.

Referenced by getPredictions().

◆ file_counter_

int DeepTauId::file_counter_
private

Definition at line 2435 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 2421 of file DeepTauId.cc.

◆ is_first_block_

bool DeepTauId::is_first_block_
private

Definition at line 2434 of file DeepTauId.cc.

Referenced by getPredictionsV2(), and saveInputs().

◆ json_file_

std::ofstream* DeepTauId::json_file_
private

Definition at line 2433 of file DeepTauId.cc.

Referenced by getPredictionsV2().

◆ muons_token_

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

Definition at line 2415 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 2421 of file DeepTauId.cc.

◆ pfTauTransverseImpactParameters_token_

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

Definition at line 2420 of file DeepTauId.cc.

Referenced by getPredictions().

◆ pi

constexpr float DeepTauId::pi = M_PI
staticprivate

Definition at line 1019 of file DeepTauId.cc.

Referenced by createTauBlockInputs().

◆ rho_token_

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

Definition at line 2416 of file DeepTauId.cc.

Referenced by getPredictions().

◆ save_inputs_

const bool DeepTauId::save_inputs_
private

Definition at line 2432 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 2423 of file DeepTauId.cc.

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

◆ tauBlockTensor_

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

Definition at line 2428 of file DeepTauId.cc.

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

◆ tauInputs_indices_

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

Definition at line 2436 of file DeepTauId.cc.

Referenced by createTauBlockInputs(), and DeepTauId().

◆ version_

const unsigned DeepTauId::version_
private

Definition at line 2422 of file DeepTauId.cc.

Referenced by DeepTauId(), and getPredictions().

◆ zeroOutputTensor_

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

Definition at line 2429 of file DeepTauId.cc.

Referenced by createConvFeatures(), and DeepTauId().