method RectGeomCellPos in float is added
authorbnandi <bnandi@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Oct 2003 11:44:29 +0000 (11:44 +0000)
committerbnandi <bnandi@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Oct 2003 11:44:29 +0000 (11:44 +0000)
PMD/AliPMDUtility.cxx
PMD/AliPMDUtility.h

index ad89262a08908bd87ddab3cb49cbf871d53acca2..33524c6284d101156fd80314ef633468cfdb1ce4 100644 (file)
@@ -169,7 +169,7 @@ void AliPMDUtility::RectGeomCellPos(Int_t ism, Int_t ium, Int_t xpad, Int_t ypad
   //Every even row of cells is shifted and placed
   //in geant so this condition
   //
-  Float_t shift;
+  Float_t shift = 0.0;
   if(irow%2 == 0)
     {
       shift = 0.25;
@@ -196,6 +196,86 @@ void AliPMDUtility::RectGeomCellPos(Int_t ism, Int_t ium, Int_t xpad, Int_t ypad
     }
 }
 
+void AliPMDUtility::RectGeomCellPos(Int_t ism, Int_t ium, Float_t xpad, Float_t ypad, Float_t &xpos, Float_t &ypos)
+{
+  // If the xpad and ypad inputs are float, then 0.5 is added to it
+  // to find the layer which is shifted.
+  // This routine finds the cell eta,phi for the new PMD rectangular 
+  // geometry in ALICE
+  // Authors : Bedanga Mohanty and Dipak Mishra - 29.4.2003
+  // modified by B. K. Nnadi for change of coordinate sys
+  //
+  // SMA  ---> Supermodule Type A           ( SM - 0)
+  // SMAR ---> Supermodule Type A ROTATED   ( SM - 1)
+  // SMB  ---> Supermodule Type B           ( SM - 2)
+  // SMBR ---> Supermodule Type B ROTATED   ( SM - 3)
+  //
+  // ism   : number of supermodules in one plane = 4
+  // ium   : number of unitmodules  in one SM    = 6
+  // gb_um : (global) unit module numbering in a supermodule
+  //
+
+  Int_t gb_um = ism*6 + ium;
+  Float_t irow  = xpad;
+  Float_t icol  = ypad;
+
+  // Corner positions (x,y) of the 24 unit moudles in ALICE PMD
+  
+  double xcorner[24] =
+  {
+    85.15,  60.85,  36.55,  85.15,  60.85,  36.55, //SMA 
+    -85.15, -60.85, -36.55, -85.15, -60.85, -36.55, //SMAR
+    84.90,  36.60,  84.90,  36.60,  84.90,  36.60, //SMB
+    -84.90, -36.60, -84.90, -36.60, -84.90, -36.60  //SMBR
+  };
+  
+  double ycorner[24] =
+  { 
+    32.45708755,  32.45708755,  32.45708755,        //SMA
+    -9.30645245,  -9.30645245,  -9.30645245,        //SMA
+    -32.45708755, -32.45708755, -32.45708755,        //SMAR
+    9.30645245,   9.30645245,   9.30645245,        //SMAR
+    -31.63540818, -31.63540818, -52.61435544,        //SMB
+    -52.61435544, -73.59330270, -73.59330270,        //SMB
+    31.63540818,  31.63540818,  52.61435544,        //SMBR
+    52.61435544,  73.59330270,  73.59330270         //SMBR
+  };
+  
+  const Float_t root_3      = 1.73205;  // sqrt(3.);
+  const Float_t cell_radius = 0.25;
+  
+  //
+  //Every even row of cells is shifted and placed
+  //in geant so this condition
+  //
+  Float_t shift = 0.0;
+  Int_t iirow = (Int_t) (irow+0.5);
+  if(iirow%2 == 0)
+    {
+      shift = 0.25;
+    }
+  else
+    {
+      shift = 0.0;
+    }
+  if(ism == 0 || ism == 2)
+    {
+      ypos = ycorner[gb_um] + 
+       irow*cell_radius*root_3;
+
+      xpos = xcorner[gb_um] - 
+       icol*2.0*cell_radius - shift;
+    }
+  else if(ism == 1 || ism == 3)
+    {
+      ypos = ycorner[gb_um] -
+       irow*cell_radius*root_3;
+
+      xpos = xcorner[gb_um] +
+       icol*2.0*cell_radius + shift;
+    }
+}
+
 void AliPMDUtility::SetPxPyPz(Float_t Px, Float_t Py, Float_t Pz)
 {
   fPx = Px;
index 70180b13e449e5866a97b557479b8b81c2d8be0c..9bc651bf69fa3d532f9bc70d117653dc6f335fa3 100644 (file)
@@ -31,6 +31,9 @@ class AliPMDUtility
   void RectGeomCellPos(Int_t /* ism */, Int_t /* ium */, 
                       Int_t /* xpad */, Int_t /* ypad */,
                       Float_t & /* xpos */, Float_t & /* ypos */);
+  void RectGeomCellPos(Int_t /* ism */, Int_t /* ium */, 
+                      Float_t /* xpad */, Float_t /* ypad */,
+                      Float_t & /* xpos */, Float_t & /* ypos */);
   void SetPxPyPz(Float_t /* Px */, Float_t /* Py */, Float_t /* Pz */);
   void SetXYZ(Float_t /* xPos */, Float_t /* yPos */, Float_t /* zPos */);
   void CalculateEta();
@@ -40,7 +43,7 @@ class AliPMDUtility
   Float_t GetEta() const;
   Float_t GetPhi() const;
   
-  ClassDef(AliPMDUtility,1)
+  ClassDef(AliPMDUtility,2)
 };
 
 #endif