change for rectangular geometry
authorbnandi <bnandi@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 1 Oct 2003 09:07:17 +0000 (09:07 +0000)
committerbnandi <bnandi@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 1 Oct 2003 09:07:17 +0000 (09:07 +0000)
PMD/AliPMDUtility.cxx
PMD/AliPMDUtility.h

index 8dcfbec..ad89262 100644 (file)
@@ -37,6 +37,164 @@ AliPMDUtility::~AliPMDUtility()
 {
 
 }
+void AliPMDUtility::HexGeomCellPos(Int_t ism, Int_t xpad, Int_t ypad, Float_t &xpos, Float_t &ypos)
+{
+
+  Int_t j = xpad;
+  Int_t k = ypad;
+
+  // Supermodeule number starting from 0
+
+  /*
+    This converts PMD cluster or CELL coordinates
+    to Global coordinates.
+    Written by Prof. S.C. Phatak
+  */
+
+  Int_t i;
+  Float_t celldia = 0.5;
+  const Float_t pi = 3.14159;
+  const double sqrth=0.8660254;  // sqrth = sqrt(3.)/2.
+  /*
+    ism --> supermodule no ( 0 - 26 )
+    idet --> detector ( pmd or cpv : not required now )
+    j --> xpad ( goes from 1 to 72 )
+    k --> ypad ( goes from 1 to 72 )
+    xp --> global x coordinate
+    yp --> global y coordinate
+    
+    (xp0,yp0) corner positions of all supermodules in global
+    coordinate system. That is the origin
+    of the local ( supermodule ) coordinate system.
+*/ 
+  
+  Float_t xp0[27] = 
+  {
+    -17.9084, 18.2166, 54.3416, -35.9709, 0.154144, 
+    36.2791, -54.0334, -17.9084, 18.2166, 36.7791, 
+    18.7166, 0.654194, 72.9041, 54.8416, 36.7792, 
+    109.029, 90.9666, 72.9042, -18.8708, -36.9334, 
+    -54.996, -36.9332, -54.9958, -73.0584, -54.9956, 
+    -73.0582, -91.1208
+  };
+
+  Float_t yp0[27] = 
+  {
+    -32.1395, -32.1395, -32.1395, -63.4247, -63.4247, 
+    -63.4247, -94.7098, -94.7098, -94.7098, 0.545689, 
+    31.8309, 63.1161, 0.545632, 31.8308, 63.116, 
+    0.545573, 31.8308, 63.116, 31.5737, 0.288616, 
+    -30.9965, 62.859, 31.5738, 0.288733, 94.1442, 
+    62.8591, 31.574
+  };
+
+  /* 
+     angles of rotation for three sets of supermodules
+     The angle is same for first nine, next nine and last nine 
+     supermodules 
+  */
+  
+  Float_t th[3] = {0., -2.*pi/3., 2.*pi/3.};
+  Float_t xr, yr, xinit, yinit, cs, sn;
+  
+  /* 
+     xinit and yinit are coordinates of the cell in local coordinate system
+  */
+  
+  xinit = (j)*celldia+(k)/2.*celldia;
+  yinit = sqrth*(k)/2.;
+  i=ism/9;
+  cs=cos(th[i]);
+  sn=sin(th[i]);
+  //
+  // rotate first
+  //
+  xr=cs*xinit+sn*yinit;
+  yr=-sn*xinit+cs*yinit;
+  //
+  // then translate
+  //
+  xpos=xr+xp0[ism];
+  ypos=yr+yp0[ism];
+
+}
+
+void AliPMDUtility::RectGeomCellPos(Int_t ism, Int_t ium, Int_t xpad, Int_t ypad, Float_t &xpos, Float_t &ypos)
+{
+  // 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;
+  Int_t irow  = xpad;
+  Int_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;
+  if(irow%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)
 {
@@ -75,10 +233,12 @@ void AliPMDUtility::CalculatePhi()
       pybypx = fPy/fPx;
       if(pybypx < 0) pybypx = - pybypx;
       phi1 = TMath::ATan(pybypx)*180./3.14159;
-      if(fPx < 0 && fPy > 0) phi = 180 - phi1;
-      if(fPx < 0 && fPy < 0) phi = 180 + phi1;
-      if(fPx > 0 && fPy < 0) phi = 360 - phi1;
-      if(fPx > 0 && fPy > 0) phi = phi1;
+
+      if(fPx > 0 && fPy > 0) phi = phi1;        // 1st Quadrant
+      if(fPx < 0 && fPy > 0) phi = 180 - phi1;  // 2nd Quadrant
+      if(fPx < 0 && fPy < 0) phi = 180 + phi1;  // 3rd Quadrant
+      if(fPx > 0 && fPy < 0) phi = 360 - phi1;  // 4th Quadrant
+
     }
   phi = phi*3.14159/180.;
 
@@ -104,10 +264,11 @@ void AliPMDUtility::CalculateEtaPhi()
       pybypx = fPy/fPx;
       if(pybypx < 0) pybypx = - pybypx;
       phi1 = TMath::ATan(pybypx)*180./3.14159;
-      if(fPx < 0 && fPy > 0) phi = 180 - phi1;
-      if(fPx < 0 && fPy < 0) phi = 180 + phi1;
-      if(fPx > 0 && fPy < 0) phi = 360 - phi1;
-      if(fPx > 0 && fPy > 0) phi = phi1;
+      if(fPx > 0 && fPy > 0) phi = phi1;        // 1st Quadrant
+      if(fPx < 0 && fPy > 0) phi = 180 - phi1;  // 2nd Quadrant
+      if(fPx < 0 && fPy < 0) phi = 180 + phi1;  // 3rd Quadrant
+      if(fPx > 0 && fPy < 0) phi = 360 - phi1;  // 4th Quadrant
+
     }
   phi = phi*3.14159/180.;
 
index 92cd39e..70180b1 100644 (file)
@@ -25,7 +25,12 @@ class AliPMDUtility
   AliPMDUtility();
   AliPMDUtility(Float_t /* Px */, Float_t /* Py */, Float_t /* Pz */);
   virtual ~AliPMDUtility();
-  
+
+  void HexGeomCellPos(Int_t /* ism */, Int_t /* xpad */, Int_t /* ypad */,
+               Float_t & /* xpos */, Float_t & /* ypos */);
+  void RectGeomCellPos(Int_t /* ism */, Int_t /* ium */, 
+                      Int_t /* xpad */, Int_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();