Belle II Software development
CsiGeometryPar Class Reference

The Class for CSI Geometry Parameters. More...

#include <CsiGeometryPar.h>

Public Member Functions

 CsiGeometryPar ()
 Constructor.
 
virtual ~CsiGeometryPar ()
 Destructor.
 
void clear ()
 Clears.
 
void Print (const int cid, int debuglevel=80)
 Print crystal information.
 
void PrintAll (int debuglevel=80)
 Print all crystals information.
 
void read ()
 Gets geometry parameters from gearbox.
 
int CsiVolNameToCellID (const G4String VolumeName)
 Get Cell Id.
 
G4Material * GetMaterial (int cid)
 Get pointer to the Geant4 Material.
 
ROOT::Math::XYZVector GetPosition (int cid)
 Get the position of the crystal.
 
ROOT::Math::XYZVector GetOrientation (int cid)
 Get the orientation of the crystal.
 
int GetEnclosureID (int cid)
 Get Enclosure ID from cell ID.
 
int GetSlotID (int cid)
 Get Slot ID in the Enclosure from cell ID.
 
double GetMaterialProperty (int cid, const char *propertyname)
 Get material property.
 
double GetTauFast (int cid)
 Get crystal fast time constant.
 
double GetTauSlow (int cid)
 Get crystal slow time constant.
 

Static Public Member Functions

static CsiGeometryParInstance ()
 Static method to get a reference to the CsiGeometryPar instance.
 

Private Attributes

int m_cellID
 The Cell ID information.
 
std::vector< int > m_thetaID
 The Theta ID information.
 
std::vector< int > m_phiID
 The Phi ID information.
 
std::vector< int > m_BoxID
 The index of the enclosure.
 
std::vector< int > m_SlotID
 The slot index of the crystal in the enclosure.
 
std::vector< ROOT::Math::XYZVector > m_Position
 Position of the nominal centre of the crystal.
 
std::vector< ROOT::Math::XYZVector > m_Orientation
 Orientation of the crystal.
 

Static Private Attributes

static CsiGeometryParm_B4CsiGeometryParDB = 0
 Pointer that saves the instance of this class.
 

Detailed Description

The Class for CSI Geometry Parameters.

This class provides CSI geometry parameters for simulation, reconstruction and so on. These parameters are gotten from gearbox.

Definition at line 48 of file CsiGeometryPar.h.

Constructor & Destructor Documentation

◆ CsiGeometryPar()

Constructor.

Definition at line 31 of file CsiGeometryPar.cc.

32{
33 clear();
34 read();
35
36 PrintAll();
37}
void PrintAll(int debuglevel=80)
Print all crystals information.
void read()
Gets geometry parameters from gearbox.

◆ ~CsiGeometryPar()

~CsiGeometryPar ( )
virtual

Destructor.

Definition at line 39 of file CsiGeometryPar.cc.

40{
43 B2INFO("m_B4CsiGeometryParDB deleted ");
44 }
45}
static CsiGeometryPar * m_B4CsiGeometryParDB
Pointer that saves the instance of this class.

Member Function Documentation

◆ clear()

void clear ( )

Clears.

Definition at line 47 of file CsiGeometryPar.cc.

48{
49 m_cellID = 0;
50
51 m_Position.clear();
52 m_Orientation.clear();
53 m_BoxID.clear();
54 m_SlotID.clear();
55 m_thetaID.clear();
56 m_phiID.clear();
57
58}
std::vector< ROOT::Math::XYZVector > m_Position
Position of the nominal centre of the crystal.
std::vector< ROOT::Math::XYZVector > m_Orientation
Orientation of the crystal.
std::vector< int > m_thetaID
The Theta ID information.
int m_cellID
The Cell ID information.
std::vector< int > m_phiID
The Phi ID information.
std::vector< int > m_BoxID
The index of the enclosure.
std::vector< int > m_SlotID
The slot index of the crystal in the enclosure.

