Belle II Software  release-06-01-15
TOPGeoModule.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #pragma once
10 
11 #include <top/dbobjects/TOPGeoBase.h>
12 #include <top/dbobjects/TOPGeoBarSegment.h>
13 #include <top/dbobjects/TOPGeoMirrorSegment.h>
14 #include <top/dbobjects/TOPGeoPrism.h>
15 #include <top/dbobjects/TOPGeoPMTArray.h>
16 #include <top/dbobjects/TOPGeoPMTArrayDisplacement.h>
17 #include <top/dbobjects/TOPGeoModuleDisplacement.h>
18 #include <TVector3.h>
19 #include <TRotation.h>
20 
21 namespace Belle2 {
30  class TOPGeoModule: public TOPGeoBase {
31  public:
32 
37  {}
38 
47  TOPGeoModule(int moduleID, double radius, double phi, double backwardZ,
48  const std::string& name = "TOPModule"): TOPGeoBase(name),
49  m_moduleID(moduleID), m_radius(radius), m_phi(phi), m_backwardZ(backwardZ)
50  {}
51 
55  TOPGeoModule(const TOPGeoModule& module);
56 
60  TOPGeoModule& operator=(const TOPGeoModule& module);
61 
65  ~TOPGeoModule();
66 
71  void setModuleCNumber(unsigned moduleCNumber) {m_moduleCNumber = moduleCNumber;}
72 
77  void setBarSegment1(const TOPGeoBarSegment& bar) {m_bar1 = bar;}
78 
83  void setBarSegment2(const TOPGeoBarSegment& bar) {m_bar2 = bar;}
84 
89  void setMirrorSegment(const TOPGeoMirrorSegment& mirror) {m_mirror = mirror;}
90 
95  void setPrism(const TOPGeoPrism& prism) {m_prism = prism;}
96 
101  void setPMTArray(const TOPGeoPMTArray& array) {m_pmtArray = array;}
102 
107  void setDecoupledPMT(unsigned pmtID) {m_pmtArray.setDecoupledPMT(pmtID);}
108 
113  void generateDecoupledPMTs(double fraction)
114  {
116  }
117 
125  void setBrokenGlue(int glueID, double fraction, double angle,
126  const std::string& material);
127 
133  void setPeelOffRegions(double thickness, const std::string& material);
134 
141  void appendPeelOffRegion(unsigned ID, double fraction, double angle)
142  {
143  m_prism.appendPeelOffRegion(ID, fraction, angle);
144  }
145 
146 
152  {
153  m_arrayDisplacement = displ;
154  }
155 
161  {
162  m_moduleDisplacement = displ;
163  }
164 
169  int getModuleID() const {return m_moduleID;}
170 
175  double getRadius() const {return m_radius / s_unit;}
176 
181  double getPhi() const {return m_phi;}
182 
187  double getBackwardZ() const {return m_backwardZ / s_unit;}
188 
193  unsigned getModuleCNumber() const {return m_moduleCNumber;}
194 
199  const TOPGeoBarSegment& getBarSegment1() const {return m_bar1;}
200 
205  const TOPGeoBarSegment& getBarSegment2() const {return m_bar2;}
206 
212 
217  const TOPGeoPrism& getPrism() const {return m_prism;}
218 
223  const TOPGeoPMTArray& getPMTArray() const {return m_pmtArray;}
224 
230  {
231  return m_arrayDisplacement;
232  }
233 
239  {
240  return m_moduleDisplacement;
241  }
242 
247  double getBarLength() const
248  {
250  }
251 
256  double getFullLength() const {return getBarLength() + m_prism.getFullLength();}
257 
262  double getForwardZ() const {return getBackwardZ() + getBarLength();}
263 
268  double getBarThickness() const
269  {
270  return (m_bar1.getThickness() * m_bar1.getFullLength() +
273  }
274 
279  double getBarWidth() const
280  {
281  return (m_bar1.getWidth() * m_bar1.getFullLength() +
284  }
285 
291  double getSurfaceReflectivity(double energy) const
292  {
293  return (m_bar1.getSurfaceReflectivity(energy) * m_bar1.getFullLength() +
296  }
297 
302  double getZc() const {return (getBackwardZ() + getForwardZ()) / 2;}
303 
308  double getInnerRadius() const {return getRadius() - getBarThickness() / 2;}
309 
315  TVector3 pointToLocal(const TVector3& point) const;
316 
322  TVector3 momentumToLocal(const TVector3& momentum) const;
323 
329  TVector3 pointToGlobal(const TVector3& point) const;
330 
336  TVector3 momentumToGlobal(const TVector3& momentum) const;
337 
343  TVector3 pointGlobalToNominal(const TVector3& point) const;
344 
350  TVector3 momentumGlobalToNominal(const TVector3& momentum) const;
351 
357  TVector3 pointNominalToGlobal(const TVector3& point) const;
358 
364  TVector3 momentumNominalToGlobal(const TVector3& momentum) const;
365 
370  bool isConsistent() const override;
371 
376  void print(const std::string& title = "Module geometry parameters") const override;
377 
378 
379  private:
380 
384  void setTransformation() const;
385 
386  int m_moduleID = 0;
387  float m_radius = 0;
388  float m_phi = 0;
389  float m_backwardZ = 0;
391  unsigned m_moduleCNumber = 0;
401  mutable TRotation* m_rotation = 0;
403  mutable TRotation* m_rotationInverse = 0;
405  mutable TVector3* m_translation = 0;
406 
408  mutable TRotation* m_rotationNominal = 0;
410  mutable TRotation* m_rotationNominalInverse = 0;
412  mutable TVector3* m_translationNominal = 0;
413 
416  };
417 
419 } // end namespace Belle2
Geometry parameters of a quartz bar segment.
double getWidth() const
Returns bar segment width.
double getFullLength() const
Returns bar segment length including glue.
double getThickness() const
Returns bar segment thickness.
double getSurfaceReflectivity(double energy) const
Returns surface reflectivity at given photon energy.
Base class for geometry parameters.
Definition: TOPGeoBase.h:25
Geometry parameters of a mirror segment.
Displacement parameters of a TOP module.
Geometry parameters of a module (optical components + positioning)
Definition: TOPGeoModule.h:30
void appendPeelOffRegion(unsigned ID, double fraction, double angle)
Appends peel-off cookie region.
Definition: TOPGeoModule.h:141
TVector3 * m_translationNominal
do not write out
Definition: TOPGeoModule.h:412
const TOPGeoBarSegment & getBarSegment1() const
Returns bar segment No.1 (forward bar)
Definition: TOPGeoModule.h:199
unsigned getModuleCNumber() const
Returns module construction number (0 = ideal module)
Definition: TOPGeoModule.h:193
TOPGeoPMTArrayDisplacement m_arrayDisplacement
PMT array displacement.
Definition: TOPGeoModule.h:397
void setDecoupledPMT(unsigned pmtID)
Sets PMT as optically decoupled.
Definition: TOPGeoModule.h:107
float m_backwardZ
z position of prism-bar joint in Belle II frame
Definition: TOPGeoModule.h:389
const TOPGeoPrism & getPrism() const
Returns prism.
Definition: TOPGeoModule.h:217
double getPhi() const
Returns module azimuthal angle in Belle II frame.
Definition: TOPGeoModule.h:181
TOPGeoModule(int moduleID, double radius, double phi, double backwardZ, const std::string &name="TOPModule")
Useful constructor.
Definition: TOPGeoModule.h:47
void setBarSegment2(const TOPGeoBarSegment &bar)
Sets bar segment No.2 (backward bar)
Definition: TOPGeoModule.h:83
float m_phi
azimuthal angle in Belle II frame
Definition: TOPGeoModule.h:388
void setModuleCNumber(unsigned moduleCNumber)
Sets module construction number (0 = ideal module = default)
Definition: TOPGeoModule.h:71
void generateDecoupledPMTs(double fraction)
Generate randomly a fraction of PMT's to be optically decoupled.
Definition: TOPGeoModule.h:113
void setPMTArrayDisplacement(const TOPGeoPMTArrayDisplacement &displ)
Sets PMT array displacement.
Definition: TOPGeoModule.h:151
TRotation * m_rotation
cache for rotation matrix from internal (= nominal & displaced) to Belle II frame
Definition: TOPGeoModule.h:401
double getForwardZ() const
Returns the z position of the bar forward end in Belle II frame.
Definition: TOPGeoModule.h:262
void setPrism(const TOPGeoPrism &prism)
Sets prism.
Definition: TOPGeoModule.h:95
void setBarSegment1(const TOPGeoBarSegment &bar)
Sets bar segment No.1 (forward bar)
Definition: TOPGeoModule.h:77
double getZc() const
Returns z of bar center (w/o prism) in Belle II frame.
Definition: TOPGeoModule.h:302
float m_radius
radius of bar central plane in Belle II frame
Definition: TOPGeoModule.h:387
double getFullLength() const
Returns full length (including prism, wavelenght filter and glue joints)
Definition: TOPGeoModule.h:256
int m_moduleID
module ID
Definition: TOPGeoModule.h:386
double getBarWidth() const
Returns average bar width (weigthed by segment lengths)
Definition: TOPGeoModule.h:279
const TOPGeoPMTArrayDisplacement & getPMTArrayDisplacement() const
Returns PMT array displacement.
Definition: TOPGeoModule.h:229
void setMirrorSegment(const TOPGeoMirrorSegment &mirror)
Sets mirror segment.
Definition: TOPGeoModule.h:89
int getModuleID() const
Returns module ID.
Definition: TOPGeoModule.h:169
TVector3 * m_translation
do not write out
Definition: TOPGeoModule.h:405
TOPGeoPMTArray m_pmtArray
geometry parameters of PMT array
Definition: TOPGeoModule.h:396
double getInnerRadius() const
Returns inner surface radius in Belle II frame.
Definition: TOPGeoModule.h:308
ClassDefOverride(TOPGeoModule, 3)
do not write out
TOPGeoMirrorSegment m_mirror
mirror segment
Definition: TOPGeoModule.h:394
void setPMTArray(const TOPGeoPMTArray &array)
Sets PMT array.
Definition: TOPGeoModule.h:101
TOPGeoPrism m_prism
prism
Definition: TOPGeoModule.h:395
const TOPGeoBarSegment & getBarSegment2() const
Returns bar segment No.2 (backward bar)
Definition: TOPGeoModule.h:205
double getRadius() const
Returns radius of the bar central plane in Belle II frame.
Definition: TOPGeoModule.h:175
const TOPGeoModuleDisplacement & getModuleDisplacement() const
Returns module displacement.
Definition: TOPGeoModule.h:238
double getBarLength() const
Returns bar length (w/o prism) including glue joints.
Definition: TOPGeoModule.h:247
TOPGeoBarSegment m_bar2
bar segment 2 (backward bar)
Definition: TOPGeoModule.h:393
TOPGeoModuleDisplacement m_moduleDisplacement
module displacement
Definition: TOPGeoModule.h:398
TRotation * m_rotationNominalInverse
do not write out
Definition: TOPGeoModule.h:410
double getSurfaceReflectivity(double energy) const
Returns average surface reflectivity at given photon energy (weigthed by segment lengths)
Definition: TOPGeoModule.h:291
double getBarThickness() const
Returns average bar thickness (weigthed by segment lengths)
Definition: TOPGeoModule.h:268
void setModuleDisplacement(const TOPGeoModuleDisplacement &displ)
Sets module displacement.
Definition: TOPGeoModule.h:160
TOPGeoModule()
Default constructor.
Definition: TOPGeoModule.h:36
unsigned m_moduleCNumber
module construction number, 0 = ideal module
Definition: TOPGeoModule.h:391
TRotation * m_rotationInverse
do not write out
Definition: TOPGeoModule.h:403
double getBackwardZ() const
Returns the z position of prism-bar joint in Belle II frame.
Definition: TOPGeoModule.h:187
const TOPGeoPMTArray & getPMTArray() const
Returns PMT array.
Definition: TOPGeoModule.h:223
TRotation * m_rotationNominal
do not write out
Definition: TOPGeoModule.h:408
TOPGeoBarSegment m_bar1
bar segment 1 (forward bar)
Definition: TOPGeoModule.h:392
const TOPGeoMirrorSegment & getMirrorSegment() const
Returns mirror segment.
Definition: TOPGeoModule.h:211
Displacement parameters of MCP-PMT array.
Geometry parameters of MCP-PMT array.
void setDecoupledPMT(unsigned pmtID)
Sets PMT as optically decoupled.
Geometry parameters of prism.
Definition: TOPGeoPrism.h:27
void appendPeelOffRegion(unsigned ID, double fraction, double angle)
Appends peel-off cookie region.
Definition: TOPGeoPrism.cc:93
bool isConsistent() const override
Check for consistency of data members.
void print(const std::string &title="Module geometry parameters") const override
Print the content of the class.
static double s_unit
conversion unit for length
Definition: TOPGeoBase.h:86
TVector3 pointToGlobal(const TVector3 &point) const
Transforms 3D point from module internal (= nominal & displaced) frame to Belle II frame.
TVector3 momentumGlobalToNominal(const TVector3 &momentum) const
Transforms momentum vector from Belle II to module nominal frame.
~TOPGeoModule()
Destructor.
Definition: TOPGeoModule.cc:66
void generateDecoupledPMTs(double fraction)
Generate randomly a fraction of PMT's to be optically decoupled.
TVector3 pointGlobalToNominal(const TVector3 &point) const
Transforms 3D point from Belle II to module nominal frame.
void setTransformation() const
Sets transformation cache.
Definition: TOPGeoModule.cc:76
TVector3 pointNominalToGlobal(const TVector3 &point) const
Transforms 3D point from module nominal frame to Belle II frame.
TVector3 momentumToGlobal(const TVector3 &momentum) const
Transforms momentum vector from module internal (= nominal & displaced) frame to Belle II frame.
void setPeelOffRegions(double thickness, const std::string &material)
Sets parameters of the peel-off cookie volumes.
TVector3 pointToLocal(const TVector3 &point) const
Transforms 3D point from Belle II to module internal (= nominal & displaced) frame.
TVector3 momentumToLocal(const TVector3 &momentum) const
Transforms momentum vector from Belle II to module internal (= nominal & displaced) frame.
TVector3 momentumNominalToGlobal(const TVector3 &momentum) const
Transforms momentum vector from module nominal frame to Belle II frame.
void setBrokenGlue(int glueID, double fraction, double angle, const std::string &material)
Sets glue to be broken (delaminated)
Definition: TOPGeoModule.cc:93
TOPGeoModule & operator=(const TOPGeoModule &module)
Assignment operator.
Definition: TOPGeoModule.cc:34
Abstract base class for different kinds of events.