]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSv11GeometrySupport.cxx
fix in calling of gaussian spread function
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySupport.cxx
index baf22626c3cdc6eaeed4c0afa3941a9bb5cb90a7..56d0287f40c5f1cb9d74773b84b0192d47d07749 100644 (file)
@@ -58,6 +58,9 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
 //
 // Created:         ???          ???
 // Updated:      11 Dec 2007  Mario Sitta
+// Updated:      20 Mar 2012  Mario Sitta  Reimplemented with simpler shapes
+// Updated:      20 Jul 2012  Mario Sitta  Reimplemented with Composite Shape
+// Updated:      12 Oct 2012  Mario Sitta  Composite Shape also for EndCap
 //
 // Technical data are taken from:  ALICE-Thermal Screen "Cone transition"
 // (thermal-screen1_a3.ps), "Cylinder" (thermal-screen2_a3.ps), "Half
@@ -73,6 +76,12 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
   const Double_t kInnerBCentral = 2.023 *fgkcm;
   const Double_t kOuterACentral = 2.4374*fgkcm;
   const Double_t kOuterBCentral = 3.8162*fgkcm;
+  const Double_t kCoolManifHoleWid  = 24.0*fgkmm; // TO BE CHECKED!
+  const Double_t kCoolManifHoleLen  = 57.5*fgkmm; // 54.2 + 1.5*2 + 0.3 toll.
+  const Double_t kCoolManifHoleZPos = 36.47*fgkcm;// MUST match SPD class
+  const Double_t kCoolSuppHoleWid  = 15.0*fgkmm;
+  const Double_t kCoolSuppHoleLen  = 38.4*fgkmm; // 35.1 + 1.5*2 + 0.3 toll.// TO BE CHECKED!
+  const Double_t kCoolSuppHoleZPos = 26.5*fgkcm;
   // Dimensions of the EndCap shield
   const Double_t kHalfLengthEndCap  = 25.*fgkmm;
   const Double_t kThicknessEndCap   = 2.0*fgkmm;
@@ -88,9 +97,15 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
   const Double_t kInnerRadialCone = 37.3*fgkcm;
   const Double_t kOuterRadialCone = 39.0*fgkcm;
   const Double_t kInnerACone = 14.2344*fgkcm;
-  //  const Double_t kInnerBCone =  9.0915*fgkcm;
+  const Double_t kInnerBCone =  9.0915*fgkcm;
   const Double_t kOuterACone =  9.5058*fgkcm;
-  //  const Double_t kOuterBCone = 14.8831*fgkcm;
+  const Double_t kOuterBCone = 14.8831*fgkcm;
+  // Dimensions of the filler blocks and bars
+  const Double_t kFillerBlockLength = 20.0*fgkmm;
+  const Double_t kFillerBlockHoleR  = 2.4*fgkmm;
+  const Double_t kFillerBlockZTrans = 1.5*fgkmm;
+  const Double_t kFillerBarLength = 220.0*fgkmm;
+  const Double_t kFillerBarThick  =   1.0*fgkmm;
   // Dimensions of the Flange's Ring and Wing
   const Double_t kHalfLengthRing  = 7.5*fgkmm;
   const Double_t kThicknessRing   = 0.3*fgkmm;
@@ -100,16 +115,17 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
   const Double_t kWideWing      = 6.0*fgkcm;
   const Double_t kThetaWing     = 45.0;
   // Common data
-  const Double_t kTheta = 36.0*TMath::DegToRad();
+  const Double_t kThetaDeg = 36.0;
+  const Double_t kTheta = kThetaDeg*TMath::DegToRad();
   const Double_t kThicknessOmega = 0.3*fgkmm;
 
   // Local variables
-  Double_t x, y;
-  Double_t zpos;
-  Double_t xshld[24], yshld[24];
-  Double_t xair[24] , yair[24];
+  Double_t xpos, ypos, zpos;
+  Double_t xXtru[24], yXtru[24];
+  Double_t xshld[24], yshld[24]; // Coord. of external thermal shape
+  Double_t xair[24] , yair[24];  // Coord. of whole air shape
   Double_t xomega[48], yomega[48];
-  //  Double_t *xyarb8;
+
 
   // The entire shield is made up of two half central shields
   // symmetric with respect to the XZ plane, four half end cap
@@ -118,21 +134,16 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
 
   TGeoVolumeAssembly *vM = new TGeoVolumeAssembly("ITSspdThermalShield");
 
-  // The central half shield: a half tube of carbon fiber,
-  // a similar but proportionally smaller half tube of air inside it,
-  // and a Omega-shaped carbon fiber insert inside the air.
-  // They are all XTru shapes
-
-  TGeoXtru *centralshape = new TGeoXtru(2);
+  // The central half shield: a Composite Shape of carbon fiber.
+  // We need Composite Shapes because we have holes in which the SPD
+  // cooling manifolds and their supports will be placed.
+  // All Composite elements are XTru shapes
 
+  // First determine the external shape points
   CreateSPDThermalShape(kInnerACentral,kInnerBCentral,kInnerRadiusCentral,
                        kOuterACentral,kOuterBCentral,kOuterRadiusCentral,
                        kTheta,xshld,yshld);
 
-  centralshape->DefinePolygon(24,xshld,yshld);
-  centralshape->DefineSection(0,-kHalfLengthCentral);
-  centralshape->DefineSection(1, kHalfLengthCentral);
-
   // Now rescale to get the air volume dimensions
     InsidePoint(xshld[23], yshld[23],
                xshld[ 0], yshld[ 0],
@@ -149,37 +160,190 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
                xshld[ 0], yshld[ 0], kThicknessCentral,
                xair[23], yair[23]);
 
-  // Create the air shape
-  TGeoXtru *centralairshape = new TGeoXtru(2);
-
-  centralairshape->DefinePolygon(24,xair,yair);
-  centralairshape->DefineSection(0,-kHalfLengthCentral);
-  centralairshape->DefineSection(1, kHalfLengthCentral);
+  // Then use them to determine the Omega shape points
+  CreateSPDOmegaShape(xair,yair,kThicknessOmega,xomega,yomega);
 
-  // Create the Omega insert
-  TGeoXtru *centralomegashape = new TGeoXtru(2);
+  // Finally create the single Xtru volumes
+  TGeoXtru *uppershape = new TGeoXtru(2);
+  uppershape->SetName("upTS");
 
-  CreateSPDOmegaShape(xair,yair,kThicknessOmega,xomega,yomega);
+  for (Int_t j=0; j<6; j++) {
+    xXtru[j  ] = xair[11-j];
+    yXtru[j  ] = yair[11-j];
+    xXtru[j+6] = xshld[j+6];
+    yXtru[j+6] = yshld[j+6];
+  }
+  yXtru[5] = yXtru[6];  // Air is not at same Y as thermal shield
+  for (Int_t j=0; j<12; j++) {
+    xXtru[23-j] = -xXtru[j];
+    yXtru[23-j] =  yXtru[j];
+  }
 
-  centralomegashape->DefinePolygon(48,xomega,yomega);
-  centralomegashape->DefineSection(0,-kHalfLengthCentral);
-  centralomegashape->DefineSection(1, kHalfLengthCentral);
+  uppershape->DefinePolygon(24,xXtru,yXtru);
+  uppershape->DefineSection(0,-kHalfLengthCentral);
+  uppershape->DefineSection(1, kHalfLengthCentral);
 
-  // The end cap half shield: a half tube of carbon fiber,
-  // a similar but proportionally smaller half tube of air inside it,
-  // and a Omega-shaped carbon fiber insert inside the air.
-  // They are all XTru shapes
+  TGeoXtru *lowershape = new TGeoXtru(2);
+  lowershape->SetName("lwTS");
 
-  TGeoXtru *endcapshape = new TGeoXtru(2);
+  for (Int_t j=0; j<6; j++) {
+    xXtru[j  ] = xshld[j];
+    yXtru[j  ] = yshld[j];
+    xXtru[j+6] = xair[5-j];
+    yXtru[j+6] = yair[5-j];
+  }
+  yXtru[6] = yXtru[5];  // Air is not at same Y as thermal shield
+  for (Int_t j=0; j<12; j++) {
+    xXtru[23-j] = -xXtru[j];
+    yXtru[23-j] =  yXtru[j];
+  }
 