◆ CsiVolNameToCellID()

int CsiVolNameToCellID ( const G4String  VolumeName)

Get Cell Id.

Definition at line 133 of file CsiGeometryPar.cc.

134{
135 int cellID = 0;
136
137 vector< string > partName;
138 boost::split(partName, VolumeName, boost::is_any_of("_"));
139
140 int iEnclosure = -1;
141 int iCrystal = -1;
142 for (std::vector<string>::iterator it = partName.begin() ; it != partName.end(); ++it) {
143 if (boost::equals(*it, "Enclosure")) iEnclosure = boost::lexical_cast<int>(*(it + 1)) - 1;
144 else if (boost::equals(*it, "Crystal")) iCrystal = boost::lexical_cast<int>(*(it + 1)) - 1;
145 }
146
147 cellID = 3 * iEnclosure + iCrystal;
148
149 if (cellID < 0) B2WARNING("CsiGeometryPar: volume " << VolumeName << " is not a crystal");
150
151 return cellID;
152}

◆ GetEnclosureID()

int GetEnclosureID ( int  cid)
inline

Get Enclosure ID from cell ID.

Definition at line 90 of file CsiGeometryPar.h.

90{ return m_BoxID.at(cid); };

◆ GetMaterial()

G4Material * GetMaterial ( int  cid)

Get pointer to the Geant4 Material.

Definition at line 155 of file CsiGeometryPar.cc.

156{
157 int iEnclosure = GetEnclosureID(cid) + 1;
158 int iSlot = GetSlotID(cid) + 1;
159
160 GearDir content = GearDir("/Detector/DetectorComponent[@name=\"CSI\"]/Content/");
161
162 GearDir enclosureContent(content);
163 string gearPath = "Enclosures/Enclosure";
164 string enclosurePath = (boost::format("/%1%[%2%]") % gearPath % iEnclosure).str();
165 enclosureContent.append(enclosurePath);
166
167 string slotName = (boost::format("CrystalInSlot[%1%]") % iSlot).str();
168 int iCry = enclosureContent.getInt(slotName);
169
170
171 GearDir crystalContent(content);
172 crystalContent.append((boost::format("/EndCapCrystals/EndCapCrystal[%1%]/") % (iCry)).str());
173 string strMatCrystal = crystalContent.getString("Material", "Air");
174
175 return geometry::Materials::get(strMatCrystal);
176
177}
GearDir is the basic class used for accessing the parameter store.
Definition: GearDir.h:31
int GetEnclosureID(int cid)
Get Enclosure ID from cell ID.
int GetSlotID(int cid)
Get Slot ID in the Enclosure from cell ID.
static G4Material * get(const std::string &name)
Find given material.
Definition: Materials.h:63

◆ GetMaterialProperty()

double GetMaterialProperty ( int  cid,
const char *  propertyname 
)

Get material property.

Definition at line 180 of file CsiGeometryPar.cc.

181{
182 G4Material* mat = GetMaterial(cid);
183 G4MaterialPropertiesTable* properties = mat->GetMaterialPropertiesTable();
184 G4MaterialPropertyVector* property = properties->GetProperty(propertyname);
185
186 return property->Value(0);
187}
G4Material * GetMaterial(int cid)
Get pointer to the Geant4 Material.

◆ GetOrientation()

ROOT::Math::XYZVector GetOrientation ( int  cid)
inline

Get the orientation of the crystal.

Definition at line 87 of file CsiGeometryPar.h.

87{ return m_Orientation.at(cid); };

◆ GetPosition()

ROOT::Math::XYZVector GetPosition ( int  cid)
inline

Get the position of the crystal.

Definition at line 84 of file CsiGeometryPar.h.

84{ return m_Position.at(cid); };

◆ GetSlotID()

int GetSlotID ( int  cid)
inline

Get Slot ID in the Enclosure from cell ID.

