to keep compatibility with Sun and HP CC!
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 1 May 2000 19:06:21 +0000 (19:06 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 1 May 2000 19:06:21 +0000 (19:06 +0000)
PHOS/AliPHOSRecPoint.h
PHOS/AliPHOSReconstructioner.cxx
PHOS/AliPHOSv0.cxx
PHOS/PHOS-HTML/fastsimulation.html
PHOS/PHOS-HTML/geometry.html
PHOS/PHOS-HTML/index.html
PHOS/PHOS-HTML/introduction.html
PHOS/PHOS-HTML/reconstruction.html
PHOS/PHOS-HTML/simulation.html

index 7c33b2a..92fbba4 100644 (file)
@@ -30,7 +30,7 @@ public:
   AliPHOSRecPoint() ;                   // ctor         
   virtual ~AliPHOSRecPoint(){}          // dtor
   virtual  void   AddDigit(AliPHOSDigit & digit, Float_t Energy) = 0 ; 
-  virtual Int_t   Compare(TObject * obj) {  assert(0==1) ; }   
+  virtual Int_t   Compare(TObject * obj) {  assert(0==1) ; return 1 ; }   
   virtual Int_t   DistancetoPrimitive(Int_t px, Int_t py);
   virtual void    Draw(Option_t * option="") ;
   virtual void    ExecuteEvent(Int_t event, Int_t px, Int_t py) ;
index b532e09..89d12bc 100644 (file)
@@ -29,7 +29,7 @@
 
 // --- Standard library ---
 
-#include <iomanip>
+#include <iomanip.h>
 
 // --- AliRoot header files ---
 
@@ -182,7 +182,10 @@ AliPHOSReconstructioner::AliPHOSReconstructioner(AliPHOSClusterizer * Clusterize
        TVector3  locpos; ppsdrecpoint->GetLocalPosition(locpos);
        Int_t * primaries; 
        Int_t nprimaries;
-        if (ppsdrecpoint->GetUp()) detector="CPV"; else detector="PC ";
+        if (ppsdrecpoint->GetUp()) 
+         strcpy(detector, "CPV"); 
+       else 
+         strcpy(detector, "PC ");
        primaries = ppsdrecpoint->GetPrimaries(nprimaries);
        cout << "DebugReconstruction>>> " << 
          setw(4) << ppsdrecpoint->GetPHOSMod() << "  "  << 
@@ -283,28 +286,28 @@ AliPHOSReconstructioner::AliPHOSReconstructioner(AliPHOSClusterizer * Clusterize
       switch(rp->GetType())
        {
        case kNEUTRAL_EM:
-         particle = "NEUTRAL_EM";
+         strcpy( particle, "NEUTRAL_EM");
          break;
        case kNEUTRAL_HA:
-         particle = "NEUTRAL_HA";
+         strcpy(particle, "NEUTRAL_HA");
          break;
        case kGAMMA:
-         particle = "GAMMA     ";
+         strcpy(particle, "GAMMA");
          break ;
        case kGAMMA_HA: 
-         particle = "GAMMA_HA  ";
+         strcpy(particle, "GAMMA_H");
          break ;
        case kABSURD_EM:
-         particle = "ABSURD_EM " ;
+         strcpy(particle, "ABSURD_EM") ;
          break ;
        case kABSURD_HA:
-         particle = "ABSURD_HA " ;
+         strcpy(particle, "ABSURD_HA") ;
          break ;       
        case kELECTRON:
-         particle = "ELECTRON  " ;
+         strcpy(particle, "ELECTRON") ;
          break ;
        case kCHARGED_HA:
-         particle = "CHARGED_HA" ;
+         strcpy(particle, "CHARGED_HA") ;
          break ; 
        }
       
index a6ef72f..48668bf 100644 (file)
@@ -619,8 +619,8 @@ void AliPHOSv0:: BuildGeometryforPPSD(void)
     }
   } // PHOS modules
  
-  delete rotname ;  
-  delete nodename ; 
+  delete[] rotname ;  
+  delete[] nodename ; 
 
 }
 
index f3a109e..181a737 100644 (file)
 <body>
 
 
-<h1>
-  PHOS Fast Simulation 
-</h1>
-At the Offline meeting held during December 1999, it was decided
-that each sub-detector makes a Use Case for a fast simulation scheme. Here is what we suggest for PHOS.
+    <h1>
+      PHOS Fast Simulation 
+    </h1>
+    At the Offline meeting held during December 1999, it was decided
+    that each sub-detector makes a Use Case for a fast simulation scheme. Here is what we suggest for PHOS.
+    <P>
+    <center>
+      <a href="./images/usecasefastsimulation.eps">
+      <img SRC="./images/usecasefastsimulation.gif" ALT="[Use Case for fast simulation]" height=425 width=483>
+      </a>
+      <p>
+       <b> Figure 1.: </b> <i>Use Case for fast simulation. Only PHOS is implemented. Other detectors are ignored. 
+         Click on image for full scale</i>
+      </p>
+    </center>
 <P>
-
-<center><img SRC="usecasefastsimulation.gif" ALT="[Use Case for fast simulation]" height=425 width=483></center>
-<P>
-This has been implemented in a new class <a href="AliPHOSvFast.html"> AliPHOSvFast </a> ( <a href="AliPHOSvFast_Tree.ps"> 
+This has been implemented in a new class <a href="./html/AliPHOSvFast.html"> AliPHOSvFast </a> ( <a href="./html/AliPHOSvFast_Tree.ps"> 
 inheritance tree </a> ). The synopsis goes as follow :
 <br> <br>
 <pre class="code">      
@@ -51,10 +58,10 @@ to the GPS Home Page]</a></address>
 <address class="right"> 
 <!-- Created: Tue Oct 26 19:52:56 CEST 1999 -->
 <!-- hhmts start -->
-Last modified: Mon Mar 13 10:47:23 CET 2000
+Last modified: Fri Mar 24 09:10:01 CET 2000
 <!-- hhmts end --></address>
 
-<div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>
+<!-- <div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>-->
 
 </body>
 </html>
index 6db433e..edfdd7c 100644 (file)
     </h1>
     The simulation is done in two steps, one which describes the detector geometry
     and material and one which does the particle tracking and stores the hits
-    and digits in a TTree itself written on a disk file. These two steps are
+    and digits in a  <a href="http://root.cern.ch/root/html/TTree.html">TTree</a> itself written on a disk file. These two steps are
     steered through the Config.C file(<a href="PHOSConfig_Central.C">example</a>), 
     a root macro launched at the AliRoot prompt. To customize this file you must:
     <br><br>
     <ol>
       <li>
        select a file name for the root output:
-       <pre>
+       <pre class="code">
        //=======================================================================
        //  Create the output file
        sprintf(filename,"<b>myfilename</b>.root");
@@ -31,7 +31,7 @@
        </li>
       <li>
        Define your event generator and simulations parameters:
-       <pre>
+       <pre class="code">
          AliGenCocktail *gener = new AliGenCocktail(); // Cocktail class
          gener->SetPtRange(.02,10.00);                 // Transverse momentum range   
          gener->SetPhiRange(180.,360.);                // Azimuthal angle range  
       </li>
       <li>
        Select the detector seen by the tracking:
-       <pre>
+       <pre class="code">
          Int_t iPHOS=1;    // PHOS is in
          Int_t iPMD=0;     // PMD  is out
        </pre>
       </li>
       <li>
        Create a PHOS object (<b>GPS2</b> is so far the unique configuration option, see below):
