Skip to content

Commit b047ec4

Browse files
committed
mplementation of OB FPC Capacitors
1 parent 684cad7 commit b047ec4

3 files changed

Lines changed: 114 additions & 5 deletions

File tree

Detectors/ITSMFT/ITS/simulation/include/ITSSimulation/V3Layer.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,14 @@ class V3Layer : public V11Geometry
241241
/// \param mgr The GeoManager (used only to get the proper material)
242242
TGeoVolume* createOBFPCCuSig(Double_t z, const TGeoManager* mgr = gGeoManager);
243243

244+
/// Creates the OB FPC capacitors
245+
/// \param modvol The OB module mother volume
246+
/// \param xmodlen The module half X length
247+
/// \param zmodlen The module half Z length
248+
/// \param yzero The Y base position of capacitors
249+
/// \param mgr The GeoManager (used only to get the proper material)
250+
void createOBFPCCapacitors(TGeoVolume* modvol, Double_t xmodlen, Double_t zmodlen, Double_t yzero, const TGeoManager* mgr = gGeoManager);
251+
244252
/// Creates the OB Power and Bias Buses
245253
/// Returns a TGeoVolume with both buses
246254
/// \param z Z stave half lengths
@@ -458,6 +466,9 @@ class V3Layer : public V11Geometry
458466
static const Double_t sOBFPCCopperThick; ///< Thickness of FPC Copper
459467
static const Double_t sOBFPCCuAreaFracGnd; ///< Fraction of Cu on Gnd FPC
460468
static const Double_t sOBFPCCuAreaFracSig; ///< Fraction of Cu on Sig FPC
469+
static const Double_t sOBFPCCapacitorXWid; ///< OB FPC capacitor X width
470+
static const Double_t sOBFPCCapacitorYHi; ///< OB FPC capacitor Y height
471+
static const Double_t sOBFPCCapacitorZLen; ///< OB FPC capacitor Z length
461472
static const Double_t sOBGlueFPCThick; ///< Thickness of Glue to FPC
462473
static const Double_t sOBGlueColdPlThick; ///< Thickness of Glue to Cold Pl
463474
static const Double_t sOBPowerBusXWidth; ///< OB Power Bus X width

Detectors/ITSMFT/ITS/simulation/src/Detector.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ void Detector::configOuterBarrelITS(int nInnerBarrelLayers, int buildLevel)
101101
// Radii are from last TDR (ALICE-TDR-017.pdf Tab. 1.1, rMid is mean value)
102102

103103
const double tdr5dat[kNLr][kNPar] = {
104-
{-1, 19.45, -1, 4., 7.5, 24}, // for others: -, rMid, -, NMod/HStave, phi0, nStaves // 24 was 49
105-
{-1, 24.40, -1, 4., 6., 30}, // 30 was 61
106-
{-1, 34.24, -1, 7., 4.29, 42}, // 42 was 88
107-
{-1, 39.20, -1, 7., 3.75, 48} // 48 was 100
104+
{-1, 19.40, -1, 4., 7.5, 24}, // for others: -, rMid, -, NMod/HStave, phi0, nStaves // 24 was 49
105+
{-1, 24.35, -1, 4., 6., 30}, // 30 was 61
106+
{-1, 34.19, -1, 7., 4.29, 42}, // 42 was 88
107+
{-1, 39.15, -1, 7., 3.75, 48} // 48 was 100
108108
};
109109

110110
double rLr, phi0, turbo;