Definition at line 93 of file CsiGeometryPar.h.

93{ return m_SlotID.at(cid); };

◆ GetTauFast()

double GetTauFast ( int  cid)
inline

Get crystal fast time constant.

Definition at line 99 of file CsiGeometryPar.h.

99{ return GetMaterialProperty(cid, "FASTTIMECONSTANT"); };
double GetMaterialProperty(int cid, const char *propertyname)
Get material property.

◆ GetTauSlow()

double GetTauSlow ( int  cid)
inline

Get crystal slow time constant.

Definition at line 102 of file CsiGeometryPar.h.

102{ return GetMaterialProperty(cid, "SLOWTIMECONSTANT"); };

◆ Instance()

CsiGeometryPar * Instance ( )
static

Static method to get a reference to the CsiGeometryPar instance.

Returns
A reference to an instance of this class.

Definition at line 25 of file CsiGeometryPar.cc.

◆ Print()

void Print ( const int  cid,
int  debuglevel = 80 
)

Print crystal information.

Definition at line 189 of file CsiGeometryPar.cc.

190{
191 B2DEBUG(debuglevel, "Cell ID : " << cid);
192
193 B2DEBUG(debuglevel, " Position x : " << GetPosition(cid).x());
194 B2DEBUG(debuglevel, " Position y : " << GetPosition(cid).y());
195 B2DEBUG(debuglevel, " Position z : " << GetPosition(cid).z());
196
197 B2DEBUG(debuglevel, " Orientation x : " << GetOrientation(cid).x());
198 B2DEBUG(debuglevel, " Orientation y : " << GetOrientation(cid).y());
199 B2DEBUG(debuglevel, " Orientation z : " << GetOrientation(cid).z());
200
201 B2DEBUG(debuglevel, " Material : " << GetMaterial(cid)->GetName());
202
203 B2DEBUG(debuglevel, " Slow time constant : " << GetMaterialProperty(cid, "SLOWTIMECONSTANT"));
204 B2DEBUG(debuglevel, " Fast time constant : " << GetMaterialProperty(cid, "FASTTIMECONSTANT"));
205 B2DEBUG(debuglevel, " Light yield : " << GetMaterialProperty(cid, "SCINTILLATIONYIELD"));
206
207 //GetMaterial(cid)->GetMaterialPropertiesTable()->DumpTable();
208}
ROOT::Math::XYZVector GetOrientation(int cid)
Get the orientation of the crystal.
ROOT::Math::XYZVector GetPosition(int cid)
Get the position of the crystal.

◆ PrintAll()

void PrintAll ( int  debuglevel = 80)

Print all crystals information.

Definition at line 210 of file CsiGeometryPar.cc.

211{
212 for (uint i = 0; i < m_thetaID.size(); i++)
213 Print(i, debuglevel);
214}
void Print(const int cid, int debuglevel=80)
Print crystal information.

◆ read()

void read ( )

Gets geometry parameters from gearbox.

Position of the nominal centre of crystals in the box

Definition at line 60 of file CsiGeometryPar.cc.

