Skip to content

Commit 6a31caf

Browse files
committed
ITS3: add some services material and update MatLUT macro
Signed-off-by: Felix Schlepper <[email protected]>
1 parent 2ccb1bb commit 6a31caf

File tree

6 files changed

+99
-79
lines changed

6 files changed

+99
-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: 60 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 = 60, 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,78 @@ 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.;
200-
rphiBin = 0.2; // 0.1
201-
zBin = 0.5;
202-
float drStepChip = 0.054; // gap and chip width
203-
float drStepChip4Layer = 0.074; // gap and chip width
199+
rphiBin = 0.1;
200+
zBin = 0.1;
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));
202+
// air and sensitive layers
203+
for (int iLayer{0}; iLayer < (int)o2::its3::constants::nLayers; ++iLayer) {
204+
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::radiiInner[iLayer], zSpanH, zBin, rphiBin);
205+
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::radiiOuter[iLayer], zSpanH, zBin, rphiBin);
206+
}
212207

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));
208+
rphiBin = 0.1;
209+
zBin = 0.5;
220210

221-
// Layer 3
222-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStepChip, zSpanH, zBin, rphiBin));
211+
// services
212+
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::services::radiusOuter, zSpanH, zBin, rphiBin);
223213

224214
//===================================================================================
225215
// air space between Inner and Middle Barrels
216+
int nStave = 0;
226217
zSpanH = 40.;
227218
zBin = 5.;
228219
rphiBin = 2.;
229-
lrData.emplace_back(LrData(lrData.back().rMax, 19.0, zSpanH, zBin, rphiBin));
220+
lrData.emplace_back(lrData.back().rMax, 19.0, zSpanH, zBin, rphiBin);
230221

231222
//===================================================================================
232223
// ITS Middle Barrel
224+
o2::itsmft::ChipMappingITS mp;
233225
nStave = mp.getNStavesOnLr(3); // Lr 3
234226
zSpanH = 55.;
235227
zBin = 0.5;
236-
drStep = 0.2;
228+
drStep = 0.3;
237229
do {
238230
auto rmean = lrData.back().rMax + drStep / 2;
239231
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);
232+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
233+
} while (lrData.back().rMax < 21.4 - kToler);
242234

243235
drStep = 0.5;
244236
do {
245237
auto rmean = lrData.back().rMax + drStep / 2;
246238
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);
239+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
240+
} while (lrData.back().rMax < 23.4 - kToler);
249241

250242
nStave = mp.getNStavesOnLr(3); // Lr 4
251243
drStep = 0.2;
252244
do {
253245
auto rmean = lrData.back().rMax + drStep / 2;
254246
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);
247+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
248+
} while (lrData.back().rMax < 26.2 - kToler);
257249
drStep = 0.5;
258250
do {
259251
auto rmean = lrData.back().rMax + drStep / 2;
260252
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);
253+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
254+
} while (lrData.back().rMax < 29. - kToler);
263255

264256
//===================================================================================
265257

266258
// air space between Middle and Outer Barrels
267259
zSpanH = 80.f;
268-
lrData.emplace_back(LrData(lrData.back().rMax, 33.5, zSpanH));
260+
lrData.emplace_back(lrData.back().rMax, 33.5, zSpanH);
269261

270262
//===================================================================================
271263
// ITS Outer barrel
@@ -276,62 +268,66 @@ void configLayers()
276268
do {
277269
auto rmean = lrData.back().rMax + drStep / 2;
278270
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);
271+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
272+
} while (lrData.back().rMax < 36. - kToler);
281273

282274
drStep = 1.;
283275
do {
284276
auto rmean = lrData.back().rMax + drStep / 2;
285277
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);
278+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
279+
} while (lrData.back().rMax < 38.5 - kToler);
288280

289281
nStave = mp.getNStavesOnLr(6); // Lr 6
290282
drStep = 0.25;
291283
do {
292284
auto rmean = lrData.back().rMax + drStep / 2;
293285
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);
286+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
287+
} while (lrData.back().rMax < 41. - kToler);
296288

297289
drStep = 1.;
298290
do {
299291
auto rmean = lrData.back().rMax + drStep / 2;
300292
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);
293+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
294+
} while (lrData.back().rMax < 44. - kToler);
303295

304296
//===================================================================================
305297

