CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
EndcapPiZeroDiscriminatorAlgo Class Reference

#include <EndcapPiZeroDiscriminatorAlgo.h>

Public Types

typedef std::map< DetId, EcalRecHitRecHitsMap
 

Public Member Functions

void calculateBarrelNNInputVariables (float et, double s1, double s9, double s25, double m2, double cee, double cep, double cpp, double s4, double s6, double ratio, double xcog, double ycog)
 
bool calculateNNInputVariables (std::vector< float > &vph1, std::vector< float > &vph2, float pS1_max, float pS9_max, float pS25_max, int EScorr)
 
 EndcapPiZeroDiscriminatorAlgo ()
 
 EndcapPiZeroDiscriminatorAlgo (double stripEnergyCut, int nStripCut, const std::string &path)
 
void findPi0Road (ESDetId strip, EcalPreshowerNavigator &theESNav, int plane, std::vector< ESDetId > &vout)
 
std::vector< float > findPreshVector (ESDetId strip, RecHitsMap *rechits_map, CaloSubdetectorTopology *topology_p)
 
std::vector< float > const & get_input_vector () const
 
float GetBarrelNNOutput (float EB_Et)
 
float GetNNOutput (float EE_Et)
 
bool goodPi0Strip (RecHitsMap::iterator candidate_it, ESDetId lastID)
 

Private Member Functions

float Activation_fun (float SUM) const
 
float getNNoutput (int sel_wfile, int Layers, int Indim, int Hidden, int Outdim, int barrelstart) const
 
void readWeightFile (const char *WFile, int &Layers, int &Indim, int &Hidden, int &Outdim)
 

Private Attributes

int debugLevel_
 
int EB_Hidden
 
int EB_Indim
 
int EB_Layers
 
int EB_Outdim
 
int EE_Hidden
 
int EE_Indim
 
int EE_Layers
 
int EE_Outdim
 
std::vector< float > H_O_Weight_all
 
std::vector< float > H_Thresh_all
 
std::vector< float > I_H_Weight_all
 
std::vector< float > input_var
 
std::vector< float > O_Thresh_all
 
int preshSeededNstr_
 
double preshStripEnergyCut_
 

Detailed Description

Definition at line 15 of file EndcapPiZeroDiscriminatorAlgo.h.

Member Typedef Documentation

◆ RecHitsMap

Definition at line 17 of file EndcapPiZeroDiscriminatorAlgo.h.

Constructor & Destructor Documentation

◆ EndcapPiZeroDiscriminatorAlgo() [1/2]

EndcapPiZeroDiscriminatorAlgo::EndcapPiZeroDiscriminatorAlgo ( )
inline

◆ EndcapPiZeroDiscriminatorAlgo() [2/2]

EndcapPiZeroDiscriminatorAlgo::EndcapPiZeroDiscriminatorAlgo ( double  stripEnergyCut,
int  nStripCut,
const std::string &  path 
)

Member Function Documentation

◆ Activation_fun()

float EndcapPiZeroDiscriminatorAlgo::Activation_fun ( float  SUM) const
private

Definition at line 328 of file EndcapPiZeroDiscriminatorAlgo.cc.

References JetChargeProducer_cfi::exp, and SUM.

Referenced by getNNoutput().

328 { return (1.0 / (1.0 + exp(-2.0 * SUM))); }
#define SUM(A, B)

◆ calculateBarrelNNInputVariables()

void EndcapPiZeroDiscriminatorAlgo::calculateBarrelNNInputVariables ( float  et,
double  s1,
double  s9,
double  s25,
double  m2,
double  cee,
double  cep,
double  cpp,
double  s4,
double  s6,
double  ratio,
double  xcog,
double  ycog 
)

Definition at line 467 of file EndcapPiZeroDiscriminatorAlgo.cc.

References EB_Indim, input_var, callgraph::m2, particleFlowDisplacedVertex_cfi::ratio, photons_cff::s4, and mathSSE::sqrt().

