]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSPpsdRecPoint.cxx
position of the particle initiating the hit in PHOS
[u/mrichter/AliRoot.git] / PHOS / AliPHOSPpsdRecPoint.cxx
index e67ae9f589ae767524e9849d0c69bc26c5237c69..a1484cf4f3df298a6e7ff4655c34de1a9af0c1a3 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-
+/* $Id$ */
 //_________________________________________________________________________
-// RecPoint in the PHOS PPSD: a list of AliPHOSDigit's
-//*-- Author : Yves Schutz  SUBATECH 
-//////////////////////////////////////////////////////////////////////////////
+//  A RecPoint (cluster) in the PPSD 
+//  A PPSD RecPoint ends up to be a single digit
+//  Why should I put meaningless comments
+//  just to satisfy
+//  the code checker                
+//                
+//*--  Yves Schutz (SUBATECH)
 
 // --- ROOT system ---
+
 #include "TPad.h"
+
 // --- Standard library ---
 
-#include <iostream>
-#include <cassert>
+#include <iostream.h>
 
 // --- AliRoot header files ---
 
 #include "AliPHOSGeometry.h"
 #include "AliPHOSPpsdRecPoint.h"
+#include "AliPHOSCpvRecPoint.h"
 #include "AliRun.h"
+#include "AliPHOSIndexToObject.h"
 
 ClassImp(AliPHOSPpsdRecPoint)
 
 //____________________________________________________________________________
 AliPHOSPpsdRecPoint::AliPHOSPpsdRecPoint(void)
 { 
+  // ctor
+
   fMulDigit = 0 ;  
   AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance() ;  
   fDelta = geom->GetCrystalSize(0) ; 
@@ -43,13 +52,7 @@ AliPHOSPpsdRecPoint::AliPHOSPpsdRecPoint(void)
 }
 
 //____________________________________________________________________________
-AliPHOSPpsdRecPoint::~AliPHOSPpsdRecPoint(void) // dtor
-{ 
-  //dtor  
-}
-
-//____________________________________________________________________________
-void AliPHOSPpsdRecPoint::AddDigit(AliDigitNew & digit, Float_t Energy)
+void AliPHOSPpsdRecPoint::AddDigit(AliPHOSDigit & digit, Float_t Energy)
 {
   // adds a digit to the digits list
   // and accumulates the total amplitude and the multiplicity 
@@ -72,89 +75,105 @@ void AliPHOSPpsdRecPoint::AddDigit(AliDigitNew & digit, Float_t Energy)
     delete [] tempo ;
   }
 
-  fDigitsList[fMulDigit++]  =  (int) &digit  ; 
+  fDigitsList[fMulDigit++]  =  digit.GetIndexInList() ; 
   fAmp += Energy ; 
 }
 
