]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSv11.cxx
SDD digits modified. Both compressed and decompressed ADC values are stored - Tempora...
[u/mrichter/AliRoot.git] / ITS / AliITSv11.cxx
index d03f7f51b9796bf959a2f6ec22b39818d0a3710c..88d73b1238648f6c36ff3ab9358ddbb4c3b23cad 100644 (file)
@@ -46,6 +46,7 @@
 #include <TGeoManager.h>
 #include <TGeoVolume.h>
 #include <TGeoPcon.h>
+#include <TGeoCone.h>
 #include <TGeoTube.h> // contaings TGeoTubeSeg
 #include <TGeoArb8.h>
 #include <TGeoCompositeShape.h>
@@ -87,23 +88,42 @@ const Double_t kRadian = TMath::DegToRad(); // conver to Radians
 
 #define SQ(A) ((A)*(A))
 
-#define printArb8(A)  \
/*  cout << A->GetName() << ":"; \
+#define printArb8(A)  if(GetDebug()){\
+   cout << A->GetName() << ":"; \
   for(Int_t iii=0;iii<8;iii+=2){ cout <<"("<<A->GetVertices()[iii]<<","     \
                           <<A->GetVertices()[iii+1]<<","<<-A->GetDz()<<")";}\
   for(Int_t iii=8;iii<16;iii+=2){ cout <<"("<<A->GetVertices()[iii]<<","     \
                           <<A->GetVertices()[iii+1]<<","<<A->GetDz()<<")";}\
-   cout << endl;
-   */
-#define printTube(A) \
- /*  cout << A->GetName() <<": Rmin="<<A->GetRmin()\
-                          <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;
-     */
-#define printTubeSeg(A)  \
- /* cout << A->GetName() <<": Phi1="<<A->GetPhi1()<< \
+   cout << endl; }
+
+#define printPcon(A)  if(GetDebug()){\
+     cout << A->GetName() << ": N=" << A->GetNz() << " Phi1=" << A->GetPhi1() \
+          << ", Dphi=" << A->GetDphi() << endl;                              \
+     cout << "i\t   Z   \t  Rmin \t  Rmax" << endl;                          \
+     for(Int_t iii=0;iii<A->GetNz();iii++){                                 \
+         cout << iii << "\t" << A->GetZ(iii) << "\t" << A->GetRmin(iii)     \
+              << "\t" << A->GetRmax(iii) << endl;                           \
+     }} // end for iii
+
+#define printTube(A)  if(GetDebug()){\
+   cout << A->GetName() <<": Rmin="<<A->GetRmin()\
+                          <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;}
+
+#define printTubeSeg(A)   if(GetDebug()){\
+    cout << A->GetName() <<": Phi1="<<A->GetPhi1()<< \
                            " Phi2="<<A->GetPhi2()<<" Rmin="<<A->GetRmin()\
-                          <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;
- */
+                          <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;}
+
+#define printConeSeg(A)   if(GetDebug()){\
+    cout << A->GetName() <<": Phi1="<<A->GetPhi1()<< \
+                         " Phi2="<<A->GetPhi2()<<" Rmin1="<<A->GetRmin1()\
+                       <<" Rmax1=" <<A->GetRmax1()<<" Rmin2="<<A->GetRmin2()\
+                       <<" Rmax2=" <<A->GetRmax2()<<" Dz="<<A->GetDz()<<endl;}
+
+#define printBBox(A)   if(GetDebug()){\
+    cout << A->GetName() <<": Dx="<<A->GetDX()<< \
+                           " Dy="<<A->GetDY()<<" Dz="<<A->GetDZ() <<endl;}
+
 ClassImp(AliITSv11)
 
 /*
@@ -219,16 +239,17 @@ void AliITSv11::CreateGeometry(){
     TGeoPcon *itsv = new TGeoPcon("ITS Top Volume, Daughter of ALIC",
                                   0.0,360.0,2);
     // DefineSection(section number, Z, Rmin, Rmax).
-    itsv->DefineSection(0,-100.0*kcm,0.01*kcm,50.0*kcm);
-    itsv->DefineSection(1,+100.0*kcm,0.01*kcm,50.0*kcm);
+    itsv->DefineSection(0,-300.0*kcm,0.01*kcm,50.0*kcm);
+    itsv->DefineSection(1,+300.0*kcm,0.01*kcm,50.0*kcm);
     TGeoVolume *ITSV = new TGeoVolume("ITSV",itsv,0);
     //mgr->AddVolume(ITSV);
     ITSV->SetVisibility(kFALSE);
     ALIC->AddNode(ITSV,1,0);
     //
     SPDCone(ITSV);
-         //SDDCone(ITSV);
-         //SSDCone(ITSV);
+    SDDCone(ITSV);
+    SSDCone(ITSV);
+    ServicesCableSupport(ITSV);
 }
 //______________________________________________________________________
 Double_t AliITSv11::RmaxFrom2Points(TGeoPcon *p,Int_t i1,Int_t i2,Double_t z){
@@ -519,10 +540,12 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     xco[6] = xco[5];
     yco[6] = 0.0;
     xci[6] = xci[5];
-    yci[6] = 0.0;/*
+    yci[6] = 0.0;
+    if(GetDebug()){
     cout.precision(4);
     cout.width(7);
-    cout <<"i     \t  xo  yo    \t  xi yi     \t  xbo ybo   \t   xbi ybi  \t   xco yco   \t   xci yxi"<<endl;
+    cout <<"i     \t  xo  yo    \t  xi yi     \t  xbo ybo   \t   xbi ybi  "
+        "\t   xco yco   \t   xci yxi"<<endl;
     for(i=0;i<7;i++){
         cout << i <<"\t"<<xo[i]<<","<<yo[i];
         cout      <<"\t"<<xi[i]<<","<<yi[i];
@@ -530,7 +553,8 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
         cout      <<"\t"<<xbi[i]<<","<<ybi[i];
         cout      <<"\t"<<xco[i]<<","<<yco[i];
         cout      <<"\t"<<xci[i]<<","<<yci[i];
-        cout<<endl;} */
+        cout<<endl;}
+    } // end if GetDebug()
     //+++++++++++++++++++++++++
     A1->SetVertex(0,xo[0],yo[0]);
     A1->SetVertex(1,xo[1],yo[1]);
@@ -577,7 +601,7 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     C3->SetVertex(2,xci[6],yci[6]);
     C3->SetVertex(3,xci[5],yci[5]);
     // Defining the hole, filled with air
-    Double_t p1,c1,x,y;
+    Double_t p1,c1,x,y,x7[3],y7[3];
     p1 = (xo[0]-xi[0])/(yo[0]-yi[0]);
     c1 = xo[0]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xo[0]-xi[0])+
                                                 SQ(yo[0]-yi[0]))/(xo[0]-xi[0]);
@@ -585,12 +609,13 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     x = p1*(y-yo[0])+c1;
     Ah1->SetVertex(0,x,y);
     Bh1->SetVertex(0,x,y);
-    Ch1->SetVertex(0,x,y);
+    Ch1->SetVertex(4,x,y);
     y = TSCRinA+TSCarbonFiberThA;
     x = p1*(y-yo[0])+c1;
     Ah1->SetVertex(3,x,y);
     Bh1->SetVertex(3,x,y);
-    Ch1->SetVertex(3,x,y);
+    x7[0] = x; y7[0] = y; // vortexing done after last point
+    //Ch1->SetVertex(7,x,y);
     p1 = (xo[1]-xi[1])/(yo[1]-yi[1]);
     c1 = xo[1]-0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xo[1]-xi[1])+
                                                 SQ(yo[1]-yi[1]))/(xo[1]-xi[1]);
@@ -598,12 +623,12 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     x = p1*(y-yo[1])+c1;
     Ah1->SetVertex(1,x,y);
     Bh1->SetVertex(1,x,y);
-    Ch1->SetVertex(1,x,y);
+    Ch1->SetVertex(5,x,y);
     y = TSCRinA+TSCarbonFiberThA;
     x = p1*(y-yo[1])+c1;
     Ah1->SetVertex(2,x,y);
     Bh1->SetVertex(2,x,y);
-    Ch1->SetVertex(2,x,y);
+    Ch1->SetVertex(6,x,y);
     //
     // The easist way to get the points for the hole in volume A2 is to
     // rotate it to the Y axis where the y coordinates are easier to know
@@ -622,14 +647,15 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
     Ah2->SetVertex(0,xp,yp);
     Bh2->SetVertex(0,xp,yp);
-    Ch2->SetVertex(0,xp,yp);
+    Ch2->SetVertex(4,xp,yp);
     y = yb+2.0*TSCarbonFiberThA;
     x = p1*(y-ya)+c1;
     xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
     Ah2->SetVertex(3,xp,yp);
     Bh2->SetVertex(3,xp,yp);
-    Ch2->SetVertex(3,xp,yp);
+    x7[1] = x; y7[1] = y; // vortexing done after last point
+    //Ch2->SetVertex(7,xp,yp);
     xa = TMath::Cos(th)*xo[2]-TMath::Sin(th)*yo[2];
     ya = TMath::Sin(th)*xo[2]+TMath::Cos(th)*yo[2];
     xb = TMath::Cos(th)*xi[2]-TMath::Sin(th)*yi[2];
@@ -642,14 +668,14 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
     Ah2->SetVertex(1,xp,yp);
     Bh2->SetVertex(1,xp,yp);
-    Ch2->SetVertex(1,xp,yp);
+    Ch2->SetVertex(5,xp,yp);
     y = yb+2.0*TSCarbonFiberThA;
     x = p1*(y-ya)+c1;
     xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
     Ah2->SetVertex(2,xp,yp);
     Bh2->SetVertex(2,xp,yp);
-    Ch2->SetVertex(2,xp,yp);
+    Ch2->SetVertex(6,xp,yp);
     //
     p1 = (yo[5]-yi[5])/(xo[5]-xi[5]);
     c1 = yo[5]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(yo[5]-yi[5])+
@@ -658,21 +684,23 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     y = p1*(x-xo[5])+c1;
     Ah3->SetVertex(0,x,y);
     Bh3->SetVertex(0,x,y);
-    Ch3->SetVertex(0,x,y);
+    Ch3->SetVertex(4,x,y);
     x = xi[5]+2.0*TSCarbonFiberThA;
     y = p1*(x-xo[5])+c1;
     Ah3->SetVertex(3,x,y);
     Bh3->SetVertex(3,x,y);
-    Ch3->SetVertex(3,x,y);
+    x7[2] = x; y7[2] = y; // vortexing done after last point
+    //Ch3->SetVertex(7,x,y);
     y = 2.0*TSCarbonFiberThA;
     x = xo[5]-TSCarbonFiberThA;
     Ah3->SetVertex(1,x,y);
     Bh3->SetVertex(1,x,y);
+    Ch3->SetVertex(5,x,y);
     y = 2.0*TSCarbonFiberThA;
     x = xi[5]+2.0*TSCarbonFiberThA;
     Ah3->SetVertex(2,x,y);
     Bh3->SetVertex(2,x,y);
-    Ch3->SetVertex(2,x,y);
+    Ch3->SetVertex(6,x,y);
     //
     for(i=0;i<4;i++){ // define points at +dz
       A1->SetVertex(i+4,(A1->GetVertices())[2*i],(A1->GetVertices())[1+2*i]);
@@ -701,43 +729,25 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
       Bh3->SetVertex(i+4,(Bh3->GetVertices())[2*i],
                          (Bh3->GetVertices())[1+2*i]);
     } // end for
-    printArb8(A1);
-    printArb8(Ah1);
-    printArb8(A2);
-    printArb8(Ah2);
-    printArb8(A3);
-    printArb8(Ah3);
-    printArb8(B1);
-    printArb8(Bh1);
-    printArb8(B2);
-    printArb8(Bh2);
-    printArb8(B3);
-    printArb8(Bh3);
-    printArb8(C1);
-    printArb8(Ch1);
-    printArb8(C2);
-    printArb8(Ch2);
-    printArb8(C3);
-    printArb8(Ch3);
     //
     p1 = (xco[0]-xci[0])/(yco[0]-yci[0]);
     c1 = xco[0]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xco[0]-xci[0])+
                                            SQ(yco[0]-yci[0]))/(xco[0]-xci[0]);
     y = TSCRoutC-2.*TSCarbonFiberThA;
     x = p1*(y-yco[0])+c1;
-    Ch1->SetVertex(4,x,y);
+    Ch1->SetVertex(0,x,y);
     y = TSCRinC+TSCarbonFiberThA;
     x = p1*(y-yci[0])+c1;
-    Ch1->SetVertex(6,x,y);
+    Ch1->SetVertex(2,x,y);
     p1 = (xco[1]-xci[1])/(yco[1]-yci[1]);
     c1 = xco[1]-0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xco[1]-xci[1])+
                                            SQ(yco[1]-yci[1]))/(xco[1]-xci[1]);
     y = TSCRoutC-2.*TSCarbonFiberThA;
     x = p1*(y-yco[1])+c1;
-    Ch1->SetVertex(5,x,y);
+    Ch1->SetVertex(1,x,y);
     y = TSCRinC+TSCarbonFiberThA;
     x = p1*(y-yci[1])+c1;
-    Ch1->SetVertex(7,x,y);
+    Ch1->SetVertex(3,x,y);
     //
     th = 0.5*TSCAngle*kRadian;
     xa = TMath::Cos(th)*xco[1]-TMath::Sin(th)*yco[1];
@@ -752,12 +762,12 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
     yp = ya-TSCarbonFiberThA;
     xp = p1*(y-ya)+c1;
-    Ch2->SetVertex(4,xp,yp);
+    Ch2->SetVertex(0,xp,yp);
     y = yb+2.0*TSCarbonFiberThA;
     x = p1*(y-ya)+c1;
     xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
