@@ -157,6 +157,9 @@ const Double_t V3Layer::sOBFPCSoldMaskThick = 30.0 * sMicron;
157157const Double_t V3Layer::sOBFPCCopperThick = 18.0 * sMicron ;
158158const Double_t V3Layer::sOBFPCCuAreaFracGnd = 0.954 ; // F.Benotto
159159const 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 ;
160163const Double_t V3Layer::sOBGlueFPCThick = 50 * sMicron ;
161164const Double_t V3Layer::sOBGlueColdPlThick = 80 * sMicron ;
162165const 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+
36583756Double_t V3Layer::radiusOmTurboContainer ()
36593757{
36603758 Double_t rr, delta, z, lstav, rstav;
0 commit comments