Belle II Software development
TOPGeometryPar.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/TOPGeometry.h>
12#include <top/geometry/FrontEndMapper.h>
13#include <top/geometry/ChannelMapper.h>
14#include <framework/database/DBObjPtr.h>
15#include <framework/database/DBArray.h>
16#include <top/dbobjects/TOPPmtInstallation.h>
17#include <top/dbobjects/TOPPmtQE.h>
18#include <top/dbobjects/TOPNominalQE.h>
19#include <top/dbobjects/TOPCalChannelRQE.h>
20#include <top/dbobjects/TOPCalChannelThresholdEff.h>
21#include <top/dbobjects/TOPCalChannelPulseHeight.h>
22#include <string>
23#include <map>
24
25namespace Belle2 {
30 namespace TOP {
31
35
37
38 public:
39
43 virtual ~TOPGeometryPar();
44
49 static TOPGeometryPar* Instance();
50
55 void Initialize(const GearDir& content);
56
60 void Initialize();
61
66 bool isValid() const {return m_valid;}
67
72 const TOPGeometry* getGeometry() const;
73
79
85
91 {
92 switch (type) {
93 case ChannelMapper::c_IRS3B: return m_channelMapperIRS3B;
94 case ChannelMapper::c_IRSX: return m_channelMapperIRSX;
95 default: return m_channelMapperIRSX;
96 }
97 }
98
105 double getPMTEfficiencyEnvelope(double energy) const;
106
116 double getPMTEfficiency(double energy,
117 int moduleID, int pmtID, double x, double y) const;
118
123 double getRelativePixelEfficiency(int moduleID, int pixelID) const;
124
129 double getRelativePDEonMC(int moduleID, int pixelID) const;
130
137 unsigned getPMTType(int moduleID, int pmtID) const;
138
145 const TOPNominalTTS& getTTS(int moduleID, int pmtID) const;
146
152 double getPhaseIndex(double energy) const;
153
159 double getGroupIndex(double energy) const;
160
166 double getPhaseIndexDerivative(double energy) const;
167
173 double getGroupIndexDerivative(double energy) const;
174
180 double getAbsorptionLength(double energy) const;
181
182 static const double c_hc;
183
184 private:
185
191
196
201 TOPGeometry* createConfiguration(const GearDir& content);
202
209 const std::string& serialNumber);
210
217 const std::string& serialNumber);
218
224 TOPGeoPrism createPrism(const GearDir& content,
225 const std::string& serialNumber);
226
233 std::string addNumber(const std::string& str, unsigned number);
234
238 void clearCache();
239
243 void setEnvelopeQE() const;
244
248 void mapPmtQEToPositions() const;
249
253 void mapPmtTypeToPositions() const;
254
258 void prepareRelEfficiencies() const;
259
263 void prepareRelPDEonMC() const;
264
271 int getUniquePmtID(int moduleID, int pmtID) const
272 {
273 return (moduleID << 16) + pmtID;
274 }
275
282 int getUniquePixelID(int moduleID, int pixelID) const
283 {
284 return (moduleID << 16) + pixelID;
285 }
286
295 double integralOfQE(const std::vector<float>& qe, double ce,
296 double lambdaFirst, double lambdaStep) const;
297
298
304 double refractiveIndex(double lambda) const;
305
306 // Geometry
307
310 bool m_fromDB = false;
311 bool m_valid = false;
312 bool m_oldPayload = false;
313 bool m_BfieldOn = true;
314
315 // Mappings
316
320
321 // PMT database
322
328
329 // cache
331 mutable std::map<int, const TOPPmtQE*> m_pmts;
332 mutable std::map<int, double> m_relEfficiencies;
333 mutable std::map<int, double> m_relPDEonMC;
334 mutable std::map<int, unsigned> m_pmtTypes;
335
336 // Other
337
339
340 };
341
342 inline double TOPGeometryPar::getPhaseIndexDerivative(double energy) const
343 {
344 double dE = 0.01; // [eV]
345 return (getPhaseIndex(energy + dE / 2) - getPhaseIndex(energy - dE / 2)) / dE;
346 }
347
348 inline double TOPGeometryPar::getGroupIndexDerivative(double energy) const
349 {
350 double dE = 0.01; // [eV]
351 return (getGroupIndex(energy + dE / 2) - getGroupIndex(energy - dE / 2)) / dE;
352 }
353
354 inline double TOPGeometryPar::getAbsorptionLength(double energy) const
355 {
356 double lambda = c_hc / energy;
357 return 15100 * pow(lambda / 405, 4); // Alan Schwartz, 2013 (private comunication)
358 }
359
360 } // end of namespace TOP
362} // end of namespace Belle2
Class for accessing objects in the database.
Definition DBObjPtr.h:21
GearDir is the basic class used for accessing the parameter store.
Definition GearDir.h:31
Optional DBArray: This class behaves the same as the DBArray except that it will not raise errors whe...
Definition DBArray.h:97
Geometry parameters of a quartz bar segment.
Geometry parameters of a mirror segment.
Geometry parameters of prism.
Definition TOPGeoPrism.h:27
Geometry parameters of TOP.
Definition TOPGeometry.h:34
Nominal quantum efficiency of PMT.
Nominal time transition spread of PMT.
Provides mapping between electronic channels and pixels.
EType
Enum for electornic types.
Provides mapping between electronics module position within a TOP module and SCROD ID,...
double integralOfQE(const std::vector< float > &qe, double ce, double lambdaFirst, double lambdaStep) const
Returns integral of quantum efficiency over photon energies.
TOPGeoPrism createPrism(const GearDir &content, const std::string &serialNumber)
Create a parameter object from gearbox for prism.
virtual ~TOPGeometryPar()
Destructor.
OptionalDBArray< TOPPmtQE > m_pmtQEData
quantum efficiencies
double getRelativePixelEfficiency(int moduleID, int pixelID) const
Returns relative pixel efficiency (including CE, RQE and threshold efficiency)
bool m_BfieldOn
true if B field is on
double getPMTEfficiencyEnvelope(double energy) const
Returns PMT efficiency envelope, e.g.
bool m_fromDB
parameters from database or Gearbox
const ChannelMapper & getChannelMapper(ChannelMapper::EType type) const
Returns channel mapper (mapping of channels to pixels) - Gearbox only.
const TOPGeometry * getGeometry() const
Returns pointer to geometry object using basf2 units.
TOPGeoMirrorSegment createMirrorSegment(const GearDir &content, const std::string &serialNumber)
Create a parameter object from gearbox for mirror segment.
DBObjPtr< TOPGeometry > * m_geoDB
geometry parameters from database
double getGroupIndexDerivative(double energy) const
Returns the derivative (dn_g/dE) of group refractive index of quartz at given photon energy.
unsigned getPMTType(int moduleID, int pmtID) const
Returns PMT type at a given position.
double getPhaseIndexDerivative(double energy) const
Returns the derivative (dn/dE) of phase refractive index of quartz at given photon energy.
void finalizeInitialization()
finalize initialization
int getUniquePixelID(int moduleID, int pixelID) const
Returns unique pixel ID within the detector.
const ChannelMapper & getChannelMapper() const
Returns default channel mapper (mapping of channels to pixels)
void prepareRelEfficiencies() const
Prepares a map of relative pixel quantum times collection efficiencies (relative to nominal one)
double getPMTEfficiency(double energy, int moduleID, int pmtID, double x, double y) const
Returns PMT pixel efficiency, a product of quantum and collection efficiency.
TOPGeometry * createConfiguration(const GearDir &content)
Create a parameter object from gearbox.
bool isValid() const
check if the geometry is available
DBObjPtr< TOPCalChannelThresholdEff > m_thresholdEff
channel threshold effi.
static TOPGeometryPar * Instance()
Static method to obtain the pointer to its instance.
TOPNominalQE m_envelopeQE
envelope quantum efficiency
std::map< int, unsigned > m_pmtTypes
PMT types mapped to positions.
const FrontEndMapper & getFrontEndMapper() const
Returns front-end mapper (mapping of SCROD's to positions within TOP modules)
DBObjPtr< TOPCalChannelRQE > m_channelRQE
channel relative quantum effi.
ChannelMapper m_channelMapperIRS3B
channel-pixel mapper
FrontEndMapper m_frontEndMapper
front end electronics mapper
std::string addNumber(const std::string &str, unsigned number)
Adds number to string.
static const double c_hc
Planck constant times speed of light in [eV*nm].
double getAbsorptionLength(double energy) const
Returns bulk absorption lenght of quartz at given photon energy.
const TOPNominalTTS & getTTS(int moduleID, int pmtID) const
Returns TTS of a PMT at given position.
void prepareRelPDEonMC() const
Prepares a map of relative pixel photon detection efficiencies on MC.
std::map< int, const TOPPmtQE * > m_pmts
QE data mapped to positions.
bool m_valid
true if geometry is available
void clearCache()
Clears cache for PMT dependent QE data - function is used in call backs.
ChannelMapper m_channelMapperIRSX
channel-pixel mapper
void Initialize()
Initialize from database.
TOPGeoBarSegment createBarSegment(const GearDir &content, const std::string &serialNumber)
Create a parameter object from gearbox for bar segment.
double getRelativePDEonMC(int moduleID, int pixelID) const
Returns relative PDE on MC (including CE, tuning factor and threshold efficiency)
double getPhaseIndex(double energy) const
Returns phase refractive index of quartz at given photon energy.
double refractiveIndex(double lambda) const
Quartz refractive index (SellMeier equation)
bool m_oldPayload
true if old payload found in DB
std::map< int, double > m_relPDEonMC
pixel relative photon detection efficiencies on MC
void mapPmtQEToPositions() const
Maps PMT QE data to positions within the detector.
double getGroupIndex(double energy) const
Returns group refractive index of quartz at given photon energy.
TOPGeometry * m_geo
geometry parameters from Gearbox
TOPGeometryPar()
Hidden constructor since it is a singleton class.
void setEnvelopeQE() const
Constructs envelope of quantum efficiency from PMT data.
void mapPmtTypeToPositions() const
Maps PMT type to positions within the detector.
DBObjPtr< TOPCalChannelPulseHeight > m_pulseHeights
channel pulse height parametrizations
int getUniquePmtID(int moduleID, int pmtID) const
Returns unique PMT ID within the detector.
static TOPGeometryPar * s_instance
Pointer to the class instance.
OptionalDBArray< TOPPmtInstallation > m_pmtInstalled
PMT installation data.
std::map< int, double > m_relEfficiencies
pixel relative QE
Abstract base class for different kinds of events.