+  lowershape->DefinePolygon(24,xXtru,yXtru);
+  lowershape->DefineSection(0,-kHalfLengthCentral);
+  lowershape->DefineSection(1, kHalfLengthCentral);
+
+  yomega[10] = yshld[6];   // Add also base thickness
+  yomega[11] = yomega[10];
+  yomega[36] = yshld[17];
+  yomega[37] = yomega[36];
+
+  TGeoXtru *omegashape = new TGeoXtru(2);
+  omegashape->SetName("omTS");
+
+  omegashape->DefinePolygon(48,xomega,yomega);
+  omegashape->DefineSection(0,-kHalfLengthCentral);
+  omegashape->DefineSection(1, kHalfLengthCentral);
+
+  // And now the holes and their position matrices
+  Double_t radius = 0.5*(uppershape->GetY(11)+lowershape->GetY(0));
+
+  TGeoBBox *manifhole = new TGeoBBox(kCoolManifHoleWid/2,
+         0.55*(uppershape->GetY(11)-lowershape->GetY(0)),
+                                    kCoolManifHoleLen/2);
+  manifhole->SetName("mhTS");
+
+  zpos = kCoolManifHoleZPos;
+
+  TGeoTranslation *m1p = new TGeoTranslation("m1p",0,radius, zpos);
+  TGeoTranslation *m1n = new TGeoTranslation("m1n",0,radius,-zpos);
+  m1p->RegisterYourself();
+  m1n->RegisterYourself();
+
+  TGeoCombiTrans *m2p = new TGeoCombiTrans("m2p",radius*SinD(kThetaDeg),
+                                                radius*CosD(kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",-kThetaDeg,0,0));
+  TGeoCombiTrans *m2n = new TGeoCombiTrans("m2n",radius*SinD(kThetaDeg),
+                                                radius*CosD(kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",-kThetaDeg,0,0));
+  m2p->RegisterYourself();
+  m2n->RegisterYourself();
+
+  TGeoCombiTrans *m3p = new TGeoCombiTrans("m3p",radius*SinD(-kThetaDeg),
+                                                radius*CosD(-kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",kThetaDeg,0,0));
+  TGeoCombiTrans *m3n = new TGeoCombiTrans("m3n",radius*SinD(-kThetaDeg),
+                                                radius*CosD(-kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",kThetaDeg,0,0));
+  m3p->RegisterYourself();
+  m3n->RegisterYourself();
+
+  TGeoCombiTrans *m4p = new TGeoCombiTrans("m4p",radius*SinD(2*kThetaDeg),
+                                                radius*CosD(2*kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",-2*kThetaDeg,0,0));
+  TGeoCombiTrans *m4n = new TGeoCombiTrans("m4n",radius*SinD(2*kThetaDeg),
+                                                radius*CosD(2*kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",-2*kThetaDeg,0,0));
+  m4p->RegisterYourself();
+  m4n->RegisterYourself();
+
+  TGeoCombiTrans *m5p = new TGeoCombiTrans("m5p",radius*SinD(-2*kThetaDeg),
+                                                radius*CosD(-2*kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",2*kThetaDeg,0,0));
+  TGeoCombiTrans *m5n = new TGeoCombiTrans("m5n",radius*SinD(-2*kThetaDeg),
+                                                radius*CosD(-2*kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",2*kThetaDeg,0,0));
+  m5p->RegisterYourself();
+  m5n->RegisterYourself();
+
+  TGeoBBox *supphole = new TGeoBBox(kCoolSuppHoleWid/2,
+        0.55*(uppershape->GetY(11)-lowershape->GetY(0)),
+                                   kCoolSuppHoleLen/2);
+  supphole->SetName("shTS");
+
+  zpos = kCoolSuppHoleZPos;
+
+  TGeoTranslation *s1p = new TGeoTranslation("s1p",0,radius, zpos);
+  TGeoTranslation *s1n = new TGeoTranslation("s1n",0,radius,-zpos);
+  s1p->RegisterYourself();
+  s1n->RegisterYourself();
+
+  TGeoCombiTrans *s2p = new TGeoCombiTrans("s2p",radius*SinD(kThetaDeg),
+                                                radius*CosD(kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",-kThetaDeg,0,0));
+  TGeoCombiTrans *s2n = new TGeoCombiTrans("s2n",radius*SinD(kThetaDeg),
+                                                radius*CosD(kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",-kThetaDeg,0,0));
+  s2p->RegisterYourself();
+  s2n->RegisterYourself();
+
+  TGeoCombiTrans *s3p = new TGeoCombiTrans("s3p",radius*SinD(-kThetaDeg),
+                                                radius*CosD(-kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",kThetaDeg,0,0));
+  TGeoCombiTrans *s3n = new TGeoCombiTrans("s3n",radius*SinD(-kThetaDeg),
+                                                radius*CosD(-kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",kThetaDeg,0,0));
+  s3p->RegisterYourself();
+  s3n->RegisterYourself();
+
+  TGeoCombiTrans *s4p = new TGeoCombiTrans("s4p",radius*SinD(2*kThetaDeg),
+                                                radius*CosD(2*kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",-2*kThetaDeg,0,0));
+  TGeoCombiTrans *s4n = new TGeoCombiTrans("s4n",radius*SinD(2*kThetaDeg),
+                                                radius*CosD(2*kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",-2*kThetaDeg,0,0));
+  s4p->RegisterYourself();
+  s4n->RegisterYourself();
+
+  TGeoCombiTrans *s5p = new TGeoCombiTrans("s5p",radius*SinD(-2*kThetaDeg),
+                                                radius*CosD(-2*kThetaDeg),
+                                          zpos,
+                                       new TGeoRotation("",2*kThetaDeg,0,0));
+  TGeoCombiTrans *s5n = new TGeoCombiTrans("s5n",radius*SinD(-2*kThetaDeg),
+                                                radius*CosD(-2*kThetaDeg),
+                                         -zpos,
+                                       new TGeoRotation("",2*kThetaDeg,0,0));
+  s5p->RegisterYourself();
+  s5n->RegisterYourself();
+
+  // Finally the actual shape
+  TGeoCompositeShape *centralshape = new TGeoCompositeShape("centralTS",
+    "upTS+lwTS+omTS-mhTS:m1p-mhTS:m1n-mhTS:m2p-mhTS:m2n-mhTS:m3p-mhTS:m3n-mhTS:m4p-mhTS:m4n-mhTS:m5p-mhTS:m5n-shTS:s1p-shTS:s1n-shTS:s2p-shTS:s2n-shTS:s3p-shTS:s3n-shTS:s4p-shTS:s4n-shTS:s5p-shTS:s5n");
+
+  // The end cap half shield: a Composite Shape of carbon fiber.
+  // We need Composite Shapes because we have elements partially
+  // entering the empty spaces, and this would create overlaps or
+  // extrusions.
+  // All Composite elements are XTru shapes
+
+  // First determine the external shape points
   CreateSPDThermalShape(kInnerAEndCap,kInnerBEndCap,kInnerRadiusEndCap,
                        kOuterAEndCap,kOuterBEndCap,kOuterRadiusEndCap,
                        kTheta,xshld,yshld);
 
-  endcapshape->DefinePolygon(24,xshld,yshld);
-  endcapshape->DefineSection(0,-kHalfLengthEndCap);
-  endcapshape->DefineSection(1, kHalfLengthEndCap);
-
   // Now rescale to get the air volume dimensions
     InsidePoint(xshld[23], yshld[23],
                xshld[ 0], yshld[ 0],
@@ -196,45 +360,285 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
                xshld[ 0], yshld[ 0], kThicknessEndCap,
                xair[23], yair[23]);
 
-  // Create the air shape
-  TGeoXtru *endcapairshape = new TGeoXtru(2);
+  // Then use them to determine the Omega shape points
+  CreateSPDOmegaShape(xair,yair,kThicknessOmega,xomega,yomega);
 
-  endcapairshape->DefinePolygon(24,xair,yair);
-  endcapairshape->DefineSection(0,-kHalfLengthEndCap);
-  endcapairshape->DefineSection(1, kHalfLengthEndCap);
+  // Finally create the single Xtru volumes
+  TGeoXtru *upendcapshape = new TGeoXtru(2);
+  upendcapshape->SetName("upEC");
 
-  // Create the Omega insert
-  TGeoXtru *endcapomegashape = new TGeoXtru(2);
+  for (Int_t j=0; j<6; j++) {
+    xXtru[j  ] = xair[11-j];
+    yXtru[j  ] = yair[11-j];
+    xXtru[j+6] = xshld[j+6];
+    yXtru[j+6] = yshld[j+6];
+  }
+  yXtru[5] = yXtru[6];  // Air is not at same Y as thermal shield
+  for (Int_t j=0; j<12; j++) {
+    xXtru[23-j] = -xXtru[j];
+    yXtru[23-j] =  yXtru[j];
+  }
 
-  CreateSPDOmegaShape(xair,yair,kThicknessOmega,xomega,yomega);
+  upendcapshape->DefinePolygon(24,xXtru,yXtru);
+  upendcapshape->DefineSection(0,-kHalfLengthEndCap);
+  upendcapshape->DefineSection(1, kHalfLengthEndCap);
 
-  endcapomegashape->DefinePolygon(48,xomega,yomega);
-  endcapomegashape->DefineSection(0,-kHalfLengthEndCap);
-  endcapomegashape->DefineSection(1, kHalfLengthEndCap);
+  TGeoXtru *lowendcapshape = new TGeoXtru(2);
+  lowendcapshape->SetName("lwEC");
 
-  // The cone half shield is more complex since there is no basic
-  // TGeo shape to describe it correctly. So it is made of a series
-  // of TGeoArb8 shapes filled with air, which all together make up the
-  // the cone AND its internal insert. Part of the following code is
-  // adapted from SPDThermalSheald method.
+  for (Int_t j=0; j<6; j++) {
+    xXtru[j  ] = xshld[j];
+    yXtru[j  ] = yshld[j];
+    xXtru[j+6] = xair[5-j];
+    yXtru[j+6] = yair[5-j];
+  }
+  yXtru[6] = yXtru[5];  // Air is not at same Y as thermal shield
+  for (Int_t j=0; j<12; j++) {
+    xXtru[23-j] = -xXtru[j];
+    yXtru[23-j] =  yXtru[j];
+  }
+
+  lowendcapshape->DefinePolygon(24,xXtru,yXtru);
+  lowendcapshape->DefineSection(0,-kHalfLengthEndCap);
+  lowendcapshape->DefineSection(1, kHalfLengthEndCap);
+
+  yomega[10] = yshld[6];   // Add also base thickness
+  yomega[11] = yomega[10];
+  yomega[36] = yshld[17];
+  yomega[37] = yomega[36];
+
+  TGeoXtru *omgendcapshape = new TGeoXtru(2);
+  omgendcapshape->SetName("omEC");
+
+  omgendcapshape->DefinePolygon(48,xomega,yomega);
+  omgendcapshape->DefineSection(0,-kHalfLengthEndCap);
+  omgendcapshape->DefineSection(1, kHalfLengthEndCap);
+
+  // Finally the actual shape
+  TGeoCompositeShape *endcapshape = new TGeoCompositeShape("endcapTS",
+                                                          "upEC+lwEC+omEC");
+
+  // The filler block: a Xtru
+  TGeoXtru *fillershape = new TGeoXtru(2);
+
+  xXtru[0] = omgendcapshape->GetX(1) + 0.0002; // Avoid thiny extrusion
+  yXtru[0] = omgendcapshape->GetY(1);
+  xXtru[1] = omgendcapshape->GetX(0) + 0.0002;
+  yXtru[1] = omgendcapshape->GetY(0);
+  xXtru[2] = omgendcapshape->GetX(47) - 0.0002;
+  yXtru[2] = omgendcapshape->GetY(47);
+  xXtru[3] = omgendcapshape->GetX(46);
+  yXtru[3] = omgendcapshape->GetY(46);
+
+  fillershape->DefinePolygon(4,xXtru,yXtru);
+  fillershape->DefineSection(0,-kFillerBlockLength/2);
+  fillershape->DefineSection(1, kFillerBlockLength/2);
+
+  // The hole in the filler: a Tube (made of air)
+  TGeoTube *fillerholeshape = new TGeoTube(0, kFillerBlockHoleR,
+                                          kFillerBlockLength/2);
 
-  // Filled portions
-  TGeoArb8 *sC1 = new TGeoArb8(kHalfLengthCone);
-  TGeoArb8 *sC2 = new TGeoArb8(kHalfLengthCone);
+  // The filler bar: a BBox
+  Double_t fside = omgendcapshape->GetY(14) - omgendcapshape->GetY(13);
+  TGeoBBox *fillbarshape = new TGeoBBox(fside/2, fside/2, kFillerBarLength/2);
 
+  // The hole in the bar filler: a smaller BBox (made of air)
+  fside -= 2*kFillerBarThick;
+  TGeoBBox *fillbarholeshape = new TGeoBBox(fside/2, fside/2,
+                                           kFillerBarLength/2);
+
+  // The cone half shield is more complex since there is no basic
+  // TGeo shape to describe it correctly. So it is a Composite Shape
+  // of a series of TGeoArb8 shapes, in which TGeoArb8 shapes filled
+  // with air are placed, which all together make up the cone AND
+  // its internal insert. Part of the following code is adapted from
+  // old SPDThermalSheald method.
+
+  // sCn : Filled portions, sChn : Air holes
+  TGeoArb8 *sC1  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC2  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC3  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC4  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC5  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC6  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC7  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC8  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC9  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC10 = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sC11 = new TGeoArb8(kHalfLengthCone);
+
+  sC1->SetName("sC1");
+  sC2->SetName("sC2");
+  sC3->SetName("sC3");
+  sC4->SetName("sC4");
+  sC5->SetName("sC5");
+  sC6->SetName("sC6");
+  sC7->SetName("sC7");
+  sC8->SetName("sC8");
+  sC9->SetName("sC9");
+  sC10->SetName("sC10");
+  sC11->SetName("sC11");
+
+  TGeoArb8 *sCh1  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh2  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh3  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh4  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh5  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh6  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh7  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh8  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh9  = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh10 = new TGeoArb8(kHalfLengthCone);
+  TGeoArb8 *sCh11 = new TGeoArb8(kHalfLengthCone);
+
+  sCh1->SetName("sCh1");
+  sCh2->SetName("sCh2");
+  sCh3->SetName("sCh3");
+  sCh4->SetName("sCh4");
+  sCh5->SetName("sCh5");
+  sCh6->SetName("sCh6");
+  sCh7->SetName("sCh7");
+  sCh8->SetName("sCh8");
+  sCh9->SetName("sCh9");
+  sCh10->SetName("sCh10");
+  sCh11->SetName("sCh11");
+
+  // Smaller end: determine the coordinates of the points of carbon fiber
   CreateSPDThermalShape(kInnerACentral,kInnerBCentral,kInnerRadiusCentral,
                        kOuterACentral,kOuterBCentral,kOuterRadiusCentral,
                        kTheta,xshld,yshld);
 
-  sC1->SetVertex(0,xshld[12],yshld[12]);
-  sC1->SetVertex(1,xshld[11],yshld[11]);
-  sC1->SetVertex(2,xshld[ 0],yshld[ 0]);
-  sC1->SetVertex(3,xshld[23],yshld[23]);
+  sC1->SetVertex(0, xshld[12], yshld[12]);
+  sC1->SetVertex(1, xshld[11], yshld[11]);
+  sC1->SetVertex(2, xshld[ 0], yshld[ 0]);
+  sC1->SetVertex(3, xshld[23], yshld[23]);
+
+  sC2->SetVertex(0, xshld[11], yshld[11]);
+  sC2->SetVertex(1, xshld[10], yshld[10]);
+  sC2->SetVertex(2, xshld[ 1], yshld[ 1]);
+  sC2->SetVertex(3, xshld[ 0], yshld[ 0]);
+
+  sC3->SetVertex(0, xshld[10], yshld[10]);
+  sC3->SetVertex(1, xshld[ 9], yshld[ 9]);
+  sC3->SetVertex(2, xshld[ 2], yshld[ 2]);
+  sC3->SetVertex(3, xshld[ 1], yshld[ 1]);
+
+  sC4->SetVertex(0, xshld[ 9], yshld[ 9]);
+  sC4->SetVertex(1, xshld[ 8], yshld[ 8]);
+  sC4->SetVertex(2, xshld[ 3], yshld[ 3]);
+  sC4->SetVertex(3, xshld[ 2], yshld[ 2]);
+
+  sC5->SetVertex(0, xshld[ 8], yshld[ 8]);
+  sC5->SetVertex(1, xshld[ 7], yshld[ 7]);
+  sC5->SetVertex(2, xshld[ 4], yshld[ 4]);
+  sC5->SetVertex(3, xshld[ 3], yshld[ 3]);
+
+  sC6->SetVertex(0, xshld[ 7], yshld[ 7]);
+  sC6->SetVertex(1, xshld[ 6], yshld[ 6]);
+  sC6->SetVertex(2, xshld[ 5], yshld[ 5]);
+  sC6->SetVertex(3, xshld[ 4], yshld[ 4]);
+
+  sC7->SetVertex(0,-xshld[10], yshld[10]);
+  sC7->SetVertex(1,-xshld[11], yshld[11]);
+  sC7->SetVertex(2,-xshld[ 0], yshld[ 0]);
+  sC7->SetVertex(3,-xshld[ 1], yshld[ 1]);
+
+  sC8->SetVertex(0,-xshld[ 9], yshld[ 9]);
+  sC8->SetVertex(1,-xshld[10], yshld[10]);
+  sC8->SetVertex(2,-xshld[ 1], yshld[ 1]);
+  sC8->SetVertex(3,-xshld[ 2], yshld[ 2]);
+
+  sC9->SetVertex(0,-xshld[ 8], yshld[ 8]);
+  sC9->SetVertex(1,-xshld[ 9], yshld[ 9]);
+  sC9->SetVertex(2,-xshld[ 2], yshld[ 2]);
+  sC9->SetVertex(3,-xshld[ 3], yshld[ 3]);
+
+  sC10->SetVertex(0,-xshld[ 7], yshld[ 7]);
+  sC10->SetVertex(1,-xshld[ 8], yshld[ 8]);
+  sC10->SetVertex(2,-xshld[ 3], yshld[ 3]);
+  sC10->SetVertex(3,-xshld[ 4], yshld[ 4]);
+
+  sC11->SetVertex(0,-xshld[ 6], yshld[ 6]);
+  sC11->SetVertex(1,-xshld[ 7], yshld[ 7]);
+  sC11->SetVertex(2,-xshld[ 4], yshld[ 4]);
+  sC11->SetVertex(3,-xshld[ 5], yshld[ 5]);
+
+  // Then rescale to get the air volume dimensions
+    InsidePoint(xshld[23], yshld[23],
+               xshld[ 0], yshld[ 0],
+               xshld[ 1], yshld[ 1], kThicknessCone,
+               xair[0], yair[0]);
+  for (Int_t i=1; i<23; i++) {
+    InsidePoint(xshld[i-1], yshld[i-1],
+               xshld[ i ], yshld[ i ],
+               xshld[i+1], yshld[i+1], kThicknessCone,
+               xair[i], yair[i]);
+  }
+    InsidePoint(xshld[22], yshld[22],
+               xshld[23], yshld[23],
+               xshld[ 0], yshld[ 0], kThicknessCone,
+               xair[23], yair[23]);
+
+  // Then use them to determine the Omega shape points
+  CreateSPDOmegaShape(xair,yair,kThicknessOmega,xomega,yomega);
 
-  sC2->SetVertex(0,xshld[11],yshld[11]);
-  sC2->SetVertex(1,xshld[10],yshld[10]);
-  sC2->SetVertex(2,xshld[ 1],yshld[ 1]);
-  sC2->SetVertex(3,xshld[ 0],yshld[ 0]);
+  // Finally fill the small end coordinates of the air shapes
+  sCh1->SetVertex(0, xomega[ 0], yomega[ 0]);
+  sCh1->SetVertex(1, xomega[ 1], yomega[ 1]);
+  sCh1->SetVertex(2,-xomega[ 1], yomega[ 1]);
+  sCh1->SetVertex(3,-xomega[ 0], yomega[ 0]);
+
+  sCh2->SetVertex(0, xomega[20], yomega[20]);
+  sCh2->SetVertex(1, xomega[21], yomega[21]);
+  sCh2->SetVertex(2, xomega[22], yomega[22]);
+  sCh2->SetVertex(3, xomega[23], yomega[23]);
+
+  sCh3->SetVertex(0, xomega[ 2], yomega[ 2]);
+  sCh3->SetVertex(1, xomega[ 3], yomega[ 3]);
+  sCh3->SetVertex(2, xomega[ 4], yomega[ 4]);
+  sCh3->SetVertex(3, xomega[ 5], yomega[ 5]);
+
+  sCh4->SetVertex(0, xomega[16], yomega[16]);
+  sCh4->SetVertex(1, xomega[17], yomega[17]);
+  sCh4->SetVertex(2, xomega[18], yomega[18]);
+  sCh4->SetVertex(3, xomega[19], yomega[19]);
+
+  sCh5->SetVertex(0, xomega[ 6], yomega[ 6]);
+  sCh5->SetVertex(1, xomega[ 7], yomega[ 7]);
+  sCh5->SetVertex(2, xomega[ 8], yomega[ 8]);
+  sCh5->SetVertex(3, xomega[ 9], yomega[ 9]);
+
+  sCh6->SetVertex(0, xomega[12], yomega[12]);
+  sCh6->SetVertex(1, xomega[13], yomega[13]);
+  sCh6->SetVertex(2, xomega[14], yomega[14]);
+  sCh6->SetVertex(3, xomega[15], yomega[15]);
+
+  sCh7->SetVertex(0,-xomega[21], yomega[21]);
+  sCh7->SetVertex(1,-xomega[20], yomega[20]);
+  sCh7->SetVertex(2,-xomega[23], yomega[23]);
+  sCh7->SetVertex(3,-xomega[22], yomega[22]);
+
+  sCh8->SetVertex(0,-xomega[ 3], yomega[ 3]);
+  sCh8->SetVertex(1,-xomega[ 2], yomega[ 2]);
+  sCh8->SetVertex(2,-xomega[ 5], yomega[ 5]);
+  sCh8->SetVertex(3,-xomega[ 4], yomega[ 4]);
+
+  sCh9->SetVertex(0,-xomega[17], yomega[17]);
+  sCh9->SetVertex(1,-xomega[16], yomega[16]);
+  sCh9->SetVertex(2,-xomega[19], yomega[19]);
+  sCh9->SetVertex(3,-xomega[18], yomega[18]);
+
+  sCh10->SetVertex(0,-xomega[ 7], yomega[ 7]);
+  sCh10->SetVertex(1,-xomega[ 6], yomega[ 6]);
+  sCh10->SetVertex(2,-xomega[ 9], yomega[ 9]);
+  sCh10->SetVertex(3,-xomega[ 8], yomega[ 8]);
+
+  sCh11->SetVertex(0,-xomega[13], yomega[13]);
+  sCh11->SetVertex(1,-xomega[12], yomega[12]);
+  sCh11->SetVertex(2,-xomega[15], yomega[15]);
+  sCh11->SetVertex(3,-xomega[14], yomega[14]);
+
+  // Bigger end: determine the coordinates of the points of carbon fiber
 
   // Drawings give only the radius, convert it to the apothegm
   Double_t kInnerRadiusCone = TMath::Sqrt(kInnerRadialCone*kInnerRadialCone
@@ -242,67 +646,143 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
   Double_t kOuterRadiusCone = TMath::Sqrt(kOuterRadialCone*kOuterRadialCone
                                          - 0.25*kOuterACone*kOuterACone);
 
-  Double_t xco[4], yco[4], xci[4], yci[4];
-
-  for (Int_t i=0; i<2; i++) {
-    Double_t th = i*kTheta*TMath::RadToDeg();
-    xco[2*i  ] = kOuterRadiusCone*SinD(th) - 0.5*kOuterACone*CosD(th);
-    yco[2*i  ] = kOuterRadiusCone*CosD(th) + 0.5*kOuterACone*SinD(th);
-    xci[2*i  ] = kInnerRadiusCone*SinD(th) - 0.5*kInnerACone*CosD(th);
-    yci[2*i  ] = kInnerRadiusCone*CosD(th) + 0.5*kInnerACone*SinD(th);
-    xco[2*i+1] = kOuterRadiusCone*SinD(th) + 0.5*kOuterACone*CosD(th);
-    yco[2*i+1] = kOuterRadiusCone*CosD(th) - 0.5*kOuterACone*SinD(th);
-    xci[2*i+1] = kInnerRadiusCone*SinD(th) + 0.5*kInnerACone*CosD(th);
-    yci[2*i+1] = kInnerRadiusCone*CosD(th) - 0.5*kInnerACone*SinD(th);
-  }
+  CreateSPDThermalShape(kInnerACone,kInnerBCone,kInnerRadiusCone,
+                       kOuterACone,kOuterBCone,kOuterRadiusCone,
+                       kTheta,xshld,yshld);
 
-  sC1->SetVertex(4,xco[0],yco[0]);
-  sC1->SetVertex(5,xco[1],yco[1]);
-  sC1->SetVertex(6,xci[1],yci[1]);
-  sC1->SetVertex(7,xci[0],yci[0]);
-
-  sC2->SetVertex(4,xco[1],yco[1]);
-  sC2->SetVertex(5,xco[2],yco[2]);
-  sC2->SetVertex(6,xci[2],yci[2]);
-  sC2->SetVertex(7,xci[1],yci[1]);
-
-  // Air holes
-  TGeoArb8 *sCh1 = new TGeoArb8(kHalfLengthCone);
-  TGeoArb8 *sCh2 = new TGeoArb8(kHalfLengthCone);
-
-  for(Int_t i=0; i<4; i++){
-    InsidePoint(sC1->GetVertices()[((i+3)%4)*2+0],
-               sC1->GetVertices()[((i+3)%4)*2+1],
-               sC1->GetVertices()[i*2+0],
-               sC1->GetVertices()[i*2+1],
-               sC1->GetVertices()[((i+1)%4)*2+0],
-               sC1->GetVertices()[((i+1)%4)*2+1],-kThicknessCone,x,y);
-    sCh1->SetVertex(i,x,y);
-
-    InsidePoint(sC1->GetVertices()[((i+3)%4 +4)*2+0],
-               sC1->GetVertices()[((i+3)%4 +4)*2+1],
-               sC1->GetVertices()[(i+4)*2+0],
-               sC1->GetVertices()[(i+4)*2+1],
-               sC1->GetVertices()[((i+1)%4 +4)*2+0],
-               sC1->GetVertices()[((i+1)%4 +4)*2+1],-kThicknessCone,x,y);
-    sCh1->SetVertex(i+4,x,y);
-
-    InsidePoint(sC2->GetVertices()[((i+3)%4)*2+0],
-               sC2->GetVertices()[((i+3)%4)*2+1],
-               sC2->GetVertices()[i*2+0],
-               sC2->GetVertices()[i*2+1],
-               sC2->GetVertices()[((i+1)%4)*2+0],
-               sC2->GetVertices()[((i+1)%4)*2+1],-kThicknessCone,x,y);
-    sCh2->SetVertex(i,x,y);
-
-    InsidePoint(sC2->GetVertices()[((i+3)%4 +4)*2+0],
-               sC2->GetVertices()[((i+3)%4 +4)*2+1],
-               sC2->GetVertices()[(i+4)*2+0],
-               sC2->GetVertices()[(i+4)*2+1],
-               sC2->GetVertices()[((i+1)%4 +4)*2+0],
-               sC2->GetVertices()[((i+1)%4 +4)*2+1],-kThicknessCone,x,y);
-    sCh2->SetVertex(i+4,x,y);
+  sC1->SetVertex(4, xshld[12], yshld[12]);
+  sC1->SetVertex(5, xshld[11], yshld[11]);
+  sC1->SetVertex(6, xshld[ 0], yshld[ 0]);
+  sC1->SetVertex(7, xshld[23], yshld[23]);
+
+  sC2->SetVertex(4, xshld[11], yshld[11]);
+  sC2->SetVertex(5, xshld[10], yshld[10]);
+  sC2->SetVertex(6, xshld[ 1], yshld[ 1]);
+  sC2->SetVertex(7, xshld[ 0], yshld[ 0]);
+
+  sC3->SetVertex(4, xshld[10], yshld[10]);
+  sC3->SetVertex(5, xshld[ 9], yshld[ 9]);
+  sC3->SetVertex(6, xshld[ 2], yshld[ 2]);
+  sC3->SetVertex(7, xshld[ 1], yshld[ 1]);
+
+  sC4->SetVertex(4, xshld[ 9], yshld[ 9]);
+  sC4->SetVertex(5, xshld[ 8], yshld[ 8]);
+  sC4->SetVertex(6, xshld[ 3], yshld[ 3]);
+  sC4->SetVertex(7, xshld[ 2], yshld[ 2]);
+
+  sC5->SetVertex(4, xshld[ 8], yshld[ 8]);
+  sC5->SetVertex(5, xshld[ 7], yshld[ 7]);
+  sC5->SetVertex(6, xshld[ 4], yshld[ 4]);
+  sC5->SetVertex(7, xshld[ 3], yshld[ 3]);
+
+  sC6->SetVertex(4, xshld[ 7], yshld[ 7]);
+  sC6->SetVertex(5, xshld[ 6], yshld[ 6]);
+  sC6->SetVertex(6, xshld[ 5], yshld[ 5]);
+  sC6->SetVertex(7, xshld[ 4], yshld[ 4]);
+
+  sC7->SetVertex(4,-xshld[10], yshld[10]);
+  sC7->SetVertex(5,-xshld[11], yshld[11]);
+  sC7->SetVertex(6,-xshld[ 0], yshld[ 0]);
+  sC7->SetVertex(7,-xshld[ 1], yshld[ 1]);
+
+  sC8->SetVertex(4,-xshld[ 9], yshld[ 9]);
+  sC8->SetVertex(5,-xshld[10], yshld[10]);
+  sC8->SetVertex(6,-xshld[ 1], yshld[ 1]);
+  sC8->SetVertex(7,-xshld[ 2], yshld[ 2]);
+
+  sC9->SetVertex(4,-xshld[ 8], yshld[ 8]);
+  sC9->SetVertex(5,-xshld[ 9], yshld[ 9]);
+  sC9->SetVertex(6,-xshld[ 2], yshld[ 2]);
+  sC9->SetVertex(7,-xshld[ 3], yshld[ 3]);
+
+  sC10->SetVertex(4,-xshld[ 7], yshld[ 7]);
+  sC10->SetVertex(5,-xshld[ 8], yshld[ 8]);
+  sC10->SetVertex(6,-xshld[ 3], yshld[ 3]);
+  sC10->SetVertex(7,-xshld[ 4], yshld[ 4]);
+
+  sC11->SetVertex(4,-xshld[ 6], yshld[ 6]);
+  sC11->SetVertex(5,-xshld[ 7], yshld[ 7]);
+  sC11->SetVertex(6,-xshld[ 4], yshld[ 4]);
+  sC11->SetVertex(7,-xshld[ 5], yshld[ 5]);
+
+  // Then rescale to get the air volume dimensions
+    InsidePoint(xshld[23], yshld[23],
+               xshld[ 0], yshld[ 0],
+               xshld[ 1], yshld[ 1], kThicknessCone,
+               xair[0], yair[0]);
+  for (Int_t i=1; i<23; i++) {
+    InsidePoint(xshld[i-1], yshld[i-1],
+               xshld[ i ], yshld[ i ],
+               xshld[i+1], yshld[i+1], kThicknessCone,
+               xair[i], yair[i]);
   }
+    InsidePoint(xshld[22], yshld[22],
+               xshld[23], yshld[23],
+               xshld[ 0], yshld[ 0], kThicknessCone,
+               xair[23], yair[23]);
+
+  // Then use them to determine the Omega shape points
+  CreateSPDOmegaShape(xair,yair,kThicknessOmega,xomega,yomega);
+
+  // Finally fill the big end coordinates of the air shapes
+  sCh1->SetVertex(4, xomega[ 0], yomega[ 0]);
+  sCh1->SetVertex(5, xomega[ 1], yomega[ 1]);
+  sCh1->SetVertex(6,-xomega[ 1], yomega[ 1]);
+  sCh1->SetVertex(7,-xomega[ 0], yomega[ 0]);
+
+  sCh2->SetVertex(4, xomega[20], yomega[20]);
+  sCh2->SetVertex(5, xomega[21], yomega[21]);
+  sCh2->SetVertex(6, xomega[22], yomega[22]);
+  sCh2->SetVertex(7, xomega[23], yomega[23]);
+
+  sCh3->SetVertex(4, xomega[ 2], yomega[ 2]);
+  sCh3->SetVertex(5, xomega[ 3], yomega[ 3]);
+  sCh3->SetVertex(6, xomega[ 4], yomega[ 4]);
+  sCh3->SetVertex(7, xomega[ 5], yomega[ 5]);
+
+  sCh4->SetVertex(4, xomega[16], yomega[16]);
+  sCh4->SetVertex(5, xomega[17], yomega[17]);
+  sCh4->SetVertex(6, xomega[18], yomega[18]);
+  sCh4->SetVertex(7, xomega[19], yomega[19]);
+
+  sCh5->SetVertex(4, xomega[ 6], yomega[ 6]);
+  sCh5->SetVertex(5, xomega[ 7], yomega[ 7]);
+  sCh5->SetVertex(6, xomega[ 8], yomega[ 8]);
+  sCh5->SetVertex(7, xomega[ 9], yomega[ 9]);
+
+  sCh6->SetVertex(4, xomega[12], yomega[12]);
+  sCh6->SetVertex(5, xomega[13], yomega[13]);
+  sCh6->SetVertex(6, xomega[14], yomega[14]);
+  sCh6->SetVertex(7, xomega[15], yomega[15]);
+
+  sCh7->SetVertex(4,-xomega[21], yomega[21]);
+  sCh7->SetVertex(5,-xomega[20], yomega[20]);
+  sCh7->SetVertex(6,-xomega[23], yomega[23]);
+  sCh7->SetVertex(7,-xomega[22], yomega[22]);
+
+  sCh8->SetVertex(4,-xomega[ 3], yomega[ 3]);
+  sCh8->SetVertex(5,-xomega[ 2], yomega[ 2]);
+  sCh8->SetVertex(6,-xomega[ 5], yomega[ 5]);
+  sCh8->SetVertex(7,-xomega[ 4], yomega[ 4]);
+
+  sCh9->SetVertex(4,-xomega[17], yomega[17]);
+  sCh9->SetVertex(5,-xomega[16], yomega[16]);
+  sCh9->SetVertex(6,-xomega[19], yomega[19]);
+  sCh9->SetVertex(7,-xomega[18], yomega[18]);
+
+  sCh10->SetVertex(4,-xomega[ 7], yomega[ 7]);
+  sCh10->SetVertex(5,-xomega[ 6], yomega[ 6]);
+  sCh10->SetVertex(6,-xomega[ 9], yomega[ 9]);
+  sCh10->SetVertex(7,-xomega[ 8], yomega[ 8]);
+
+  sCh11->SetVertex(4,-xomega[13], yomega[13]);
+  sCh11->SetVertex(5,-xomega[12], yomega[12]);
+  sCh11->SetVertex(6,-xomega[15], yomega[15]);
+  sCh11->SetVertex(7,-xomega[14], yomega[14]);
+
+  // Now the actual carbon fiber cone: a CompositeShape
+  TGeoCompositeShape *sCone = new TGeoCompositeShape("sCone",
+                           "sC1+sC2+sC3+sC4+sC5+sC6+sC7+sC8+sC9+sC10+sC11");
 
   // Finally the carbon fiber Ring with its Wings and their
   // stesalite inserts. They are Tube and TubeSeg shapes
@@ -337,77 +817,160 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
   centralshield->SetVisibility(kTRUE);
   centralshield->SetLineColor(7);
   centralshield->SetLineWidth(1);
-
-  TGeoVolume *centralairshield = new TGeoVolume("SPDcentralairshield",
-                                               centralairshape,medSPDair);
-  centralairshield->SetVisibility(kTRUE);
-  centralairshield->SetLineColor(5); // Yellow
-  centralairshield->SetLineWidth(1);
-  centralairshield->SetFillColor(centralairshield->GetLineColor());
-  centralairshield->SetFillStyle(4090); // 90% transparent
-
-  TGeoVolume *centralomega = new TGeoVolume("SPDcentralomega",
-                                            centralomegashape,medSPDcf);
-  centralomega->SetVisibility(kTRUE);
-  centralomega->SetLineColor(7);
-  centralomega->SetLineWidth(1);
-
-  centralairshield->AddNode(centralomega,1,0);
-  centralshield->AddNode(centralairshield,1,0);
+  centralshield->SetFillColor(centralshield->GetLineColor());
+  centralshield->SetFillStyle(4090); // 90% transparent
 
   TGeoVolume *endcapshield = new TGeoVolume("SPDendcapshield",
                                             endcapshape,medSPDcf);
   endcapshield->SetVisibility(kTRUE);
   endcapshield->SetLineColor(7);
   endcapshield->SetLineWidth(1);
-
-  TGeoVolume *endcapairshield = new TGeoVolume("SPDendcapairshield",
-                                               endcapairshape,medSPDair);
-  endcapairshield->SetVisibility(kTRUE);
-  endcapairshield->SetLineColor(5); // Yellow
-  endcapairshield->SetLineWidth(1);
-  endcapairshield->SetFillColor(endcapairshield->GetLineColor());
-  endcapairshield->SetFillStyle(4090); // 90% transparent
-
-  TGeoVolume *endcapomega = new TGeoVolume("SPDendcapomega",
-                                          endcapomegashape,medSPDcf);
-  endcapomega->SetVisibility(kTRUE);
-  endcapomega->SetLineColor(7);
-  endcapomega->SetLineWidth(1);
-
-  endcapairshield->AddNode(endcapomega,1,0);
-  endcapshield->AddNode(endcapairshield,1,0);
-
-  TGeoVolume *vC1 = new TGeoVolume("SPDconeshieldV1",sC1,medSPDcf);
-  vC1->SetVisibility(kTRUE);
-  vC1->SetLineColor(7);
-  vC1->SetLineWidth(1);
+  endcapshield->SetFillColor(endcapshield->GetLineColor());
+  endcapshield->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *fillerblock = new TGeoVolume("SPDfillerblock",
+                                          fillershape,medSPDcf);
+  fillerblock->SetVisibility(kTRUE);
+  fillerblock->SetLineColor(7);
+  fillerblock->SetLineWidth(1);
+  fillerblock->SetFillColor(fillerblock->GetLineColor());
+  fillerblock->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *fillerhole = new TGeoVolume("SPDfillerhole",
+                                         fillerholeshape,medSPDair);
+  fillerhole->SetVisibility(kTRUE);
+  fillerhole->SetLineColor(5); // Yellow
+  fillerhole->SetLineWidth(1);
+  fillerhole->SetFillColor(fillerhole->GetLineColor());
+  fillerhole->SetFillStyle(4090); // 90% transparent
+
+  ypos = (fillershape->GetY(0)+fillershape->GetY(1))/2;
+  fillerblock->AddNode(fillerhole, 1, new TGeoTranslation(0, ypos, 0));
+
+  zpos = omgendcapshape->GetZ(1) - fillershape->GetZ(1) - kFillerBlockZTrans;
+  endcapshield->AddNode(fillerblock, 1, new TGeoTranslation(0, 0, zpos));
+  endcapshield->AddNode(fillerblock, 2, new TGeoCombiTrans(0, 0, zpos,
+                                      new TGeoRotation("", kThetaDeg,0,0)));
+  endcapshield->AddNode(fillerblock, 3, new TGeoCombiTrans(0, 0, zpos,
+                                      new TGeoRotation("",-kThetaDeg,0,0)));
+  endcapshield->AddNode(fillerblock, 4, new TGeoCombiTrans(0, 0, zpos,
+                                      new TGeoRotation("", 2*kThetaDeg,0,0)));
+  endcapshield->AddNode(fillerblock, 5, new TGeoCombiTrans(0, 0, zpos,
+                                      new TGeoRotation("",-2*kThetaDeg,0,0)));
+
+  TGeoVolume *fillerbar = new TGeoVolume("SPDfillerbar",
+                                        fillbarshape,medSPDcf);
+  fillerbar->SetVisibility(kTRUE);
+  fillerbar->SetLineColor(7);
+  fillerbar->SetLineWidth(1);
+  fillerbar->SetFillColor(fillerbar->GetLineColor());
+  fillerbar->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *fillbarhole = new TGeoVolume("SPDfillerbarhole",
+                                            fillbarholeshape,medSPDair);
+  fillbarhole->SetVisibility(kTRUE);
+  fillbarhole->SetLineColor(5); // Yellow
+  fillbarhole->SetLineWidth(1);
+  fillbarhole->SetFillColor(fillbarhole->GetLineColor());
+  fillbarhole->SetFillStyle(4090); // 90% transparent
+
+  fillerbar->AddNode(fillbarhole, 1, 0);
+
+  TGeoVolume *vCone = new TGeoVolume("SPDconeshield",sCone,medSPDcf);
+  vCone->SetVisibility(kTRUE);
+  vCone->SetLineColor(7);
+  vCone->SetLineWidth(1);
+  vCone->SetFillColor(vCone->GetLineColor());
+  vCone->SetFillStyle(4090); // 90% transparent
 
   TGeoVolume *vCh1 = new TGeoVolume("SPDconeshieldH1",sCh1,medSPDair);
-
   vCh1->SetVisibility(kTRUE);
   vCh1->SetLineColor(5); // Yellow
   vCh1->SetLineWidth(1);
   vCh1->SetFillColor(vCh1->GetLineColor());
   vCh1->SetFillStyle(4090); // 90% transparent
 
-  vC1->AddNode(vCh1,1,0);
-
-  TGeoVolume *vC2 = new TGeoVolume("SPDconeshieldV2",sC2,medSPDcf);
-
-  vC2->SetVisibility(kTRUE);
-  vC2->SetLineColor(7);
-  vC2->SetLineWidth(1);
-
   TGeoVolume *vCh2 = new TGeoVolume("SPDconeshieldH2",sCh2,medSPDair);
-
   vCh2->SetVisibility(kTRUE);
   vCh2->SetLineColor(5); // Yellow
   vCh2->SetLineWidth(1);
   vCh2->SetFillColor(vCh2->GetLineColor());
   vCh2->SetFillStyle(4090); // 90% transparent
 
-  vC2->AddNode(vCh2,1,0);
+  TGeoVolume *vCh3 = new TGeoVolume("SPDconeshieldH3",sCh3,medSPDair);
+  vCh3->SetVisibility(kTRUE);
+  vCh3->SetLineColor(5); // Yellow
+  vCh3->SetLineWidth(1);
+  vCh3->SetFillColor(vCh3->GetLineColor());
+  vCh3->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh4 = new TGeoVolume("SPDconeshieldH4",sCh4,medSPDair);
+  vCh4->SetVisibility(kTRUE);
+  vCh4->SetLineColor(5); // Yellow
+  vCh4->SetLineWidth(1);
+  vCh4->SetFillColor(vCh4->GetLineColor());
+  vCh4->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh5 = new TGeoVolume("SPDconeshieldH5",sCh5,medSPDair);
+  vCh5->SetVisibility(kTRUE);
+  vCh5->SetLineColor(5); // Yellow
+  vCh5->SetLineWidth(1);
+  vCh5->SetFillColor(vCh5->GetLineColor());
+  vCh5->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh6 = new TGeoVolume("SPDconeshieldH6",sCh6,medSPDair);
+  vCh6->SetVisibility(kTRUE);
+  vCh6->SetLineColor(5); // Yellow
+  vCh6->SetLineWidth(1);
+  vCh6->SetFillColor(vCh6->GetLineColor());
+  vCh6->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh7 = new TGeoVolume("SPDconeshieldH7",sCh7,medSPDair);
+  vCh7->SetVisibility(kTRUE);
+  vCh7->SetLineColor(5); // Yellow
+  vCh7->SetLineWidth(1);
+  vCh7->SetFillColor(vCh7->GetLineColor());
+  vCh7->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh8 = new TGeoVolume("SPDconeshieldH8",sCh8,medSPDair);
+  vCh8->SetVisibility(kTRUE);
+  vCh8->SetLineColor(5); // Yellow
+  vCh8->SetLineWidth(1);
+  vCh8->SetFillColor(vCh8->GetLineColor());
+  vCh8->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh9 = new TGeoVolume("SPDconeshieldH9",sCh9,medSPDair);
+  vCh9->SetVisibility(kTRUE);
+  vCh9->SetLineColor(5); // Yellow
+  vCh9->SetLineWidth(1);
+  vCh9->SetFillColor(vCh9->GetLineColor());
+  vCh9->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh10 = new TGeoVolume("SPDconeshieldH10",sCh10,medSPDair);
+  vCh10->SetVisibility(kTRUE);
+  vCh10->SetLineColor(5); // Yellow
+  vCh10->SetLineWidth(1);
+  vCh10->SetFillColor(vCh10->GetLineColor());
+  vCh10->SetFillStyle(4090); // 90% transparent
+
+  TGeoVolume *vCh11 = new TGeoVolume("SPDconeshieldH11",sCh11,medSPDair);
+  vCh11->SetVisibility(kTRUE);
+  vCh11->SetLineColor(5); // Yellow
+  vCh11->SetLineWidth(1);
+  vCh11->SetFillColor(vCh11->GetLineColor());
+  vCh11->SetFillStyle(4090); // 90% transparent
+
+  vCone->AddNode(vCh1 ,1,0);
+  vCone->AddNode(vCh2 ,1,0);
+  vCone->AddNode(vCh3 ,1,0);
+  vCone->AddNode(vCh4 ,1,0);
+  vCone->AddNode(vCh5 ,1,0);
+  vCone->AddNode(vCh6 ,1,0);
+  vCone->AddNode(vCh7 ,1,0);
+  vCone->AddNode(vCh8 ,1,0);
+  vCone->AddNode(vCh9 ,1,0);
+  vCone->AddNode(vCh10,1,0);
+  vCone->AddNode(vCh11,1,0);
 
   TGeoVolume *ring = new TGeoVolume("SPDshieldring",ringshape,medSPDcf);
   ring->SetVisibility(kTRUE);
@@ -429,7 +992,7 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
   wing->SetLineColor(7);
   wing->SetLineWidth(1);
 
-  TGeoVolume *winginsert = new TGeoVolume("SPDshieldringinsert",
+  TGeoVolume *winginsert = new TGeoVolume("SPDshieldwinginsert",
                                          winginsertshape,medSPDste);
   winginsert->SetVisibility(kTRUE);
   winginsert->SetLineColor(3); // Green
@@ -449,29 +1012,36 @@ void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,const TGeoManager *mgr)
   zpos = kHalfLengthCentral+kHalfLengthEndCap;
   vM->AddNode(endcapshield,1,
              new TGeoTranslation(0,0, zpos-kLittleZTrans));
-  vM->AddNode(endcapshield,2,
-             new TGeoTranslation(0,0,-zpos-kLittleZTrans));
+  vM->AddNode(endcapshield,2,new TGeoCombiTrans(
+              0, 0,-zpos-kLittleZTrans, new TGeoRotation("",  0,180,0) ) );
   vM->AddNode(endcapshield,3,new TGeoCombiTrans(
-              0, 0, zpos-kLittleZTrans, new TGeoRotation("",180,0,0) ) );
+              0, 0, zpos-kLittleZTrans, new TGeoRotation("",180,  0,0) ) );
   vM->AddNode(endcapshield,4,new TGeoCombiTrans(
-              0, 0,-zpos-kLittleZTrans, new TGeoRotation("",180,0,0) ) );
+              0, 0,-zpos-kLittleZTrans, new TGeoRotation("",180,180,0) ) );
+
+  xpos = omgendcapshape->GetX(13) + fillbarshape->GetDX();
+  ypos = omgendcapshape->GetY(13) + fillbarshape->GetDY();
+  zpos -= fillbarshape->GetDZ();
+  vM->AddNode(fillerbar, 1, new TGeoTranslation( xpos, ypos, zpos));
+  vM->AddNode(fillerbar, 2, new TGeoTranslation(-xpos, ypos, zpos));
+  vM->AddNode(fillerbar, 3, new TGeoTranslation( xpos,-ypos, zpos));
+  vM->AddNode(fillerbar, 4, new TGeoTranslation(-xpos,-ypos, zpos));
+  vM->AddNode(fillerbar, 5, new TGeoTranslation( xpos, ypos,-zpos));
+  vM->AddNode(fillerbar, 6, new TGeoTranslation(-xpos, ypos,-zpos));
+  vM->AddNode(fillerbar, 7, new TGeoTranslation( xpos,-ypos,-zpos));
+  vM->AddNode(fillerbar, 8, new TGeoTranslation(-xpos,-ypos,-zpos));
 
   zpos = kHalfLengthCentral+2*kHalfLengthEndCap+kHalfLengthCone;
-  for (Int_t i=0; i<10; i++) {
-    Double_t thetaC12 = kTheta*TMath::RadToDeg();
-    vM->AddNode(vC1,2*i+1, new TGeoCombiTrans(
-               0, 0,  zpos-kLittleZTrans,
-              new TGeoRotation("",0,  0,i*thetaC12)   ) );
-    vM->AddNode(vC1,2*i+2, new TGeoCombiTrans(
-               0, 0, -zpos-kLittleZTrans,
-              new TGeoRotation("",0,180,i*thetaC12)   ) );
-    vM->AddNode(vC2,2*i+1, new TGeoCombiTrans(
-               0, 0,  zpos-kLittleZTrans,
-              new TGeoRotation("",0,  0,i*thetaC12)   ) );
-    vM->AddNode(vC2,2*i+2, new TGeoCombiTrans(
-               0, 0, -zpos-kLittleZTrans,
-              new TGeoRotation("",0,180,i*thetaC12)   ) );
-  }
+  vM->AddNode(vCone ,1, new TGeoTranslation(0, 0,  zpos-kLittleZTrans));
+
+  vM->AddNode(vCone ,2, new TGeoCombiTrans(0, 0,  zpos-kLittleZTrans,
+                               new TGeoRotation("", 0, 0, 180)   ));
+
+  vM->AddNode(vCone ,3, new TGeoCombiTrans(0, 0, -zpos-kLittleZTrans,
+                               new TGeoRotation("", 0, 180, 0)   ));
+
+  vM->AddNode(vCone ,4, new TGeoCombiTrans(0, 0, -zpos-kLittleZTrans,
+                               new TGeoRotation("", 0, 180, 180)   ));
 
   zpos = kHalfLengthCentral+2*kHalfLengthEndCap+2*kHalfLengthCone
        + kHalfLengthRing;
@@ -4305,6 +4875,7 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
 // Updated:      10 Jun 2010  Mario Sitta  Freon inside cooling pipes
 // Updated:      08 Sep 2010  Mario Sitta
 // Updated:      14 Sep 2010  Mario Sitta  Cables prolonged till cone
+// Updated:      20 Dec 2011  Mario Sitta  Composite vol to avoid new overlap
 //
 // Technical data are taken from AutoCAD drawings and other (oral)
 // information given by D.Elia
@@ -4338,6 +4909,8 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   const Double_t kCoaxCableSectCu     =    6.024 *fgkmm;// Computed
   const Double_t kCoaxCableHighMeg    =    5.695 *fgkmm;// Computed
 
+  const Double_t kCablesYtrans        =    2.500 *fgkmm;// Avoid ovlps
+
   // Overall position and rotation of the C-Side Cable Trays
   const Double_t kTraySideCRPos       =   45.300 *fgkcm;
   const Double_t kTraySideCZPos       = -102.400 *fgkcm;
@@ -4358,6 +4931,7 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
 
   // The Cable Tray lower face: a Xtru
   TGeoXtru *sideCHorFace = new TGeoXtru(2);
+  sideCHorFace->SetName("ITSsuppSPDTraySideCHor");
 
   xprof[0] = 0.;
   yprof[0] = 0.;
@@ -4454,6 +5028,7 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
 
   // The internal wall: a Xtru
   TGeoXtru *intWall = new TGeoXtru(2);
+  intWall->SetName("ITSsuppSPDTraySideCWall");
 
   xprof[0] = sideCHorFace->GetX(5);
   yprof[0] = sideCHorFace->GetY(5);
@@ -4519,11 +5094,11 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   xprof[0] = -kTrayCCablesZLenOut;
   yprof[0] = xprof[0]/TanD(kTrayCCablesOutRot);
   xprof[1] = sideCMidFace->GetX(5);
-  yprof[1] = sideCMidFace->GetY(5);
+  yprof[1] = sideCMidFace->GetY(5) + kCablesYtrans;
   xprof[2] = sideCMidFace->GetX(4);
-  yprof[2] = sideCMidFace->GetY(4);
+  yprof[2] = sideCMidFace->GetY(4) + kCablesYtrans;
   xprof[3] = sideCMidFace->GetX(3);
-  yprof[3] = sideCMidFace->GetY(3);
+  yprof[3] = sideCMidFace->GetY(3) + kCablesYtrans;
   xprof[4] = xprof[3] - kOpticalFibersSect*SinD(kTrayCFoldAngle);
   yprof[4] = yprof[3] + kOpticalFibersSect*CosD(kTrayCFoldAngle);
   InsidePoint(xprof[1], yprof[1], xprof[2], yprof[2], xprof[3], yprof[3],
@@ -4543,11 +5118,11 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   xprof[0] = -kTrayCCablesZLenOut;
   yprof[0] = xprof[0]/TanD(kTrayCCablesOutRot);
   xprof[1] = sideCMidFace->GetX(5);
-  yprof[1] = sideCMidFace->GetY(5);
+  yprof[1] = sideCMidFace->GetY(5) + kCablesYtrans;
   xprof[2] = sideCMidFace->GetX(4);
-  yprof[2] = sideCMidFace->GetY(4);
+  yprof[2] = sideCMidFace->GetY(4) + kCablesYtrans;
   xprof[3] = sideCMidFace->GetX(3);
-  yprof[3] = sideCMidFace->GetY(3);
+  yprof[3] = sideCMidFace->GetY(3) + kCablesYtrans;
   xprof[4] = xprof[3] - kLowVoltCableSectCu*SinD(kTrayCFoldAngle);
   yprof[4] = yprof[3] + kLowVoltCableSectCu*CosD(kTrayCFoldAngle);
   InsidePoint(xprof[1], yprof[1], xprof[2], yprof[2], xprof[3], yprof[3],
@@ -4590,11 +5165,11 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   xprof[0] = -kTrayCCablesZLenOut;
   yprof[0] = xprof[0]/TanD(kTrayCCablesOutRot);
   xprof[1] = sideCMidFace->GetX(5);
-  yprof[1] = sideCMidFace->GetY(5);
+  yprof[1] = sideCMidFace->GetY(5) + kCablesYtrans;
   xprof[2] = sideCMidFace->GetX(4);
-  yprof[2] = sideCMidFace->GetY(4);
+  yprof[2] = sideCMidFace->GetY(4) + kCablesYtrans;
   xprof[3] = sideCMidFace->GetX(3);
-  yprof[3] = sideCMidFace->GetY(3);
+  yprof[3] = sideCMidFace->GetY(3) + kCablesYtrans;
   xprof[4] = xprof[3] - kHiVoltCableSectCu*SinD(kTrayCFoldAngle);
   yprof[4] = yprof[3] + kHiVoltCableSectCu*CosD(kTrayCFoldAngle);
   InsidePoint(xprof[1], yprof[1], xprof[2], yprof[2], xprof[3], yprof[3],
@@ -4637,11 +5212,11 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   xprof[0] = -kTrayCCablesZLenOut;
   yprof[0] = xprof[0]/TanD(kTrayCCablesOutRot);
   xprof[1] = sideCMidFace->GetX(5);
-  yprof[1] = sideCMidFace->GetY(5);
+  yprof[1] = sideCMidFace->GetY(5) + kCablesYtrans;
   xprof[2] = sideCMidFace->GetX(4);
-  yprof[2] = sideCMidFace->GetY(4);
+  yprof[2] = sideCMidFace->GetY(4) + kCablesYtrans;
   xprof[3] = sideCMidFace->GetX(3);
-  yprof[3] = sideCMidFace->GetY(3);
+  yprof[3] = sideCMidFace->GetY(3) + kCablesYtrans;
   xprof[4] = xprof[3] - kCoaxCableSectCu*SinD(kTrayCFoldAngle);
   yprof[4] = yprof[3] + kCoaxCableSectCu*CosD(kTrayCFoldAngle);
   InsidePoint(xprof[1], yprof[1], xprof[2], yprof[2], xprof[3], yprof[3],
@@ -4678,6 +5253,11 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   coaxCablesMeg->DefineSection(0, 0);
   coaxCablesMeg->DefineSection(1, kCoaxCableSectCu);
 
+  // To avoid a newly discovered overlap,
+  // transform the two overlapping volumes into a Composite Shape
+  TGeoCompositeShape *trayIntern =
+    new TGeoCompositeShape("ITSSPDInternalTrayC",
+                          "ITSsuppSPDTraySideCHor+ITSsuppSPDTraySideCWall");
 
   // We have all shapes: now create the real volumes
   TGeoMedium *medAl   = mgr->GetMedium("ITS_ALUMINUM$");
@@ -4688,14 +5268,14 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   TGeoMedium *medPUR  = mgr->GetMedium("ITS_POLYURETHANE$");
   TGeoMedium *medMeg  = mgr->GetMedium("ITS_MEGOLON$");
 
-  TGeoVolume *traySideCHorFace  = new TGeoVolume("ITSsuppSPDTraySideCHor",
-                                                sideCHorFace, medAl);
+  TGeoVolume *traySideCIntern  = new TGeoVolume("ITSsuppSPDTraySideCInternal",
+                                               trayIntern, medAl);
 
-  traySideCHorFace->SetVisibility(kTRUE);
-  traySideCHorFace->SetLineColor(6); // Purple
-  traySideCHorFace->SetLineWidth(1);
-  traySideCHorFace->SetFillColor(traySideCHorFace->GetLineColor());
-  traySideCHorFace->SetFillStyle(4000); // 0% transparent
+  traySideCIntern->SetVisibility(kTRUE);
+  traySideCIntern->SetLineColor(6); // Purple
+  traySideCIntern->SetLineWidth(1);
+  traySideCIntern->SetFillColor(traySideCIntern->GetLineColor());
+  traySideCIntern->SetFillStyle(4000); // 0% transparent
 
   TGeoVolume *traySideCMidFace  = new TGeoVolume("ITSsuppSPDTraySideCMid",
                                                 sideCMidFace, medAl);
@@ -4733,15 +5313,6 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
   traySideCLongCover->SetFillColor(traySideCLongCover->GetLineColor());
   traySideCLongCover->SetFillStyle(4000); // 0% transparent
 
-  TGeoVolume *traySideCIntWall  = new TGeoVolume("ITSsuppSPDTraySideCWall",
-                                                intWall, medAl);
-
-  traySideCIntWall->SetVisibility(kTRUE);
-  traySideCIntWall->SetLineColor(6); // Purple
-  traySideCIntWall->SetLineWidth(1);
-  traySideCIntWall->SetFillColor(traySideCIntWall->GetLineColor());
-  traySideCIntWall->SetFillStyle(4000); // 0% transparent
-
   TGeoVolume *traySideCHorTube = new TGeoVolume("ITSsuppSPDTraySideCHorTube",
                                                horTube, medIn);
 
@@ -4861,7 +5432,7 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
 
 
   // Now build up the trays
-  cableTrayC->AddNode(traySideCHorFace,1,0);
+  cableTrayC->AddNode(traySideCIntern,1,0);
 
   cableTrayC->AddNode(traySideCMidFace,1,0);
 
@@ -4879,8 +5450,6 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
 
   cableTrayC->AddNode(traySideCLongCover,1,0);
 
-  cableTrayC->AddNode(traySideCIntWall,1,0);
-
   traySideCHorTube->AddNode(traySideCHorFreon, 1, 0);
   traySideCIncTube->AddNode(traySideCIncFreon, 1, 0);
   traySideCOutTube->AddNode(traySideCOutFreon, 1, 0);
@@ -4951,7 +5520,7 @@ void AliITSv11GeometrySupport::SPDCableTraysSideC(TGeoVolume *moth,
 
 //______________________________________________________________________
 void AliITSv11GeometrySupport::SDDCableTraysSideA(TGeoVolume *moth,
-                                                 TGeoManager *mgr){
+                                            const TGeoManager *mgr){
 //
 // Creates the SDD cable trays which are outside the ITS support cones
 // but still inside the TPC on Side A
@@ -5892,7 +6461,7 @@ void AliITSv11GeometrySupport::SDDCableTraysSideC(TGeoVolume *moth,
   const Double_t kSideCInputCablesPOLYAX =    0.1098;
 
   const Double_t kSideCOutputCablesX0    =   27.40    *fgkcm;
-  const Double_t kSideCOutputCablesWide  =    8.30    *fgkcm;
+  const Double_t kSideCOutputCablesWide  =    8.50    *fgkcm;
   const Double_t kSideCOutputCablesHigh  =    1.18    *fgkcm;
   const Double_t kSideCOutputCablesCu    =    0.6775;
   const Double_t kSideCOutputCablesPlast =    0.1613;
@@ -7129,6 +7698,7 @@ void AliITSv11GeometrySupport::SSDCableTraysSideC(TGeoVolume *moth,
   const Double_t kCablePlasticHeight     =   11.50 *fgkmm;// 1150 mm^2
   const Double_t kCoolingWaterHeight     =    2.65 *fgkmm;//  265 mm^2
   const Double_t kPoliUrethaneHeight     =    4.62 *fgkmm;//  462 mm^2
+  const Double_t kCablesYtrans           =    2.50 *fgkmm;// Avoid ovlps
 
   // Overall position and rotation of the C-Side Cable Trays
   const Double_t kTraySideCRPos          =   45.30    *fgkcm;
@@ -7153,11 +7723,11 @@ void AliITSv11GeometrySupport::SSDCableTraysSideC(TGeoVolume *moth,
   // Copper lies on the lower plate: get position of its points
   TGeoXtru *lowerplate = (TGeoXtru*)(mgr->GetVolume("ITSsuppTraySideCLower")->GetShape());
   xprof[0] = lowerplate->GetX(5);
-  yprof[0] = lowerplate->GetY(5);
+  yprof[0] = lowerplate->GetY(5) + kCablesYtrans;
   xprof[1] = lowerplate->GetX(4);
-  yprof[1] = lowerplate->GetY(4);
+  yprof[1] = lowerplate->GetY(4) + kCablesYtrans;
   xprof[2] = lowerplate->GetX(3);
-  yprof[2] = lowerplate->GetY(3);
+  yprof[2] = lowerplate->GetY(3) + kCablesYtrans;
   xprof[3] = xprof[2] - kCopperHeight*SinD(kSideCFoldAngle);
   yprof[3] = yprof[2] + kCopperHeight*CosD(kSideCFoldAngle);
   InsidePoint(xprof[0], yprof[0], xprof[1], yprof[1], xprof[2], yprof[2],