Belle II Software  release-05-02-19
QcsmonitorCreator Class Reference

The creator for the QCSMONITOR geometry. More...

#include <QcsmonitorCreator.h>

Inheritance diagram for QcsmonitorCreator:
Collaboration diagram for QcsmonitorCreator:

Public Member Functions

virtual void create (const GearDir &content, G4LogicalVolume &topVolume, geometry::GeometryTypes type)
 Function to actually create the geometry, has to be overridden by derived classes. More...
 
 BELLE2_DEFINE_EXCEPTION (DBNotImplemented, "Cannot create geometry from Database.")
 Exception that will be thrown in createFromDB if member is not yet implemented by creator.
 
virtual void createFromDB (const std::string &name, G4LogicalVolume &topVolume, GeometryTypes type)
 Function to create the geometry from the Database. More...
 
virtual void createPayloads (const GearDir &content, const IntervalOfValidity &iov)
 Function to create the geometry database. More...
 

Protected Attributes

SensitiveDetectorm_sensitive
 SensitiveDetector QCSMONITOR.
 

Detailed Description

The creator for the QCSMONITOR geometry.

Definition at line 29 of file QcsmonitorCreator.h.

Member Function Documentation

◆ create()

void create ( const GearDir content,
G4LogicalVolume &  topVolume,
geometry::GeometryTypes  type 
)
virtual

Function to actually create the geometry, has to be overridden by derived classes.

Parameters
contentGearDir pointing to the parameters which should be used for construction
topVolumeTop volume in which the geometry has to be placed
typeType of geometry to be build

Implements CreatorBase.

Definition at line 60 of file QcsmonitorCreator.cc.

61  {
62  //lets get the stepsize parameter with a default value of 5 µm
63  double stepSize = content.getLength("stepSize", 5 * CLHEP::um);
64 
65  G4VisAttributes* red = new G4VisAttributes(G4Colour(1, 0, 0));
66  red->SetForceAuxEdgeVisible(true);
67  G4VisAttributes* green = new G4VisAttributes(G4Colour(0, 1, 0));
68  green->SetForceAuxEdgeVisible(true);
69  G4VisAttributes* gray = new G4VisAttributes(G4Colour(.5, .5, .5));
70  gray->SetForceAuxEdgeVisible(true);
71  G4VisAttributes* coppercolor = new G4VisAttributes(G4Colour(218. / 255., 138. / 255., 103. / 255.));
72  coppercolor->SetForceAuxEdgeVisible(true);
73 
74  //Lets loop over all the Active nodes
75  BOOST_FOREACH(const GearDir & activeParams, content.getNodes("Active")) {
76  int phase = activeParams.getInt("phase");
77  G4double dx_scint = activeParams.getLength("dx_scint") / 2.*CLHEP::cm;
78  G4double dy_scint = activeParams.getLength("dy_scint") / 2.*CLHEP::cm;
79  G4double dz_scint = activeParams.getLength("dz_scint") / 2.*CLHEP::cm;
80  double thetaZ = activeParams.getAngle("ThetaZ");
81  G4VSolid* s_scint = new G4Box("s_scint", dx_scint, dy_scint, dz_scint);
82  G4LogicalVolume* l_scint = new G4LogicalVolume(s_scint, geometry::Materials::get("G4_POLYSTYRENE"), "l_scint", 0, m_sensitive);
83  l_scint->SetVisAttributes(green);
84  //Lets limit the Geant4 stepsize inside the volume
85  l_scint->SetUserLimits(new G4UserLimits(stepSize));
86  double x_pos[100];
87  double y_pos[100];
88  double z_pos[100];
89  double r_pos[100];
90  int dim = 0;
91  if (phase == 1) {
92  dim = 0;
93  for (double x : activeParams.getArray("x", {0})) {
94  x *= CLHEP::cm;
95  x_pos[dim] = x;
96  dim++;
97  }
98  dim = 0;
99  for (double y : activeParams.getArray("y", {0})) {
100  y *= CLHEP::cm;
101  y_pos[dim] = y;
102  dim++;
103  }
104  }
105  dim = 0;
106  for (double z : activeParams.getArray("z", {0})) {
107  z *= CLHEP::cm;
108  z_pos[dim] = z;
109  //cout << "QCSS z " << z << " zpos " << z_pos[dim] << endl;
110  if (phase == 1) {
111  r_pos[dim] = sqrt(x_pos[dim] * x_pos[dim] + y_pos[dim] * y_pos[dim]);
112  }
113  dim++;
114  }
115  //if (phase == 1) dim = 1;
116  if (phase == 2) {
117  dim = 0;
118  for (double r : activeParams.getArray("r", {0})) {
119  r *= CLHEP::cm;
120  r_pos[dim] = r + dz_scint;
121  dim++;
122  }
123  for (int i = 0; i < 100; i++) {
124  x_pos[i] = 0;
125  y_pos[i] = 0;
126  //x_off[i] = 0;
127  //y_off[i] = 0;
128  }
129  }
130  int detID = 0;
131  G4Transform3D transform;
132  for (double phi : activeParams.getArray("Phi", {M_PI / 2})) {
133  //phi *= CLHEP::deg;
134  for (int i = 0; i < dim; i++) {
135  if (phase == 2) {
136  transform = G4RotateZ3D(phi - M_PI / 2) * G4Translate3D(0, r_pos[i], z_pos[i]) * G4RotateX3D(-M_PI / 2 - thetaZ);
137  //cout << "phase 2" << endl;
138  }
139  if (phase == 1) {
140  transform = G4Translate3D(x_pos[i], y_pos[i], z_pos[i]) * G4RotateZ3D(phi) * G4RotateX3D(thetaZ);
141  //cout << "phase 1" << endl;
142  }
143  //cout << "QCS r " << r_pos[i] << " width " << dz_scint << " z " << z_pos[i] << " phi " << phi << " x " << x_pos[i] << " y " <<
144  // y_pos[i] << endl;
145  new G4PVPlacement(transform, l_scint, TString::Format("p_scint_%d", detID).Data() , &topVolume, false, detID);
146  B2INFO("QCSS-" << detID << " placed at: " << transform.getTranslation() << " mm ");
147  //cout << " Nb of detector " << detID << endl;
148  detID++;
149  }
150  }
151  }
152  }