479  {
480  input_var.resize(EB_Indim);
481 
482  double lam, lam1, lam2;
483 
484  if (xcog < 0.) {
485  input_var[0] = -xcog / s25;
486  } else {
487  input_var[0] = xcog / s25;
488  }
489 
490  input_var[1] = cee / 0.0004;
491 
492  if (cpp < .001) {
493  input_var[2] = cpp / .001;
494  } else {
495  input_var[2] = 0.;
496  }
497 
498  if (s9 != 0.) {
499  input_var[3] = s1 / s9;
500  input_var[8] = s6 / s9;
501  input_var[10] = (m2 + s1) / s9;
502  } else {
503  input_var[3] = 0.;
504  input_var[8] = 0.;
505  input_var[10] = 0.;
506  }
507 
508  if (s25 - s1 > 0.) {
509  input_var[4] = (s9 - s1) / (s25 - s1);
510  } else {
511  input_var[4] = 0.;
512  }
513 
514  if (s25 > 0.) {
515  input_var[5] = s4 / s25;
516  } else {
517  input_var[5] = 0.;
518  }
519 
520  if (ycog < 0.) {
521  input_var[6] = -ycog / s25;
522  } else {
523  input_var[6] = ycog / s25;
524  }
525 
526  input_var[7] = ratio;
527 
528  lam = sqrt((cee - cpp) * (cee - cpp) + 4 * cep * cep);
529  lam1 = (cee + cpp + lam) / 2;
530  lam2 = (cee + cpp - lam) / 2;
531 
532  if (lam1 == 0) {
533  input_var[9] = .0;
534  } else {
535  input_var[9] = lam2 / lam1;
536  }
537  if (s4 != 0.) {
538  input_var[11] = (m2 + s1) / s4;
539  } else {
540  input_var[11] = 0.;
541  }
542 }
T sqrt(T t)
Definition: SSEVec.h:19

◆ calculateNNInputVariables()

bool EndcapPiZeroDiscriminatorAlgo::calculateNNInputVariables ( std::vector< float > &  vph1,
std::vector< float > &  vph2,
float  pS1_max,
float  pS9_max,
float  pS25_max,
int  EScorr 
)

Definition at line 340 of file EndcapPiZeroDiscriminatorAlgo.cc.

References MillePedeFileConverter_cfg::e, EE_Indim, mps_fire::i, input_var, dqmdumpme::k, GetRecoTauVFromDQM_MC_cff::kk, and LogTrace.

