Skip to content

Commit bbb4570

Browse files
authored
[ALICE3] IOTOF: Adjust layer radius calculations for stave tilt and chip thickness (#15220)
* [ALICE3] IOTOF: Adjust layer radius calculations for stave tilt * Refactor iTOF and oTOF layer initialization logic * Update README.md * Update IOTOFBaseParam.h default thickness * Updated stave tilt angle for segmented iTOF configuration.
1 parent aa5d3c6 commit bbb4570

File tree

4 files changed

+21
-17
lines changed

4 files changed

+21
-17
lines changed

Detectors/Upgrades/ALICE3/IOTOF/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Configurables for various sub-detectors are presented in the following Table:
2323
| `IOTOFBase.segmentedInnerTOF` | `false` (default), `true` | Use segmented geometry for inner TOF |
2424
| `IOTOFBase.segmentedOuterTOF` | `false` (default), `true` | Use segmented geometry for outer TOF |
2525
| `IOTOFBase.detectorPattern` | ` ` (default), `v3b`, `v3b1a`, `v3b1b`, `v3b2a`, `v3b2b`, `v3b3` | Optional layout pattern |
26-
| `IOTOFBase.x2x0` | `0.02` (default) | Chip thickness in fractions of the rad. lenght |
26+
| `IOTOFBase.x2x0` | `0.000527` (default) | Chip thickness in fractions of the rad. lenght |
2727

2828

2929
For example, a geometry with fully cylindrical tracker barrel (for all layers in VD, ML and OT) can be obtained by

Detectors/Upgrades/ALICE3/IOTOF/base/include/IOTOFBase/IOTOFBaseParam.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ struct IOTOFBaseParam : public o2::conf::ConfigurableParamHelper<IOTOFBaseParam>
2828
std::string detectorPattern = ""; // Layouts of the detector
2929
bool segmentedInnerTOF = false; // If the inner TOF layer is segmented
3030
bool segmentedOuterTOF = false; // If the outer TOF layer is segmented
31-
float x2x0 = 0.02f; // thickness expressed in radiation length, for all layers for the moment
31+
float x2x0 = 0.000527f; // thickness expressed in radiation length, for all layers for the moment
3232

3333
O2ParamDef(IOTOFBaseParam, "IOTOFBase");
3434
};
3535

3636
} // namespace iotof
3737
} // end namespace o2
3838

39-
#endif
39+
#endif