-       <pre> 
+       <pre class="code"> 
          if(iPHOS) {
          //=================== PHOS parameters =========================== 
          AliPHOS *PHOS  = new AliPHOSv0("PHOS","<b>GPS2</b>");
     </ol>
     <p>
       You van now run the simulation by entering the following command at the aliroot prompt:
-      <pre>
+      <pre class="code">
        aliroot> gAlice->Run(1,"PHOSConfig_Central.C");  
     </pre>
-    </p>
     <h1>
       Geometry
     </h1>
     of gas detectors identical to the first layer. This second part is positionned
     on top of the EMCA module.
     <p>
-      The class <a href="AliPHOSv0.html"> AliPHOSv0 </a> ( <a href="AliPHOSv0_Tree.ps"> inheritance tree </a>) 
+      The class <a href="./html/AliPHOSv0.html"> AliPHOSv0 </a> ( <a href="./html/AliPHOSv0_Tree.ps"> inheritance tree </a>) 
       describes this geometry. We have defined also a class 
-      <a href="AliPHOSv1.html"> AliPHOSv1 </a> ( <a href="AliPHOSv1_Tree.ps"> inheritance tree </a>) 
+      <a href="./html/AliPHOSv1.html"> AliPHOSv1 </a> ( <a href="./html/AliPHOSv1_Tree.ps"> inheritance tree </a>) 
       which in addition contains the photodiode response and the light transport through the crystal.
     <p>
-      The parameters of the geometry are given in class  <a href="AliPHOSGeometry.html"> AliPHOSGeometry </a>( <a href="AliPHOSGeometry_Tree.ps"> inheritance tree </a>)
+      The parameters of the geometry are given in class  <a href="./html/AliPHOSGeometry.html"> AliPHOSGeometry </a>( <a href="./html/AliPHOSGeometry_Tree.ps"> inheritance tree </a>)
       <br><br>
     <center>
       <img SRC=" images/EMCinAlice.gif" ALT="Geant Tree for PHOS" >
     </h4>
     <p>
     <center>
-      <img SRC="aliphossimulation.gif" ALT="Geom/Simul class diagram" >
+      <img SRC="./images/aliphossimulation.gif" ALT="Geom/Simul class diagram" >
       <br><br>
       <b> Figure 2.: </b> <i> Class diagram for the geometry/simulation package </i>
     </center>
     <p>
-      <a href="AliPHOS.html"><i><u>AliPHOS</u></a> : </i>This is the base class. It derives from <i>AliDetector.
+      <a href="./html/AliPHOS.html"><i><u>AliPHOS</u></i></a>: This is the base class. It derives from <i>AliDetector.
       </i>It's only purpose is to describe the materials
       (&agrave; la <i>AliMC</i>) needed for the EMCA and PPSD construction.
     <p>
-      <i><u> <a href="AliPHOSv0.html">AliPHOSv4</u></i></a>: It derives from <i>AliPHOS</i>.
+      <a href="./html/AliPHOSv0.html"><i><u>AliPHOSv4</u></i></a>: It derives from <i>AliPHOS</i>.
       <br>
     <ul>
       <li>
       </li>
     </ul>
     <p>
-      <a href="AliPHOSv1.html"><i><u>AliPHOSv1</u></i></a> : derives from <i>AliPHOSv0</i> and includes the light transport 
+      <a href="./html/AliPHOSv1.html"><i><u>AliPHOSv1</u></i></a> : derives from <i>AliPHOSv0</i> and includes the light transport 
       in the crystal and the response of the PIN photodiode &agrave; la O. H. Oddland.
     <p>
-      <a href="AliPHOSvFast.html"><i><u>AliPHOSvFast</u></i></a> : used for <a href="fastsimulation.html">fast simulation</a>.
+      <a href="./html/AliPHOSvFast.html"><i><u>AliPHOSvFast</u></i></a> : used for <a href="fastsimulation.html">fast simulation</a>.
     <p>
-      <a href="AliPHOSGeometry.html"<i><u>AliPHOSGeometry</u></i>: It derives from <i>TObject</i> to make it
+      <a href="./html/AliPHOSGeometry.html"><i><u>AliPHOSGeometry</u></i></a> : It derives from <i>TObject</i> to make it
        persistent. It is a singleton, i.e., a pointer to the unique instance of
        this class is obtained by:
     <center>
       </li>
     </ul>
     <p>
-       <a href="AliPHOSHitt.html"<i><u>AliPHOSHit</u></i></a>: It derives from <i>AliHit</i>. It stores the
+       <a href="./html/AliPHOSHit.html"><i><u>AliPHOSHit</u></i></a>: It derives from <i>AliHit</i>. It stores the
        hits as the pair (absolute Id, deposited energy). The hits presently are stored  in the hit TTree 
        as one hit per elementary cell (EMC crystal or PPSD gas cell) (See the 
        the AddHit() method in <i>AliPHOSv0</i>).
     <p>
-       <a href="AliPHOSDigit.html"<i><u>AliPHOSDigit</u></i></a> : It derives from <i>AliDigit</i>. It stores
-      the digits as the pair (absolute Id, energy) in the&nbsp; digit TTree (see 
+       <a href="./html/AliPHOSDigit.html"><i><u>AliPHOSDigit</u></i></a> : It derives from <i>AliDigit</i>. It stores
+      the digits as the pair (absolute Id, energy) in the digit Tree (see 
       the FinishEvent() method in <i>AliPHOSv0</i>).
     <h1>
       Usage
 </address>
 <!-- Created: Wed Nov 17 12:16:58 CET 1999 -->
 <!-- hhmts start -->
-Last modified: Tue Mar 14 18:38:42 CET 2000
+Last modified: Sun Mar 26 17:31:13 CEST 2000
 <!-- hhmts end -->
-<div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>
+<!--  <div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>-->
 
 
 </body>
index 20d9728..40ee03f 100644 (file)
 
     <script type="text/javascript">
       image0 = new Image(30,44);
-      image0.src = "intro.jpg";
+      image0.src = "./images/intro.jpg";
       image1 = new Image(30,44);
-      image1.src = "tournesol.jpg";
+      image1.src = "./images/tournesol.jpg";
       image2 = new Image(30,44);
-      image2.src = "go.jpg";
+      image2.src = "./images/go.jpg";
       image3 = new Image(30,44);
-      image3.src = "sun.jpg";
+      image3.src = "./images/sun.jpg";
       image5 = new Image(30,44);
-      image5.src = "star.jpg";
+      image5.src = "./images/star.jpg";
       image4 = new Image(356,240);
-      image4.src = "Title2.jpg";
+      image4.src = "./images/Title2.jpg";
       image6 = new Image(356,240);
-      image6.src = "Title1.jpg";
+      image6.src = "./images/Title1.jpg";
       image7 = new Image(356,240);
-      image7.src = "ufi.jpg";
+      image7.src = "./images/ufi.jpg";
       image8 = new Image(356,240);
-      image8.src = "abl.jpg";
+      image8.src = "./images/abl.jpg";
       image9 = new Image(356,240);
-      image9.src = "rootlogo.gif";
+      image9.src = "./images/rootlogo.gif";
       image10 = new Image(356,240);
-      image10.src = "CVS_name.gif";
+      image10.src = "./images/CVS_name.gif";
       image11 = new Image(356,240);
-      image11.src = "usecase.gif";
+      image11.src = "./images/usecase.gif";
   </script>
     
     <SCRIPT TYPE="text/javascript">
@@ -50,8 +50,8 @@
       return image[i];
       }
       image = new makeArray(2);
-      image[1]="Title1.jpg";
-      image[2]="Title2.jpg";
+      image[1]="./images/Title1.jpg";
+      image[2]="./images/Title2.jpg";
       // Stop hiding from old browsers -->
     </SCRIPT>
   </head>
@@ -71,7 +71,7 @@
                </td>
                <td valign=baseline>
                  <a href="introduction.html" onMouseOver="Bouton0.src = image2.src" onMouseOut="Bouton0.src = image0.src">
-                   <img SRC="intro.jpg" NAME="Bouton0" BORDER="0" WIDTH="44" HEIGHT="30"></a>
+                   <img SRC="./images/intro.jpg" NAME="Bouton0" BORDER="0" WIDTH="44" HEIGHT="30"></a>
                </td>
              </tr>
              <tr>
@@ -79,8 +79,8 @@
                  <h3> <font color="#FF0000"> PHOS Simulations </font> </h3>
                </td>
                <td valign=baseline>
-                 <a href="geometry.html" onMouseOver="Bouton1.src = image2.src" onMouseOut="Bouton1.src = image1.src">
-                   <img SRC="tournesol.jpg" NAME="Bouton1" BORDER="0" WIDTH="44" HEIGHT="30"></a>
+                 <a href="simulation.html" onMouseOver="Bouton1.src = image2.src" onMouseOut="Bouton1.src = image1.src">
+                   <img SRC="./images/tournesol.jpg" NAME="Bouton1" BORDER="0" WIDTH="44" HEIGHT="30"></a>
                </td>
              </tr>
              <tr>
@@ -88,8 +88,8 @@
                  <h3> <font color="#FF0000"> Event Generator </font></h3>
                </td>
                <td valign=baseline>
-                 <a href="simulation.html" onMouseOver="Bouton2.src = image2.src" onMouseOut="Bouton2.src = image3.src">
-                   <img SRC="sun.jpg" NAME="Bouton2" BORDER="0" WIDTH="44" HEIGHT="30"></a>
+                 <a href="generator.html" onMouseOver="Bouton2.src = image2.src" onMouseOut="Bouton2.src = image3.src">
+                   <img SRC="./images/sun.jpg" NAME="Bouton2" BORDER="0" WIDTH="44" HEIGHT="30"></a>
                </td>
              </tr> 
              <tr>
@@ -98,7 +98,7 @@
                </td>
                <td valign=baseline>
                  <a href="reconstruction.html"  onMouseOver="Bouton3.src = image2.src" onMouseOut="Bouton3.src = image5.src">
-                   <img SRC="star.jpg" NAME="Bouton3" BORDER="0" WIDTH="44" HEIGHT="30"></a>        
+                   <img SRC="./images/star.jpg" NAME="Bouton3" BORDER="0" WIDTH="44" HEIGHT="30"></a>       
                </td>
              </tr>
              <tr>
                </td>
                <td valign=baseline>
                  <a href="fastsimulation.html"  onMouseOver="Bouton4.src = image2.src" onMouseOut="Bouton4.src = image7.src">
-                   <img SRC="ufi.jpg" NAME="Bouton4" BORDER="0" WIDTH="44" HEIGHT="30"></a>         
-               </td>
-             </tr>  
-             <tr>
-               <td align=right>
-                 <h3> <font color="#FF0000"> AliRecPoint class</font></h3>
-               </td>
-               <td valign=baseline>
-                 <a href="alirecpoint.html"  onMouseOver="Bouton5.src = image2.src" onMouseOut="Bouton5.src = image8.src">
-                   <img SRC="abl.jpg" NAME="Bouton5" BORDER="0" WIDTH="44" HEIGHT="30"></a>         
+                   <img SRC="./images/ufi.jpg" NAME="Bouton4" BORDER="0" WIDTH="44" HEIGHT="30"></a>        
                </td>
              </tr>  
            </table>
            <table>
              <tr> 
                <td> 
-                 <a href="ClassIndex.html"  onMouseOver="Bouton6.src = image2.src" onMouseOut="Bouton6.src = image9.src">
-                   <img SRC="rootlogo.gif" NAME="Bouton6" BORDER="0" WIDTH="88" HEIGHT="60"></a>            
+                 <a href="./html/ClassIndex.html"  onMouseOver="Bouton6.src = image2.src" onMouseOut="Bouton6.src = image9.src">
+                   <img SRC="./images/rootlogo.gif" NAME="Bouton6" BORDER="0" WIDTH="88" HEIGHT="60"></a>           
                </td>
                <td align = right>
                  <h1> The Root generated documentation </h1>
              <tr> 
                <td> 
                  <a href="http://AliSoft.cern.ch/cgi-bin/cvsweb/"  onMouseOver="Bouton7.src = image2.src" onMouseOut="Bouton7.src = image10.src">
-                   <img SRC="CVS_name.gif" NAME="Bouton7" BORDER="0" WIDTH="120" HEIGHT="60"></a>           
+                   <img SRC="./images/CVS_name.gif" NAME="Bouton7" BORDER="0" WIDTH="120" HEIGHT="60"></a>          
                </td>
                <td align = right>
                  <h1> The CVS server at CERN </h1>
              </tr>
              <tr> 
                <td> 
-                 <a href="usecase.gif"  onMouseOver="Bouton9.src = image2.src" onMouseOut="Bouton9.src = image11.src">
-                   <img SRC="usecase.gif" NAME="Bouton9" BORDER="0" WIDTH="88" HEIGHT="60"></a>             
+                 <a href="./images/usecase.gif"  onMouseOver="Bouton9.src = image2.src" onMouseOut="Bouton9.src = image11.src">
+                   <img SRC="./images/usecase.gif" NAME="Bouton9" BORDER="0" WIDTH="88" HEIGHT="60"></a>            
                </td>
                <td align = right>
                  <h1> The Use Case (UML) </h1>
       <address class="right">
        <!-- Created: Tue Oct 26 19:52:56 CEST 1999 -->
        <!-- hhmts start -->
-Last modified: Tue Mar 14 16:40:43 CET 2000
+Last modified: Fri Mar 24 09:09:22 CET 2000
 <!-- hhmts end --></address>
       
-      <!--    <div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>-->
+    <!--  <div align=right><a href="http://validator.w3.org/check/referer"><img SRC="images/vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="images/vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>-->
       
   </body>
 </html>
index 7e57ded..e0b09ed 100644 (file)
@@ -13,7 +13,7 @@
     </h1>
     <br><br>
     <p>
-      This document result from the effort lead by the Photon Group at SUBATECH
+      This document result from the effort lead by the <a href="htpp://www-subatech.in2p3.fr/~photons">Photon Group at SUBATECH</a>
       to organize within the PHOS collaboration the software needed for the performance
       and physics simulation of PHOS and for the reconstruction of the raw data
       (presently simulated one's and real data in the future). 
@@ -48,7 +48,7 @@
        repository.
       </li>
       <li>
-       Developpers must comply with the <a href="http://AliSoft.cern.ch/offline/development.html#"a>Coding AliRoot coding convention</a>.
+       Developpers must comply with the <a href="http://AliSoft.cern.ch/offline/development.html#">Coding AliRoot coding convention</a>.
       </li>
       <li>
        FORTRAN is a strictly prohibited language.
       <li>
        Any new piece of code must be documented along the line: what is the purpose,
        how is it done, how to use it. You can start any new class from a canevas, available in the PHOS package:
-       <br><h3> canevas.h </h3> 
-        <pre>
+      </li>
+    </ol>
+    <h3> 
+      canevas.h 
+    </h3> 
+    <pre>
 #ifndef ALIPHOSXXX_H
 #define ALIPHOSXXX_H
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
@@ -91,9 +95,12 @@ private:
 };
 
 #endif // AliPHOSXXX_H
-        </pre>
-        <br><h3>canevas.cxx </h3>
-        <pre>
+    </pre>
+        <br>
+    <h3>
+      canevas.cxx 
+    </h3>
+    <pre>
 /**************************************************************************
  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
@@ -141,36 +148,30 @@ ClassImp(AliPHOSxxx)
   // ctor
 
 }
-        </pre>
-      </li>
-    </ol>
+    </pre>
     <br><br>
     The PHOS package is organized along two directions which we will try to
     keep as independent as possible. The simulation is the first one, the reconstruction
     the second one. 
     <p>
       <center>
-      <a href="usecase.gif">
-       <img src="usecase.gif" alt="use case diagram" height=334 width=470>
+      <a href="./images/usecase.eps">
+       <img src="./images/usecase.gif" alt="use case diagram" height=334 width=470>
       </a>     
       <br><br>
       <b> Figure 1.: </b> <i> Use case diagram of the simulation and reconstruction for PHOS (click on image for full size)</i>
       </center>
-    </p>
-
-<hr>
-<address class="left">
+    <hr>
+    <address class="left">
       &copy; <a href="mailto:schutz@in2p3.fr">>Groupe Photons Subatech (Yves SCHUTZ)</a>
       <a href="http://www-subatech.in2p3.fr/~photons/subatech/en_index.shtml">[Go
        to the GPS Home Page]</a>
-</address>
-<!-- Created: Wed Nov 17 12:16:58 CET 1999 -->
-<!-- hhmts start -->
-Last modified: Tue Mar 14 16:21:55 CET 2000
+    </address>
+    <!-- Created: Wed Nov 17 12:16:58 CET 1999 -->
+    <!-- hhmts start -->
+Last modified: Sun Mar 26 17:34:20 CEST 2000
 <!-- hhmts end -->
-<div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>
-
-
+    <!-- <div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div> -->
 </body>
 </html>
 
index c5be3b6..8468f77 100644 (file)
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.5-15 i686) [Netscape]">
-   <title>PHOS Reconstruction Proposal</title>
-<link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+   <title>PHOS Reconstruction in AliRoot</title>
+    <link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
 </head>
 <body>
-
-
-<h1>
-PHOS Reconstruction Proposal</h1>
-At the Offline meeting held during the September ALICE week, it was decided
-to make a major step in the design of the overall reconstruction framework.
-This document presents the results of our early brainstorming about the
-design of the reconstruction of the Photon Spectrometer PHOS.
-<br>&nbsp;
-<br>&nbsp;
-<p>
-<hr><a NAME="definitions and objectives"></a>
-<h1>
-Definitions and objectives</h1>
-
-<h2>
-What is PHOS ?</h2>
-We hereby consider that the PHOS detector is the <i>union</i> of two sub-detectors
-: the lead tungstate crystals and the Charged Particle Veto (CPV). Both
-sub-detectors are physically organized in <i>modules</i>. A separate document
-is dedicated to the <a href="PHOS_Proposal.html">PHOS geometry</a>.
-<h2>
-What is the reconstruction ?</h2>
-Using the AliRoot framework, we would like to be able to compare several
-CPV alternatives. The main focus will be on the photon identification capabilities
-of PHOS, i.e. on the hadron rejection capabilities.
-<p>This document describes the reconstruction software we intend to write/have
-written to achieve this objective. <i>Reconstruction</i> is meant as the
-full path from the PHOS digits to physical particles. The PHOS digits are
-obtained by the simulation part of AliRoot.
-<p>The PHOS reconstruction can be divided in three passes:
-<dl>
-<dt>
-<b>Clusterization</b></dt>
-
-<dd>
-We group adjacent crystals (pads) with a signal over a given threshold
-to form <i>clusters</i></dd>
-
-<dt>
-<b>Sub-Tracking</b></dt>
-
-<dd>
-Crystals and CPV clusters are associated to form PHOS <i>sub-tracks</i>.
-Loosely speaking, a PHOS sub-track is just a crystal cluster with an information
-on its charge.</dd>
-
-<dt>
-<b>Identification</b> (Tracking)</dt>
-
-<dd>
-Several (at least one) detector sub-tracks are combined and matched with
-<i>particles</i>.</dd>
-</dl>
-The two first passes are detector specific, i.e. do not require any information
-about other detectors. The last part may (and probably will) depend on
-other detector reconstructions.
-
-<p class="right">The key point in the following presented design is that
-we want to be able to experiment several alternatives in each of the three
-passes.
-<h2>
-Generalization</h2>
-We often tried to generalized our design 'one step up', i.e. up to the
-AliRoot framework itself, by defining pABC (pure Abstract Base Classes)
-which we derive from. This is by no mean of way of saying that this is
-the way to go. It's just a proposal, i.e. <i>a call for discussion</i>.
-Also, we tried to make an effort on the class names, but you might find
-our names strange or badly chosen. If this is the case, please <a href="mailto:aphecetc@in2p3.fr">tell
-us</a> !
-<br><!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<hr>
-<h1>
-Clusterization</h1>
-The clusterization part of the reconstruction can be summarized by the
-following Use Case :
-<center><img SRC="usecasereconstruction.gif" ALT="[Reconstruction Use Case]" height=355 width=599></center>
-So, the basic functionalities we want here are :
-<dl>
-<dt>
-<b>Storing/Retrieving data</b></dt>
-
-<dd>
-We want to <i>read</i> digits from file, and want to be able to <i>write</i>
-clusters on file,</dd>
-
-<dt>
-<b>Clusterizing</b></dt>
-
-<dd>
-A separate document will detail the clusterization method(s).</dd>
-
-<dt>
-<b>Keeping track of what we did</b></dt>
-
-<dd>
-We would like to be able afterwards to answer questions like "I have a
-cluster in hand, with which method has it been constructed ? With which
-method parameters ?".</dd>
-</dl>
-We would like to insist on the last point. It is far more general than
-a particular PHOS issue, and must be addressed in some way by the AliRoot
-framework itself.
-<p>The following class diagram outlines the clusterization part of the
-PHOS reconstruction : a Clusterizer object groups some Digits into Clusters.
-<center><img SRC="aliphosclusterization.gif" ALT="[Clusterization Class Diagram]" ></center>
-The key point here is the possibility to actually change of clusterization
-method (Clusterizer class) at runtime. The idea is to use the <a href="http://hillside.net/patterns/">Strategy
-Design Pattern</a> (see <a href="#particle_identification">Particle Identification</a>
-for a class diagram).
-<p>The following tables presents a trial CRC study of the PHOS classes
-related to the clusterization that lead to the above class diagram.
-<br><!-- crc template 
-<div class="crc">
-<dl>
-<dt><strong>Classname:</strong>
-<dd><em class="classname">Ali</em>
-<dt><strong>Superclasses :</strong>
-<dd>Ali
-<dt><strong>Subclasses :</strong>
-<dd>Ali
-<dt><strong>Responsabilities: </strong>
-<dd>
-<dt><strong>Collaborators: </strong>
-<dd>Ali
-</dl>
-</div>
--->
-<hr class="small-separation">
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliPHOSDigit</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-AliDigit</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-AliPHOSCrystalDigit, AliPHOSCPVDigit</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-Base class for the storage of PHOS digits. Must identify digits (module,row,column)
-and give access to the corresponding signal (energy).
-<br>It can be added to an AliPHOSCluster.</dd>
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliPHOSCluster</dd>
-</dl>
-</div>
-
-<hr class="small-separation">
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliPHOSCluster</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-AliCluster (?)</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-AliPHOSCrystalCluster, AliPHOSCPVCluster</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-Base class for PHOS Xtal/CPV clusters. A cluster must know its module,
-its spatial position, must be able to add digits to itself and to give
-access to (/iterates on) its digits.</dd>
-
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliPHOSDigit, AliPHOSGeometry</dd>
-</dl>
-</div>
-
-<hr class="small-separation">
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliPHOSGeometry</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-none</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-none</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-Handles several PHOS Xtal/CPV geometrical characteristics (sizes, positions,
-etc...).
-<br>This class is a <b>Singleton</b>.
-</dd>
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliPHOS*Cluster, AliPHOSClusterizer*</dd>
-</dl>
-</div>
-
-<hr class="small-separation">
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliPHOSClusterizer*</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-AliClusterizer</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-none</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-Concrete class(es) which implements the makeClusters method. From a list
-of Ali(PHOS)Digit, this method must compute a list of Ali(PHOS)Cluster.</dd>
-
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliPHOS*Digit, AliPHOS*Cluster</dd>
-</dl>
-</div>
-
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliParameter</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-none</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-(?) probably many of them</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-pABC. Keep track of methods used and method parameters used. What should
-be the basic interface for this ???</dd>
-
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-Many classes...</dd>
-</dl>
-</div>
-<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<hr><a NAME="sub_tracking"></a>
-<h1>
-Sub-Tracking</h1>
-Once we have crystal and CPV clusters, we must associate them to make what
-we would like to call SubTracks. Doing sub-tracks from clusters is, from
-the design point of view, much like going from digits to clusters. We should
-be able to easily change the class which actually do the sub-tracking job
-:
-<center><img SRC="aliphossubtracking.gif" ALT="[SubTracking Class Diagram]"></center>
-
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliPHOSSubTrack</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-AliSubTrack (?)</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-none</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-Concrete storage class for a PHOS subtrack. It must be able to give access
-to its clusters, and to identify itself as being part of PHOS.</dd>
-
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliPHOSSubTracker*</dd>
-</dl>
-</div>
-
-<hr class="small-separation">
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliPHOSSubTracker*</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-AliSubTracker</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-none</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-Concrete class(es) which implements the makeSubTracks method. From a list
-of Ali(PHOS)Cluster, this method must compute a list of Ali(PHOS)SubTrack.</dd>
-
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliPHOSCluster, AliPHOSSubTrack</dd>
-</dl>
-</div>
-<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<hr><a NAME="particle_identification"></a>
-<h1>
-Particle Identification</h1>
-Clusterization and subtracking are two activities that are <i>detector-driven</i>.
-We can indeed imagine that the full ALICE reconstruction could be (pseudo-)coded
-in AliRoot like :
-<pre class="code">for each detector in ALICE do {
-&nbsp; detector->Reconstruction() ;
-}</pre>
-assuming that each detector provides a Reconstruction method, and that
-there's a way to parametrize each detector's behavior. The latter could
-be done in the initialization phase of AliRoot, e.g. in the <tt>Config.C</tt>
-file :
-<pre class="code"><i>// Create PHOS clusterizers
-</i>AliPHOSCrystalClusterizerV1 aXtalClusterizer(...) ;
-AliPHOSCPVClusterizerV3 aCPVClusterizer(...) ;
-<i>// Create PHOS SubTracker
-</i>AliPHOSSubTrackerV0 aPHOSSubTracker(...) ;
-<i>// Create a PHOS Reconstructioner
-</i>AliPHOSReconstructioner aPHOSReconstructioner(aXtalClusterizer,
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aCPVClusterizer,
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aPHOSSubTracker) ;
-
-<i>// Create PHOS detector and associate
-&nbsp;a reconstructioner with it
-</i>AliPHOS* phos = new AliPHOSVxx("PHOS",
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "PHOS Version xx",
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;;aPHOSReconstructioner) ;</pre>
-In the above code, the clusterization strategies (for Xtals and CPV) and
-the sub-tracking strategy are managed by a control class AliPHOSReconstrutioner
-which would derive from a pABC AliReconstructioner.
-<center><img SRC="aliphosreconstructioner.gif" ALT="[Reconstruction Class Diagram]" height=312 width=484></center>
-The <tt>detector->Reconstruction()</tt> method would then only delegate
-its job to the selected Reconstructioner (aPHOSReconstructioner in the
-above example).
-<p>If we now turn to the particle identification problem, two cases must
-be considered :
-<dl>
-<dt>
-<b>Standalone PHOS</b></dt>
-
-<dd>
-The particle identification is just a refinement (e.g. computation of some
-new values to cut upon) of subtracking. We only need to access PHOS SubTracks.</dd>
-
-<dt>
-<b>PHOS + other ALICE sub-systems</b></dt>
-
-<dd>
-In this case, we must associate several subtracks, coming from different
-sub-systems, in order to identify particles. One problem to solve is how
-to access other sub-systems SubTracks.</dd>
-</dl>
-For this stage of the analysis, the AliRoot activity can not be detector-driven
-anymore. Instead we would like to propose this activity to be <i>particle
-hunting driven</i>. For example :
-<pre class="code"><i>// we assume that all detectors have produced their subtracks in the event event_number
-</i>AliParticleHunter* aPhotonFinder = new AliPhotonFinder(...) ;
-
-<i>/* the UseDetector("ADET") method should "connect"
-&nbsp;the ParticleHunter with the ADET subtrack branch so it can access
-&nbsp;other detectors subtracks.
-&nbsp;We assume that a subtrack knows in which detector she is, so we
-&nbsp;can recover this information later (e.g. in the FindParticles method).
-*/
-
-</i>aPhotonFinder->UseDetector("ITS") ;
-aPhotonFinder->UseDetector("TPC") ;
-aPhotonFinder->UseDetector("PHOS") ;
-
-for each event do {
-&nbsp; aPhotonFinder->FetchSubTracks(event) ;
-&nbsp; <i>/* The FindParticle method can now plays
-&nbsp;&nbsp; with all the ITS,TPC and PHOS subtracks... */
-</i>&nbsp; aPhotonFinder->FindParticles() ;
-}</pre>
-
-<center><img SRC="classes_identification.gif" ALT="[Identification Class Diagram]" height=279 width=480></center>
-
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliPHOSReconstructioner*</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-AliReconstructioner (?)</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-none</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-This class is control class for the clusterizations and the subtracking.
-It must handles the clusters and subtracks IO. It can be "added" to the
-AliPHOS detector.</dd>
-
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliPHOSClusterizer, AliPHOSSubTracker, AliPHOS</dd>
-</dl>
-</div>
-
-<div class="crc">
-<dl>
-<dt>
-<b>Classname:</b></dt>
-
-<dd>
-<i>AliParticleHunter</i></dd>
-
-<dt>
-<b>Superclasses :</b></dt>
-
-<dd>
-non</dd>
-
-<dt>
-<b>Subclasses :</b></dt>
-
-<dd>
-AliPhotonFinder</dd>
-
-<dt>
-<b>Responsabilities:</b></dt>
-
-<dd>
-Associate a number (1..n) different detector subtracks to identify particles.
-It must be able to fetch subtracks for a number of different detectors.
-It handle IO of produced particles.</dd>
-
-<dt>
-<b>Collaborators:</b></dt>
-
-<dd>
-AliSubTrack, AliParticle, AliDetector</dd>
-</dl>
-</div>
-<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<hr>
-<h1>
-Disk Storage Structure</h1>
-We present in this section how the PHOS reconstructed data will be arranged
-on disk.
-<p>We suppose that there is one TreeR (Reconstruction Tree) per event,
-and we store different kinds of objects in differents branches, i.e. the
-<b>PHOSCPVClusters
-branch</b> contains CPV clusters the <b>PHOSCrystalClusters branch</b>
-contains Crystal clusters, the <b>PHOSSubTracks branch</b> contains PHOS
-SubTracks, and the <b>PHOSParameters branch</b> contains several information
-related to the way Clusters and SubTracks were made. The following figure
-indicates the inter-relation(s) between those branches and the relation
-between those branches and the PHOS branch in the Digit Tree.
-<center><img SRC="TreeR.gif" ALT="[Reconstruction Tree Structure]" height=425 width=483></center>
-
-<h2>
-How are the links implemented ?</h2>
-If we assume that all the above branches are implemented using <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a>,
-we could index things using simple integers refering to positions in the
-TClonesArray. For example, a cluster will keep track of its digits by recording
-the list of the digits position in the TClonesArray of the PHOS branch
-in the digit tree. These positions are of course only valid within a given
-event.
-<p>If we want to be less implementation dependant we could probably have
-classes such as <i>AliDigitIdentifier</i> (which could then be anything
-we like, e.g. a simple integer wrapper or a set {event_number, index position}).
-This solution could be more disk-space consuming, but would have the tremendous
-advantage to isolate "logical" references from implementation.
-<h2>
-What should we save ?</h2>
-At least in the beginning of the analysis, we should be able to perform
-the reconstruction step by step, i.e. be able to save clusters, subtracks
-and particles. It would be nice to include a switching mechanism to e.g.
-disconnect the cluster output if we want to save disk space for instance.&nbsp;<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<hr><a NAME="parameters"></a>
-<h1>
-Keeping the entropy small</h1>
-We come back to the problem stated in the clusterization section about
-'keeping track of what we did'. We don't want to loose too much information
-along our way from the raw data to the particles so we can have some checkpoints.
-<p>We proposed in the above class diagrams to use a generic <tt>AliParameter</tt>
-class which could answer question such as 'what was the sub-tracker method
-and version used to do this sub-track ?' or 'what was the Xtal clustering
-low threshold ?'. This 'AliParameter' could be accessible through methods
-like <tt>AliParameter&amp; AliCluster::GetMakerInformation</tt>. That's
-all nice, but we say nothing about what this AliParameter class is.
-<p>We could imagine a very simple AliParameter implementation using e.g.
-(parameter_name, parameter_value) pairs encapsulated in such an AliParameter
-class. Or, entering fully the Alice Wonderland, we could dream of a much
-more ambitious generic parameter class, in which the actual storage of
-the parameters in done using <a href="http://www.w3.org">XML</a> (the W3
-eXtensible Markup Language). The base AliParameter would then only provide
-basic interface to code/decode XML tags, and each subsystems would provide
-DTD to describes their parameters, which would then ressemble 'parameters
-sheets'. We can imagine DTDs per detector or per domain (geometry, reconstruction,
-physics analysis...).
-<br>The strenght of this approach is the use of a (new) <b>standard</b>
-in which data are represented in structured ASCII files. ASCII files are
-human readable/produceable, easy to exchange between computers, and many
-tools already exists, in a wide variety of languages (C/C++, Java, Perl,
-Python...), to handles XML compliant files.
-<p>But, well, may be this is only a dream... and too much work for our
-purposes. Anyway, comments on this idea are welcome ! More information
-can be found at <a href="http://www.oasis-open.org/cover/">http://www.oasis-open.org/cover/</a>
-<br><!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<hr>
-<h1>
-Summary</h1>
-To perform the PHOS reconstruction, we need/propose the following classes
-:
-<h2>
-New classes</h2>
-
-<dl>
-<dt>
-<b>Ali(PHOS)Cluster</b></dt>
-
-<dd>
-(pABC) Storage class for groups of digits (per detector)</dd>
-
-<dt>
-<b>Ali(PHOS)SubTrack</b></dt>
-
-<dd>
-(pABC) Storage class for groups of clusters (per detector)</dd>
-
-<dt>
-<b>Ali(PHOS)Reconstructioner</b></dt>
-
-<dd>
-(pABC) Control class for clusterization and subtracking.</dd>
-
-<dt>
-<b>AliParticleHunter</b></dt>
-
-<dd>
-(pABC) Working class to associate different subtracks into particles.</dd>
-
-<dt>
-<b>AliParticle</b></dt>
-
-<dd>
-(pABC?) Storage class for particles.</dd>
-
-<dt>
-<b>AliParameter</b></dt>
-
-<dd>
-(pABC!) Entropy minimizing class. Keeps track of methods/parameters used
-to make clusters, subtracks and particles.</dd>
-
-<dt>
-<b>Ali(Digit,Cluster,SubTrack)Identifier</b></dt>
-
-<dd>
-A simple integer wrapper or a more elaborated way of indexing reconstruction
-objects, so we can go one step back at every analysis step (e.g. access
-the list of clusters a subtrack is made of).</dd>
-</dl>
-
-<h2>
-AliRoot classes impacted</h2>
-
-<dl>
-<dt>
-<b>AliRun</b></dt>
-
-<dd>
-Add Reconstruction method, which would delegate to the corresponding Reconstruction
-methods of the different detectors.</dd>
-
-<dt>
-<b>AliDetector</b></dt>
-
-<dd>
-Add GetSubTracks method (returning a list of subtracks for a given event),
-and Reconstruction method (which delegates its jobs to an AliReconstructioner
-object, selectable at runtime).</dd>
-</dl>
-
+    <h1>
+      PHOS Reconstruction
+    </h1>
+    <hr><hr>
+    <ul>
+      <li>
+       <a href="reconstruction.html#Definitions and objectives">Definitions and objectives</a>
+       <ul>
+         <li>
+           <a href="reconstruction.html#What is PHOS">What is PHOS ?</a>
+         </li>
+         <li>
+           <a href="reconstruction.html#Reconstruction design">Reconstruction design</a>
+         </li>
+         <li>
+           <a href="reconstruction.html#How to use it">How to use it</a> 
+         </li>
+       </ul>
+      <li>
+       <a href="reconstruction.html#Clusterization">Clusterization</a>
+      </li>
+      <li>
+       <a href="reconstruction.html#Sub-Track construction">Sub-Track construction</a>
+      </li>
+      <li>
+       <a href="reconstruction.html#Particle identification">Particle identification</a>
+      </li>
+      <li>
+       <a href="reconstruction.html#Disk Storage Structure">Disk Storage Structure</a>
+      </li>
+      <li>
+       <a href="reconstruction.html#How are the links implemented">How are the links implemented</a>
+      </li>
+    </ul>
+    <a NAME="Definitions and objectives"></a>
+    <hr><hr> 
+   <h1>
+      Definitions and objectives
+    </h1>
+    <a NAME="What is PHOS"></a>   <h2>
+      What is PHOS ?
+    </h2>
+    PHOS is the association of two sub-detectors: 
+    <ul>
+      <li>
+       the lead-tungstate crystals electromagnetic-calorimeter named <b>EMCA</b>, 
+      </li>
+      <li>
+       and a pre-shower gas detector named <b>PPSD</b>. 
+       </li>
+    </ul>
+    Both sub-detectors are physically organized in <i>modules</i>. A separate document
+    is dedicated to the description of the <a href="simulation.html">PHOS geometry</a>.
+    <a NAME="Reconstruction design"></a>   
+    <h2>
+      Reconstruction design
+    </h2>
+    The reconstruction software consists in making <a href="html/AliPHOSRecParticle.html">particles</a> 
+    from the <a href="html/AliPHOSDigit.html">digits</a> generated by the <a href="simulation.html">simulation</a>. 
+   <p>
+    <center>
+      <a href="images/phosreconstructs.eps"> 
+       <img src="images/phosreconstructs.gif" alt="Use Case of reconstruction" width=800>
+      </a>
+      <p>
+       <b> Figure 1.: </b> <i>Use Case for reconstruction. Only PHOS is implemented. Other detectors are ignored. 
+         Click on image for full scale</i>
+    </center>
+    The PHOS reconstruction is delegated by the <a href="html/AliPHOSv0.html">detector</a> to a 
+    <a href="html/AliPHOSReconstructioner.html">reconstructioner</a> algorithmic object. It proceeds along three steps: 
+    <dl>
+      <dt>
+       <b>Clusterization</b>
+      </dt>
+      <dd>
+       The reconstruction of the showers (total energy loss and incident direction) 
+       induced in the EM calorimeter (<a href="html/AliPHOSEmcRecPoint.html">AliPHOSEmcRecPoint</a>)
+       and of the pads hit in the pre-shower detector (<a href="html/AliPHOSPpsdRecPoint.html" >AliPHOSPpsdRecPoint</a>).
+       The clustering is delegated to the algorithmic object <a href="html/AliPHOSClusterizerv1.html">AliPHOSClusterizerv1</a> 
+       which derives from the interface <a href="html/AliPHOSClusterizer.html">AliPHOSClusterizer</a>. The clusterization is controlled
+       by several parameters.
+      </dd>
+      <dt>
+       <b>Sub-Track construction</b>
+      </dt>
+      <dd>
+       Sub tracks are obtained by combining reconstructed points in EMCA and PPSD to form a track segment 
+       (<a href="html/AliPHOSTrackSegment.html">AliPHOSTrackSegment</a>). This construction is delegated to the 
+       algorithmic object <a href="html/AliPHOSTrackSegmentMakerv1.html">AliPHOSTrackSegmentMakerv1</a> 
+       which derives from the interface <a href="html/AliPHOSTrackSegmentMaker.html">AliPHOSTrackSegmentMaker</a>. 
+      </dd>
+      <dt>
+       <b>Particle identification</b>
+      </dt>
+      <dd>
+       From each track segment a reconstructed particle (<a href="html/AliPHOSRecParticle.html">AliPHOSRecParticle</a>)
+       is made the identification being based on the information delivered by the PPSD (which PPSD stage is hit) 
+       and by EMCA (shower profile and topology).The identification is delegated to the 
+       algorithmic object <a href="html/AliPHOSPIDv1.html">AliPHOSPIDv1</a> 
+       which derives from the interface <a href="html/AliPHOSPID.html">AliPHOSPID</a>. Several parameters control the identification
+       procedure.
+      </dd>
+    </dl>
+    The first step is detector specific, i.e. does not require any information
+    about other detectors. The two last steps may (and probably will) depend on
+    other detector reconstructions (connecting sub tracks or combining particle identification delivered by 
+    various sub-detectors).
+       <a NAME="How to use it"></a> 
+    <h2>
+      How to use it ?
+    </h2>
+    This is a little piece of code which shows how to use the reconstruction. It can be used in a Root macro or the class
+    <a href="html/AliPHOSAnalyze.html">AliPHOSAnalyze</a> can be used instead together with the GUI interface 
+    <a href="EditorBar.C">EditorBar.C</a>:
+    <pre class="code">
+      fRootFile   = new TFile("MyFileName", "update") ;   // open the root file created by the simulation
+      gAlice = (AliRun*) fRootFile->Get("gAlice");        // get from file the AliRun object
+      fPHOS  = (AliPHOSv0 *)gAlice->GetDetector("PHOS") ; // get from file the detector object
+      fGeom  = AliPHOSGeometry::GetInstance(              // get the geometry used for the simulation
+                     fPHOS->GetGeometry()->GetName(), 
+                     fPHOS->GetGeometry()->GetTitle() ) ;
+
+      //========== Initializes the Index to Object converter
+      fObjGetter = AliPHOSIndexToObject::GetInstance(fPHOS) ; 
+  
+      //========== Create the Clusterizer and set a few parameters
+      fClu =  new AliPHOSClusterizerv1() ; 
+      fClu->SetEmcEnergyThreshold(0.030) ; 
+      fClu->SetEmcClusteringThreshold(1.0) ; 
+      fClu->SetPpsdEnergyThreshold    (0.0000002) ; 
+      fClu->SetPpsdClusteringThreshold(0.0000001) ; 
+      fClu->SetLocalMaxCut(0.03) ;
+      fClu->SetCalibrationParameters(0., 0.00000001) ;  
+      cout <<  "AnalyzeOneEvent > using clusterizer " << fClu->GetName() << endl ; 
+      fClu->PrintParameters() ; 
+    
+      //========== Creates the track segment maker
+      fTrs = new AliPHOSTrackSegmentMakerv1() ;
+      cout <<  "AnalyzeOneEvent > using tack segment maker " << fTrs->GetName() << endl ; 
+      fTrs->UnsetUnfoldFlag() ;
+    
+      //========== Creates the particle identifier
+      fPID = new AliPHOSPIDv1() ;
+      cout <<  "AnalyzeOneEvent > using particle identifier " << fPID->GetName() << endl ; 
+      fPID->SetShowerProfileCuts(0., 0., 0., 0.) ;
+      fPIS->SetDispersionCutOff(0.34) ;
+
+      //========== Creates the Reconstructioner  
+      fRec = new AliPHOSReconstructioner(fClu, fTrs, fPID) ;     
+    
+      //=========== Connect the various Tree's for evt
+      gAlice->GetEvent(evt);
+    
+      //=========== Fill the fDigits array from the Digit TTree
+      gAlice->TreeD()->GetEvent(0) ;     
+      
+      //=========== Do the reconstruction
+      fPHOS->Reconstruction(fRec);  
+    
+      // =========== Write to the root file
+      fRootFile->Close() ; 
+    </pre>
+    <hr>
+    <a NAME="Clusterization"></a> 
+   <h1>
+      <a href="html/AliPHOSClusterizerv1.html">Clusterization</a>
+    </h1>
+    A <a href="html/AliPHOSDigit.html">digit</a> is a set of two numbers: the id of the elementary cell
+    numbered from 1 to the maximum number of cells (EMCA+PPSD), and a digitized deposited energy. With 
+    the help of the <a href="html/AliPHOSGeometry.html">geometry</a> object the absolute id is converted into
+    a relative numbering with a single EMCA or PPSD module, in terms of rows and columns 
+    ( <i>ALIPHOSGeometry::AbsToRelNumbering()</i> ). A clustering algorithm ( <i> AliPHOSClusterizerv1::MakeClusters()</i> )
+    groups neighbouring cells in EMCA and PPSD ( <i>AliPHOSClusterizerv1::AreNeighbours()</i> ) where two cells
+    are defined as neighbours if they have a common edge or a common corner. The algorithm is controlled with
+    alltogether 4 parameters:
+    <ul>
+      <li> the energy thresholds (one for EMCA, <i>fEmcEnergyThreshold</i> and one for PPSD, <i> fPpsdEnergyThreshold</i>) 
+       which the deposited energy of the digits must surpass to be taken into account for the clusterization;
+      </li>
+      <li> the energy thresholds (one for EMCA, <i>fEmcEnergyThreshold</i> and one for PPSD, <i>fPpsdEnergyThreshold</i>) 
+       which the deposited energy of the digits must surpass to start a cluster.
+      </li>
+    </ul>
+    An ensemble of neighbouring digits is called a reconstructed point. The PHOS clusterizer produces 
+    <a href="html/AliPHOSEmcRecPoint.html">EmcRecPoints</a> and  <a href="html/AliPHOSPpsdRecPoint.html">PpsdRecPoints</a>
+    deriving form the base class <a href="html/AliPHOSRecPoint.html">AliPHOSRecPoint</a>. Each reconstructed point
+    points, through a mechanism described later, to the digits at its origin. Since a digit remembers which
+    primary particle(s) were at its origin, the list of primary particles at the origin of a reconstructed
+    point is provided by the method <i>AliPHOSRecPoint::GetPrimaries()</i>).
+    <p>
+      The reconstructed points are contained in two <a href="http://root.cern.ch/root/html/TObjArray.html">TObjArray</a> 
+      (mandatory because the size of a reconstructed
+      point depends on the number of digits used to build it) which are stored in <i>TreeR</i>, branch <i>PHOSEmcRP</i>
+      for EMCA and branch <i>PHOSPpsdRP</i> for PPSD.
+    </p>
+    <hr>
+    <a NAME="Sub-Track construction"></a> 
+    <h1>
+      <a href="html/AliPHOSTrackSegmentMakerv1.html">Track Segments Maker</a>
+    </h1>
+    Each EMCA reconstructed point is either combined with one or two PPSD reconstructed points to form 
+    a <a href="html/AliPHOSTrackSegment.html">track segment</a> or constitutes a track segment by itself. As a first step
+    the EMCA reconstructed points are unfolded in case there is more than one local maximum ( overlapping
+    showers) to make two new reconstructed points which digit's energy is shared after a fitting procedure.
+    The unfolding procedure can be switch on and off with the method: <i>AliPHOSTrackSegmentMakerv1::(Un)SetUnfoldFlag()</i>.
+    EMCA reconstructed points and PPSD reconstructed points are then linked together to form pairs or triplets
+    according to their relative distance. Each track segment points is linked, through a mechanism described later, to the 
+    reconstructed points at its origin.
+    <p>
+      The track segments are contained in a <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a> which are stored in <i>TreeR</i>, branch <i>PHOSTS</i>.
+    </p>
+    <hr>
+    <a NAME="Particle identification"></a> 
+   <h1>
+      <a href="html/AliPHOSPIDv1.html">Particle Identification</a>
+    </h1>
+    Clusterization and track segments making are two activities that are <i>detector-driven</i>. This is not the case for the
+    particle identification. Indeed a particle might be identified by combining the track segments calculated by several
+    detectors. Up to know the implementation for such a mechanism is not yet done. Instead PHOS has its own stand alone
+    particle identification algorithm which associates a <a href="html/AliPHOSRecParticle.html">reconstructed particle</a> to
+    each track segment. The particle identification is controlled by several parameters which can be set by the user. Each
+    reconstructed particle is linked, through a mechanism described later, to the track segment at its origin.
+    The various types of reconstructed particles are the following:
+    <table>
+      <tr>
+       <td><b>NEUTRAL</b>: </td>
+       <td>a reconstructed point in EMCA, none in the two layers of the PPSD;</td>
+      </tr>
+      <tr>
+       <td><b>GAMMA</b>  : </td>
+       <td>a reconstructed point in the lower PPSD layer, none in the upper one, and a reconstructed point in
+       EMCA that satisfies the shower topology cuts;</td>
+      </tr>
+      <tr>
+       <td><b>GAMMAHADRON</b> : </td>
+       <td>as a GAMMA, but the EMCA reconstructed point does not satisfy the shower topology cuts;</td>
+      </tr>
+      <tr>
+       <td><b>CHARGED</b>:  </td>
+       <td>a reconstructed point in EMCA, and one  in the upper layer of the PPSD;</td>
+      </tr>
+      <tr>
+       <td><b>NEUTRALEM</b>: </td>
+       <td>a NEUTRAL particle for which the EMCA reconstructed point satisfies the shower profile cut;</td>
+      </tr>
+      <tr>
+       <td><b>NEUTRALHADRON</b>:</td>
+       <td> a NEUTRAL particle for which the EMCA reconstructed point does not satisfy the shower profile cut;</td>
+      </tr>
+      <tr>
+       <td><b>ELECTRON</b>: </td>
+       <td>a CHARGED particle for which the EMCA reconstructed point satisfies the shower profile cut;</td>
+      </tr>
+      <tr>
+       <td><b>CHARGEDHADRON</b>:</td>
+       <td> a CHARGED particle for which the EMCA reconstructed point does not satisfy the shower profile cut;</td>
+      </tr>
+    </table>
+    <hr>
+    <a NAME="Disk Storage Structure"></a> 
+    <h1>
+      Disk Storage Structure
+    </h1>
+    All the three types of reconstructed objects( reconstructed point, track segment and reconstructed particle) are stored in
+    the reconstruction Tree (<i>TreeR</i>). The container of the reconstructed points is a 
+    <a href="http://root.cern.ch/root/html/TObjArray.html">TObjArray</a> and the container
+    of the track segment and the reconstructed particles is a 
+    <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a>. The names of the branches are respectively:
+    PHOSEmcRP, PHOSPpsdRP, PHOSTS and PHOSRP. The <i>TreeR</i> is best seen in the following example: 
+    <pre class="code">
+      root [2] TFile myfile("junk.root")
+      root [3] TTree * reconstructedtree = (TTree *)myfile.Get("TreeR0")
+      root [5] reconstructedtree.Print()
+      ******************************************************************************
+      *Tree    :TreeR0    : Reconstruction                                         *
+      *Entries :        1 : Total  Size =     10882 bytes  File  Size =       4024 *
+      *        :          : Tree compression factor =   5.65                       *
+      ******************************************************************************
+      *Branch  :PHOSEmcRP : PHOSEmcRP                                              *
+      *Entries :        1 : Total  Size =         0 bytes  File Size  =          0 *
+      *Baskets :        0 : Basket Size =     16000 bytes  Compression=   1.00     *
+      *............................................................................*
+      *Branch  :PHOSPpsdRP : PHOSPpsdRP                                            *
+      *Entries :        1 : Total  Size =      8334 bytes  File Size  =       1476 *
+      *Baskets :        1 : Basket Size =     16000 bytes  Compression=   5.65     *
+      *............................................................................*
+      *Branch  :PHOSTS    : PHOSTS                                                 *
+      *Entries :        1 : Total  Size =         0 bytes  File Size  =          0 *
+      *Baskets :        0 : Basket Size =     16000 bytes  Compression=   1.00     *
+      *............................................................................*
+      *Branch  :PHOSRP    : PHOSRP                                                 *
+      *Entries :        1 : Total  Size =         0 bytes  File Size  =          0 *
+      *Entries :        1 : Total  Size =         0 bytes  File Size  =          0 *
+      *Baskets :        0 : Basket Size =     16000 bytes  Compression=   1.00     *
+      *............................................................................*
+      root [6]                       
+    </pre>
+    <center>
+      <img src="images/BranchesInTreeR.gif" alt="branches in reconstructed Tree">
+      <p>
+       <b>Figure 2: </b><i>Branches in TreeR generated by the PHOS reconstruction.
+         PHOSEmc(Ppsd)RP contains EMCA(PPSD) reconstructed points in
+         <a href="http://root.cern.ch/root/html/TObjArray.html">TObjArray</a>;
+         PHOSTS contains track segments in a 
+         <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a>; PHOSRP contains reconstructed
+         particles in a <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a>. </i>
+      </p>
+    </center>
+    <hr>
+     <a NAME="How are the links implemented"></a> 
+    <h1>
+      How are the links implemented ?
+    </h1>
+    An algorithmic class, <a href="html/AliPHOSIndexToObject.html">AliPHOSIndexToObject</a> returns a pointer to the object of
+    interest given the index of its storage in the array 
+    (<a href="http://root.cern.ch/root/html/TObjArray.html">TObjArray</a> or 
+    <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a>). It is a singleton (only one instance of the
+    object does exist at run time). It must be initialized once:
+    <pre class="code">
+      AliPHOS * phos = (AliPHOSv0 *)gAlice->GetDetector("PHOS") ;
+      AliPHOSIndexToObject::GetInstance(phos) ; 
+    </pre>
+    It can then be used as follow, for example for retrieving a particle from the kine tree (<i>TreeK</i>):
+    <pre class="code">
+     AliPHOSIndexToObject * please = AliPHOSIndexToObject::GetInstance() ;
+     Int_t index = 123 ; 
+     TParticle * primaryparticle = please->GimePrimaryParticle(index) ;
+    </pre>
+    We shall now detail how the various reconstruction objects are linked together.
+    <h4>
+      Digits to primary particles
+    </h4>
+    <A href="html/AliPHOSDigit.html">Digits</a> have three additional data members (<i>fPrimary1(2,3)</i>) that gives the index
+    of the primary particles (maximum 3) that have contributed to the formation of the digit. Remember that in PHOS a digit is
+    obtained from all the hits accumulated in a single cell. 
+    This is not really elegant, but because the container of digits is a 
+    <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a> it is not possible
+    to replace the three data members by an array of integers of variable length as all objects in a 
+    <a href="http://root.cern.ch/root/html/TClonesArray.html">TClonesArray</a> must be identical. To retrieve the particles that
+    have contibuted to a digit, do:
+    <pre class="code">
+    // initialization
+          // open root file
+     TFile rootfile("junk.root") ;               
+          // get AliRun object
+     gAlice = (AliRun *)rootfile.Get("gAlice") ;
+          // get detector object
+     AliPHOSv0 * phos = (AliPHOSv0 *)gAlice->GetDetector("PHOS") ;
+          // get the geometry associated with the detector
+     AliPHOSGeometry::GetInstance( phos->GetGeometry()->GetName(), phos->GetGeometry()->GetTitle() ) ; 
+          // initializes the index to object converter
+     AliPHOSIndexToObject::GetInstance(phos) ;
+          // get the list of digits
+     TClonesArray * digitslist = phos->Digits() ; 
+          // loop over the list of digits
+     TIter nextdigit(digitslist) ; 
+     AliPHOSDigit * digit ; 
+     TParticle * primaryparticle[3] ; 
+          // get the pointer of the index to object converter
+     AliPHOSIndexToObject * please = AliPHOSIndexToObject::GetInstance() ;
+     while ( digit = (AliPHOSDigit * )nextdigit() ) {
+       for ( Int_t i = 0 ; i < digit->GetNprimary() ; i++ ) 
+       primary[i] = please->GimePrimaryParticle(digit->GetPrimary(i) ) ;
+     }     
+    </pre>
+    <h4>
+      Reconstructed point to Digit
+    </h4>
+    A <a href="html/AliPHOSDigit.html">digit</a> has an additional data member which is the index of the object stored
+    in the  <a href="http://root.cern.ch/root/html/TObjArray.html">TObjArray</a>. It is set by 
+    <a href="html/AliPHOSv0.html">FinishEvent()</a>. A <a href="html/AliPHOSRecPoint.html">reconstructed point</a> containing
+    a list of digits, it can retrieve the digit object with the help of 
+    <a href="html/AliPHOSIndexToObject.html">AliPHOSIndexToObject</a>:
+    <pre class="code">
+      // initialization
+          // open root file
+     TFile rootfile("junk.root") ;               
+          // get AliRun object
+     gAlice = (AliRun *)rootfile.Get("gAlice") ;
+          // get detector object
+     AliPHOSv0 * phos = (AliPHOSv0 *)gAlice->GetDetector("PHOS") ;
+          // get the geometry associated with the detector
+     AliPHOSGeometry::GetInstance( phos->GetGeometry()->GetName(), phos->GetGeometry()->GetTitle() ) ; 
+          // initializes the index to object converter
+     AliPHOSIndexToObject::GetInstance(phos) ;
+          // get the reconstructed points list
+     Int_t evt = 123 ; 
+     TObjArray * recpointslist = phos->EmcRecPoints(evt) ; 
+          // loop over reconstructed points 
+     TIter nextrecpoint(recpointslist) ; 
+          // get the pointer of the index to object converter
+     AliPHOSIndexToObject * please = AliPHOSIndexToObject::GetInstance() ;
+     AliPHOSEmcRecPoint * recpoint ;  
+     while ( recpoint = (AliPHOSEmcRecPoint * )nextrecpoint() ) {
+             // get the associated digits list
+       Int_t * digitsindexeslist = recpoint->GetDigitsList() ;
+             // loop over the list of digits
+       for ( Int_t i = 0 ; i < recpoint->GetDigitsMultiplicity() ; i++ ) {
+         AliPHOSDigit * digit = please->GimeDigit(digitsindexeslist[i] ) ;
+               // get the primary particle associated with that digit
+        Int_t numberofprimaries = 0 ; 
+        Int_t * prim = digit->GetPrimaries(numberofprimaries) ;
+         for (Int_t i = 0 ; i < numberofprimaries ; i++ )
+           // and print them 
+          please->GimePrimaryParticle( prim[i] )->Print()  ;
+         } 
+       } 
+         // or get the primaries directly from the reconstructed point
+       Int_t numberofprimaries = 0 ; 
+       Int_t * prim = recpoint->GetPrimaries(numberofprimaries) ;  
+     }       
+    </pre>
+    <h4>
+      Track segment to reconstructed point 
+    </h4>
+    A <a href="html/AliPHOSRecPoint.html">reconstructed point</a> has an additional data member which is the index of the object stored
+    in the  <a href="http://root.cern.ch/root/html/TClonesArray.html">TClnesArray</a>. It is set by the 
+    <a href="html/AliPHOSReconstructioner.html">reconstructioner</a>. 
+    A <a href="html/AliPHOSTrackSegment.html">track segment</a> contains the index of one EMCA reconstructed points and two 
+    PPSD reconstructed points, it can retrieve this reconstructed point objects with the help of 
+    <a href="html/AliPHOSIndexToObject.html">AliPHOSIndexToObject</a>:
+    <pre class="code">
+     // initialization
+          // open root file
+     TFile rootfile("junk.root") ;               
+          // get AliRun object
+     gAlice = (AliRun *)rootfile.Get("gAlice") ;
+          // get detector object
+     AliPHOSv0 * phos = (AliPHOSv0 *)gAlice->GetDetector("PHOS") ;
+          // get the geometry associated with the detector
+     AliPHOSGeometry::GetInstance( phos->GetGeometry()->GetName(), phos->GetGeometry()->GetTitle() ) ; 
+          // initializes the index to object converter
+     AliPHOSIndexToObject::GetInstance(phos) ;
+          // get the track segments list
+     Int_t evt = 123 ; 
+     TClonesArray * tracksegmentslist = phos->TrackSegments(evt) ; 
+          // loop over track segments
+     TIter nexttracksegment(tracksegmentslist) ; 
+     AliPHOSTrackSegment * tracksegment ;  
+         // get the pointer of the index to object converter
+     AliPHOSIndexToObject * please = AliPHOSIndexToObject::GetInstance() ;
+     while ( tracksegment = (AliPHOSTrackSegment * )nexttracksegment() ) {
+           // get the associated reconstructed points
+         AliPHOSEmcRecPoint  * emcrecpoint     = please->GimeRecPoint(tracksegment->GetEmcRecPoint(),    "emc" ) ;
+         AliPHOSPpsdRecPoint * ppsduprecpoint  = please->GimeRecPoint(tracksegment->GetPpsdUpRecPoint(), "ppsd" ) ;
+         AliPHOSPpsdRecPoint * ppsdlowrecpoint = please->GimeRecPoint(tracksegment->GetPpsdLowRecPoint(),"ppsd" ) ;
+          // get the primaries particles  
+         Int_t numberofprimariestoemc = 0 ; 
+         Int_t * primemc = tracksegment->GetPrimariesEmc(numberofprimariestoemc) ;
+         Int_t numberofprimariestoppsdup = 0 ; 
+         Int_t * primppsdup = tracksegment->GetPrimariesPpsdUp(numberofprimariestoppsdup) ;
+         Int_t numberofprimariestoppsdlow = 0 ; 
+         Int_t * primppsdlow = tracksegment->GetPrimariesPpsdLow(numberofprimariestoppsdlow) ;
+          // print one as example  
+         please->GimePrimaryParticle( primppsdlow[0] )->Print()  ;     
+       }
+     rootfile.Close() ;
+     gAlice = 0 ; 
+     phos = 0 ; 
+     recparticleslist = 0 ;
+     </pre>    
+    <h4>
+      Reconstructed particle to Track segment  
+    </h4>
+    A <a href="html/AliPHOSTrackSegment.html">track segment</a> has an additional data member which is the index of the object stored
+    in the  <a href="http://root.cern.ch/root/html/TClonesArray.html">TClnesArray</a>. It is set by the 
+    <a href="html/AliPHOSReconstructioner.html">reconstructioner</a>. 
+    A <a href="html/AliPHOSRecParticle.html">reconstructed particle</a> contains the index of a track segment, 
+    it can retrieve this reconstructed point objects with the help of 
+    <a href="html/AliPHOSIndexToObject.html">AliPHOSIndexToObject</a>:
+    <pre class="code">
+     // initialization
+          // open root file
+     TFile rootfile("junk.root") ;               
+          // get AliRun object
+     gAlice = (AliRun *)rootfile.Get("gAlice") ;
+          // get detector object
+     AliPHOSv0 * phos = (AliPHOSv0 *)gAlice->GetDetector("PHOS") ;
+          // get the geometry associated with the detector
+     AliPHOSGeometry::GetInstance( phos->GetGeometry()->GetName(), phos->GetGeometry()->GetTitle() ) ; 
+          // initializes the index to object converter
+     AliPHOSIndexToObject::GetInstance(phos) ;
+          // get the reconstructed particles list
+     Int_t evt = 123 ; 
+     TClonesArray * recparticleslist = phos->RecParticles(evt) ; 
+     // loop over reconstructed particles
+     TIter nextrecparticle(recparticleslist) ; 
+     AliPHOSRecParticle * recparticle ;  
+       // get the pointer of the index to object converter
+     AliPHOSIndexToObject * please = AliPHOSIndexToObject::GetInstance() ;
+     while ( recparticle = (AliPHOSRecParticle * )nextrecparticle() ) {
+           // get the track segment ...
+         AliPHOSTrackSegment  * tracksegment  = recparticle->GetPHOSTrackSegment()  ;
+           // and print it
+        tracksegment->Print() ;
+           // get the list of primaries ...
+        Int_t numberofprimaries = 0 ; 
+        Int_t * prim = recparticle->GetPrimaries(numberofprimaries) ;
+         for (Int_t i = 0 ; i < numberofprimaries ; i++ )
+           // and print them 
+          please->GimePrimaryParticle( prim[i] )->Print()  ; 
+    }     
+     rootfile.Close() ;
+     gAlice = 0 ; 
+     phos = 0 ; 
+     recparticleslist = 0 ;
+    </pre>
+    A short cut allows to access the primaries at the origin of the reconstructed particle:
+    <pre class="code">
+     Int_t numberofprimaries = 0 ; 
+     Int_t * prim = recparticle->GetPrimariesPpsdLow(numberofprimaries) ;
+    </pre>    
 <hr>
 <address class="left">