341  {
342  input_var.resize(EE_Indim);
343  bool valid_NNinput = true;
344 
345  /*
346  for(int i = 0; i<11;i++) {
347  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: Energies of the Preshower Strips in X plane = " << vph1[i] ;
348  }
349 
350  for(int i = 0; i<11;i++) {
351  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: Energies of the Preshower Strips in Y plane = " << vph2[i] ;
352  }
353  */
354 
355  // check if all Preshower info is availabla - If NOT use remaning info
356  for (int k = 0; k < 11; k++) {
357  if (vph1[k] < 0) {
358  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: Oops!!! Preshower Info for strip : " << k
359  << " of X plane Do not exists";
360 
361  vph1[k] = 0.0;
362  }
363  if (vph2[k] < 0) {
364  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: Oops!!! Preshower Info for strip : " << k
365  << " of Y plane Do not exists";
366 
367  vph2[k] = 0.0;
368  }
369  }
370 
371  /*
372  for(int i = 0; i<11;i++) {
373  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: After: Energies of the Preshower Strips in X plane = " << vph1[i] ;
374  }
375 
376  for(int i = 0; i<11;i++) {
377 
378  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: After: Energies of the Preshower Strips in Y plane = " << vph2[i] ;
379  }
380  */
381 
382  // FIRST : Produce the 22 NN variables related with the Preshower
383  // --------------------------------------------------------------
384  // New normalization of the preshower strip energies Aris 8/11/2004
385  for (int kk = 0; kk < 11; kk++) {
386  input_var[kk] = fabs(vph1[kk] / 0.01);
387  input_var[kk + 11] = fabs(vph2[kk] / 0.02);
388  if (input_var[kk] < 0.0001)
389  input_var[kk] = 0.;
390  if (input_var[kk + 11] < 0.0001)
391  input_var[kk + 11] = 0.;
392  }
393  input_var[0] = fabs(input_var[0] / 2.);
394  input_var[1] = fabs(input_var[1] / 2.);
395  input_var[6] = fabs(input_var[6] / 2.);
396  input_var[11] = fabs(input_var[11] / 2.);
397  input_var[12] = fabs(input_var[12] / 2.);
398  input_var[17] = fabs(input_var[17] / 2.);
399 
400  // correction for version > CMSSW_3_1_0_pre5 where extra enegry is given to the ES strips
401  // Aris 18/5/2009
402  if (EScorr == 1) {
403  input_var[0] -= 0.05;
404  input_var[1] -= 0.035;
405  input_var[2] -= 0.035;
406  input_var[3] -= 0.02;
407  input_var[4] -= 0.015;
408  input_var[5] -= 0.0075;
409  input_var[6] -= 0.035;
410  input_var[7] -= 0.035;
411  input_var[8] -= 0.02;
412  input_var[9] -= 0.015;
413  input_var[10] -= 0.0075;
414 
415  input_var[11] -= 0.05;
416  input_var[12] -= 0.035;
417  input_var[13] -= 0.035;
418  input_var[14] -= 0.02;
419  input_var[15] -= 0.015;
420  input_var[16] -= 0.0075;
421  input_var[17] -= 0.035;
422  input_var[18] -= 0.035;
423  input_var[19] -= 0.02;
424  input_var[20] -= 0.015;
425  input_var[21] -= 0.0075;
426 
427  for (int kk1 = 0; kk1 < 22; kk1++) {
428  if (input_var[kk1] < 0)
429  input_var[kk1] = 0.0;
430  }
431  }
432  // SECOND: Take the final NN variable related to the ECAL
433  // -----------------------------------------------
434  float ECAL_norm_factor = 500.;
435  if (pS25_max > 500 && pS25_max <= 1000)
436  ECAL_norm_factor = 1000;
437  if (pS25_max > 1000)
438  ECAL_norm_factor = 7000;
439 
440  input_var[22] = pS1_max / ECAL_norm_factor;
441  input_var[23] = pS9_max / ECAL_norm_factor;
442  input_var[24] = pS25_max / ECAL_norm_factor;
443 
444  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: S1/ECAL_norm_factor = " << input_var[22];
445  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: S9/ECAL_norm_factor = " << input_var[23];
446  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: S25/ECAL_norm_factor = " << input_var[24];
447 
448  for (int i = 0; i < EE_Indim; i++) {
449  if (input_var[i] > 1.0e+00) {
450  valid_NNinput = false;
451  break;
452  }
453  }
454 
455  LogTrace("EcalClusters") << " valid_NNinput = " << valid_NNinput;
456 
457  return valid_NNinput;
458 }
#define LogTrace(id)

◆ findPi0Road()

void EndcapPiZeroDiscriminatorAlgo::findPi0Road ( ESDetId  strip,
EcalPreshowerNavigator theESNav,
int  plane,
std::vector< ESDetId > &  vout 
)

Definition at line 141 of file EndcapPiZeroDiscriminatorAlgo.cc.

References CaloNavigator< T, TOPO >::east(), CaloNavigator< T, TOPO >::home(), LogTrace, GetRecoTauVFromDQM_MC_cff::next, CaloNavigator< T, TOPO >::north(), preshSeededNstr_, CaloNavigator< T, TOPO >::setHome(), CaloNavigator< T, TOPO >::south(), digitizers_cfi::strip, and CaloNavigator< T, TOPO >::west().

Referenced by findPreshVector().

