CMS 3D CMS Logo

tensor_fillers.h
Go to the documentation of this file.
1 #ifndef RecoBTag_DeepFlavour_tensor_fillers_h
2 #define RecoBTag_DeepFlavour_tensor_fillers_h
3 
6 
7 namespace btagbtvdeep {
8 
9  // Note on setting tensor values:
10  // Instead of using the more convenient tensor.matrix (etc) methods,
11  // we can exploit that in the following methods values are set along
12  // the innermost (= last) axis. Those values are stored contiguously in
13  // the memory, so it is most performant to get the pointer to the first
14  // value and use pointer arithmetic to iterate through the next pointers.
15 
16  void jet_tensor_filler(tensorflow::Tensor & tensor,
17  std::size_t jet_n,
18  const btagbtvdeep::DeepFlavourFeatures & features) {
19 
20  float* ptr = &tensor.matrix<float>()(jet_n, 0);
21 
22  // jet variables
23  const auto & jet_features = features.jet_features;
24  *ptr = jet_features.pt;
25  *(++ptr) = jet_features.eta;
26  // number of elements in different collections
27  *(++ptr) = features.c_pf_features.size();
28  *(++ptr) = features.n_pf_features.size();
29  *(++ptr) = features.sv_features.size();
30  *(++ptr) = features.npv;
31  // variables from ShallowTagInfo
32  const auto & tag_info_features = features.tag_info_features;
33  *(++ptr) = tag_info_features.trackSumJetEtRatio;
34  *(++ptr) = tag_info_features.trackSumJetDeltaR;
35  *(++ptr) = tag_info_features.vertexCategory;
36  *(++ptr) = tag_info_features.trackSip2dValAboveCharm;
37  *(++ptr) = tag_info_features.trackSip2dSigAboveCharm;
38  *(++ptr) = tag_info_features.trackSip3dValAboveCharm;
39  *(++ptr) = tag_info_features.trackSip3dSigAboveCharm;
40  *(++ptr) = tag_info_features.jetNSelectedTracks;
41  *(++ptr) = tag_info_features.jetNTracksEtaRel;
42 
43  }
44 
45  void c_pf_tensor_filler(tensorflow::Tensor & tensor,
46  std::size_t jet_n,
47  std::size_t c_pf_n,
48  const btagbtvdeep::ChargedCandidateFeatures & c_pf_features) {
49 
50  float* ptr = &tensor.tensor<float, 3>()(jet_n, c_pf_n, 0);
51 
52  *ptr = c_pf_features.btagPf_trackEtaRel;
53  *(++ptr) = c_pf_features.btagPf_trackPtRel;
54  *(++ptr) = c_pf_features.btagPf_trackPPar;
55  *(++ptr) = c_pf_features.btagPf_trackDeltaR;
56  *(++ptr) = c_pf_features.btagPf_trackPParRatio;
57  *(++ptr) = c_pf_features.btagPf_trackSip2dVal;
58  *(++ptr) = c_pf_features.btagPf_trackSip2dSig;
59  *(++ptr) = c_pf_features.btagPf_trackSip3dVal;
60  *(++ptr) = c_pf_features.btagPf_trackSip3dSig;
61  *(++ptr) = c_pf_features.btagPf_trackJetDistVal;
62  *(++ptr) = c_pf_features.ptrel;
63  *(++ptr) = c_pf_features.drminsv;
64  *(++ptr) = c_pf_features.vtx_ass;
65  *(++ptr) = c_pf_features.puppiw;
66  *(++ptr) = c_pf_features.chi2;
67  *(++ptr) = c_pf_features.quality;
68 
69  }
70 
71  void n_pf_tensor_filler(tensorflow::Tensor & tensor,
72  std::size_t jet_n,
73  std::size_t n_pf_n,
74  const btagbtvdeep::NeutralCandidateFeatures & n_pf_features) {
75 
76  float* ptr = &tensor.tensor<float, 3>()(jet_n, n_pf_n, 0);
77 
78  *ptr = n_pf_features.ptrel;
79  *(++ptr) = n_pf_features.deltaR;
80  *(++ptr) = n_pf_features.isGamma;
81  *(++ptr) = n_pf_features.hadFrac;
82  *(++ptr) = n_pf_features.drminsv;
83  *(++ptr) = n_pf_features.puppiw;
84 
85  }
86 
87  void sv_tensor_filler(tensorflow::Tensor & tensor,
88  std::size_t jet_n,
89  std::size_t sv_n,
90  const btagbtvdeep::SecondaryVertexFeatures & sv_features) {
91 
92  float* ptr = &tensor.tensor<float, 3>()(jet_n, sv_n, 0);
93 
94  *ptr = sv_features.pt;
95  *(++ptr) = sv_features.deltaR;
96  *(++ptr) = sv_features.mass;
97  *(++ptr) = sv_features.ntracks;
98  *(++ptr) = sv_features.chi2;
99  *(++ptr) = sv_features.normchi2;
100  *(++ptr) = sv_features.dxy;
101  *(++ptr) = sv_features.dxysig;
102  *(++ptr) = sv_features.d3d;
103  *(++ptr) = sv_features.d3dsig;
104  *(++ptr) = sv_features.costhetasvpv;
105  *(++ptr) = sv_features.enratio;
106 
107  }
108 
109 }
110 
111 #endif
ShallowTagInfoFeatures tag_info_features
std::vector< NeutralCandidateFeatures > n_pf_features
void c_pf_tensor_filler(tensorflow::Tensor &tensor, std::size_t jet_n, std::size_t c_pf_n, const btagbtvdeep::ChargedCandidateFeatures &c_pf_features)
std::vector< SecondaryVertexFeatures > sv_features
std::vector< ChargedCandidateFeatures > c_pf_features
void n_pf_tensor_filler(tensorflow::Tensor &tensor, std::size_t jet_n, std::size_t n_pf_n, const btagbtvdeep::NeutralCandidateFeatures &n_pf_features)
void jet_tensor_filler(tensorflow::Tensor &tensor, std::size_t jet_n, const btagbtvdeep::DeepFlavourFeatures &features)
void sv_tensor_filler(tensorflow::Tensor &tensor, std::size_t jet_n, std::size_t sv_n, const btagbtvdeep::SecondaryVertexFeatures &sv_features)