CMS 3D CMS Logo

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

Public Member Functions

 DPFIsolation (const edm::ParameterSet &cfg, const deep_tau::DeepTauCache *cache)
 
- 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
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Static Public Member Functions

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

Private Member Functions

tensorflow::Tensor getPredictions (edm::Event &event, const edm::EventSetup &es, edm::Handle< TauCollection > taus) override
 

Private Attributes

unsigned graphVersion
 
edm::EDGetTokenT< pat::PackedCandidateCollectionpfcand_token
 
edm::EDGetTokenT< reco::VertexCollectionvtx_token
 

Additional Inherited Members

- Public Types inherited from deep_tau::DeepTauBase
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 = std::vector< TauType >
 
using TauDiscriminator = pat::PATTauDiscriminator
 
using TauRef = edm::Ref< TauCollection >
 
using TauRefProd = edm::RefProd< TauCollection >
 
using TauType = pat::Tau
 
using WPMap = std::map< std::string, CutterPtr >
 
- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< DeepTauCache > >
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Protected Attributes inherited from deep_tau::DeepTauBase
const DeepTauCachecache_
 
OutputCollection outputs_
 
edm::EDGetTokenT< TauCollectiontausToken_
 
std::map< std::string, WPMapworkingPoints_
 

Detailed Description

Definition at line 23 of file DPFIsolation.cc.

Constructor & Destructor Documentation

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

Definition at line 68 of file DPFIsolation.cc.

References deep_tau::DeepTauBase::cache_, Exception, deep_tau::DeepTauCache::getGraph(), GetNumberOfFeatures(), getNumberOfParticles(), and graphVersion.

68  :
69  DeepTauBase(cfg, GetOutputs(), cache),
70  pfcand_token(consumes<pat::PackedCandidateCollection>(cfg.getParameter<edm::InputTag>("pfcands"))),
71  vtx_token(consumes<reco::VertexCollection>(cfg.getParameter<edm::InputTag>("vertices"))),
72  graphVersion(cfg.getParameter<unsigned>("version"))
73  {
74  const auto& shape = cache_->getGraph().node(0).attr().at("shape").shape();
75 
76  if(!(graphVersion == 1 || graphVersion == 0 ))
77  throw cms::Exception("DPFIsolation") << "unknown version of the graph_ file.";
78 
79  if(!(shape.dim(1).size() == getNumberOfParticles(graphVersion) && shape.dim(2).size() == GetNumberOfFeatures(graphVersion)))
80  throw cms::Exception("DPFIsolation") << "number of inputs does not match the expected inputs for the given version";
81 
82  }
T getParameter(std::string const &) const
edm::EDGetTokenT< pat::PackedCandidateCollection > pfcand_token
static unsigned getNumberOfParticles(unsigned graphVersion)
Definition: DPFIsolation.cc:32
const tensorflow::GraphDef & getGraph() const
Definition: DeepTauBase.h:50
const DeepTauCache * cache_
Definition: DeepTauBase.h:101
static unsigned GetNumberOfFeatures(unsigned graphVersion)
Definition: DPFIsolation.cc:38
DeepTauBase(const edm::ParameterSet &cfg, const OutputCollection &outputs, const DeepTauCache *cache)
Definition: DeepTauBase.cc:79
edm::EDGetTokenT< reco::VertexCollection > vtx_token
unsigned graphVersion
static const OutputCollection & GetOutputs()
Definition: DPFIsolation.cc:25

Member Function Documentation

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

Definition at line 44 of file DPFIsolation.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), and AlCaHLTBitMon_QueryRunRegistry::string.

45  {
47  desc.add<edm::InputTag>("pfcands", edm::InputTag("packedPFCandidates"));
48  desc.add<edm::InputTag>("taus", edm::InputTag("slimmedTaus"));
49  desc.add<edm::InputTag>("vertices", edm::InputTag("offlineSlimmedPrimaryVertices"));
50  desc.add<std::string>("graph_file", "RecoTauTag/TrainingFiles/data/DPFTauId/DPFIsolation_2017v0_quantized.pb");
51  desc.add<unsigned>("version", 0);
52  desc.add<bool>("mem_mapped", false);
53 
55  descWP.add<std::string>("VVVLoose", "0");
56  descWP.add<std::string>("VVLoose", "0");
57  descWP.add<std::string>("VLoose", "0");
58  descWP.add<std::string>("Loose", "0");
59  descWP.add<std::string>("Medium", "0");
60  descWP.add<std::string>("Tight", "0");
61  descWP.add<std::string>("VTight", "0");
62  descWP.add<std::string>("VVTight", "0");
63  descWP.add<std::string>("VVVTight", "0");
64  desc.add<edm::ParameterSetDescription>("VSallWP", descWP);
65  descriptions.add("DPFTau2016v0", desc);
66  }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static unsigned DPFIsolation::GetNumberOfFeatures ( unsigned  graphVersion)
inlinestatic

