]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added the html files in PHOS-HTML
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Dec 1999 16:44:12 +0000 (16:44 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Dec 1999 16:44:12 +0000 (16:44 +0000)
54 files changed:
PHOS/PHOS-HTML/ALICE-detector.gif [new file with mode: 0644]
PHOS/PHOS-HTML/ALICE-logo-half.gif [new file with mode: 0644]
PHOS/PHOS-HTML/ALICE-logo.gif [new file with mode: 0644]
PHOS/PHOS-HTML/AliGeometry.cxx [new file with mode: 0644]
PHOS/PHOS-HTML/AliGeometry.h [new file with mode: 0644]
PHOS/PHOS-HTML/AliPHOSGeometry.cxx [new file with mode: 0644]
PHOS/PHOS-HTML/AliPHOSGeometry.h [new file with mode: 0644]
PHOS/PHOS-HTML/AliRecPoint.cxx [new file with mode: 0644]
PHOS/PHOS-HTML/AliRecPoint.h [new file with mode: 0644]
PHOS/PHOS-HTML/AlicebyGeant.gif [new file with mode: 0644]
PHOS/PHOS-HTML/AlicebyRoot.gif [new file with mode: 0644]
PHOS/PHOS-HTML/FMNV03P14_17.tn.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/NWSV14P14_14.0767.tn.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/PHOSAlone.gif [new file with mode: 0644]
PHOS/PHOS-HTML/PHOSGeantTree.gif [new file with mode: 0644]
PHOS/PHOS-HTML/PHOSTree.gif [new file with mode: 0644]
PHOS/PHOS-HTML/Title1.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/Title2.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/TreeR.gif [new file with mode: 0644]
PHOS/PHOS-HTML/abl.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/alice-half.gif [new file with mode: 0644]
PHOS/PHOS-HTML/alice.gif [new file with mode: 0644]
PHOS/PHOS-HTML/aliphosclusterization.gif [new file with mode: 0644]
PHOS/PHOS-HTML/aliphosreconstructioner.gif [new file with mode: 0644]
PHOS/PHOS-HTML/aliphossimul.gif [new file with mode: 0644]
PHOS/PHOS-HTML/aliphossimulation.gif [new file with mode: 0644]
PHOS/PHOS-HTML/aliphossubtracking.gif [new file with mode: 0644]
PHOS/PHOS-HTML/alirecpoint.html [new file with mode: 0644]
PHOS/PHOS-HTML/alirecpointclass.gif [new file with mode: 0644]
PHOS/PHOS-HTML/alirecpointclass.html [new file with mode: 0644]
PHOS/PHOS-HTML/alirecpointclassdiagram.gif [new file with mode: 0644]
PHOS/PHOS-HTML/alirecpointclassdiagram.html [new file with mode: 0644]
PHOS/PHOS-HTML/bar3.gif [new file with mode: 0644]
PHOS/PHOS-HTML/classes_clusterization.gif [new file with mode: 0644]
PHOS/PHOS-HTML/classes_identification.gif [new file with mode: 0644]
PHOS/PHOS-HTML/classes_reconstruction.gif [new file with mode: 0644]
PHOS/PHOS-HTML/classes_subtracking.gif [new file with mode: 0644]
PHOS/PHOS-HTML/clusterization.gif [new file with mode: 0644]
PHOS/PHOS-HTML/fastsimulation.html [new file with mode: 0644]
PHOS/PHOS-HTML/geometry.html [new file with mode: 0644]
PHOS/PHOS-HTML/go.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/index.html [new file with mode: 0644]
PHOS/PHOS-HTML/reconstruction.html [new file with mode: 0644]
PHOS/PHOS-HTML/reconstruction_clusterization.gif [new file with mode: 0644]
PHOS/PHOS-HTML/simulation.html [new file with mode: 0644]
PHOS/PHOS-HTML/star.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/sun.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/tournesol.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/ufi.jpg [new file with mode: 0644]
PHOS/PHOS-HTML/usecasefastsimulation.gif [new file with mode: 0644]
PHOS/PHOS-HTML/usecasegeneral.gif [new file with mode: 0644]
PHOS/PHOS-HTML/usecasereconstruction.gif [new file with mode: 0644]
PHOS/PHOS-HTML/vcss.gif [new file with mode: 0644]
PHOS/PHOS-HTML/vh40.gif [new file with mode: 0644]

diff --git a/PHOS/PHOS-HTML/ALICE-detector.gif b/PHOS/PHOS-HTML/ALICE-detector.gif
new file mode 100644 (file)
index 0000000..332d849
Binary files /dev/null and b/PHOS/PHOS-HTML/ALICE-detector.gif differ
diff --git a/PHOS/PHOS-HTML/ALICE-logo-half.gif b/PHOS/PHOS-HTML/ALICE-logo-half.gif
new file mode 100644 (file)
index 0000000..b815f41
Binary files /dev/null and b/PHOS/PHOS-HTML/ALICE-logo-half.gif differ
diff --git a/PHOS/PHOS-HTML/ALICE-logo.gif b/PHOS/PHOS-HTML/ALICE-logo.gif
new file mode 100644 (file)
index 0000000..f643ffe
Binary files /dev/null and b/PHOS/PHOS-HTML/ALICE-logo.gif differ
diff --git a/PHOS/PHOS-HTML/AliGeometry.cxx b/PHOS/PHOS-HTML/AliGeometry.cxx
new file mode 100644 (file)
index 0000000..e5aa8de
--- /dev/null
@@ -0,0 +1,50 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1  1999/12/17 09:01:14  fca
+Y.Schutz new classes for reconstruction
+
+*/
+
+//-*-C++-*-
+//_________________________________________________________________________
+// AliGeometry base class is pABC
+//*-- Author : Yves Schutz  SUBATECH 
+//////////////////////////////////////////////////////////////////////////////
+
+// --- ROOT system ---
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+
+#include "AliGeometry.h"
+
+ClassImp(AliGeometry)
+
+//____________________________________________________________________________
+AliGeometry::AliGeometry()
+{
+  // ctor
+}
+
+//____________________________________________________________________________
+AliGeometry::~AliGeometry()
+{
+  // dtor
+}
+
diff --git a/PHOS/PHOS-HTML/AliGeometry.h b/PHOS/PHOS-HTML/AliGeometry.h
new file mode 100644 (file)
index 0000000..e5aa8de
--- /dev/null
@@ -0,0 +1,50 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1  1999/12/17 09:01:14  fca
+Y.Schutz new classes for reconstruction
+
+*/
+
+//-*-C++-*-
+//_________________________________________________________________________
+// AliGeometry base class is pABC
+//*-- Author : Yves Schutz  SUBATECH 
+//////////////////////////////////////////////////////////////////////////////
+
+// --- ROOT system ---
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+
+#include "AliGeometry.h"
+
+ClassImp(AliGeometry)
+
+//____________________________________________________________________________
+AliGeometry::AliGeometry()
+{
+  // ctor
+}
+
+//____________________________________________________________________________
+AliGeometry::~AliGeometry()
+{
+  // dtor
+}
+
diff --git a/PHOS/PHOS-HTML/AliPHOSGeometry.cxx b/PHOS/PHOS-HTML/AliPHOSGeometry.cxx
new file mode 100644 (file)
index 0000000..18e2e7a
--- /dev/null
@@ -0,0 +1,438 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+//_________________________________________________________________________
+// Geometry class for PHOS version SUBATECH
+//*-- Author : Y. Schutz SUBATECH 
+//////////////////////////////////////////////////////////////////////////////
+
+// --- ROOT system ---
+
+#include "TVector3.h"
+#include "TRotation.h" 
+
+// --- Standard library ---
+
+#include <iostream.h>
+#include "assert.h"
+
+// --- AliRoot header files ---
+
+#include "AliPHOSGeometry.h"
+#include "AliPHOSPpsdRecPoint.h"
+#include "AliConst.h"
+
+ClassImp(AliPHOSGeometry)
+
+  AliPHOSGeometry * AliPHOSGeometry::fGeom = 0 ;
+
+//____________________________________________________________________________
+AliPHOSGeometry::~AliPHOSGeometry(void)
+{
+  fRotMatrixArray->Delete() ; 
+  delete fRotMatrixArray ; 
+}
+
+//____________________________________________________________________________
+Bool_t AliPHOSGeometry::AbsToRelNumbering(const Int_t AbsId, Int_t * RelId)
+{
+  // RelId[0] = PHOS Module number 1:fNModules 
+  // RelId[1] = 0 if PbW04
+  //          = PPSD Module number 1:fNumberOfModulesPhi*fNumberOfModulesZ*2 (2->up and bottom level)
+  // RelId[2] = Row number inside a PHOS or PPSD module
+  // RelId[3] = Column number inside a PHOS or PPSD module
+
+  Bool_t rv  = kTRUE ; 
+  Float_t Id = AbsId ;
+
+  Int_t PHOSModuleNumber = (Int_t)TMath:: Ceil( Id / ( GetNPhi() * GetNZ() ) ) ; 
+  
+  if ( PHOSModuleNumber >  GetNModules() ) { // its a PPSD pad
+
+    Id -=  GetNPhi() * GetNZ() *  GetNModules() ; 
+    Float_t tempo = 2 *  GetNumberOfModulesPhi() * GetNumberOfModulesZ() *  GetNumberOfPadsPhi() * GetNumberOfPadsZ() ; 
+    RelId[0] = (Int_t)TMath::Ceil( Id / tempo ) ; 
+    Id -= ( RelId[0] - 1 ) * tempo ;
+    RelId[1] = (Int_t)TMath::Ceil( Id / ( GetNumberOfPadsPhi() * GetNumberOfPadsZ() ) ) ; 
+    Id -= ( RelId[1] - 1 ) * GetNumberOfPadsPhi() * GetNumberOfPadsZ() ;
+    RelId[2] = (Int_t)TMath::Ceil( Id / GetNumberOfPadsPhi() ) ;
+    RelId[3] = (Int_t) ( Id - ( RelId[2] - 1 )  * GetNumberOfPadsPhi() ) ; 
+  } 
+  else { // its a PW04 crystal
+
+    RelId[0] = PHOSModuleNumber ;
+    RelId[1] = 0 ;
+    Id -= ( PHOSModuleNumber - 1 ) *  GetNPhi() * GetNZ() ; 
+    RelId[2] = (Int_t)TMath::Ceil( Id / GetNPhi() ) ;
+    RelId[3] = (Int_t)( Id - ( RelId[2] - 1 ) * GetNPhi() ) ; 
+  } 
+  return rv ; 
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos, TMatrix & gmat)
+{
+
+  AliPHOSRecPoint * tmpPHOS = (AliPHOSRecPoint *) RecPoint ;  
+  TVector3 LocalPosition ;
+
+  tmpPHOS->GetLocalPosition(gpos) ;
+
+
+  if ( tmpPHOS->IsEmc() ) // it is a EMC crystal 
+    {  gpos.SetY( -(GetIPtoOuterCoverDistance() + GetUpperPlateThickness() +
+                   GetSecondUpperPlateThickness() + GetUpperCoolingPlateThickness()) ) ;  
+
+    }
+  else
+    { // it is a PPSD pad
+      AliPHOSPpsdRecPoint * tmpPpsd = (AliPHOSPpsdRecPoint *) RecPoint ;
+      if (tmpPpsd->GetUp() ) // it is an upper module
+       {
+         gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() - 
+                      GetLeadToMicro2Gap() - GetLeadConverterThickness() -  
+                      GetMicro1ToLeadGap() - GetMicromegas1Thickness() / 2.0 )  ) ; 
+       } 
+      else // it is a lower module
+       gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() / 2.0) ) ; 
+    }  
+
+  Float_t Phi           = GetPHOSAngle( tmpPHOS->GetPHOSMod()) ; 
+  Double_t const RADDEG = 180.0 / kPI ;
+  Float_t rPhi          = Phi / RADDEG ; 
+  
+  TRotation Rot ;
+  Rot.RotateZ(-rPhi) ; // a rotation around Z by angle  
+  
+  TRotation dummy = Rot.Invert() ;  // to transform from original frame to rotate frame
+  gpos.Transform(Rot) ; // rotate the baby 
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos)
+{
+  AliPHOSRecPoint * tmpPHOS = (AliPHOSRecPoint *) RecPoint ;  
+  TVector3 LocalPosition ;
+  tmpPHOS->GetLocalPosition(gpos) ;
+
+
+  if ( tmpPHOS->IsEmc() ) // it is a EMC crystal 
+    {  gpos.SetY( -(GetIPtoOuterCoverDistance() + GetUpperPlateThickness() +
+                   GetSecondUpperPlateThickness() + GetUpperCoolingPlateThickness()) ) ;  
+    }
+  else
+    { // it is a PPSD pad
+      AliPHOSPpsdRecPoint * tmpPpsd = (AliPHOSPpsdRecPoint *) RecPoint ;
+      if (tmpPpsd->GetUp() ) // it is an upper module
+       {
+         gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() - 
+                      GetLeadToMicro2Gap() - GetLeadConverterThickness() -  
+                      GetMicro1ToLeadGap() - GetMicromegas1Thickness() / 2.0 )  ) ; 
+       } 
+      else // it is a lower module
+       gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() / 2.0) ) ; 
+    }  
+
+  Float_t Phi           = GetPHOSAngle( tmpPHOS->GetPHOSMod()) ; 
+  Double_t const RADDEG = 180.0 / kPI ;
+  Float_t rPhi          = Phi / RADDEG ; 
+  
+  TRotation Rot ;
+  Rot.RotateZ(-rPhi) ; // a rotation around Z by angle  
+  
+  TRotation dummy = Rot.Invert() ;  // to transform from original frame to rotate frame
+  gpos.Transform(Rot) ; // rotate the baby 
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::Init(void)
+{
+  fRotMatrixArray = new TObjArray(fNModules) ; 
+
+  cout << "PHOS geometry setup: parameters for option " << fName << " " << fTitle << endl ;
+  if ( ((strcmp( fName, "default" )) == 0)  || ((strcmp( fName, "GPS2" )) == 0) ) {
+    fInit     = kTRUE ; 
+    this->InitPHOS() ; 
+    this->InitPPSD() ;
+    this->SetPHOSAngles() ; 
+  }
+ else {
+   fInit = kFALSE ; 
+   cout << "PHOS Geometry setup: option not defined " << fName << endl ; 
+ }
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::InitPHOS(void)
+{
+     // PHOS 
+
+  fNPhi     = 64 ; 
+  fNZ       = 64 ; 
+  fNModules =  5 ; 
+  
+  fPHOSAngle[0] = 0.0 ; // Module position angles are set in CreateGeometry()
+  fPHOSAngle[1] = 0.0 ;
+  fPHOSAngle[2] = 0.0 ;
+  fPHOSAngle[3] = 0.0 ;
+  fXtlSize[0] =  2.2 ;
+  fXtlSize[1] = 18.0 ;
+  fXtlSize[2] =  2.2 ;
+
+  // all these numbers coming next are subject to changes
+
+  fOuterBoxThickness[0] = 2.8 ;
+  fOuterBoxThickness[1] = 5.0 ;      
+  fOuterBoxThickness[2] = 5.0 ;
+  
+  fUpperPlateThickness  = 4.0 ;
+  
+  fSecondUpperPlateThickness = 5.0 ; 
+  
+  fCrystalSupportHeight   = 6.95 ; 
+  fCrystalWrapThickness   = 0.01 ;
+  fCrystalHolderThickness = 0.005 ;
+  fModuleBoxThickness     = 2.0 ; 
+  fIPtoOuterCoverDistance = 447.0 ;      
+  fIPtoCrystalSurface     = 460.0 ;  
+  
+  fPinDiodeSize[0] = 1.0 ;    
+  fPinDiodeSize[1] = 0.1 ;    
+  fPinDiodeSize[2] = 1.0 ;    
+  
+  fUpperCoolingPlateThickness   = 0.06 ; 
+  fSupportPlateThickness        = 10.0 ;
+  fLowerThermoPlateThickness    =  3.0 ; 
+  fLowerTextolitPlateThickness  =  1.0 ;
+  fGapBetweenCrystals           = 0.03 ;
+  
+  fTextolitBoxThickness[0] = 1.5 ;  
+  fTextolitBoxThickness[1] = 0.0 ;   
+  fTextolitBoxThickness[2] = 3.0 ; 
+  
+  fAirThickness[0] =  1.56   ;
+  fAirThickness[1] = 20.5175 ;  
+  fAirThickness[2] =  2.48   ;  
+  
+  Float_t XtalModulePhiSize =  fNPhi * ( fXtlSize[0] + 2 * fGapBetweenCrystals ) ; 
+  Float_t XtalModuleZSize   =  fNZ * ( fXtlSize[2] + 2 * fGapBetweenCrystals ) ;
+  
+  // The next dimensions are calculated from the above parameters
+  
+  fOuterBoxSize[0] =  XtalModulePhiSize + 2 * ( fAirThickness[0] + fModuleBoxThickness
+                                               + fTextolitBoxThickness[0] + fOuterBoxThickness[0] ) ; 
+  fOuterBoxSize[1] = ( fXtlSize[1] + fCrystalSupportHeight + fCrystalWrapThickness + fCrystalHolderThickness )
+    + 2 * (fAirThickness[1] +  fModuleBoxThickness + fTextolitBoxThickness[1] + fOuterBoxThickness[1] ) ;
+  fOuterBoxSize[2] =  XtalModuleZSize +  2 * ( fAirThickness[2] + fModuleBoxThickness 
+                                              + fTextolitBoxThickness[2] + fOuterBoxThickness[2] ) ; 
+  
+  fTextolitBoxSize[0]  = fOuterBoxSize[0] - 2 * fOuterBoxThickness[0] ;
+  fTextolitBoxSize[1]  = fOuterBoxSize[1] -  fOuterBoxThickness[1] - fUpperPlateThickness ;
+  fTextolitBoxSize[2]  = fOuterBoxSize[2] - 2 * fOuterBoxThickness[2] ;
+  
+  fAirFilledBoxSize[0] =  fTextolitBoxSize[0] - 2 * fTextolitBoxThickness[0] ; 
+  fAirFilledBoxSize[1] =  fTextolitBoxSize[1] - fSecondUpperPlateThickness ; 
+  fAirFilledBoxSize[2] =  fTextolitBoxSize[2] - 2 * fTextolitBoxThickness[2] ; 
+  
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::InitPPSD(void)
+{
+    // PPSD
+    
+  fAnodeThickness           = 0.0009 ; 
+  fAvalancheGap             = 0.01 ; 
+  fCathodeThickness         = 0.0009 ;
+  fCompositeThickness       = 0.3 ; 
+  fConversionGap            = 0.3 ; 
+  fLeadConverterThickness   = 0.56 ; 
+  fLeadToMicro2Gap          = 0.1 ; 
+  fLidThickness             = 0.2 ; 
+  fMicro1ToLeadGap          = 0.1 ; 
+  fMicromegasWallThickness  = 0.6 ; 
+  fNumberOfModulesPhi       = 4 ; 
+  fNumberOfModulesZ         = 4 ; 
+  fNumberOfPadsPhi          = 24 ; 
+  fNumberOfPadsZ            = 24 ;   
+  fPCThickness              = 0.1 ; 
+  fPhiDisplacement          = 0.8 ;  
+  fZDisplacement            = 0.8 ;  
+
+  fMicromegas1Thickness   = fLidThickness + 2 * fCompositeThickness + fCathodeThickness + fPCThickness 
+                              + fAnodeThickness + fConversionGap + fAvalancheGap ; 
+  fMicromegas2Thickness   = fMicromegas1Thickness ; 
+
+
+  fPPSDModuleSize[0] = 38.0 ; 
+  fPPSDModuleSize[1] = fMicromegas1Thickness ; 
+  fPPSDModuleSize[2] = 38.0 ; 
+  fPPSDBoxSize[0] = fNumberOfModulesPhi * fPPSDModuleSize[0] + 2 * fPhiDisplacement ;  
+  fPPSDBoxSize[1] = fMicromegas2Thickness + fMicromegas2Thickness + fLeadConverterThickness + fMicro1ToLeadGap + fLeadToMicro2Gap ;    
+  fPPSDBoxSize[2] = fNumberOfModulesZ *  fPPSDModuleSize[2] + 2 * fZDisplacement ;
+
+  fIPtoTopLidDistance     = fIPtoOuterCoverDistance -  fPPSDBoxSize[1] - 1. ;  
+  
+}
+
+//____________________________________________________________________________
+AliPHOSGeometry *  AliPHOSGeometry::GetInstance() 
+{ 
+  assert(fGeom!=0) ; 
+  return (AliPHOSGeometry *) fGeom ; 
+}
+
+//____________________________________________________________________________
+AliPHOSGeometry *  AliPHOSGeometry::GetInstance(const Text_t* name, const Text_t* title) 
+{
+  AliPHOSGeometry * rv = 0  ; 
+  if ( fGeom == 0 ) {
+    fGeom = new AliPHOSGeometry(name, title) ; 
+    rv = (AliPHOSGeometry * ) fGeom ; 
+  }
+  else {
+    if ( strcmp(fGeom->GetName(), name) != 0 ) {
+      cout << "AliPHOSGeometry <E> : current geometry is " << fGeom->GetName() << endl
+          << "                      you cannot call     " << name << endl ; 
+    }
+    else
+      rv = (AliPHOSGeometry *) fGeom ; 
+  } 
+  return rv ; 
+}
+
+//____________________________________________________________________________
+Bool_t AliPHOSGeometry::RelToAbsNumbering(const Int_t * RelId, Int_t &  AbsId)
+{
+
+  // AbsId = 1:fNModules * fNPhi * fNZ  -> PbWO4
+  // AbsId = 1:fNModules * 2 * (fNumberOfModulesPhi * fNumberOfModulesZ) * fNumberOfPadsPhi * fNumberOfPadsZ -> PPSD
+
+  Bool_t rv = kTRUE ; 
+  if ( RelId[1] > 0 ) { // its a PPSD pad
+
+    AbsId =    GetNPhi() * GetNZ() *  GetNModules()                          // the offset to separate emcal crystals from PPSD pads
+      + ( RelId[0] - 1 ) * GetNumberOfModulesPhi() * GetNumberOfModulesZ()   // the pads offset of PHOS modules 
+                         * GetNumberOfPadsPhi() * GetNumberOfPadsZ() * 2
+      + ( RelId[1] - 1 ) * GetNumberOfPadsPhi() * GetNumberOfPadsZ()         // the pads offset of PPSD modules 
+      + ( RelId[2] - 1 ) * GetNumberOfPadsPhi()                              // the pads offset of a PPSD row
+      + RelId[3] ;                                                           // the column number
+  } 
+  else {
+    if ( RelId[1] == 0 ) { // its a Phos crystal
+      AbsId =  ( RelId[0] - 1 ) *  GetNPhi() * GetNZ() // the offset of PHOS modules
+        + ( RelId[2] - 1 ) * GetNPhi()                 // the offset of a xtal row
+        + RelId[3] ;                                   // the column number
+    }
+  }
+
+  return rv ; 
+}
+
+//____________________________________________________________________________
+
+void AliPHOSGeometry::RelPosInAlice(const Int_t Id, TVector3 & pos ) 
+{
+   if (Id > 0) { 
+
+  Int_t RelId[4] ;
+  AbsToRelNumbering(Id , RelId) ;
+
+  Int_t PHOSModule = RelId[0] ; 
+
+  
+  if ( RelId[1] == 0 ) // it is a PbW04 crystal 
+  {  pos.SetY( -(GetIPtoOuterCoverDistance() + GetUpperPlateThickness()
+      + GetSecondUpperPlateThickness() + GetUpperCoolingPlateThickness()) ) ;  
+  }
+  if ( RelId[1] > 0 ) { // its a PPSD pad
+    if ( RelId[1] >  GetNumberOfModulesPhi() *  GetNumberOfModulesZ() ) // its an bottom module
+     {
+       pos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() / 2.0) ) ;
+     } 
+    else // its an upper module
+      pos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() - GetLeadToMicro2Gap()
+       -  GetLeadConverterThickness() -  GetMicro1ToLeadGap() - GetMicromegas1Thickness() / 2.0) ) ; 
+  }
+
+  Float_t x, z ; 
+  RelPosInModule(RelId, x, z) ; 
+
+  pos.SetX(x);
+  pos.SetZ(z);
+
+
+   Float_t Phi           = GetPHOSAngle( PHOSModule) ; 
+   Double_t const RADDEG = 180.0 / kPI ;
+   Float_t rPhi          = Phi / RADDEG ; 
+
+   TRotation Rot ;
+   Rot.RotateZ(-rPhi) ; // a rotation around Z by angle  
+  
+   TRotation dummy = Rot.Invert() ;  // to transform from original frame to rotate frame
+  
+   pos.Transform(Rot) ; // rotate the baby 
+  }
+  else {
+ pos.SetX(0.);
+ pos.SetY(0.);
+ pos.SetZ(0.);
+       }
+} 
+
+//____________________________________________________________________________
+void AliPHOSGeometry::RelPosInModule(const Int_t * RelId, Float_t & x, Float_t & z) 
+{
+  Int_t PPSDModule  ; 
+  Int_t Row        = RelId[2] ; //offset along z axiz
+  Int_t Column     = RelId[3] ; //offset along x axiz
+
+  Float_t PadSizeZ = GetPPSDModuleSize(2)/ GetNumberOfPadsZ();
+  Float_t PadSizeX = GetPPSDModuleSize(0)/ GetNumberOfPadsPhi();
+
+  if ( RelId[1] == 0 ) { // its a PbW04 crystal 
+    x = -( GetNPhi()/2. - Row   + 0.5 ) *  GetCrystalSize(0) ; // position ox Xtal with respect
+    z = -( GetNZ() /2. - Column + 0.5 ) *  GetCrystalSize(2) ; // of center of PHOS module  
+   }  
+   else  {    
+    if ( RelId[1] >  GetNumberOfModulesPhi() *  GetNumberOfModulesZ() )
+       PPSDModule =  RelId[1]-GetNumberOfModulesPhi() *  GetNumberOfModulesZ(); 
+    else PPSDModule =  RelId[1] ;
+    Int_t ModRow = 1+(Int_t)TMath::Ceil( (Float_t)PPSDModule / GetNumberOfModulesPhi()-1. ) ; 
+    Int_t ModCol = PPSDModule -  ( ModRow-1 ) * GetNumberOfModulesPhi() ;     
+    Float_t x0 = (  GetNumberOfModulesPhi() / 2.  - ModRow  + 0.5 ) * GetPPSDModuleSize(0) ;
+    Float_t z0 = (  GetNumberOfModulesZ() / 2.  - ModCol  + 0.5 ) * GetPPSDModuleSize(2)  ;     
+    x = - ( GetNumberOfPadsPhi()/2. - Row - 0.5 ) * PadSizeX + x0 ; // position of pad  with respect
+    z = - ( GetNumberOfPadsZ()/2.   - Column - 0.5 ) * PadSizeZ + z0 ; // of center of PHOS module  
+         }
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry:: SetPHOSAngles() 
+{ 
+  Double_t const RADDEG = 180.0 / kPI ;
+  Float_t PPHI =  TMath::ATan( fOuterBoxSize[0]  / ( 2.0 * fIPtoOuterCoverDistance ) ) ;
+  PPHI *= RADDEG ;
+  
+  for( Int_t i = 1; i <= fNModules ; i++ ) {
+    Float_t angle = PPHI * 2 * ( i - fNModules / 2.0 - 0.5 ) ;
+    fPHOSAngle[i-1] = -  angle ;
+ } 
+}
+
diff --git a/PHOS/PHOS-HTML/AliPHOSGeometry.h b/PHOS/PHOS-HTML/AliPHOSGeometry.h
new file mode 100644 (file)
index 0000000..18e2e7a
--- /dev/null
@@ -0,0 +1,438 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+//_________________________________________________________________________
+// Geometry class for PHOS version SUBATECH
+//*-- Author : Y. Schutz SUBATECH 
+//////////////////////////////////////////////////////////////////////////////
+
+// --- ROOT system ---
+
+#include "TVector3.h"
+#include "TRotation.h" 
+
+// --- Standard library ---
+
+#include <iostream.h>
+#include "assert.h"
+
+// --- AliRoot header files ---
+
+#include "AliPHOSGeometry.h"
+#include "AliPHOSPpsdRecPoint.h"
+#include "AliConst.h"
+
+ClassImp(AliPHOSGeometry)
+
+  AliPHOSGeometry * AliPHOSGeometry::fGeom = 0 ;
+
+//____________________________________________________________________________
+AliPHOSGeometry::~AliPHOSGeometry(void)
+{
+  fRotMatrixArray->Delete() ; 
+  delete fRotMatrixArray ; 
+}
+
+//____________________________________________________________________________
+Bool_t AliPHOSGeometry::AbsToRelNumbering(const Int_t AbsId, Int_t * RelId)
+{
+  // RelId[0] = PHOS Module number 1:fNModules 
+  // RelId[1] = 0 if PbW04
+  //          = PPSD Module number 1:fNumberOfModulesPhi*fNumberOfModulesZ*2 (2->up and bottom level)
+  // RelId[2] = Row number inside a PHOS or PPSD module
+  // RelId[3] = Column number inside a PHOS or PPSD module
+
+  Bool_t rv  = kTRUE ; 
+  Float_t Id = AbsId ;
+
+  Int_t PHOSModuleNumber = (Int_t)TMath:: Ceil( Id / ( GetNPhi() * GetNZ() ) ) ; 
+  
+  if ( PHOSModuleNumber >  GetNModules() ) { // its a PPSD pad
+
+    Id -=  GetNPhi() * GetNZ() *  GetNModules() ; 
+    Float_t tempo = 2 *  GetNumberOfModulesPhi() * GetNumberOfModulesZ() *  GetNumberOfPadsPhi() * GetNumberOfPadsZ() ; 
+    RelId[0] = (Int_t)TMath::Ceil( Id / tempo ) ; 
+    Id -= ( RelId[0] - 1 ) * tempo ;
+    RelId[1] = (Int_t)TMath::Ceil( Id / ( GetNumberOfPadsPhi() * GetNumberOfPadsZ() ) ) ; 
+    Id -= ( RelId[1] - 1 ) * GetNumberOfPadsPhi() * GetNumberOfPadsZ() ;
+    RelId[2] = (Int_t)TMath::Ceil( Id / GetNumberOfPadsPhi() ) ;
+    RelId[3] = (Int_t) ( Id - ( RelId[2] - 1 )  * GetNumberOfPadsPhi() ) ; 
+  } 
+  else { // its a PW04 crystal
+
+    RelId[0] = PHOSModuleNumber ;
+    RelId[1] = 0 ;
+    Id -= ( PHOSModuleNumber - 1 ) *  GetNPhi() * GetNZ() ; 
+    RelId[2] = (Int_t)TMath::Ceil( Id / GetNPhi() ) ;
+    RelId[3] = (Int_t)( Id - ( RelId[2] - 1 ) * GetNPhi() ) ; 
+  } 
+  return rv ; 
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos, TMatrix & gmat)
+{
+
+  AliPHOSRecPoint * tmpPHOS = (AliPHOSRecPoint *) RecPoint ;  
+  TVector3 LocalPosition ;
+
+  tmpPHOS->GetLocalPosition(gpos) ;
+
+
+  if ( tmpPHOS->IsEmc() ) // it is a EMC crystal 
+    {  gpos.SetY( -(GetIPtoOuterCoverDistance() + GetUpperPlateThickness() +
+                   GetSecondUpperPlateThickness() + GetUpperCoolingPlateThickness()) ) ;  
+
+    }
+  else
+    { // it is a PPSD pad
+      AliPHOSPpsdRecPoint * tmpPpsd = (AliPHOSPpsdRecPoint *) RecPoint ;
+      if (tmpPpsd->GetUp() ) // it is an upper module
+       {
+         gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() - 
+                      GetLeadToMicro2Gap() - GetLeadConverterThickness() -  
+                      GetMicro1ToLeadGap() - GetMicromegas1Thickness() / 2.0 )  ) ; 
+       } 
+      else // it is a lower module
+       gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() / 2.0) ) ; 
+    }  
+
+  Float_t Phi           = GetPHOSAngle( tmpPHOS->GetPHOSMod()) ; 
+  Double_t const RADDEG = 180.0 / kPI ;
+  Float_t rPhi          = Phi / RADDEG ; 
+  
+  TRotation Rot ;
+  Rot.RotateZ(-rPhi) ; // a rotation around Z by angle  
+  
+  TRotation dummy = Rot.Invert() ;  // to transform from original frame to rotate frame
+  gpos.Transform(Rot) ; // rotate the baby 
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos)
+{
+  AliPHOSRecPoint * tmpPHOS = (AliPHOSRecPoint *) RecPoint ;  
+  TVector3 LocalPosition ;
+  tmpPHOS->GetLocalPosition(gpos) ;
+
+
+  if ( tmpPHOS->IsEmc() ) // it is a EMC crystal 
+    {  gpos.SetY( -(GetIPtoOuterCoverDistance() + GetUpperPlateThickness() +
+                   GetSecondUpperPlateThickness() + GetUpperCoolingPlateThickness()) ) ;  
+    }
+  else
+    { // it is a PPSD pad
+      AliPHOSPpsdRecPoint * tmpPpsd = (AliPHOSPpsdRecPoint *) RecPoint ;
+      if (tmpPpsd->GetUp() ) // it is an upper module
+       {
+         gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() - 
+                      GetLeadToMicro2Gap() - GetLeadConverterThickness() -  
+                      GetMicro1ToLeadGap() - GetMicromegas1Thickness() / 2.0 )  ) ; 
+       } 
+      else // it is a lower module
+       gpos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() / 2.0) ) ; 
+    }  
+
+  Float_t Phi           = GetPHOSAngle( tmpPHOS->GetPHOSMod()) ; 
+  Double_t const RADDEG = 180.0 / kPI ;
+  Float_t rPhi          = Phi / RADDEG ; 
+  
+  TRotation Rot ;
+  Rot.RotateZ(-rPhi) ; // a rotation around Z by angle  
+  
+  TRotation dummy = Rot.Invert() ;  // to transform from original frame to rotate frame
+  gpos.Transform(Rot) ; // rotate the baby 
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::Init(void)
+{
+  fRotMatrixArray = new TObjArray(fNModules) ; 
+
+  cout << "PHOS geometry setup: parameters for option " << fName << " " << fTitle << endl ;
+  if ( ((strcmp( fName, "default" )) == 0)  || ((strcmp( fName, "GPS2" )) == 0) ) {
+    fInit     = kTRUE ; 
+    this->InitPHOS() ; 
+    this->InitPPSD() ;
+    this->SetPHOSAngles() ; 
+  }
+ else {
+   fInit = kFALSE ; 
+   cout << "PHOS Geometry setup: option not defined " << fName << endl ; 
+ }
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::InitPHOS(void)
+{
+     // PHOS 
+
+  fNPhi     = 64 ; 
+  fNZ       = 64 ; 
+  fNModules =  5 ; 
+  
+  fPHOSAngle[0] = 0.0 ; // Module position angles are set in CreateGeometry()
+  fPHOSAngle[1] = 0.0 ;
+  fPHOSAngle[2] = 0.0 ;
+  fPHOSAngle[3] = 0.0 ;
+  fXtlSize[0] =  2.2 ;
+  fXtlSize[1] = 18.0 ;
+  fXtlSize[2] =  2.2 ;
+
+  // all these numbers coming next are subject to changes
+
+  fOuterBoxThickness[0] = 2.8 ;
+  fOuterBoxThickness[1] = 5.0 ;      
+  fOuterBoxThickness[2] = 5.0 ;
+  
+  fUpperPlateThickness  = 4.0 ;
+  
+  fSecondUpperPlateThickness = 5.0 ; 
+  
+  fCrystalSupportHeight   = 6.95 ; 
+  fCrystalWrapThickness   = 0.01 ;
+  fCrystalHolderThickness = 0.005 ;
+  fModuleBoxThickness     = 2.0 ; 
+  fIPtoOuterCoverDistance = 447.0 ;      
+  fIPtoCrystalSurface     = 460.0 ;  
+  
+  fPinDiodeSize[0] = 1.0 ;    
+  fPinDiodeSize[1] = 0.1 ;    
+  fPinDiodeSize[2] = 1.0 ;    
+  
+  fUpperCoolingPlateThickness   = 0.06 ; 
+  fSupportPlateThickness        = 10.0 ;
+  fLowerThermoPlateThickness    =  3.0 ; 
+  fLowerTextolitPlateThickness  =  1.0 ;
+  fGapBetweenCrystals           = 0.03 ;
+  
+  fTextolitBoxThickness[0] = 1.5 ;  
+  fTextolitBoxThickness[1] = 0.0 ;   
+  fTextolitBoxThickness[2] = 3.0 ; 
+  
+  fAirThickness[0] =  1.56   ;
+  fAirThickness[1] = 20.5175 ;  
+  fAirThickness[2] =  2.48   ;  
+  
+  Float_t XtalModulePhiSize =  fNPhi * ( fXtlSize[0] + 2 * fGapBetweenCrystals ) ; 
+  Float_t XtalModuleZSize   =  fNZ * ( fXtlSize[2] + 2 * fGapBetweenCrystals ) ;
+  
+  // The next dimensions are calculated from the above parameters
+  
+  fOuterBoxSize[0] =  XtalModulePhiSize + 2 * ( fAirThickness[0] + fModuleBoxThickness
+                                               + fTextolitBoxThickness[0] + fOuterBoxThickness[0] ) ; 
+  fOuterBoxSize[1] = ( fXtlSize[1] + fCrystalSupportHeight + fCrystalWrapThickness + fCrystalHolderThickness )
+    + 2 * (fAirThickness[1] +  fModuleBoxThickness + fTextolitBoxThickness[1] + fOuterBoxThickness[1] ) ;
+  fOuterBoxSize[2] =  XtalModuleZSize +  2 * ( fAirThickness[2] + fModuleBoxThickness 
+                                              + fTextolitBoxThickness[2] + fOuterBoxThickness[2] ) ; 
+  
+  fTextolitBoxSize[0]  = fOuterBoxSize[0] - 2 * fOuterBoxThickness[0] ;
+  fTextolitBoxSize[1]  = fOuterBoxSize[1] -  fOuterBoxThickness[1] - fUpperPlateThickness ;
+  fTextolitBoxSize[2]  = fOuterBoxSize[2] - 2 * fOuterBoxThickness[2] ;
+  
+  fAirFilledBoxSize[0] =  fTextolitBoxSize[0] - 2 * fTextolitBoxThickness[0] ; 
+  fAirFilledBoxSize[1] =  fTextolitBoxSize[1] - fSecondUpperPlateThickness ; 
+  fAirFilledBoxSize[2] =  fTextolitBoxSize[2] - 2 * fTextolitBoxThickness[2] ; 
+  
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry::InitPPSD(void)
+{
+    // PPSD
+    
+  fAnodeThickness           = 0.0009 ; 
+  fAvalancheGap             = 0.01 ; 
+  fCathodeThickness         = 0.0009 ;
+  fCompositeThickness       = 0.3 ; 
+  fConversionGap            = 0.3 ; 
+  fLeadConverterThickness   = 0.56 ; 
+  fLeadToMicro2Gap          = 0.1 ; 
+  fLidThickness             = 0.2 ; 
+  fMicro1ToLeadGap          = 0.1 ; 
+  fMicromegasWallThickness  = 0.6 ; 
+  fNumberOfModulesPhi       = 4 ; 
+  fNumberOfModulesZ         = 4 ; 
+  fNumberOfPadsPhi          = 24 ; 
+  fNumberOfPadsZ            = 24 ;   
+  fPCThickness              = 0.1 ; 
+  fPhiDisplacement          = 0.8 ;  
+  fZDisplacement            = 0.8 ;  
+
+  fMicromegas1Thickness   = fLidThickness + 2 * fCompositeThickness + fCathodeThickness + fPCThickness 
+                              + fAnodeThickness + fConversionGap + fAvalancheGap ; 
+  fMicromegas2Thickness   = fMicromegas1Thickness ; 
+
+
+  fPPSDModuleSize[0] = 38.0 ; 
+  fPPSDModuleSize[1] = fMicromegas1Thickness ; 
+  fPPSDModuleSize[2] = 38.0 ; 
+  fPPSDBoxSize[0] = fNumberOfModulesPhi * fPPSDModuleSize[0] + 2 * fPhiDisplacement ;  
+  fPPSDBoxSize[1] = fMicromegas2Thickness + fMicromegas2Thickness + fLeadConverterThickness + fMicro1ToLeadGap + fLeadToMicro2Gap ;    
+  fPPSDBoxSize[2] = fNumberOfModulesZ *  fPPSDModuleSize[2] + 2 * fZDisplacement ;
+
+  fIPtoTopLidDistance     = fIPtoOuterCoverDistance -  fPPSDBoxSize[1] - 1. ;  
+  
+}
+
+//____________________________________________________________________________
+AliPHOSGeometry *  AliPHOSGeometry::GetInstance() 
+{ 
+  assert(fGeom!=0) ; 
+  return (AliPHOSGeometry *) fGeom ; 
+}
+
+//____________________________________________________________________________
+AliPHOSGeometry *  AliPHOSGeometry::GetInstance(const Text_t* name, const Text_t* title) 
+{
+  AliPHOSGeometry * rv = 0  ; 
+  if ( fGeom == 0 ) {
+    fGeom = new AliPHOSGeometry(name, title) ; 
+    rv = (AliPHOSGeometry * ) fGeom ; 
+  }
+  else {
+    if ( strcmp(fGeom->GetName(), name) != 0 ) {
+      cout << "AliPHOSGeometry <E> : current geometry is " << fGeom->GetName() << endl
+          << "                      you cannot call     " << name << endl ; 
+    }
+    else
+      rv = (AliPHOSGeometry *) fGeom ; 
+  } 
+  return rv ; 
+}
+
+//____________________________________________________________________________
+Bool_t AliPHOSGeometry::RelToAbsNumbering(const Int_t * RelId, Int_t &  AbsId)
+{
+
+  // AbsId = 1:fNModules * fNPhi * fNZ  -> PbWO4
+  // AbsId = 1:fNModules * 2 * (fNumberOfModulesPhi * fNumberOfModulesZ) * fNumberOfPadsPhi * fNumberOfPadsZ -> PPSD
+
+  Bool_t rv = kTRUE ; 
+  if ( RelId[1] > 0 ) { // its a PPSD pad
+
+    AbsId =    GetNPhi() * GetNZ() *  GetNModules()                          // the offset to separate emcal crystals from PPSD pads
+      + ( RelId[0] - 1 ) * GetNumberOfModulesPhi() * GetNumberOfModulesZ()   // the pads offset of PHOS modules 
+                         * GetNumberOfPadsPhi() * GetNumberOfPadsZ() * 2
+      + ( RelId[1] - 1 ) * GetNumberOfPadsPhi() * GetNumberOfPadsZ()         // the pads offset of PPSD modules 
+      + ( RelId[2] - 1 ) * GetNumberOfPadsPhi()                              // the pads offset of a PPSD row
+      + RelId[3] ;                                                           // the column number
+  } 
+  else {
+    if ( RelId[1] == 0 ) { // its a Phos crystal
+      AbsId =  ( RelId[0] - 1 ) *  GetNPhi() * GetNZ() // the offset of PHOS modules
+        + ( RelId[2] - 1 ) * GetNPhi()                 // the offset of a xtal row
+        + RelId[3] ;                                   // the column number
+    }
+  }
+
+  return rv ; 
+}
+
+//____________________________________________________________________________
+
+void AliPHOSGeometry::RelPosInAlice(const Int_t Id, TVector3 & pos ) 
+{
+   if (Id > 0) { 
+
+  Int_t RelId[4] ;
+  AbsToRelNumbering(Id , RelId) ;
+
+  Int_t PHOSModule = RelId[0] ; 
+
+  
+  if ( RelId[1] == 0 ) // it is a PbW04 crystal 
+  {  pos.SetY( -(GetIPtoOuterCoverDistance() + GetUpperPlateThickness()
+      + GetSecondUpperPlateThickness() + GetUpperCoolingPlateThickness()) ) ;  
+  }
+  if ( RelId[1] > 0 ) { // its a PPSD pad
+    if ( RelId[1] >  GetNumberOfModulesPhi() *  GetNumberOfModulesZ() ) // its an bottom module
+     {
+       pos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() / 2.0) ) ;
+     } 
+    else // its an upper module
+      pos.SetY(-( GetIPtoOuterCoverDistance() - GetMicromegas2Thickness() - GetLeadToMicro2Gap()
+       -  GetLeadConverterThickness() -  GetMicro1ToLeadGap() - GetMicromegas1Thickness() / 2.0) ) ; 
+  }
+
+  Float_t x, z ; 
+  RelPosInModule(RelId, x, z) ; 
+
+  pos.SetX(x);
+  pos.SetZ(z);
+
+
+   Float_t Phi           = GetPHOSAngle( PHOSModule) ; 
+   Double_t const RADDEG = 180.0 / kPI ;
+   Float_t rPhi          = Phi / RADDEG ; 
+
+   TRotation Rot ;
+   Rot.RotateZ(-rPhi) ; // a rotation around Z by angle  
+  
+   TRotation dummy = Rot.Invert() ;  // to transform from original frame to rotate frame
+  
+   pos.Transform(Rot) ; // rotate the baby 
+  }
+  else {
+ pos.SetX(0.);
+ pos.SetY(0.);
+ pos.SetZ(0.);
+       }
+} 
+
+//____________________________________________________________________________
+void AliPHOSGeometry::RelPosInModule(const Int_t * RelId, Float_t & x, Float_t & z) 
+{
+  Int_t PPSDModule  ; 
+  Int_t Row        = RelId[2] ; //offset along z axiz
+  Int_t Column     = RelId[3] ; //offset along x axiz
+
+  Float_t PadSizeZ = GetPPSDModuleSize(2)/ GetNumberOfPadsZ();
+  Float_t PadSizeX = GetPPSDModuleSize(0)/ GetNumberOfPadsPhi();
+
+  if ( RelId[1] == 0 ) { // its a PbW04 crystal 
+    x = -( GetNPhi()/2. - Row   + 0.5 ) *  GetCrystalSize(0) ; // position ox Xtal with respect
+    z = -( GetNZ() /2. - Column + 0.5 ) *  GetCrystalSize(2) ; // of center of PHOS module  
+   }  
+   else  {    
+    if ( RelId[1] >  GetNumberOfModulesPhi() *  GetNumberOfModulesZ() )
+       PPSDModule =  RelId[1]-GetNumberOfModulesPhi() *  GetNumberOfModulesZ(); 
+    else PPSDModule =  RelId[1] ;
+    Int_t ModRow = 1+(Int_t)TMath::Ceil( (Float_t)PPSDModule / GetNumberOfModulesPhi()-1. ) ; 
+    Int_t ModCol = PPSDModule -  ( ModRow-1 ) * GetNumberOfModulesPhi() ;     
+    Float_t x0 = (  GetNumberOfModulesPhi() / 2.  - ModRow  + 0.5 ) * GetPPSDModuleSize(0) ;
+    Float_t z0 = (  GetNumberOfModulesZ() / 2.  - ModCol  + 0.5 ) * GetPPSDModuleSize(2)  ;     
+    x = - ( GetNumberOfPadsPhi()/2. - Row - 0.5 ) * PadSizeX + x0 ; // position of pad  with respect
+    z = - ( GetNumberOfPadsZ()/2.   - Column - 0.5 ) * PadSizeZ + z0 ; // of center of PHOS module  
+         }
+}
+
+//____________________________________________________________________________
+void AliPHOSGeometry:: SetPHOSAngles() 
+{ 
+  Double_t const RADDEG = 180.0 / kPI ;
+  Float_t PPHI =  TMath::ATan( fOuterBoxSize[0]  / ( 2.0 * fIPtoOuterCoverDistance ) ) ;
+  PPHI *= RADDEG ;
+  
+  for( Int_t i = 1; i <= fNModules ; i++ ) {
+    Float_t angle = PPHI * 2 * ( i - fNModules / 2.0 - 0.5 ) ;
+    fPHOSAngle[i-1] = -  angle ;
+ } 
+}
+
diff --git a/PHOS/PHOS-HTML/AliRecPoint.cxx b/PHOS/PHOS-HTML/AliRecPoint.cxx
new file mode 100644 (file)
index 0000000..e483374
--- /dev/null
@@ -0,0 +1,169 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1  1999/12/17 09:01:14  fca
+Y.Schutz new classes for reconstruction
+
+*/
+
+//-*-C++-*-
+//_________________________________________________________________________
+// Base Class of Cluster (empty cxx needed by Root)
+//*-- Author : Yves Schutz  SUBATECH 
+//////////////////////////////////////////////////////////////////////////////
+
+// --- ROOT system ---
+
+#include "TObjArray.h"
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+
+#include "AliRecPoint.h"
+
+ClassImp(AliRecPoint)
+
+
+//____________________________________________________________________________
+AliRecPoint::AliRecPoint()
+{
+  // ctor  
+  fAmp = 0.0 ; 
+  
+  fLocPos.SetXYZ(0., 0., 0.) ;
+  fLocPosM = new TMatrix(3,3) ;
+  fMaxDigit = 100 ; 
+  fMulDigit = 0 ; 
+  fDigitsList = new int[fMaxDigit]; ; 
+  fMaxTrack = 5 ; 
+  fMulTrack = 0 ; 
+  fTracksList = new int[fMaxTrack]; ; 
+}
+
+//____________________________________________________________________________
+AliRecPoint::~AliRecPoint()
+{
+  // dtor
+  
+  delete fLocPosM ; 
+  if ( fDigitsList )     delete fDigitsList ; 
+  if ( fTracksList )     delete fTracksList ;  
+  
+}
+  
+//____________________________________________________________________________
+void AliRecPoint::AddDigit(AliDigitNew & digit)
+{
+  // adds a digit to the digits list
+  // and accumulates the total amplitude and the multiplicity 
+  
+  
+  if ( fMulDigit >= fMaxDigit ) { // increase the size of the list 
+    int * tempo = new ( int[fMaxDigit*=2] ) ; 
+    
+    Int_t index ; 
+    
+    for ( index = 0 ; index < fMulDigit ; index++ )
+      tempo[index] = fDigitsList[index] ; 
+    
+    delete fDigitsList ; 
+    fDigitsList = tempo ; 
+  }
+  
+  fDigitsList[fMulDigit++]=  (int) &digit  ; 
+  fAmp += digit.GetAmp() ; 
+}
+
+//____________________________________________________________________________
+// void AliRecPoint::AddTrack(AliTrack & track)
+// {
+//   // adds a digit to the digits list
+//   // and accumulates the total amplitude and the multiplicity 
+
+
+//   if ( fMulTrack >= fMaxTrack ) { // increase the size of the list 
+//     int * tempo = new int[fMaxTrack*=2] ; 
+//     Int_t index ; 
+//     for ( index = 0 ; index < fMulTrack ; index++ )
+//       tempo[index] = fTracksList[index] ; 
+//     delete fTracksList ; 
+//     fTracksList = tempo ; 
+//   }
+
+//   fTracksList[fMulTrack++]=  (int) &Track  ; 
+// }
+
+//____________________________________________________________________________
+void AliRecPoint::GetCovarianceMatrix(TMatrix & mat)
+{
+  // returns the covariant matrix for the local position
+  
+  mat = *fLocPosM ; 
+
+}
+
+//____________________________________________________________________________
+void AliRecPoint::GetLocalPosition(TVector3 & pos)
+{
+  // returns the position of the cluster in the local reference system of the sub-detector
+
+  pos = fLocPos;
+
+}
+
+//____________________________________________________________________________
+void AliRecPoint::GetGlobalPosition(TVector3 & gpos, TMatrix & gmat)
+{
+  // returns the position of the cluster in the global reference system of ALICE
+  // and the uncertainty on this position
+  
+
+  fGeom->GetGlobal(this, gpos, gmat) ;
+}
+
+//______________________________________________________________________________
+void AliRecPoint::Streamer(TBuffer &R__b)
+{
+   // Stream an object of class AliRecPoint.
+
+   if (R__b.IsReading()) {
+      Version_t R__v = R__b.ReadVersion(); if (R__v) { }
+      TObject::Streamer(R__b);
+      R__b >> fAmp;
+      R__b.ReadArray(fDigitsList);
+      R__b >> fGeom;
+      fLocPos.Streamer(R__b);
+      R__b >> fLocPosM;
+      R__b >> fMulDigit;
+      R__b >> fMulTrack;
+      R__b.ReadArray(fTracksList);
+   } else {
+      R__b.WriteVersion(AliRecPoint::IsA());
+      TObject::Streamer(R__b);
+      R__b << fAmp;
+      R__b.WriteArray(fDigitsList, fMaxDigit);
+      R__b << fGeom;
+      fLocPos.Streamer(R__b);
+      R__b << fLocPosM;
+      R__b << fMulDigit;
+      R__b << fMulTrack;
+      R__b.WriteArray(fTracksList, fMaxTrack);
+   }
+}
diff --git a/PHOS/PHOS-HTML/AliRecPoint.h b/PHOS/PHOS-HTML/AliRecPoint.h
new file mode 100644 (file)
index 0000000..e483374
--- /dev/null
@@ -0,0 +1,169 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1  1999/12/17 09:01:14  fca
+Y.Schutz new classes for reconstruction
+
+*/
+
+//-*-C++-*-
+//_________________________________________________________________________
+// Base Class of Cluster (empty cxx needed by Root)
+//*-- Author : Yves Schutz  SUBATECH 
+//////////////////////////////////////////////////////////////////////////////
+
+// --- ROOT system ---
+
+#include "TObjArray.h"
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+
+#include "AliRecPoint.h"
+
+ClassImp(AliRecPoint)
+
+
+//____________________________________________________________________________
+AliRecPoint::AliRecPoint()
+{
+  // ctor  
+  fAmp = 0.0 ; 
+  
+  fLocPos.SetXYZ(0., 0., 0.) ;
+  fLocPosM = new TMatrix(3,3) ;
+  fMaxDigit = 100 ; 
+  fMulDigit = 0 ; 
+  fDigitsList = new int[fMaxDigit]; ; 
+  fMaxTrack = 5 ; 
+  fMulTrack = 0 ; 
+  fTracksList = new int[fMaxTrack]; ; 
+}
+
+//____________________________________________________________________________
+AliRecPoint::~AliRecPoint()
+{
+  // dtor
+  
+  delete fLocPosM ; 
+  if ( fDigitsList )     delete fDigitsList ; 
+  if ( fTracksList )     delete fTracksList ;  
+  
+}
+  
+//____________________________________________________________________________
+void AliRecPoint::AddDigit(AliDigitNew & digit)
+{
+  // adds a digit to the digits list
+  // and accumulates the total amplitude and the multiplicity 
+  
+  
+  if ( fMulDigit >= fMaxDigit ) { // increase the size of the list 
+    int * tempo = new ( int[fMaxDigit*=2] ) ; 
+    
+    Int_t index ; 
+    
+    for ( index = 0 ; index < fMulDigit ; index++ )
+      tempo[index] = fDigitsList[index] ; 
+    
+    delete fDigitsList ; 
+    fDigitsList = tempo ; 
+  }
+  
+  fDigitsList[fMulDigit++]=  (int) &digit  ; 
+  fAmp += digit.GetAmp() ; 
+}
+
+//____________________________________________________________________________
+// void AliRecPoint::AddTrack(AliTrack & track)
+// {
+//   // adds a digit to the digits list
+//   // and accumulates the total amplitude and the multiplicity 
+
+
+//   if ( fMulTrack >= fMaxTrack ) { // increase the size of the list 
+//     int * tempo = new int[fMaxTrack*=2] ; 
+//     Int_t index ; 
+//     for ( index = 0 ; index < fMulTrack ; index++ )
+//       tempo[index] = fTracksList[index] ; 
+//     delete fTracksList ; 
+//     fTracksList = tempo ; 
+//   }
+
+//   fTracksList[fMulTrack++]=  (int) &Track  ; 
+// }
+
+//____________________________________________________________________________
+void AliRecPoint::GetCovarianceMatrix(TMatrix & mat)
+{
+  // returns the covariant matrix for the local position
+  
+  mat = *fLocPosM ; 
+
+}
+
+//____________________________________________________________________________
+void AliRecPoint::GetLocalPosition(TVector3 & pos)
+{
+  // returns the position of the cluster in the local reference system of the sub-detector
+
+  pos = fLocPos;
+
+}
+
+//____________________________________________________________________________
+void AliRecPoint::GetGlobalPosition(TVector3 & gpos, TMatrix & gmat)
+{
+  // returns the position of the cluster in the global reference system of ALICE
+  // and the uncertainty on this position
+  
+
+  fGeom->GetGlobal(this, gpos, gmat) ;
+}
+
+//______________________________________________________________________________
+void AliRecPoint::Streamer(TBuffer &R__b)
+{
+   // Stream an object of class AliRecPoint.
+
+   if (R__b.IsReading()) {
+      Version_t R__v = R__b.ReadVersion(); if (R__v) { }
+      TObject::Streamer(R__b);
+      R__b >> fAmp;
+      R__b.ReadArray(fDigitsList);
+      R__b >> fGeom;
+      fLocPos.Streamer(R__b);
+      R__b >> fLocPosM;
+      R__b >> fMulDigit;
+      R__b >> fMulTrack;
+      R__b.ReadArray(fTracksList);
+   } else {
+      R__b.WriteVersion(AliRecPoint::IsA());
+      TObject::Streamer(R__b);
+      R__b << fAmp;
+      R__b.WriteArray(fDigitsList, fMaxDigit);
+      R__b << fGeom;
+      fLocPos.Streamer(R__b);
+      R__b << fLocPosM;
+      R__b << fMulDigit;
+      R__b << fMulTrack;
+      R__b.WriteArray(fTracksList, fMaxTrack);
+   }
+}
diff --git a/PHOS/PHOS-HTML/AlicebyGeant.gif b/PHOS/PHOS-HTML/AlicebyGeant.gif
new file mode 100644 (file)
index 0000000..0919f1e
Binary files /dev/null and b/PHOS/PHOS-HTML/AlicebyGeant.gif differ
diff --git a/PHOS/PHOS-HTML/AlicebyRoot.gif b/PHOS/PHOS-HTML/AlicebyRoot.gif
new file mode 100644 (file)
index 0000000..4fa5ca1
Binary files /dev/null and b/PHOS/PHOS-HTML/AlicebyRoot.gif differ
diff --git a/PHOS/PHOS-HTML/FMNV03P14_17.tn.jpg b/PHOS/PHOS-HTML/FMNV03P14_17.tn.jpg
new file mode 100644 (file)
index 0000000..9c953fa
Binary files /dev/null and b/PHOS/PHOS-HTML/FMNV03P14_17.tn.jpg differ
diff --git a/PHOS/PHOS-HTML/NWSV14P14_14.0767.tn.jpg b/PHOS/PHOS-HTML/NWSV14P14_14.0767.tn.jpg
new file mode 100644 (file)
index 0000000..9352619
Binary files /dev/null and b/PHOS/PHOS-HTML/NWSV14P14_14.0767.tn.jpg differ
diff --git a/PHOS/PHOS-HTML/PHOSAlone.gif b/PHOS/PHOS-HTML/PHOSAlone.gif
new file mode 100644 (file)
index 0000000..330ea05
Binary files /dev/null and b/PHOS/PHOS-HTML/PHOSAlone.gif differ
diff --git a/PHOS/PHOS-HTML/PHOSGeantTree.gif b/PHOS/PHOS-HTML/PHOSGeantTree.gif
new file mode 100644 (file)
index 0000000..3a55d48
Binary files /dev/null and b/PHOS/PHOS-HTML/PHOSGeantTree.gif differ
diff --git a/PHOS/PHOS-HTML/PHOSTree.gif b/PHOS/PHOS-HTML/PHOSTree.gif
new file mode 100644 (file)
index 0000000..27d68d3
Binary files /dev/null and b/PHOS/PHOS-HTML/PHOSTree.gif differ
diff --git a/PHOS/PHOS-HTML/Title1.jpg b/PHOS/PHOS-HTML/Title1.jpg
new file mode 100644 (file)
index 0000000..07011a6
Binary files /dev/null and b/PHOS/PHOS-HTML/Title1.jpg differ
diff --git a/PHOS/PHOS-HTML/Title2.jpg b/PHOS/PHOS-HTML/Title2.jpg
new file mode 100644 (file)
index 0000000..0c09f82
Binary files /dev/null and b/PHOS/PHOS-HTML/Title2.jpg differ
diff --git a/PHOS/PHOS-HTML/TreeR.gif b/PHOS/PHOS-HTML/TreeR.gif
new file mode 100644 (file)
index 0000000..81e7ddc
Binary files /dev/null and b/PHOS/PHOS-HTML/TreeR.gif differ
diff --git a/PHOS/PHOS-HTML/abl.jpg b/PHOS/PHOS-HTML/abl.jpg
new file mode 100644 (file)
index 0000000..0c44a11
Binary files /dev/null and b/PHOS/PHOS-HTML/abl.jpg differ
diff --git a/PHOS/PHOS-HTML/alice-half.gif b/PHOS/PHOS-HTML/alice-half.gif
new file mode 100644 (file)
index 0000000..b868f84
Binary files /dev/null and b/PHOS/PHOS-HTML/alice-half.gif differ
diff --git a/PHOS/PHOS-HTML/alice.gif b/PHOS/PHOS-HTML/alice.gif
new file mode 100644 (file)
index 0000000..77f069e
Binary files /dev/null and b/PHOS/PHOS-HTML/alice.gif differ
diff --git a/PHOS/PHOS-HTML/aliphosclusterization.gif b/PHOS/PHOS-HTML/aliphosclusterization.gif
new file mode 100644 (file)
index 0000000..a86a8c1
Binary files /dev/null and b/PHOS/PHOS-HTML/aliphosclusterization.gif differ
diff --git a/PHOS/PHOS-HTML/aliphosreconstructioner.gif b/PHOS/PHOS-HTML/aliphosreconstructioner.gif
new file mode 100644 (file)
index 0000000..7f27635
Binary files /dev/null and b/PHOS/PHOS-HTML/aliphosreconstructioner.gif differ
diff --git a/PHOS/PHOS-HTML/aliphossimul.gif b/PHOS/PHOS-HTML/aliphossimul.gif
new file mode 100644 (file)
index 0000000..18fd001
Binary files /dev/null and b/PHOS/PHOS-HTML/aliphossimul.gif differ
diff --git a/PHOS/PHOS-HTML/aliphossimulation.gif b/PHOS/PHOS-HTML/aliphossimulation.gif
new file mode 100644 (file)
index 0000000..e35e28c
Binary files /dev/null and b/PHOS/PHOS-HTML/aliphossimulation.gif differ
diff --git a/PHOS/PHOS-HTML/aliphossubtracking.gif b/PHOS/PHOS-HTML/aliphossubtracking.gif
new file mode 100644 (file)
index 0000000..75ee114
Binary files /dev/null and b/PHOS/PHOS-HTML/aliphossubtracking.gif differ
diff --git a/PHOS/PHOS-HTML/alirecpoint.html b/PHOS/PHOS-HTML/alirecpoint.html
new file mode 100644 (file)
index 0000000..bcdc5f4
--- /dev/null
@@ -0,0 +1,114 @@
+<!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 FAST SIMULATION Proposal</title>
+    <!-- Changed by: Yves Schutz,  7-Dec-1999 -->
+    <link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+    <script language="JavaScript">   
+      <!--
+      
+      function open1() 
+      { 
+      x = window.open('alirecpointclassdiagram.html', 'AliRecPoint', 'status=yes,width=680,height=750');
+      }     
+      function open2() 
+      { 
+      x = window.open('alirecpointclass.html', 'AliRecPoint', 'status=yes,width=430,height=650');
+      }
+      function open3() 
+      { 
+      x = window.open('AliRecPoint.h', 'AliRecPointh', 'status=yes');
+      }
+      function open4() 
+      { 
+      x = window.open('AliRecPoint.cxx', 'AliRecPointcxx', 'status=yes');
+      }
+      function open5() 
+      { 
+      x = window.open('AliGeometry.h', 'AliGeometryh', 'status=yes');
+      }
+      function open6() 
+      { 
+      x = window.open('AliPHOSGeometry.h', 'AliPHOSGeometryh', 'status=yes');
+      }
+       function open7() 
+      { 
+      x = window.open('AluPHOSGeometry.cxx', 'AliPHOSGeometrycxx', 'status=yes');
+      }
+     //-->
+    </script>
+  </head>
+  <body>
+    
+    
+    <h1>
+      Proposal for the AliRecPoint Base Class 
+    </h1>
+    At the Offline meeting held during December 1999, it was decided
+    that a AliRecpoint base class should be designed. 
+    First let's  suggest the following class diagram:
+    <br><br>
+    <h4>
+      <ol>
+      <li>
+       <A href="#1" onClick="open1()"> AliRecpoint class in AliRoot</A>   
+      </li>
+      <li>
+       <A href="#2" onClick="open2()"> Details of the AliRecpoint class</A>  
+      </li>
+    </ol>
+  </h4>
+      <br><br>
+      And now here is the suggested implementation.
+    <br><br>
+    <h4>
+    <ol>
+      <li>
+<!--   <A href="#3" onClick="open3()">AliRecPoint.h</A> -->    
+       <A href="AliRecPoint.h">AliRecPoint.h</A>
+      </li>
+      <li>
+<!--   <A href="#4" onClick="open4()">AliRecPoint.cxx</A> -->
+       <A href="AliRecPoint.cxx">AliRecPoint.cxx</A>
+      </li>
+      <li>
+<!--   <A href="#5" onClick="open5()">AliGeometry.h</A> -->
+       <A href="AliGeometry.h">AliGeometry.h</A>       
+      </li>
+    </ol>
+  </h4>  
+    <br><br> 
+    ... and an example on how PHOS uses AliGeometry
+    <br><br>
+    <h4>
+    <ol>
+      <li>
+<!--   <A href="#6" onClick="open6()">AliPHOSGeometry.h</A> -->
+       <A href="AliPHOSGeometry.h">AliPHOSGeometry.h</A>
+      </li>
+      <li>
+<!--   <A href="#7" onClick="open7()">AliPHOSGeometry.cxx</A> -->
+       <A href="AliPHOSGeometry.cxx">AliPHOSGeometry.cxx</A>
+     </li>
+    </ol>
+    </h4>
+    <br><br>
+    But I need a new AliDigit looking like this : <A href="AliDigitNew.h">AliDigitNew.h</A>
+    <hr>
+    <address class="left">
+      &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: Thu Dec  9 23:30:14 CET 1999
+<!-- 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>
+    
+  </body>
+</html>
diff --git a/PHOS/PHOS-HTML/alirecpointclass.gif b/PHOS/PHOS-HTML/alirecpointclass.gif
new file mode 100644 (file)
index 0000000..96e189d
Binary files /dev/null and b/PHOS/PHOS-HTML/alirecpointclass.gif differ
diff --git a/PHOS/PHOS-HTML/alirecpointclass.html b/PHOS/PHOS-HTML/alirecpointclass.html
new file mode 100644 (file)
index 0000000..9ca095a
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<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>AliRecPoint Class </title>
+    <link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+  </head>
+
+  <body>
+    <h1>AliRecPoint Class</h1>
+    <center>
+    <img src="alirecpointclass.gif" alt="AliRecPoint class diagram by argo">
+    </center>
+    <br><br>
+    <form>
+      <input type="button" onClick='window.close()' value="Close" name="button"> 
+    </form>
+    <hr>
+    <address><a href="mailto:schutz@in2p3.fr">Yves SCHUTZ</a></address>
+<!-- Created: Thu Dec  9 21:54:05 CET 1999 -->
+<!-- hhmts start -->
+Last modified: Thu Dec  9 22:02:57 CET 1999
+<!-- hhmts end -->
+  </body>
+</html>
diff --git a/PHOS/PHOS-HTML/alirecpointclassdiagram.gif b/PHOS/PHOS-HTML/alirecpointclassdiagram.gif
new file mode 100644 (file)
index 0000000..8fe1802
Binary files /dev/null and b/PHOS/PHOS-HTML/alirecpointclassdiagram.gif differ
diff --git a/PHOS/PHOS-HTML/alirecpointclassdiagram.html b/PHOS/PHOS-HTML/alirecpointclassdiagram.html
new file mode 100644 (file)
index 0000000..3b8b51c
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<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>AliRecPoint Class Diagram</title>
+    <link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+  </head>
+
+  <body>
+    <h1>AliRecPoint Class Diagram</h1>
+    <center>
+    <img src="alirecpointclassdiagram.gif" alt="AliRecPoint class diagram by argo">
+    </center>
+    <br><br>
+    <form>
+      <input type=button onClick='window.close()' value="Close" name="button">  
+    </form>
+    <hr>
+    <address><a href="mailto:schutz@in2p3.fr">Yves SCHUTZ</a></address>
+<!-- Created: Thu Dec  9 21:54:05 CET 1999 -->
+<!-- hhmts start -->
+Last modified: Thu Dec  9 23:24:42 CET 1999
+<!-- hhmts end -->
+  </body>
+</html>
diff --git a/PHOS/PHOS-HTML/bar3.gif b/PHOS/PHOS-HTML/bar3.gif
new file mode 100644 (file)
index 0000000..2e917bd
Binary files /dev/null and b/PHOS/PHOS-HTML/bar3.gif differ
diff --git a/PHOS/PHOS-HTML/classes_clusterization.gif b/PHOS/PHOS-HTML/classes_clusterization.gif
new file mode 100644 (file)
index 0000000..d692f20
Binary files /dev/null and b/PHOS/PHOS-HTML/classes_clusterization.gif differ
diff --git a/PHOS/PHOS-HTML/classes_identification.gif b/PHOS/PHOS-HTML/classes_identification.gif
new file mode 100644 (file)
index 0000000..480b418
Binary files /dev/null and b/PHOS/PHOS-HTML/classes_identification.gif differ
diff --git a/PHOS/PHOS-HTML/classes_reconstruction.gif b/PHOS/PHOS-HTML/classes_reconstruction.gif
new file mode 100644 (file)
index 0000000..508e789
Binary files /dev/null and b/PHOS/PHOS-HTML/classes_reconstruction.gif differ
diff --git a/PHOS/PHOS-HTML/classes_subtracking.gif b/PHOS/PHOS-HTML/classes_subtracking.gif
new file mode 100644 (file)
index 0000000..937f218
Binary files /dev/null and b/PHOS/PHOS-HTML/classes_subtracking.gif differ
diff --git a/PHOS/PHOS-HTML/clusterization.gif b/PHOS/PHOS-HTML/clusterization.gif
new file mode 100644 (file)
index 0000000..40ce8ee
Binary files /dev/null and b/PHOS/PHOS-HTML/clusterization.gif differ
diff --git a/PHOS/PHOS-HTML/fastsimulation.html b/PHOS/PHOS-HTML/fastsimulation.html
new file mode 100644 (file)
index 0000000..94ad190
--- /dev/null
@@ -0,0 +1,38 @@
+<!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 FAST SIMULATION Proposal</title>
+   <!-- Changed by: Yves Schutz,  7-Dec-1999 -->
+<link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+</head>
+<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.
+<P>
+
+<center><img SRC="usecasefastsimulation.gif" ALT="[Use Case for fast simulation]" height=425 width=483></center>
+
+
+<hr>
+<address class="left">
+&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  7 18:54:10 CET 1999
+<!-- 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>
+
+</body>
+</html>
diff --git a/PHOS/PHOS-HTML/geometry.html b/PHOS/PHOS-HTML/geometry.html
new file mode 100644 (file)
index 0000000..ccfb049
--- /dev/null
@@ -0,0 +1,212 @@
+<!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 Geometry in AliRoot</title>
+<link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+</head>
+<body>
+
+<h1 class="page-header">
+Geometry & Materials
+</h1>
+
+
+This document result from the effort lead by the Photon Group at SUBATECH
+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). The PHOS software
+so far distributed with the AliRoot
+V3.02 package is still rather shaky, lacks documentation and organisation.
+It was therefore necessary to establish a few rules to achieve a coherent
+software package usable by any interested user.
+<h1>
+Rules</h1>
+
+<ol>
+<li>
+<a href="http://www-subatech.in2p3.fr/~photons/subatech/">SUBATECH</a>
+represented by <a href="mailto:schutz@in2p3.fr">Yves Schutz</a> is the
+librarian of the PHOS contribution to AliRoot</li>
+
+<li>
+Any modification to the existing software or any new piece of software
+must be approved by the librarian who is in charge of the updates</li>
+
+<li>
+Developpers must used CVS to download the official software from the CERN
+repository</li>
+
+<li>
+Developpers must comply with the AliRoot coding convention</li>
+
+<li>
+FORTRAN is a strictly prohibited language</li>
+
+<li>
+Any new piece of code must be documented along the line: what is the purpose,
+how is it done, how to use it</li>
+</ol>
+<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.
+<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 TTree itself written on a disk file. These two steps are
+steered through a macro file launched at the AliRoot prompt.
+<h2>
+Geometry</h2>
+
+<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.
+<br><br>
+    <center>
+      <img SRC="PHOSGeantTree.gif" ALT="Geant Tree for PHOS" >
+      <br><br>
+      <b> Figure 1.: </b> <i> GEANT Tree which describes the PHOS geometry </i>
+    </center>
+
+<h4>
+Implementation</h4>
+<p>
+    <center>
+      <img SRC="aliphossimulation.gif" ALT="Geom/Simul class diagram" >
+      <br><br>
+      <b> Figure 2.: </b> <i> Class diagram for the geometry/simulation package </i>
+    </center>
+<p>
+<i><u>AliPHOS</u> : </i>This is the base class. It derives from <i>AliDetector.
+</i>It's only purpose so far (11/11/1999) is to describe the materials
+(&agrave; la <i>AliMC</i>) needed for the EMCA and PPSD construction.
+<p>
+<i><u>AliPHOSv4</u></i>: 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>
+<i><u>AliPHOSGeometry</u></i>: 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>
+<i><u>AliPHOSHit</u></i>: It derives from <i>AliHit</i>. It stores the
+hits as the pair (absolute Id, deposited energy) in the hit TTree when
+ordered by the step manager of <i>AliPHOSv4</i>
+<p>
+<i><u>AliPHOSDigit</u></i> : It derives from <i>AliDigit</i>. It stores
+the digits as the pair (absolute Id, energy) in the&nbsp; digit TTree when
+ordered by the finish event&nbsp; of <i>AliPHOSv4</i>
+<h4>
+Usage</h4>
+<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>
+         <table>
+           <tr>
+             <td align=center valign=baseline>
+               <img SRC="AlicebyGeant.gif" ALT="Geant display of PHOS" width="447" height="429" >
+             </td>
+             <td align=center valign=baseline>
+               <img SRC="AlicebyRoot.gif" ALT="Root display of Alice" width="447" height="429" >
+             </td>
+           <tr>
+             <td align=left valign=top>
+               <b> Figure 3.: </b> <i> GEANT display of ALICE </i>
+             </td>
+             <td align=left valign=top>
+               <b> Figure 4.: </b> <i> Root display of ALICE  </i>
+             </td>
+           </tr>         
+         </table>
+       </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. 
+
+<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 Nov 23 09:49:02 CET 1999
+<!-- 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>
+
+
+</body>
+</html>
+
diff --git a/PHOS/PHOS-HTML/go.jpg b/PHOS/PHOS-HTML/go.jpg
new file mode 100644 (file)
index 0000000..87fb1dd
Binary files /dev/null and b/PHOS/PHOS-HTML/go.jpg differ
diff --git a/PHOS/PHOS-HTML/index.html b/PHOS/PHOS-HTML/index.html
new file mode 100644 (file)
index 0000000..2f10154
--- /dev/null
@@ -0,0 +1,128 @@
+<!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 in AliRoot</title>
+    <!-- Changed by: Yves Schutz,  7-Dec-1999 -->
+    <link REL="stylesheet" href="http://www-subatech.in2p3.fr/~photons/gps_alice.css" type="text/css">
+    
+    <script type="text/javascript">
+      image1 = new Image(30,44);
+      image1.src = "tournesol.jpg";
+      image2 = new Image(30,44);
+      image2.src = "go.jpg";
+      image3 = new Image(30,44);
+      image3.src = "sun.jpg";
+      image5 = new Image(30,44);
+      image5.src = "star.jpg";
+      image4 = new Image(356,240);
+      image4.src = "Title2.jpg";
+      image6 = new Image(356,240);
+      image6.src = "Title1.jpg";
+      image7 = new Image(356,240);
+      image7.src = "ufi.jpg";
+      image8 = new Image(356,240);
+      image8.src = "abl.jpg";
+      
+    </script>
+    
+    <SCRIPT TYPE="text/javascript">
+      <!-- Hide from old browsers
+      function makeArray(n) {
+      this.length = n;
+      for (var i=1; i<=n; i++) {
+      this[i] = ""; 
+      }
+      return this;
+      }
+      var i;
+      function imagealeatoire() {
+      i = Math.floor(2 *  Math.random() + 1);
+      return image[i];
+      }
+      image = new makeArray(2);
+      image[1]="Title1.jpg";
+      image[2]="Title2.jpg";
+      // Stop hiding from old browsers -->
+    </SCRIPT>
+  </head>
+
+  <body>
+    <center>
+      <table>
+       <tr><td>
+           <SCRIPT type="text/javascript">document.write("<IMG SRC=" +imagealeatoire() +" WIDTH=356 HEIGHT=240 BORDER=0>");</SCRIPT>     
+           <br><br>
+         </td>
+         <td>
+           <table align=center>
+             <tr>
+               <td align=right>
+                 <h3> <font color="#FF0000"> PHOS Geometry & Materials </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>
+               </td>
+             </tr>
+             <tr>
+               <td align=right>
+                 <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>
+               </td>
+             </tr> 
+             <tr>
+               <td align=right>
+                 <h3> <font color="#FF0000"> PHOS Reconstruction</font></h3>
+               </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>        
+               </td>
+             </tr>
+             <tr>
+               <td align=right>
+                 <h3> <font color="#FF0000"> Fast simulation</font></h3>
+               </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>         
+               </td>
+             </tr>  
+           </table>
+           </table>
+      <h1> The Use Case ... </h1><br>
+      <img SRC="usecasegeneral.gif" ALT="general use case">
+    </center>
+    <hr>
+    <address class="left">
+      &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 10:10:38 CET 1999
+<!-- 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>-->
+
+  </body>
+</html>
+
+
+
diff --git a/PHOS/PHOS-HTML/reconstruction.html b/PHOS/PHOS-HTML/reconstruction.html
new file mode 100644 (file)
index 0000000..c5be3b6
--- /dev/null
@@ -0,0 +1,707 @@
+<!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>
+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>
+
+<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>
+
+<address class="right"> 
+<!-- Created: Tue Oct 26 19:52:56 CEST 1999 -->
+<!-- hhmts start -->
+Last modified: Wed Dec  1 18:54:10 CET 1999
+<!-- 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>
+
+</body>
+</html>
diff --git a/PHOS/PHOS-HTML/reconstruction_clusterization.gif b/PHOS/PHOS-HTML/reconstruction_clusterization.gif
new file mode 100644 (file)
index 0000000..eb828b1
Binary files /dev/null and b/PHOS/PHOS-HTML/reconstruction_clusterization.gif differ
diff --git a/PHOS/PHOS-HTML/simulation.html b/PHOS/PHOS-HTML/simulation.html
new file mode 100644 (file)
index 0000000..0319262
--- /dev/null
@@ -0,0 +1,130 @@
+<!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
+    
+    
+  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>
+
+<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>
+
+<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>
diff --git a/PHOS/PHOS-HTML/star.jpg b/PHOS/PHOS-HTML/star.jpg
new file mode 100644 (file)
index 0000000..ea08b2d
Binary files /dev/null and b/PHOS/PHOS-HTML/star.jpg differ
diff --git a/PHOS/PHOS-HTML/sun.jpg b/PHOS/PHOS-HTML/sun.jpg
new file mode 100644 (file)
index 0000000..ff3168e
Binary files /dev/null and b/PHOS/PHOS-HTML/sun.jpg differ
diff --git a/PHOS/PHOS-HTML/tournesol.jpg b/PHOS/PHOS-HTML/tournesol.jpg
new file mode 100644 (file)
index 0000000..d5b6f1d
Binary files /dev/null and b/PHOS/PHOS-HTML/tournesol.jpg differ
diff --git a/PHOS/PHOS-HTML/ufi.jpg b/PHOS/PHOS-HTML/ufi.jpg
new file mode 100644 (file)
index 0000000..d959d23
Binary files /dev/null and b/PHOS/PHOS-HTML/ufi.jpg differ
diff --git a/PHOS/PHOS-HTML/usecasefastsimulation.gif b/PHOS/PHOS-HTML/usecasefastsimulation.gif
new file mode 100644 (file)
index 0000000..3902748
Binary files /dev/null and b/PHOS/PHOS-HTML/usecasefastsimulation.gif differ
diff --git a/PHOS/PHOS-HTML/usecasegeneral.gif b/PHOS/PHOS-HTML/usecasegeneral.gif
new file mode 100644 (file)
index 0000000..e5c7079
Binary files /dev/null and b/PHOS/PHOS-HTML/usecasegeneral.gif differ
diff --git a/PHOS/PHOS-HTML/usecasereconstruction.gif b/PHOS/PHOS-HTML/usecasereconstruction.gif
new file mode 100644 (file)
index 0000000..5daf804
Binary files /dev/null and b/PHOS/PHOS-HTML/usecasereconstruction.gif differ
diff --git a/PHOS/PHOS-HTML/vcss.gif b/PHOS/PHOS-HTML/vcss.gif
new file mode 100644 (file)
index 0000000..6a5feb7
Binary files /dev/null and b/PHOS/PHOS-HTML/vcss.gif differ
diff --git a/PHOS/PHOS-HTML/vh40.gif b/PHOS/PHOS-HTML/vh40.gif
new file mode 100644 (file)
index 0000000..a6cf106
Binary files /dev/null and b/PHOS/PHOS-HTML/vh40.gif differ