1010#include " T5NeuralNetworkWeights.h"
1111#include " T3NeuralNetworkWeights.h"
1212#include " pT3NeuralNetworkWeights.h"
13+ #include " T5EmbedNetworkWeights.h"
14+ #include " pLSEmbedNetworkWeights.h"
1315
1416namespace ALPAKA_ACCELERATOR_NAMESPACE ::lst {
1517
@@ -66,11 +68,11 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
6668 const unsigned int mdIndex2,
6769 const unsigned int mdIndex3,
6870 const float radius,
69- const float betaIn) {
71+ const float betaIn,
72+ float (&output)[dnn::t3dnn::kOutputFeatures]) {
7073 // Constants for T3 DNN
7174 constexpr unsigned int kInputFeatures = 14 ;
7275 constexpr unsigned int kHiddenFeatures = 32 ;
73- constexpr unsigned int kOutputFeatures = 3 ;
7476
7577 // Extract hit information
7678 float eta1 = alpaka::math::abs (acc, mds.anchorEta ()[mdIndex1]); // inner T3 anchor hit 1 eta
@@ -91,7 +93,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
9193
9294 // Build input feature vector matching training order
9395 float x[kInputFeatures ] = {
94- eta1 / dnn::kEta_norm , // First hit eta normalized
96+ eta1 / dnn::t3dnn:: kEta_norm , // First hit eta normalized
9597 alpaka::math::abs (acc, phi1) / dnn::kPhi_norm , // First hit phi normalized
9698 z1 / dnn::t3dnn::kZ_max , // First hit z normalized
9799 r1 / dnn::t3dnn::kR_max , // First hit r normalized
@@ -112,7 +114,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
112114
113115 float x_1[kHiddenFeatures ]; // Layer 1 output
114116 float x_2[kHiddenFeatures ]; // Layer 2 output
115- float x_3[kOutputFeatures ]; // Layer 3 output (3 classes)
116117
117118 // Layer 1: Linear + Relu
118119 linear_layer<kInputFeatures , kHiddenFeatures >(x, x_1, dnn::t3dnn::wgtT_layer1, dnn::t3dnn::bias_layer1);
@@ -123,17 +124,17 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
123124 relu_activation<kHiddenFeatures >(x_2);
124125
125126 // Layer 3: Linear + Softmax
126- linear_layer<kHiddenFeatures , kOutputFeatures >(
127- x_2, x_3 , dnn::t3dnn::wgtT_output_layer, dnn::t3dnn::bias_output_layer);
128- softmax_activation<kOutputFeatures >(acc, x_3 );
127+ linear_layer<kHiddenFeatures , dnn::t3dnn:: kOutputFeatures >(
128+ x_2, output , dnn::t3dnn::wgtT_output_layer, dnn::t3dnn::bias_output_layer);
129+ softmax_activation<dnn::t3dnn:: kOutputFeatures >(acc, output );
129130
130131 // Get pt and eta bin indices
131132 float t3_pt = radius * lst::k2Rinv1GeVf * 2 ;
132133 uint8_t pt_index = (t3_pt > 5 );
133134 uint8_t bin_index = (eta1 > 2 .5f ) ? (dnn::kEtaBins - 1 ) : static_cast <unsigned int >(eta1 / dnn::kEtaSize );
134135
135- return x_3 [1 ] > dnn::t3dnn::kWp_prompt [pt_index][bin_index] ||
136- x_3 [2 ] > dnn::t3dnn::kWp_displaced [pt_index][bin_index];
136+ return output [1 ] > dnn::t3dnn::kWp_prompt [pt_index][bin_index] ||
137+ output [2 ] > dnn::t3dnn::kWp_displaced [pt_index][bin_index];
137138 }
138139 } // namespace t3dnn
139140
@@ -157,7 +158,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
157158 alpaka::math::log10 (acc, pixelRadius),
158159 alpaka::math::log10 (acc, pixRadiusError),
159160 alpaka::math::log10 (acc, rzChiSquared),
160- alpaka::math::abs (acc, pixelEta) / dnn::kEta_norm };
161+ alpaka::math::abs (acc, pixelEta) / dnn::pt3dnn:: kEta_norm };
161162
162163 float x1[kHiddenFeatures ];
163164 float x2[kHiddenFeatures ];
@@ -227,7 +228,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
227228
228229 // Build the input feature vector using pairwise differences after the first hit
229230 float x[kInputFeatures ] = {
230- eta1 / dnn::kEta_norm , // inner T3: First hit eta normalized
231+ eta1 / dnn::t5dnn:: kEta_norm , // inner T3: First hit eta normalized
231232 alpaka::math::abs (acc, phi1) / dnn::kPhi_norm , // inner T3: First hit phi normalized
232233 z1 / dnn::t5dnn::kZ_max , // inner T3: First hit z normalized
233234 r1 / dnn::t5dnn::kR_max , // inner T3: First hit r normalized
@@ -288,6 +289,145 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst {
288289 }
289290 } // namespace t5dnn
290291
292+ namespace t5embdnn {
293+ template <typename TAcc>
294+ ALPAKA_FN_ACC ALPAKA_FN_INLINE void runEmbed (TAcc const & acc,
295+ MiniDoubletsConst mds,
296+ unsigned int mdIndex1,
297+ unsigned int mdIndex2,
298+ unsigned int mdIndex3,
299+ unsigned int mdIndex4,
300+ unsigned int mdIndex5,
301+ float innerRadius,
302+ float outerRadius,
303+ float bridgeRadius,
304+ float fakeScore1,
305+ float promptScore1,
306+ float dispScore1,
307+ float fakeScore2,
308+ float promptScore2,
309+ float dispScore2,
310+ float (&embedding)[Params_T5::kEmbed]) {
311+ constexpr unsigned int kInputFeatures = 30 ;
312+ constexpr unsigned int kHiddenFeatures = 32 ;
313+
314+ float eta1 = mds.anchorEta ()[mdIndex1];
315+ float eta2 = alpaka::math::abs (acc, mds.anchorEta ()[mdIndex2]);
316+ float eta3 = alpaka::math::abs (acc, mds.anchorEta ()[mdIndex3]);
317+ float eta4 = alpaka::math::abs (acc, mds.anchorEta ()[mdIndex4]);
318+ float eta5 = alpaka::math::abs (acc, mds.anchorEta ()[mdIndex5]);
319+
320+ float phi1 = mds.anchorPhi ()[mdIndex1];
321+ float phi2 = mds.anchorPhi ()[mdIndex2];
322+ float phi3 = mds.anchorPhi ()[mdIndex3];
323+ float phi4 = mds.anchorPhi ()[mdIndex4];
324+ float phi5 = mds.anchorPhi ()[mdIndex5];
325+
326+ float z1 = alpaka::math::abs (acc, mds.anchorZ ()[mdIndex1]);
327+ float z2 = alpaka::math::abs (acc, mds.anchorZ ()[mdIndex2]);
328+ float z3 = alpaka::math::abs (acc, mds.anchorZ ()[mdIndex3]);
329+ float z4 = alpaka::math::abs (acc, mds.anchorZ ()[mdIndex4]);
330+ float z5 = alpaka::math::abs (acc, mds.anchorZ ()[mdIndex5]);
331+
332+ float r1 = mds.anchorRt ()[mdIndex1];
333+ float r2 = mds.anchorRt ()[mdIndex2];
334+ float r3 = mds.anchorRt ()[mdIndex3];
335+ float r4 = mds.anchorRt ()[mdIndex4];
336+ float r5 = mds.anchorRt ()[mdIndex5];
337+
338+ float x[kInputFeatures ] = {eta1 / dnn::t5dnn::kEta_norm ,
339+ alpaka::math::cos (acc, phi1),
340+ alpaka::math::sin (acc, phi1),
341+ z1 / dnn::t5dnn::kZ_max ,
342+ r1 / dnn::t5dnn::kR_max ,
343+
344+ eta2 - alpaka::math::abs (acc, eta1),
345+ cms::alpakatools::deltaPhi (acc, phi2, phi1),
346+ (z2 - z1) / dnn::t5dnn::kZ_max ,
347+ (r2 - r1) / dnn::t5dnn::kR_max ,
348+
349+ eta3 - eta2,
350+ cms::alpakatools::deltaPhi (acc, phi3, phi2),
351+ (z3 - z2) / dnn::t5dnn::kZ_max ,
352+ (r3 - r2) / dnn::t5dnn::kR_max ,
353+
354+ eta4 - eta3,
355+ cms::alpakatools::deltaPhi (acc, phi4, phi3),
356+ (z4 - z3) / dnn::t5dnn::kZ_max ,
357+ (r4 - r3) / dnn::t5dnn::kR_max ,
358+
359+ eta5 - eta4,
360+ cms::alpakatools::deltaPhi (acc, phi5, phi4),
361+ (z5 - z4) / dnn::t5dnn::kZ_max ,
362+ (r5 - r4) / dnn::t5dnn::kR_max ,
363+
364+ 1 .0f / innerRadius,
365+ 1 .0f / bridgeRadius,
366+ 1 .0f / outerRadius,
367+
368+ fakeScore1,
369+ promptScore1,
370+ dispScore1,
371+ (fakeScore2 - fakeScore1),
372+ (promptScore2 - promptScore1),
373+ (dispScore2 - dispScore1)};
374+
375+ float h1[kHiddenFeatures ];
376+ float h2[kHiddenFeatures ];
377+
378+ linear_layer<kInputFeatures , kHiddenFeatures >(x, h1, dnn::t5embdnn::wgtT_fc1, dnn::t5embdnn::bias_fc1);
379+ relu_activation<kHiddenFeatures >(h1);
380+
381+ linear_layer<kHiddenFeatures , kHiddenFeatures >(h1, h2, dnn::t5embdnn::wgtT_fc2, dnn::t5embdnn::bias_fc2);
382+ relu_activation<kHiddenFeatures >(h2);
383+
384+ linear_layer<kHiddenFeatures , Params_T5::kEmbed >(h2, embedding, dnn::t5embdnn::wgtT_fc3, dnn::t5embdnn::bias_fc3);
385+ }
386+
387+ } // namespace t5embdnn
388+
389+ namespace plsembdnn {
390+ template <typename TAcc>
391+ ALPAKA_FN_ACC ALPAKA_FN_INLINE void runEmbed (TAcc const & acc,
392+ const float eta,
393+ const float etaErr,
394+ const float phi,
395+ const float circleCenterX,
396+ const float circleCenterY,
397+ const float circleRadius,
398+ const float ptIn,
399+ const float ptErr,
400+ const bool isQuad,
401+ float (&embedding)[Params_pLS::kEmbed]) {
402+ constexpr unsigned int kInputFeatures = 10 ;
403+ constexpr unsigned int kHiddenFeatures = 32 ;
404+
405+ float x[kInputFeatures ] = {eta / dnn::plsembdnn::kEta_norm ,
406+ etaErr / dnn::plsembdnn::kEtaErr_norm ,
407+ alpaka::math::cos (acc, phi),
408+ alpaka::math::sin (acc, phi),
409+ 1 .0f / ptIn,
410+ alpaka::math::log10 (acc, ptErr),
411+ isQuad ? 1 .0f : 0 .0f ,
412+ alpaka::math::log10 (acc, alpaka::math::abs (acc, circleCenterX)),
413+ alpaka::math::log10 (acc, alpaka::math::abs (acc, circleCenterY)),
414+ alpaka::math::log10 (acc, circleRadius)};
415+
416+ float h1[kHiddenFeatures ];
417+ float h2[kHiddenFeatures ];
418+
419+ linear_layer<kInputFeatures , kHiddenFeatures >(x, h1, dnn::plsembdnn::wgtT_fc1, dnn::plsembdnn::bias_fc1);
420+ relu_activation<kHiddenFeatures >(h1);
421+
422+ linear_layer<kHiddenFeatures , kHiddenFeatures >(h1, h2, dnn::plsembdnn::wgtT_fc2, dnn::plsembdnn::bias_fc2);
423+ relu_activation<kHiddenFeatures >(h2);
424+
425+ linear_layer<kHiddenFeatures , Params_pLS::kEmbed >(
426+ h2, embedding, dnn::plsembdnn::wgtT_fc3, dnn::plsembdnn::bias_fc3);
427+ }
428+
429+ } // namespace plsembdnn
430+
291431} // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst
292432
293433#endif
0 commit comments