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
3132bool 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
3536struct 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
0 commit comments