-&copy; <a href="mailto:aphecetc@in2p3.fr">Groupe Photons Subatech</a> <a href="http://www-subatech.in2p3.fr/~photons/subatech/en_index.shtml">[Go
+&copy; <a href="mailto:schutz@in2p3.fr">Groupe Photons Subatech</a> <a href="http://www-subatech.in2p3.fr/~photons/subatech/en_index.shtml">[Go
 to the GPS Home Page]</a></address>
 
 <address class="right"> 
 <!-- Created: Tue Oct 26 19:52:56 CEST 1999 -->
 <!-- hhmts start -->
-Last modified: Wed Dec  1 18:54:10 CET 1999
+Last modified: Sun Mar 26 17:20:12 CEST 2000
 <!-- hhmts end --></address>
 
-<div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>
+<!-- <div align=right><a href="http://validator.w3.org/check/referer"><img SRC="images/vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="images/vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div> -->
 
 </body>
 </html>
index 0319262..986bcda 100644 (file)
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
                "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.5-15 i686) [Netscape]">
-   <title>PHOS Reconstruction Proposal</title>
-<link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
-</head>
-<body>
-
-<h1 class="page-header">
-Simulation</h1>
-
-<h2>Event generation</h2>
-
-<P>
-One of the main ingredients to simulate the physic performance of PHOS is the
-generation of a realistic background in central Pb+Pb collisions at LHC energies. <BR> <BR>
-However, most of ALICE subdetectors are sensitive to charged particles and, in
-consequence, the charged hadronic background is the most important one (see for
-instance <A HREF="http://www.cern.ch/ALICE/Projects/offline/evgen/Welcome.html">AliGenHIJINGPara class</A>). <BR>
-However, PHOS detector is sensitive to most of particles: electrons, muon, photons, charged and neutral hadrons. In
-particular the main background is generated by the electromagnetic decay of the neutral pion, which was omitted 
-in the background generators classes defined in aliroot package 3.01.  <BR>
-<BR>
-Within this respect, we have defined a new class: 
-<A HREF="ttp://www.cern.ch/ALICE/Projects/offline/aliroot/roothtml/src/AliGenPHOSlib.cxx.html">AliGenPHOSlib class</A>,
-and adapted the 
-<A HREF="http://www.cern.ch/ALICE/Projects/offline/aliroot/roothtml/src/AliGenParam.cxx.html">AliGenParam class</A> class in
-order to be able to simulate the full neutral and charged background which is present in heavy-ion collisions.
-All these stuff has been included in the aliroot version 3.02.<BR>
-<BR>
-
-Enclosed, an exemple of the aliroot config file is reported. 
-This neutral and charged background contains pi+, pi-,pi0,K+,K-,kshort,Klong,eta,omega,p. p bar, n and n bar with 
-relative yields given by hijing in Pb+Pb central collisions (results from venus or shaker are close to the hijing ones).
-Pion transverse momentum (Pt) distribution is taken from AliGenMUONlib class, version 3.01 of aliroot: 
-Pt Parameterization CDF (PRL 61(88) 1819):  Power law  for Pt > 500 MeV and Mt scaling below (slope T=160 MeV).
-Meson Pt distributions are calculated by mt-scaling with pions (see 
-<A HREF="http://www.cern.ch/ALICE/Projects/offline/evgen/Welcome.html">AliGenMUONlib or AliGenPHOSlib class</A>). 
-
-<PRE class="code">
-//=======================================================================
-// ************* STEERING parameters FOR ALICE SIMULATION **************
-// --- Specify event type to be tracked through the ALICE setup
-// --- All positions are in cm, angles in degrees, and P and E in GeV
-//
-// The following Cocktail generator is defined to simulate the neutral and
-// charged background in the ALICE detector. This background is important 
-// in the case of photon detector as PHOS. We simulated a cocktail of 
-// pions (pi+, pi- and pi0) , kaons (K+, K-, Kshort and Klong), eta mesons, 
-// omega mesons and main baryons (protons, antiprotons, neutrons and
-// antineutrons) 
-//
-// 1-Nov-1999 Gines MARTINEZ, GPS @ SUBATECH, Nantes, France  
-//
-Int_t ParticleDensity =  8000    // Number of particles created in the selected rapidity range
-Int_t NumberOfPions   =  0.77 * ParticleDensity ;  // ~77% of pions: pi^+, pi^- and pi^0 with equal probability 
-Int_t NumberOfKaons   =  0.11 * ParticleDensity ;  // ~11% of kaons: K^+, K^-, K_short and K_long with equal probability
-Int_t NumberOfEtas    =  0.04 * ParticleDensity ;  // ~4.0% of eta mesons
-Int_t NumberOfOmegas  =  0.01 * ParticleDensity ;  // ~1.0% of omega mesons
-Int_t NumberOfBaryons =  0.07 * ParticleDensity ;  // ~7.0% of baryons: p, pbar, n and nbar with equal probability
-
-AliGenCocktail *gener = new AliGenCocktail();                                \\ Cocktail class
- gener->SetPtRange(.5,5.);       // Transverse momentum range   
- gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
- gener->SetYRange(-0.5,0.5);     // Pseudorapidity range
- gener->SetOrigin(0,0,0);        // Vertex position
- gener->SetSigma(0,0,5.6);       // Sigma in (X,Y,Z) (cm) on IP position
-//
-// P  I  O  N  S
-    AliGenParam *generpion = new AliGenParam(NumberOfPions,Pion,
-                 AliGenPHOSlib::GetPt(Pion), AliGenPHOSlib::GetY(Pion), AliGenPHOSlib::GetIp(Pion)  );
-    generpion->SetWeighting(non_analog);   // Selecting the Pt distribution provided by AliGenPHOSlib::GetPt
-    generpion->SetForceDecay(nodecay);     // Requiring that the generated particle is directly tracked by GEANT
-//
-//  K  A  O  N  S
-   AliGenParam *generkaon = new AliGenParam(NumberOfKaons,Kaon, 
-                AliGenPHOSlib::GetPt(Kaon), AliGenPHOSlib::GetY(Kaon), AliGenPHOSlib::GetIp(Kaon)   );
-    generkaon->SetWeighting(non_analog);   // Selecting the Pt distribution provided by AliGenPHOSlib::GetPt
-    generkaon->SetForceDecay(nodecay);     // Requiring that the generated particle is directly tracked by GEANT
-//
-// E  T  A  S
-    AliGenParam *genereta = new AliGenParam(NumberOfEtas,Eta,            
-                 AliGenPHOSlib::GetPt(Eta), AliGenPHOSlib::GetY(Eta), AliGenPHOSlib::GetIp(Eta) );
-    genereta->SetWeighting(non_analog);   // Selecting the Pt distribution provided by AliGenPHOSlib::GetPt
-    genereta->SetForceDecay(nodecay);     // Requiring that the generated particle is directly tracked by GEANT
-//
-// O M E G A S
-    AliGenParam *generomega = new AliGenParam(NumberOfOmegas,Omega,            
-                 AliGenPHOSlib::GetPt(Omega), AliGenPHOSlib::GetY(Omega), AliGenPHOSlib::GetIp(Omega) );
-    generomega->SetWeighting(non_analog);   // Selecting the Pt distribution provided by AliGenPHOSlib::GetPt
-    generomega->SetForceDecay(nodecay);    // Requiring that the generated particle is directly tracked by GEANT
-//
-// B A R Y O N S
-
-    AliGenParam *generbaryon = new AliGenParam(NumberOfBaryons,Baryon,            
-                 AliGenPHOSlib::GetPt(Baryon), AliGenPHOSlib::GetY(Baryon), AliGenPHOSlib::GetIp(Baryon) );
-    generbaryon->SetWeighting(non_analog);   // Selecting the Pt distribution provided by AliGenPHOSlib::GetPt
-    generbaryon->SetForceDecay(nodecay);    // Requiring that the generated particle is directly tracked by GEANT
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+    <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.5-15 i686) [Netscape]">
+    <title>PHOS Geometry in AliRoot</title>
+    <link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+  <body>
     