Definition at line 38 of file DPFIsolation.cc.

Referenced by DPFIsolation(), and getPredictions().

39  {
40  static const std::map<unsigned, unsigned> nfeatures { { 0, 47 }, { 1, 51 } };
41  return nfeatures.at(graphVersion);
42  }
unsigned graphVersion
static unsigned DPFIsolation::getNumberOfParticles ( unsigned  graphVersion)
inlinestatic

Definition at line 32 of file DPFIsolation.cc.

Referenced by DPFIsolation(), and getPredictions().

33  {
34  static const std::map<unsigned, unsigned> nparticles { { 0, 60 }, { 1, 36 } };
35  return nparticles.at(graphVersion);
36  }
unsigned graphVersion
static const OutputCollection& DPFIsolation::GetOutputs ( )
inlinestatic

Definition at line 25 of file DPFIsolation.cc.

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

26  {
27  const size_t tau_index = 0;
28  static const OutputCollection outputs_ = { { "VSall", Output({tau_index}, {}) } };
29  return outputs_;
30  };
std::map< std::string, Output > OutputCollection
Definition: DeepTauBase.h:82
OutputCollection outputs_
Definition: DeepTauBase.h:100
#define Output(cl)
Definition: vmac.h:194
tensorflow::Tensor DPFIsolation::getPredictions ( edm::Event event,
const edm::EventSetup es,
edm::Handle< TauCollection taus 
)
inlineoverrideprivatevirtual

Implements deep_tau::DeepTauBase.

Definition at line 85 of file DPFIsolation.cc.

References funct::abs(), begin, EnergyCorrector::c, deep_tau::DeepTauBase::cache_, pat::PackedCandidate::charge(), constexpr, hiPixelPairStep_cff::deltaPhi, deltaR(), pat::PackedCandidate::dxy(), pat::PackedCandidate::dxyError(), pat::PackedCandidate::dz(), pat::PackedCandidate::dzError(), end, reco::LeafCandidate::eta(), pat::PackedCandidate::eta(), objects.autophobj::float, pat::PackedCandidate::fromPV(), models::generate(), GetNumberOfFeatures(), getNumberOfParticles(), deep_tau::DeepTauCache::getSession(), graphVersion, pat::PackedCandidate::hasTrackDetails(), mps_fire::i, pat::Tau::isTauIDAvailable(), pat::PackedCandidate::lostInnerHits(), min(), gen::n, pat::PackedCandidate::numberOfHits(), pat::PackedCandidate::numberOfPixelHits(), deep_tau::DeepTauBase::outputs_, AlCaHLTBitMon_ParallelJobs::p, reco::LeafCandidate::p4(), pat::PackedCandidate::p4(), pat::PackedCandidate::pdgId(), pfcand_token, reco::LeafCandidate::phi(), pat::PackedCandidate::phi(), reco::LeafCandidate::pt(), pat::PackedCandidate::pt(), pat::PackedCandidate::puppiWeight(), pat::PackedCandidate::pvAssociationQuality(), reco::LeafCandidate::pz(), tensorflow::run(), pat::Tau::signalCands(), mathSSE::sqrt(), metsig::tau, pat::Tau::tauID(), pat::PackedCandidate::trackHighPurity(), electrons_cff::vertices, vtx_token, pat::PackedCandidate::vx(), pat::PackedCandidate::vy(), and pat::PackedCandidate::vz().

