ATLAS Offline Software
RoiDescriptor.h
Go to the documentation of this file.
1 // emacs: this is -*- c++ -*-
2 /*
3  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
4 */
5 //
6 // @file RoiDescriptor.h
7 //
8 // RoiDescriptor class - includes constructors in preparation
9 // for enforcement of correct roi sizes
10 //
11 // @author sutt@cern.ch
12 //
13 
14 
15 #ifndef ROIDESCRIPTOR_ROIDESCRIPTOR_H
16 #define ROIDESCRIPTOR_ROIDESCRIPTOR_H
17 
18 #include <iostream>
19 #include <atomic>
20 
23 
24 
40 class RoiDescriptor : public IRoiDescriptor {
41 
42 public:
43 
45  static constexpr bool FULLSCAN = true;
46  static constexpr bool ROI = false;
47 
48 public:
49 
54  RoiDescriptor(bool fullscan=ROI);
55 
68  RoiDescriptor(double eta_, double etaMinus_, double etaPlus_,
69  double phi_, double phiMinus_, double phiPlus_,
70  double zed_=0, double zedMinus_=-s_zedWidthDefault, double zedPlus_=s_zedWidthDefault );
78  RoiDescriptor(double etaMinus_, double etaPlus_,
79  double phiMinus_, double phiPlus_ );
80 
84  RoiDescriptor( const IRoiDescriptor& roi );
86 
87  /*
88  * need an explicit class copy constructor
89  */
90  RoiDescriptor( const RoiDescriptor& roi );
92 
93 
94  // Destructor
95  virtual ~RoiDescriptor();
96 
97 
98  // Methods to retrieve data members
99 
100  virtual double phi() const override final { return m_phi; }
101  virtual double eta() const override final { return m_eta; }
102  virtual double zed() const override final { return m_zed; }
103 
107 
108  virtual unsigned int roiId() const override { return 0; }
109  virtual unsigned int l1Id() const override { return 0; }
110  virtual unsigned int roiWord() const override { return 0; }
111 
112  virtual double zedPlus() const override final { return m_zedPlus; }
113  virtual double zedMinus() const override final { return m_zedMinus; }
114 
115  virtual double etaPlus() const override final { return m_etaPlus; }
116  virtual double etaMinus() const override final { return m_etaMinus; }
117 
118  virtual double phiPlus() const override final { return m_phiPlus; }
119  virtual double phiMinus() const override final { return m_phiMinus; }
120 
121 
123  virtual int version() const override final { return m_version; }
124  void version(int v) { m_version = v; }
125 
126 
128  virtual operator std::string() const override;
129 
130 
132  virtual bool isFullscan() const override final { return m_fullscan; }
133 
135 
137  virtual bool composite() const override final { return m_composite; }
138  void setComposite(bool b=true) { m_composite=b; }
139 
141  bool manageConstituents() const { return m_manageConstituents; }
143 
145  virtual unsigned size() const override final { return m_roiDescriptors.size(); }
146 
148  virtual const IRoiDescriptor* at(int i) const override final { return m_roiDescriptors.at(i); }
149 
151  void clear() { m_roiDescriptors.clear(); } // setComposite(false); }
152 
154  void reserve(size_t s) { m_roiDescriptors.reserve(s); }
155 
157  void push_back(const IRoiDescriptor* roi) { m_roiDescriptors.push_back(roi); setComposite(true); }
158 
160  virtual roi_iterator begin() const override final { return m_roiDescriptors.begin(); }
161  virtual roi_iterator end() const override final { return m_roiDescriptors.end(); }
162 
164  virtual double dzdrMinus() const override final { return m_dzdrMinus; }
165  virtual double dzdrPlus() const override final { return m_dzdrPlus; }
166 
167  virtual double drdzMinus() const override final { return m_drdzMinus; }
168  virtual double drdzPlus() const override final { return m_drdzPlus; }
169 
172  virtual double zedMin(double r) const override final;
173  virtual double zedMax(double r) const override final;
174 
175  virtual double zedOuterPlus() const override final { return m_zedOuterPlus; }
176  virtual double zedOuterMinus() const override final { return m_zedOuterMinus; }
177 
178  virtual double rhoMin(double z) const override final;
179  virtual double rhoMax(double z) const override final;
180 
181 public:
182 
183  static double zedWidthDefault() { return s_zedWidthDefault; }
184 
186  static void zedWidthDefault( double d );
187 
188 protected:
189 
192 
197  void construct(double eta, double etaMinus, double etaPlus,
198  double phi, double phiMinus, double phiPlus,
199  double zed, double zedMinus, double zedPlus);
200 
201  void construct( const IRoiDescriptor& _roi );
202 
203 protected:
204 
206  static std::atomic<double> s_zedWidthDefault;
208  static std::atomic<bool> s_firstInstanceCreated;
209 
210 protected:
211 
212  float m_phi;
213  float m_eta;
214  float m_zed;
215 
216  float m_phiMinus;
217  float m_phiPlus;
218  float m_etaMinus;
219  float m_etaPlus;
220  float m_zedMinus;
221  float m_zedPlus;
222 
223  float m_dzdrMinus;
224  float m_dzdrPlus;
225 
226  float m_drdzMinus;
227  float m_drdzPlus;
228 
231 
232  bool m_fullscan;
233  bool m_composite;
235 
236  int m_version;
237 
238  std::vector<const IRoiDescriptor*> m_roiDescriptors;
239 
240 };
241 
242 
243 std::string str( const RoiDescriptor& d ); //<! printing helper
244 std::ostream& operator<<( std::ostream& m, const RoiDescriptor& d ); //<! printing helper (wraps above)
245 
246 #endif // ROIDESCRIPTOR_H
247 
beamspotman.r
def r
Definition: beamspotman.py:676
RoiDescriptor::m_composite
bool m_composite
flag this as a composite RoI
Definition: RoiDescriptor.h:233
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
RoiDescriptor::zedMinus
virtual double zedMinus() const override final
z at the most backward end of the RoI
Definition: RoiDescriptor.h:113
IRoiDescriptor::roi_iterator
std::vector< const IRoiDescriptor * >::const_iterator roi_iterator
Definition: IRoiDescriptor.h:28
RoiDescriptor::m_eta
float m_eta
eta of RoI center
Definition: RoiDescriptor.h:213
RoiDescriptor::dzdrPlus
virtual double dzdrPlus() const override final
dz/dr at the front of the RoI
Definition: RoiDescriptor.h:165
hist_file_dump.d
d
Definition: hist_file_dump.py:137
RoiDescriptor::m_etaMinus
float m_etaMinus
eta of RoI at zedMinus
Definition: RoiDescriptor.h:218
TrigRoiDescriptorCnv_p2
Definition: TrigRoiDescriptorCnv_p2.h:28
RoiDescriptor::composite
virtual bool composite() const override final
SuperRoI compatability methods.
Definition: RoiDescriptor.h:137
RoiDescriptor::size
virtual unsigned size() const override final
number of constituents
Definition: RoiDescriptor.h:145
RoiDescriptor::m_manageConstituents
bool m_manageConstituents
flag to determine whether consituents should be managed
Definition: RoiDescriptor.h:234
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:562
RoiDescriptor::operator=
RoiDescriptor & operator=(const IRoiDescriptor &r)
Definition: RoiDescriptor.cxx:127
RoiDescriptor::m_zedOuterPlus
float m_zedOuterPlus
z at front of RoI at the outer radius ( = 1100 mm)
Definition: RoiDescriptor.h:230
str
std::string str(const RoiDescriptor &d)
Definition: RoiDescriptor.cxx:268
RoiDescriptor::l1Id
virtual unsigned int l1Id() const override
Definition: RoiDescriptor.h:109
RoiDescriptor::push_back
void push_back(const IRoiDescriptor *roi)
add a RoiDescriptor
Definition: RoiDescriptor.h:157
RoiDescriptor::m_zedPlus
float m_zedPlus
z position at most positive position along the beamline
Definition: RoiDescriptor.h:221
RoiDescriptor::s_zedWidthDefault
static std::atomic< double > s_zedWidthDefault
default parameters - there may be better ways, but this will do
Definition: RoiDescriptor.h:206
RoiDescriptor::at
virtual const IRoiDescriptor * at(int i) const override final
find an RoiDescriptor constituent
Definition: RoiDescriptor.h:148
RoiDescriptor::reserve
void reserve(size_t s)
reserve elements in vector
Definition: RoiDescriptor.h:154
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
IRoiDescriptor
Describes the API of the Region of Ineterest geometry.
Definition: IRoiDescriptor.h:23
RoiDescriptor::~RoiDescriptor
virtual ~RoiDescriptor()
Definition: RoiDescriptor.cxx:155
RoiDescriptor::m_zedOuterMinus
float m_zedOuterMinus
z at rear of RoI at the outer radius ( = 1100 mm)
Definition: RoiDescriptor.h:229
RoiDescriptor::clear
void clear()
clear the vector
Definition: RoiDescriptor.h:151
RoiDescriptor::m_phiPlus
float m_phiPlus
most positive RoI in azimuthal
Definition: RoiDescriptor.h:217
RoiDescriptor
Describes the Region of Ineterest geometry It has basically 9 parameters.
Definition: RoiDescriptor.h:40
RoiDescriptor::end
virtual roi_iterator end() const override final
Definition: RoiDescriptor.h:161
RoiDescriptor::roiWord
virtual unsigned int roiWord() const override
Definition: RoiDescriptor.h:110
RoiDescriptor::m_drdzMinus
float m_drdzMinus
dr/dz at the rear of the RoI
Definition: RoiDescriptor.h:226
RoiDescriptor::m_dzdrMinus
float m_dzdrMinus
dz/dr at the rear of the RoI
Definition: RoiDescriptor.h:223
RoiDescriptor::m_drdzPlus
float m_drdzPlus
dr/dz at the front of the RoI
Definition: RoiDescriptor.h:227
RoiDescriptor::m_zedMinus
float m_zedMinus
z position at most negative position along the beamline
Definition: RoiDescriptor.h:220
RoiDescriptor::m_roiDescriptors
std::vector< const IRoiDescriptor * > m_roiDescriptors
roi constituents
Definition: RoiDescriptor.h:238
RoiDescriptor::RoiDescriptor
RoiDescriptor(bool fullscan=ROI)
default constructor
Definition: RoiDescriptor.cxx:41
RoiDescriptor::zed
virtual double zed() const override final
Definition: RoiDescriptor.h:102
RoiDescriptor::rhoMax
virtual double rhoMax(double z) const override final
Definition: RoiDescriptor.cxx:248
operator<<
std::ostream & operator<<(std::ostream &m, const RoiDescriptor &d)
Definition: RoiDescriptor.cxx:272
RoiUtil.h
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
RoiDescriptor::zedOuterMinus
virtual double zedOuterMinus() const override final
z at the most backward end of the RoI
Definition: RoiDescriptor.h:176
RoiDescriptor::m_dzdrPlus
float m_dzdrPlus
dz/dr at the front of the RoI
Definition: RoiDescriptor.h:224
RoiDescriptor::drdzPlus
virtual double drdzPlus() const override final
dr/dz at the front of the RoI
Definition: RoiDescriptor.h:168
RoiDescriptor::rhoMin
virtual double rhoMin(double z) const override final
accessors to calculate r position at position z along the RoI boundaries
Definition: RoiDescriptor.cxx:247
python.PyAthena.v
v
Definition: PyAthena.py:157
RoiDescriptor::etaPlus
virtual double etaPlus() const override final
gets eta at zedPlus
Definition: RoiDescriptor.h:115
RoiDescriptor::m_zed
float m_zed
zed of RoI center
Definition: RoiDescriptor.h:214
RoiDescriptor::zedOuterPlus
virtual double zedOuterPlus() const override final
z at the most forward end of the RoI
Definition: RoiDescriptor.h:175
RoiDescriptor::phi
virtual double phi() const override final
Methods to retrieve data members.
Definition: RoiDescriptor.h:100
RoiDescriptor::dzdrMinus
virtual double dzdrMinus() const override final
return the gradients
Definition: RoiDescriptor.h:164
RoiDescriptor::s_firstInstanceCreated
static std::atomic< bool > s_firstInstanceCreated
to ensure default width is only set once at job startup
Definition: RoiDescriptor.h:208
RoiDescriptor::zedWidthDefault
static double zedWidthDefault()
Definition: RoiDescriptor.h:183
RoiDescriptor::isFullscan
virtual bool isFullscan() const override final
is this a full scan RoI?
Definition: RoiDescriptor.h:132
RoiDescriptor::zedMin
virtual double zedMin(double r) const override final
methods to calculate z position at the RoI boundary at a given radius
Definition: RoiDescriptor.cxx:244
RoiDescriptor::begin
virtual roi_iterator begin() const override final
iterators
Definition: RoiDescriptor.h:160
TrigRoiDescriptorCnv_p3
Definition: TrigRoiDescriptorCnv_p3.h:28
RoiDescriptor::eta
virtual double eta() const override final
Definition: RoiDescriptor.h:101
RoiDescriptor::FULLSCAN
static constexpr bool FULLSCAN
convenient
Definition: RoiDescriptor.h:45
RoiDescriptor::zedMax
virtual double zedMax(double r) const override final
Definition: RoiDescriptor.cxx:245
RoiDescriptor::m_fullscan
bool m_fullscan
flag this as a full detector RoI
Definition: RoiDescriptor.h:232
IRoiDescriptor.h
RoiDescriptor::setComposite
void setComposite(bool b=true)
Definition: RoiDescriptor.h:138
RoiDescriptor::roiId
virtual unsigned int roiId() const override
these quantities probably don't need to be used any more
Definition: RoiDescriptor.h:108
RoiDescriptor::ROI
static constexpr bool ROI
Definition: RoiDescriptor.h:46
RoiDescriptor::manageConstituents
bool manageConstituents() const
always manage constituents ???
Definition: RoiDescriptor.h:141
RoiDescriptor::version
virtual int version() const override final
versioning
Definition: RoiDescriptor.h:123
RoiDescriptor::phiPlus
virtual double phiPlus() const override final
gets phiPlus
Definition: RoiDescriptor.h:118
RoiDescriptor::etaMinus
virtual double etaMinus() const override final
gets eta at zMinus
Definition: RoiDescriptor.h:116
RoiDescriptor::m_phiMinus
float m_phiMinus
most negative RoI in azimuthal
Definition: RoiDescriptor.h:216
RoiDescriptor::drdzMinus
virtual double drdzMinus() const override final
dr/dz at the rear of the RoI
Definition: RoiDescriptor.h:167
RoiDescriptor::m_phi
float m_phi
phi of RoI center
Definition: RoiDescriptor.h:212
RoiDescriptor::phiMinus
virtual double phiMinus() const override final
gets phiMinus
Definition: RoiDescriptor.h:119
RoiDescriptor::m_etaPlus
float m_etaPlus
eta of RoI at zedPlus
Definition: RoiDescriptor.h:219
RoiDescriptor::version
void version(int v)
Definition: RoiDescriptor.h:124
RoiDescriptor::m_version
int m_version
transient version identifier
Definition: RoiDescriptor.h:236
RoiDescriptor::construct
void construct(double eta, double etaMinus, double etaPlus, double phi, double phiMinus, double phiPlus, double zed, double zedMinus, double zedPlus)
construct RoiDescriptor internals - similar to constructors
Definition: RoiDescriptor.cxx:160
RoiDescriptor::manageConstituents
void manageConstituents(bool b)
Definition: RoiDescriptor.h:142
RoiDescriptor::zedPlus
virtual double zedPlus() const override final
z at the most forward end of the RoI
Definition: RoiDescriptor.h:112