-    Ch2->SetVertex(6,xp,yp);
+    Ch2->SetVertex(2,xp,yp);
     xa = TMath::Cos(th)*xco[2]-TMath::Sin(th)*yco[2];
     ya = TMath::Sin(th)*xco[2]+TMath::Cos(th)*yco[2];
     xb = TMath::Cos(th)*xci[2]-TMath::Sin(th)*yci[2];
@@ -768,28 +778,49 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     x = p1*(y-ya)+c1;
     xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
-    Ch2->SetVertex(5,xp,yp);
+    Ch2->SetVertex(1,xp,yp);
     y = yb+2.0*TSCarbonFiberThA;
     x = p1*(y-ya)+c1;
     xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
     yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
-    Ch2->SetVertex(7,xp,yp);
+    Ch2->SetVertex(3,xp,yp);
     //
     p1 = (yco[5]-yci[5])/(xco[5]-xci[5]);
     c1 = yco[5]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(yco[5]-yci[5])+
                                           SQ(xco[5]-xci[5]))/(yco[5]-yci[5]);
     x = xco[5]-TSCarbonFiberThA;
     y = p1*(x-xco[5])+c1;
-    Ch3->SetVertex(4,x,y);
+    Ch3->SetVertex(0,x,y);
     x = xci[5]+2.0*TSCarbonFiberThA;
     y = p1*(x-xci[5])+c1;
-    Ch3->SetVertex(6,x,y);
+    Ch3->SetVertex(2,x,y);
     y = 2.0*TSCarbonFiberThA;
     x = xco[5]-TSCarbonFiberThA;
-    Ch3->SetVertex(5,x,y);
+    Ch3->SetVertex(1,x,y);
     y = 2.0*TSCarbonFiberThA;
     x = xci[5]+2.0*TSCarbonFiberThA;
-    Ch3->SetVertex(7,x,y);
+    Ch3->SetVertex(3,x,y);
+    Ch1->SetVertex(7,x7[0],y7[0]); // 7th point most be done last ???
+    Ch2->SetVertex(7,x7[1],y7[1]); // 7th point most be done last ???
+    Ch3->SetVertex(7,x7[2],y7[2]); // 7th point most be done last ???
+    printArb8(A1);
+    printArb8(Ah1);
+    printArb8(A2);
+    printArb8(Ah2);
+    printArb8(A3);
+    printArb8(Ah3);
+    printArb8(B1);
+    printArb8(Bh1);
+    printArb8(B2);
+    printArb8(Bh2);
+    printArb8(B3);
+    printArb8(Bh3);
+    printArb8(C1);
+    printArb8(Ch1);
+    printArb8(C2);
+    printArb8(Ch2);
+    printArb8(C3);
+    printArb8(Ch3);
     //
     // Define Minimal volume to inclose this SPD Thermal Sheald.
     M1 = new TGeoPcon("ITSspdShealdVV",0.0,360.0,9);
@@ -846,10 +877,10 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     rotITSspdShealdVVt3->SetName("ITSspdShealdVVt3");
     rotITSspdShealdVVt3->RegisterYourself();
     M = new TGeoCompositeShape("ITS SPD Thermal sheald volume",
-                              "ITSspdShealdVV+"
-                              "ITSspdShealdWingVV:ITSspdShealdVVt0+"
-                              "ITSspdShealdWingVV:ITSspdShealdVVt1+"
-                              "ITSspdShealdWingVV:ITSspdShealdVVt2+"
+                              "(((ITSspdShealdVV+"
+                              "ITSspdShealdWingVV:ITSspdShealdVVt0)+"
+                              "ITSspdShealdWingVV:ITSspdShealdVVt1)+"
+                              "ITSspdShealdWingVV:ITSspdShealdVVt2)+"
                               "ITSspdShealdWingVV:ITSspdShealdVVt3");
     //
     TGeoManager *mgr = gGeoManager;
