Skip to content

Commit 85ded8f

Browse files
committed
ITS3: add some services material and update MatLUT macro
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent 28eb74a commit 85ded8f

File tree

6 files changed

+97
-79
lines changed

6 files changed

+97
-79
lines changed

Detectors/Upgrades/ITS3/base/include/ITS3Base/SpecsV2.h

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
// color: for visulisation
2929
namespace o2::its3::constants
3030
{
31-
constexpr double cm{1e+2}; // This is the default unit of TGeo so we use this as scale
32-
constexpr double mu{1e-6 * cm};
33-
constexpr double mm{1e-3 * cm};
31+
constexpr double cm{1.0}; // This is the default unit of TGeo so we use this as scale
32+
constexpr double mu{1e-4 * cm};
33+
constexpr double mm{1e-1 * cm};
3434
namespace pixelarray
3535
{
3636
constexpr double width{9.197 * mm};
@@ -108,7 +108,8 @@ constexpr double HringLength{6.0 * mm}; // fr
108108
constexpr double edgeBetwChipAndFoam{1.0 * mm}; // from blueprint but not used cause forms are already overlapping
109109
constexpr double gapBetwHringsLongerons{0.05 * mm}; // from blueprint
110110
constexpr std::array<int, 3> nHoles{11, 11, 11}; // how many holes for each layer?
111-
constexpr std::array<double, 3> radiusHoles{1.0 * mm, 1.0 * mm, 2.0 * mm}; // what is the radius of the holes for each layer?
111+
constexpr std::array<double, 3> radiusHoles{1.0 * mm, 1.0 * mm, 2.0 * mm}; // TODO what is the radius of the holes for each layer?
112+
constexpr double thicknessOuterFoam{7 * mm}; // TODO: lack of carbon foam radius for layer 2, use 0.7 cm as a temporary value
112113
constexpr EColor color{kGray};
113114
} // namespace carbonfoam
114115
namespace metalstack
@@ -212,6 +213,18 @@ inline bool isDetITS3(T detID)
212213
}
213214

214215
} // namespace detID
216+
217+
// services
218+
namespace services
219+
{
220+
// FIXME these value are hallucinated since this not yet defined
221+
constexpr double thickness{2.2 * mm}; // thickness of structure
222+
constexpr double radiusInner{radiiOuter[2] + carbonfoam::thicknessOuterFoam}; // inner radius of services
223+
constexpr double radiusOuter{radiusInner + thickness}; // outer radius of services
224+
constexpr double length{20 * cm}; // length
225+
constexpr EColor color{kBlue};
226+
} // namespace services
227+
215228
} // namespace o2::its3::constants
216229

217230
#endif

Detectors/Upgrades/ITS3/macros/test/buildMatBudLUT.C

Lines changed: 58 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "DetectorsBase/GeometryManager.h"
1919
#include "ITSMFTReconstruction/ChipMappingITS.h"
2020
#include "ITS3Simulation/DescriptorInnerBarrelITS3.h"
21+
#include "ITS3Base/SpecsV2.h"
2122
#include "CommonUtils/NameConf.h"
2223
#include <TFile.h>
2324
#include <TSystem.h>
@@ -30,7 +31,7 @@ o2::base::MatLayerCylSet mbLUT;
3031

3132
bool testMBLUT(const std::string& lutFile = "matbud.root");
3233

33-
bool buildMatBudLUT(int nTst = 30, int maxLr = -1, const std::string& outFile = "matbud.root", const std::string& geomName = "");
34+
bool buildMatBudLUT(int nTst = 100, int maxLr = -1, const std::string& outFile = "matbud.root", const std::string& geomName = "");
3435

