|
20 | 20 | #include "IOTOFSimulation/Detector.h" |
21 | 21 | #include "IOTOFBase/IOTOFBaseParam.h" |
22 | 22 |
|
23 | | -using o2::itsmft::Hit; |
24 | | - |
25 | 23 | namespace o2 |
26 | 24 | { |
27 | 25 | namespace iotof |
@@ -56,19 +54,54 @@ void Detector::ConstructGeometry() |
56 | 54 | createGeometry(); |
57 | 55 | } |
58 | 56 |
|
59 | | -void Detector::configLayers(bool itof, bool otof, bool ftof, bool btof) |
| 57 | +void Detector::configLayers(bool itof, bool otof, bool ftof, bool btof, std::string pattern) |
60 | 58 | { |
| 59 | + |
| 60 | + float radiusInnerTof = 19.f; |
| 61 | + float radiusOuterTof = 85.f; |
| 62 | + float lengthInnerTof = 124.f; |
| 63 | + float lengthOuterTof = 680.f; |
| 64 | + std::pair<float, float> radiusRangeDiskTof = {15.f, 100.f}; |
| 65 | + float zForwardTof = 370.f; |
| 66 | + if (pattern == "") { |
| 67 | + } else if (pattern == "v3b") { |
| 68 | + LOG(info) << "Configuring IOTOF layers with v3b pattern"; |
| 69 | + ftof = false; |
| 70 | + btof = false; |
| 71 | + } else if (pattern == "v3b1a") { |
| 72 | + lengthOuterTof = 500.f; |
| 73 | + zForwardTof = 270.f; |
| 74 | + radiusRangeDiskTof = {30.f, 100.f}; |
| 75 | + } else if (pattern == "v3b1b") { |
| 76 | + lengthOuterTof = 500.f; |
| 77 | + zForwardTof = 200.f; |
| 78 | + radiusRangeDiskTof = {20.f, 68.f}; |
| 79 | + } else if (pattern == "v3b2a") { |
| 80 | + lengthOuterTof = 440.f; |
| 81 | + zForwardTof = 270.f; |
| 82 | + radiusRangeDiskTof = {30.f, 120.f}; |
| 83 | + } else if (pattern == "v3b2b") { |
| 84 | + lengthOuterTof = 440.f; |
| 85 | + zForwardTof = 200.f; |
| 86 | + radiusRangeDiskTof = {20.f, 68.f}; |
| 87 | + } else if (pattern == "v3b3") { |
| 88 | + lengthOuterTof = 580.f; |
| 89 | + zForwardTof = 200.f; |
| 90 | + radiusRangeDiskTof = {20.f, 68.f}; |
| 91 | + } else { |
| 92 | + LOG(fatal) << "IOTOF layer pattern " << pattern << " not recognized, exiting"; |
| 93 | + } |
61 | 94 | if (itof) { |
62 | | - mITOFLayer = ITOFLayer(std::string{GeometryTGeo::getITOFLayerPattern()}, 19.f, 0.f, 124.f, 0.f, 0.02f, true); // iTOF |
| 95 | + mITOFLayer = ITOFLayer(std::string{GeometryTGeo::getITOFLayerPattern()}, radiusInnerTof, 0.f, lengthInnerTof, 0.f, 0.02f, true); // iTOF |
63 | 96 | } |
64 | 97 | if (otof) { |
65 | | - mOTOFLayer = OTOFLayer(std::string{GeometryTGeo::getOTOFLayerPattern()}, 85.f, 0.f, 680.f, 0.f, 0.02f, true); // oTOF |
| 98 | + mOTOFLayer = OTOFLayer(std::string{GeometryTGeo::getOTOFLayerPattern()}, radiusOuterTof, 0.f, lengthOuterTof, 0.f, 0.02f, true); // oTOF |
66 | 99 | } |
67 | 100 | if (ftof) { |
68 | | - mFTOFLayer = FTOFLayer(std::string{GeometryTGeo::getFTOFLayerPattern()}, 15.f, 100.f, 0.f, 370.f, 0.02f, false); // fTOF |
| 101 | + mFTOFLayer = FTOFLayer(std::string{GeometryTGeo::getFTOFLayerPattern()}, radiusRangeDiskTof.first, radiusRangeDiskTof.second, 0.f, zForwardTof, 0.02f, false); // fTOF |
69 | 102 | } |
70 | 103 | if (btof) { |
71 | | - mBTOFLayer = BTOFLayer(std::string{GeometryTGeo::getBTOFLayerPattern()}, 15.f, 100.f, 0.f, -370.f, 0.02f, false); // bTOF |
| 104 | + mBTOFLayer = BTOFLayer(std::string{GeometryTGeo::getBTOFLayerPattern()}, radiusRangeDiskTof.first, radiusRangeDiskTof.second, 0.f, -zForwardTof, 0.02f, false); // bTOF |
72 | 105 | } |
73 | 106 | } |
74 | 107 |
|
@@ -214,28 +247,28 @@ bool Detector::ProcessHits(FairVolume* vol) |
214 | 247 | bool startHit = false, stopHit = false; |
215 | 248 | unsigned char status = 0; |
216 | 249 | if (fMC->IsTrackEntering()) { |
217 | | - status |= Hit::kTrackEntering; |
| 250 | + status |= o2::itsmft::Hit::kTrackEntering; |
218 | 251 | } |
219 | 252 | if (fMC->IsTrackInside()) { |
220 | | - status |= Hit::kTrackInside; |
| 253 | + status |= o2::itsmft::Hit::kTrackInside; |
221 | 254 | } |
222 | 255 | if (fMC->IsTrackExiting()) { |
223 | | - status |= Hit::kTrackExiting; |
| 256 | + status |= o2::itsmft::Hit::kTrackExiting; |
224 | 257 | } |
225 | 258 | if (fMC->IsTrackOut()) { |
226 | | - status |= Hit::kTrackOut; |
| 259 | + status |= o2::itsmft::Hit::kTrackOut; |
227 | 260 | } |
228 | 261 | if (fMC->IsTrackStop()) { |
229 | | - status |= Hit::kTrackStopped; |
| 262 | + status |= o2::itsmft::Hit::kTrackStopped; |
230 | 263 | } |
231 | 264 | if (fMC->IsTrackAlive()) { |
232 | | - status |= Hit::kTrackAlive; |
| 265 | + status |= o2::itsmft::Hit::kTrackAlive; |
233 | 266 | } |
234 | 267 |
|
235 | 268 | // track is entering or created in the volume |
236 | | - if ((status & Hit::kTrackEntering) || (status & Hit::kTrackInside && !mTrackData.mHitStarted)) { |
| 269 | + if ((status & o2::itsmft::Hit::kTrackEntering) || (status & o2::itsmft::Hit::kTrackInside && !mTrackData.mHitStarted)) { |
237 | 270 | startHit = true; |
238 | | - } else if ((status & (Hit::kTrackExiting | Hit::kTrackOut | Hit::kTrackStopped))) { |
| 271 | + } else if ((status & (o2::itsmft::Hit::kTrackExiting | o2::itsmft::Hit::kTrackOut | o2::itsmft::Hit::kTrackStopped))) { |
239 | 272 | stopHit = true; |
240 | 273 | } |
241 | 274 |
|
@@ -264,9 +297,9 @@ bool Detector::ProcessHits(FairVolume* vol) |
264 | 297 | fMC->CurrentVolOffID(3, halfstave); |
265 | 298 | fMC->CurrentVolOffID(4, stave); |
266 | 299 |
|
267 | | - Hit* p = addHit(stack->GetCurrentTrackNumber(), lay, mTrackData.mPositionStart.Vect(), positionStop.Vect(), |
268 | | - mTrackData.mMomentumStart.Vect(), mTrackData.mMomentumStart.E(), positionStop.T(), |
269 | | - mTrackData.mEnergyLoss, mTrackData.mTrkStatusStart, status); |
| 300 | + o2::itsmft::Hit* p = addHit(stack->GetCurrentTrackNumber(), lay, mTrackData.mPositionStart.Vect(), positionStop.Vect(), |
| 301 | + mTrackData.mMomentumStart.Vect(), mTrackData.mMomentumStart.E(), positionStop.T(), |
| 302 | + mTrackData.mEnergyLoss, mTrackData.mTrkStatusStart, status); |
270 | 303 |
|
271 | 304 | // RS: not sure this is needed |
272 | 305 | // Increment number of Detector det points in TParticle |
|
0 commit comments