@@ -1034,6 +1065,31 @@ void AliITSv11::SPDThermalSheald(TGeoVolume *Moth){
     Mv->AddNode(B3v,7,new TGeoCombiTrans(*tranb,*rot));
     Mv->AddNode(B3v,8,new TGeoCombiTrans(*tranbm,*rot));
     Mv->AddNode(C3v,4,new TGeoCombiTrans(*tranc,*rot));
+    if(GetDebug()){
+        A1v->PrintNodes();
+        Ah1v->PrintNodes();
+        A2v->PrintNodes();
+        Ah2v->PrintNodes();
+        A3v->PrintNodes();
+        Ah3v->PrintNodes();
+        B1v->PrintNodes();
+        Bh1v->PrintNodes();
+        B2v->PrintNodes();
+        Bh2v->PrintNodes();
+        B3v->PrintNodes();
+        Bh3v->PrintNodes();
+        C1v->PrintNodes();
+        Ch1v->PrintNodes();
+        C2v->PrintNodes();
+        Ch2v->PrintNodes();
+        C3v->PrintNodes();
+        Ch3v->PrintNodes();
+        Dv->PrintNodes();
+        Dsv->PrintNodes();
+        Dwv->PrintNodes();
+        Dwsv->PrintNodes();
+        //Mv->PrintNodes();
+    } // end if
 }
 //______________________________________________________________________
 void AliITSv11::SDDCone(TGeoVolume *Moth){
@@ -1049,16 +1105,16 @@ void AliITSv11::SDDCone(TGeoVolume *Moth){
     // name SDD/Cilindro.hpgl
     const Double_t TSLength       = 790.0*kmm; // Thermal Sheeld length
     const Double_t TSInsertoLength= 15.0*kmm;    // ????
-    const Double_t TSOuterR       = 0.5*(220.-10.)*kmm; // ????
-    const Double_t TSInnerR       = 0.5*(220.+10.)*kmm; // ????
+    const Double_t TSOuterR       = 0.5*(220.+10.)*kmm; // ????
+    const Double_t TSInnerR       = 0.5*(220.-10.)*kmm; // ????
     const Double_t TSCarbonFiberth= 0.02*kmm;     // ????
     const Double_t TSBoltDiameter = 6.0*kmm; // M6 screw
     const Double_t TSBoltDepth    = 6.0*kmm; // in volume C
     const Double_t TSBoltRadius   = 0.5*220.*kmm; // Radius in volume C
     const Double_t TSBoltAngle0   = 0.0*kDegree; // Angle in volume C
     const Double_t TSBoltdAngle   = 30.0*kDegree; // Angle in Volume C
-    Double_t x,y,z,t;
-    Int_t i;
+    Double_t x,y,z,t,t0;
+    Int_t i,n;
     TGeoTube *A,*B,*C,*D;
     TGeoTranslation *tran;
     TGeoRotation *rot;
@@ -1070,9 +1126,13 @@ void AliITSv11::SDDCone(TGeoVolume *Moth){
                     TSOuterR-TSCarbonFiberth,
                     0.5*(TSLength-2.0*TSInsertoLength));
     C = new TGeoTube("ITS SDD CC Inserto",TSInnerR+TSCarbonFiberth,
-                    TSOuterR-TSCarbonFiberth,0.5*TSInsertoLength);
+                    TSOuterR-TSCarbonFiberth,0.5*TSLength);
     D = new TGeoTube("ITS SDD CC M6 bolt end",0.0,0.5*TSBoltDiameter,
                     0.5*TSBoltDepth);
+    printTube(A);
+    printTube(B);
+    printTube(C);
+    printTube(D);
     //
     TGeoManager *mgr = gGeoManager;
     SDDcf = mgr->GetMedium("ITSssdCarbonFiber");
@@ -1082,31 +1142,381 @@ void AliITSv11::SDDCone(TGeoVolume *Moth){
     TGeoVolume *Av,*Bv,*Cv,*Dv;
     Av = new TGeoVolume("ITSsddCentCylCF",A,SDDcf);
     Av->SetVisibility(kTRUE);
-    Av->SetLineColor(1);
+    Av->SetLineColor(4);
     Av->SetLineWidth(1);
+    Av->SetFillColor(Av->GetLineColor());
+    Av->SetFillStyle(4000); // 0% transparent
     Bv = new TGeoVolume("ITSsddCentCylF",B,SDDfo);
-    Bv->SetVisibility(kFALSE);
-    Cv = new TGeoVolume("ITSsddCentCylSt",B,SDDfs);
-    Cv->SetVisibility(kFALSE);
-    Dv = new TGeoVolume("ITSsddCentCylSS",B,SDDss);
-    Dv->SetVisibility(kFALSE);
+    Bv->SetVisibility(kTRUE);
+    Bv->SetLineColor(3);
+    Bv->SetLineWidth(1);
+    Bv->SetFillColor(Bv->GetLineColor());
+    Bv->SetFillStyle(4000); // 0% transparent
+    Cv = new TGeoVolume("ITSsddCentCylSt",C,SDDfs);
+    Cv->SetVisibility(kTRUE);
+    Cv->SetLineColor(2);
+    Cv->SetLineWidth(1);
+    Cv->SetFillColor(Cv->GetLineColor());
+    Cv->SetFillStyle(4000); // 0% transparent
+    Dv = new TGeoVolume("ITSsddCentCylSS",D,SDDss);
+    Dv->SetVisibility(kTRUE);
+    Dv->SetLineColor(1);
+    Dv->SetLineWidth(1);
+    Dv->SetFillColor(Dv->GetLineColor());
+    Dv->SetFillStyle(4000); // 0% transparent
     //
     Moth->AddNode(Av,1,0);
-    Av->AddNode(Bv,1,0);
-    z = 0.5*(TSLength-TSInsertoLength);
-    tran = new TGeoTranslation("",0.0,0.0,z);
-    Av->AddNode(Cv,1,tran);
-    rot = new TGeoRotation("",0.0,180.0*kDegree,0.0);
-    rotran = new TGeoCombiTrans("",0.0,0.0,-z,rot);
-    Av->AddNode(Cv,2,rotran);
-    for(i=0;i<(Int_t)((360.*kDegree)/TSBoltdAngle);i++){
+    Av->AddNode(Cv,1,0);
+    Cv->AddNode(Bv,1,0);
+    n = (Int_t)((360.*kDegree)/TSBoltdAngle);
+    for(i=0;i<n;i++){
         t = TSBoltAngle0+((Double_t)i)*TSBoltdAngle;
         x = TSBoltRadius*TMath::Cos(t*kRadian);
         y = TSBoltRadius*TMath::Sin(t*kRadian);
-        z = 0.5*(TSInsertoLength-TSBoltDepth);
+        z = 0.5*(TSLength-TSBoltDepth);
         tran = new TGeoTranslation("",x,y,z);
         Cv->AddNode(Dv,i+1,tran);
+        tran = new TGeoTranslation("",x,y,-z);
+        Cv->AddNode(Dv,i+n+1,tran);
     } // end for i
+    if(GetDebug()){
+        Av->PrintNodes();
+        Bv->PrintNodes();
+        Cv->PrintNodes();
+        Dv->PrintNodes();
+    } // end if
+    // SDD Suport Cone
+    //
+    //
+    const Double_t Thickness = 10.5*kmm; // Thickness of Rohacell+carbon fiber
+    const Double_t Cthick    = 1.5*kmm; // Carbon finber thickness
+    const Double_t Rcurv     = 15.0*kmm; // Radius of curvature.
+    const Double_t Tc        = 45.0; // angle of SSD cone [degrees].
+    const Double_t Sintc = TMath::Sin(Tc*TMath::DegToRad());
+    const Double_t Costc = TMath::Cos(Tc*TMath::DegToRad());
+    const Double_t Tantc = TMath::Tan(Tc*TMath::DegToRad());
+    const Double_t ZouterMilled = 23.0*kmm;
+    const Double_t Zcylinder    = 186.0*kmm;
+    const Double_t Z0           = Zcylinder + 0.5*TSLength;
+    //const Int_t Nspoaks         = 12;
+    //const Int_t Nmounts         = 4;
+    //const Double_t DmountAngle  = 9.0; // degrees
+    const Double_t RoutMax      = 0.5*560.0*kmm;
+    const Double_t RoutMin      = 0.5*539.0*kmm;
+    // Holes in cone for cables
+    const Double_t PhiHole1     = 0.0*kDegree;
+    const Double_t dPhiHole1    = 25.0*kDegree;
+    const Double_t RholeMax1    = 0.5*528.*kmm;
+    const Double_t RholeMin1    = 0.5*464.*kmm;
+    const Double_t PhiHole2     = 0.0*kDegree;
+    const Double_t dPhiHole2    = 50.0*kDegree;
+    const Double_t RholeMax2    = 0.5*375.*kmm;
+    const Double_t RholeMin2    = 0.5*280.*kmm;
+    //
+    //const Int_t NpostsOut       = 6;
+    //const Int_t NpostsIn        = 3;
+    //const Double_t Phi0PostOut  = 0.0; // degree
+    //const Double_t Phi0PostIn   = 0.0; // degree
+    //const Double_t dRpostOut    = 16.0*kmm;
+    //const Double_t dRpostIn     = 16.0*kmm;
+    //const Double_t ZpostMaxOut  = 116.0*kmm;
+    //const Double_t ZpostMaxIn   = 190.0*kmm;
+    const Double_t RinMax       = 0.5*216*kmm;
+    const Double_t RinCylinder  = 0.5*231.0*kmm;
+    //const Double_t RinHole      = 0.5*220.0*kmm;
+    const Double_t RinMin       = 0.5*210.0*kmm;
+    const Double_t dZin         = 15.0*kmm; // ???
+    //
+    Double_t dza = Thickness/Sintc-(RoutMax-RoutMin)/Tantc;
+    Double_t Z,Rmin,Rmax; // Temp variables.
+    if(dza<=0){ // The number or order of the points are in error for a proper
+     // call to pcons!
+     Error("SDDcone","The definition of the points for a call to PCONS is"
+           " in error. abort.");
+     return;
+    } // end if
+    TGeoPcon *E = new TGeoPcon("ITSsddSuportConeCarbonFiberSurfaceE",
+                               0.0,360.0,12);
+    E->Z(0)    = 0.0;
+    E->Rmin(0) = RoutMin;
+    E->Rmax(0) = RoutMax;
+    E->Z(1)    = ZouterMilled - dza;
+    E->Rmin(1) = E->GetRmin(0);
+    E->Rmax(1) = E->GetRmax(0);
+    E->Z(2)    = ZouterMilled;
+    E->Rmax(2) = E->GetRmax(0);
+    RadiusOfCurvature(Rcurv,0.,E->GetZ(1),E->GetRmin(1),Tc,Z,Rmin);
+    E->Z(3)    = Z;
+    E->Rmin(3) = Rmin;
+    E->Rmin(2) = RminFrom2Points(E,3,1,E->GetZ(2));
+    RadiusOfCurvature(Rcurv,0.,E->GetZ(2),E->GetRmax(2),Tc,Z,Rmax);
+    E->Z(4)    = Z;
+    E->Rmax(4) = Rmax;
+    E->Rmin(4) = RminFromZpCone(E,Tc,E->GetZ(4),0.0);
+    E->Rmax(3) = RmaxFrom2Points(E,4,2,E->GetZ(3));
+    E->Rmin(7) = RinMin;
+    E->Rmin(8) = RinMin;
+    RadiusOfCurvature(Rcurv,90.0,0.0,RinMax,90.0-Tc,Z,Rmax);
+    E->Rmax(8) = Rmax;
+    E->Z(8)    = ZFromRmaxpCone(E,Tc,E->GetRmax(8));
+    E->Z(9)    = Zcylinder;
+    E->Rmin(9) = RinMin;
+    E->Z(10)    = E->GetZ(9);
+    E->Rmin(10) = RinCylinder;
+    E->Rmin(11) = RinCylinder;
+    E->Rmax(11) = E->GetRmin(11);
+    Rmin        = E->GetRmin(8);
+    RadiusOfCurvature(Rcurv,90.0-Tc,E->GetZ(8),E->GetRmax(8),90.0,Z,Rmax);
+    Rmax = RinMax;
+    E->Z(11)    = Z+(E->GetZ(8)-Z)*(E->GetRmax(11)-Rmax)/(E->GetRmax(8)-Rmax);
+    E->Rmax(9) = RmaxFrom2Points(E,11,8,E->GetZ(9));
+    E->Rmax(10) = E->GetRmax(9);
+    E->Z(6)    = Z-dZin;
+    E->Z(7)    = E->GetZ(6);
+    E->Rmax(6) = RmaxFromZpCone(E,Tc,E->GetZ(6));
+    E->Rmax(7) = E->GetRmax(6);
+    RadiusOfCurvature(Rcurv,90.,E->GetZ(6),0.0,90.0-Tc,Z,Rmin);
+    E->Z(5)    = Z;
+    E->Rmin(5) = RminFromZpCone(E,Tc,Z);
+    E->Rmax(5) = RmaxFromZpCone(E,Tc,Z);
+    RadiusOfCurvature(Rcurv,90.-Tc,0.0,E->Rmin(5),90.0,Z,Rmin);
+    E->Rmin(6) = Rmin;
+    printPcon(E);
+    // Inner Core, Inserto material
+    TGeoPcon *F = new TGeoPcon("ITSsddSuportConeInsertoStesaliteF",0.,360.0,9);
+    F->Z(0)    = E->GetZ(0);
+    F->Rmin(0) = E->GetRmin(0)+Cthick;
+    F->Rmax(0) = E->GetRmax(0)-Cthick;
+    F->Z(1)    = E->GetZ(1);
+    F->Rmin(1) = F->GetRmin(0);
+    F->Rmax(1) = F->GetRmax(0);
+    F->Z(2)    = E->GetZ(2);
+    F->Rmax(2) = F->GetRmax(1);
+    RadiusOfCurvature(Rcurv-Cthick,0.,F->GetZ(1),F->GetRmax(1),Tc,Z,Rmin);
+    F->Z(3)    = Z;
+    F->Rmin(3) = Rmin;
+    F->Rmin(2) = RminFrom2Points(F,3,1,F->GetZ(2));
+    RadiusOfCurvature(Rcurv+Cthick,0.,F->GetZ(2),F->GetRmax(2),Tc,Z,Rmax);
+    F->Z(4)    = Z;
+    F->Rmax(4) = Rmax;
+    F->Rmin(4) = RmaxFromZpCone(E,Tc,F->GetZ(4),-Cthick);
+    F->Rmax(3) = RmaxFrom2Points(F,4,2,F->GetZ(3));
+    F->Rmin(7) = E->GetRmin(7);
+    F->Rmin(8) = E->GetRmin(8);
+    F->Z(6)    = E->GetZ(6)+Cthick;
+    F->Rmin(6) = E->GetRmin(6);
+    F->Z(7)    = F->GetZ(6);
+    F->Rmax(8) = E->GetRmax(8)-Cthick*Sintc;
+    RadiusOfCurvature(Rcurv+Cthick,90.,F->GetZ(6),F->GetRmin(6),90.-Tc,Z,Rmin);
+    F->Z(5)    = Z;
+    F->Rmin(5) = Rmin;
+    F->Rmax(5) = RmaxFromZpCone(F,Tc,Z);
+    F->Rmax(6) = RmaxFromZpCone(F,Tc,F->GetZ(6));
+    F->Rmax(7) = F->GetRmax(6);
+    F->Z(8)    = ZFromRmaxpCone(F,Tc,F->GetRmax(8),-Cthick);
+    printPcon(F);
+    // Inner Core, Inserto material
+    TGeoPcon *G = new TGeoPcon("ITSsddSuportConeFoamCoreG",0.0,360.0,4);
+    RadiusOfCurvature(Rcurv+Cthick,0.0,F->GetZ(1),F->GetRmin(1),Tc,Z,Rmin);
+    G->Z(0)    = Z;
+    G->Rmin(0) = Rmin;
+    G->Rmax(0) = G->GetRmin(0);
+    G->Z(1)    = G->GetZ(0)+(Thickness-2.0*Cthick)/Sintc;;
+    G->Rmin(1) = RminFromZpCone(F,Tc,G->GetZ(1));
+    G->Rmax(1) = RmaxFromZpCone(F,Tc,G->GetZ(1));
+    G->Z(2)    = E->GetZ(5)-Cthick;
+    G->Rmin(2) = RminFromZpCone(F,Tc,G->GetZ(2));
+    G->Rmax(2) = RmaxFromZpCone(F,Tc,G->GetZ(2));
+    G->Z(3)    = F->GetZ(5)+(Thickness-2.0*Cthick)*Costc;
+    G->Rmax(3) = RmaxFromZpCone(F,Tc,G->GetZ(3));
+    G->Rmin(3) = G->GetRmax(3);
+    printPcon(G);
+    //
+    TGeoPcon *H = new TGeoPcon("ITSsddSuportConeHoleH",PhiHole1,dPhiHole1,4);
+    H->Rmin(0) = RholeMax1;
+    H->Rmax(0) = H->GetRmin(0);
+    H->Z(0)    = ZFromRminpCone(E,Tc,H->GetRmin(0));
+    H->Rmax(1) = H->GetRmax(0);
+    H->Z(1)    = ZFromRmaxpCone(E,Tc,H->GetRmax(1));
+    H->Rmin(1) = RminFromZpCone(E,Tc,H->GetZ(1));
+    H->Rmin(2) = RholeMin1;
+    H->Z(2)    = ZFromRminpCone(E,Tc,H->GetRmin(2));
+    H->Rmax(2) = RmaxFromZpCone(E,Tc,H->GetZ(2));
+    H->Rmin(3) = H->GetRmin(2);
+    H->Rmax(3) = H->GetRmin(3);
+    H->Z(3)    = ZFromRminpCone(E,Tc,H->GetRmin(3));
+    printPcon(H);
+    //
+    x = Cthick/(0.5*(RholeMax1+RholeMin1));
+    t0 = PhiHole1 - x/kRadian;
+    t  = dPhiHole1 + 2.0*x/kRadian;
+    TGeoPcon *I = new TGeoPcon("ITSsddSuportConeHoleI",t0,t,4);
+    I->Rmin(0) = RholeMax1+Cthick;
+    I->Rmax(0) = I->GetRmin(0);
+    I->Z(0)    = ZFromRminpCone(F,Tc,I->GetRmin(0));
+    I->Rmax(1) = I->GetRmax(0);
+    I->Z(1)    = ZFromRmaxpCone(F,Tc,I->GetRmax(1));
+    I->Rmin(1) = RminFromZpCone(F,Tc,I->GetZ(1));
+    I->Rmin(2) = RholeMin1-Cthick;
+    I->Z(2)    = ZFromRminpCone(F,Tc,I->GetRmin(2));
+    I->Rmax(2) = RmaxFromZpCone(F,Tc,I->GetZ(2));
+    I->Rmin(3) = I->GetRmin(2);
+    I->Rmax(3) = I->GetRmin(3);
+    I->Z(3)    = ZFromRmaxpCone(F,Tc,I->GetRmax(3));
+    printPcon(I);
+    //
+    TGeoPcon *J = new TGeoPcon("ITSsddSuportConeHoleJ",PhiHole2,dPhiHole2,4);
+    J->Rmin(0) = RholeMax2;
+    J->Rmax(0) = J->GetRmin(0);
+    J->Z(0)    = ZFromRminpCone(E,Tc,J->GetRmin(0));
+    J->Rmax(1) = J->GetRmax(0);
+    J->Z(1)    = ZFromRmaxpCone(E,Tc,J->GetRmax(1));
+    J->Rmin(1) = RminFromZpCone(E,Tc,J->GetZ(1));
+    J->Rmin(2) = RholeMin2;
+    J->Z(2)    = ZFromRminpCone(E,Tc,J->GetRmin(2));
+    J->Rmax(2) = RmaxFromZpCone(E,Tc,J->GetZ(2));
+    J->Rmin(3) = J->GetRmin(2);
+    J->Rmax(3) = J->GetRmin(3);
+    J->Z(3)    = ZFromRmaxpCone(E,Tc,J->GetRmax(3));
+    printPcon(J);
+    //
+    x = Cthick/(0.5*(RholeMax2+RholeMin2));
+    t0 = PhiHole2 - x/kRadian;
+    t  = dPhiHole2 + 2.0*x/kRadian;
+    TGeoPcon *K = new TGeoPcon("ITSsddSuportConeHoleK",t0,t,4);
+    K->Rmin(0) = RholeMax2+Cthick;
+    K->Rmax(0) = K->GetRmin(0);
+    K->Z(0)    = ZFromRminpCone(F,Tc,K->GetRmin(0));
+    K->Rmax(1) = K->GetRmax(0);
+    K->Z(1)    = ZFromRmaxpCone(F,Tc,K->GetRmax(1));
+    K->Rmin(1) = RminFromZpCone(F,Tc,K->GetZ(1));
+    K->Rmin(2) = RholeMin2-Cthick;
+    K->Z(2)    = ZFromRminpCone(F,Tc,K->GetRmin(2));
+    K->Rmax(2) = RmaxFromZpCone(F,Tc,K->GetZ(2));
+    K->Rmin(3) = K->GetRmin(2);
+    K->Rmax(3) = K->GetRmin(3);
+    K->Z(3)    = ZFromRmaxpCone(F,Tc,K->GetRmax(3));
+    printPcon(K);
+    //
+    TGeoCompositeShape *L,*M,*N;
+    rot = new TGeoRotation("ITSsddRotZ30",0.0,0.0,30.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ60",0.0,0.0,60.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ90",0.0,0.0,90.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ120",0.0,0.0,120.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ150",0.0,0.0,150.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ180",0.0,0.0,180.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ210",0.0,0.0,210.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ240",0.0,0.0,240.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ270",0.0,0.0,270.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ300",0.0,0.0,300.0);
+    rot->RegisterYourself();
+    rot = new TGeoRotation("ITSsddRotZ330",0.0,0.0,330.0);
+    rot->RegisterYourself();
+    L = new TGeoCompositeShape("ITS SDD Suport Cone","((((((((((((((((("
+                               "ITSsddSuportConeCarbonFiberSurfaceE -"
+                               "ITSsddSuportConeHoleH)  -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ30) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ60) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ90) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ120) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ150) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ180) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ210) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ240) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ270) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ300) -"
+                               "ITSsddSuportConeHoleH:ITSsddRotZ330) -"
+                               "ITSsddSuportConeHoleJ)  -"
+                               "ITSsddSuportConeHoleJ:ITSsddRotZ60) -"
+                               "ITSsddSuportConeHoleJ:ITSsddRotZ120) -"
+                               "ITSsddSuportConeHoleJ:ITSsddRotZ180) -"
+                               "ITSsddSuportConeHoleJ:ITSsddRotZ240) -"
+                               "ITSsddSuportConeHoleJ:ITSsddRotZ300");
+    M = new TGeoCompositeShape("ITS SDD Suport Cone Inserto Stesalite",
+                               "((((((((((((((((("
+                               "ITSsddSuportConeInsertoStesaliteF -"
+                               "ITSsddSuportConeHoleI)  -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ30) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ60) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ90) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ120) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ150) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ180) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ210) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ240) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ270) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ300) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ330) -"
+                               "ITSsddSuportConeHoleK)  -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ60) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ120) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ180) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ240) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ300");
+    N = new TGeoCompositeShape("ITS SDD Suport Cone Foam Core",
+                               "((((((((((((((((("
+                               "ITSsddSuportConeFoamCoreG -"
+                               "ITSsddSuportConeHoleI)  -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ30) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ60) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ90) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ120) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ150) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ180) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ210) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ240) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ270) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ300) -"
+                               "ITSsddSuportConeHoleI:ITSsddRotZ330) -"
+                               "ITSsddSuportConeHoleK)  -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ60) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ120) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ180) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ240) -"
+                               "ITSsddSuportConeHoleK:ITSsddRotZ300");
+    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+    TGeoVolume *Lv,*Mv,*Nv;
+    Lv = new TGeoVolume("ITSsddConeL",L,SDDcf);
+    Lv->SetVisibility(kTRUE);
+    Lv->SetLineColor(4);
+    Lv->SetLineWidth(1);
+    Lv->SetFillColor(Lv->GetLineColor());
+    Lv->SetFillStyle(4000); // 0% transparent
+    Mv = new TGeoVolume("ITSsddConeM",M,SDDfs);
+    Mv->SetVisibility(kTRUE);
+    Mv->SetLineColor(2);
+    Mv->SetLineWidth(1);
+    Mv->SetFillColor(Mv->GetLineColor());
+    Mv->SetFillStyle(4010); // 10% transparent
+    Nv = new TGeoVolume("ITSsddConeN",N,SDDfo);
+    Nv->SetVisibility(kTRUE);
+    Nv->SetLineColor(7);
+    Nv->SetLineWidth(1);
+    Nv->SetFillColor(Nv->GetLineColor());
+    Nv->SetFillStyle(4050); // 50% transparent
+    //
+    Mv->AddNode(Nv,1,0);
+    Lv->AddNode(Mv,1,0);
+    tran = new TGeoTranslation("",0.0,0.0,-Z0);
+    Moth->AddNode(Lv,1,tran);
+    rot = new TGeoRotation("",0.0,180.0*kDegree,0.0);
+    rotran = new TGeoCombiTrans("",0.0,0.0,Z0,rot);
+    delete rot;// rot not explicity used in AddNode functions.
+    Moth->AddNode(Lv,2,rotran);
+    if(GetDebug()){
+        Lv->PrintNodes();
+        Mv->PrintNodes();
+        Nv->PrintNodes();
+    } // end if
 }
 //______________________________________________________________________
 void AliITSv11::SSDCone(TGeoVolume *Moth){
@@ -1117,6 +1527,106 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     //  none.
     // Return:
     //  none.
+    //
+    TGeoMedium *SSDcf  = 0; // SSD support cone Carbon Fiber materal number.
+    TGeoMedium *SSDfs  = 0; // SSD support cone inserto stesalite 4411w.
+    TGeoMedium *SSDfo  = 0; // SSD support cone foam, Rohacell 50A.
+    TGeoMedium *SSDss  = 0; // SSD support cone screw material,Stainless steal
+    TGeoMedium *SSDair = 0; // SSD support cone Air
+    TGeoMedium *SSDal  = 0; // SSD support cone SDD mounting bracket Al
+    TGeoManager *mgr = gGeoManager;
+    SSDcf = mgr->GetMedium("ITSssdCarbonFiber");
+    SSDfs = mgr->GetMedium("ITSssdStaselite4411w");
+    SSDfo = mgr->GetMedium("ITSssdRohacell50A");
+    SSDss = mgr->GetMedium("ITSssdStainlessSteal");
+    SSDair= mgr->GetMedium("ITSssdAir");
+    SSDal = mgr->GetMedium("ITSssdAl");
+    //
+    // SSD Central cylinder/Thermal Sheald.
+    const Double_t ZThCylinder = 1140.0*kmm; //
+    const Double_t ZThCylFoam  = 1020.0*kmm; //
+    const Double_t RThCylOuter = 0.5*595.0*kmm; //
+    const Double_t CthickThCyl = 0.64*kmm; //
+    const Double_t FoamThickTh = 5.0*kmm; //
+    const Double_t dZThCylThEnd = 6.0*kmm; //
+    const Double_t RThCylInerEnd= 0.5*560.5*kmm; //
+    TGeoPcon *CA,*CB;
+    TGeoTube*CC;
+    //
+    CA = new TGeoPcon("ITS SSD Thermal Centeral CylinderA",0.0,360.0,6);
+    CB = new TGeoPcon("ITS SSD Thermal Centeral CylinderB",0.0,360.0,6);
+    CC = new TGeoTube("ITS SSD Thermal Centeral CylinderC",
+                      RThCylOuter-CthickThCyl-FoamThickTh,
+                      RThCylOuter-CthickThCyl,0.5*ZThCylFoam);
+    CA->Z(0)    = -0.5*ZThCylinder;
+    CA->Rmin(0) = RThCylInerEnd;
+    CA->Rmax(0) = RThCylOuter;
+    CA->Z(1)    = CA->GetZ(0) + dZThCylThEnd;
+    CA->Rmin(1) = CA->GetRmin(0);
+    CA->Rmax(1) = CA->GetRmax(0);
+    CA->Z(2)    = -0.5*ZThCylFoam;
+    CA->Rmin(2) = RThCylOuter - 2.0*CthickThCyl-FoamThickTh;
+    CA->Rmax(2) = CA->GetRmax(0);
+    CA->Z(3)    = -CA->GetZ(2);
+    CA->Rmin(3) = CA->GetRmin(2);
+    CA->Rmax(3) = CA->GetRmax(2);
+    CA->Z(4)    = -CA->GetZ(1);
+    CA->Rmin(4) = CA->GetRmin(1);
+    CA->Rmax(4) = CA->GetRmax(1);
+    CA->Z(5)    = -CA->GetZ(0);
+    CA->Rmin(5) = CA->GetRmin(0);
+    CA->Rmax(5) = CA->GetRmax(0);
+    //
+    CB->Z(0)    = CA->GetZ(0);
+    CB->Rmin(0) = CA->GetRmin(0) + CthickThCyl;
+    CB->Rmax(0) = CA->GetRmax(0) - CthickThCyl;
+    CB->Z(1)    = CA->GetZ(1);
+    CB->Rmin(1) = CA->GetRmin(1) + CthickThCyl;
+    CB->Rmax(1) = CA->GetRmax(1) - CthickThCyl;
+    CB->Z(2)    = CA->GetZ(2);
+    CB->Rmin(2) = CA->GetRmin(2) + CthickThCyl;
+    CB->Rmax(2) = CA->GetRmax(2) - CthickThCyl;
+    CB->Z(3)    = CA->GetZ(3);
+    CB->Rmin(3) = CA->GetRmin(3) + CthickThCyl;
+    CB->Rmax(3) = CA->GetRmax(3) - CthickThCyl;
+    CB->Z(4)    = CA->GetZ(4);
+    CB->Rmin(4) = CA->GetRmin(4) + CthickThCyl;
+    CB->Rmax(4) = CA->GetRmax(4) - CthickThCyl;
+    CB->Z(5)    = CA->GetZ(5);
+    CB->Rmin(5) = CA->GetRmin(5) + CthickThCyl;
+    CB->Rmax(5) = CA->GetRmax(5) - CthickThCyl;
+    //
+    printPcon(CA);
+    printPcon(CB);
+    printTube(CC);
+    TGeoVolume *CAv,*CBv,*CCv;
+    CAv = new TGeoVolume("ITSssdCentCylCA",CA,SSDcf);
+    CAv->SetVisibility(kTRUE);
+    CAv->SetLineColor(4); // blue
+    CAv->SetLineWidth(1);
+    CAv->SetFillColor(CAv->GetLineColor());
+    CAv->SetFillStyle(4010); // 10% transparent
+    CBv = new TGeoVolume("ITSssdCentCylCB",CB,SSDfs);
+    CBv->SetVisibility(kTRUE);
+    CBv->SetLineColor(2); // red
+    CBv->SetLineWidth(1);
+    CBv->SetFillColor(CBv->GetLineColor());
+    CBv->SetFillStyle(4010); // 10% transparent
+    CCv = new TGeoVolume("ITSssdCentCylCC",CC,SSDfo);
+    CCv->SetVisibility(kTRUE);
+    CCv->SetLineColor(3); // green
+    CCv->SetLineWidth(1);
+    CCv->SetFillColor(CCv->GetLineColor());
+    CCv->SetFillStyle(4010); // 10% transparent
+    CBv->AddNode(CCv,1,0);
+    CAv->AddNode(CBv,1,0);
+    Moth->AddNode(CAv,1,0);
+    if(GetDebug()){
+        CAv->PrintNodes();
+        CBv->PrintNodes();
+        CCv->PrintNodes();
+    } // end if
+    //
     const Double_t Thickness = 13.0*kmm; // Thickness of Rohacell+carbon fiber
     const Double_t Cthick    = 1.5*kmm; // Carbon finber thickness
     const Double_t Rcurv     = 15.0*kmm; // Radius of curvature.
@@ -1126,7 +1636,7 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     const Double_t Tantc = TMath::Tan(Tc*TMath::DegToRad());
     const Double_t ZouterMilled = (13.5-5.0)*kmm;
     const Double_t Zcylinder    = 170.0*kmm;
-    const Double_t Z0           = Zcylinder + 100.0*kmm;
+    const Double_t Z0           = Zcylinder + 0.5*ZThCylinder;
     const Int_t Nspoaks         = 12;
     const Int_t Nmounts         = 4;
     const Double_t DmountAngle  = 9.0; // degrees
@@ -1159,13 +1669,7 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     const Double_t RsddSupportPlate  = 0.5*585.0*kmm;
     const Double_t ThSDDsupportPlate = 4.0*kmm;
     const Double_t WsddSupportPlate  = 70.0*kmm;
-    TGeoMedium *SSDcf  = 0; // SSD support cone Carbon Fiber materal number.
-    TGeoMedium *SSDfs  = 0; // SSD support cone inserto stesalite 4411w.
-    TGeoMedium *SSDfo  = 0; // SSD support cone foam, Rohacell 50A.
-    TGeoMedium *SSDss  = 0; // SSD support cone screw material,Stainless steal
-    TGeoMedium *SSDair = 0; // SSD support cone Air
-    TGeoMedium *SSDal  = 0; // SSD support cone SDD mounting bracket Al
-
+    //
     // Lets start with the upper left outer carbon fiber surface.
     // Between za[2],rmaxa[2] and za[4],rmaxa[4] there is a curved section
     // given by rmaxa = rmaxa[2]-r*Sind(t) for 0<=t<=Tc and 
@@ -1176,7 +1680,7 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     // between the equivelent points for simplicity.
     Double_t dza = Thickness/Sintc-(RoutMax-RoutMin)/Tantc;
     Int_t i,j;
-    Double_t z[9],rn[9],rx[9],phi,dphi;
+    Double_t x,y,z[9],rn[9],rx[9],phi,dphi;
     Double_t t,t0,Z,Rmin,Rmax; // Temp variables.
     if(dza<=0){ // The number or order of the points are in error for a proper
      // call to pcons!
@@ -1209,9 +1713,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *A = new TGeoPcon("ITS SSD Suport cone Carbon Fiber "
                        "Surface outer left",phi,dphi,7);
     for(i=0;i<A->GetNz();i++){
-             //if(fDebug) cout<<i<<"A: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     A->DefineSection(i,z[i],rn[i],rx[i]);
+        A->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(A);
     //
     // Poly-cone Volume B. Stesalite inside volume A.
     // Now lets define the Inserto Stesalite 4411w material volume.
@@ -1236,9 +1740,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *B = new TGeoPcon("ITS SSD Suport cone Inserto Stesalite "
                        "left edge",phi,dphi,6);
     for(i=0;i<B->GetNz();i++){
-             //if(fDebug) cout<<i<<"B: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     B->DefineSection(i,z[i],rn[i],rx[i]);
+        B->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(B);
     //
     // Poly-cone Volume C. Foam inside volume A.
     // Now lets define the Rohacell foam material volume.
@@ -1259,9 +1763,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *C = new TGeoPcon("ITS SSD Suport cone Rohacell foam "
                        "left edge",phi,dphi,4);
     for(i=0;i<C->GetNz();i++){
-             //if(fDebug) cout<<i<<"C: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     C->DefineSection(i,z[i],rn[i],rx[i]);
+        C->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(C);
     //
     // In volume SCB, th Inserto Stesalite 4411w material volume, there
     // are a number of Stainless steel screw and pin studs which will be
@@ -1269,9 +1773,11 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     rn[0] = 0.0*kmm,rx[0] = 6.0*kmm,z[0] = 0.5*10.0*kmm; // mm
     TGeoTube *D = new TGeoTube("ITS Screw+stud used to mount things to "
                        "the SSD support cone",rn[0],rx[0],z[0]);
+    printTube(D);
     rn[0] = 0.0*kmm;rx[0] = 6.0*kmm;z[0] = 0.5*12.0*kmm; // mm
     TGeoTube *E = new TGeoTube("ITS pin used to mount things to the "
                        "SSD support cone",rn[0],rx[0],z[0]);
+    printTube(E);
     //
     // Poly-cone Volume F. Foam in spoak reagion, inside volume A.
     // There is no carbon fiber between this upper left section and the
@@ -1297,9 +1803,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *F = new TGeoPcon("ITS SSD Top Suport cone Rohacell foam "
                        "Spoak",phi,dphi,4);
     for(i=0;i<F->GetNz();i++){
-             //if(fDebug) cout<<i<<"F: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     F->DefineSection(i,z[i],rn[i],rx[i]);
+        F->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(F);
     //=================================================================
      // Poly-cone Volume G.
     // Now for the spoak part of the SSD cone.
@@ -1325,9 +1831,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *G = new TGeoPcon("ITS SSD spoak carbon fiber surfaces",
                        phi,dphi,4);
     for(i=0;i<G->GetNz();i++){
-             //if(fDebug) cout<<i<<"G: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     G->DefineSection(i,z[i],rn[i],rx[i]);
+        G->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(G);
     // For the foam core.
     // Poly-cone Volume H.
     t = Cthick/(0.5*(RholeMax+RholeMin));// It is not posible to get the
@@ -1351,9 +1857,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *H = new TGeoPcon("ITS SSD support cone Rohacell foam Spoak",
                        phi,dphi,4); 
     for(i=0;i<H->GetNz();i++){
-             //if(fDebug) cout<<i<<"H: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     H->DefineSection(i,z[i],rn[i],rx[i]);
+        H->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(H);
     //
     //==================================================================
     // Now for the Inner most part of the SSD cone.
@@ -1395,9 +1901,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *I = new TGeoPcon("ITS SSD lower/inner right part of SSD "
                        "cone",phi,dphi,9);
     for(i=0;i<I->GetNz();i++){
-             //if(fDebug) cout<<i<<"I: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     I->DefineSection(i,z[i],rn[i],rx[i]);
+        I->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(I);
     // Now for Inserto volume at the inner most radius.
     // Poly-cone Volume K.
     phi   = 0.0;
@@ -1423,9 +1929,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *K = new TGeoPcon("ITS SSD inner most inserto material",
                        phi,dphi,6);
     for(i=0;i<K->GetNz();i++){
-             //if(fDebug) cout<<i<<"K: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     K->DefineSection(i,z[i],rn[i],rx[i]);
+        K->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(K);
     // Now for foam core at the inner most radius.
     // Poly-cone Volume J.
     phi   = 0.0;
@@ -1444,9 +1950,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     rx[3] = rn[3];
     TGeoPcon *J = new TGeoPcon("ITS SSD inner most foam core",phi,dphi,4); 
     for(i=0;i<J->GetNz();i++){
-             //if(fDebug) cout<<i<<"J: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     J->DefineSection(i,z[i],rn[i],rx[i]);
+        J->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(J);
     // Now for foam core at the top of the inner most radius where 
     // the spoaks are.
     t = Cthick/(0.5*(RholeMax+RholeMin));// It is not posible to get the
@@ -1471,9 +1977,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *L = new TGeoPcon("ITS SSD Bottom cone Rohacell foam Spoak",
                        phi,dphi,4);
     for(i=0;i<L->GetNz();i++){
-             //if(fDebug) cout<<i<<"L: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     L->DefineSection(i,z[i],rn[i],rx[i]);
+        L->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(L);
     // Now for the SSD mounting posts
     // Poly-cone Volume O.
     dphi  = 180.0*dRpost/(RpostMin+0.5*dRpost)/TMath::Pi(); //
@@ -1490,9 +1996,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *O = new TGeoPcon("ITS SSD mounting post, carbon fiber",
                        phi,dphi,3);
     for(i=0;i<O->GetNz();i++){
-             //if(fDebug) cout<<i<<"O: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     O->DefineSection(i,z[i],rn[i],rx[i]);
+        O->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(O);
     // Now for the SSD mounting posts
     // Poly-cone Volume P.
     t = 180.0*Cthick/(RpostMin+0.5*dRpost)/TMath::Pi();
@@ -1510,9 +2016,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *P = new TGeoPcon("ITS SSD mounting post, Inserto",
                        phi,dphi,3);
     for(i=0;i<P->GetNz();i++){
-             //if(fDebug) cout<<i<<"P: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     P->DefineSection(i,z[i],rn[i],rx[i]);
+        P->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(P);
     // This insrto continues into the SSD cone displacing the foam
     // and the carbon fiber surface at those points where the posts are.
     //Poly-cone Vol. M
@@ -1533,9 +2039,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *M = new TGeoPcon("ITS SSD mounting post foam substitute, "
                        "Inserto",phi,dphi,4);
     for(i=0;i<M->GetNz();i++){
-             //if(fDebug) cout<<i<<"M: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     M->DefineSection(i,z[i],rn[i],rx[i]);
+        M->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(M);
     //
     //Poly-cone Vol. N
     phi   = P->GetPhi1();
@@ -1555,47 +2061,49 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *N = new TGeoPcon("ITS SSD mounting post CF subsititute, "
                        "Inserto",phi,dphi,4);
     for(i=0;i<N->GetNz();i++){ 
-             //if(fDebug) cout<<i<<"N: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     N->DefineSection(i,z[i],rn[i],rx[i]);
+        N->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(N);
     // Bolt heads holding the SSD-SDD tube to the SSD cone.
     // Bolt -- PolyCone
     //Poly-cone Volume Q.
     phi   = 0.0;
     dphi  = 360.0;
-    z[0]  = I->GetZ(4)-ThSDDsupportPlate;
+    z[0]  = I->GetZ(4)+ThSDDsupportPlate;
     rn[0] = 0.0;
     rx[0] = 0.5*DscrewHead;
-    z[1]  = I->GetZ(4)-ThScrewHeadHole;
+    z[1]  = I->GetZ(4)+ThScrewHeadHole;
     rn[1] = 0.0;
     rx[1] = 0.5*DscrewHead;
     z[2]  = z[1];
     rn[2] = 0.0;
     rx[2] = 0.5*DscrewShaft;
-    z[3]  = z[2];
+    z[3]  = I->GetZ(6);
     rn[3] = 0.0;
     rx[3] = rx[2];
     TGeoPcon *Q = new TGeoPcon("ITS SSD Thermal sheal stainless steel "
                        "bolts",phi,dphi,4);
     for(i=0;i<Q->GetNz();i++){
-             //if(fDebug) cout<<i<<"Q: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     Q->DefineSection(i,z[i],rn[i],rx[i]);
+        Q->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(Q);
     // air infront of bolt (stasolit Volume K) -- Tube
-    z[0]  = 0.5*(Thickness-ThScrewHeadHole);
+    z[0]  = 0.5*(ThSDDsupportPlate-Cthick);
     rn[0] = 0.0*kmm;
     rx[0] = 0.5*DscrewHead;
     TGeoTube *R = new TGeoTube("ITS Air in front of bolt (in stasolit)",
                        rn[0],rx[0],z[0]);
     // air infront of bolt (carbon fiber volume I) -- Tube
-    z[0]  = 0.5*Thickness;
+    z[0]  = 0.5*Cthick;
     rn[0] = 0.0*kmm;
     rx[0] = R->GetRmax();
     TGeoTube *S = new TGeoTube("ITS Air in front of Stainless Steal "
                        "Screw end, N6",rn[0],rx[0],z[0]);
+    printTube(S);
     // SDD support plate, SSD side.
     //Poly-cone Volume T.
-    dphi  = TMath::RadToDeg()*TMath::ATan2(0.5*WsddSupportPlate,RsddSupportPlate);
+    dphi  = TMath::RadToDeg()*TMath::ATan2(0.5*WsddSupportPlate,
+                                           RsddSupportPlate);
     phi   = Phi0SDDsupports-0.5*dphi;
     z[0]  = K->GetZ(2);
     rn[0] = I->GetRmin(4);
@@ -1606,9 +2114,9 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     TGeoPcon *T = new TGeoPcon("ITS SSD-SDD mounting bracket Inserto->Al.",
                        phi,dphi,2);
     for(i=0;i<T->GetNz();i++){
-             //if(fDebug) cout<<i<<"T: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     T->DefineSection(i,z[i],rn[i],rx[i]);
+        T->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(T);
     //
     // Poly-cone Volume U.
     TGeoPcon *U;
@@ -1640,76 +2148,147 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
      U = new TGeoPcon("ITS SSD-SDD mounting bracket CF->Al.",phi,dphi,2);
     }// end if
     for(i=0;i<U->GetNz();i++){
-             //if(fDebug) cout<<i<<"U: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
-     U->DefineSection(i,z[i],rn[i],rx[i]);
+        U->DefineSection(i,z[i],rn[i],rx[i]);
     } // end for i
+    printPcon(U);
     //
-    TGeoManager *mgr = gGeoManager;
-    SSDcf = mgr->GetMedium("ITSssdCarbonFiber");
-    SSDfs = mgr->GetMedium("ITSssdStaselite4411w");
-    SSDfo = mgr->GetMedium("ITSssdRohacell50A");
-    SSDss = mgr->GetMedium("ITSssdStainlessSteal");
-    SSDair= mgr->GetMedium("ITSssdAir");
-    SSDal = mgr->GetMedium("ITSssdAl");
     TGeoVolume *Av,*Bv,*Cv,*Dv,*Ev,*Fv,*Gv,*Hv,*Iv,*Jv,*Kv,*Lv,*Mv,*Nv,
             *Ov,*Pv,*Qv,*Rv,*Sv,*Tv,*Uv;
     Av = new TGeoVolume("ITSssdConeA",A,SSDcf);
     Av->SetVisibility(kTRUE);
-    Av->SetLineColor(1);
+    Av->SetLineColor(4); // blue
     Av->SetLineWidth(1);
+    Av->SetFillColor(Av->GetLineColor());
+    Av->SetFillStyle(4010); // 10% transparent
     Bv = new TGeoVolume("ITSssdConeB",B,SSDfs);
     Bv->SetVisibility(kTRUE);
+    Bv->SetLineColor(2); // red
+    Bv->SetLineWidth(1);
+    Bv->SetFillColor(Bv->GetLineColor());
+    Bv->SetFillStyle(4010); // 10% transparent
     Cv = new TGeoVolume("ITSssdConeC",C,SSDfo);
     Cv->SetVisibility(kTRUE);
+    Cv->SetLineColor(3); // green
+    Cv->SetLineWidth(1);
+    Cv->SetFillColor(Cv->GetLineColor());
+    Cv->SetFillStyle(4010); // 10% transparent
     Dv = new TGeoVolume("ITSssdConeD",D,SSDss);
     Dv->SetVisibility(kTRUE);
+    Dv->SetLineColor(1); // black
+    Dv->SetLineWidth(1);
+    Dv->SetFillColor(Dv->GetLineColor());
+    Dv->SetFillStyle(4010); // 10% transparent
     Ev = new TGeoVolume("ITSssdConeE",E,SSDss);
     Ev->SetVisibility(kTRUE);
+    Ev->SetLineColor(1); // black
+    Ev->SetLineWidth(1);
+    Ev->SetFillColor(Ev->GetLineColor());
+    Ev->SetFillStyle(4010); // 10% transparent
     Fv = new TGeoVolume("ITSssdConeF",F,SSDfo);
     Fv->SetVisibility(kTRUE);
+    Fv->SetLineColor(3); // green
+    Fv->SetLineWidth(1);
+    Fv->SetFillColor(Fv->GetLineColor());
+    Fv->SetFillStyle(4010); // 10% transparent
     Gv = new TGeoVolume("ITSssdConeG",G,SSDcf);
     Gv->SetVisibility(kTRUE);
-    Gv->SetLineColor(2);
+    Gv->SetLineColor(4); // blue
     Gv->SetLineWidth(2);
+    Gv->SetFillColor(Gv->GetLineColor());
+    Gv->SetFillStyle(4010); // 10% transparent
     Hv = new TGeoVolume("ITSssdConeH",H,SSDfo);
     Hv->SetVisibility(kTRUE);
+    Hv->SetLineColor(3); // green
+    Hv->SetLineWidth(1);
+    Hv->SetFillColor(Hv->GetLineColor());
+    Hv->SetFillStyle(4010); // 10% transparent
     Iv = new TGeoVolume("ITSssdConeI",I,SSDcf);
     Iv->SetVisibility(kTRUE);
-    Iv->SetLineColor(3);
-    Iv->SetLineWidth(3);
+    Iv->SetLineColor(4); // blue
+    Iv->SetLineWidth(1);
+    Iv->SetFillColor(Iv->GetLineColor());
+    Iv->SetFillStyle(4010); // 10% transparent
     Jv = new TGeoVolume("ITSssdConeJ",J,SSDfo);
     Jv->SetVisibility(kTRUE);
+    Jv->SetLineColor(3); // green
+    Jv->SetLineWidth(3);
+    Jv->SetFillColor(Jv->GetLineColor());
+    Jv->SetFillStyle(4010); // 10% transparent
     Kv = new TGeoVolume("ITSssdConeK",K,SSDfs);
     Kv->SetVisibility(kTRUE);
+    Kv->SetLineColor(2); // red
+    Kv->SetLineWidth(1);
+    Kv->SetFillColor(Kv->GetLineColor());
+    Kv->SetFillStyle(4010); // 10% transparent
     Lv = new TGeoVolume("ITSssdConeL",L,SSDfo);
     Lv->SetVisibility(kTRUE);
+    Lv->SetLineColor(3); // green
+    Lv->SetLineWidth(3);
+    Lv->SetFillColor(Lv->GetLineColor());
+    Lv->SetFillStyle(4010); // 10% transparent
     Mv = new TGeoVolume("ITSssdConeM",M,SSDfs);
     Mv->SetVisibility(kTRUE);
+    Mv->SetLineColor(2); // red
+    Mv->SetLineWidth(1);
+    Mv->SetFillColor(Mv->GetLineColor());
+    Mv->SetFillStyle(4010); // 10% transparent
     Nv = new TGeoVolume("ITSssdConeN",N,SSDfs);
     Nv->SetVisibility(kTRUE);
+    Nv->SetLineColor(2); // red
+    Nv->SetLineWidth(1);
+    Nv->SetFillColor(Nv->GetLineColor());
+    Nv->SetFillStyle(4010); // 10% transparent
     Ov = new TGeoVolume("ITSssdConeO",O,SSDcf);
     Ov->SetVisibility(kTRUE);
-    Ov->SetLineColor(4);
-    Ov->SetLineWidth(4);
+    Ov->SetLineColor(4); // blue
+    Ov->SetLineWidth(1);
+    Ov->SetFillColor(Iv->GetLineColor());
+    Ov->SetFillStyle(4010); // 10% transparent
     Pv = new TGeoVolume("ITSssdConeP",P,SSDfs);
     Pv->SetVisibility(kTRUE);
+    Pv->SetLineColor(2); // red
+    Pv->SetLineWidth(1);
+    Pv->SetFillColor(Pv->GetLineColor());
+    Pv->SetFillStyle(4010); // 10% transparent
     Qv = new TGeoVolume("ITSssdConeQ",Q,SSDss);
     Qv->SetVisibility(kTRUE);
+    Qv->SetLineColor(1); // black
+    Qv->SetLineWidth(1);
+    Qv->SetFillColor(Qv->GetLineColor());
+    Qv->SetFillStyle(4010); // 10% transparent
     Rv = new TGeoVolume("ITSssdConeR",R,SSDair);
     Rv->SetVisibility(kTRUE);
+    Rv->SetLineColor(5); // yellow
+    Rv->SetLineWidth(1);
+    Rv->SetFillColor(Rv->GetLineColor());
+    Rv->SetFillStyle(4010); // 10% transparent
     Sv = new TGeoVolume("ITSssdConeS",S,SSDair);
     Sv->SetVisibility(kTRUE);
+    Sv->SetLineColor(5); // yellow
+    Sv->SetLineWidth(1);
+    Sv->SetFillColor(Sv->GetLineColor());
+    Sv->SetFillStyle(4010); // 10% transparent
     Tv = new TGeoVolume("ITSssdConeT",T,SSDal);
     Tv->SetVisibility(kTRUE);
+    Tv->SetLineColor(17); // gray
+    Tv->SetLineWidth(1);
+    Tv->SetFillColor(Tv->GetLineColor());
+    Tv->SetFillStyle(4010); // 10% transparent
     Uv = new TGeoVolume("ITSssdConeU",U,SSDal);
     Uv->SetVisibility(kTRUE);
+    Uv->SetLineColor(17); // gray
+    Uv->SetLineWidth(1);
+    Uv->SetFillColor(Uv->GetLineColor());
+    Uv->SetFillStyle(4010); // 10% transparent
     //
     TGeoTranslation *tran = new TGeoTranslation("ITSssdConeTrans",0.0,0.0,-Z0);
-    TGeoRotation *rot180  = new TGeoRotation("ITSssdConeRot180",0.0,180.0,0.0);
+    TGeoRotation *rot180  = new TGeoRotation("",0.0,180.0,0.0);
     TGeoCombiTrans *flip  = new TGeoCombiTrans("ITSssdConeFlip",0.0,0.0,Z0,rot180);
+    delete rot180;// rot not explicity used in AddNode functions.
     TGeoTranslation *tranR,*tranS;
     TGeoCombiTrans *fliptran,*rottran;
     TGeoRotation *rot,*zspoaks,*zspoaks180;
+    Int_t NcD=1,NcE=1,NcQ=1,NcR=1,NcS=1,NcT=1,NcU=1;
     Av->AddNode(Bv,1,0);
     Av->AddNode(Cv,1,0);
     Moth->AddNode(Av,1,tran); // RB24 side
@@ -1727,13 +2306,26 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
      zspoaks180 =  new TGeoRotation("",0.0,180.0,
                            ((Double_t)i*360.)/((Double_t)Nspoaks));
      fliptran = new TGeoCombiTrans("",0.0,0.0,Z0,zspoaks180);
+     delete zspoaks180;// rot not explicity used in AddNode functions.
      Moth->AddNode(Gv,Nspoaks+i+1,fliptran); // RB26 side
     } // end for i
     Iv->AddNode(Jv,1,0);
     Iv->AddNode(Kv,1,0);
     Ov->AddNode(Pv,1,0);
-    //Pv->AddNode(Qv,2,?); // Screw head
-    //Pv->AddNode(Qv,3,?); // Screw head
+    t0 = (P->GetPhi1()+0.5*P->GetDphi())*kRadian;
+    t  = (0.25* P->GetDphi())*kRadian;
+    z[0] = 0.5*(P->GetRmin(2)+P->GetRmax(2))+
+          0.25*(P->GetRmax(2)-P->GetRmin(2));
+    x = z[0]*TMath::Cos(t0+t);
+    y = z[0]*TMath::Sin(t0+t);
+    tran = new TGeoTranslation("",x,y,P->GetZ(2)-Q->GetZ(3));
+    Pv->AddNode(Qv,NcQ++,tran); // Screw head
+    z[0] = 0.5*(P->GetRmin(2)+P->GetRmax(2))-
+          0.25*(P->GetRmax(2)-P->GetRmin(2));
+    x = z[0]*TMath::Cos(t0-t);
+    y = z[0]*TMath::Sin(t0-t);
+    tran = new TGeoTranslation("",x,y,P->GetZ(2)-Q->GetZ(3));
+    Pv->AddNode(Qv,NcQ++,tran); // Screw head
     //Pv->AddNode(Vv,1,?); // Air hole in Posts
     //Pv->AddNode(Vv,2,?); // Air hole in Posts
     //Mv->AddNode(Wv,1,?); // Air hole in Posts
@@ -1742,127 +2334,141 @@ void AliITSv11::SSDCone(TGeoVolume *Moth){
     //Nv->AddNode(Xv,2,?); // Air hole in Posts
     TGeoRotation *zposts,*zposts180;
     for(i=0;i<Nposts;i++){ // SSD Cone mounting posts
-     zposts = new TGeoRotation("",0.0,0.0,
-                      ((Double_t)i*360.)/((Double_t)Nposts));
-     rottran = new TGeoCombiTrans("",0.0,0.0,-Z0,zposts);
-     Moth->AddNode(Ov,i+1,rottran); // RB24 side
-     Jv->AddNode(Mv,i+1,zposts);
-     Iv->AddNode(Nv,i+1,zposts);
-     //Jv->AddNode(Xv,2*i+3,?); // Air hole in Posts
-     //Jv->AddNode(Xv,2*i+4,?); // Air hole in Posts
-     zposts180 = new TGeoRotation("",0.0,180.0,
-                      ((Double_t)i*360.)/((Double_t)Nposts));
-     fliptran = new TGeoCombiTrans("",0.0,0.0,Z0,zposts180);
-     Moth->AddNode(Ov,Nposts+i+1,fliptran); // RB26 side
+        zposts = new TGeoRotation("",0.0,0.0,
+                                  ((Double_t)i*360.)/((Double_t)Nposts));
+        rottran = new TGeoCombiTrans("",0.0,0.0,-Z0,zposts);
+        Moth->AddNode(Ov,i+1,rottran); // RB24 side
+        Jv->AddNode(Mv,i+1,zposts);
+        Iv->AddNode(Nv,i+1,zposts);
+        //Jv->AddNode(Xv,2*i+3,?); // Air hole in Posts
+        //Jv->AddNode(Xv,2*i+4,?); // Air hole in Posts
+        zposts180 = new TGeoRotation("",0.0,180.0,
+                                     ((Double_t)i*360.)/((Double_t)Nposts));
+        fliptran = new TGeoCombiTrans("",0.0,0.0,Z0,zposts180);
+        delete zposts180;// rot not explicity used in AddNode functions.
+        Moth->AddNode(Ov,Nposts+i+1,fliptran); // RB26 side
     } // end for i
     //
     for(i=0;i<NinScrews;i++){
-     t = Phi0Screws+360.*((Double_t)i)/((Double_t)NinScrews);
-     t *= TMath::DegToRad();
-     tran= new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
-                      RcylinderScrews*TMath::Sin(t),0.0);
-     Kv->AddNode(Qv,i+4,rottran);
-     if(/*not where volumes U and T are*/kTRUE){
-         tranR = new TGeoTranslation("",RinHole*TMath::Cos(t),
-                         RinHole*TMath::Sin(t),
-                         K->GetZ(2)+R->GetDz());
-         tranS = new TGeoTranslation("",RinHole*TMath::Cos(t),
-                         RinHole*TMath::Sin(t),
-                         I->GetZ(4)+S->GetDz());
-         Kv->AddNode(Rv,i,tranR);
-         Iv->AddNode(Sv,i,tranS);
-     } // end if
+        t = (Phi0Screws+360.*((Double_t)i)/((Double_t)NinScrews))*kRadian;
+        tran= new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
+                                  RcylinderScrews*TMath::Sin(t),0.0);
+        Kv->AddNode(Qv,NcQ++,tran);
+        tran = new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
+                                  RcylinderScrews*TMath::Sin(t),
+                                   CB->GetZ(0)+D->GetDz());
+        CBv->AddNode(Dv,NcD++,tran);
+        tran = new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
+                                  RcylinderScrews*TMath::Sin(t),
+                                   CB->GetZ(5)-D->GetDz());
+        CBv->AddNode(Dv,NcD++,tran);
+        if(/*not where volumes U and T are*/kTRUE){
+            tranR = new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
+                                        RcylinderScrews*TMath::Sin(t),
+                                        K->GetZ(2)+R->GetDz());
+            tranS = new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
+                                        RcylinderScrews*TMath::Sin(t),
+                                        I->GetZ(4)+S->GetDz());
+            Kv->AddNode(Rv,NcR++,tranR);
+            Iv->AddNode(Sv,NcS++,tranS);
+        } // end if
     } // end for i
-    Int_t NcD=1,NcE=1,NcR=1,NcS=1;
     const Int_t Nbscrew=2,Nbpins=3,Nrailsc=4,Nrailp=2;
     Double_t da[] = {-3.5,-1.5,1.5,3.5};
     for(i=0;i<2;i++){ // Mounting for ITS-TPC bracket or ITS-Rails
-     t0 = TMath::Pi()*((Double_t)i);
-     for(j=-Nbscrew/2;j<=Nbscrew/2;j++)if(j!=0){//screws per ITS-TPC bracket
-         t = t0 + 5.0*((Double_t)j)*TMath::DegToRad();
-         tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
-                          RoutHole*TMath::Sin(t),
-                          B->GetZ(0)-D->GetDz());
-         Bv->AddNode(Dv,NcD,tran);
-              //if(fDebug) cout << "D: NcD="<<NcD<<endl;
-         NcD++;
-     } // end or j
-     for(j=-Nbpins/2;j<=Nbpins/2;j++){ // pins per ITS-TPC bracket
-         t = t0 + 3.0*((Double_t)j)*TMath::DegToRad();
-         tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
-                          RoutHole*TMath::Sin(t),
-                          B->GetZ(0)-D->GetDz());
-         Bv->AddNode(Ev,NcE,tran);
-              //if(fDebug) cout << "E: NcE="<<NcE<<endl;
-         NcE++;
-     } // end or j
-     t0 = (96.5+187.*((Double_t)i))*TMath::DegToRad();
-     for(j=0;j<Nrailsc;j++){ // screws per ITS-rail bracket
-         t = t0+da[j]*TMath::DegToRad();
-         tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
-                          RoutHole*TMath::Sin(t),
-                          B->GetZ(0)-D->GetDz());
-         Bv->AddNode(Dv,NcD,tran);
-              //if(fDebug) cout << "D2: NcD="<<NcD<<endl;
-         NcD++;
-     } // end or j
-     t0 = (91.5+184.*((Double_t)i))*TMath::DegToRad();
-     for(j=-Nrailp/2;j<=Nrailp/2;j++)if(j!=0){ // pins per ITS-rail bracket
-         t = t0+(7.0*((Double_t)j))*TMath::DegToRad();
-         tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
-                          RoutHole*TMath::Sin(t),
-                          B->GetZ(0)-D->GetDz());
-         Bv->AddNode(Ev,NcE,tran);
-              //if(fDebug) cout << "E2: NcE="<<NcE<<endl;
-         NcE++;
-     } // end or j
+        t0 = 180.*((Double_t)i)*kRadian;
+        for(j=-Nbscrew/2;j<=Nbscrew/2;j++)if(j!=0){//screws per ITS-TPC bracket
+            t = t0 + 5.0*((Double_t)j)*kRadian;
+            tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
+                                       RoutHole*TMath::Sin(t),
+                                       B->GetZ(0)+D->GetDz());
+            Bv->AddNode(Dv,NcD++,tran);
+        } // end or j
+        for(j=-Nbpins/2;j<=Nbpins/2;j++){ // pins per ITS-TPC bracket
+            t = t0 + 3.0*((Double_t)j)*kRadian;
+            tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
+                                       RoutHole*TMath::Sin(t),
+                                       B->GetZ(0)+D->GetDz());
+            Bv->AddNode(Ev,NcE++,tran);
+        } // end or j
+        t0 = (96.5+187.*((Double_t)i))*kRadian;
+        for(j=0;j<Nrailsc;j++){ // screws per ITS-rail bracket
+            t = t0+da[j]*kRadian;
+            tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
+                                       RoutHole*TMath::Sin(t),
+                                       B->GetZ(0)+D->GetDz());
+            Bv->AddNode(Dv,NcD++,tran);
+        } // end or j
+        t0 = (91.5+184.*((Double_t)i))*kRadian;
+        for(j=-Nrailp/2;j<=Nrailp/2;j++)if(j!=0){ // pins per ITS-rail bracket
+            t = t0+(7.0*((Double_t)j))*kRadian;
+            tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
+                                       RoutHole*TMath::Sin(t),
+                                       B->GetZ(0)+D->GetDz());
+            Bv->AddNode(Ev,NcE++,tran);
+        } // end or j
     } // end for i
     for(i=0;i<Nmounts;i++){ // mounting points for SPD-cone+Beam-pipe support
-     t0 = (45.0+((Double_t)i)*360./((Double_t)Nmounts))*TMath::DegToRad();
-     for(j=-1;j<=1;j++)if(j!=0){ // 2 screws per bracket
-         t = t0+((Double_t)j)*0.5*DmountAngle;
-         tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
-                          RoutHole*TMath::Sin(t),
-                          B->GetZ(0)-D->GetDz());
-         Bv->AddNode(Dv,NcD,tran);
-              //if(fDebug) cout << "D3: NcD="<<NcD<<endl;
-         NcD++;
-     } // end for j
-     for(j=0;j<1;j++){ // 1 pin per bracket
-         t = t0;
-         tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
-                          RoutHole*TMath::Sin(t),
-                          B->GetZ(0)-D->GetDz());
-         Bv->AddNode(Ev,NcE,tran);
-              //if(fDebug) cout << "E3: NcE="<<NcE<<endl;
-         NcE++;
-     } // end for j
+        t0 = (45.0+((Double_t)i)*360./((Double_t)Nmounts))*kRadian;
+        for(j=-1;j<=1;j++)if(j!=0){ // 2 screws per bracket
+            t = t0+((Double_t)j)*0.5*DmountAngle*kRadian;
+            tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
+                                       RoutHole*TMath::Sin(t),
+                                       B->GetZ(0)+D->GetDz());
+            Bv->AddNode(Dv,NcD++,tran);
+        } // end for j
+        for(j=0;j<1;j++){ // 1 pin per bracket
+            t = t0;
+            tran = new TGeoTranslation("",RoutHole*TMath::Cos(t),
+                                       RoutHole*TMath::Sin(t),
+                                       B->GetZ(0)+D->GetDz());
+            Bv->AddNode(Ev,NcE++,tran);
+        } // end for j
     } // end for i
-    tran = new TGeoTranslation("",TMath::Cos(T->GetPhi1()+0.5*T->GetDphi()),
-                     TMath::Sin(T->GetPhi1()+0.5*T->GetDphi()),
-                     T->GetZ(T->GetNz()-1)+R->GetDz());
+    t = (T->GetPhi1()+0.5*T->GetDphi())*kRadian;
+    tran = new TGeoTranslation("",RinHole*TMath::Cos(t),RinHole*TMath::Sin(t),
+                               T->GetZ(T->GetNz()-1)+R->GetDz());
     Tv->AddNode(Rv,NcR++,tran);
-    tran = new TGeoTranslation("",TMath::Cos(U->GetPhi1()+0.5*U->GetDphi()),
-                     TMath::Sin(U->GetPhi1()+0.5*U->GetDphi()),
-                     U->GetZ(U->GetNz()-1)+S->GetDz());
+    t = (U->GetPhi1()+0.5*U->GetDphi())*kRadian;
+    tran = new TGeoTranslation("",RinHole*TMath::Cos(t),RinHole*TMath::Sin(t),
+                               U->GetZ(U->GetNz()-1)+S->GetDz());
     Uv->AddNode(Sv,NcS++,tran);
     for(i=0;i<NssdSupports;i++){ // mounting braclets for SSD/SDD 
-     t0 = ((Double_t)i*360./((Double_t)NssdSupports));
-     rot = new TGeoRotation("",0.0,0.0,t0);
-     Kv->AddNode(Tv,i+1,rot);
-     Iv->AddNode(Uv,i+1,rot);
-          //if(fDebug) cout << "T/U: copy number="<<i+1<<endl;
-     //for(j=0;j<1;j++){ // 1 screws per bracket
-     //    t = t0;
-     //} // end for j
-     for(j=0;j<2;j++)if(j!=0){ // 2 pin per bracket
-         t = t0 + ((Double_t)j)*0.5*DssdsddBracketAngle;
-         tran = new TGeoTranslation("",RinHole*TMath::Cos(t),
-                     RinHole*TMath::Sin(t),
-                     T->GetZ(T->GetNz()-1)-E->GetDz());
-         Kv->AddNode(Ev,NcE++,tran);
-     } // end for j
+        t0 = ((Double_t)i*360./((Double_t)NssdSupports));
+        rot = new TGeoRotation("",0.0,0.0,t0);
+        Kv->AddNode(Tv,NcT++,rot);
+        Iv->AddNode(Uv,NcU++,rot);
+        for(j=0;j<2;j++)if(j!=0){ // 2 pin per bracket
+            t = t0 + ((Double_t)j)*0.5*DssdsddBracketAngle;
+            tran = new TGeoTranslation("",RinHole*TMath::Cos(t),
+                                       RinHole*TMath::Sin(t),
+                                       T->GetZ(T->GetNz()-1)-E->GetDz());
+            Kv->AddNode(Ev,NcE++,tran);
+        } // end for j
     } // end for i
+    if(GetDebug()){
+        Av->PrintNodes();
+        Bv->PrintNodes();
+        Cv->PrintNodes();
+        Dv->PrintNodes();
+        Ev->PrintNodes();
+        Fv->PrintNodes();
+        Gv->PrintNodes();
+        Hv->PrintNodes();
+        Iv->PrintNodes();
+        Jv->PrintNodes();
+        Kv->PrintNodes();
+        Lv->PrintNodes();
+        Mv->PrintNodes();
+        Nv->PrintNodes();
+        Ov->PrintNodes();
+        Pv->PrintNodes();
+        Qv->PrintNodes();
+        Rv->PrintNodes();
+        Sv->PrintNodes();
+        Tv->PrintNodes();
+        Uv->PrintNodes();
+    } // end if
 }
 //______________________________________________________________________
 void AliITSv11::CreateMaterials(){
@@ -1930,6 +2536,365 @@ void AliITSv11::CreateMaterials(){
     new TGeoMedium("ITSssdAl",6,Al,SSDcone);
 }
 //______________________________________________________________________
+void AliITSv11::ServicesCableSupport(TGeoVolume *Moth){
+    // Define the detail ITS cable support trays on both the RB24 and 
+    // RB26 sides..
+    // Inputs:
+    //   none.
+    // Outputs:
+    //  none.
+    // Return:
+    //  none.
+    // Based on the Drawings SSup_201A.jpg unless otherwise stated, 
+    // Volumes A..., 
+    TGeoMedium *SUPcf    = 0; // SUP support cone Carbon Fiber materal number.
+    TGeoMedium *SUPfs    = 0; // SUP support cone inserto stesalite 4411w.
+    TGeoMedium *SUPfo    = 0; // SUP support cone foam, Rohacell 50A.
+    TGeoMedium *SUPss    = 0; // SUP support cone screw material,Stainless
+    TGeoMedium *SUPair   = 0; // SUP support cone Air
+    TGeoMedium *SUPal    = 0; // SUP support cone SDD mounting bracket Al
+    TGeoMedium *SUPwater = 0; // SUP support cone Water
+    TGeoManager *mgr = gGeoManager;
+    SUPcf    = mgr->GetMedium("ITSssdCarbonFiber");
+    SUPfs    = mgr->GetMedium("ITSssdStaselite4411w");
+    SUPfo    = mgr->GetMedium("ITSssdRohacell50A");
+    SUPss    = mgr->GetMedium("ITSssdStainlessSteal");
+    SUPair   = mgr->GetMedium("ITSssdAir");
+    SUPal    = mgr->GetMedium("ITSssdAl");
+    SUPwater = mgr->GetMedium("ITSssdWater");
+    //
+    Int_t i,j;
+    Double_t x,y,z,t,t0,dt,di,r;
+
+    // RB 24 side
+    const Double_t Z024         = 900*kmm;//SSup_203A.jpg
+    const Double_t ThssFrame24  = 5.0*kmm;
+    const Double_t RssFrame24   = 444.5*kmm-ThssFrame24; // SSup_204A.jpg
+    const Double_t WidthFrame24 = 10.0*kmm;
+    const Double_t HightFrame24 = 10.0*kmm;
+    const Double_t Phi0Frame24  = 15.2*kDegree; // SSup_602A.jpg
+    const Double_t Phi1Frame24  = (90.0-7.6)*kDegree; // SSup_802A.jpg
+    const Double_t ZssFrameSection24 = (415.0-10.0)*kmm;
+    const Int_t    NZsections24      = 4;
+    const Int_t    NPhiSections24    = 4;
+    const Int_t    NFramesPhi24      = 4;
+    TGeoTubeSeg *A24,*M24; // Cylinderial support structure
+    TGeoBBox    *B24; // Cylinderial support structure
+
+    M24 = new TGeoTubeSeg("ITS sup Cable tray support frame mother volume M24",
+                          RssFrame24,RssFrame24+ThssFrame24,
+                          0.5*(4.*ZssFrameSection24+5*WidthFrame24),
+                          Phi0Frame24,Phi1Frame24);
+    A24 = new TGeoTubeSeg("ITS sup Cable tray support frame radial section A24",
+                          RssFrame24,RssFrame24+ThssFrame24,0.5*WidthFrame24,
+                          Phi0Frame24,Phi1Frame24);
+    B24 = new TGeoBBox("ITS sup Cable tray support frame Z section B24",
+                       0.5*ThssFrame24,0.5*HightFrame24,0.5*ZssFrameSection24);
+    printTubeSeg(A24);
+    printTubeSeg(M24);
+    printBBox(B24);
+    TGeoVolume *A24v,*B24v,*M24v;
+    TGeoTranslation *tran;
+    TGeoRotation    *rot;
+    TGeoCombiTrans  *tranrot;
+    //
+    A24v = new TGeoVolume("ITSsupFrameA24",A24,SUPss);
+    A24v->SetVisibility(kTRUE);
+    A24v->SetLineColor(1); // black
+    A24v->SetLineWidth(1);
+    A24v->SetFillColor(A24v->GetLineColor());
+    A24v->SetFillStyle(4000); // 0% transparent
+    B24v = new TGeoVolume("ITSsupFrameB24",B24,SUPss);
+    B24v->SetVisibility(kTRUE);
+    B24v->SetLineColor(1); // black
+    B24v->SetLineWidth(1);
+    B24v->SetFillColor(B24v->GetLineColor());
+    B24v->SetFillStyle(4000); // 0% transparent
+    M24v = new TGeoVolume("ITSsupFrameM24",M24,SUPair);
+    M24v->SetVisibility(kTRUE);
+    M24v->SetLineColor(7); // light blue
+    M24v->SetLineWidth(1);
+    M24v->SetFillColor(M24v->GetLineColor());
+    M24v->SetFillStyle(4090); // 90% transparent
+    //
+    Int_t NcA24=1,NcB24=1;
+    t0 = Phi0Frame24;
+    dt = (Phi1Frame24-Phi0Frame24)/((Double_t)NPhiSections24);
+    for(i=0;i<=NZsections24;i++){
+        di = (Double_t) i;
+        z = -M24->GetDz()+A24->GetDz() + di*(ZssFrameSection24+WidthFrame24);
+        tran = new TGeoTranslation("",0.0,0.0,z);
+        M24v->AddNode(A24v,NcA24++,tran);
+        r = RssFrame24+B24->GetDX();
+        z = z + A24->GetDz()+B24->GetDZ();
+       if(i<NZsections24) for(j=0;j<=NPhiSections24;j++){
+            t = t0 + ((Double_t)j)*dt;
+            rot = new TGeoRotation("",0.0,0.0,t);
+            y = r*TMath::Sin(t*kRadian);
+            x = r*TMath::Cos(t*kRadian);
+            tranrot = new TGeoCombiTrans("",x,y,z,rot);
+            delete rot;// rot not explicity used in AddNode functions.
+            M24v->AddNode(B24v,NcB24++,tranrot);
+        } // end for j
+    } // end for i
+    tran = new TGeoTranslation("",0.0,0.0,Z024+M24->GetDz());
+    Moth->AddNode(M24v,1,tran);
+    for(i=1;i<NFramesPhi24;i++){
+        di = (Double_t) i;
+        rot = new TGeoRotation("",0.0,0.0,90.0*di);
+        tranrot = new TGeoCombiTrans("",0.0,0.0,Z024+M24->GetDz(),rot);
+        delete rot;// rot not explicity used in AddNode functions.
+        Moth->AddNode(M24v,i+1,tranrot);
+    } // end for i
+    if(GetDebug()){
+        A24v->PrintNodes();
+        B24v->PrintNodes();
+        M24v->PrintNodes();
+    } // end if
+    // Cable support tray 
+    // Material is Aluminum
+    const Double_t RS24in     = TMath::Max(RssFrame24,444.5*kmm);
+                                           // SSup_204A & SSup_206A
+    const Double_t RS24Airout = 459.5*kmm; // SSup_204A & SSup_206A
+    const Double_t RS24out    = 494.5*kmm; // SSup_206A & SSup_204A
+    const Double_t RS24PPout  = 550.0*kmm; // SSup_206A
+    const Double_t LS24PP     = 350.0*kmm; // SSup_202A
+    const Double_t LS24       = (2693.0-900.0)*kmm; //SSup_205A & SSup_207A
+    const Double_t ThS24wall  = 1.0*kmm; // SSup_209A & SSup_210A
+    const Double_t WbS24      = 42.0*kmm; // SSup_209A & SSup_210A
+    const Double_t WtS24      = 46.9*kmm; // SSup_209A & SSup_210A
+    const Double_t WcapS24    = 50.0*kmm; // SSup_209A & SSup_210A
+    const Double_t WdS24      = 41.0*kmm; // SSup_209A ? should be 41.46938776
+    const Double_t HS24       = 50.0*kmm; // SSup_209A & SSup_210A
+    const Double_t OutDcoolTub= 12.0*kmm; // SSup_209A
+    const Double_t InDcoolTub = 10.0*kmm; // SSup_209A
+    const Double_t BlkNozInDS24= 6.0*kmm; // SSup_209A
+    // The following are deduced or guessed at
+    const Double_t LtopLipS24 = 6.0*kmm; // Guessed at.
+    const Double_t LdLipS24   = 6.0*kmm; // Guessed at.
+    const Double_t HdS24      = OutDcoolTub; //
+    const Double_t BlkNozZS24 = 6.0*kmm; // Guessed at.
+    // Simplifided exterior shape. The side wall size is 2.5*thicker than
+    // it should be (due to simplification).
+    TGeoArb8 *C24 = new TGeoArb8("ITS Sup Cable Tray Element C24",0.5*LS24);
+    C24->SetVertex(0,-0.5*WcapS24,HS24+ThS24wall);
+    C24->SetVertex(1,+0.5*WcapS24,HS24+ThS24wall);
+    C24->SetVertex(2,+0.5*WbS24,0.0);
+    C24->SetVertex(3,-0.5*WbS24,0.0);
+    C24->SetVertex(4,-0.5*WcapS24,HS24+ThS24wall);
+    C24->SetVertex(5,+0.5*WcapS24,HS24+ThS24wall);
+    C24->SetVertex(6,+0.5*WbS24,0.0);
+    C24->SetVertex(7,-0.5*WbS24,0.0);
+    TGeoArb8 *D24 = new TGeoArb8("ITS Sup Cable Tray lower Element D24",
+                                 0.5*LS24);
+    // Because of question about the value of WdS24, compute what it
+    // should be assuming cooling tube fixes hight of volume.
+    x = OutDcoolTub*(0.5*WcapS24-0.5*WbS24-ThS24wall)/(HS24-ThS24wall);
+    D24->SetVertex(0,-x,OutDcoolTub+ThS24wall);
+    D24->SetVertex(1,+x,OutDcoolTub+ThS24wall);
+    D24->SetVertex(2,+0.5*WbS24-ThS24wall,ThS24wall);
+    D24->SetVertex(3,-0.5*WbS24+ThS24wall,ThS24wall);
+    D24->SetVertex(4,-x,OutDcoolTub+ThS24wall);
+    D24->SetVertex(5,+x,OutDcoolTub+ThS24wall);
+    D24->SetVertex(6,+0.5*WbS24-ThS24wall,ThS24wall);
+    D24->SetVertex(7,-0.5*WbS24+ThS24wall,ThS24wall);
+    TGeoTube *E24 = new TGeoTube("ITS Sup Cooling Tube E24",0.5*InDcoolTub,
+                                 0.5*OutDcoolTub,0.5*LS24-BlkNozZS24);
+    TGeoArb8 *F24 = new TGeoArb8("ITS Sup Cable Tray lower Element block F24",
+                                 0.5*BlkNozZS24);
+    for(i=0;i<8;i++) F24->SetVertex(i,D24->GetVertices()[i*2+0],
+                                      D24->GetVertices()[i*2+1]); //
+    TGeoTube *G24 = new TGeoTube("ITS Sup Cooling Tube hole in block G24",
+                                 0.0,0.5*BlkNozInDS24,0.5*BlkNozZS24);
+    TGeoArb8 *H24 = new TGeoArb8("ITS Sup Cable Tray upper Element H24",
+                                 0.5*(LS24- LS24PP));
+    H24->SetVertex(0,C24->GetVertices()[0*2+0]+2.*ThS24wall,
+                     C24->GetVertices()[0*2+1]-ThS24wall);
+    H24->SetVertex(1,C24->GetVertices()[1*2+0]-2.*ThS24wall,
+                     C24->GetVertices()[1*2+1]-ThS24wall);
+    H24->SetVertex(2,D24->GetVertices()[1*2+0]-ThS24wall,
+                     D24->GetVertices()[1*2+1]+ThS24wall);
+    H24->SetVertex(3,D24->GetVertices()[0*2+0]+ThS24wall,
+                     D24->GetVertices()[0*2+1]+ThS24wall);
+    for(i=4;i<8;i++) H24->SetVertex(i,H24->GetVertices()[(i-4)*2+0],
+                                      H24->GetVertices()[(i-4)*2+1]); //
+    printArb8(C24);
+    printArb8(D24);
+    printTube(E24);
+    printArb8(F24);
+    printTube(G24);
+    printArb8(H24);
+    TGeoVolume *C24v,*D24v,*E24v,*F24v,*Ga24v,*Gw24v,*Gf24v,*H24v;
+    //
+    C24v = new TGeoVolume("ITSsupCableTrayC24",C24,SUPal);
+    C24v->SetVisibility(kTRUE);
+    C24v->SetLineColor(6); //
+    C24v->SetLineWidth(1);
+    C24v->SetFillColor(C24v->GetLineColor());
+    C24v->SetFillStyle(4000); // 0% transparent
+    D24v = new TGeoVolume("ITSsupCableTrayLowerD24",D24,SUPair);
+    D24v->SetVisibility(kTRUE);
+    D24v->SetLineColor(6); //
+    D24v->SetLineWidth(1);
+    D24v->SetFillColor(D24v->GetLineColor());
+    D24v->SetFillStyle(4000); // 0% transparent
+    E24v = new TGeoVolume("ITSsupCableTrayCoolTubeE24",E24,SUPss);
+    E24v->SetVisibility(kTRUE);
+    E24v->SetLineColor(6); //
+    E24v->SetLineWidth(1);
+    E24v->SetFillColor(E24v->GetLineColor());
+    E24v->SetFillStyle(4000); // 0% transparent
+    F24v = new TGeoVolume("ITSsupCableTrayBlockF24",F24,SUPal);
+    F24v->SetVisibility(kTRUE);
+    F24v->SetLineColor(6); //
+    F24v->SetLineWidth(1);
+    F24v->SetFillColor(F24v->GetLineColor());
+    F24v->SetFillStyle(4000); // 0% transparent
+    Gw24v = new TGeoVolume("ITSsupCableTrayCoolantWaterG24",G24,SUPwater);
+    Gw24v->SetVisibility(kTRUE);
+    Gw24v->SetLineColor(6); //
+    Gw24v->SetLineWidth(1);
+    Gw24v->SetFillColor(Gw24v->GetLineColor());
+    Gw24v->SetFillStyle(4000); // 0% transparent
+    Ga24v = new TGeoVolume("ITSsupCableTrayCoolantAirG24",G24,SUPair);
+    Ga24v->SetVisibility(kTRUE);
+    Ga24v->SetLineColor(6); //
+    Ga24v->SetLineWidth(1);
+    Ga24v->SetFillColor(Ga24v->GetLineColor());
+    Ga24v->SetFillStyle(4000); // 0% transparent
+    H24v = new TGeoVolume("ITSsupCableTrayUpperC24",H24,SUPair);
+    H24v->SetVisibility(kTRUE);
+    H24v->SetLineColor(6); //
+    H24v->SetLineWidth(1);
+    H24v->SetFillColor(H24v->GetLineColor());
+    H24v->SetFillStyle(4000); // 0% transparent
+    //
+    tran = new TGeoTranslation("",-OutDcoolTub,OutDcoolTub+ThS24wall,0.0);
+    F24v->AddNode(Gw24v,1,tran);
+    D24v->AddNode(E24v,1,tran);
+    tran = new TGeoTranslation("",0.0,OutDcoolTub+ThS24wall,0.0);
+    F24v->AddNode(Gw24v,2,tran);
+    D24v->AddNode(E24v,2,tran);
+    tran = new TGeoTranslation("",+OutDcoolTub,OutDcoolTub+ThS24wall,0.0);
+    F24v->AddNode(Gw24v,3,tran);
+    D24v->AddNode(E24v,3,tran);
+    tran = new TGeoTranslation("",0.0,0.0,0.5*LS24-0.5*BlkNozZS24);
+    D24v->AddNode(F24v,1,tran);
+    tran = new TGeoTranslation("",0.0,0.0,-(0.5*LS24-0.5*BlkNozZS24));
+    D24v->AddNode(F24v,2,tran);
+    C24v->AddNode(D24v,1,0);
+    C24v->AddNode(H24v,1,0);
+    //==================================================================
+    //
+    // RB 26 side
+    const Double_t Z026         = -900*kmm;//SSup_203A.jpg
+    const Double_t ThssFrame26  = 5.0*kmm;
+    const Double_t R0ssFrame26  = 444.5*kmm-ThssFrame26; // SSup_204A.jpg
+    const Double_t R1ssFrame26  = 601.6*kmm-ThssFrame26; // SSup_208A.jpg
+    const Double_t WidthFrame26 = 10.0*kmm;
+    //const Double_t HightFrame26 = 10.0*kmm;
+    const Double_t Phi0Frame26  = 15.2*kDegree; // SSup_602A.jpg
+    const Double_t Phi1Frame26  = (90.0-7.6)*kDegree; // SSup_802A.jpg
+    const Double_t ZssFrameSection26 = (415.0-10.0)*kmm;
+    const Int_t    NZsections26      = 4;
+    const Int_t    NPhiSections26    = 4;
+    const Int_t    NFramesPhi26      = 4;
+    TGeoConeSeg *A26[NZsections26+1],*M26; // Cylinderial support structure
+    TGeoArb8     *B26; // Cylinderial support structure
+    Char_t name[100];
+    Double_t r1,r2,m;
+
+    M26 = new TGeoConeSeg("ITS sup Cable tray support frame mother volume M26",
+                         0.5*(4.*ZssFrameSection26+5*WidthFrame26),
+                          R1ssFrame26,R1ssFrame26+ThssFrame26,
+                          R0ssFrame26,R0ssFrame26+ThssFrame26,
+                          Phi0Frame26,Phi1Frame26);
+    m = -((R1ssFrame26-R0ssFrame26)/
+         (((Double_t)NZsections26)*(ZssFrameSection26+WidthFrame26)));
+    for(i=0;i<NZsections26+1;i++){
+        di = ((Double_t) i)*(ZssFrameSection26+WidthFrame26);
+        sprintf(name,
+                "ITS sup Cable tray support frame radial section A26[%d]",i);
+        r1 = R1ssFrame26+m*di;
+        r2 = R1ssFrame26+m*(di+WidthFrame26);
+        A26[i] = new TGeoConeSeg(name,0.5*WidthFrame26,r2,r2+ThssFrame26,
+                                 r1,r1+ThssFrame26,Phi0Frame26,Phi1Frame26);
+    } // end for i
+    B26 = new TGeoArb8("ITS sup Cable tray support frame Z section B26",
+                       0.5*ZssFrameSection26);
+    r = 0.25*(A26[0]->GetRmax1()+A26[0]->GetRmin1()+
+              A26[1]->GetRmax2()+A26[1]->GetRmin2());
+    B26->SetVertex(0,A26[0]->GetRmax2()-r,+0.5*WidthFrame26);
+    B26->SetVertex(1,A26[0]->GetRmax2()-r,-0.5*WidthFrame26);
+    B26->SetVertex(2,A26[0]->GetRmin2()-r,-0.5*WidthFrame26);
+    B26->SetVertex(3,A26[0]->GetRmin2()-r,+0.5*WidthFrame26);
+    B26->SetVertex(4,A26[1]->GetRmax1()-r,+0.5*WidthFrame26);
+    B26->SetVertex(5,A26[1]->GetRmax1()-r,-0.5*WidthFrame26);
+    B26->SetVertex(6,A26[1]->GetRmin1()-r,-0.5*WidthFrame26);
+    B26->SetVertex(7,A26[1]->GetRmin1()-r,+0.5*WidthFrame26);
+    for(i=0;i<NZsections26+1;i++) printConeSeg(A26[i]);
+    printConeSeg(M26);
+    printArb8(B26);
+    TGeoVolume *A26v[NZsections26+1],*B26v,*M26v;
+    //
+    for(i=0;i<NZsections26+1;i++){
+        sprintf(name,"ITSsupFrameA26[%d]",i);
+        A26v[i] = new TGeoVolume(name,A26[i],SUPss);
+        A26v[i]->SetVisibility(kTRUE);
+        A26v[i]->SetLineColor(1); // black
+        A26v[i]->SetLineWidth(1);
+        A26v[i]->SetFillColor(A26v[i]->GetLineColor());
+        A26v[i]->SetFillStyle(4000); // 0% transparent
+    } // end for i
+    B26v = new TGeoVolume("ITSsupFrameB26",B26,SUPss);
+    B26v->SetVisibility(kTRUE);
+    B26v->SetLineColor(1); // black
+    B26v->SetLineWidth(1);
+    B26v->SetFillColor(B26v->GetLineColor());
+    B26v->SetFillStyle(4000); // 0% transparent
+    M26v = new TGeoVolume("ITSsupFrameM26",M26,SUPair);
+    M26v->SetVisibility(kTRUE);
+    M26v->SetLineColor(7); // light blue
+    M26v->SetLineWidth(1);
+    M26v->SetFillColor(M26v->GetLineColor());
+    M26v->SetFillStyle(4090); // 90% transparent
+    //
+    Int_t NcB26=1;
+    t0 = Phi0Frame26;
+    dt = (Phi1Frame26-Phi0Frame26)/((Double_t)NPhiSections26);
+    for(i=0;i<=NZsections26;i++){
+        di = ((Double_t) i)*(ZssFrameSection26+WidthFrame26);
+        z = -M26->GetDz()+A26[i]->GetDz() + di;
+        tran = new TGeoTranslation("",0.0,0.0,z);
+        M26v->AddNode(A26v[i],1,tran);
+        z = z+B26->GetDz();
+        if(i<NZsections26)for(j=0;j<=NPhiSections26;j++){
+            r = 0.25*(A26[i]->GetRmax1()+A26[i]->GetRmin1()+
+                      A26[i+1]->GetRmax2()+A26[i+1]->GetRmin2());
+            t = t0 + ((Double_t)j)*dt;
+            rot = new TGeoRotation("",0.0,0.0,t);
+            y = r*TMath::Sin(t*kRadian);
+            x = r*TMath::Cos(t*kRadian);
+            tranrot = new TGeoCombiTrans("",x,y,z,rot);
+            delete rot; // rot not explicity used in AddNode functions.
+            M26v->AddNode(B26v,NcB26++,tranrot);
+        } // end for j
+    } // end for i
+    tran = new TGeoTranslation("",0.0,0.0,Z026-M26->GetDz());
+    Moth->AddNode(M26v,1,tran);
+    for(i=1;i<NFramesPhi26;i++){
+        rot = new TGeoRotation("",0.0,0.0,90.0*((Double_t)i));
+        tranrot = new TGeoCombiTrans(*tran,*rot);
+        delete rot; // rot not explicity used in AddNode functions.
+        Moth->AddNode(M26v,i+1,tranrot);
+    } // end for i
+    if(GetDebug()){
+        for(i=0;i<NZsections26+1;i++) A26v[i]->PrintNodes();
+        B26v->PrintNodes();
+        M26v->PrintNodes();
+    } // end if
+}
+//______________________________________________________________________
 void AliITSv11::InitAliITSgeom(){
     // Based on the geometry tree defined in Geant 3.21, this
     // routine initilizes the Class AliITSgeom from the Geant 3.21 ITS