Detectors/ITSMFT/ITS/simulation/src/V3Layer.cxx

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@ const Double_t V3Layer::sOBFPCSoldMaskThick = 30.0 * sMicron;
157157
const Double_t V3Layer::sOBFPCCopperThick = 18.0 * sMicron;
158158
const Double_t V3Layer::sOBFPCCuAreaFracGnd = 0.954; // F.Benotto
159159
const Double_t V3Layer::sOBFPCCuAreaFracSig = 0.617; // F.Benotto
160+
const Double_t V3Layer::sOBFPCCapacitorXWid = 0.5 * sMm;
161+
const Double_t V3Layer::sOBFPCCapacitorYHi = 0.5 * sMm;
162+
const Double_t V3Layer::sOBFPCCapacitorZLen = 1.0 * sMm;
160163
const Double_t V3Layer::sOBGlueFPCThick = 50 * sMicron;
161164
const Double_t V3Layer::sOBGlueColdPlThick = 80 * sMicron;
162165
const Double_t V3Layer::sOBPowerBusXWidth = 3.04 * sCm;
@@ -3426,6 +3429,7 @@ TGeoVolume* V3Layer::createModuleOuterB(const TGeoManager* mgr)
34263429
// and Cu instead of Al
34273430
// Updated: 20 Jul 2017 M. Sitta O2 version
34283431
// Updated: 30 Jul 2018 M. Sitta Updated geometry
3432+
// Updated: 13 Jun 2026 M. Sitta Add FPC capacitors
34293433
//
34303434

34313435
const Int_t nameLen = 30;
@@ -3486,7 +3490,8 @@ TGeoVolume* V3Layer::createModuleOuterB(const TGeoManager* mgr)
34863490
Double_t ysig = (static_cast<TGeoBBox*>(cuSignalCableVol->GetShape()))->GetDY();
34873491

34883492
xlen = (static_cast<TGeoBBox*>(cuGndCableVol->GetShape()))->GetDX();
3489-
ylen = glueCP->GetDY() + ychip + glueFPC->GetDY() + ysig + flexKap->GetDY() + ygnd;
3493+
// ylen = glueCP->GetDY() + ychip + glueFPC->GetDY() + ysig + flexKap->GetDY() + ygnd;
3494+
ylen = glueCP->GetDY() + ychip + glueFPC->GetDY() + ysig + flexKap->GetDY() + ygnd + sOBFPCCapacitorYHi / 2;
34903495
TGeoBBox* module = new TGeoBBox("OBModule", xlen, ylen, zlen);
34913496

34923497
// We have all shapes: now create the real volumes
@@ -3559,6 +3564,10 @@ TGeoVolume* V3Layer::createModuleOuterB(const TGeoManager* mgr)
35593564
modVol->AddNode(cuGndCableVol, 1, new TGeoTranslation(0, ypos, 0));
35603565
}
35613566

3567+
// Add the FPC capacitors
3568+
ypos += ygnd;
3569+
createOBFPCCapacitors(modVol, xlen, zlen, ypos);
3570+
35623571
// Done, return the module
35633572
return modVol;
35643573
}
@@ -3655,6 +3664,95 @@ TGeoVolume* V3Layer::createOBFPCCuSig(const Double_t zcable, const TGeoManager*
36553664
return soldmaskVol;
36563665
}
36573666