◆ createFromDB()

void createFromDB ( const std::string &  name,
G4LogicalVolume &  topVolume,
GeometryTypes  type 
)
virtualinherited

Function to create the geometry from the Database.

Parameters
namename of the component in the database, could be used to disambiguate multiple components created with the same creator
topVolumeTop volume in which the geometry has to be placed
typeType of geometry to be build

Reimplemented in GeoEKLMCreator, GeoFarBeamLineCreator, GeoCryostatCreator, MyDBCreator, GeoARICHCreator, GeoBeamPipeCreator, GeoServiceMaterialCreator, GeoBKLMCreator, GeoPXDCreator, GeoSVDCreator, GeoTOPCreator, GeoSTRCreator, GeoHeavyMetalShieldCreator, GeoCDCCreator, GeoCOILCreator, GeoVXDServiceCreator, GeoKLMCreator, GeoECLCreator, and GeoMagneticField.

Definition at line 27 of file CreatorBase.cc.

◆ createPayloads()

void createPayloads ( const GearDir content,
const IntervalOfValidity iov 
)
virtualinherited

Function to create the geometry database.

This function should be implemented to convert Gearbox parameters to one ore more database payloads

Parameters
contentGearDir pointing to the parameters which should be used for construction
iovinterval of validity to use when generating payloads

Reimplemented in GeoEKLMCreator, GeoFarBeamLineCreator, GeoCryostatCreator, MyDBCreator, GeoARICHCreator, GeoTOPCreator, GeoCDCCreator, GeoBeamPipeCreator, GeoServiceMaterialCreator, GeoMagneticField, GeoBKLMCreator, GeoKLMCreator, GeoECLCreator, GeoPXDCreator, GeoSVDCreator, GeoSTRCreator, GeoCOILCreator, GeoHeavyMetalShieldCreator, and GeoVXDServiceCreator.

Definition at line 34 of file CreatorBase.cc.


The documentation for this class was generated from the following files:
Belle2::geometry::Materials::get
static G4Material * get(const std::string &name)
Find given material.
Definition: Materials.h:65
Belle2::qcsmonitor::QcsmonitorCreator::m_sensitive
SensitiveDetector * m_sensitive
SensitiveDetector QCSMONITOR.
Definition: QcsmonitorCreator.h:36