61{
62
63 GearDir content = GearDir("/Detector/DetectorComponent[@name=\"CSI\"]/Content/");
64 string gearPath = "Enclosures/Enclosure";
65 int nEnc = content.getNumberNodes(gearPath);
66
67 int iCell = 0;
68
69 for (int iEnc = 1; iEnc <= nEnc; iEnc++) {
70 // Build the box (same for all)
71 //double length = content.getLength("Enclosures/Length") * CLHEP::cm;
72 //double thk = content.getLength("Enclosures/Thickness") * CLHEP::cm;
73 //double halflength = 15.0 * CLHEP::cm;
74 //double zshift = 0.5 * length - thk - halflength; /*< Shift of the box along z-axis (cry touches panel) **/
75
76 string enclosurePath = (boost::format("/%1%[%2%]") % gearPath % iEnc).str();
77
78 // Connect the appropriate Gearbox path
79 GearDir enclosureContent(content);
80 enclosureContent.append(enclosurePath);
81
82 // Read position
83 double PosZ = enclosureContent.getLength("PosZ") * CLHEP::cm;
84 double PosR = enclosureContent.getLength("PosR") * CLHEP::cm;
85 double PosT = enclosureContent.getAngle("PosT") ;
86
87 // Read Orientation
88 double Phi1 = enclosureContent.getAngle("AngPhi1") ;
89 double Theta = enclosureContent.getAngle("AngTheta") ;
90 double Phi2 = enclosureContent.getAngle("AngPhi2") ;
91
92 //Transform3D zsh = Translate3D(0, 0, zshift);
93 Transform3D m1 = RotateZ3D(Phi1);
94 Transform3D m2 = RotateY3D(Theta);
95 Transform3D m3 = RotateZ3D(Phi2);
96 Transform3D position = Translate3D(PosR * cos(PosT), PosR * sin(PosT), PosZ);
97
99 Transform3D Tr = position * m3 * m2 * m1;
100
101 int nSlots = enclosureContent.getNumberNodes("CrystalInSlot");
102 for (int iSlot = 1; iSlot <= nSlots; iSlot++) {
103 iCell++;
104
105 //Thread the strings
106 string slotPath = (boost::format("/Enclosures/Slot[%1%]") % iSlot).str();
107
108 GearDir slotContent(content);
109 slotContent.append(slotPath);
110
111 double SlotX = slotContent.getLength("PosX") * CLHEP::cm;
112 double SlotY = slotContent.getLength("PosY") * CLHEP::cm;
113 double SlotZ = slotContent.getLength("PosZ") * CLHEP::cm;
114 Transform3D Pos = Translate3D(SlotX, SlotY, SlotZ);
115
116 Transform3D CrystalPos = Tr * Pos;
117 RotationMatrix CrystalRot = CrystalPos.getRotation();
118
119 m_Position.push_back(ROOT::Math::XYZVector(CrystalPos.getTranslation()) * 1.0 / CLHEP::cm);
120 m_Orientation.push_back(ROOT::Math::XYZVector(CrystalRot.colZ()));
121
122 m_thetaID.push_back(CrystalPos.getTranslation().z() > 0 ? 0 : 1);
123 m_phiID.push_back(iCell - 9 * m_thetaID.back());
124
125 m_BoxID.push_back(iEnc - 1);
126 m_SlotID.push_back(iSlot - 1);
127 }
128 //
129 }
130}

Member Data Documentation

◆ m_B4CsiGeometryParDB

CsiGeometryPar * m_B4CsiGeometryParDB = 0
staticprivate

Pointer that saves the instance of this class.

Definition at line 130 of file CsiGeometryPar.h.

◆ m_BoxID

std::vector<int> m_BoxID
private

The index of the enclosure.

Definition at line 118 of file CsiGeometryPar.h.

◆ m_cellID

int m_cellID
private

The Cell ID information.

Definition at line 109 of file CsiGeometryPar.h.

◆ m_Orientation

std::vector<ROOT::Math::XYZVector> m_Orientation
private

Orientation of the crystal.

Definition at line 127 of file CsiGeometryPar.h.

◆ m_phiID

std::vector<int> m_phiID
private

The Phi ID information.

Definition at line 115 of file CsiGeometryPar.h.

◆ m_Position

std::vector<ROOT::Math::XYZVector> m_Position
private

Position of the nominal centre of the crystal.

Definition at line 124 of file CsiGeometryPar.h.

◆ m_SlotID

std::vector<int> m_SlotID
private

The slot index of the crystal in the enclosure.

Definition at line 121 of file CsiGeometryPar.h.

◆ m_thetaID

std::vector<int> m_thetaID
private

The Theta ID information.

Definition at line 112 of file CsiGeometryPar.h.


The documentation for this class was generated from the following files: