ATLAS Offline Software
FPGATrackSimRegionSlices.cxx
Go to the documentation of this file.
1 // Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2 
13 
15 
16 #include <string>
17 #include <iostream>
18 #include <fstream>
19 
20 using namespace asg::msgUserCode;
21 
23 // Constructor/Desctructor
25 
26 
28 {
29  // Open the file
30  std::ifstream fin(filepath);
31  if (!fin.is_open())
32  {
33  ANA_MSG_ERROR("Couldn't open " << filepath);
34  throw ("FPGATrackSimRegionSlices couldn't open " + filepath);
35  }
36 
37  // Variables to fill
38  unsigned region;
39  std::string line, key;
41 
42  // Parse the file
43  bool ok = true;
44  while (getline(fin, line))
45  {
46  if (line.empty() || line[0] == '#') continue;
47  std::istringstream sline(line);
48 
49  ok = ok && (sline >> key);
50  if (!ok) break;
51  if (key == "region")
52  {
53  ok = ok && (sline >> region);
54  if (ok && region > 0) m_regions.push_back({ min, max });
55  ok = ok && (region == m_regions.size());
56  min = FPGATrackSimTrackPars(); // reset
57  max = FPGATrackSimTrackPars(); // reset
58  }
59  else if (key == "phi") ok = ok && (sline >> min.phi >> max.phi);
60  else if (key == "eta") ok = ok && (sline >> min.eta >> max.eta);
61  else if (key == "qpt") ok = ok && (sline >> min.qOverPt >> max.qOverPt);
62  else if (key == "d0") ok = ok && (sline >> min.d0 >> max.d0);
63  else if (key == "z0") ok = ok && (sline >> min.z0 >> max.z0);
64  else ok = false;
65 
66  if (!ok) break;
67  }
68 
69  if (!ok)
70  {
71  ANA_MSG_ERROR("Found error reading file at line: " << line);
72  throw "FPGATrackSimRegionSlices read error";
73  }
74 
75  m_regions.push_back({ min, max }); // last region still needs to be added
76 }
77 
78 
79 
81 // Interface Functions
83 
84 
85 bool FPGATrackSimRegionSlices::inRegion(unsigned region, FPGATrackSimTruthTrack const & t) const
86 {
87  if (region >= m_regions.size())
88  {
89  ANA_MSG_WARNING("inRegion() region " << region << " out-of-bounds " << m_regions.size());
90  return false;
91  }
92  FPGATrackSimTrackPars min = m_regions[region].first;
93  FPGATrackSimTrackPars max = m_regions[region].second;
94  FPGATrackSimTrackPars cur = t.getPars();
95 
96  for (unsigned i = 0; i < FPGATrackSimTrackPars::NPARS; i++)
97  {
98  if (cur[i] < min[i]) return false;
99  if (cur[i] > max[i]) return false;
100  }
101 
102  return true;
103 }
checkFileSG.line
line
Definition: checkFileSG.py:75
FPGATrackSimRegionSlices.h
Stores slice definitions for FPGATrackSim regions.
max
#define max(a, b)
Definition: cfImp.cxx:41
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
beamspotman.cur
def cur
Definition: beamspotman.py:671
FPGATrackSimRegionSlices::inRegion
bool inRegion(unsigned region, FPGATrackSimTruthTrack const &t) const
Definition: FPGATrackSimRegionSlices.cxx:85
FPGATrackSimTruthTrack
Definition: FPGATrackSimTruthTrack.h:14
ANA_MSG_ERROR
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:294
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
lumiFormat.i
int i
Definition: lumiFormat.py:85
MessageCheck.h
macros for messaging and checking status codes
ANA_MSG_WARNING
#define ANA_MSG_WARNING(xmsg)
Macro printing warning messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:292
min
#define min(a, b)
Definition: cfImp.cxx:40
FPGATrackSimRegionSlices::FPGATrackSimRegionSlices
FPGATrackSimRegionSlices(std::string const &filepath)
Definition: FPGATrackSimRegionSlices.cxx:27
FPGATrackSimTrackPars::NPARS
@ NPARS
Definition: FPGATrackSimTrackPars.h:49
compute_lumi.fin
fin
Definition: compute_lumi.py:19
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37