144  {
145  if (strip == ESDetId(0))
146  return;
147  ESDetId next;
148  theESNav.setHome(strip);
149  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: starts from strip " << strip;
150 
151  if (plane == 1) {
152  // east road
153  int n_east = 0;
154  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: Go to the East ";
155 
156  while (((next = theESNav.east()) != ESDetId(0) && next != strip)) {
157  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: East: " << n_east << " current strip is "
158  << next;
159 
160  vout.push_back(next);
161  ++n_east;
162  if (n_east == preshSeededNstr_)
163  break;
164  }
165  // west road
166  int n_west = 0;
167  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: Go to the West ";
168 
169  theESNav.home();
170  while (((next = theESNav.west()) != ESDetId(0) && next != strip)) {
171  LogTrace("EcalClusters") << "findPi0Road: West: " << n_west << " current strip is " << next;
172 
173  vout.push_back(next);
174  ++n_west;
175  if (n_west == preshSeededNstr_)
176  break;
177  }
178  LogTrace("EcalClusters")
179  << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: Total number of strips found in the road at 1-st plane is "
180  << n_east + n_west;
181 
182  } else if (plane == 2) {
183  // north road
184  int n_north = 0;
185  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: Go to the North ";
186 
187  while (((next = theESNav.north()) != ESDetId(0) && next != strip)) {
188  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: North: " << n_north
189  << " current strip is " << next;
190 
191  vout.push_back(next);
192  ++n_north;
193  if (n_north == preshSeededNstr_)
194  break;
195  }
196  // south road
197  int n_south = 0;
198  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: Go to the South ";
199 
200  theESNav.home();
201  while (((next = theESNav.south()) != ESDetId(0) && next != strip)) {
202  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: South: " << n_south
203  << " current strip is " << next;
204 
205  vout.push_back(next);
206  ++n_south;
207  if (n_south == preshSeededNstr_)
208  break;
209  }
210  LogTrace("EcalClusters")
211  << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: Total number of strips found in the road at 2-nd plane is "
212  << n_south + n_north;
213 
214  } else {
215  LogTrace("EcalClusters")
216  << "EndcapPiZeroDiscriminatorAlgo: findPi0Road: Wrong plane number, null cluster will be returned! ";
217 
218  } // end of if
219 
220  theESNav.home();
221 }
void home() const
move the navigator back to the starting point
Definition: CaloNavigator.h:96
T north() const
move the navigator north
Definition: CaloNavigator.h:30
T south() const
move the navigator south
Definition: CaloNavigator.h:36
#define LogTrace(id)
void setHome(const T &startingPoint)
set the starting position
Definition: CaloNavigator.h:90
T east() const
move the navigator east
Definition: CaloNavigator.h:42
T west() const
move the navigator west
Definition: CaloNavigator.h:48

◆ findPreshVector()

vector< float > EndcapPiZeroDiscriminatorAlgo::findPreshVector ( ESDetId  strip,
RecHitsMap rechits_map,
CaloSubdetectorTopology topology_p 
)

Definition at line 40 of file EndcapPiZeroDiscriminatorAlgo.cc.

References findPi0Road(), goodPi0Strip(), mps_fire::i, LogTrace, HLT_2022v12_cff::navigator, and digitizers_cfi::strip.