87  {
89  event.getByToken(pfcand_token, pfcands);
90 
92  event.getByToken(vtx_token, vertices);
93 
94  tensorflow::Tensor tensor(tensorflow::DT_FLOAT, {1,
95  static_cast<int>(getNumberOfParticles(graphVersion)), static_cast<int>(GetNumberOfFeatures(graphVersion))});
96 
97  tensorflow::Tensor predictions(tensorflow::DT_FLOAT, { static_cast<int>(taus->size()), 1});
98 
99  std::vector<tensorflow::Tensor> outputs_;
100 
101  float pfCandPt, pfCandPz, pfCandPtRel, pfCandPzRel, pfCandDr, pfCandDEta, pfCandDPhi, pfCandEta, pfCandDz,
102  pfCandDzErr, pfCandD0, pfCandD0D0, pfCandD0Dz, pfCandD0Dphi, pfCandPuppiWeight,
103  pfCandPixHits, pfCandHits, pfCandLostInnerHits, pfCandPdgID, pfCandCharge, pfCandFromPV,
104  pfCandVtxQuality, pfCandHighPurityTrk, pfCandTauIndMatch, pfCandDzSig, pfCandD0Sig, pfCandD0Err,
105  pfCandPtRelPtRel, pfCandDzDz, pfCandDVx_1, pfCandDVy_1, pfCandDVz_1, pfCandD_1;
106  float pvx = !vertices->empty() ? (*vertices)[0].x() : -1;
107  float pvy = !vertices->empty() ? (*vertices)[0].y() : -1;
108  float pvz = !vertices->empty() ? (*vertices)[0].z() : -1;
109 
110  bool pfCandIsBarrel;
111 
112  // These variables define ranges further used for standardization
113  static constexpr float pfCandPt_max = 500.f;
114  static constexpr float pfCandPz_max = 1000.f;
115  static constexpr float pfCandPtRel_max = 1.f;
116  static constexpr float pfCandPzRel_max = 100.f;
117  static constexpr float pfCandPtRelPtRel_max = 1.f;
118  static constexpr float pfCandD0_max = 5.f;
119  static constexpr float pfCandDz_max = 5.f;
120  static constexpr float pfCandDVx_y_z_1_max = 0.05f;
121  static constexpr float pfCandD_1_max = 0.1f;
122  static constexpr float pfCandD0_z_Err_max = 1.f;
123  static constexpr float pfCandDzSig_max = 3.f;
124  static constexpr float pfCandD0Sig_max = 1.f;
125  static constexpr float pfCandDr_max = 0.5f;
126  static constexpr float pfCandEta_max = 2.75f;
127  static constexpr float pfCandDEta_max = 0.5f;
128  static constexpr float pfCandDPhi_max = 0.5f;
129  static constexpr float pfCandPixHits_max = 7.f;
130  static constexpr float pfCandHits_max = 30.f;
131 
132  for(size_t tau_index = 0; tau_index < taus->size(); tau_index++) {
133  pat::Tau tau = taus->at(tau_index);
134  bool isGoodTau = false;
135  const float lepRecoPt = tau.pt();
136  const float lepRecoPz = std::abs(tau.pz());
137  const float lepRecoEta = tau.eta();
138  const float lepRecoPhi = tau.phi();
139 
140  if(lepRecoPt >= 30 && std::abs(lepRecoEta) < 2.3 && tau.isTauIDAvailable("againstMuonLoose3") &&
141  tau.isTauIDAvailable("againstElectronVLooseMVA6")) {
142  isGoodTau = (tau.tauID("againstElectronVLooseMVA6") && tau.tauID("againstMuonLoose3") );
143  }
144 
145  if (!isGoodTau) {
146  predictions.matrix<float>()(tau_index, 0) = -1;
147  continue;
148  }
149 
150  std::vector<unsigned int> signalCandidateInds;
151 
152  for(const auto c : tau.signalCands())
153  signalCandidateInds.push_back(getPFCandidateIndex(pfcands,c));
154 
155  // Use of setZero results in warnings in eigen library during compilation.
156  //tensor.flat<float>().setZero();
158  for(unsigned input_idx = 0; input_idx < n_inputs; ++input_idx)
159  tensor.flat<float>()(input_idx) = 0;
160 
161  unsigned int iPF = 0;
162  const unsigned max_iPF = getNumberOfParticles(graphVersion);
163 
164  std::vector<unsigned int> sorted_inds(pfcands->size());
165  std::size_t n = 0;
166  std::generate(std::begin(sorted_inds), std::end(sorted_inds), [&]{ return n++; });
167 
168  std::sort(std::begin(sorted_inds), std::end(sorted_inds),
169  [&](int i1, int i2) { return pfcands->at(i1).pt() > pfcands->at(i2).pt(); } );
170 
171  for(size_t pf_index = 0; pf_index < pfcands->size() && iPF < max_iPF; pf_index++) {
172  pat::PackedCandidate p = pfcands->at(sorted_inds.at(pf_index));
173  float deltaR_tau_p = deltaR(p.p4(),tau.p4());
174 
175  if (p.pt() < 0.5) continue;
176  if (p.fromPV() < 0) continue;
177  if (deltaR_tau_p > 0.5) continue;
178  if (p.fromPV() < 1 && p.charge() != 0) continue;
179  pfCandPt = p.pt();
180  pfCandPtRel = p.pt()/lepRecoPt;
181 
182  pfCandDr = deltaR_tau_p;
183  pfCandDEta = std::abs(lepRecoEta - p.eta());
184  pfCandDPhi = std::abs(deltaPhi(lepRecoPhi, p.phi()));
185  pfCandEta = p.eta();
186  pfCandIsBarrel = (std::abs(pfCandEta) < 1.4);
187  pfCandPz = std::abs(std::sinh(pfCandEta)*pfCandPt);
188  pfCandPzRel = pfCandPz/lepRecoPz;
189  pfCandPdgID = std::abs(p.pdgId());
190  pfCandCharge = p.charge();
191  pfCandDVx_1 = p.vx() - pvx;
192  pfCandDVy_1 = p.vy() - pvy;
193  pfCandDVz_1 = p.vz() - pvz;
194 
195  pfCandD_1 = std::sqrt(pfCandDVx_1*pfCandDVx_1 + pfCandDVy_1*pfCandDVy_1 + pfCandDVz_1*pfCandDVz_1);
196 
197  if (pfCandCharge != 0 and p.hasTrackDetails()){
198  pfCandDz = p.dz();
199  pfCandDzErr = p.dzError();
200  pfCandDzSig = (std::abs(p.dz()) + 0.000001)/(p.dzError() + 0.00001);
201  pfCandD0 = p.dxy();
202  pfCandD0Err = p.dxyError();
203  pfCandD0Sig = (std::abs(p.dxy()) + 0.000001)/ (p.dxyError() + 0.00001);
204  pfCandPixHits = p.numberOfPixelHits();
205  pfCandHits = p.numberOfHits();
206  pfCandLostInnerHits = p.lostInnerHits();
207  } else {
208  float disp = 1;
209  int psudorand = p.pt()*1000000;
210  if (psudorand%2 == 0) disp = -1;
211  pfCandDz = 5*disp;
212  pfCandDzErr = 0;
213  pfCandDzSig = 0;
214  pfCandD0 = 5*disp;
215  pfCandD0Err = 0;
216  pfCandD0Sig = 0;
217  pfCandPixHits = 0;
218  pfCandHits = 0;
219  pfCandLostInnerHits = 2.;
220  pfCandDVx_1 = 1;
221  pfCandDVy_1 = 1;
222  pfCandDVz_1 = 1;
223  pfCandD_1 = 1;
224  }
225 
226  pfCandPuppiWeight = p.puppiWeight();
227  pfCandFromPV = p.fromPV();
228  pfCandVtxQuality = p.pvAssociationQuality();
229  pfCandHighPurityTrk = p.trackHighPurity();
230  float pfCandTauIndMatch_temp = 0;
231 
232  for (auto i : signalCandidateInds) {
233  if (i == sorted_inds.at(pf_index)) pfCandTauIndMatch_temp = 1;
234  }
235 
236  pfCandTauIndMatch = pfCandTauIndMatch_temp;
237  pfCandPtRelPtRel = pfCandPtRel*pfCandPtRel;
238  pfCandPt = std::min(pfCandPt, pfCandPt_max);
239  pfCandPt = pfCandPt/pfCandPt_max;
240 
241  pfCandPz = std::min(pfCandPz, pfCandPz_max);
242  pfCandPz = pfCandPz/pfCandPz_max;
243 
244  pfCandPtRel = std::min(pfCandPtRel, pfCandPtRel_max);
245  pfCandPzRel = std::min(pfCandPzRel, pfCandPzRel_max);
246  pfCandPzRel = pfCandPzRel/pfCandPzRel_max;
247  pfCandDr = pfCandDr/pfCandDr_max;
248  pfCandEta = pfCandEta/pfCandEta_max;
249  pfCandDEta = pfCandDEta/pfCandDEta_max;
250  pfCandDPhi = pfCandDPhi/pfCandDPhi_max;
251  pfCandPixHits = pfCandPixHits/pfCandPixHits_max;
252  pfCandHits = pfCandHits/pfCandHits_max;
253 
254  pfCandPtRelPtRel = std::min(pfCandPtRelPtRel, pfCandPtRelPtRel_max);
255 
256  pfCandD0 = std::clamp(pfCandD0, -pfCandD0_max, pfCandD0_max);
257  pfCandD0 = pfCandD0/pfCandD0_max;
258 
259  pfCandDz = std::clamp(pfCandDz, -pfCandDz_max, pfCandDz_max);
260  pfCandDz = pfCandDz/pfCandDz_max;
261 
262  pfCandD0Err = std::min(pfCandD0Err, pfCandD0_z_Err_max);
263  pfCandDzErr = std::min(pfCandDzErr, pfCandD0_z_Err_max);
264  pfCandDzSig = std::min(pfCandDzSig, pfCandDzSig_max);
265  pfCandDzSig = pfCandDzSig/pfCandDzSig_max;
266 
267  pfCandD0Sig = std::min(pfCandD0Sig, pfCandD0Sig_max);
268  pfCandD0D0 = pfCandD0*pfCandD0;
269  pfCandDzDz = pfCandDz*pfCandDz;
270  pfCandD0Dz = pfCandD0*pfCandDz;
271  pfCandD0Dphi = pfCandD0*pfCandDPhi;
272 
273  pfCandDVx_1 = std::clamp(pfCandDVx_1, -pfCandDVx_y_z_1_max, pfCandDVx_y_z_1_max);
274  pfCandDVx_1 = pfCandDVx_1/pfCandDVx_y_z_1_max;
275 
276  pfCandDVy_1 = std::clamp(pfCandDVy_1, -pfCandDVx_y_z_1_max, pfCandDVx_y_z_1_max);
277  pfCandDVy_1 = pfCandDVy_1/pfCandDVx_y_z_1_max;
278 
279  pfCandDVz_1 = std::clamp(pfCandDVz_1, -pfCandDVx_y_z_1_max, pfCandDVx_y_z_1_max);
280  pfCandDVz_1 = pfCandDVz_1/pfCandDVx_y_z_1_max;
281 
282  pfCandD_1 = std::clamp(pfCandD_1, -pfCandD_1_max, pfCandD_1_max);
283  pfCandD_1 = pfCandD_1/ pfCandD_1_max;
284 
285  if (graphVersion == 0) {
286  tensor.tensor<float,3>()( 0, 60-1-iPF, 0) = pfCandPt;
287  tensor.tensor<float,3>()( 0, 60-1-iPF, 1) = pfCandPz;
288  tensor.tensor<float,3>()( 0, 60-1-iPF, 2) = pfCandPtRel;
289  tensor.tensor<float,3>()( 0, 60-1-iPF, 3) = pfCandPzRel;
290  tensor.tensor<float,3>()( 0, 60-1-iPF, 4) = pfCandDr;
291  tensor.tensor<float,3>()( 0, 60-1-iPF, 5) = pfCandDEta;
292  tensor.tensor<float,3>()( 0, 60-1-iPF, 6) = pfCandDPhi;
293  tensor.tensor<float,3>()( 0, 60-1-iPF, 7) = pfCandEta;
294  tensor.tensor<float,3>()( 0, 60-1-iPF, 8) = pfCandDz;
295  tensor.tensor<float,3>()( 0, 60-1-iPF, 9) = pfCandDzSig;
296  tensor.tensor<float,3>()( 0, 60-1-iPF, 10) = pfCandD0;
297  tensor.tensor<float,3>()( 0, 60-1-iPF, 11) = pfCandD0Sig;
298  tensor.tensor<float,3>()( 0, 60-1-iPF, 12) = pfCandDzErr;
299  tensor.tensor<float,3>()( 0, 60-1-iPF, 13) = pfCandD0Err;
300  tensor.tensor<float,3>()( 0, 60-1-iPF, 14) = pfCandD0D0;
301  tensor.tensor<float,3>()( 0, 60-1-iPF, 15) = pfCandCharge==0;
302  tensor.tensor<float,3>()( 0, 60-1-iPF, 16) = pfCandCharge==1;
303  tensor.tensor<float,3>()( 0, 60-1-iPF, 17) = pfCandCharge==-1;
304  tensor.tensor<float,3>()( 0, 60-1-iPF, 18) = pfCandPdgID>22;
305  tensor.tensor<float,3>()( 0, 60-1-iPF, 19) = pfCandPdgID==22;
306  tensor.tensor<float,3>()( 0, 60-1-iPF, 20) = pfCandDzDz;
307  tensor.tensor<float,3>()( 0, 60-1-iPF, 21) = pfCandD0Dz;
308  tensor.tensor<float,3>()( 0, 60-1-iPF, 22) = pfCandD0Dphi;
309  tensor.tensor<float,3>()( 0, 60-1-iPF, 23) = pfCandPtRelPtRel;
310  tensor.tensor<float,3>()( 0, 60-1-iPF, 24) = pfCandPixHits;
311  tensor.tensor<float,3>()( 0, 60-1-iPF, 25) = pfCandHits;
312  tensor.tensor<float,3>()( 0, 60-1-iPF, 26) = pfCandLostInnerHits==-1;
313  tensor.tensor<float,3>()( 0, 60-1-iPF, 27) = pfCandLostInnerHits==0;
314  tensor.tensor<float,3>()( 0, 60-1-iPF, 28) = pfCandLostInnerHits==1;
315  tensor.tensor<float,3>()( 0, 60-1-iPF, 29) = pfCandLostInnerHits==2;
316  tensor.tensor<float,3>()( 0, 60-1-iPF, 30) = pfCandPuppiWeight;
317  tensor.tensor<float,3>()( 0, 60-1-iPF, 31) = (pfCandVtxQuality == 1);
318  tensor.tensor<float,3>()( 0, 60-1-iPF, 32) = (pfCandVtxQuality == 5);
319  tensor.tensor<float,3>()( 0, 60-1-iPF, 33) = (pfCandVtxQuality == 6);
320  tensor.tensor<float,3>()( 0, 60-1-iPF, 34) = (pfCandVtxQuality == 7);
321  tensor.tensor<float,3>()( 0, 60-1-iPF, 35) = (pfCandFromPV == 1);
322  tensor.tensor<float,3>()( 0, 60-1-iPF, 36) = (pfCandFromPV == 2);
323  tensor.tensor<float,3>()( 0, 60-1-iPF, 37) = (pfCandFromPV == 3);
324  tensor.tensor<float,3>()( 0, 60-1-iPF, 38) = pfCandIsBarrel;
325  tensor.tensor<float,3>()( 0, 60-1-iPF, 39) = pfCandHighPurityTrk;
326  tensor.tensor<float,3>()( 0, 60-1-iPF, 40) = pfCandPdgID==1;
327  tensor.tensor<float,3>()( 0, 60-1-iPF, 41) = pfCandPdgID==2;
328  tensor.tensor<float,3>()( 0, 60-1-iPF, 42) = pfCandPdgID==11;
329  tensor.tensor<float,3>()( 0, 60-1-iPF, 43) = pfCandPdgID==13;
330  tensor.tensor<float,3>()( 0, 60-1-iPF, 44) = pfCandPdgID==130;
331  tensor.tensor<float,3>()( 0, 60-1-iPF, 45) = pfCandPdgID==211;
332  tensor.tensor<float,3>()( 0, 60-1-iPF, 46) = pfCandTauIndMatch;
333  }
334 
335  if (graphVersion == 1) {
336  tensor.tensor<float,3>()( 0, 36-1-iPF, 0) = pfCandPt;
337  tensor.tensor<float,3>()( 0, 36-1-iPF, 1) = pfCandPz;
338  tensor.tensor<float,3>()( 0, 36-1-iPF, 2) = pfCandPtRel;
339  tensor.tensor<float,3>()( 0, 36-1-iPF, 3) = pfCandPzRel;
340  tensor.tensor<float,3>()( 0, 36-1-iPF, 4) = pfCandDr;
341  tensor.tensor<float,3>()( 0, 36-1-iPF, 5) = pfCandDEta;
342  tensor.tensor<float,3>()( 0, 36-1-iPF, 6) = pfCandDPhi;
343  tensor.tensor<float,3>()( 0, 36-1-iPF, 7) = pfCandEta;
344  tensor.tensor<float,3>()( 0, 36-1-iPF, 8) = pfCandDz;
345  tensor.tensor<float,3>()( 0, 36-1-iPF, 9) = pfCandDzSig;
346  tensor.tensor<float,3>()( 0, 36-1-iPF, 10) = pfCandD0;
347  tensor.tensor<float,3>()( 0, 36-1-iPF, 11) = pfCandD0Sig;
348  tensor.tensor<float,3>()( 0, 36-1-iPF, 12) = pfCandDzErr;
349  tensor.tensor<float,3>()( 0, 36-1-iPF, 13) = pfCandD0Err;
350  tensor.tensor<float,3>()( 0, 36-1-iPF, 14) = pfCandD0D0;
351  tensor.tensor<float,3>()( 0, 36-1-iPF, 15) = pfCandCharge==0;
352  tensor.tensor<float,3>()( 0, 36-1-iPF, 16) = pfCandCharge==1;
353  tensor.tensor<float,3>()( 0, 36-1-iPF, 17) = pfCandCharge==-1;
354  tensor.tensor<float,3>()( 0, 36-1-iPF, 18) = pfCandPdgID>22;
355  tensor.tensor<float,3>()( 0, 36-1-iPF, 19) = pfCandPdgID==22;
356  tensor.tensor<float,3>()( 0, 36-1-iPF, 20) = pfCandDVx_1;
357  tensor.tensor<float,3>()( 0, 36-1-iPF, 21) = pfCandDVy_1;
358  tensor.tensor<float,3>()( 0, 36-1-iPF, 22) = pfCandDVz_1;
359  tensor.tensor<float,3>()( 0, 36-1-iPF, 23) = pfCandD_1;
360  tensor.tensor<float,3>()( 0, 36-1-iPF, 24) = pfCandDzDz;
361  tensor.tensor<float,3>()( 0, 36-1-iPF, 25) = pfCandD0Dz;
362  tensor.tensor<float,3>()( 0, 36-1-iPF, 26) = pfCandD0Dphi;
363  tensor.tensor<float,3>()( 0, 36-1-iPF, 27) = pfCandPtRelPtRel;
364  tensor.tensor<float,3>()( 0, 36-1-iPF, 28) = pfCandPixHits;
365  tensor.tensor<float,3>()( 0, 36-1-iPF, 29) = pfCandHits;
366  tensor.tensor<float,3>()( 0, 36-1-iPF, 30) = pfCandLostInnerHits==-1;
367  tensor.tensor<float,3>()( 0, 36-1-iPF, 31) = pfCandLostInnerHits==0;
368  tensor.tensor<float,3>()( 0, 36-1-iPF, 32) = pfCandLostInnerHits==1;
369  tensor.tensor<float,3>()( 0, 36-1-iPF, 33) = pfCandLostInnerHits==2;
370  tensor.tensor<float,3>()( 0, 36-1-iPF, 34) = pfCandPuppiWeight;
371  tensor.tensor<float,3>()( 0, 36-1-iPF, 35) = (pfCandVtxQuality == 1);
372  tensor.tensor<float,3>()( 0, 36-1-iPF, 36) = (pfCandVtxQuality == 5);
373  tensor.tensor<float,3>()( 0, 36-1-iPF, 37) = (pfCandVtxQuality == 6);
374  tensor.tensor<float,3>()( 0, 36-1-iPF, 38) = (pfCandVtxQuality == 7);
375  tensor.tensor<float,3>()( 0, 36-1-iPF, 39) = (pfCandFromPV == 1);
376  tensor.tensor<float,3>()( 0, 36-1-iPF, 40) = (pfCandFromPV == 2);
377  tensor.tensor<float,3>()( 0, 36-1-iPF, 41) = (pfCandFromPV == 3);
378  tensor.tensor<float,3>()( 0, 36-1-iPF, 42) = pfCandIsBarrel;
379  tensor.tensor<float,3>()( 0, 36-1-iPF, 43) = pfCandHighPurityTrk;
380  tensor.tensor<float,3>()( 0, 36-1-iPF, 44) = pfCandPdgID==1;
381  tensor.tensor<float,3>()( 0, 36-1-iPF, 45) = pfCandPdgID==2;
382  tensor.tensor<float,3>()( 0, 36-1-iPF, 46) = pfCandPdgID==11;
383  tensor.tensor<float,3>()( 0, 36-1-iPF, 47) = pfCandPdgID==13;
384  tensor.tensor<float,3>()( 0, 36-1-iPF, 48) = pfCandPdgID==130;
385  tensor.tensor<float,3>()( 0, 36-1-iPF, 49) = pfCandPdgID==211;
386  tensor.tensor<float,3>()( 0, 36-1-iPF, 50) = pfCandTauIndMatch;
387  }
388  iPF++;
389  }
390  tensorflow::run(&(cache_->getSession()), { { "input_1", tensor } }, { "output_node0" }, {}, &outputs_);
391  predictions.matrix<float>()(tau_index, 0) = outputs_[0].flat<float>()(0);
392  }
393  return predictions;
394  }
float puppiWeight() const
Set both weights at once (with option for only full PUPPI)
virtual float dz(size_t ipv=0) const
dz with respect to the PV[ipv]
edm::EDGetTokenT< pat::PackedCandidateCollection > pfcand_token
float dxyError() const override
uncertainty on dxy
double eta() const final
momentum pseudorapidity
int numberOfHits() const
int pdgId() const override
PDG identifier.
static unsigned getNumberOfParticles(unsigned graphVersion)
Definition: DPFIsolation.cc:32
tensorflow::Session & getSession() const
Definition: DeepTauBase.h:49
const DeepTauCache * cache_
Definition: DeepTauBase.h:101
const LorentzVector & p4() const override
four-momentum Lorentz vecto r
float dzError() const override
uncertainty on dz
double pt() const final
transverse momentum
float tauID(const std::string &name) const
reco::CandidatePtrVector signalCands() const
double vz() const override
z coordinate of vertex position
#define constexpr
def generate(map_blobs=False, class_name=None)
Definition: models.py:187
OutputCollection outputs_
Definition: DeepTauBase.h:100
int charge() const override
electric charge
double vy() const override
y coordinate of vertex position
static unsigned GetNumberOfFeatures(unsigned graphVersion)
Definition: DPFIsolation.cc:38
const PVAssociationQuality pvAssociationQuality() const
double pz() const final
z coordinate of momentum vector
const PVAssoc fromPV(size_t ipv=0) const
T sqrt(T t)
Definition: SSEVec.h:18
bool trackHighPurity() const
true if the track had the highPurity quality bit
LostInnerHits lostInnerHits() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
double pt() const override
transverse momentum
#define end
Definition: vmac.h:39
T min(T a, T b)
Definition: MathUtil.h:58
int numberOfPixelHits() const
Analysis-level tau class.
Definition: Tau.h:55
bool hasTrackDetails() const
Return true if a bestTrack can be extracted from this Candidate.
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
bool isTauIDAvailable(const std::string &name) const
Returns true if a specific ID is available in this pat::Tau.
double eta() const override
momentum pseudorapidity
double phi() const override
momentum azimuthal angle
edm::EDGetTokenT< reco::VertexCollection > vtx_token
#define begin
Definition: vmac.h:32
unsigned graphVersion
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, const std::vector< std::string > &targetNodes, std::vector< Tensor > *outputs)
Definition: TensorFlow.cc:210
virtual float dxy() const
dxy with respect to the PV ref
double phi() const final
momentum azimuthal angle
double vx() const override
x coordinate of vertex position

Member Data Documentation

unsigned DPFIsolation::graphVersion
private

Definition at line 399 of file DPFIsolation.cc.

Referenced by DPFIsolation(), and getPredictions().

edm::EDGetTokenT<pat::PackedCandidateCollection> DPFIsolation::pfcand_token
private

Definition at line 397 of file DPFIsolation.cc.

Referenced by getPredictions().

edm::EDGetTokenT<reco::VertexCollection> DPFIsolation::vtx_token
private

Definition at line 398 of file DPFIsolation.cc.

Referenced by getPredictions().