Belle II Software  release-05-02-19
TOPGeoModule.h
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 #pragma once
12 
13 #include <top/dbobjects/TOPGeoBase.h>
14 #include <top/dbobjects/TOPGeoBarSegment.h>
15 #include <top/dbobjects/TOPGeoMirrorSegment.h>
16 #include <top/dbobjects/TOPGeoPrism.h>
17 #include <top/dbobjects/TOPGeoPMTArray.h>
18 #include <top/dbobjects/TOPGeoPMTArrayDisplacement.h>
19 #include <top/dbobjects/TOPGeoModuleDisplacement.h>
20 #include <TVector3.h>
21 #include <TRotation.h>
22 
23 namespace Belle2 {
32  class TOPGeoModule: public TOPGeoBase {
33  public:
34 
38  TOPGeoModule()
39  {}
40 
49  TOPGeoModule(int moduleID, double radius, double phi, double backwardZ,
50  const std::string& name = "TOPModule"): TOPGeoBase(name),
51  m_moduleID(moduleID), m_radius(radius), m_phi(phi), m_backwardZ(backwardZ)
52  {}
53 
57  TOPGeoModule(const TOPGeoModule& module): TOPGeoBase(module.getName())
58  {
59  *this = module;
60  m_rotation = 0;
62  m_translation = 0;
63  }
64 
68  TOPGeoModule& operator=(const TOPGeoModule& module)
69  {
70  if (this != &module) {
71  TOPGeoBase::operator=(module);
72  m_moduleID = module.getModuleID();
73  m_radius = module.getRadius();
74  m_phi = module.getPhi();
75  m_backwardZ = module.getBackwardZ();
76  m_moduleCNumber = module.getModuleCNumber();
77  m_bar1 = module.getBarSegment1();
78  m_bar2 = module.getBarSegment2();
79  m_mirror = module.getMirrorSegment();
80  m_prism = module.getPrism();
81  m_pmtArray = module.getPMTArray();
82  m_arrayDisplacement = module.getPMTArrayDisplacement();
83  m_moduleDisplacement = module.getModuleDisplacement();
84  if (m_rotation) delete m_rotation;
86  if (m_translation) delete m_translation;
87  m_rotation = 0;
89  m_translation = 0;
90  }
91  return *this;
92  }
93 
98  {
99  if (m_rotation) delete m_rotation;
101  if (m_translation) delete m_translation;
102  }
103 
108  void setModuleCNumber(unsigned moduleCNumber) {m_moduleCNumber = moduleCNumber;}
109 
114  void setBarSegment1(const TOPGeoBarSegment& bar) {m_bar1 = bar;}
115 
120  void setBarSegment2(const TOPGeoBarSegment& bar) {m_bar2 = bar;}
121 
126  void setMirrorSegment(const TOPGeoMirrorSegment& mirror) {m_mirror = mirror;}
127 
132  void setPrism(const TOPGeoPrism& prism) {m_prism = prism;}
133 
138  void setPMTArray(const TOPGeoPMTArray& array) {m_pmtArray = array;}
139 
144  void setDecoupledPMT(unsigned pmtID) {m_pmtArray.setDecoupledPMT(pmtID);}
145 
150  void generateDecoupledPMTs(double fraction)
151  {
153  }
154 
162  void setBrokenGlue(int glueID, double fraction, double angle,
163  const std::string& material);
164 
170  void setPeelOffRegions(double thickness, const std::string& material);
171 
178  void appendPeelOffRegion(unsigned ID, double fraction, double angle)
179  {
180  m_prism.appendPeelOffRegion(ID, fraction, angle);
181  }
182 
183 
188  void setPMTArrayDisplacement(const TOPGeoPMTArrayDisplacement& displ)
189  {
190  m_arrayDisplacement = displ;
191  }
192 
197  void setModuleDisplacement(const TOPGeoModuleDisplacement& displ)
198  {
199  m_moduleDisplacement = displ;
200  }
201 
206  int getModuleID() const {return m_moduleID;}
207 
212  double getRadius() const {return m_radius / s_unit;}
213 
218  double getPhi() const {return m_phi;}
219 
224  double getBackwardZ() const {return m_backwardZ / s_unit;}
225 
230  unsigned getModuleCNumber() const {return m_moduleCNumber;}
231 
236  const TOPGeoBarSegment& getBarSegment1() const {return m_bar1;}
237 
242  const TOPGeoBarSegment& getBarSegment2() const {return m_bar2;}
243 
248  const TOPGeoMirrorSegment& getMirrorSegment() const {return m_mirror;}
249 
254  const TOPGeoPrism& getPrism() const {return m_prism;}
255 
260  const TOPGeoPMTArray& getPMTArray() const {return m_pmtArray;}
261 
266  const TOPGeoPMTArrayDisplacement& getPMTArrayDisplacement() const
267  {
269  }
270 
276  {
277  return m_moduleDisplacement;
278  }
279 
284  double getBarLength() const
285  {
287  }
288 
293  double getFullLength() const {return getBarLength() + m_prism.getFullLength();}
294 
299  double getForwardZ() const {return getBackwardZ() + getBarLength();}
300 
305  double getBarThickness() const
306  {
310  }
311 
316  double getBarWidth() const
317  {
318  return (m_bar1.getWidth() * m_bar1.getFullLength() +
321  }
322 
328  double getSurfaceReflectivity(double energy) const
329  {
330  return (m_bar1.getSurfaceReflectivity(energy) * m_bar1.getFullLength() +
333  }
334 
339  double getZc() const {return (getBackwardZ() + getForwardZ()) / 2;}
340 
345  double getInnerRadius() const {return getRadius() - getBarThickness() / 2;}
346 
352  TVector3 pointToLocal(const TVector3& point) const;
353 
359  TVector3 momentumToLocal(const TVector3& momentum) const;
360 
366  TVector3 pointToGlobal(const TVector3& point) const;
367 
373  TVector3 momentumToGlobal(const TVector3& momentum) const;
374 
379  bool isConsistent() const override;
380 
385  void print(const std::string& title = "Module geometry parameters") const override;
386 
387 
388  private:
389 
393  void setTransformation() const;
394 
395  int m_moduleID = 0;
396  float m_radius = 0;
397  float m_phi = 0;
398  float m_backwardZ = 0;
400  unsigned m_moduleCNumber = 0;
410  mutable TRotation* m_rotation = 0;
411 
412  mutable TRotation* m_rotationInverse = 0;
413 
414  mutable TVector3* m_translation = 0;
415 
418  };
419 
421 } // end namespace Belle2
Belle2::TOPGeoModule::generateDecoupledPMTs
void generateDecoupledPMTs(double fraction)
Generate randomly a fraction of PMT's to be optically decoupled.
Definition: TOPGeoModule.h:158
Belle2::TOPGeoModule::momentumToGlobal
TVector3 momentumToGlobal(const TVector3 &momentum) const
Transforms momentum vector from module internal frame to Belle II frame.
Definition: TOPGeoModule.cc:60
Belle2::TOPGeoPrism
Geometry parameters of prism.
Definition: TOPGeoPrism.h:36
Belle2::TOPGeoModule::setModuleDisplacement
void setModuleDisplacement(const TOPGeoModuleDisplacement &displ)
Sets module displacement.
Definition: TOPGeoModule.h:205
Belle2::TOPGeoModule::getFullLength
double getFullLength() const
Returns full length (including prism, wavelenght filter and glue joints)
Definition: TOPGeoModule.h:301
Belle2::TOPGeoPMTArray::generateDecoupledPMTs
void generateDecoupledPMTs(double fraction)
Generate randomly a fraction of PMT's to be optically decoupled.
Definition: TOPGeoPMTArray.cc:76
Belle2::TOPGeoModule::getModuleCNumber
unsigned getModuleCNumber() const
Returns module construction number (0 = ideal module)
Definition: TOPGeoModule.h:238
Belle2::TOPGeoBarSegment
Geometry parameters of a quartz bar segment.
Definition: TOPGeoBarSegment.h:37
Belle2::TOPGeoModule::setPMTArray
void setPMTArray(const TOPGeoPMTArray &array)
Sets PMT array.
Definition: TOPGeoModule.h:146
Belle2::TOPGeoModule::print
void print(const std::string &title="Module geometry parameters") const override
Print the content of the class.
Definition: TOPGeoModule.cc:105
Belle2::TOPGeoModule::momentumToLocal
TVector3 momentumToLocal(const TVector3 &momentum) const
Transforms momentum vector from Belle II to module internal frame.
Definition: TOPGeoModule.cc:72
Belle2::TOPGeoModule::TOPGeoModule
TOPGeoModule(int moduleID, double radius, double phi, double backwardZ, const std::string &name="TOPModule")
Useful constructor.
Definition: TOPGeoModule.h:57
Belle2::TOPGeoModule::m_backwardZ
float m_backwardZ
z position of prism-bar joint in Belle II frame
Definition: TOPGeoModule.h:406
Belle2::TOPGeoModule::getZc
double getZc() const
Returns z of bar center (w/o prism) in Belle II frame.
Definition: TOPGeoModule.h:347
Belle2::TOPGeoBase
Base class for geometry parameters.
Definition: TOPGeoBase.h:35
Belle2::TOPGeoModule::m_bar2
TOPGeoBarSegment m_bar2
bar segment 2 (backward bar)
Definition: TOPGeoModule.h:410
Belle2::TOPGeoModule::operator=
TOPGeoModule & operator=(const TOPGeoModule &module)
Assignment operator.
Definition: TOPGeoModule.h:76
Belle2::TOPGeoModule::m_translation
TVector3 * m_translation
cache for translation vector (from internal to Belle II frame)
Definition: TOPGeoModule.h:422
Belle2::TOPGeoBarSegment::getFullLength
double getFullLength() const
Returns bar segment length including glue.
Definition: TOPGeoBarSegment.h:129
Belle2::TOPGeoModule::setBarSegment2
void setBarSegment2(const TOPGeoBarSegment &bar)
Sets bar segment No.2 (backward bar)
Definition: TOPGeoModule.h:128
Belle2::TOPGeoModule::getInnerRadius
double getInnerRadius() const
Returns inner surface radius in Belle II frame.
Definition: TOPGeoModule.h:353
Belle2::TOPGeoModule::getForwardZ
double getForwardZ() const
Returns the z position of the bar forward end in Belle II frame.
Definition: TOPGeoModule.h:307
Belle2::TOPGeoModule::setPeelOffRegions
void setPeelOffRegions(double thickness, const std::string &material)
Sets parameters of the peel-off cookie volumes.
Definition: TOPGeoModule.cc:45
Belle2::TOPGeoModule::getMirrorSegment
const TOPGeoMirrorSegment & getMirrorSegment() const
Returns mirror segment.
Definition: TOPGeoModule.h:256
Belle2::TOPGeoModule::setPrism
void setPrism(const TOPGeoPrism &prism)
Sets prism.
Definition: TOPGeoModule.h:140
Belle2::TOPGeoBase::getName
const std::string & getName() const
Returns object name.
Definition: TOPGeoBase.h:61
Belle2::TOPGeoModule::setBrokenGlue
void setBrokenGlue(int glueID, double fraction, double angle, const std::string &material)
Sets glue to be broken (delaminated)
Definition: TOPGeoModule.cc:25
Belle2::TOPGeoModuleDisplacement
Displacement parameters of a TOP module.
Definition: TOPGeoModuleDisplacement.h:36
Belle2::TOPGeoModule::m_radius
float m_radius
radius of bar central plane in Belle II frame
Definition: TOPGeoModule.h:404
Belle2::TOPGeoPrism::appendPeelOffRegion
void appendPeelOffRegion(unsigned ID, double fraction, double angle)
Appends peel-off cookie region.
Definition: TOPGeoPrism.cc:83
Belle2::TOPGeoModule::setPMTArrayDisplacement
void setPMTArrayDisplacement(const TOPGeoPMTArrayDisplacement &displ)
Sets PMT array displacement.
Definition: TOPGeoModule.h:196
Belle2::TOPGeoModule::getModuleDisplacement
const TOPGeoModuleDisplacement & getModuleDisplacement() const
Returns module displacement.
Definition: TOPGeoModule.h:283
Belle2::TOPGeoModule::getBarSegment2
const TOPGeoBarSegment & getBarSegment2() const
Returns bar segment No.2 (backward bar)
Definition: TOPGeoModule.h:250
Belle2::TOPGeoModule::getBackwardZ
double getBackwardZ() const
Returns the z position of prism-bar joint in Belle II frame.
Definition: TOPGeoModule.h:232
Belle2::TOPGeoModule::m_rotation
TRotation * m_rotation
cache for rotation matrix (from internal to Belle II frame)
Definition: TOPGeoModule.h:418
Belle2::TOPGeoModule::m_moduleDisplacement
TOPGeoModuleDisplacement m_moduleDisplacement
module displacement
Definition: TOPGeoModule.h:415
Belle2::TOPGeoModule::TOPGeoModule
TOPGeoModule()
Default constructor.
Definition: TOPGeoModule.h:46
Belle2::TOPGeoModule
Geometry parameters of a module (optical components + positioning)
Definition: TOPGeoModule.h:40
Belle2::TOPGeoModule::ClassDefOverride
ClassDefOverride(TOPGeoModule, 3)
ClassDef.
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TOPGeoPMTArray
Geometry parameters of MCP-PMT array.
Definition: TOPGeoPMTArray.h:34
Belle2::TOPGeoBase::s_unit
static double s_unit
conversion unit for length
Definition: TOPGeoBase.h:96
Belle2::TOPGeoModule::getRadius
double getRadius() const
Returns radius of the bar central plane in Belle II frame.
Definition: TOPGeoModule.h:220
Belle2::TOPGeoModule::getModuleID
int getModuleID() const
Returns module ID.
Definition: TOPGeoModule.h:214
Belle2::TOPGeoBarSegment::getWidth
double getWidth() const
Returns bar segment width.
Definition: TOPGeoBarSegment.h:111
Belle2::TOPGeoModule::isConsistent
bool isConsistent() const override
Check for consistency of data members.
Definition: TOPGeoModule.cc:93
Belle2::TOPGeoModule::getBarLength
double getBarLength() const
Returns bar length (w/o prism) including glue joints.
Definition: TOPGeoModule.h:292
Belle2::TOPGeoModule::getPhi
double getPhi() const
Returns module azimuthal angle in Belle II frame.
Definition: TOPGeoModule.h:226
Belle2::TOPGeoModule::m_phi
float m_phi
azimuthal angle in Belle II frame
Definition: TOPGeoModule.h:405
Belle2::TOPGeoModule::m_rotationInverse
TRotation * m_rotationInverse
cache for inverse rotation matrix
Definition: TOPGeoModule.h:420
Belle2::TOPGeoModule::setModuleCNumber
void setModuleCNumber(unsigned moduleCNumber)
Sets module construction number (0 = ideal module = default)
Definition: TOPGeoModule.h:116
Belle2::TOPGeoModule::getPrism
const TOPGeoPrism & getPrism() const
Returns prism.
Definition: TOPGeoModule.h:262
Belle2::TOPGeoModule::m_bar1
TOPGeoBarSegment m_bar1
bar segment 1 (forward bar)
Definition: TOPGeoModule.h:409
Belle2::TOPGeoModule::appendPeelOffRegion
void appendPeelOffRegion(unsigned ID, double fraction, double angle)
Appends peel-off cookie region.
Definition: TOPGeoModule.h:186
Belle2::TOPGeoModule::setMirrorSegment
void setMirrorSegment(const TOPGeoMirrorSegment &mirror)
Sets mirror segment.
Definition: TOPGeoModule.h:134
Belle2::TOPGeoMirrorSegment
Geometry parameters of a mirror segment.
Definition: TOPGeoMirrorSegment.h:32
Belle2::TOPGeoModule::getPMTArray
const TOPGeoPMTArray & getPMTArray() const
Returns PMT array.
Definition: TOPGeoModule.h:268
Belle2::TOPGeoModule::setTransformation
void setTransformation() const
Sets transformation cache.
Definition: TOPGeoModule.cc:78
Belle2::TOPGeoModule::pointToGlobal
TVector3 pointToGlobal(const TVector3 &point) const
Transforms 3D point from module internal frame to Belle II frame.
Definition: TOPGeoModule.cc:54
Belle2::TOPGeoModule::getSurfaceReflectivity
double getSurfaceReflectivity(double energy) const
Returns average surface reflectivity at given photon energy (weigthed by segment lengths)
Definition: TOPGeoModule.h:336
Belle2::TOPGeoModule::pointToLocal
TVector3 pointToLocal(const TVector3 &point) const
Transforms 3D point from Belle II to module internal frame.
Definition: TOPGeoModule.cc:66
Belle2::TOPGeoModule::getBarWidth
double getBarWidth() const
Returns average bar width (weigthed by segment lengths)
Definition: TOPGeoModule.h:324
Belle2::TOPGeoModule::m_pmtArray
TOPGeoPMTArray m_pmtArray
geometry parameters of PMT array
Definition: TOPGeoModule.h:413
Belle2::TOPGeoModule::m_prism
TOPGeoPrism m_prism
prism
Definition: TOPGeoModule.h:412
Belle2::TOPGeoModule::m_arrayDisplacement
TOPGeoPMTArrayDisplacement m_arrayDisplacement
PMT array displacement.
Definition: TOPGeoModule.h:414
Belle2::TOPGeoModule::setDecoupledPMT
void setDecoupledPMT(unsigned pmtID)
Sets PMT as optically decoupled.
Definition: TOPGeoModule.h:152
Belle2::TOPGeoModule::m_mirror
TOPGeoMirrorSegment m_mirror
mirror segment
Definition: TOPGeoModule.h:411
Belle2::TOPGeoModule::~TOPGeoModule
~TOPGeoModule()
Destructor.
Definition: TOPGeoModule.h:105
Belle2::TOPGeoModule::m_moduleCNumber
unsigned m_moduleCNumber
module construction number, 0 = ideal module
Definition: TOPGeoModule.h:408
Belle2::TOPGeoModule::setBarSegment1
void setBarSegment1(const TOPGeoBarSegment &bar)
Sets bar segment No.1 (forward bar)
Definition: TOPGeoModule.h:122
Belle2::TOPGeoPMTArray::setDecoupledPMT
void setDecoupledPMT(unsigned pmtID)
Sets PMT as optically decoupled.
Definition: TOPGeoPMTArray.h:76
Belle2::TOPGeoModule::getPMTArrayDisplacement
const TOPGeoPMTArrayDisplacement & getPMTArrayDisplacement() const
Returns PMT array displacement.
Definition: TOPGeoModule.h:274
Belle2::TOPGeoPMTArrayDisplacement
Displacement parameters of MCP-PMT array.
Definition: TOPGeoPMTArrayDisplacement.h:33
Belle2::TOPGeoModule::m_moduleID
int m_moduleID
module ID
Definition: TOPGeoModule.h:403
Belle2::TOPGeoModule::getBarThickness
double getBarThickness() const
Returns average bar thickness (weigthed by segment lengths)
Definition: TOPGeoModule.h:313
Belle2::TOPGeoBarSegment::getSurfaceReflectivity
double getSurfaceReflectivity(double energy) const
Returns surface reflectivity at given photon energy.
Definition: TOPGeoBarSegment.h:183
Belle2::TOPGeoBarSegment::getThickness
double getThickness() const
Returns bar segment thickness.
Definition: TOPGeoBarSegment.h:117
Belle2::TOPGeoModule::getBarSegment1
const TOPGeoBarSegment & getBarSegment1() const
Returns bar segment No.1 (forward bar)
Definition: TOPGeoModule.h:244