3536
struct LrData {
3637
float rMin = 0.f;
@@ -50,7 +51,7 @@ bool buildMatBudLUT(int nTst, int maxLr, const std::string& outFile, const std::
5051
auto geomName = o2::base::NameConf::getGeomFileName(geomNameInput);
5152
if (gSystem->AccessPathName(geomName.c_str())) { // if needed, create geometry
5253
std::cout << geomName << " does not exist. Will create it\n";
53-
gSystem->Exec("$O2_ROOT/bin/o2-sim -n 0");
54+
gSystem->Exec("$O2_ROOT/bin/o2-sim -n 0 --detectorList ALICE2.1");
5455
}
5556
o2::base::GeometryManager::loadGeometry(geomNameInput);
5657
configLayers();
@@ -62,7 +63,7 @@ bool buildMatBudLUT(int nTst, int maxLr, const std::string& outFile, const std::
6263
}
6364
for (int i = 0; i < maxLr; i++) {
6465
auto& l = lrData[i];
65-
printf("L:%3d %6.2f<R<%6.2f ZH=%5.1f | dz = %6.2f drph = %6.2f\n", i, l.rMin, l.rMax, l.zHalf, l.dZMin, l.dRPhiMin);
66+
printf("L:%3d %6.4f<R<%6.4f ZH=%5.4f | dz = %6.4f drph = %6.4f\n", i, l.rMin, l.rMax, l.zHalf, l.dZMin, l.dRPhiMin);
6667
mbLUT.addLayer(l.rMin, l.rMax, l.zHalf, l.dZMin, l.dRPhiMin);
6768
}
6869

@@ -185,87 +186,76 @@ void configLayers()
185186
const float kToler = 1e-3; //
186187
float drStep = 0.f, zSpanH = 0.f, zBin = 0.f, rphiBin = 0.f, phiBin = 0.f;
187188

188-
o2::itsmft::ChipMappingITS mp;
189-
int nStave = 0;
190-
// rMin rMax zHalf
191-
lrData.emplace_back(0.0f, 1.65f, 30.f);
189+
// Vacuum inside beam pipe
190+
lrData.emplace_back(0.0f, 1.6f, 30.f);
192191

193192
// beam pipe
194-
lrData.emplace_back(lrData.back().rMax, 1.8f, 30.f);
193+
lrData.emplace_back(lrData.back().rMax, 1.65f, 30.f);
195194

196195
//===================================================================================
197196
// ITS3 Inner Barrel
198-
drStep = 0.2;
197+
drStep = 0.1;
199198
zSpanH = 20.;
200199
rphiBin = 0.2; // 0.1
201200
zBin = 0.5;
202-
float drStepChip = 0.054; // gap and chip width
203-
float drStepChip4Layer = 0.074; // gap and chip width
204201

205-
// Layer 1
206-
lrData.emplace_back(LrData(1.8f, 1.8f + drStepChip, zSpanH, zBin, rphiBin));
207-
// Air
208-
do {
209-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
210-
} while (lrData.back().rMax < 2.4f - drStep + kToler);
211-
lrData.emplace_back(LrData(lrData.back().rMax, 2.4f, zSpanH, zBin, rphiBin));
212-
213-
// Layer 2
214-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStepChip, zSpanH, zBin, rphiBin));
215-
// Air
216-
do {
217-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
218-
} while (lrData.back().rMax < 3.0f - drStep + kToler);
219-
lrData.emplace_back(LrData(lrData.back().rMax, 3.0f, zSpanH, zBin, rphiBin));
220-
221-
// Layer 3
222-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStepChip, zSpanH, zBin, rphiBin));
202+
// air and sensitive layers
203+
for (int iLayer{0}; iLayer < (int)o2::its3::constants::nLayers; ++iLayer) {
204+
do {
205+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
206+
} while (lrData.back().rMax < o2::its3::constants::radiiInner[iLayer] - drStep + kToler);
207+
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::radiiOuter[iLayer], zSpanH, zBin, rphiBin);
208+
}
209+
// services
210+
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::services::radiusOuter, zSpanH, zBin, rphiBin);
223211

224212
//===================================================================================
225213
// air space between Inner and Middle Barrels
214+
int nStave = 0;
226215
zSpanH = 40.;
227216
zBin = 5.;
228217
rphiBin = 2.;
229-
lrData.emplace_back(LrData(lrData.back().rMax, 19.0, zSpanH, zBin, rphiBin));
218+
lrData.emplace_back(lrData.back().rMax, 19.0, zSpanH, zBin, rphiBin);
230219

231220
//===================================================================================
232221
// ITS Middle Barrel
222+
o2::itsmft::ChipMappingITS mp;
233223
nStave = mp.getNStavesOnLr(3); // Lr 3
234224
zSpanH = 55.;
235225
zBin = 0.5;
236-
drStep = 0.2;
226+
drStep = 0.3;
237227
do {
238228
auto rmean = lrData.back().rMax + drStep / 2;
239229
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
240-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
241-
} while (lrData.back().rMax < 20.5 + kToler);
230+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
231+
} while (lrData.back().rMax < 21.4 - kToler);
242232

243233
drStep = 0.5;
244234
do {
245235
auto rmean = lrData.back().rMax + drStep / 2;
246236
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
247-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
248-
} while (lrData.back().rMax < 24. + kToler);
237+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
238+
} while (lrData.back().rMax < 23.4 - kToler);
249239

250240
nStave = mp.getNStavesOnLr(3); // Lr 4
251241
drStep = 0.2;
252242
do {
253243
auto rmean = lrData.back().rMax + drStep / 2;
254244
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
255-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
256-
} while (lrData.back().rMax < 25.6 + kToler);
245+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
246+
} while (lrData.back().rMax < 26.2 - kToler);
257247
drStep = 0.5;
258248
do {
259249
auto rmean = lrData.back().rMax + drStep / 2;
260250
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
261-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
262-
} while (lrData.back().rMax < 29. + kToler);
251+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
252+
} while (lrData.back().rMax < 29. - kToler);
263253