Detectors/Upgrades/ALICE3/IOTOF/simulation/src/Detector.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ void Detector::configLayers(bool itof, bool otof, bool ftof, bool btof, std::str
9696
}
9797
if (itof) { // iTOF
9898
const std::string name = GeometryTGeo::getITOFLayerPattern();
99-
const int nStaves = itofSegmented ? 24 : 0; // number of staves in segmented case
100-
const double staveWidth = itofSegmented ? 5.42 : 0.0; // cm
101-
const double staveTiltAngle = itofSegmented ? 10.0 : 0.0; // degrees
102-
const int modulesPerStave = itofSegmented ? 10 : 0; // number of modules per stave in segmented case
99+
const int nStaves = itofSegmented ? 24 : 0; // number of staves in segmented case
100+
const double staveWidth = itofSegmented ? 5.42 : 0.0; // cm
101+
const double staveTiltAngle = itofSegmented ? 3.0 : 0.0; // degrees
102+
const int modulesPerStave = itofSegmented ? 10 : 0; // number of modules per stave in segmented case
103103
mITOFLayer = ITOFLayer(name,
104104
dInnerTof.first, 0.f, dInnerTof.second, 0.f, x2x0, itofSegmented ? ITOFLayer::kBarrelSegmented : ITOFLayer::kBarrel,
105105
nStaves, staveWidth, staveTiltAngle, modulesPerStave);

Detectors/Upgrades/ALICE3/IOTOF/simulation/src/Layer.cxx

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,13 @@ void ITOFLayer::createLayer(TGeoVolume* motherVolume)
155155
case kBarrelSegmented: {
156156
// First we create the volume for the whole layer, which will be used as mother volume for the segments
157157
const double avgRadius = 0.5 * (mInnerRadius + mOuterRadius);
158-
const double staveSizeX = mStaves.second; // cm
159-
const double staveSizeY = mOuterRadius - mInnerRadius; // cm
160-
const double staveSizeZ = mZLength; // cm
161-
const double deltaForTilt = 0.5 * (std::sin(TMath::DegToRad() * mTiltAngle) * staveSizeX + std::cos(TMath::DegToRad() * mTiltAngle) * staveSizeY); // we increase the size of the layer to account for the tilt of the staves
162-
TGeoTube* layer = new TGeoTube(mInnerRadius - deltaForTilt, mOuterRadius + deltaForTilt, mZLength / 2);
158+
const double staveSizeX = mStaves.second; // cm
159+
const double staveSizeY = mOuterRadius - mInnerRadius; // cm
160+
const double staveSizeZ = mZLength; // cm
161+
const double deltaForTilt = 0.5 * (std::sin(TMath::DegToRad() * mTiltAngle) * staveSizeX + std::cos(TMath::DegToRad() * mTiltAngle) * staveSizeY); // we increase the size of the layer to account for the tilt of the staves
162+
const double radiusMax = std::sqrt(avgRadius * avgRadius + 0.25 * staveSizeX * staveSizeX + 0.25 * staveSizeY * staveSizeY + avgRadius * 2. * deltaForTilt); // we increase the outer radius to account for the tilt of the staves
163+
const double radiusMin = std::sqrt(avgRadius * avgRadius + 0.25 * staveSizeX * staveSizeX + 0.25 * staveSizeY * staveSizeY - avgRadius * 2. * deltaForTilt); // we decrease the inner radius to account for the tilt of the staves
164+
TGeoTube* layer = new TGeoTube(radiusMin, radiusMax, mZLength / 2);
163165
TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), layer, medAir);
164166
setLayerStyle(layerVol);
165167

@@ -287,11 +289,13 @@ void OTOFLayer::createLayer(TGeoVolume* motherVolume)
287289
case kBarrelSegmented: {
288290
// First we create the volume for the whole layer, which will be used as mother volume for the segments
289291
const double avgRadius = 0.5 * (mInnerRadius + mOuterRadius);
290-
const double staveSizeX = mStaves.second; // cm
291-
const double staveSizeY = mOuterRadius - mInnerRadius; // cm
292-
const double staveSizeZ = mZLength; // cm
293-
const double deltaForTilt = 0.5 * (std::sin(TMath::DegToRad() * mTiltAngle) * staveSizeX + std::cos(TMath::DegToRad() * mTiltAngle) * staveSizeY); // we increase the size of the layer to account for the tilt of the staves
294-
TGeoTube* layer = new TGeoTube(mInnerRadius - deltaForTilt, mOuterRadius + deltaForTilt, mZLength / 2);
292+
const double staveSizeX = mStaves.second; // cm
293+
const double staveSizeY = mOuterRadius - mInnerRadius; // cm
294+
const double staveSizeZ = mZLength; // cm
295+
const double deltaForTilt = 0.5 * (std::sin(TMath::DegToRad() * mTiltAngle) * staveSizeX + std::cos(TMath::DegToRad() * mTiltAngle) * staveSizeY); // we increase the size of the layer to account for the tilt of the staves
296+
const double radiusMax = std::sqrt(avgRadius * avgRadius + 0.25 * staveSizeX * staveSizeX + 0.25 * staveSizeY * staveSizeY + avgRadius * 2. * deltaForTilt); // we increase the outer radius to account for the tilt of the staves
297+
const double radiusMin = std::sqrt(avgRadius * avgRadius + 0.25 * staveSizeX * staveSizeX + 0.25 * staveSizeY * staveSizeY - avgRadius * 2. * deltaForTilt); // we decrease the inner radius to account for the tilt of the staves
298+
TGeoTube* layer = new TGeoTube(radiusMin, radiusMax, mZLength / 2);
295299
TGeoVolume* layerVol = new TGeoVolume(mLayerName.c_str(), layer, medAir);
296300
setLayerStyle(layerVol);
297301

0 commit comments

Comments
 (0)