42  {
43  vector<float> vout_stripE;
44 
45  // skip if rechits_map contains no hits
46  if (rechits_map->empty()) {
47  edm::LogWarning("EndcapPiZeroDiscriminatorAlgo") << "RecHitsMap has size 0.";
48  return vout_stripE;
49  }
50 
51  vout_stripE.clear();
52 
53  vector<ESDetId> road_2d;
54  road_2d.clear();
55 
56  int plane = strip.plane();
57 
58  LogTrace("EcalClusters")
59  << "EndcapPiZeroDiscriminatorAlgo: findPreshVectors: Preshower Seeded Algorithm - looking for clusters"
60  << "n"
61  << "findPreshVectors: Preshower is intersected at strip " << strip.strip() << ", at plane " << plane;
62 
63  if (strip == ESDetId(0)) { //works in case of no intersected strip found
64  for (int i = 0; i < 11; i++) {
65  vout_stripE.push_back(-100.);
66  }
67  }
68 
69  // Add to the road the central strip
70  road_2d.push_back(strip);
71 
72  //Make a navigator, and set it to the strip cell.
74  navigator.setHome(strip);
75  //search for neighbours in the central road
76  findPi0Road(strip, navigator, plane, road_2d);
77 
78  LogTrace("EcalClusters")
79  << "EndcapPiZeroDiscriminatorAlgo:findPreshVectors: Total number of strips in the central road: "
80  << road_2d.size();
81 
82  // Find the energy of each strip
83  RecHitsMap::iterator final_strip = rechits_map->end();
84  // very dangerous, added a protection on the rechits_map->size()
85  // at the beginning of the method
86  final_strip--;
87  ESDetId last_stripID = final_strip->first;
88 
89  vector<ESDetId>::iterator itID;
90  for (itID = road_2d.begin(); itID != road_2d.end(); itID++) {
91  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPreshVectors: ID = " << *itID;
92 
93  float E = 0.;
94  RecHitsMap::iterator strip_it = rechits_map->find(*itID);
95  if (goodPi0Strip(strip_it, last_stripID)) { // continue if strip not found in rechit_map
96  E = strip_it->second.energy();
97  }
98  vout_stripE.push_back(E);
99  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: findPreshVectors: E = " << E;
100  }
101 
102  // ***ML beg***
103  // vector of size=11, content of vout_stripE is copied into vout_ElevenStrips_Energy
104  // to avoid problem in case number of strips is less than 11
105  vector<float> vout_ElevenStrips_Energy;
106  vout_ElevenStrips_Energy.reserve(11);
107  for (int i = 0; i < 11; i++) {
108  vout_ElevenStrips_Energy.push_back(0.);
109  }
110 
111  for (unsigned int i = 0; i < vout_stripE.size(); i++) {
112  vout_ElevenStrips_Energy[i] = vout_stripE.at(i);
113  }
114 
115  //return vout_stripE;
116  return vout_ElevenStrips_Energy;
117  // ***ML end***
118 }
void findPi0Road(ESDetId strip, EcalPreshowerNavigator &theESNav, int plane, std::vector< ESDetId > &vout)
#define LogTrace(id)
bool goodPi0Strip(RecHitsMap::iterator candidate_it, ESDetId lastID)
Log< level::Warning, false > LogWarning

◆ get_input_vector()

std::vector<float> const& EndcapPiZeroDiscriminatorAlgo::get_input_vector ( ) const
inline

Definition at line 50 of file EndcapPiZeroDiscriminatorAlgo.h.

References input_var.

50 { return input_var; }

◆ GetBarrelNNOutput()

float EndcapPiZeroDiscriminatorAlgo::GetBarrelNNOutput ( float  EB_Et)

Definition at line 592 of file EndcapPiZeroDiscriminatorAlgo.cc.

References EB_Hidden, EB_Indim, EB_Layers, EB_Outdim, getNNoutput(), input_var, LogTrace, and findQualityFiles::v.

592  {
593  float nnout = -1;
594  // Print the NN input variables that are related to the ECAL Barrel
595  // ------------------------------------------------------------------------
596  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo::GetBarrelNNoutput :nn_invar_presh = ";
597 
598  LogTrace("EcalCluster").log([&](auto& lt) {
599  for (auto const v : input_var) {
600  lt << v << " ";
601  }
602  });
603  LogTrace("EcalClusters") << " ";
604 
605  // select the appropriate Weigth file
606  int sel_wfile;
607  if (EB_Et < 25.0) {
608  sel_wfile = 0;
609  } else if (EB_Et >= 25.0 && EB_Et < 35.0) {
610  sel_wfile = 1;
611  } else if (EB_Et >= 35.0 && EB_Et < 45.0) {
612  sel_wfile = 2;
613  } else if (EB_Et >= 45.0 && EB_Et < 55.0) {
614  sel_wfile = 3;
615  } else {
616  sel_wfile = 4;
617  }
618  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: E_SC = " << EB_Et
619  << " and I select Weight file Number = " << sel_wfile;
620 
621  nnout = getNNoutput(
622  sel_wfile, EB_Layers, EB_Indim, EB_Hidden, EB_Outdim, 1); // calculate the nnoutput for the given ECAL object
623 
624  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: ===================> GetNNOutput : NNout = " << nnout;
625 
626  return nnout;
627 }
#define LogTrace(id)
float getNNoutput(int sel_wfile, int Layers, int Indim, int Hidden, int Outdim, int barrelstart) const

