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 static double getPhaseIndex(double energy);
153
159 static double getGroupIndex(double energy);
160
166 static double getPhaseIndexDerivative(double energy);
167
173 static double getGroupIndexDerivative(double energy);
174
180 static double getAbsorptionLength(double energy);
181
182 static const double c_hc;
183
184 private:
185
191
196
201
206
211 static TOPGeometry* createConfiguration(const GearDir& content);
212
218 static TOPGeoBarSegment createBarSegment(const GearDir& content,
219 const std::string& serialNumber);
220
226 static TOPGeoMirrorSegment createMirrorSegment(const GearDir& content,
227 const std::string& serialNumber);
228
234 static TOPGeoPrism createPrism(const GearDir& content,
235 const std::string& serialNumber);
236
243 static std::string addNumber(const std::string& str, unsigned number);
244
248 void clearCache();
249
253 void setEnvelopeQE() const;
254
258 void mapPmtQEToPositions() const;
259
263 void mapPmtTypeToPositions() const;
264
268 void prepareRelEfficiencies() const;
269
273 void prepareRelPDEonMC() const;
274
281 static int getUniquePmtID(int moduleID, int pmtID)
282 {
283 return (moduleID << 16) + pmtID;
284 }
285
292 static int getUniquePixelID(int moduleID, int pixelID)
293 {
294 return (moduleID << 16) + pixelID;
295 }
296
305 double integralOfQE(const std::vector<float>& qe, double ce,
306 double lambdaFirst, double lambdaStep) const;
307
308
314 static double refractiveIndex(double lambda);
315
316 // Geometry
317
320 bool m_fromDB = false;
321 bool m_valid = false;
322 bool m_oldPayload = false;
323 bool m_BfieldOn = true;
324
325 // Mappings
326
330
331 // PMT database
332
338
339 // cache
341 mutable std::map<int, const TOPPmtQE*> m_pmts;
342 mutable std::map<int, double> m_relEfficiencies;
343 mutable std::map<int, double> m_relPDEonMC;
344 mutable std::map<int, unsigned> m_pmtTypes;
345
346 // Other
347
349
350 };
351
352 inline double TOPGeometryPar::getPhaseIndexDerivative(double energy)
353 {
354 double dE = 0.01; // [eV]
355 return (getPhaseIndex(energy + dE / 2) - getPhaseIndex(energy - dE / 2)) / dE;
356 }
357
358 inline double TOPGeometryPar::getGroupIndexDerivative(double energy)
359 {
360 double dE = 0.01; // [eV]
361 return (getGroupIndex(energy + dE / 2) - getGroupIndex(energy - dE / 2)) / dE;
362 }
363
364 inline double TOPGeometryPar::getAbsorptionLength(double energy)
365 {
366 double lambda = c_hc / energy;
367 return 15100 * pow(lambda / 405, 4); // Alan Schwartz, 2013 (private communication)
368 }
369
370 } // end of namespace TOP
372} // 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,...
static double getAbsorptionLength(double energy)
Returns bulk absorption length of quartz at given photon energy.
static double getGroupIndexDerivative(double energy)
Returns the derivative (dn_g/dE) of group refractive index of quartz at given photon energy.
double integralOfQE(const std::vector< float > &qe, double ce, double lambdaFirst, double lambdaStep) const
Returns integral of quantum efficiency over photon energies.
static 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
static double getPhaseIndex(double energy)
Returns phase refractive index of quartz at given photon energy.
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.
static 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
static int getUniquePmtID(int moduleID, int pmtID)
Returns unique PMT ID within the detector.
unsigned getPMTType(int moduleID, int pmtID) const
Returns PMT type at a given position.
void finalizeInitialization()
finalize initialization
static double getGroupIndex(double energy)
Returns group refractive index of quartz at given photon energy.
TOPGeometryPar(const TOPGeometryPar &)=delete
Deleted copy constructor since it is a singleton class.
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.
static 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)
TOPGeometryPar & operator=(const TOPGeometryPar &)=delete
Deleted assignment operator since it is a singleton class.
static int getUniquePixelID(int moduleID, int pixelID)
Returns unique pixel ID within the detector.
DBObjPtr< TOPCalChannelRQE > m_channelRQE
channel relative quantum effi.
ChannelMapper m_channelMapperIRS3B
channel-pixel mapper
FrontEndMapper m_frontEndMapper
front end electronics mapper
static 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].
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.
static double refractiveIndex(double lambda)
Quartz refractive index (SellMeier equation)
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
static double getPhaseIndexDerivative(double energy)
Returns the derivative (dn/dE) of phase refractive index of quartz at given photon energy.
void Initialize()
Initialize from database.
static 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)
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.
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
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.