-    
-  gener->AddGenerator(generpion,"pion",1.);
-  gener->AddGenerator(generkaon,"kaon",1.);
-  gener->AddGenerator(genereta,"eta",1.);
-  gener->AddGenerator(generomega,"omega",1.);
-  gener->AddGenerator(generbaryon,"baryon",1.);
-  gener->Init();
-</pre>
-
-
-The resulting hit and digit TTree's (one per event) will be stored
-in the root file on disk.
-
-<hr>
-<address class="left">
-&copy; <a href="mailto:aphecetc@in2p3.fr">Groupe Photons Subatech</a> <a href="http://www-subatech.in2p3.fr/~photons/subatech/en_index.shtml">[Go
-to the GPS Home Page]</a></address>
+    <h1 class="page-header">
+      Geometry & Materials
+    </h1>
+    <h1>
+      Simulation
+    </h1>
+    The simulation is done in two steps, one which describes the detector geometry
+    and material and one which does the particle tracking and stores the hits
+    and digits in a  <a href="http://root.cern.ch/root/html/TTree.html">TTree</a> itself written on a disk file. These two steps are
+    steered through the Config.C file(<a href="PHOSConfig_Central.C">example</a>), 
+    a root macro launched at the AliRoot prompt. To customize this file you must:
+    <br><br>
+    <ol>
+      <li>
+       select a file name for the root output:
+       <pre class="code">
+       //=======================================================================
+       //  Create the output file
+       sprintf(filename,"<b>myfilename</b>.root");
+       </pre>
+       </li>
+      <li>
+       Define your event generator and simulations parameters:
+       <pre class="code">
+         AliGenCocktail *gener = new AliGenCocktail(); // Cocktail class
+         gener->SetPtRange(.02,10.00);                 // Transverse momentum range   
+         gener->SetPhiRange(180.,360.);                // Azimuthal angle range  
+         gener->SetYRange(-0.25,0.25);                 // Pseudorapidity range
+         gener->SetOrigin(0,0,0);                      // Vertex position
+         gener->SetSigma(0,0,5.6);                     // Sigma in (X,Y,Z) (cm) on IP position
+         gener->Init();                                // Initialize the generator
+       </pre>
+      </li>
+      <li>
+       Select the detector seen by the tracking:
+       <pre class="code">
+         Int_t iPHOS=1;    // PHOS is in
+         Int_t iPMD=0;     // PMD  is out
+       </pre>
+      </li>
+      <li>
+       Create a PHOS object (<b>GPS2</b> is so far the unique configuration option, see below):
+       <pre class="code"> 
+         if(iPHOS) {
+         //=================== PHOS parameters =========================== 
+         AliPHOS *PHOS  = new AliPHOSv0("PHOS","<b>GPS2</b>");
+       </pre>
+      </li>
+    </ol>
+    <p>
+      You van now run the simulation by entering the following command at the aliroot prompt:
+      <pre class="code">
+       aliroot> gAlice->Run(1,"PHOSConfig_Central.C");  
+    </pre>
+    <h1>
+      Geometry
+    </h1>
+    <h4>
+      Definition
+    </h4>
+    PHOS consists of two distinct parts. The calorimeter, named EMCA, consists
+    of the PbW04 crystals within their housing. The crystals are assembled
+    in <i>fNModules</i> modules of <i>fNPhi </i>rows along the x-axis direction
+    and <i>fNZ</i> modules along the z-axis direction. Since the total number
+    of crystals and their layout within ALICE is presently (11/11/1999) not
+    final it was decided to fully parametrize the geometry. A change in any
+    of the three previously defined parameters will provide automatically a
+    new layout of the modules.
+    <br>The second part of PHOS is the charged particle identifier. Since until
+    end of 2000 no decision will be taken on the final design of this element
+    two or more versions can be considered. Today (11/11/1999) only one version
+    is implemented and is named PPSD for PHOS Pre-Shower Detector. It consists
+    of a first layer of <i>fNumberOfModulesPhi</i> x <i>fNumberOfModulesZ </i>gas
+    detectors per PHOS module, each detectors being subdivided into <i>fNumberOfPadsPhi</i>
+    x <i>fNumberOfPadsZ </i>gas cells, a Lead converter and a second layer
+    of gas detectors identical to the first layer. This second part is positionned
+    on top of the EMCA module.
+    <p>
+      The class <a href="./html/AliPHOSv0.html"> AliPHOSv0 </a> ( <a href="./html/AliPHOSv0_Tree.ps"> inheritance tree </a>) 
+      describes this geometry. We have defined also a class 
+      <a href="./html/AliPHOSv1.html"> AliPHOSv1 </a> ( <a href="./html/AliPHOSv1_Tree.ps"> inheritance tree </a>) 
+      which in addition contains the photodiode response and the light transport through the crystal.
+    <p>
+      The parameters of the geometry are given in class  <a href="./html/AliPHOSGeometry.html"> AliPHOSGeometry </a>( <a href="./html/AliPHOSGeometry_Tree.ps"> inheritance tree </a>)
+      <br><br>
+    <center>
+      <img SRC=" images/EMCinAlice.gif" ALT="Geant Tree for PHOS" >
+      <br><br>
+      <b> Figure 1.a: </b> <i> GEANT Tree which describes the EMC-PHOS geometry </i>
+    </center>
+    <P>
+    <center>
+      <img SRC=" images/PPSDinAlice.gif" ALT="Geant Tree for PHOS" >
+      <br><br>
+      <b> Figure 1.b: </b> <i> GEANT Tree which describes the PPSD-PHOS geometry </i>
+    </center>
+    <h4>
+      Implementation
+    </h4>
+    <p>
+    <center>
+      <img SRC="./images/aliphossimulation.gif" ALT="Geom/Simul class diagram" >
+      <br><br>
+      <b> Figure 2.: </b> <i> Class diagram for the geometry/simulation package </i>
+    </center>
+    <p>
+      <a href="./html/AliPHOS.html"><i><u>AliPHOS</u></i></a>: This is the base class. It derives from <i>AliDetector.
+      </i>It's only purpose is to describe the materials
+      (&agrave; la <i>AliMC</i>) needed for the EMCA and PPSD construction.
+    <p>
+      <a href="./html/AliPHOSv0.html"><i><u>AliPHOSv4</u></i></a>: It derives from <i>AliPHOS</i>.
+      <br>
+    <ul>
+      <li>
+       It sets up the geometry for the Root display (<i>AliPHOSv4::BuildGeometry()</i>)
+       and for the GEANT tracking (<i>AliPHOSv4::CreateGeometry()</i>).
+      </li>
+      <li>
+       It watches the tracks passing through the active media of EMCA and PPSD
+       (<i>AliPHOSv4::StepManager()</i>).
+      </li>
+      <li>
+       It stores the hits (<i>AliPHOSv4::AddHit()</i>), using the <i>AliPHOSHit</i>
+       class.
+      </li>
+      <li>
+       It stores the digits (<i>AliPHOSv4::FinishEvent()</i>), using the <i>AliPHOSDigit</i>
+       class.
+      </li>
+    </ul>
+    <p>
+      <a href="./html/AliPHOSv1.html"><i><u>AliPHOSv1</u></i></a> : derives from <i>AliPHOSv0</i> and includes the light transport 
+      in the crystal and the response of the PIN photodiode &agrave; la O. H. Oddland.
+    <p>
+      <a href="./html/AliPHOSvFast.html"><i><u>AliPHOSvFast</u></i></a> : used for <a href="fastsimulation.html">fast simulation</a>.
+    <p>
+      <a href="./html/AliPHOSGeometry.html"><i><u>AliPHOSGeometry</u></i></a> : It derives from <i>TObject</i> to make it
+       persistent. It is a singleton, i.e., a pointer to the unique instance of
+       this class is obtained by:
+    <center>
+      <pre class="code">
+        AliPHOSGeometry * Geom = AliPHOSGeometry::GetInstance()
+      </pre>
+    </center>
+    <ul>
+      <li>
+       It sets the various parameters for the geometry description and provides
+       the method to access all the parameters. To avoid cumbersome macros at
+       run time these parameters can only be changed manually in the source code.
+      </li>
+      <li>
+       It provides the method to convert the absolute detector Id (crystal in
+       EMCA or pad in PPSD) into a relative Id : PHOS module number, PPSD module
+       number, row, column (<i>AliPHOSGeometry::AbsToRelNumbering()</i>) and the
+       reverse operation (<i>AliPHOSGeometry::RelToAbsNumbering()</i>).
+      </li>
+      <li>
+       It provides the method to convert an absolute Id into a three-vector giving
+       the position of the detector in ALICE (<i>AliPHOSGeometry::RelPosInAlice()</i>).
+      </li>
+    </ul>
+    <p>
+       <a href="./html/AliPHOSHit.html"><i><u>AliPHOSHit</u></i></a>: It derives from <i>AliHit</i>. It stores the
+       hits as the pair (absolute Id, deposited energy). The hits presently are stored  in the hit TTree 
+       as one hit per elementary cell (EMC crystal or PPSD gas cell) (See the 
+       the AddHit() method in <i>AliPHOSv0</i>).
+    <p>
+       <a href="./html/AliPHOSDigit.html"><i><u>AliPHOSDigit</u></i></a> : It derives from <i>AliDigit</i>. It stores
+      the digits as the pair (absolute Id, energy) in the digit TTree (see 
+      the FinishEvent() method in <i>AliPHOSv0</i>).
+    <h1>
+      Usage
+    </h1>
+    <p>
+    <pre class="code">
+     Int_t iPHOS=1;
+     if(iPHOS) {
+     AliPHOS * phos = new AliPHOSv4("PHOS", char * name) ;
+    </pre>
+    <br>
+    where name can take the following values:
+    <ul>
+      <li>
+       <i>GPS2</i>: will create EMCA plus PPSD
+       <br><br>
+       <center>
+         <img SRC="images/AliPHOSv0AllViews.gif" ALT="ROOT display of PHOS: All Views" >
+         <b> Figure 3a.: </b> <i> ROOT Display of ALICE: All Views   </i>
+         <p>
+           <img SRC="images/AliPHOSv0FrontView.gif" ALT="ROOT display of PHOS: Front View" >
+           <b> Figure 3b.: </b> <i> ROOT Display of ALICE: Front Views   </i>
+         <p>
+           <img SRC="images/AliPHOSv03DView1.gif" ALT="ROOT display of PHOS: 3D View" >
+           <b> Figure 3c.: </b> <i> ROOT Display of ALICE: All View3   </i>
+         <p>
+           <img SRC="images/AliPHOSv0PPSDFrontView.gif" ALT="Zoom on PPSD: Front View " >
+           <b> Figure 4.a: </b> <i> ROOT Display of ALICE: zoom on PPSD, Front Views  </i>
+         <p>
+           <img SRC="images/AliPHOSv0PPSDPerspectiveView.gif" ALT="Zoom on PPSD: Perspective View " >
+           <b> Figure 4.b: </b> <i> ROOT Display of ALICE: zoom on PPSD, Perspective View  </i>
+       </center> <br><br>
+      </li>
+      <li>
+       more to come from Protvino (EMCA plus other CPV type)</li>
+    </ul>
+    <br>
+    EMCA consists of 5 modules of 64x64 modules each, positionned at
+    azimuthal angles -40, -20, 0, +20, +40 (see figures). PPSD consists per
+    EMCA module of 2 layers of 4x4 gas detectors each, each detector having
+    24x24 gas cells. 
+    <h1>
+      Result
+    </h1>
 
-<address class="right">
-<!-- Created: Tue Oct 26 19:52:56 CEST 1999 -->
-<!-- hhmts start -->
-Last modified: Mon Nov 15 18:55:06 CET 1999
-<!-- hhmts end --></address>
+    <hr>
+    <address class="left">
+      &copy; <a href="mailto:schutz@in2p3.fr">>Groupe Photons Subatech (Yves SCHUTZ)</a>
+      <a href="http://www-subatech.in2p3.fr/~photons/subatech/en_index.shtml">[Go
+       to the GPS Home Page]</a>
+</address>
+    <!-- Created: Wed Nov 17 12:16:58 CET 1999 -->
+    <!-- hhmts start -->
+Last modified: Sun Mar 26 17:37:28 CEST 2000
+<!-- hhmts end -->
+ <!--   <div align=right><a href="http://validator.w3.org/check/referer"><img SRC="images/vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="images/vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>-->
 
-<div align=right><a href="http://validator.w3.org/check/referer"><img SRC="vh40.gif" ALT="Valid HTML 4.0!" BORDER=0 height=31 width=88></a><a href="http://jigsaw.w3.org/css-validator"><img SRC="vcss.gif" ALT="Valid CSS!" BORDER=0 height=31 width=88></a></div>
-
-</body>
+    
+  </body>
 </html>
+