@@ -75,6 +75,7 @@ TGeoVolume* V3Services::createInnerBarrelSupports(const TGeoManager* mgr)
7575 // a TGeoVolume(Assembly) with the half cylinder and wedges
7676 //
7777 // Created: 11 Feb 2021 Mario Sitta
78+ // Updated: 22 Feb 2021 Mario Sitta Impregnated carbon fleece added
7879 //
7980
8081 // For the time being we put all relevant parameters here
@@ -94,7 +95,6 @@ TGeoVolume* V3Services::createInnerBarrelSupports(const TGeoManager* mgr)
9495 TGeoVolume* layerVol;
9596 TGeoVolume* foamVol[3 ];
9697 TGeoTube* layerSh;
97- TGeoTubeSeg* foamSh[3 ];
9898
9999 Double_t rmin, rmax, zlen, alpha, phi;
100100 Double_t xpos, ypos, zpos;
@@ -133,23 +133,17 @@ TGeoVolume* V3Services::createInnerBarrelSupports(const TGeoManager* mgr)
133133 rmax = layerSh->GetRmin ();
134134 }
135135
136- foamSh[j] = new TGeoTubeSeg (rmin, rmax, zlen, 0 , phi);
136+ foamVol[j] = createFoamWedge (rmin, rmax, zlen, phi);
137+ foamVol[j]->SetName (Form (" IBSupportWedge%d" , j));
137138 }
138139
139140 // We have all shapes: now create the real volumes
140141 TGeoMedium* medCarbon = mgr->GetMedium (" IT3_F6151B05M$" );
141- TGeoMedium* medFoam = mgr->GetMedium (" ERGDUOCEL$" );
142142
143143 TGeoVolume* suppCylVol = new TGeoVolume (" IBSupportCylinder" , suppCylSh, medCarbon);
144144 suppCylVol->SetFillColor (kBlue );
145145 suppCylVol->SetLineColor (kBlue );
146146
147- for (Int_t j = 0 ; j < 3 ; j++) {
148- foamVol[j] = new TGeoVolume (Form (" IBSupportFoam%d" , j), foamSh[j], medFoam);
149- foamVol[j]->SetFillColor (kGreen );
150- foamVol[j]->SetLineColor (kGreen );
151- }
152-
153147 // Finally put everything in the container volume
154148 TGeoVolumeAssembly* ibSupport = new TGeoVolumeAssembly (" IBCylinderSupport" );
155149
@@ -163,18 +157,94 @@ TGeoVolume* V3Services::createInnerBarrelSupports(const TGeoManager* mgr)
163157 Double_t emptySpace = 2 * layerSh->GetDz () - sNFoamWedges * sFoamZLen - 2 * sFoamEdgeZDist ;
164158 emptySpace /= (sNFoamWedges - 1 );
165159
166- for (Int_t j = 0 ; j < sNFoamWedges ; j ++) {
167- zpos = -layerSh-> GetDz () + sFoamEdgeZDist + j * ( sFoamZLen + emptySpace) + 0.5 * sFoamZLen ;
168- for (Int_t i = 0 ; i < 3 ; i++) {
160+ for (Int_t i = 0 ; i < 3 ; i ++) {
161+ for (Int_t j = 0 ; j < sNFoamWedges ; j++) {
162+ zpos = -layerSh-> GetDz () + sFoamEdgeZDist + j * ( sFoamZLen + emptySpace) + 0.5 * sFoamZLen ;
169163 ibSupport->AddNode (foamVol[i], j + 1 , new TGeoCombiTrans (0 , 0 , zpos, new TGeoRotation (" " , alpha, 0 , 0 )));
170164 ibSupport->AddNode (foamVol[i], sNFoamWedges + j + 1 , new TGeoCombiTrans (0 , 0 , zpos, new TGeoRotation (" " , 180 . - alpha - phi, 0 , 0 )));
171- ibSupport->AddNode (foamVol[i], 2 * sNFoamWedges + j + 1 , new TGeoCombiTrans (0 , 0 , zpos, new TGeoRotation (" " , 90 . - phi / 2 , 0 , 0 )));
172165 }
166+ // There are only two wedges at 90deg located at the far ends
167+ zpos = -layerSh->GetDz () + sFoamEdgeZDist + 0.5 * sFoamZLen ;
168+ ibSupport->AddNode (foamVol[i], 2 * sNFoamWedges + 1 , new TGeoCombiTrans (0 , 0 , zpos, new TGeoRotation (" " , 90 . - phi / 2 , 0 , 0 )));
169+ ibSupport->AddNode (foamVol[i], 2 * sNFoamWedges + 2 , new TGeoCombiTrans (0 , 0 , -zpos, new TGeoRotation (" " , 90 . - phi / 2 , 0 , 0 )));
173170 }
171+
174172 //
175173 return ibSupport;
176174}
177175
176+ TGeoVolume* V3Services::createFoamWedge (const Double_t rIn, const Double_t rOut, const Double_t zLen, const Double_t phi, const TGeoManager* mgr)
177+ {
178+ //
179+ // Creates a single foam wedge with glue-impregnated carbon fleece attached
180+ //
181+ // Input:
182+ // rIn : the inner radius
183+ // rOut : the outer radius
184+ // zLen : the half length along Z
185+ // phi : the angular aperture
186+ // mgr : the GeoManager (used only to get the proper material)
187+ //
188+ // Output:
189+ //
190+ // Return:
191+ // a TGeoVolume with all elements, ready to be displaced
192+ //
193+ // Created: 22 Feb 2021 Mario Sitta
194+ //
195+
196+ // For the time being we put all relevant parameters here
197+ // May be changed into static const's when definitively set
198+ const Double_t sIBSuppWedgeCFThick = 20.0 * sMicron ;
199+
200+ // Local variables
201+ Double_t rmin, rmax;
202+
203+ // The foam wedge container: a TubeSeg
204+ TGeoTubeSeg* wedgeSh = new TGeoTubeSeg (rIn, rOut, zLen, 0 , phi);
205+
206+ // The foam wedge: a TubeSeg
207+ rmin = rIn + sIBSuppWedgeCFThick ;
208+ rmax = rOut - sIBSuppWedgeCFThick ;
209+ TGeoTubeSeg* foamSh = new TGeoTubeSeg (rmin, rmax, zLen, 0 , phi);
210+
211+ // The two carbon fleece layers: two TubeSeg's
212+ rmax = rIn + sIBSuppWedgeCFThick ;
213+ TGeoTubeSeg* fleeceInSh = new TGeoTubeSeg (rIn, rmax, zLen, 0 , phi);
214+
215+ rmin = rOut - sIBSuppWedgeCFThick ;
216+ TGeoTubeSeg* fleeceOutSh = new TGeoTubeSeg (rmin, rOut, zLen, 0 , phi);
217+
218+ // We have all shapes: now create the real volumes
219+ TGeoMedium* medAir = mgr->GetMedium (" IT3_AIR$" );
220+ TGeoMedium* medFoam = mgr->GetMedium (" IT3_ERGDUOCEL$" );
221+ TGeoMedium* medFleece = mgr->GetMedium (" IT3_IMPREG_FLEECE$" );
222+
223+ TGeoVolume* wedgeVol = new TGeoVolume (" IBSupportWedge" , wedgeSh, medAir);
224+ wedgeVol->SetFillColor (kGreen );
225+ wedgeVol->SetLineColor (kGreen );
226+
227+ TGeoVolume* foamVol = new TGeoVolume (" IBSupportFoam" , foamSh, medFoam);
228+ foamVol->SetFillColor (kGreen );
229+ foamVol->SetLineColor (kGreen );
230+
231+ TGeoVolume* fleeceInVol = new TGeoVolume (" IBSupportFleeceI" , fleeceInSh, medFleece);
232+ fleeceInVol->SetFillColor (kViolet );
233+ fleeceInVol->SetLineColor (kViolet );
234+
235+ TGeoVolume* fleeceOutVol = new TGeoVolume (" IBSupportFleeceO" , fleeceOutSh, medFleece);
236+ fleeceOutVol->SetFillColor (kViolet );
237+ fleeceOutVol->SetLineColor (kViolet );
238+
239+ // Finally put everything in the container volume
240+ wedgeVol->AddNode (foamVol, 1 , nullptr );
241+ wedgeVol->AddNode (fleeceInVol, 1 , nullptr );
242+ wedgeVol->AddNode (fleeceOutVol, 1 , nullptr );
243+
244+ // Done
245+ return wedgeVol;
246+ }
247+
178248TGeoVolume* V3Services::createIBEndWheelsSideA (const TGeoManager* mgr)
179249{
180250 //
0 commit comments