127 TGeoMedium* medSi = gGeoManager->GetMedium(
"TF3_SILICON$");
128 TGeoMedium* medAir = gGeoManager->GetMedium(
"TF3_AIR$");
129 LOGP(info,
"Media: {} {}", (
void*)medSi, (
void*)medAir);
137 TGeoVolume* sensVol =
new TGeoVolume(sensName, sensor, medSi);
138 TGeoVolume* chipVol =
new TGeoVolume(chipName, chip, medSi);
139 TGeoVolume* layerVol =
new TGeoVolume(
mLayerName.c_str(),
layer, medAir);
144 LOGP(info,
"Inserting Barrel {} in {} ", sensVol->GetName(), chipVol->GetName());
146 chipVol->AddNode(sensVol, 1,
nullptr);
148 LOGP(info,
"Inserting Barrel {} in {} ", chipVol->GetName(), layerVol->GetName());
149 layerVol->AddNode(chipVol, 1,
nullptr);
151 LOGP(info,
"Inserting Barrel {} in {} ", layerVol->GetName(), motherVolume->GetName());
152 motherVolume->AddNode(layerVol, 1,
nullptr);
158 const double staveSizeX =
mStaves.second;
161 const double deltaForTilt = 0.5 * (std::sin(TMath::DegToRad() *
mTiltAngle) * staveSizeX + std::cos(TMath::DegToRad() *
mTiltAngle) * staveSizeY);
163 TGeoVolume* layerVol =
new TGeoVolume(
mLayerName.c_str(),
layer, medAir);
167 TGeoBBox* stave =
new TGeoBBox(staveSizeX * 0.5, staveSizeY * 0.5, staveSizeZ * 0.5);
168 TGeoVolume* staveVol =
new TGeoVolume(staveName, stave, medAir);
172 const int modulesPerStaveX = 1;
173 const double moduleSizeX = staveSizeX / modulesPerStaveX;
174 const double moduleSizeY = staveSizeY;
176 TGeoBBox*
module = new TGeoBBox(moduleSizeX * 0.5, moduleSizeY * 0.5, moduleSizeZ * 0.5);
177 TGeoVolume* moduleVol =
new TGeoVolume(moduleName, module, medAir);
181 const int chipsPerModuleX = 2;
182 const int chipsPerModuleZ = 2;
183 const double chipSizeX = moduleSizeX / chipsPerModuleX;
184 const double chipSizeY = moduleSizeY;
185 const double chipSizeZ = moduleSizeZ / chipsPerModuleZ;
186 TGeoBBox* chip =
new TGeoBBox(chipSizeX * 0.5, chipSizeY * 0.5, chipSizeZ * 0.5);
187 TGeoVolume* chipVol =
new TGeoVolume(chipName, chip, medSi);
191 const int sensorsPerChipX = 2;
192 const int sensorsPerChipZ = 2;
193 const double sensorSizeX = chipSizeX / sensorsPerChipX;
194 const double sensorSizeY = chipSizeY;
195 const double sensorSizeZ = chipSizeZ / sensorsPerChipZ;
196 TGeoBBox* sensor =
new TGeoBBox(sensorSizeX * 0.5, sensorSizeY * 0.5, sensorSizeZ * 0.5);
197 TGeoVolume* sensVol =
new TGeoVolume(sensName, sensor, medSi);
202 for (
int i = 0;
i < sensorsPerChipX; ++
i) {
203 for (
int j = 0;
j < sensorsPerChipZ; ++
j) {
204 LOGP(info,
"iTOF: Creating sensor {}/{} for chip {}/{}",
i + 1, sensorsPerChipX,
j + 1, sensorsPerChipZ);
205 auto* translation =
new TGeoTranslation((
i + 0.5) * sensorSizeX - 0.5 * chipSizeX,
207 (
j + 0.5) * sensorSizeZ - 0.5 * chipSizeZ);
208 chipVol->AddNode(sensVol, 1 +
i * sensorsPerChipZ +
j, translation);
213 for (
int i = 0;
i < chipsPerModuleX; ++
i) {
214 for (
int j = 0;
j < chipsPerModuleZ; ++
j) {
215 LOGP(info,
"iTOF: Creating chip {}/{} for module {}/{}",
i + 1, chipsPerModuleX,
j + 1, chipsPerModuleZ);
216 auto* translation =
new TGeoTranslation((
i + 0.5) * chipSizeX - 0.5 * moduleSizeX, 0, (
j + 0.5) * chipSizeZ - 0.5 * moduleSizeZ);
217 moduleVol->AddNode(chipVol, 1 +
i * chipsPerModuleZ +
j, translation);
222 for (
int i = 0;
i < modulesPerStaveX; ++
i) {
224 LOGP(info,
"iTOF: Creating module {}/{} for stave {}/{}",
i + 1, modulesPerStaveX,
j + 1,
mModulesPerStave);
225 auto* translation =
new TGeoTranslation((
i + 0.5) * moduleSizeX - 0.5 * staveSizeX, 0, (
j + 0.5) * moduleSizeZ - 0.5 * staveSizeZ);
232 LOGP(info,
"iTOF: Creating stave {}/{} for layer {}",
i + 1,
mStaves.first, layerVol->GetName());
233 const double phi = TMath::TwoPi() *
i /
mStaves.first;
234 const double x = avgRadius * TMath::Cos(phi);
235 const double y = avgRadius * TMath::Sin(phi);
236 auto* rotation =
new TGeoRotation(Form(
"segmentRot%d",
i + 1), phi * TMath::RadToDeg() + 90 +
mTiltAngle, 0, 0);
239 LOGP(info,
"Inserting Barrel {} in {} ", chipVol->GetName(), layerVol->GetName());
242 LOGP(info,
"Inserting Barrel {} in {} at r={} cm", layerVol->GetName(), motherVolume->GetName(), avgRadius);
243 motherVolume->AddNode(layerVol, 1,
nullptr);
259 TGeoMedium* medSi = gGeoManager->GetMedium(
"TF3_SILICON$");
260 TGeoMedium* medAir = gGeoManager->GetMedium(
"TF3_AIR$");
261 LOGP(info,
"Media: {} {}", (
void*)medSi, (
void*)medAir);
269 TGeoVolume* sensVol =
new TGeoVolume(sensName, sensor, medSi);
270 TGeoVolume* chipVol =
new TGeoVolume(chipName, chip, medSi);
271 TGeoVolume* layerVol =
new TGeoVolume(
mLayerName.c_str(),
layer, medAir);
276 LOGP(info,
"Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
278 chipVol->AddNode(sensVol, 1,
nullptr);
280 LOGP(info,
"Inserting {} in {} ", chipVol->GetName(), layerVol->GetName());
281 layerVol->AddNode(chipVol, 1,
nullptr);
283 LOGP(info,
"Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
284 motherVolume->AddNode(layerVol, 1,
nullptr);
291 TGeoVolume* layerVol =
new TGeoVolume(
mLayerName.c_str(),
layer, medAir);
295 const double staveSizeX =
mStaves.second;
298 TGeoBBox* stave =
new TGeoBBox(staveSizeX * 0.5, staveSizeY * 0.5, staveSizeZ * 0.5);
299 TGeoVolume* staveVol =
new TGeoVolume(staveName, stave, medAir);
303 const int modulesPerStaveX = 1;
304 const double moduleSizeX = staveSizeX / modulesPerStaveX;
305 const double moduleSizeY = staveSizeY;
307 TGeoBBox*
module = new TGeoBBox(moduleSizeX * 0.5, moduleSizeY * 0.5, moduleSizeZ * 0.5);
308 TGeoVolume* moduleVol =
new TGeoVolume(moduleName, module, medAir);
312 const int chipsPerModuleX = 2;
313 const int chipsPerModuleZ = 2;
314 const double chipSizeX = moduleSizeX / chipsPerModuleX;
315 const double chipSizeY = moduleSizeY;
316 const double chipSizeZ = moduleSizeZ / chipsPerModuleZ;
317 TGeoBBox* chip =
new TGeoBBox(chipSizeX * 0.5, chipSizeY * 0.5, chipSizeZ * 0.5);
318 TGeoVolume* chipVol =
new TGeoVolume(chipName, chip, medSi);
322 const int sensorsPerChipX = 2;
323 const int sensorsPerChipZ = 2;
324 const double sensorSizeX = chipSizeX / sensorsPerChipX;
325 const double sensorSizeY = chipSizeY;
326 const double sensorSizeZ = chipSizeZ / sensorsPerChipZ;
327 TGeoBBox* sensor =
new TGeoBBox(sensorSizeX * 0.5, sensorSizeY * 0.5, sensorSizeZ * 0.5);
328 TGeoVolume* sensVol =
new TGeoVolume(sensName, sensor, medSi);
333 for (
int i = 0;
i < sensorsPerChipX; ++
i) {
334 for (
int j = 0;
j < sensorsPerChipZ; ++
j) {
335 LOGP(info,
"oTOF: Creating sensor {}/{} for chip {}/{}",
i + 1, sensorsPerChipX,
j + 1, sensorsPerChipZ);
336 auto* translation =
new TGeoTranslation((
i + 0.5) * sensorSizeX - 0.5 * chipSizeX,
338 (
j + 0.5) * sensorSizeZ - 0.5 * chipSizeZ);
339 chipVol->AddNode(sensVol, 1 +
i * sensorsPerChipZ +
j, translation);
344 for (
int i = 0;
i < chipsPerModuleX; ++
i) {
345 for (
int j = 0;
j < chipsPerModuleZ; ++
j) {
346 LOGP(info,
"oTOF: Creating chip {}/{} for module {}/{}",
i + 1, chipsPerModuleX,
j + 1, chipsPerModuleZ);
347 auto* translation =
new TGeoTranslation((
i + 0.5) * chipSizeX - 0.5 * moduleSizeX, 0, (
j + 0.5) * chipSizeZ - 0.5 * moduleSizeZ);
348 moduleVol->AddNode(chipVol, 1 +
i * chipsPerModuleZ +
j, translation);
353 for (
int i = 0;
i < modulesPerStaveX; ++
i) {
355 LOGP(info,
"oTOF: Creating module {}/{} for stave {}/{}",
i + 1, modulesPerStaveX,
j + 1,
mModulesPerStave);
356 auto* translation =
new TGeoTranslation((
i + 0.5) * moduleSizeX - 0.5 * staveSizeX, 0, (
j + 0.5) * moduleSizeZ - 0.5 * staveSizeZ);
363 LOGP(info,
"oTOF: Creating stave {}/{} for layer {}",
i + 1,
mStaves.first, layerVol->GetName());
364 const double phi = TMath::TwoPi() *
i /
mStaves.first;
365 const double x = avgRadius * TMath::Cos(phi);
366 const double y = avgRadius * TMath::Sin(phi);
367 auto* rotation =
new TGeoRotation(Form(
"segmentRot%d",
i + 1), phi * TMath::RadToDeg() + 90 +
mTiltAngle, 0, 0);
370 LOGP(info,
"Inserting Barrel {} in {} ", chipVol->GetName(), layerVol->GetName());
373 LOGP(info,
"Inserting Barrel {} in {} at r={} cm", layerVol->GetName(), motherVolume->GetName(), avgRadius);
374 motherVolume->AddNode(layerVol, 1,
nullptr);
391 TGeoMedium* medSi = gGeoManager->GetMedium(
"TF3_SILICON$");
392 TGeoMedium* medAir = gGeoManager->GetMedium(
"TF3_AIR$");
394 TGeoVolume* sensVol =
new TGeoVolume(sensName.c_str(), sensor, medSi);
395 TGeoVolume* chipVol =
new TGeoVolume(chipName.c_str(), chip, medSi);
396 TGeoVolume* layerVol =
new TGeoVolume(
mLayerName.c_str(),
layer, medAir);
401 LOGP(info,
"Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
402 chipVol->AddNode(sensVol, 1,
nullptr);
404 LOGP(info,
"Inserting {} in {} ", chipVol->GetName(), layerVol->GetName());
405 layerVol->AddNode(chipVol, 1,
nullptr);
407 auto* fwdTOFRotation =
new TGeoRotation(
"fwdTOFRotation", 0, 0, 180);
408 auto* fwdTOFCombiTrans =
new TGeoCombiTrans(0, 0,
mZOffset, fwdTOFRotation);
410 LOGP(info,
"Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
411 motherVolume->AddNode(layerVol, 1, fwdTOFCombiTrans);
423 TGeoMedium* medSi = gGeoManager->GetMedium(
"TF3_SILICON$");
424 TGeoMedium* medAir = gGeoManager->GetMedium(
"TF3_AIR$");
426 TGeoVolume* sensVol =
new TGeoVolume(sensName.c_str(), sensor, medSi);
427 TGeoVolume* chipVol =
new TGeoVolume(chipName.c_str(), chip, medSi);
428 TGeoVolume* layerVol =
new TGeoVolume(
mLayerName.c_str(),
layer, medAir);
433 LOGP(info,
"Inserting {} in {} ", sensVol->GetName(), chipVol->GetName());
434 chipVol->AddNode(sensVol, 1,
nullptr);
436 LOGP(info,
"Inserting {} in {} ", chipVol->GetName(), layerVol->GetName());
437 layerVol->AddNode(chipVol, 1,
nullptr);
439 auto* bwdTOFRotation =
new TGeoRotation(
"bwdTOFRotation", 0, 0, 180);
440 auto* fwdTOFCombiTrans =
new TGeoCombiTrans(0, 0,
mZOffset, bwdTOFRotation);
442 LOGP(info,
"Inserting {} in {} ", layerVol->GetName(), motherVolume->GetName());
443 motherVolume->AddNode(layerVol, 1, fwdTOFCombiTrans);