◆ GetNNOutput()

float EndcapPiZeroDiscriminatorAlgo::GetNNOutput ( float  EE_Et)

Definition at line 549 of file EndcapPiZeroDiscriminatorAlgo.cc.

References EE_Hidden, EE_Indim, EE_Layers, EE_Outdim, getNNoutput(), input_var, LogTrace, and findQualityFiles::v.

549  {
550  float nnout = -1;
551  // Print the NN input variables that are related to the Preshower + ECAL
552  // ------------------------------------------------------------------------
553  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo::GetNNoutput :nn_invar_presh = ";
554 
555  LogTrace("EcalClusters").log([&](auto& lt) {
556  for (auto const v : input_var) {
557  lt << v << " ";
558  }
559  });
560  LogTrace("EcalClusters") << " ";
561 
562  // select the appropriate Weigth file
563  int sel_wfile;
564  if (EE_Et < 25.0) {
565  sel_wfile = 0;
566  } else if (EE_Et >= 25.0 && EE_Et < 35.0) {
567  sel_wfile = 1;
568  } else if (EE_Et >= 35.0 && EE_Et < 45.0) {
569  sel_wfile = 2;
570  } else if (EE_Et >= 45.0 && EE_Et < 55.0) {
571  sel_wfile = 3;
572  } else {
573  sel_wfile = 4;
574  }
575 
576  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: Et_SC = " << EE_Et
577  << " and I select Weight file Number = " << sel_wfile;
578 
579  nnout = getNNoutput(
580  sel_wfile, EE_Layers, EE_Indim, EE_Hidden, EE_Outdim, 0); // calculate the nnoutput for the given ECAL object
581 
582  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: ===================> GetNNOutput : NNout = " << nnout;
583 
584  return nnout;
585 }
#define LogTrace(id)
float getNNoutput(int sel_wfile, int Layers, int Indim, int Hidden, int Outdim, int barrelstart) const

◆ getNNoutput()

float EndcapPiZeroDiscriminatorAlgo::getNNoutput ( int  sel_wfile,
int  Layers,
int  Indim,
int  Hidden,
int  Outdim,
int  barrelstart 
) const
private

Definition at line 297 of file EndcapPiZeroDiscriminatorAlgo.cc.

References Activation_fun(), EE_Hidden, EE_Indim, EE_Outdim, h, H_O_Weight_all, H_Thresh_all, mps_fire::i, I_H_Weight_all, input_var, LogTrace, CastorDigiReco::o1, O_Thresh_all, and CfgNavigationSchool_cfi::OUT.

Referenced by GetBarrelNNOutput(), and GetNNOutput().

298  {
299  float nnout = 0.0;
300  int mij;
301 
302  std::vector<float> I_SUM(size_t(Hidden), 0.0);
303  std::vector<float> OUT(size_t(Outdim), 0.0);
304 
305  for (int h = 0; h < Hidden; h++) {
306  mij = h - Hidden;
307  for (int i = 0; i < Indim; i++) {
308  mij = mij + Hidden;
309  I_SUM[h] += I_H_Weight_all[mij + sel_wfile * Indim * Hidden + barrelstart * Nfiles_EE * EE_Indim * EE_Hidden] *
310  input_var[i];
311  }
312  I_SUM[h] += H_Thresh_all[h + sel_wfile * Hidden + barrelstart * Nfiles_EE * EE_Hidden];
313  for (int o1 = 0; o1 < Outdim; o1++) {
314  OUT[o1] += H_O_Weight_all[barrelstart * Nfiles_EE * EE_Outdim * EE_Hidden + h * Outdim + o1 +
315  sel_wfile * Outdim * Hidden] *
316  Activation_fun(I_SUM[h]);
317  }
318  }
319  for (int o2 = 0; o2 < Outdim; o2++) {
320  OUT[o2] += O_Thresh_all[barrelstart * Nfiles_EE * EE_Outdim + o2 + sel_wfile * Outdim];
321  }
322  nnout = Activation_fun(OUT[0]);
323  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: getNNoutput :: -> NNout = " << nnout;
324 
325  return (nnout);
326 }
#define LogTrace(id)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4