306298
zSpanH = 100.f;
307299
zBin = 5.;
308-
lrData.emplace_back(LrData(lrData.back().rMax, 47., zSpanH, zBin));
300+
lrData.emplace_back(lrData.back().rMax, 44.8, zSpanH, zBin);
301+
lrData.emplace_back(lrData.back().rMax, 46.2, zSpanH, zBin);
302+
lrData.emplace_back(lrData.back().rMax, 47.0, zSpanH, zBin);
309303

310304
drStep = 2.;
311305
zBin = 5.;
312306
rphiBin = 2.;
313307
do {
314-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
315-
} while (lrData.back().rMax < 53. + kToler);
308+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
309+
} while (lrData.back().rMax < 55. - kToler);
316310

317311
zSpanH = 120.f;
318-
lrData.emplace_back(LrData(lrData.back().rMax, 56.5, zSpanH));
312+
lrData.emplace_back(lrData.back().rMax, 56.5, zSpanH);
313+
lrData.emplace_back(lrData.back().rMax, 60.5, zSpanH);
314+
lrData.emplace_back(lrData.back().rMax, 61.5, zSpanH);
319315

320316
zSpanH = 150.f;
321-
drStep = 4.;
317+
drStep = 3.5;
322318
zBin = 15.;
323319
rphiBin = 10;
324320
do {
325-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
326-
} while (lrData.back().rMax < 68.5 + kToler);
321+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
322+
} while (lrData.back().rMax < 68.5 - kToler);
327323

328324
zSpanH = 250.f;
329325
zBin = 25.;
330326
rphiBin = 5;
331327
{
332328
auto rmean = (lrData.back().rMax + 76) / 2.;
333329
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 2);
334-
lrData.emplace_back(LrData(lrData.back().rMax, 76, zSpanH, zBin, rphiBin));
330+
lrData.emplace_back(lrData.back().rMax, 76, zSpanH, zBin, rphiBin);
335331
}
336332
// TPC inner vessel
337333
// up to r = 78.5
@@ -340,33 +336,33 @@ void configLayers()
340336
{
341337
auto rmean = (lrData.back().rMax + 78.5) / 2;
342338
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
343-
lrData.emplace_back(LrData(lrData.back().rMax, 78.5, zSpanH, zBin, rphiBin));
339+
lrData.emplace_back(lrData.back().rMax, 78.8, zSpanH, zBin, rphiBin);
344340
}
345341
//
346342
zSpanH = 250.f;
347343
zBin = 2;
348344
{
349345
auto rmean = (lrData.back().rMax + 78.5) / 2;
350346
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
351-
lrData.emplace_back(LrData(lrData.back().rMax, 84.5, zSpanH, zBin, rphiBin));
347+
lrData.emplace_back(lrData.back().rMax, 84.5, zSpanH, zBin, rphiBin);
352348
}
353349

354350
// TPC drum
355351
zSpanH = 250.f;
356-
lrData.emplace_back(LrData(lrData.back().rMax, 250.0, zSpanH));
352+
lrData.emplace_back(lrData.back().rMax, 250.0, zSpanH);
357353

358354
//===============================
359355

360356
// TPC outer vessel
361357
zSpanH = 247.f; // ignore large lumps of material at |z|>247
362358
rphiBin = 2.;
363359
zBin = 3.;
364-
lrData.emplace_back(LrData(lrData.back().rMax, 258., zSpanH, zBin, rphiBin));
360+
lrData.emplace_back(lrData.back().rMax, 258., zSpanH, zBin, rphiBin);
365361

366362
zSpanH = 247.f; // ignore large lumps of material at |z|>247
367363
rphiBin = 2.;
368364
zBin = 999.; // no segmentation in Z
369-
lrData.emplace_back(LrData(lrData.back().rMax, 280., zSpanH, zBin, rphiBin));
365+
lrData.emplace_back(lrData.back().rMax, 280., zSpanH, zBin, rphiBin);
370366

371367
// TRD
372368

@@ -376,7 +372,7 @@ void configLayers()
376372
do {
377373
auto rmean = lrData.back().rMax + drStep / 2;
378374
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
379-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
375+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
380376
} while (lrData.back().rMax < 370);
381377

382378
// TOF
@@ -387,7 +383,7 @@ void configLayers()
387383
do {
388384
auto rmean = lrData.back().rMax + drStep / 2;
389385
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
390-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
386+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
391387
} while (lrData.back().rMax < 400);
392388

393389
// rest
@@ -398,7 +394,7 @@ void configLayers()
398394
zSpanH = lrData.back().rMax;
399395
auto rmean = lrData.back().rMax + drStep / 2;
400396
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
401-
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
397+
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
402398
} while (lrData.back().rMax < 500);
403399
}
404400

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)