Belle II Software  release-05-02-19
EKLMGeometry.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Kirill Chilikin *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 /* Own header. */
12 #include <klm/dbobjects/eklm/EKLMGeometry.h>
13 
14 /* Belle 2 headers. */
15 #include <framework/logging/Logger.h>
16 
17 using namespace Belle2;
18 
19 /* Class EKLMGeometry::EndcapStructureGeometry. */
20 
22 {
23 }
24 
26 {
27 }
28 
29 /* Class EKLMGeometry::ElementPosition. */
30 
32 {
33 }
34 
35 /* Class EKLMGeometry::SectorSupportGeometry. */
36 
38 {
39 }
40 
41 /* Class EKLMGeometry::PlasticSheetGeometry. */
42 
44 {
45 }
46 
47 /* Class EKLMGeometry::SegmentSupportGeometry. */
48 
50 {
51 }
52 
53 /* Class EKLMGeometry::SegmentSupportPosition. */
54 
56 {
57 }
58 
59 /* Class EKLMGeometry::StripGeometry. */
60 
62 {
63 }
64 
65 /* Class EKLMGeometry::Point. */
66 
68 {
69 }
70 
71 /* Class EKLMGeometry::ShieldDetailGeometry. */
72 
74 {
75 }
76 
78  const ShieldDetailGeometry& geometry) : TObject(geometry)
79 {
80  /* cppcheck-suppress variableScope */
81  int i;
82  m_LengthX = geometry.getLengthX();
83  m_LengthY = geometry.getLengthY();
84  m_NPoints = geometry.getNPoints();
85  if (m_NPoints > 0) {
86  m_Points = new Point[m_NPoints];
87  for (i = 0; i < m_NPoints; i++)
88  m_Points[i] = *geometry.getPoint(i);
89  } else
90  m_Points = nullptr;
91 }
92 
95  const ShieldDetailGeometry& geometry)
96 {
97  /* cppcheck-suppress variableScope */
98  int i;
99  if (&geometry == this)
100  return *this;
101  m_LengthX = geometry.getLengthX();
102  m_LengthY = geometry.getLengthY();
103  m_NPoints = geometry.getNPoints();
104  if (m_Points != nullptr)
105  delete[] m_Points;
106  if (m_NPoints > 0) {
107  m_Points = new Point[m_NPoints];
108  for (i = 0; i < m_NPoints; i++)
109  m_Points[i] = *geometry.getPoint(i);
110  } else
111  m_Points = nullptr;
112  return *this;
113 }
114 
116 {
117  if (m_Points != nullptr)
118  delete[] m_Points;
119 }
120 
122 {
123  if (nPoints < 0)
124  B2FATAL("Number of points must be nonnegative.");
125  m_NPoints = nPoints;
126  if (m_Points != nullptr)
127  delete[] m_Points;
128  if (m_NPoints > 0)
129  m_Points = new Point[m_NPoints];
130  else
131  m_Points = nullptr;
132 }
133 
134 const EKLMGeometry::Point*
136 {
137  if (i < 0 || i >= m_NPoints)
138  B2FATAL("Number of point must be from 0 to " << m_NPoints - 1 << ".");
139  return &m_Points[i];
140 }
141 
143 {
144  if (i < 0 || i >= m_NPoints)
145  B2FATAL("Number of point must be from 0 to " << m_NPoints - 1 << ".");
146  m_Points[i] = point;
147 }
148 
149 /* Class EKLMGeometry::ShieldGeometry. */
150 
152 {
153 }
154 
156 {
157  m_DetailACenter.setX(x);
158  m_DetailACenter.setY(y);
159 }
160 
162 {
163  m_DetailBCenter.setX(x);
164  m_DetailBCenter.setY(y);
165 }
166 
168 {
169  m_DetailCCenter.setX(x);
170  m_DetailCCenter.setY(y);
171 }
172 
173 /* Class EKLMGeometry. */
174 
176  m_ElementNumbers(&(EKLMElementNumbers::Instance())),
177  m_NSections(0),
178  m_NLayers(0),
179  m_NDetectorLayers(nullptr),
180  m_NSectors(0),
181  m_NPlanes(0),
182  m_NSegments(0),
184  m_NStrips(0),
185  m_SolenoidZ(0),
186  m_LayerShiftZ(0),
187  m_SegmentSupportPosition(nullptr),
188  m_StripPosition(nullptr)
189 {
190 }
191 
193  TObject(geometry),
194  m_ElementNumbers(&(EKLMElementNumbers::Instance())),
195  m_EndcapStructureGeometry(*geometry.getEndcapStructureGeometry()),
196  m_SectionPosition(*geometry.getSectionPosition()),
197  m_LayerPosition(*geometry.getLayerPosition()),
198  m_SectorPosition(*geometry.getSectorPosition()),
199  m_SectorSupportPosition(*geometry.getSectorSupportPosition()),
200  m_SectorSupportGeometry(*geometry.getSectorSupportGeometry()),
201  m_PlanePosition(*geometry.getPlanePosition()),
202  m_PlasticSheetGeometry(*geometry.getPlasticSheetGeometry()),
203  m_SegmentSupportGeometry(*geometry.getSegmentSupportGeometry()),
204  m_StripGeometry(*geometry.getStripGeometry()),
205  m_ShieldGeometry(*geometry.getShieldGeometry())
206 {
207  int i, j;
208  m_NSections = geometry.getNSections();
209  m_NLayers = geometry.getNLayers();
210  m_NDetectorLayers = new int[m_NSections];
211  m_NDetectorLayers[0] = geometry.getNDetectorLayers(1);
212  if (m_NSections == 2)
213  m_NDetectorLayers[1] = geometry.getNDetectorLayers(2);
214  m_NSectors = geometry.getNSectors();
215  m_NPlanes = geometry.getNPlanes();
216  m_NSegments = geometry.getNSegments();
217  m_NSegmentSupportElementsSector = geometry.getNSegmentSupportElementsSector();
218  m_NStrips = geometry.getNStrips();
219  m_SolenoidZ = geometry.getSolenoidZ();
220  m_LayerShiftZ = geometry.getLayerShiftZ();
223  for (i = 0; i < m_NPlanes; i++) {
224  for (j = 0; j <= m_NSegments; j++) {
225  m_SegmentSupportPosition[i * (m_NSegments + 1) + j] =
226  *geometry.getSegmentSupportPosition(i + 1, j + 1);
227  }
228  }
230  for (i = 0; i < m_NStrips; i++)
231  m_StripPosition[i] = *geometry.getStripPosition(i + 1);
232 }
233 
235 {
236  if (m_NDetectorLayers != nullptr)
237  delete[] m_NDetectorLayers;
238  if (m_SegmentSupportPosition != nullptr)
239  delete[] m_SegmentSupportPosition;
240  if (m_StripPosition != nullptr)
241  delete[] m_StripPosition;
242 }
243 
245 {
246  int i, j;
247  if (&geometry == this)
248  return *this;
249  m_NSections = geometry.getNSections();
250  m_NLayers = geometry.getNLayers();
251  if (m_NDetectorLayers != nullptr)
252  delete[] m_NDetectorLayers;
253  m_NDetectorLayers = new int[m_NSections];
254  m_NDetectorLayers[0] = geometry.getNDetectorLayers(1);
255  if (m_NSections == 2)
256  m_NDetectorLayers[1] = geometry.getNDetectorLayers(2);
257  m_NSectors = geometry.getNSectors();
258  m_NPlanes = geometry.getNPlanes();
259  m_NSegments = geometry.getNSegments();
260  m_NSegmentSupportElementsSector = geometry.getNSegmentSupportElementsSector();
261  m_NStrips = geometry.getNStrips();
262  m_SolenoidZ = geometry.getSolenoidZ();
263  m_EndcapStructureGeometry = *geometry.getEndcapStructureGeometry();
264  m_SectionPosition = *geometry.getSectionPosition();
265  m_LayerPosition = *geometry.getLayerPosition();
266  m_LayerShiftZ = geometry.getLayerShiftZ();
267  m_SectorPosition = *geometry.getSectorPosition();
268  m_SectorSupportPosition = *geometry.getSectorSupportPosition();
269  m_SectorSupportGeometry = *geometry.getSectorSupportGeometry();
270  m_PlanePosition = *geometry.getPlanePosition();
271  m_PlasticSheetGeometry = *geometry.getPlasticSheetGeometry();
272  m_SegmentSupportGeometry = *geometry.getSegmentSupportGeometry();
273  if (m_SegmentSupportPosition != nullptr)
274  delete[] m_SegmentSupportPosition;
277  for (i = 0; i < m_NPlanes; i++) {
278  for (j = 0; j <= m_NSegments; j++) {
279  m_SegmentSupportPosition[i * (m_NSegments + 1) + j] =
280  *geometry.getSegmentSupportPosition(i + 1, j + 1);
281  }
282  }
283  m_StripGeometry = *geometry.getStripGeometry();
284  if (m_StripPosition != nullptr)
285  delete[] m_StripPosition;
287  for (i = 0; i < m_NStrips; i++)
288  m_StripPosition[i] = *geometry.getStripPosition(i + 1);
289  m_ShieldGeometry = *geometry.getShieldGeometry();
290  return *this;
291 }
292 
293 /* Numbers of geometry elements. */
294 
295 int EKLMGeometry::getNDetectorLayers(int section) const
296 {
297  m_ElementNumbers->checkSection(section);
298  return m_NDetectorLayers[section - 1];
299 }
300 
301 /* Element number checks. */
302 
303 void EKLMGeometry::checkDetectorLayerNumber(int section, int layer) const
304 {
305  /* cppcheck-suppress variableScope */
306  const char* sectionName[2] = {"backward", "forward"};
307  if (layer < 0 || layer > m_NLayers ||
309  B2FATAL("Number of detector layers in the " << sectionName[section - 1] <<
310  " section must be from 0 to the number of layers ( " <<
311  m_NLayers << ").");
312 }
313 
314 void EKLMGeometry::checkDetectorLayer(int section, int layer) const
315 {
316  /* cppcheck-suppress variableScope */
317  const char* sectionName[2] = {"backward", "forward"};
318  if (layer < 0 || layer > m_NDetectorLayers[section - 1])
319  B2FATAL("Number of layer must be less from 1 to the number of "
320  "detector layers in the " << sectionName[section - 1] << " section ("
321  << m_NDetectorLayers[section - 1] << ").");
322 }
323 
324 void EKLMGeometry::checkSegmentSupport(int support) const
325 {
326  if (support <= 0 || support > m_ElementNumbers->getMaximalSegmentNumber() + 1)
327  B2FATAL("Number of segment support element must be from 1 to " <<
329 }
330 
331 void EKLMGeometry::checkStripSegment(int strip) const
332 {
333  if (strip <= 0 || strip > m_ElementNumbers->getNStripsSegment())
334  B2FATAL("Number of strip in a segment must be from 1 to " <<
336 }
337 
338 /* Positions, coordinates, sizes. */
339 
341 EKLMGeometry::getSegmentSupportPosition(int plane, int support) const
342 {
344  checkSegmentSupport(support);
345  return &m_SegmentSupportPosition[(plane - 1) * (m_NSegments + 1) +
346  support - 1];
347 }
348 
351 {
353  return &m_StripPosition[strip - 1];
354 }
Belle2::EKLMElementNumbers::getMaximalSegmentNumber
static constexpr int getMaximalSegmentNumber()
Get maximal segment number.
Definition: EKLMElementNumbers.h:321
Belle2::EKLMGeometry::m_SectorSupportGeometry
SectorSupportGeometry m_SectorSupportGeometry
Sector support geometry data.
Definition: EKLMGeometry.h:1943
Belle2::EKLMGeometry
Class to store EKLM geometry data in the database.
Definition: EKLMGeometry.h:39
Belle2::EKLMGeometry::getStripPosition
const ElementPosition * getStripPosition(int strip) const
Get position data for strips.
Definition: EKLMGeometry.cc:350
Belle2::EKLMGeometry::m_PlasticSheetGeometry
PlasticSheetGeometry m_PlasticSheetGeometry
Plastic sheet geometry data.
Definition: EKLMGeometry.h:1949
Belle2::EKLMGeometry::m_SegmentSupportGeometry
SegmentSupportGeometry m_SegmentSupportGeometry
Segment support geometry data.
Definition: EKLMGeometry.h:1952
Belle2::EKLMGeometry::ShieldDetailGeometry::setPoint
void setPoint(int i, const Point &point)
Set point.
Definition: EKLMGeometry.cc:142
Belle2::EKLMGeometry::m_NLayers
int m_NLayers
Number of layers in one section.
Definition: EKLMGeometry.h:1901
Belle2::EKLMElementNumbers
EKLM element numbers.
Definition: EKLMElementNumbers.h:34
Belle2::EKLMGeometry::EKLMGeometry
EKLMGeometry()
Constructor.
Definition: EKLMGeometry.cc:175
Belle2::EKLMElementNumbers::checkStrip
bool checkStrip(int strip, bool fatalError=true) const
Check if strip number is correct (fatal error if not).
Definition: EKLMElementNumbers.cc:109
Belle2::EKLMGeometry::EndcapStructureGeometry::~EndcapStructureGeometry
~EndcapStructureGeometry()
Destructor.
Definition: EKLMGeometry.cc:25
Belle2::EKLMGeometry::EndcapStructureGeometry::EndcapStructureGeometry
EndcapStructureGeometry()
Constructor.
Definition: EKLMGeometry.cc:21
Belle2::EKLMGeometry::checkDetectorLayerNumber
void checkDetectorLayerNumber(int section, int layer) const
Check if number of detector layers is correct (fatal error if not).
Definition: EKLMGeometry.cc:303
Belle2::EKLMGeometry::m_NDetectorLayers
int * m_NDetectorLayers
Number of detector layers.
Definition: EKLMGeometry.h:1904
Belle2::EKLMGeometry::m_EndcapStructureGeometry
EndcapStructureGeometry m_EndcapStructureGeometry
Section structure geometry data.
Definition: EKLMGeometry.h:1925
Belle2::EKLMGeometry::m_ShieldGeometry
ShieldGeometry m_ShieldGeometry
Shield layer details geometry data.
Definition: EKLMGeometry.h:1964
Belle2::EKLMGeometry::getSegmentSupportPosition
const SegmentSupportPosition * getSegmentSupportPosition(int plane, int support) const
Get position data for segment support structure.
Definition: EKLMGeometry.cc:341
Belle2::EKLMGeometry::Point
2D point.
Definition: EKLMGeometry.h:1326
Belle2::EKLMGeometry::SegmentSupportGeometry::SegmentSupportGeometry
SegmentSupportGeometry()
Constructor.
Definition: EKLMGeometry.cc:49
Belle2::EKLMGeometry::checkDetectorLayer
void checkDetectorLayer(int section, int layer) const
Check if detector layer number is correct (fatal error if not).
Definition: EKLMGeometry.cc:314
Belle2::EKLMGeometry::ShieldDetailGeometry
Shield layer detail geometry data.
Definition: EKLMGeometry.h:1385
Belle2::EKLMGeometry::ElementPosition
Position information for the elements of detector.
Definition: EKLMGeometry.h:110
Belle2::EKLMGeometry::ShieldGeometry::setDetailCCenter
void setDetailCCenter(double x, double y)
Set detail C center.
Definition: EKLMGeometry.cc:167
Belle2::EKLMGeometry::Point::Point
Point()
Constructor.
Definition: EKLMGeometry.cc:67
Belle2::EKLMGeometry::ShieldGeometry::setDetailBCenter
void setDetailBCenter(double x, double y)
Set detail B center.
Definition: EKLMGeometry.cc:161
Belle2::EKLMGeometry::ShieldDetailGeometry::operator=
ShieldDetailGeometry & operator=(const ShieldDetailGeometry &geometry)
Operator =.
Definition: EKLMGeometry.cc:94
Belle2::EKLMGeometry::m_ElementNumbers
const EKLMElementNumbers * m_ElementNumbers
Element numbers.
Definition: EKLMGeometry.h:1895
Belle2::EKLMGeometry::m_SectorPosition
ElementPosition m_SectorPosition
Position data for sectors.
Definition: EKLMGeometry.h:1937
Belle2::EKLMGeometry::m_NSegments
int m_NSegments
Number of segments in one plane.
Definition: EKLMGeometry.h:1913
Belle2::EKLMGeometry::m_SolenoidZ
double m_SolenoidZ
Solenoid center Z coordinate.
Definition: EKLMGeometry.h:1922
Belle2::EKLMGeometry::m_LayerPosition
ElementPosition m_LayerPosition
Position data for layers.
Definition: EKLMGeometry.h:1931
Belle2::EKLMGeometry::operator=
EKLMGeometry & operator=(const EKLMGeometry &geometry)
Operator =.
Definition: EKLMGeometry.cc:244
Belle2::EKLMGeometry::SegmentSupportPosition
Segment support position.
Definition: EKLMGeometry.h:1048
Belle2::EKLMGeometry::ElementPosition::ElementPosition
ElementPosition()
Constructor.
Definition: EKLMGeometry.cc:31
Belle2::EKLMGeometry::SectorSupportGeometry::SectorSupportGeometry
SectorSupportGeometry()
Constructor.
Definition: EKLMGeometry.cc:37
Belle2::EKLMGeometry::m_NSections
int m_NSections
ROOT streamer.
Definition: EKLMGeometry.h:1898
Belle2::EKLMGeometry::m_StripPosition
ElementPosition * m_StripPosition
Position data for strips.
Definition: EKLMGeometry.h:1961
Belle2::EKLMGeometry::StripGeometry::StripGeometry
StripGeometry()
Constructor.
Definition: EKLMGeometry.cc:61
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::EKLMGeometry::ShieldDetailGeometry::m_Points
Point * m_Points
Points.
Definition: EKLMGeometry.h:1482
Belle2::EKLMGeometry::PlasticSheetGeometry::PlasticSheetGeometry
PlasticSheetGeometry()
Constructor.
Definition: EKLMGeometry.cc:43
Belle2::EKLMGeometry::ShieldDetailGeometry::getPoint
const Point * getPoint(int i) const
Get point.
Definition: EKLMGeometry.cc:135
Belle2::EKLMElementNumbers::checkSection
bool checkSection(int section, bool fatalError=true) const
Check if section number is correct.
Definition: EKLMElementNumbers.cc:34
Belle2::EKLMGeometry::m_NStrips
int m_NStrips
Number of strips in one plane.
Definition: EKLMGeometry.h:1919
Belle2::EKLMElementNumbers::checkPlane
bool checkPlane(int plane, bool fatalError=true) const
Check if plane number is correct (fatal error if not).
Definition: EKLMElementNumbers.cc:85
Belle2::EKLMGeometry::getNDetectorLayers
int getNDetectorLayers(int section) const
Get number of detector layers.
Definition: EKLMGeometry.cc:295
Belle2::EKLMGeometry::SegmentSupportPosition::SegmentSupportPosition
SegmentSupportPosition()
Constructor.
Definition: EKLMGeometry.cc:55
Belle2::EKLMGeometry::ShieldGeometry::ShieldGeometry
ShieldGeometry()
Constructor.
Definition: EKLMGeometry.cc:151
Belle2::EKLMGeometry::m_SegmentSupportPosition
SegmentSupportPosition * m_SegmentSupportPosition
Position data for segment support structure.
Definition: EKLMGeometry.h:1955
Belle2::EKLMGeometry::ShieldDetailGeometry::m_LengthY
double m_LengthY
Y length.
Definition: EKLMGeometry.h:1476
Belle2::EKLMGeometry::m_StripGeometry
StripGeometry m_StripGeometry
Strip geometry data.
Definition: EKLMGeometry.h:1958
Belle2::EKLMGeometry::m_NSectors
int m_NSectors
Number of sectors in one layer.
Definition: EKLMGeometry.h:1907
Belle2::EKLMGeometry::m_LayerShiftZ
double m_LayerShiftZ
Z distance between two layers.
Definition: EKLMGeometry.h:1934
Belle2::EKLMGeometry::ShieldDetailGeometry::m_NPoints
int m_NPoints
Number of points.
Definition: EKLMGeometry.h:1479
Belle2::EKLMElementNumbers::getNStripsSegment
static constexpr int getNStripsSegment()
Get number of strips in a segment.
Definition: EKLMElementNumbers.h:401
Belle2::EKLMGeometry::ShieldDetailGeometry::setNPoints
void setNPoints(int nPoints)
Set number of points.
Definition: EKLMGeometry.cc:121
Belle2::EKLMGeometry::m_PlanePosition
ElementPosition m_PlanePosition
Position data for planes.
Definition: EKLMGeometry.h:1946
Belle2::EKLMGeometry::ShieldDetailGeometry::ShieldDetailGeometry
ShieldDetailGeometry()
Constructor.
Definition: EKLMGeometry.cc:73
Belle2::EKLMGeometry::ShieldDetailGeometry::m_LengthX
double m_LengthX
X length.
Definition: EKLMGeometry.h:1473
Belle2::EKLMGeometry::ShieldGeometry::setDetailACenter
void setDetailACenter(double x, double y)
Set detail A center.
Definition: EKLMGeometry.cc:155
Belle2::EKLMGeometry::m_SectionPosition
ElementPosition m_SectionPosition
Position data for sections.
Definition: EKLMGeometry.h:1928
Belle2::EKLMGeometry::~EKLMGeometry
virtual ~EKLMGeometry()
Destructor.
Definition: EKLMGeometry.cc:234
Belle2::EKLMGeometry::m_NPlanes
int m_NPlanes
Number of planes in one sector.
Definition: EKLMGeometry.h:1910
Belle2::EKLMGeometry::checkSegmentSupport
void checkSegmentSupport(int support) const
Check if segment support number is correct (fatal error if not).
Definition: EKLMGeometry.cc:324
Belle2::EKLMGeometry::m_NSegmentSupportElementsSector
int m_NSegmentSupportElementsSector
Number of segment support elements in one sector.
Definition: EKLMGeometry.h:1916
Belle2::EKLMElementNumbers::getMaximalDetectorLayerNumber
int getMaximalDetectorLayerNumber(int section) const
Get maximal detector layer number.
Definition: EKLMElementNumbers.cc:279
Belle2::EKLMGeometry::ShieldDetailGeometry::~ShieldDetailGeometry
~ShieldDetailGeometry()
Destructor.
Definition: EKLMGeometry.cc:115
Belle2::EKLMGeometry::m_SectorSupportPosition
ElementPosition m_SectorSupportPosition
Position data for sector support structure.
Definition: EKLMGeometry.h:1940
Belle2::EKLMGeometry::checkStripSegment
void checkStripSegment(int strip) const
Check if number of strip in a segment is correct (fatal error if not).
Definition: EKLMGeometry.cc:331