◆ goodPi0Strip()

bool EndcapPiZeroDiscriminatorAlgo::goodPi0Strip ( RecHitsMap::iterator  candidate_it,
ESDetId  lastID 
)

Definition at line 121 of file EndcapPiZeroDiscriminatorAlgo.cc.

References LogTrace, and preshStripEnergyCut_.

Referenced by findPreshVector().

121  {
122  RecHitsMap::iterator candidate_tmp = candidate_it;
123  candidate_tmp--;
124 
125  // crystal should not be included...
126  if (candidate_tmp->first == lastID) // ...if it corresponds to a hit
127  {
128  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: goodPi0Strip No such a strip in rechits_map ";
129  return false;
130  } else if (candidate_it->second.energy() <= preshStripEnergyCut_) // ...if it has a negative or zero energy
131  {
132  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: goodPi0Strip Strip energy "
133  << candidate_it->second.energy() << " is below threshold ";
134  return false;
135  }
136 
137  return true;
138 }
#define LogTrace(id)

◆ readWeightFile()

void EndcapPiZeroDiscriminatorAlgo::readWeightFile ( const char *  WFile,
int &  Layers,
int &  Indim,
int &  Hidden,
int &  Outdim 
)
private

Definition at line 228 of file EndcapPiZeroDiscriminatorAlgo.cc.

References cms::cuda::assert(), Exception, H_O_Weight_all, H_Thresh_all, mps_fire::i, I_H_Weight_all, dqmiolumiharvest::j, mps_splice::line, LogTrace, O_Thresh_all, and HLT_2022v12_cff::weights.

229  {
230  FILE* weights = nullptr;
231 
232  char line[80];
233 
234  bool checkinit = false;
235  // Open the weights file, generated by jetnet, and read
236  // in the nodes and weights
237  //*******************************************************
238  weights = fopen(Weights_file, "r");
239  LogTrace("EcalClusters") << "EndcapPiZeroDiscriminatorAlgo: I opeded the Weights file = " << Weights_file;
240  if (weights == nullptr) {
241  throw cms::Exception("MissingWeightFile") << "Could not open the weights file: " << Weights_file;
242  }
243 
244  const auto I_H_W_offset = I_H_Weight_all.size();
245  const auto H_O_W_offset = H_O_Weight_all.size();
246  const auto H_T_offset = H_Thresh_all.size();
247  const auto O_T_offset = O_Thresh_all.size();
248 
249  while (!feof(weights)) {
250  fscanf(weights, "%s", line);
251  if (line[0] == 'A') { //Read in ANN nodes: Layers, input , Hidden, Output
252  fscanf(weights, "%d", &Layers); // # of NN Layers used
253  fscanf(weights, "%d", &Indim); // # of Inputs actually used
254  fscanf(weights, "%d", &Hidden); // # of hidden nodes
255  fscanf(weights, "%d", &Outdim); // # of output nodes
256 
257  I_H_Weight_all.resize(I_H_W_offset + Indim * Hidden);
258  H_Thresh_all.resize(H_T_offset + Hidden);
259  H_O_Weight_all.resize(H_O_W_offset + Hidden * Outdim);
260  O_Thresh_all.resize(O_T_offset + Outdim);
261  checkinit = true;
262  } else if (line[0] == 'B') { // read in weights between hidden and intput nodes
263  assert(checkinit);
264  for (int i = 0; i < Indim; i++) {
265  for (int j = 0; j < Hidden; j++) {
266  fscanf(weights, "%f", &I_H_Weight_all[I_H_W_offset + i * Hidden + j]);
267  }
268  }
269  } else if (line[0] == 'C') { // Read in the thresholds for hidden nodes
270  assert(checkinit);
271  for (int i = 0; i < Hidden; i++) {
272  fscanf(weights, "%f", &H_Thresh_all[H_T_offset + i]);
273  }
274  } else if (line[0] == 'D') { // read in weights between hidden and output nodes
275  assert(checkinit);
276  for (int i = 0; i < Hidden * Outdim; i++) {
277  fscanf(weights, "%f", &H_O_Weight_all[H_O_W_offset + i]);
278  }
279  } else if (line[0] == 'E') { // read in the threshold for the output nodes
280  assert(checkinit);
281  for (int i = 0; i < Outdim; i++) {
282  fscanf(weights, "%f", &O_Thresh_all[O_T_offset + i]);
283  }
284  } else {
285  edm::LogError("EEPi0Discrim") << "EndcapPiZeroDiscriminatorAlgo: Not a Net file of Corrupted Net file " << endl;
286  }
287  }
288  fclose(weights);
289 }
Log< level::Error, false > LogError
assert(be >=bs)
#define LogTrace(id)

