new SPD geometry - sector profile closer to reality (M. Lunardon, R. Grosso)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 20 Sep 2010 17:01:16 +0000 (17:01 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 20 Sep 2010 17:01:16 +0000 (17:01 +0000)
ITS/AliITSv11GeometrySPD.cxx
ITS/AliITSv11GeometrySPD.h

index 93416ce..02d68b3 100644 (file)
@@ -298,15 +298,18 @@ void AliITSv11GeometrySPD::SPDSector(TGeoVolume *moth, TGeoManager *mgr)
     Int_t i, j, k;
     Double_t angle, radiusSector, xAAtubeCenter0, yAAtubeCenter0;
     TGeoCombiTrans *secRot = new TGeoCombiTrans(), *comrot;
-    TGeoVolume *vCarbonFiberSector;
+    TGeoVolume *vCarbonFiberSector[10];
     TGeoMedium *medSPDcf;
 
     // Define an assembly and fill it with the support of
     // a single carbon fiber sector and staves in it
     medSPDcf = GetMedium("SPD C (M55J)$", mgr);
-    vCarbonFiberSector = new TGeoVolumeAssembly("ITSSPDCarbonFiberSectorV");
-    vCarbonFiberSector->SetMedium(medSPDcf);
-    CarbonFiberSector(vCarbonFiberSector, xAAtubeCenter0, yAAtubeCenter0, mgr);
+    for(Int_t is=0; is<10; is++)
+    {
+           vCarbonFiberSector[is] = new TGeoVolumeAssembly("ITSSPDCarbonFiberSectorV");
+           vCarbonFiberSector[is]->SetMedium(medSPDcf);
+           CarbonFiberSector(vCarbonFiberSector[is], is, xAAtubeCenter0, yAAtubeCenter0, mgr);
+    }
 
     // Compute the radial shift out of the sectors
     radiusSector = kBeamPipeRadius + kSPDclossesStaveAA + staveThicknessAA;
@@ -343,7 +346,7 @@ void AliITSv11GeometrySPD::SPDSector(TGeoVolume *moth, TGeoManager *mgr)
         secRot->SetDx(shiftX);
         secRot->SetDy(shiftY);
         comrot  = new TGeoCombiTrans(*secRot);
-        vcenteral->AddNode(vCarbonFiberSector,i+1,comrot);
+        vcenteral->AddNode(vCarbonFiberSector[i],i+1,comrot);
         for(j=0;j<2;j++)for(k=0;k<6;k++) // Transform Tube ends for each sector
             comrot->LocalToMaster(tub[j][k],fTubeEndSector[i][j][k]);
         if(GetDebug(5)) {
@@ -360,9 +363,13 @@ void AliITSv11GeometrySPD::SPDSector(TGeoVolume *moth, TGeoManager *mgr)
     CreateCones(moth);
 }
 //______________________________________________________________________
-void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth,
+void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect,
      Double_t &xAAtubeCenter0, Double_t &yAAtubeCenter0, TGeoManager *mgr)
 {
+    // The method has been modified in order to build a support sector
+    // whose shape is dependent on the sector number; the aim is to get
+    // as close as possible to the shape inferred from alignment
+    // and avoid as much as possible overlaps generated by alignment.
     //
     // Define the detail SPD Carbon fiber support Sector geometry.
     // Based on the drawings:
@@ -425,58 +432,80 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth,
     const Double_t ksecX0   = -10.725 * fgkmm;
     const Double_t ksecY0   = -14.853 * fgkmm;
     const Double_t ksecR0   =  -0.8   * fgkmm; // external
-    const Double_t ksecX1   = -13.187 * fgkmm;
-    const Double_t ksecY1   = -19.964 * fgkmm;
-    const Double_t ksecR1   =  +0.6   * fgkmm; // internal  // (modif. by Alberto)
-    //const Double_t ksecR1   =  +0.8   * fgkmm; // internal  // (modif. by Alberto)
-
-    // const Double_t ksecDip0 = 5.9 * fgkmm;
-    //
-    //const Double_t ksecX2   =  -3.883 * fgkmm;
-    const Double_t ksecX2   =  -3.833 * fgkmm; // (corr. by Alberto)
-    const Double_t ksecY2   = -17.805 * fgkmm;
-    const Double_t ksecR2   =  +0.6  * fgkmm; // internal (guess)
-    const Double_t ksecX3   =  -3.123 * fgkmm;
-    const Double_t ksecY3   = -14.618 * fgkmm;
-    const Double_t ksecR3   =  -0.6   * fgkmm; // external
-    //const Double_t ksecDip1 = 8.035 * fgkmm;
-    //
-    const Double_t ksecX4   = +11.280 * fgkmm;
-    const Double_t ksecY4   = -14.473 * fgkmm;
-    const Double_t ksecR4   =  +0.8   * fgkmm; // internal
-    const Double_t ksecX5   = +19.544 * fgkmm;
-    const Double_t ksecY5   = +10.961 * fgkmm;
-    const Double_t ksecR5   =  +0.8   * fgkmm; // internal
-    //const Double_t ksecDip2 = 4.553 * fgkmm;
-    //
-    const Double_t ksecX6   = +10.830 * fgkmm;
-    const Double_t ksecY6   = +16.858 * fgkmm;
-    const Double_t ksecR6   =  +0.6   * fgkmm; // internal
-    const Double_t ksecX7   = +11.581 * fgkmm;
-    const Double_t ksecY7   = +13.317 * fgkmm;
-    const Double_t ksecR7   =  -0.6   * fgkmm; // external
-    //const Double_t ksecDip3 = 6.978 * fgkmm;
-    //
-    const Double_t ksecX8   =  -0.733 * fgkmm;
-    const Double_t ksecY8   = +17.486 * fgkmm;
-    const Double_t ksecR8   =  +0.6   * fgkmm; // internal
-    const Double_t ksecX9   =  +0.562 * fgkmm;
-    //const Double_t ksecY9 = +14.486 * fgkmm; // correction by
-    const Double_t ksecY9   = +14.107 * fgkmm; // Alberto
-    const Double_t ksecR9   =  -0.6   * fgkmm; // external
-    //const Double_t ksecDip4 = 6.978 * fgkmm;
-    //
-    const Double_t ksecX10  = -12.252 * fgkmm;
-    const Double_t ksecY10  = +16.298 * fgkmm;
-    const Double_t ksecR10  =  +0.6   * fgkmm; // internal
-    const Double_t ksecX11  = -10.445 * fgkmm;
-    const Double_t ksecY11  = +13.162 * fgkmm;
-    const Double_t ksecR11  =  -0.6   * fgkmm; // external
-    //const Double_t ksecDip5 = 6.978 * fgkmm;
-    //
-    const Double_t ksecX12  = -22.276 * fgkmm;
-    const Double_t ksecY12  = +12.948 * fgkmm;
-    const Double_t ksecR12  =  +0.85  * fgkmm; // internal
+
+    const Double_t ksecR1   =  +0.6   * fgkmm;
+    const Double_t ksecR2   =  +0.6   * fgkmm;
+    const Double_t ksecR3   =  -0.6   * fgkmm;
+    const Double_t ksecR4   =  +0.8   * fgkmm;
+    const Double_t ksecR5   =  +0.8   * fgkmm;
+    const Double_t ksecR6   =  +0.6   * fgkmm;
+    const Double_t ksecR7   =  -0.6   * fgkmm;
+    const Double_t ksecR8   =  +0.6   * fgkmm;
+    const Double_t ksecR9   =  -0.6   * fgkmm;
+    const Double_t ksecR10   =  +0.6   * fgkmm;
+    const Double_t ksecR11   =  -0.6   * fgkmm;
+    const Double_t ksecR12   =  +0.85   * fgkmm;
+
+//    // IDEAL GEOMETRY
+//     const Double_t ksecX1[10] ={-1.3187,-1.3187,-1.3187,-1.3187,-1.3187,-1.3187,-1.3187,-1.3187,-1.3187,-1.3187};
+//     const Double_t ksecY1[10] ={-1.9964,-1.9964,-1.9964,-1.9964,-1.9964,-1.9964,-1.9964,-1.9964,-1.9964,-1.9964};
+//     const Double_t ksecX2[10] ={-0.3833,-0.3833,-0.3833,-0.3833,-0.3833,-0.3833,-0.3833,-0.3833,-0.3833,-0.3833};
+//     const Double_t ksecY2[10] ={-1.7805,-1.7805,-1.7805,-1.7805,-1.7805,-1.7805,-1.7805,-1.7805,-1.7805,-1.7805};
+//     const Double_t ksecX3[10] ={-0.3123,-0.3123,-0.3123,-0.3123,-0.3123,-0.3123,-0.3123,-0.3123,-0.3123,-0.3123};
+//     const Double_t ksecY3[10] ={-1.4618,-1.4618,-1.4618,-1.4618,-1.4618,-1.4618,-1.4618,-1.4618,-1.4618,-1.4618};
+//     const Double_t ksecX4[10] ={+1.1280,+1.1280,+1.1280,+1.1280,+1.1280,+1.1280,+1.1280,+1.1280,+1.1280,+1.1280};
+//     const Double_t ksecY4[10] ={-1.4473,-1.4473,-1.4473,-1.4473,-1.4473,-1.4473,-1.4473,-1.4473,-1.4473,-1.4473};
+//     const Double_t ksecX5[10] ={+1.9544,+1.9544,+1.9544,+1.9544,+1.9544,+1.9544,+1.9544,+1.9544,+1.9544,+1.9544};
+//     const Double_t ksecY5[10] ={+1.0961,+1.0961,+1.0961,+1.0961,+1.0961,+1.0961,+1.0961,+1.0961,+1.0961,+1.0961};
+//     const Double_t ksecX6[10] ={+1.0830,+1.0830,+1.0830,+1.0830,+1.0830,+1.0830,+1.0830,+1.0830,+1.0830,+1.0830};
+//     const Double_t ksecY6[10] ={+1.6868,+1.6868,+1.6868,+1.6868,+1.6868,+1.6868,+1.6868,+1.6868,+1.6868,+1.6868};
+//     const Double_t ksecX7[10] ={+1.1581,+1.1581,+1.1581,+1.1581,+1.1581,+1.1581,+1.1581,+1.1581,+1.1581,+1.1581};
+//     const Double_t ksecY7[10] ={+1.3317,+1.3317,+1.3317,+1.3317,+1.3317,+1.3317,+1.3317,+1.3317,+1.3317,+1.3317};
+//     const Double_t ksecX8[10] ={-0.0733,-0.0733,-0.0733,-0.0733,-0.0733,-0.0733,-0.0733,-0.0733,-0.0733,-0.0733};
+//     const Double_t ksecY8[10] ={+1.7486,+1.7486,+1.7486,+1.7486,+1.7486,+1.7486,+1.7486,+1.7486,+1.7486,+1.7486};
+//     const Double_t ksecX9[10] ={+0.0562,+0.0562,+0.0562,+0.0562,+0.0562,+0.0562,+0.0562,+0.0562,+0.0562,+0.0562};
+//     const Double_t ksecY9[10] ={+1.4107,+1.4107,+1.4107,+1.4107,+1.4107,+1.4107,+1.4107,+1.4107,+1.4107,+1.4107};
+//     const Double_t ksecX10[10]={-1.2252,-1.2252,-1.2252,-1.2252,-1.2252,-1.2252,-1.2252,-1.2252,-1.2252,-1.2252};
+//     const Double_t ksecY10[10]={+1.6298,+1.6298,+1.6298,+1.6298,+1.6298,+1.6298,+1.6298,+1.6298,+1.6298,+1.6298};
+//     const Double_t ksecX11[10]={-1.0445,-1.0445,-1.0445,-1.0445,-1.0445,-1.0445,-1.0445,-1.0445,-1.0445,-1.0445};
+//     const Double_t ksecY11[10]={+1.3162,+1.3162,+1.3162,+1.3162,+1.3162,+1.3162,+1.3162,+1.3162,+1.3162,+1.3162};
+//     const Double_t ksecX12[10]={-2.2276,-2.2276,-2.2276,-2.2276,-2.2276,-2.2276,-2.2276,-2.2276,-2.2276,-2.2276};
+//     const Double_t ksecY12[10]={+1.2948,+1.2948,+1.2948,+1.2948,+1.2948,+1.2948,+1.2948,+1.2948,+1.2948,+1.2948};
+  
+
+//    MODIFIED GEOMETRY according with partial alignment of Staves relative to Sectors
+//    last numbers: 2010/06/11 (ML)
+
+    const Double_t ksecX1[10]={-1.305917, -1.322242, -1.300649, -1.298700, -1.290830, -1.274307, -1.276433, -1.286468, -1.274381, -1.314864};
+    const Double_t ksecY1[10]={-1.997857, -2.018611, -2.005854, -2.004897, -1.995517, -2.002552, -1.995860, -2.021062, -2.012931, -2.043967};
+    const Double_t ksecX2[10]={-0.366115, -0.385562, -0.372689, -0.365682, -0.348432, -0.348442, -0.342468, -0.354071, -0.346900, -0.381275};
+    const Double_t ksecY2[10]={-1.801679, -1.808306, -1.759315, -1.778851, -1.811655, -1.747888, -1.773811, -1.792427, -1.764514, -1.820324};
+//     const Double_t ksecX1[10]={-1.305917, -1.322242, -1.300649, -1.298700, -1.290830, -1.274307, -1.276433, -1.286468, -1.274381, -1.325864};
+//     const Double_t ksecY1[10]={-1.997857, -2.018611, -2.005854, -2.004897, -1.995517, -2.002552, -1.995860, -2.021062, -2.012931, -2.032967};
+//     const Double_t ksecX2[10]={-0.366115, -0.385562, -0.372689, -0.365682, -0.348432, -0.348442, -0.342468, -0.354071, -0.346900, -0.392275};
+//     const Double_t ksecY2[10]={-1.801679, -1.808306, -1.759315, -1.778851, -1.811655, -1.747888, -1.773811, -1.792427, -1.764514, -1.809324};
+    const Double_t ksecX3[10]={-0.314030, -0.315531, -0.347521, -0.337675, -0.300420, -0.378487, -0.330729, -0.330850, -0.362360, -0.321097};
+    const Double_t ksecY3[10]={-1.452488, -1.460418, -1.447060, -1.443146, -1.472410, -1.430019, -1.469073, -1.472048, -1.462010, -1.444355};
+    const Double_t ksecX4[10]={1.124299, 1.124162, 1.089523, 1.095520, 1.136171, 1.058616, 1.105626, 1.106433, 1.077455, 1.117946};
+    const Double_t ksecY4[10]={-1.458714, -1.452649, -1.465297, -1.492717, -1.494665, -1.447732, -1.493369, -1.488126, -1.452925, -1.443447};
+    const Double_t ksecX5[10]={1.951621, 1.939284, 1.931830, 1.935235, 1.952206, 1.939082, 1.924822, 1.940114, 1.918160, 1.960017};
+    const Double_t ksecY5[10]={1.092731, 1.118870, 1.129765, 1.129422, 1.081511, 1.127387, 1.103960, 1.101784, 1.121428, 1.150110};
+    const Double_t ksecX6[10]={1.070070, 1.048297, 1.035920, 1.049049, 1.083621, 1.045882, 1.050399, 1.067823, 1.037967, 1.070850};
+    const Double_t ksecY6[10]={1.667590, 1.678571, 1.681383, 1.696892, 1.676520, 1.683470, 1.689988, 1.691111, 1.698432, 1.712770};
+    const Double_t ksecX7[10]={1.139398, 1.150471, 1.150074, 1.132807, 1.150192, 1.124064, 1.124335, 1.137723, 1.143056, 1.130568};
+    const Double_t ksecY7[10]={1.345588, 1.356062, 1.342468, 1.320467, 1.335807, 1.334477, 1.328622, 1.347184, 1.319861, 1.308420};
+    const Double_t ksecX8[10]={-0.096963, -0.098603, -0.095286, -0.099990, -0.075132, -0.121593, -0.108673, -0.104237, -0.092082, -0.104044};
+    const Double_t ksecY8[10]={1.751207, 1.731467, 1.726908, 1.734219, 1.766159, 1.718203, 1.741891, 1.739743, 1.728288, 1.718046};
+    const Double_t ksecX9[10]={0.047615, 0.087875, 0.034917, 0.071603, 0.026468, 0.091619, 0.051994, 0.059947, 0.079785, 0.043443};
+    const Double_t ksecY9[10]={1.414699, 1.403187, 1.399061, 1.403430, 1.435056, 1.384557, 1.397692, 1.420269, 1.391372, 1.398954};
+    const Double_t ksecX10[10]={-1.233255, -1.186874, -1.246702, -1.213368, -1.259425, -1.190067, -1.225655, -1.224171, -1.197833, -1.237182};
+    const Double_t ksecY10[10]={1.635767, 1.646249, 1.617336, 1.608928, 1.636944, 1.602583, 1.630504, 1.629065, 1.624295, 1.620934};
+    const Double_t ksecX11[10]={-1.018270, -1.031317, -0.960524, -1.001155, -1.045437, -0.986867, -1.002685, -1.017369, -1.005614, -0.985385};
+    const Double_t ksecY11[10]={1.318108, 1.330683, 1.301572, 1.314410, 1.326680, 1.295226, 1.306372, 1.309414, 1.306542, 1.307086};
+    const Double_t ksecX12[10]={-2.199004, -2.214964, -2.139247, -2.180547, -2.224505, -2.165324, -2.175883, -2.193485, -2.183227, -2.161570};
+    const Double_t ksecY12[10]={1.317677, 1.303982, 1.317057, 1.324766, 1.339537, 1.312715, 1.359642, 1.343638, 1.330234, 1.340836};
+
+
     const Double_t ksecR13  =  -0.8   * fgkmm; // external
     const Double_t ksecAngleSide13 = 36.0 * fgkDegree;
     //
@@ -516,22 +545,22 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth,
     // in the format of arrays (???)
     const Int_t ksecNPoints = (ksecNPointsPerRadii + 1) * ksecNRadii + 8;
     Double_t secX[ksecNRadii] = {
-        ksecX0,  ksecX1,  -1000.0,
-        ksecX2,  ksecX3,  -1000.0,
-        ksecX4,  ksecX5,  -1000.0,
-        ksecX6,  ksecX7,  -1000.0,
-        ksecX8,  ksecX9,  -1000.0,
-        ksecX10, ksecX11, -1000.0,
-        ksecX12, -1000.0
+        ksecX0,  ksecX1[sect],  -1000.0,
+        ksecX2[sect],  ksecX3[sect],  -1000.0,
+        ksecX4[sect],  ksecX5[sect],  -1000.0,
+        ksecX6[sect],  ksecX7[sect],  -1000.0,
+        ksecX8[sect],  ksecX9[sect],  -1000.0,
+        ksecX10[sect], ksecX11[sect], -1000.0,
+        ksecX12[sect], -1000.0
     };
     Double_t secY[ksecNRadii] = {
-        ksecY0,  ksecY1,  -1000.0,
-        ksecY2,  ksecY3,  -1000.0,
-        ksecY4,  ksecY5,  -1000.0,
-        ksecY6,  ksecY7,  -1000.0,
-        ksecY8,  ksecY9,  -1000.0,
-        ksecY10, ksecY11, -1000.0,
-        ksecY12, -1000.0
+        ksecY0,  ksecY1[sect],  -1000.0,
+        ksecY2[sect],  ksecY3[sect],  -1000.0,
+        ksecY4[sect],  ksecY5[sect],  -1000.0,
+        ksecY6[sect],  ksecY7[sect],  -1000.0,
+        ksecY8[sect],  ksecY9[sect],  -1000.0,
+        ksecY10[sect], ksecY11[sect], -1000.0,
+        ksecY12[sect], -1000.0
     };
     Double_t secR[ksecNRadii] = {
         ksecR0,  ksecR1,  -.5 * ksecDipLength - ksecDipRadii,
@@ -1355,6 +1384,10 @@ TGeoVolume* AliITSv11GeometrySPD::CreateClip(TArrayD &sizes,Bool_t isDummy,
     // with a finite thickness for all the shape
     // Its local reference frame is such that point A corresponds to origin.
     //
+
+  // MODIFIED geometry
+    Double_t sposty = fgkmm * -0.5; // lower internal side to avoid overlaps with modified geometry
+
     Double_t fullLength      = fgkmm * 12.6;    // = x4 - x0
     Double_t flatLength      = fgkmm *  5.4;    // = x4 - x3
     Double_t inclLongLength  = fgkmm *  5.0;    // = 5-6
@@ -1396,6 +1429,9 @@ TGeoVolume* AliITSv11GeometrySPD::CreateClip(TArrayD &sizes,Bool_t isDummy,
     y[6] = y[1] + thickness;
     y[7] = y[0] + thickness;
 
+    y[0] += sposty;
+    y[7] += sposty;
+
     sizes.Set(7);
     sizes[0] = totalLength;
     sizes[1] = fullHeight;
index fac1bb4..363a84e 100644 (file)
@@ -105,7 +105,7 @@ class AliITSv11GeometrySPD : public AliITSv11Geometry
     virtual TGeoVolumeAssembly* CreateStave(Int_t layer, TArrayD &sizes,
              /*Bool_t addClips = kFALSE,*/TGeoManager *mgr = gGeoManager);
     // the complete Carbon Fiber sector (support + staves)
-    virtual void CarbonFiberSector(TGeoVolume *moth, Double_t &xAAtubeCenter0,
+    virtual void CarbonFiberSector(TGeoVolume *moth, Int_t sect, Double_t &xAAtubeCenter0,
                      Double_t &yAAtubeCenter0, TGeoManager *mgr = gGeoManager);
     // the whole SPD barrel (the 10 sectors at once)
     virtual void SPDSector(TGeoVolume *moth, TGeoManager *mgr = gGeoManager);