ATLAS Offline Software
DNNCaloSimSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // DNNCaloSimSvc.cxx, (c) ATLAS Detector software //
8 
9 // class header include
10 #include "DNNCaloSimSvc.h"
11 
12 
13 // FastCaloSim includes
20 
21 //calculators
23 
28 #include "CaloIdentifier/TileID.h"
30 
31 // StoreGate
32 #include "StoreGate/StoreGateSvc.h"
33 
34 #include "CaloDetDescr/CaloDetDescrElement.h"
40 
42 
43 #include "lwtnn/parse_json.hh"
44 
45 #include "TFile.h"
46 #include <fstream>
47 #include "CLHEP/Random/RandGaussZiggurat.h"
48 #include "CLHEP/Random/RandFlat.h"
49 #include "CLHEP/Units/SystemOfUnits.h"
50 
51 using std::abs;
52 using std::atan2;
53 
55 ISF::DNNCaloSimSvc::DNNCaloSimSvc(const std::string& name, ISvcLocator* svc) :
57  m_graph(nullptr),
58  m_theContainer(nullptr),
59  m_rndGenSvc("AtRndmGenSvc", name),
60  m_randomEngine(nullptr),
61  m_caloDetDescrManager(nullptr),
62  m_caloGeo(nullptr)
63 {
64  declareProperty("ParamsInputFilename" , m_paramsFilename="DNNCaloSim/DNNCaloSim_GAN_nn_v0.json"," lwtnn json output describing the trained network");
65  declareProperty("ParamsInputArchitecture" , m_paramsInputArchitecture="GANv0","tag describing additional parameters necessary for the network");
66  declareProperty("CaloCellsOutputName" , m_caloCellsOutputName) ;
67  declareProperty("CaloCellMakerTools_setup" , m_caloCellMakerToolsSetup) ;
68  declareProperty("CaloCellMakerTools_release" , m_caloCellMakerToolsRelease) ;
69  declareProperty("RandomSvc" , m_rndGenSvc );
70  declareProperty("RandomStream" , m_randomEngineName );
71  declareProperty("FastCaloSimCaloExtrapolation" , m_FastCaloSimCaloExtrapolation );
72 
73 }
74 
76 = default;
77 
80 {
81 
82  ATH_MSG_INFO(m_screenOutputPrefix << "Initializing ...");
83 
84  ATH_CHECK(m_rndGenSvc.retrieve());
85  m_randomEngine = m_rndGenSvc->GetEngine( m_randomEngineName);
86  if(!m_randomEngine)
87  {
88  ATH_MSG_ERROR("Could not get random number engine from RandomNumberService. Abort.");
89  return StatusCode::FAILURE;
90  }
91 
92  m_caloDetDescrManager = detStore()->tryConstRetrieve<CaloDetDescrManager>(caloMgrStaticKey);
93  if(!m_caloDetDescrManager) {
94  std::unique_ptr<CaloDetDescrManager> caloMgrPtr = buildCaloDetDescrNoAlign(serviceLocator()
96  ATH_CHECK(detStore()->record(std::move(caloMgrPtr), caloMgrStaticKey));
97  ATH_CHECK(detStore()->retrieve(m_caloDetDescrManager, caloMgrStaticKey));
98  }
99 
100  const FCALDetectorManager * fcalManager=nullptr;
101  ATH_CHECK(detStore()->retrieve(fcalManager));
102 
103  // cppcheck-suppress nullPointerRedundantCheck; false positive
104  const CaloIdManager* caloId_mgr = m_caloDetDescrManager->getCalo_Mgr();
105  m_emID = caloId_mgr->getEM_ID();
106 
107  m_caloGeo = std::make_unique<CaloGeometryFromCaloDDM>();
108  m_caloGeo->LoadGeometryFromCaloDDM(m_caloDetDescrManager);
109  if(!m_caloGeo->LoadFCalChannelMapFromFCalDDM(fcalManager) )ATH_MSG_FATAL("Found inconsistency between FCal_Channel map and GEO file. Please, check if they are configured properly.");
110 
111 
112  // initialize DNN
113  if (initializeNetwork().isFailure())
114  {
115  ATH_MSG_ERROR("Could not initialize network ");
116  return StatusCode::FAILURE;
117 
118  }
119 
120 
121  // Get FastCaloSimCaloExtrapolation
122  if(m_FastCaloSimCaloExtrapolation.retrieve().isFailure())
123  {
124  ATH_MSG_ERROR("FastCaloSimCaloExtrapolation not found ");
125  return StatusCode::FAILURE;
126  }
127 
128  m_windowCells.reserve(m_numberOfCellsForDNN);
129 
130 
131 
132  return StatusCode::SUCCESS;
133 }
134 
135 // initialize lwtnn network
137 {
138 
139 
140 
141  // get neural net JSON file as an std::istream object
142  std::string inputFile=PathResolverFindCalibFile(m_paramsFilename);
143  if (inputFile.empty()){
144  ATH_MSG_ERROR("Could not find json file " << m_paramsFilename );
145  return StatusCode::FAILURE;
146  }
147 
148 
149 
150  ATH_MSG_INFO("Using json file " << inputFile );
151  std::ifstream input(inputFile);
152  // build the graph
153  m_graph=std::make_unique<lwt::LightweightGraph>(lwt::parse_json_graph(input) );
154  if (m_graph==nullptr){
155  ATH_MSG_ERROR("Could not create LightWeightGraph from " << m_paramsFilename );
156  return StatusCode::FAILURE;
157  }
158 
159 
160 
161  // initialize all necessary constants
162  // FIXME eventually all these could be stored in the .json file
163 
164  ATH_MSG_INFO("Using ParamsInputArchitecture: " << m_paramsInputArchitecture );
165  if (m_paramsInputArchitecture=="GANv0") // GAN then VAE etc...
166  {
167  m_GANLatentSize = 300;
168  m_logTrueEnergyMean = 9.70406053;
169  m_logTrueEnergyScale = 1.76099569;
170  m_riImpactEtaMean = 3.47603256e-05;
171  m_riImpactEtaScale = 0.00722316;
172  m_riImpactPhiMean = -5.42153684e-05;
173  m_riImpactPhiScale = 0.00708241;
174  }
175 
176  if (m_GANLatentSize==0){
177  ATH_MSG_ERROR("m_GANLatentSize uninitialized!.ParamsInputArchitecture= " << m_paramsInputArchitecture );
178  return StatusCode::FAILURE;
179  }
180 
181  return StatusCode::SUCCESS;
182 }
183 
186 {
187  ATH_MSG_INFO(m_screenOutputPrefix << "Finalizing ...");
188  return StatusCode::SUCCESS;
189 }
190 
192 {
193  const EventContext& ctx = Gaudi::Hive::currentContext();
194  ATH_MSG_INFO(m_screenOutputPrefix << "setupEvent NEW EVENT! ");
195 
196  m_theContainer = new CaloCellContainer(SG::VIEW_ELEMENTS);
197 
198  StatusCode sc = evtStore()->record(m_theContainer, m_caloCellsOutputName);
199  if (sc.isFailure())
200  {
201  ATH_MSG_FATAL( m_screenOutputPrefix << "cannot record CaloCellContainer " << m_caloCellsOutputName );
202  return StatusCode::FAILURE;
203  }
204 
205  //FIXME why retrieve every event ?
206  CHECK( m_caloCellMakerToolsSetup.retrieve() );
207  ATH_MSG_DEBUG( "Successfully retrieve CaloCellMakerTools: " << m_caloCellMakerToolsSetup );
208  ToolHandleArray<ICaloCellMakerTool>::iterator itrTool = m_caloCellMakerToolsSetup.begin();
209  ToolHandleArray<ICaloCellMakerTool>::iterator endTool = m_caloCellMakerToolsSetup.end();
210  for (; itrTool != endTool; ++itrTool)
211  {
212  std::string chronoName=this->name()+"_"+ itrTool->name();
213  if (m_chrono) m_chrono->chronoStart(chronoName);
214  StatusCode sc = (*itrTool)->process(m_theContainer, ctx);
215  if (m_chrono) {
216  m_chrono->chronoStop(chronoName);
217  ATH_MSG_DEBUG( m_screenOutputPrefix << "Chrono stop : delta " << m_chrono->chronoDelta (chronoName,IChronoStatSvc::USER) * CLHEP::microsecond / CLHEP::second << " second " );
218  }
219 
220  if (sc.isFailure())
221  {
222  ATH_MSG_ERROR( m_screenOutputPrefix << "Error executing tool " << itrTool->name() );
223  return StatusCode::FAILURE;
224  }
225  }
226 
227 
228  // FIXME just for debugging
229  // exercise window building
230  // should be false by default
231  // careful:if enabled change the random number sequence !
232  if (false){
233  TFCSSimulationState testsimulstate(m_randomEngine);
234  const CaloDetDescrElement * testImpactCellDDE;
235  const int ntrial=100;
236  ATH_MSG_INFO ("Trial window building on " << ntrial << " dummy eta phi " );
237  for (int i=0 ; i< ntrial ; i++){
238  const double eta = CLHEP::RandFlat::shoot(testsimulstate.randomEngine(), 0.2, 0.25);
239  const double phi = CLHEP::RandFlat::shoot(testsimulstate.randomEngine(), -CLHEP::pi , CLHEP::pi);
240 
241  //randomise eta, phi
242  if (fillWindowCells(eta,phi,testImpactCellDDE).isFailure()){
243  ATH_MSG_WARNING("Could not build trial window cells vector with eta " << eta << " phi " << phi);
244  }
245  }
246  ATH_MSG_INFO ("End of trial window building on " << ntrial << " dummy eta phi " );
247 
248  }
249 
250 
251 
252 
253  return StatusCode::SUCCESS;
254 }
255 
257 {
258  const EventContext& ctx = Gaudi::Hive::currentContext();
259  ATH_MSG_VERBOSE(m_screenOutputPrefix << "release Event");
260 
261  CHECK( m_caloCellMakerToolsRelease.retrieve() );
262 
263  //run release tools in a loop
264  ToolHandleArray<ICaloCellMakerTool>::iterator itrTool = m_caloCellMakerToolsRelease.begin();
265  ToolHandleArray<ICaloCellMakerTool>::iterator endTool = m_caloCellMakerToolsRelease.end();
266  for (; itrTool != endTool; ++itrTool)
267  {
268  ATH_MSG_VERBOSE( m_screenOutputPrefix << "Calling tool " << itrTool->name() );
269 
270  StatusCode sc = (*itrTool)->process(m_theContainer, ctx);
271 
272  if (sc.isFailure())
273  {
274  ATH_MSG_ERROR( m_screenOutputPrefix << "Error executing tool " << itrTool->name() );
275  }
276  }
277 
278  return StatusCode::SUCCESS;
279 
280 }
282 {
283  CaloCell_ID::CaloSample aSampling = a->caloDDE()->getSampling();
284  CaloCell_ID::CaloSample bSampling = b->caloDDE()->getSampling();
285 
286  float aEtaRaw = a->caloDDE()->eta_raw();
287  float bEtaRaw = b->caloDDE()->eta_raw();
288 
289  float aPhiRaw = a->caloDDE()->phi_raw();
290  float bPhiRaw = b->caloDDE()->phi_raw();
291 
292  if ((aSampling) < (bSampling))
293  return true;
294  else if ((aSampling) > (bSampling))
295  return false;
296  // reverse sort in eta for left half of detector
297  if ((aEtaRaw) < (bEtaRaw))
298  return false;
299  else if ((aEtaRaw) > (bEtaRaw))
300  return true;
301 
302  return CaloPhiRange::diff(aPhiRaw, bPhiRaw) <= 0;
303 }
304 
306 {
307  CaloCell_ID::CaloSample aSampling = a->caloDDE()->getSampling();
308  CaloCell_ID::CaloSample bSampling = b->caloDDE()->getSampling();
309 
310  float aEtaRaw = a->caloDDE()->eta_raw();
311  float bEtaRaw = b->caloDDE()->eta_raw();
312 
313  float aPhiRaw = a->caloDDE()->phi_raw();
314  float bPhiRaw = b->caloDDE()->phi_raw();
315 
316  if ((aSampling) < (bSampling))
317  return true;
318  else if ((aSampling) > (bSampling))
319  return false;
320 
321  if ((aEtaRaw) < (bEtaRaw))
322  return true;
323  else if ((aEtaRaw) > (bEtaRaw))
324  return false;
325 
326 return CaloPhiRange::diff(aPhiRaw, bPhiRaw) <= 0;
327 }
328 
331 {
332 
333  ATH_MSG_VERBOSE("NEW PARTICLE! DNNCaloSimSvc called with ISFParticle: " << isfp);
334 
335 
336  //Don't simulate particles with total energy below 10 MeV
337  if(isfp.ekin() < 10) {
338  ATH_MSG_VERBOSE("Skipping particle with Ekin: " << isfp.ekin() <<" MeV. Below the 10 MeV threshold.");
339  return StatusCode::SUCCESS;
340  }
341 
342 
343  //Compute all inputs to the network
345  double trueEnergy;
346  if (fillNetworkInputs(isfp,inputs,trueEnergy).isFailure()) {
347  ATH_MSG_WARNING("Could not initialize network ");
348  // bail out but do not stop the job
349  return StatusCode::SUCCESS;
350  }
351 
352 
353  // compute the network output values
354  ATH_MSG_VERBOSE("neural network input = "<<inputs);
355  NetworkOutputs outputs = m_graph->compute(inputs);
356  ATH_MSG_VERBOSE("neural network output = "<<outputs);
357 
358 
359  // add network output energy in the right place in the calorimeter
360  int itr = 0;
361  for ( auto & windowCell : m_windowCells) {
362  windowCell->addEnergy(trueEnergy * outputs[std::to_string(itr)]);
363  itr++;
364 
365  ATH_MSG_VERBOSE(" cell eta_raw " << windowCell->caloDDE()->eta_raw()
366  << " phi_raw " << windowCell->caloDDE()->phi_raw()
367  << " sampling " << windowCell->caloDDE()->getSampling()
368  << " energy " << windowCell->energy());
369  }
370 
371 
372 
373 
374 
375  return StatusCode::SUCCESS;
376 }
377 
378 
379 
380 // compute all the necessary inputs to the network
382 {
383  Amg::Vector3D particle_position = isfp.position();
384  Amg::Vector3D particle_direction(isfp.momentum().x(),isfp.momentum().y(),isfp.momentum().z());
385 
386 
387  TFCSTruthState truth(isfp.momentum().x(),isfp.momentum().y(),isfp.momentum().z(),sqrt(isfp.momentum().mag2()+pow(isfp.mass(),2)),isfp.pdgCode());
388  truth.set_vertex(particle_position[Amg::x], particle_position[Amg::y], particle_position[Amg::z]);
389 
390  trueEnergy = isfp.ekin();
391 
392 
394  //FIXME this is extrapolating to many layers, when we only need middle layer middle surface
395  //FIXME could have dedicated extrapolation to save time
396  m_FastCaloSimCaloExtrapolation->extrapolate(extrapol,&truth);
397  // extrapol.Print();
398 
399 
400  if (false)
401  {
402  for (int isam=0; isam< CaloCell_ID_FCS::MaxSample ; isam++){
403  //enum SUBPOS { SUBPOS_MID = 0, SUBPOS_ENT = 1, SUBPOS_EXT = 2}; //MID=middle, ENT=entrance, EXT=exit of cal layer
404 
405  for (int isubpos=0; isubpos< 3 ; isubpos++){
406 
407  ATH_MSG_VERBOSE("EXTRAPO isam=" << isam <<
408  " isubpos=" << isubpos <<
409  " OK=" << extrapol.OK(isam,isubpos) <<
410  " eta=" << extrapol.eta(isam,isubpos) <<
411  " phi=" << extrapol.phi(isam,isubpos) <<
412  " r=" << extrapol.r(isam,isubpos) );
413 
414  }
415  }
416  }
417 
418  //FIXME deal with endcap as well
419  int isam=CaloCell_ID_FCS::EMB2;
420  int isubpos=SUBPOS_ENT;
421  double etaExtrap=-999.;
422  double phiExtrap=-999.;
423  if (extrapol.eta(isam,isubpos)) {
424  etaExtrap=extrapol.eta(isam,isubpos);
425  phiExtrap=extrapol.phi(isam,isubpos);
426  }
427 
428  ATH_MSG_VERBOSE("Will use isam=" << isam <<
429  " isubpos=" << isubpos <<
430  " eta=" << etaExtrap <<
431  " phi=" << phiExtrap );
432 
433 
434 
435  // fill vector of cells, and DDE of middle cell
436  const CaloDetDescrElement * impactCellDDE;
437  if (fillWindowCells(etaExtrap,phiExtrap,impactCellDDE).isFailure()){
438  ATH_MSG_WARNING("Could not build window cells vector ");
439  return StatusCode::FAILURE;
440  }
441 
442 
443  // start neural network part
444  // fill a map of input nodes
445  // this is for GAN
446  // most likely it should be specialised as a function of m_ParamsInputArchitecture
447 
448  double randGaussz = 0.;
449 
450 
451  int impactEtaIndex = m_emID->eta(impactCellDDE->identify());
452  int impactPhiIndex = m_emID->phi(impactCellDDE->identify());
453  double etaRawImpactCell=impactCellDDE->eta_raw();
454  double phiRawImpactCell=impactCellDDE->phi_raw();
455 
456  ATH_MSG_VERBOSE("impact eta_index " << impactEtaIndex
457  << " phi_index " << impactPhiIndex
458  << " sampling " << m_emID->sampling(impactCellDDE->identify()));
459 
460  int pconf = impactPhiIndex % 4 ;
461  int econf = (impactEtaIndex + 1) % 2 ; // ofset corresponds to difference in index calculated for neural net preprocessing
462 
463  double riImpactEta = (etaExtrap - etaRawImpactCell);
464  // mirror for left half
465  if (etaExtrap < 0){
466  riImpactEta *= -1.;
467 
468  }
469  // scale & centre
470  riImpactEta = (riImpactEta - m_riImpactEtaMean)/m_riImpactEtaScale;
471  double riImpactPhi = (CaloPhiRange::diff(phiExtrap, phiRawImpactCell) - m_riImpactPhiMean)/m_riImpactPhiScale;
472 
473 
474  // fill randomize latent space
475  TFCSSimulationState simulstate(m_randomEngine);
476 
477  //FIXME generate in one go
478  for (int i = 0; i< m_GANLatentSize; i ++)
479  {
480  randGaussz = CLHEP::RandGaussZiggurat::shoot(simulstate.randomEngine(), 0., 1.);
481  inputs["Z"].insert ( std::pair<std::string,double>(std::to_string(i), randGaussz) );
482 
483  }
484 
485  // fill preprocessed true energy
486  inputs["E_true"].insert ( std::pair<std::string,double>("0", (std::log(trueEnergy) - m_logTrueEnergyMean)/m_logTrueEnergyScale) );
487  // fill p,e configurations multi-hot vector
488  for (int i = 0; i< 4; i ++)
489  {
490  if (i == pconf){
491  inputs["pconfig"].insert ( std::pair<std::string,double>(std::to_string(i),1.) );
492  }
493  else{
494  inputs["pconfig"].insert ( std::pair<std::string,double>(std::to_string(i),0.) );
495  }
496  }
497  for (int i = 0; i< 2; i ++){
498  if (i == econf){
499  inputs["econfig"].insert ( std::pair<std::string,double>(std::to_string(i),1.) );
500  }
501  else{
502  inputs["econfig"].insert ( std::pair<std::string,double>(std::to_string(i),0.) );
503  }
504  }
505  // fill position of extrap particle in impact cell
506  inputs["ripos"].insert ( std::pair<std::string,double>("0", riImpactEta) );
507  inputs["ripos"].insert ( std::pair<std::string,double>("1", riImpactPhi ) );
508 
509  return StatusCode::SUCCESS;
510 }
511 
512 
513 StatusCode ISF::DNNCaloSimSvc::fillWindowCells(const double etaExtrap,const double phiExtrap,const CaloDetDescrElement* & impactCellDDE) {
514 
515  //now find the cell it corresponds to
516  //FIXME this is barrel should also look in endcap
517  // (note that is really looking up eta, phi, not raw eta phi
518  impactCellDDE=m_caloDetDescrManager->get_element(CaloCell_ID::EMB2,etaExtrap,phiExtrap);
519  if (impactCellDDE==nullptr){
520  ATH_MSG_WARNING("No cell found for this eta " << etaExtrap << " phi " << phiExtrap);
521  return StatusCode::FAILURE;
522  }
523 
524 
525 
526 
527  const int caloHashImpactCell=impactCellDDE->calo_hash();
528  const double etaImpactCell=impactCellDDE->eta();
529  const double phiImpactCell=impactCellDDE->phi();
530  const double etaRawImpactCell=impactCellDDE->eta_raw();
531  const double phiRawImpactCell=impactCellDDE->phi_raw();
532 
533 
534  ATH_MSG_VERBOSE("impact cell calohash=" << caloHashImpactCell <<
535  " eta=" << etaImpactCell <<
536  " phi=" << phiImpactCell <<
537  " eta raw=" << etaRawImpactCell <<
538  " phi raw=" << phiRawImpactCell );
539 
540 
541  int nSqCuts = 0;
542 
543 
544  // select the cells DNN will simulate
545  // note that m_theCellContainer has all the calorimeter cells
546  // this will hold the list of cells to simulate
547  //FIXME this can be sped up certainly
548  m_windowCells.clear();
549  CaloCell_ID::CaloSample sampling;
550  float eta_raw;
551  float phi_raw;
552  for(CaloCell* theCell : * m_theContainer) {
553  sampling = theCell->caloDDE()->getSampling();
554  eta_raw = theCell->caloDDE()->eta_raw();
555  phi_raw = theCell->caloDDE()->phi_raw();
556  if (( eta_raw < etaRawImpactCell + m_etaRawBackCut) && (eta_raw > etaRawImpactCell - m_etaRawBackCut)) {
557  if ((CaloPhiRange::diff(phi_raw, phiRawImpactCell) < m_phiRawStripCut ) && (CaloPhiRange::diff(phi_raw, phiRawImpactCell) > - m_phiRawStripCut) ) {
558 
559  }
560  else{
561  continue;
562  }
563  }
564  else{
565  continue;
566  }
567 
568  if ((sampling == 0) || (sampling == 1) ){
569  if ((eta_raw < etaRawImpactCell + m_etaRawMiddleCut) && (eta_raw > etaRawImpactCell - m_etaRawMiddleCut)) {
570  nSqCuts ++;
571  // add to vector
572  m_windowCells.push_back(theCell);
573 
574  }
575  }
576  else if(sampling == 2) {
577  if ((CaloPhiRange::diff(phi_raw , phiRawImpactCell) < m_phiRawMiddleCut) && (CaloPhiRange::diff(phi_raw, phiRawImpactCell) > - m_phiRawMiddleCut)) {
578  if ((eta_raw < etaRawImpactCell + m_etaRawMiddleCut) && (eta_raw > etaRawImpactCell - m_etaRawMiddleCut)) {
579  nSqCuts ++;
580  m_windowCells.push_back(theCell);
581  }
582  }
583  }
584 
585  else if(sampling == 3){
586  if ((CaloPhiRange::diff(phi_raw, phiRawImpactCell) < m_phiRawMiddleCut) && (CaloPhiRange::diff(phi_raw , phiRawImpactCell) > - m_phiRawMiddleCut )) {
587  nSqCuts ++;
588  m_windowCells.push_back(theCell);
589  }
590 
591  }
592  }
593 
594  if (nSqCuts != m_numberOfCellsForDNN){
595  ATH_MSG_WARNING("Total cells passing DNN selection is " << nSqCuts << " but should be " << m_numberOfCellsForDNN );
596  // bail out, but do not stop the job
597  return StatusCode::FAILURE;
598 
599  }
600 
601  //sort cells within the cluster like they are fed to DNN
602  if (etaRawImpactCell < 0){
603  std::sort(m_windowCells.begin(), m_windowCells.end(), &compCellsForDNNSortMirror);
604  }
605  else{
606  std::sort(m_windowCells.begin(), m_windowCells.end(), &compCellsForDNNSort);
607  }
608 
609  return StatusCode::SUCCESS;
610 
611 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
ISF::ISFParticle::ekin
double ekin() const
Kinetic energy.
ISF::DNNCaloSimSvc::NetworkOutputs
std::map< std::string, double > NetworkOutputs
Definition: DNNCaloSimSvc.h:76
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
ISF::DNNCaloSimSvc::m_paramsInputArchitecture
std::string m_paramsInputArchitecture
Definition: DNNCaloSimSvc.h:87
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
FCALDetectorManager
A manager class providing access to readout geometry information for the forward calorimeter.
Definition: FCALDetectorManager.h:29
LArEM_ID.h
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
ISF::DNNCaloSimSvc::setupEvent
virtual StatusCode setupEvent() override final
Setup Event chain - in case of a begin-of event action is needed.
Definition: DNNCaloSimSvc.cxx:191
FCALDetectorManager.h
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloIdManager::getEM_ID
const LArEM_ID * getEM_ID(void) const
Definition: CaloIdManager.cxx:80
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
ISF::DNNCaloSimSvc::simulate
virtual StatusCode simulate(ISFParticle &isp, McEventCollection *) override final
Simulation Call.
Definition: DNNCaloSimSvc.cxx:330
Amg::y
@ y
Definition: GeoPrimitives.h:35
compCellsForDNNSortMirror
bool compCellsForDNNSortMirror(const CaloCell *a, const CaloCell *b)
Definition: DNNCaloSimSvc.cxx:281
ISF::ISFParticle
Definition: ISFParticle.h:42
python.SystemOfUnits.microsecond
int microsecond
Definition: SystemOfUnits.py:122
ISF::ISFParticle::pdgCode
int pdgCode() const
PDG value.
TFCSExtrapolationState
Definition: TFCSExtrapolationState.h:13
TFCSSimulationState::randomEngine
CLHEP::HepRandomEngine * randomEngine()
Definition: TFCSSimulationState.h:36
RunActsMaterialValidation.extrapol
extrapol
Definition: RunActsMaterialValidation.py:90
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
postInclude.inputs
inputs
Definition: postInclude.SortInput.py:15
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
CaloDetDescrManager.h
Definition of CaloDetDescrManager.
pi
#define pi
Definition: TileMuonFitter.cxx:65
TileID.h
ISF::DNNCaloSimSvc::fillWindowCells
StatusCode fillWindowCells(const double etaExtrap, const double phiExtrap, const CaloDetDescrElement *&impactCellDDE)
Definition: DNNCaloSimSvc.cxx:513
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
CaloDetDescrElement::eta_raw
float eta_raw() const
cell eta_raw
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:350
RunTileCalibRec.CaloCellContainer
CaloCellContainer
Definition: RunTileCalibRec.py:403
ISF::DNNCaloSimSvc::m_caloCellMakerToolsSetup
ToolHandleArray< ICaloCellMakerTool > m_caloCellMakerToolsSetup
Definition: DNNCaloSimSvc.h:91
ISF::ISFParticle::position
const Amg::Vector3D & position() const
The current position of the ISFParticle.
TFCSParametrizationBase.h
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
CaloCell_ID_FCS::EMB2
@ EMB2
Definition: FastCaloSim_CaloCell_ID.h:21
CaloGeometryFromCaloDDM.h
CaloDetDescrElement::identify
Identifier identify() const override final
cell identifier
Definition: CaloDetDescrElement.cxx:64
Amg::z
@ z
Definition: GeoPrimitives.h:36
CaloCell_ID_FCS::MaxSample
@ MaxSample
Definition: FastCaloSim_CaloCell_ID.h:47
ISF::DNNCaloSimSvc::NetworkInputs
std::map< std::string, std::map< std::string, double > > NetworkInputs
Definition: DNNCaloSimSvc.h:75
IdDictParser.h
CaloDetDescrElement::calo_hash
IdentifierHash calo_hash() const
cell calo hash
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:412
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CaloIdManager
This class initializes the Calo (LAr and Tile) offline identifiers.
Definition: CaloIdManager.h:45
constants.EMB2
int EMB2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:54
CaloCondBlobAlgs_fillNoiseFromASCII.inputFile
string inputFile
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:17
lumiFormat.i
int i
Definition: lumiFormat.py:85
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
ISF::DNNCaloSimSvc::m_FastCaloSimCaloExtrapolation
ToolHandle< IFastCaloSimCaloExtrapolation > m_FastCaloSimCaloExtrapolation
Definition: DNNCaloSimSvc.h:94
ISF::DNNCaloSimSvc::m_paramsFilename
std::string m_paramsFilename
Definition: DNNCaloSimSvc.h:86
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
DNNCaloSimSvc.h
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Amg::x
@ x
Definition: GeoPrimitives.h:34
ISF::DNNCaloSimSvc::m_caloCellsOutputName
std::string m_caloCellsOutputName
Definition: DNNCaloSimSvc.h:129
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
ISF::DNNCaloSimSvc::finalize
virtual StatusCode finalize() override final
framework methods
Definition: DNNCaloSimSvc.cxx:185
CaloPhiRange.h
CaloPhiRange class declaration.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
ISF::DNNCaloSimSvc::initialize
virtual StatusCode initialize() override final
Athena algorithm's interface methods.
Definition: DNNCaloSimSvc.cxx:79
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
McEventCollection
This defines the McEventCollection, which is really just an ObjectVector of McEvent objects.
Definition: McEventCollection.h:33
SUBPOS_ENT
@ SUBPOS_ENT
Definition: FastCaloSim_CaloCell_ID.h:12
python.CreateTierZeroArgdict.outputs
outputs
Definition: CreateTierZeroArgdict.py:189
ISF::DNNCaloSimSvc::fillNetworkInputs
StatusCode fillNetworkInputs(const ISF::ISFParticle &isfp, NetworkInputs &inputs, double &trueEnergy)
Definition: DNNCaloSimSvc.cxx:381
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
PathResolver.h
compCellsForDNNSort
bool compCellsForDNNSort(const CaloCell *a, const CaloCell *b)
Definition: DNNCaloSimSvc.cxx:305
ISF::DNNCaloSimSvc::m_rndGenSvc
ServiceHandle< IAtRndmGenSvc > m_rndGenSvc
Definition: DNNCaloSimSvc.h:99
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
CaloDetDescrBuilder.h
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
ISF::ISFParticle::momentum
const Amg::Vector3D & momentum() const
The current momentum vector of the ISFParticle.
ISF::DNNCaloSimSvc::m_caloCellMakerToolsRelease
ToolHandleArray< ICaloCellMakerTool > m_caloCellMakerToolsRelease
Definition: DNNCaloSimSvc.h:92
ISF::DNNCaloSimSvc::initializeNetwork
StatusCode initializeNetwork()
helper for initialize
Definition: DNNCaloSimSvc.cxx:136
ISF::DNNCaloSimSvc::releaseEvent
virtual StatusCode releaseEvent() override final
Release Event chain - in case of an end-of event action is needed.
Definition: DNNCaloSimSvc.cxx:256
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ISF::DNNCaloSimSvc::m_randomEngineName
std::string m_randomEngineName
Definition: DNNCaloSimSvc.h:101
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
lwtDev::parse_json_graph
GraphConfig parse_json_graph(std::istream &json)
Definition: parse_json.cxx:71
ISF::DNNCaloSimSvc::DNNCaloSimSvc
DNNCaloSimSvc(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters.
Definition: DNNCaloSimSvc.cxx:55
a
TList * a
Definition: liststreamerinfos.cxx:10
TFCSTruthState.h
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TFCSExtrapolationState.h
TFCSTruthState::set_vertex
void set_vertex(const TLorentzVector &val)
Definition: TFCSTruthState.h:19
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
ISF::DNNCaloSimSvc::~DNNCaloSimSvc
virtual ~DNNCaloSimSvc() final
Destructor.
CaloIdManager.h
ISF::BaseSimulationSvc
Definition: BaseSimulationSvc.h:40
CaloDetDescrElement::eta
float eta() const
cell eta
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:344
CaloDetDescrElement::phi
float phi() const
cell phi
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:346
TFCSSimulationState.h
FastCaloSim_CaloCell_ID.h
TFCSTruthState
Definition: TFCSTruthState.h:13
StoreGateSvc.h
TFCSSimulationState
Definition: TFCSSimulationState.h:32
buildCaloDetDescrNoAlign
std::unique_ptr< CaloDetDescrManager > buildCaloDetDescrNoAlign(ISvcLocator *svcLocator, IMessageSvc *msgSvc)
Definition: CaloDetDescrBuilder.cxx:791
CaloDetDescrElement::phi_raw
float phi_raw() const
cell phi_raw
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:352
CaloPhiRange::diff
static double diff(double phi1, double phi2)
simple phi1 - phi2 calculation, but result is fixed to respect range.
Definition: CaloPhiRange.cxx:22
ISF::ISFParticle::mass
double mass() const
mass of the particle