264254
//===================================================================================
265255

266256
// air space between Middle and Outer Barrels
267257
zSpanH = 80.f;
268-
lrData.emplace_back(LrData(lrData.back().rMax, 33.5, zSpanH));
258+
lrData.emplace_back(lrData.back().rMax, 33.5, zSpanH);
269259

270260
//===================================================================================
271261
// ITS Outer barrel
@@ -276,62 +266,66 @@ void configLayers()
276266
do {
277267
auto rmean = lrData.back().rMax + drStep / 2;
278268
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
279-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
280-
} while (lrData.back().rMax < 36. + kToler);
269+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
270+
} while (lrData.back().rMax < 36. - kToler);
281271

282272
drStep = 1.;
283273
do {
284274
auto rmean = lrData.back().rMax + drStep / 2;
285275
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
286-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
287-
} while (lrData.back().rMax < 38.5 + kToler);
276+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
277+
} while (lrData.back().rMax < 38.5 - kToler);
288278

289279
nStave = mp.getNStavesOnLr(6); // Lr 6
290280
drStep = 0.25;
291281
do {
292282
auto rmean = lrData.back().rMax + drStep / 2;
293283
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
294-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
295-
} while (lrData.back().rMax < 41. + kToler);
284+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
285+
} while (lrData.back().rMax < 41. - kToler);
296286

297287
drStep = 1.;
298288
do {
299289
auto rmean = lrData.back().rMax + drStep / 2;
300290
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
301-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
302-
} while (lrData.back().rMax < 44. + kToler);
291+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
292+
} while (lrData.back().rMax < 44. - kToler);
303293

304294
//===================================================================================
305295

306296
zSpanH = 100.f;
307297
zBin = 5.;
308-
lrData.emplace_back(LrData(lrData.back().rMax, 47., zSpanH, zBin));
298+
lrData.emplace_back(lrData.back().rMax, 44.8, zSpanH, zBin);
299+
lrData.emplace_back(lrData.back().rMax, 46.2, zSpanH, zBin);
300+
lrData.emplace_back(lrData.back().rMax, 47.0, zSpanH, zBin);
309301

310302
drStep = 2.;
311303
zBin = 5.;
312304
rphiBin = 2.;
313305
do {
314-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
315-
} while (lrData.back().rMax < 53. + kToler);
306+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
307+
} while (lrData.back().rMax < 55. - kToler);
316308

317309
zSpanH = 120.f;
318-
lrData.emplace_back(LrData(lrData.back().rMax, 56.5, zSpanH));
310+
lrData.emplace_back(lrData.back().rMax, 56.5, zSpanH);
311+
lrData.emplace_back(lrData.back().rMax, 60.5, zSpanH);
312+
lrData.emplace_back(lrData.back().rMax, 61.5, zSpanH);
319313

320314
zSpanH = 150.f;
321-
drStep = 4.;
315+
drStep = 3.5;
322316
zBin = 15.;
323317
rphiBin = 10;
324318
do {
325-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
326-
} while (lrData.back().rMax < 68.5 + kToler);
319+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
320+
} while (lrData.back().rMax < 68.5 - kToler);
327321

328322
zSpanH = 250.f;
329323
zBin = 25.;
330324
rphiBin = 5;
331325
{
332326
auto rmean = (lrData.back().rMax + 76) / 2.;
333327
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 2);
334-
lrData.emplace_back(LrData(lrData.back().rMax, 76, zSpanH, zBin, rphiBin));
328+
lrData.emplace_back(lrData.back().rMax, 76, zSpanH, zBin, rphiBin);
335329
}
336330
// TPC inner vessel
337331
// up to r = 78.5
@@ -340,33 +334,33 @@ void configLayers()
340334
{
341335
auto rmean = (lrData.back().rMax + 78.5) / 2;
342336
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
343-
lrData.emplace_back(LrData(lrData.back().rMax, 78.5, zSpanH, zBin, rphiBin));
337+
lrData.emplace_back(lrData.back().rMax, 78.8, zSpanH, zBin, rphiBin);
344338
}
345339
//
346340
zSpanH = 250.f;
347341
zBin = 2;
348342
{
349343
auto rmean = (lrData.back().rMax + 78.5) / 2;
350344
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
351-
lrData.emplace_back(LrData(lrData.back().rMax, 84.5, zSpanH, zBin, rphiBin));
345+
lrData.emplace_back(lrData.back().rMax, 84.5, zSpanH, zBin, rphiBin);
352346
}
353347

354348
// TPC drum
355349
zSpanH = 250.f;
356-
lrData.emplace_back(LrData(lrData.back().rMax, 250.0, zSpanH));
350+
lrData.emplace_back(lrData.back().rMax, 250.0, zSpanH);
357351