Member Data Documentation

◆ debugLevel_

int EndcapPiZeroDiscriminatorAlgo::debugLevel_
private

Definition at line 59 of file EndcapPiZeroDiscriminatorAlgo.h.

◆ EB_Hidden

int EndcapPiZeroDiscriminatorAlgo::EB_Hidden
private

Definition at line 62 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by GetBarrelNNOutput().

◆ EB_Indim

int EndcapPiZeroDiscriminatorAlgo::EB_Indim
private

◆ EB_Layers

int EndcapPiZeroDiscriminatorAlgo::EB_Layers
private

Definition at line 62 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by GetBarrelNNOutput().

◆ EB_Outdim

int EndcapPiZeroDiscriminatorAlgo::EB_Outdim
private

Definition at line 62 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by GetBarrelNNOutput().

◆ EE_Hidden

int EndcapPiZeroDiscriminatorAlgo::EE_Hidden
private

Definition at line 61 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by GetNNOutput(), and getNNoutput().

◆ EE_Indim

int EndcapPiZeroDiscriminatorAlgo::EE_Indim
private

◆ EE_Layers

int EndcapPiZeroDiscriminatorAlgo::EE_Layers
private

Definition at line 61 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by GetNNOutput().

◆ EE_Outdim

int EndcapPiZeroDiscriminatorAlgo::EE_Outdim
private

Definition at line 61 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by GetNNOutput(), and getNNoutput().

◆ H_O_Weight_all

std::vector<float> EndcapPiZeroDiscriminatorAlgo::H_O_Weight_all
private

Definition at line 65 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by getNNoutput(), and readWeightFile().

◆ H_Thresh_all

std::vector<float> EndcapPiZeroDiscriminatorAlgo::H_Thresh_all
private

Definition at line 66 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by getNNoutput(), and readWeightFile().

◆ I_H_Weight_all

std::vector<float> EndcapPiZeroDiscriminatorAlgo::I_H_Weight_all
private

Definition at line 64 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by getNNoutput(), and readWeightFile().

◆ input_var

std::vector<float> EndcapPiZeroDiscriminatorAlgo::input_var
private

◆ O_Thresh_all

std::vector<float> EndcapPiZeroDiscriminatorAlgo::O_Thresh_all
private

Definition at line 67 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by getNNoutput(), and readWeightFile().

◆ preshSeededNstr_

int EndcapPiZeroDiscriminatorAlgo::preshSeededNstr_
private

Definition at line 58 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by findPi0Road().

◆ preshStripEnergyCut_

double EndcapPiZeroDiscriminatorAlgo::preshStripEnergyCut_
private

Definition at line 57 of file EndcapPiZeroDiscriminatorAlgo.h.

Referenced by goodPi0Strip().