-
-
-
 //____________________________________________________________________________
 Int_t AliPHOSPpsdRecPoint::Compare(TObject * obj)
 {
-  Int_t rv ; 
-  
-  AliPHOSPpsdRecPoint * clu = (AliPHOSPpsdRecPoint *)obj ; 
+  // Compares according to the position
   
-  Float_t x1 , z1 ;
-  Float_t x2 , z2 ;
-  
-  Int_t PhosMod1 ;
-  Int_t PhosMod2 ;
-  
-  Int_t up1 ;
-  Int_t up2 ; 
+  Int_t rv ; 
   
-  if(GetUp()) // upper layer
-    up1 = 0 ; 
-  else        // lower layer
-    up1 = 1 ;       
+  if( (strcmp(obj->ClassName() , "AliPHOSPpsdRecPoint" )) == 0)  // PPSD Rec Point
+    {
+     AliPHOSPpsdRecPoint * clu = (AliPHOSPpsdRecPoint *)obj ; 
+
+     Float_t x1 , z1 ;
+     Float_t x2 , z2 ;
+     
+     Int_t phosmod1 ;
+     Int_t phosmod2 ;
+     
+     Int_t up1 ;
+     Int_t up2 ; 
   
-  if(clu->GetUp()) // upper layer
-    up2 = 0 ; 
-  else            // lower layer
-    up2 = 1 ;       
-
-  TVector3 PosLoc ;
-  this->GetLocalPosition(PosLoc) ;
-  x1 = PosLoc.X() ;
-  z1 = PosLoc.Z() ; 
-  PhosMod1 = this->GetPHOSMod();  
-  clu->GetLocalPosition(PosLoc) ;
-  x2 = PosLoc.X() ;
-  z2 = PosLoc.Z() ; 
-  PhosMod2 = clu->GetPHOSMod();
-
-  if(PhosMod1 == PhosMod2 ) {
-    if(up1 == up2 ){
-      Int_t rowdif = (Int_t)TMath::Ceil(x1/fDelta) - (Int_t) TMath::Ceil(x2/fDelta) ;
-
-      if (rowdif> 0) 
-       rv = -1 ;
+     if(GetUp()) // upper layer
+       up1 = 0 ; 
+     else        // lower layer
+       up1 = 1 ;       
+     
+     if(clu->GetUp()) // upper layer
+       up2 = 0 ; 
+     else            // lower layer
+       up2 = 1 ;       
+
+     TVector3 posloc ;
+     this->GetLocalPosition(posloc) ;
+     x1 = posloc.X() ;
+     z1 = posloc.Z() ; 
+     phosmod1 = this->GetPHOSMod();  
+     clu->GetLocalPosition(posloc) ;
+     x2 = posloc.X() ;
+     z2 = posloc.Z() ; 
+     phosmod2 = clu->GetPHOSMod();
+     
+     if(phosmod1 == phosmod2 ) {
+       
+       if(up1 == up2 ){
+        Int_t rowdif = (Int_t)TMath::Ceil(x1/fDelta) - (Int_t) TMath::Ceil(x2/fDelta) ;
+        
+        if (rowdif> 0) 
+          rv = -1 ;
       else if(rowdif < 0) 
        rv = 1 ;
-      else if(z1>z2) 
-       rv = -1 ;
-      else 
-       rv = 1 ; 
+        else if(z1>z2) 
+          rv = -1 ;
+        else 
+          rv = 1 ; 
+       }
+       
+       else {
+        
+        if(up1 < up2 ) // Upper level first (up = True or False, True > False)
+          rv = 1 ;   
+        else 
+          rv = - 1 ;
+       }
+       
+     } // if phosmod1 == phosmod2
+     
+     else {
+       
+       if(phosmod1 < phosmod2 ) 
+        rv = -1 ;
+       else 
+        rv = 1 ;
+       
+     }
+     
+     return rv ;      
     }
-
-    else {
-
-      if(up1 < up2 ) // Upper level first (up = True or False, True > False)
-       rv = 1 ;   
+  else
+    {
+      AliPHOSCpvRecPoint * clu  = (AliPHOSCpvRecPoint *) obj ;   
+      if(this->GetPHOSMod()  < clu->GetPHOSMod() ) 
+       rv = -1 ;
       else 
-       rv = - 1 ;
+       rv = 1 ;
+      return rv ;
     }
-    
-  } // if PhosMod1 == PhosMod2
 
-  else {
-
-    if(PhosMod1 < PhosMod2 ) 
-      rv = -1 ;
-    else 
-      rv = 1 ;
   
-}
-  
-  return rv ; 
 }
 
 //____________________________________________________________________________
-void AliPHOSPpsdRecPoint::GetLocalPosition(TVector3 &LPos){
+void AliPHOSPpsdRecPoint::GetLocalPosition(TVector3 &LPos)
+{
+  // Calculates the local position in the PHOS-PPSD-module corrdinates
+  
+  AliPHOSIndexToObject * please =  AliPHOSIndexToObject::GetInstance() ; 
 
   if( fLocPos.X() < 1000000.) { //allready evaluated
    LPos = fLocPos ;
@@ -166,46 +185,52 @@ void AliPHOSPpsdRecPoint::GetLocalPosition(TVector3 &LPos){
   Float_t x = 0. ;
   Float_t z = 0. ;
 
-  AliPHOSGeometry * PHOSGeom = (AliPHOSGeometry *) fGeom ;
+  AliPHOSGeometry * phosgeom = (AliPHOSGeometry *) fGeom ;
   
   AliPHOSDigit * digit ;
   Int_t iDigit;
 
-  for(iDigit=0; iDigit<fMulDigit; iDigit++) {
-    digit = (AliPHOSDigit *) fDigitsList[iDigit]
+  for(iDigit = 0; iDigit < fMulDigit; iDigit++) {
+    digit = (AliPHOSDigit *) ( please->GimeDigit(fDigitsList[iDigit]) )
  
     Float_t xi ;
     Float_t zi ;
-    PHOSGeom->AbsToRelNumbering(digit->GetId(), relid) ;
-    PHOSGeom->RelPosInModule(relid, xi, zi);
+    phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
+    phosgeom->RelPosInModule(relid, xi, zi);
     x += xi ;
     z += zi ;
   }
 
-  x   /= fMulDigit ;
-  z   /= fMulDigit ;
+  x /= fMulDigit ;
+  z /= fMulDigit ;
 
   fLocPos.SetX(x)  ;
   fLocPos.SetY(0.) ;
   fLocPos.SetZ(z)  ;
 
   LPos = fLocPos ;
+
 }
 
 //____________________________________________________________________________
 Bool_t AliPHOSPpsdRecPoint::GetUp() 
 {
+  // Are we in the uper PPSD module ?
+
   Int_t relid[4] ;
   
-  AliPHOSGeometry * PHOSGeom = (AliPHOSGeometry *) fGeom ;
+  AliPHOSIndexToObject * please =  AliPHOSIndexToObject::GetInstance() ; 
+
+  AliPHOSGeometry * phosgeom = (AliPHOSGeometry *) fGeom ;
+  
   
-  AliPHOSDigit *digit = (AliPHOSDigit *)fDigitsList[0] ; 
+  AliPHOSDigit *digit = (AliPHOSDigit *) ( please->GimeDigit(fDigitsList[0]) ) ; 
   
-  PHOSGeom->AbsToRelNumbering(digit->GetId(),relid);
+  phosgeom->AbsToRelNumbering(digit->GetId(),relid);
   Bool_t up ;
 
   if((Int_t)TMath::Ceil((Float_t)relid[1]/
-                       (PHOSGeom->GetNumberOfModulesPhi()*PHOSGeom->GetNumberOfModulesZ())-0.0001 ) > 1) 
+                       (phosgeom->GetNumberOfModulesPhi()*phosgeom->GetNumberOfModulesZ())-0.0001 ) > 1) 
     up = kFALSE ;
   else  
     up = kTRUE ;
@@ -215,86 +240,61 @@ Bool_t AliPHOSPpsdRecPoint::GetUp()
 //______________________________________________________________________________
 void AliPHOSPpsdRecPoint::Paint(Option_t *)
 {
-//*-*-*-*-*-*-*-*-*-*-*Paint this ALiRecPoint as a TMarker  with its current attributes*-*-*-*-*-*-*
-//*-*                  =============================================
-   TVector3 pos(0.,0.,0.) ;
-   GetLocalPosition(pos) ;
-   Coord_t x = pos.X() ;
-   Coord_t y = pos.Z() ;
-   Color_t MarkerColor = 1 ;
-   Size_t  MarkerSize = 1. ;
-   Style_t MarkerStyle = 2 ;
-   if (GetUp()) 
-     MarkerStyle = 3 ;
-
-   if (!gPad->IsBatch()) {
-     gVirtualX->SetMarkerColor(MarkerColor);
-     gVirtualX->SetMarkerSize (MarkerSize);
-     gVirtualX->SetMarkerStyle(MarkerStyle);
-   }
-   gPad->SetAttMarkerPS(MarkerColor,MarkerStyle,MarkerSize);
-   gPad->PaintPolyMarker(1,&x,&y,"");
-
-
+  //*-*-*-*-*-*-*-*-*-*-*Paint this ALiRecPoint as a TMarker  with its current attributes*-*-*-*-*-*-*
+  //*-*                  =============================================
+
+  TVector3 pos(0.,0.,0.) ;
+  GetLocalPosition(pos) ;
+  Coord_t x = pos.X() ;
+  Coord_t y = pos.Z() ;
+  Color_t markercolor = 1 ;
+  Size_t  markersize  = 1. ;
+  Style_t markerstyle = 2 ;
+  if (GetUp()) 
+    markerstyle = 3 ;
+  
+  if (!gPad->IsBatch()) {
+    gVirtualX->SetMarkerColor(markercolor);
+    gVirtualX->SetMarkerSize (markersize);
+    gVirtualX->SetMarkerStyle(markerstyle);
+  }
+  gPad->SetAttMarkerPS(markercolor,markerstyle,markersize);
+  gPad->PaintPolyMarker(1,&x,&y,"");
+  
+  
 }
 
 //____________________________________________________________________________
 void AliPHOSPpsdRecPoint::Print(Option_t * option) 
 {
+  // Print the digits information 
+  
   cout << "AliPHOSPpsdRecPoint: " << endl ;
   
   AliPHOSDigit * digit ; 
   Int_t iDigit;
-  AliPHOSGeometry * PHOSGeom =  (AliPHOSGeometry *) fGeom ;
+  AliPHOSGeometry * phosgeom =  (AliPHOSGeometry *) fGeom ;
 
   Float_t xi ;
   Float_t zi ;
   Int_t relid[4] ; 
 
+  AliPHOSIndexToObject * please =  AliPHOSIndexToObject::GetInstance() ; 
   for(iDigit=0; iDigit<fMulDigit; iDigit++) {
-    digit = (AliPHOSDigit *) fDigitsList[iDigit];
-    PHOSGeom->AbsToRelNumbering(digit->GetId(), relid) ;
-    PHOSGeom->RelPosInModule(relid, xi, zi);
-    cout << " Id = " << digit->GetId() ;  
-    cout << "  Phos mod = " << relid[0] ;  
-    cout << "  PPSD mod = " << relid[1] ;  
-    cout << "  x = " << xi ;  
-    cout << "  z = " << zi ;  
-    cout << "   Energy = " << digit->GetAmp() << endl ;
+    digit = please->GimeDigit( fDigitsList[iDigit] ) ; 
+    if (digit) {
+      phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
+      phosgeom->RelPosInModule(relid, xi, zi);
+      cout << " Id = " << digit->GetId() ;  
+      cout << "  Phos mod = " << relid[0] ;  
+      cout << "  PPSD mod = " << relid[1] ;  
+      cout << "  x = " << xi ;  
+      cout << "  z = " << zi ;  
+      cout << "   Energy = " << digit->GetAmp() << endl ;
+    }
   }
   cout << "       Multiplicity    = " << fMulDigit  << endl ;
+  cout << "       Stored at position " << fIndexInList << endl ; 
 }
 
 
-// //____________________________________________________________________________
-// AliPHOSPpsdRecPoint& AliPHOSPpsdRecPoint::operator = (AliPHOSPpsdRecPoint Clu)
-// {
-//  int* DL = Clu.GetDigitsList() ; 
-  
-//   if(fDigitsList) 
-//     delete fDigitsList ;
-
-//   AliPHOSDigit * digit ;
-//   Int_t iDigit;
-
-//   for(iDigit=0; iDigit<fMulDigit; iDigit++) {
-//     digit = (AliPHOSDigit *) DL[iDigit];
-//     AddDigit(*digit) ;
-//   }
-
-//   fDelta = Clu.GetDelta() ; 
-//   delete DL ; 
-
-//   fAmp       = Clu.GetEnergy() ;
-//   fGeom      = Clu.GetGeom() ;
-//   TVector3 LocPos;
-//   Clu.GetLocalPosition(LocPos) ;
-//   fLocPos    = LocPos;
-//   fMulDigit  = Clu.GetMultiplicity() ;
-//   fMaxDigit  = Clu.GetMaximumMultiplicity() ;
-//   fPHOSMod   = Clu.GetPHOSMod() ;
-  
-
-//   return *this ;
-// }