3667+
void V3Layer::createOBFPCCapacitors(TGeoVolume* modvol, Double_t xmodlen, Double_t zmodlen, Double_t yzero, const TGeoManager* mgr)
3668+
{
3669+
//
3670+
// Adds the capacitors to the OB FPC
3671+
//
3672+
// Input:
3673+
// modvol : the OB module mother volume
3674+
// xmodlen : the module half X length
3675+
// zmodlen : the module half Z length
3676+
// yzero : the Y base position of capacitors
3677+
// mgr : the GeoManager (used only to get the proper material)
3678+
//
3679+
// Output:
3680+
//
3681+
// Return:
3682+
//
3683+
// Created: 13 Jun 2026 Mario Sitta
3684+
//
3685+
3686+
// Number of capacitors and their positions from Gerber files
3687+
// and F.Benotto communications
3688+
3689+
// Capacitors position (Gerber X,Y with respect to bottom left corner
3690+
// will be translated to TGeo Z,X with respect center of module)
3691+
const Int_t nGroups = 10;
3692+
const Double_t xyCapacitors[nGroups][2] = {
3693+
{26.34 * sMm, 14.02 * sMm}, {7.16 * sMm, 18.96 * sMm},
3694+
{26.04 * sMm, 10.34 * sMm}, {7.91 * sMm, 22.67 * sMm},
3695+
{41.36 * sMm, 18.78 * sMm}, {41.56 * sMm, 14.23 * sMm},
3696+
{64.35 * sMm, 13.54 * sMm}, {25.95 * sMm, 19.38 * sMm},
3697+
{64.39 * sMm, 10.45 * sMm}, {22.21 * sMm, 22.63 * sMm}
3698+
};
3699+
3700+
const Double_t deltaYCapacitors = 30 * sMm;
3701+
3702+
const Int_t nCapacitors[nGroups] = {7, 7, 7, 7, 5, 5, 5, 7, 5, 7};
3703+
3704+
const Double_t xyCapacitorSingle[8][2] = {
3705+
{14.91 * sMm, 18.78 * sMm}, {195.81 * sMm, 18.78 * sMm},
3706+
{15.11 * sMm, 14.23 * sMm}, {196.01 * sMm, 14.23 * sMm},
3707+
{34.20 * sMm, 13.54 * sMm}, {36.59 * sMm, 10.33 * sMm},
3708+
{7.73 * sMm, 13.54 * sMm}, {11.44 * sMm, 12.13 * sMm},
3709+
};
3710+
3711+
// Local variables
3712+
Double_t xpos, ypos, zpos;
3713+
Int_t idCapacitor;
3714+
3715+
TGeoVolume *capacitorOB;
3716+
3717+
// Check whether we already have the volumes, otherwise create them
3718+
// (so as to avoid creating multiple copies of the very same volumes
3719+
// for each layer)
3720+
capacitorOB = mgr->GetVolume("OBFPCCapacitor");
3721+
3722+
if (!capacitorOB) {
3723+
TGeoBBox* capacit = new TGeoBBox(sOBFPCCapacitorXWid / 2, sOBFPCCapacitorYHi / 2, sOBFPCCapacitorZLen / 2);
3724+
3725+
TGeoMedium* medCeramic = mgr->GetMedium(Form("%s_CERAMIC$", GetDetName()));
3726+
3727+
capacitorOB = new TGeoVolume("OBFPCCapacitor", capacit, medCeramic);
3728+
capacitorOB->SetLineColor(kBlack);
3729+
capacitorOB->SetFillColor(kBlack);
3730+
}
3731+
3732+
// Place all the capacitors (they are really a lot...)
3733+
ypos = yzero + sOBFPCCapacitorYHi / 2;
3734+
idCapacitor = 0;
3735+
3736+
for (Int_t jgrp = 0; jgrp < nGroups; jgrp++) { // Loop on the groups of cap's
3737+
xpos = xyCapacitors[jgrp][1] - xmodlen;
3738+
for (Int_t jcap = 0; jcap < nCapacitors[jgrp]; jcap++) { // Loop on cap's
3739+
zpos = xyCapacitors[jgrp][0] - zmodlen + jcap * deltaYCapacitors;
3740+
idCapacitor++;
3741+
modvol->AddNode(capacitorOB, idCapacitor, new TGeoTranslation(xpos, ypos, zpos));
3742+
}
3743+
}
3744+
3745+
// Add single capacitors
3746+
for (Int_t jcap = 0; jcap < 8; jcap++) {
3747+
xpos = xyCapacitorSingle[jcap][1] - xmodlen;
3748+
zpos = xyCapacitorSingle[jcap][0] - zmodlen;
3749+
idCapacitor++;
3750+
modvol->AddNode(capacitorOB, idCapacitor, new TGeoTranslation(xpos, ypos, zpos));
3751+
}
3752+
3753+
// We've done
3754+
}
3755+
36583756
Double_t V3Layer::radiusOmTurboContainer()
36593757
{
36603758
Double_t rr, delta, z, lstav, rstav;

0 commit comments

Comments
 (0)