358352
//===============================
359353

360354
// TPC outer vessel
361355
zSpanH = 247.f; // ignore large lumps of material at |z|>247
362356
rphiBin = 2.;
363357
zBin = 3.;
364-
lrData.emplace_back(LrData(lrData.back().rMax, 258., zSpanH, zBin, rphiBin));
358+
lrData.emplace_back(lrData.back().rMax, 258., zSpanH, zBin, rphiBin);
365359

366360
zSpanH = 247.f; // ignore large lumps of material at |z|>247
367361
rphiBin = 2.;
368362
zBin = 999.; // no segmentation in Z
369-
lrData.emplace_back(LrData(lrData.back().rMax, 280., zSpanH, zBin, rphiBin));
363+
lrData.emplace_back(lrData.back().rMax, 280., zSpanH, zBin, rphiBin);
370364

371365
// TRD
372366

@@ -376,7 +370,7 @@ void configLayers()
376370
do {
377371
auto rmean = lrData.back().rMax + drStep / 2;
378372
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
379-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
373+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
380374
} while (lrData.back().rMax < 370);
381375

382376
// TOF
@@ -387,7 +381,7 @@ void configLayers()
387381
do {
388382
auto rmean = lrData.back().rMax + drStep / 2;
389383
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
390-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
384+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
391385
} while (lrData.back().rMax < 400);
392386

393387
// rest
@@ -398,7 +392,7 @@ void configLayers()
398392
zSpanH = lrData.back().rMax;
399393
auto rmean = lrData.back().rMax + drStep / 2;
400394
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
401-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
395+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
402396
} while (lrData.back().rMax < 500);
403397
}
404398

Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/DescriptorInnerBarrelITS3.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ class DescriptorInnerBarrelITS3 : public o2::its::DescriptorInnerBarrel
4545
int mNumLayers{constants::nLayers};
4646

4747
// wrapper volume properties
48-
static constexpr double mWrapperMinRadiusITS3{1.8};
49-
static constexpr double mWrapperMaxRadiusITS3{4.};
50-
static constexpr double mWrapperZSpanITS3{constants::segment::length + 5.};
48+
static constexpr double mTolerance{1e-3};
49+
static constexpr double mWrapperMinRadiusITS3{constants::radiiInner[0] - mTolerance};
50+
static constexpr double mWrapperMaxRadiusITS3{constants::services::radiusOuter + mTolerance};
51+
static constexpr double mWrapperZSpanITS3{constants::services::length + mTolerance};
5152

5253
private:
5354
std::array<std::unique_ptr<ITS3Layer>, constants::nLayers> mIBLayers;

Detectors/Upgrades/ITS3/simulation/src/DescriptorInnerBarrelITS3.cxx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,19 @@
1010
// or submit itself to any jurisdiction.
1111

1212
#include "ITS3Simulation/DescriptorInnerBarrelITS3.h"
13-
#include "fairlogger/Logger.h"
1413

1514
using namespace o2::its3;
1615

1716
ClassImp(DescriptorInnerBarrelITS3);
1817

1918
void DescriptorInnerBarrelITS3::createLayer(int iLayer, TGeoVolume* dest)
2019
{
21-
LOGP(debug, "ITS3-IB: Creating Layer {}", iLayer);
2220
mIBLayers[iLayer] = std::make_unique<ITS3Layer>(iLayer);
2321
mIBLayers[iLayer]->createLayer(dest);
2422
}
2523

2624
void DescriptorInnerBarrelITS3::createServices(TGeoVolume* dest)
2725
{
28-
LOGP(debug, "ITS3-IB: Creating Services");
2926
mServices = std::make_unique<ITS3Services>();
3027
mServices->createCYSSAssembly(dest);
3128
}

Detectors/Upgrades/ITS3/simulation/src/ITS3Layer.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ void ITS3Layer::createCarbonForm()
293293
if (mNLayer < 2) {
294294
dRadius = constants::radii[mNLayer + 1] - constants::radii[mNLayer] - constants::totalThickness;
295295
} else {
296-
dRadius = 0.7; // TODO: lack of carbon foam radius for layer 2, use 0.7mm as a temporary value
296+
dRadius = constants::carbonfoam::thicknessOuterFoam; // TODO: lack of carbon foam radius for layer 2, use 0.7 cm as a temporary value
297297
}
298298
double phiSta = edgeBetwChipAndFoam / (0.5 * constants::radii[mNLayer + 1] + constants::radii[mNLayer]) * o2m::Rad2Deg;
299299
double phiEnd = (constants::nSegments[mNLayer] * constants::segment::width) / constants::radii[mNLayer] * o2m::Rad2Deg - phiSta;

0 commit comments

Comments
 (0)