Belle II Software  release-05-01-25
TOPGeoQBB.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Marko Staric *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <top/dbobjects/TOPGeoQBB.h>
12 #include <math.h>
13 #include <iostream>
14 
15 using namespace std;
16 
17 namespace Belle2 {
23  std::vector<std::pair<double, double> > TOPGeoQBB::getForwardContour() const
24  {
25  typedef std::pair<double, double> Pair;
26  std::vector<Pair> contour;
27 
28  double x1 = getWidth() / 2;
29  double x2 = x1 - m_sideRails.getThickness();
30  double x3 = getWidth() / 6;
31  double y1 = m_outerPanel.getY() + m_outerPanel.getMaxThickness();
32  double y2 = m_outerPanel.getY() + m_outerPanel.getMinThickness();
33  double y3 = y2 - m_sideRails.getHeight();
34  double y4 = m_innerPanel.getY() - m_innerPanel.getMaxThickness();
35  contour.push_back(Pair(-x1, y2));
36  contour.push_back(Pair(-x3, y1));
37  contour.push_back(Pair(x3, y1));
38  contour.push_back(Pair(x1, y2));
39  contour.push_back(Pair(x1, y3));
40  contour.push_back(Pair(x2, y4));
41  contour.push_back(Pair(-x2, y4));
42  contour.push_back(Pair(-x1, y3));
43 
44  return contour;
45  }
46 
47  void TOPGeoQBB::printForwardContour() const
48  {
49  auto contour = getForwardContour();
50  cout << "Forward contour [" << s_unitName << "]:" << endl;
51  for (auto& xy : contour) cout << xy.first << " " << xy.second << endl;
52  cout << endl;
53  }
54 
55 
56  std::vector<std::pair<double, double> > TOPGeoQBB::getInnerPanelContour() const
57  {
58  typedef std::pair<double, double> Pair;
59  std::vector<Pair> contour;
60 
61  double x1 = getPanelWidth() / 2;
62  double y1 = m_innerPanel.getY();
63  double y2 = y1 - m_innerPanel.getMaxThickness();
64  contour.push_back(Pair(-x1, y1));
65  contour.push_back(Pair(x1, y1));
66  contour.push_back(Pair(x1, y2));
67  m_innerPanel.appendContour(contour, y2, false);
68  contour.push_back(Pair(-x1, y2));
69 
70  return contour;
71  }
72 
73  void TOPGeoQBB::printInnerPanelContour() const
74  {
75  auto contour = getInnerPanelContour();
76  cout << "Inner panel contour [" << s_unitName << "]:" << endl;
77  for (auto& xy : contour) cout << xy.first << " " << xy.second << endl;
78  cout << endl;
79  }
80 
81 
82  std::vector<std::pair<double, double> > TOPGeoQBB::getOuterPanelContour() const
83  {
84  typedef std::pair<double, double> Pair;
85  std::vector<Pair> contour;
86 
87  double x1 = getPanelWidth() / 2;
88  double y1 = m_outerPanel.getY();
89  double y2 = y1 + m_outerPanel.getMinThickness();
90  contour.push_back(Pair(-x1, y2));
91  m_outerPanel.appendContour(contour, y2, true);
92  contour.push_back(Pair(x1, y2));
93  contour.push_back(Pair(x1, y1));
94  contour.push_back(Pair(-x1, y1));
95 
96  return contour;
97  }
98 
99  void TOPGeoQBB::printOuterPanelContour() const
100  {
101  auto contour = getOuterPanelContour();
102  cout << "Outer panel contour [" << s_unitName << "]:" << endl;
103  for (auto& xy : contour) cout << xy.first << " " << xy.second << endl;
104  cout << endl;
105  }
106 
107 
108  std::vector<std::pair<double, double> > TOPGeoQBB::getBackwardContour() const
109  {
110  typedef std::pair<double, double> Pair;
111  std::vector<Pair> contour;
112 
113  double x1 = getWidth() / 2;
114  double x2 = x1 - m_prismEnclosure.getHeight() * tan(m_prismEnclosure.getAngle());
115  double x3 = getWidth() / 6;
116  double y1 = m_outerPanel.getY() + m_outerPanel.getMaxThickness();
117  double y2 = m_outerPanel.getY() + m_outerPanel.getMinThickness();
118  double y3 = y2 - m_sideRails.getHeight();
119  double y4 = y3 - m_prismEnclosure.getHeight();
120  contour.push_back(Pair(-x1, y2));
121  contour.push_back(Pair(-x3, y1));
122  contour.push_back(Pair(x3, y1));
123  contour.push_back(Pair(x1, y2));
124  contour.push_back(Pair(x1, y3));
125  contour.push_back(Pair(x2, y4));
126  contour.push_back(Pair(-x2, y4));
127  contour.push_back(Pair(-x1, y3));
128 
129  return contour;
130  }
131 
132  void TOPGeoQBB::printBackwardContour() const
133  {
134  auto contour = getBackwardContour();
135  cout << "Backward contour [" << s_unitName << "]:" << endl;
136  for (auto& xy : contour) cout << xy.first << " " << xy.second << endl;
137  cout << endl;
138  }
139 
140 
141  std::vector<std::pair<double, double> > TOPGeoQBB::getPrismEnclosureContour() const
142  {
143  typedef std::pair<double, double> Pair;
144  std::vector<Pair> contour;
145 
146  double tanAngle = tan(m_prismEnclosure.getAngle());
147  double x1 = getWidth() / 2;
148  double x2 = x1 - m_prismEnclosure.getHeight() * tanAngle;
149  double x3 = x1 - m_prismEnclosure.getSideThickness();
150  double y1 = m_outerPanel.getY() + m_outerPanel.getMinThickness()
151  - m_sideRails.getHeight();
152  double y2 = y1 - m_prismEnclosure.getHeight();
153  double y3 = y2 + m_prismEnclosure.getBottomThickness();
154  double x4 = x1 - m_prismEnclosure.getSideThickness() - (y1 - y3) * tanAngle;
155  contour.push_back(Pair(x1, y1));
156  contour.push_back(Pair(x2, y2));
157  contour.push_back(Pair(-x2, y2));
158  contour.push_back(Pair(-x1, y1));
159  contour.push_back(Pair(-x3, y1));
160  contour.push_back(Pair(-x4, y3));
161  contour.push_back(Pair(x4, y3));
162  contour.push_back(Pair(x3, y1));
163 
164  return contour;
165  }
166 
167  void TOPGeoQBB::printPrismEnclosureContour() const
168  {
169  auto contour = getPrismEnclosureContour();
170  cout << "Prism enclosure contour [" << s_unitName << "]:" << endl;
171  for (auto& xy : contour) cout << xy.first << " " << xy.second << endl;
172  cout << endl;
173  }
174 
175 
176  std::vector<std::pair<double, double> > TOPGeoQBB::getBackPlateContour() const
177  {
178  typedef std::pair<double, double> Pair;
179  std::vector<Pair> contour;
180 
181  double x1 = getWidth() / 2;
182  double x2 = x1 - m_prismEnclosure.getHeight() * tan(m_prismEnclosure.getAngle());
183  double y1 = m_outerPanel.getY() + m_outerPanel.getMinThickness();
184  double y2 = y1 - m_sideRails.getHeight();
185  double y3 = y2 - m_prismEnclosure.getHeight();
186  contour.push_back(Pair(-x1, y1));
187  contour.push_back(Pair(x1, y1));
188  contour.push_back(Pair(x1, y2));
189  contour.push_back(Pair(x2, y3));
190  contour.push_back(Pair(-x2, y3));
191  contour.push_back(Pair(-x1, y2));
192 
193  return contour;
194  }
195 
196  void TOPGeoQBB::printBackPlateContour() const
197  {
198  auto contour = getBackPlateContour();
199  cout << "Prism enclosure back plate contour [" << s_unitName << "]:" << endl;
200  for (auto& xy : contour) cout << xy.first << " " << xy.second << endl;
201  cout << endl;
202  }
203 
204 
205  std::vector<std::pair<double, double> > TOPGeoQBB::getFrontPlateContour() const
206  {
207  typedef std::pair<double, double> Pair;
208  std::vector<Pair> contour;
209 
210  double x1 = getWidth() / 2;
211  double x2 = x1 - m_prismEnclosure.getHeight() * tan(m_prismEnclosure.getAngle());
212  double y1 = m_outerPanel.getY() + m_outerPanel.getMinThickness();
213  double y2 = y1 - m_sideRails.getHeight();
214  double y3 = y2 - m_prismEnclosure.getHeight();
215  contour.push_back(Pair(x1, y2));
216  contour.push_back(Pair(x2, y3));
217  contour.push_back(Pair(-x2, y3));
218  contour.push_back(Pair(-x1, y2));
219 
220  return contour;
221  }
222 
223  void TOPGeoQBB::printFrontPlateContour() const
224  {
225  auto contour = getFrontPlateContour();
226  cout << "Prism enclosure front plate contour [" << s_unitName << "]:" << endl;
227  for (auto& xy : contour) cout << xy.first << " " << xy.second << endl;
228  cout << endl;
229  }
230 
231 
232  bool TOPGeoQBB::isConsistent() const
233  {
234  if (m_width <= 0) return false;
235  if (m_length <= 0) return false;
236  if (m_prismPosition <= 0) return false;
237  if (m_material.empty()) return false;
238  if (!m_innerPanel.isConsistent()) return false;
239  if (!m_outerPanel.isConsistent()) return false;
240  if (!m_sideRails.isConsistent()) return false;
241  if (!m_prismEnclosure.isConsistent()) return false;
242  if (!m_endPlate.isConsistent()) return false;
243  if (!m_coldPlate.isConsistent()) return false;
244  return true;
245  }
246 
247 
248  void TOPGeoQBB::print(const std::string& title) const
249  {
250  TOPGeoBase::printUnderlined(title);
251 
252  cout << " width = " << getWidth() << " " << s_unitName;
253  cout << ", length = " << getLength() << " " << s_unitName;
254  cout << ", prism-bar joint = " << getPrismPosition() << " " << s_unitName;
255  cout << ", inside material = " << getMaterial() << endl;
256 
257  m_innerPanel.print("QBB inner honeycomb panel geometry parameters");
258  m_outerPanel.print("QBB outer honeycomb panel geometry parameters");
259  m_sideRails.print();
260  m_prismEnclosure.print();
261  m_endPlate.print();
262  m_coldPlate.print();
263 
264  }
265 
267 } // end Belle2 namespace
Belle2::Pair
std::pair< double, double > Pair
Shorthand for std::pair<double, double>
Definition: TOPGeoBarSegment.cc:59
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19