]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSRecPoint.cxx
coding conventions corrections
[u/mrichter/AliRoot.git] / PHOS / AliPHOSRecPoint.cxx
index b6e96bbe2f9630ed0c975174f3c25ef16d2cf623..5f262dc29ef4699acd30eb970cbb0c416500886b 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-
 /* $Id$ */
-
 //_________________________________________________________________________
 //  Base Class for PHOS Reconstructed Points  
-//                  
+//  Why should I put meaningless comments
+//  just to satisfy
+//  the code checker                
 //*-- Author: Gines Martinez (SUBATECH)
 
 // --- ROOT system ---
 #include "TPad.h"
+#include "TClonesArray.h"
 
 // --- Standard library ---
-#include <iostream>
-#include <cstdio>
 
 // --- AliRoot header files ---
 
 #include "AliPHOSGeometry.h"
 #include "AliPHOSDigit.h"
 #include "AliPHOSRecPoint.h"
-
-
+#include "AliPHOSGetter.h"
 
 ClassImp(AliPHOSRecPoint)
 
@@ -44,8 +42,19 @@ AliPHOSRecPoint::AliPHOSRecPoint()
 {
   // ctor
 
-  fGeom =   AliPHOSGeometry::GetInstance() ;
+  fMaxTrack = 200 ;
   fPHOSMod = 0;
+
+}
+
+//____________________________________________________________________________
+AliPHOSRecPoint::AliPHOSRecPoint(const char * opt) : AliRecPoint(opt)
+{
+  // ctor
+  
+  fMaxTrack = 200 ;
+  fPHOSMod = 0;
+  
 }
 
 //____________________________________________________________________________
@@ -77,7 +86,7 @@ Int_t AliPHOSRecPoint::DistancetoPrimitive(Int_t px, Int_t py)
  }
 
 //______________________________________________________________________________
-void AliPHOSRecPoint::ExecuteEvent(Int_t event, Int_t px, Int_t py)
+void AliPHOSRecPoint::ExecuteEvent(Int_t event, Int_t px, Int_t py) const
 {
   // Execute action corresponding to one event
   // This member function is called when a AliPHOSRecPoint is clicked with the locator
@@ -97,16 +106,19 @@ void AliPHOSRecPoint::ExecuteEvent(Int_t event, Int_t px, Int_t py)
     
   case kButton1Down:{
     AliPHOSDigit * digit ;
-    AliPHOSGeometry * phosgeom =  (AliPHOSGeometry *) fGeom ;
+    AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ; 
+    AliPHOSGeometry * phosgeom =  const_cast<AliPHOSGeometry*>(gime->PHOSGeometry());
+
     Int_t iDigit;
     Int_t relid[4] ;
   
-    const Int_t fMulDigit=AliPHOSRecPoint::GetDigitsMultiplicity() ;
-    Float_t * xi = new Float_t [fMulDigit] ; 
-    Float_t * zi = new Float_t [fMulDigit] ;
+    const Int_t kMulDigit=AliPHOSRecPoint::GetDigitsMultiplicity() ;
+    Float_t * xi = new Float_t [kMulDigit] ; 
+    Float_t * zi = new Float_t [kMulDigit] ;
     
-    for(iDigit=0; iDigit<fMulDigit; iDigit++) {
-      digit = (AliPHOSDigit *) fDigitsList[iDigit];
+    for(iDigit = 0; iDigit < kMulDigit; iDigit++) {
+      Fatal("AliPHOSRecPoint::ExecuteEvent", "-> Something wrong with the code"); 
+      digit = 0 ; //dynamic_cast<AliPHOSDigit *>((fDigitsList)[iDigit]);
       phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
       phosgeom->RelPosInModule(relid, xi[iDigit], zi[iDigit]) ;
     }
@@ -153,72 +165,119 @@ break;
     
   }
 }
+//____________________________________________________________________________
+void AliPHOSRecPoint::EvalAll(Float_t logWeight,TClonesArray * digits) {
+  //evaluates (if necessary) all RecPoint data members 
 
+  EvalPrimaries(digits) ;
+}
 //____________________________________________________________________________
-Int_t AliPHOSRecPoint::GetPHOSMod()
+void AliPHOSRecPoint::EvalPHOSMod(AliPHOSDigit * digit) 
 {
   // Returns the PHOS module in which the RecPoint is found
-  if(fPHOSMod > 0) 
-    return fPHOSMod ;
 
-  Int_t relid[4] ;
+  if( fPHOSMod == 0){
+  Int_t relid[4] ; 
   
-  AliPHOSDigit * digit   ;
-  digit = (AliPHOSDigit *) fDigitsList[0] ;
-  AliPHOSGeometry * phosgeom =  (AliPHOSGeometry *) fGeom ;
+  AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ; 
+  AliPHOSGeometry * phosgeom =  const_cast<AliPHOSGeometry*>(gime->PHOSGeometry());
 
   phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
   fPHOSMod = relid[0];
-  return fPHOSMod ;
+  }
 }
 
 //______________________________________________________________________________
-Int_t * AliPHOSRecPoint::GetPrimaries(Int_t & number)
+void  AliPHOSRecPoint::EvalPrimaries(TClonesArray * digits)
 {
-  // Constructs the list of primary particles which have contributed to this RecPoint
+  // Constructs the list of primary particles (tracks) which have contributed to this RecPoint
+  // First in the list - primary, made strongest contribution to the center
+
   
   AliPHOSDigit * digit ;
-  Int_t index ;
-  Int_t maxcounter = 10 ;
-  Int_t counter    = 0 ;
-  Int_t * tempo    = new Int_t[maxcounter] ;
+  Int_t * tempo    = new Int_t[fMaxTrack] ;
+
+  //Find digit in center
+  AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance("IHEP","") ;
+  if(!geom){
+    Error("EvalPrimaries","Can not instantiate PHOS geometry") ;
+    return ;
+  }
+  TVector3  pos ;
+  TMatrix  mat ;
+  GetGlobalPosition(pos,mat) ;
+  Int_t module ;
+  Double_t x,z ;
+  geom->ImpactOnEmc(pos.Theta(),pos.Phi(),module,z,x);
+  Int_t absId ;
+  geom->RelPosToAbsId(module,x,z,absId) ;
+  //copy primaries
+  Int_t index ;  
+  for ( index = 0 ; index < GetDigitsMultiplicity() ; index++ ) { // all digits
+    digit = dynamic_cast<AliPHOSDigit *>(digits->At( fDigitsList[index] )) ; 
+    if(digit->GetId() == absId){ 
+      fMulTrack = digit->GetNprimary() ;
+      for(Int_t ii = 0 ; ii < fMulTrack ; ii++)
+       tempo[ii] = digit->GetPrimary(ii+1) ; 
+    }
+  }
   
   for ( index = 0 ; index < GetDigitsMultiplicity() ; index++ ) { // all digits
-    digit = (AliPHOSDigit *) fDigitsList[index] ; 
-    Int_t nprimaries = digit->GetNprimary() ;
-    Int_t * newprimaryarray = new Int_t[nprimaries] ;
-    Int_t ii ; 
-    for ( ii = 0 ; ii < nprimaries ; ii++)
-      newprimaryarray[ii] = digit->GetPrimary(ii+1) ; 
-    Int_t jndex ;
-    for ( jndex = 0 ; jndex < nprimaries ; jndex++ ) { // all primaries in digit
-      if ( counter > maxcounter ) {
-       number = - 1 ;
-       cout << "AliPHOSRecPoint::GetNprimaries ERROR > increase maxcounter " << endl ;
-       break ;
+    digit = dynamic_cast<AliPHOSDigit *>(digits->At( fDigitsList[index] )) ; 
+    if(digit->GetId()!=absId){ //already done
+      Int_t nprimaries = digit->GetNprimary() ;
+      if(nprimaries){
+       Int_t * newprimaryarray = new Int_t[nprimaries] ;
+       Int_t ii ; 
+       for ( ii = 0 ; ii < nprimaries ; ii++)
+         newprimaryarray[ii] = digit->GetPrimary(ii+1) ; 
+       
+       Int_t jndex ;
+       for ( jndex = 0 ; jndex < nprimaries ; jndex++ ) { // all primaries in digit
+         if ( fMulTrack > fMaxTrack ) {
+           fMulTrack = - 1 ;
+           Error("EvalPrimaries", "GetNprimaries ERROR > increase fMaxTrack" ) ;
+           break ;
+         }
+         Int_t newprimary = newprimaryarray[jndex] ;
+         Int_t kndex ;
+         Bool_t already = kFALSE ;
+         for ( kndex = 0 ; kndex < fMulTrack ; kndex++ ) { //check if not already stored
+           if ( newprimary == tempo[kndex] ){
+             already = kTRUE ;
+             break ;
+           }
+         } // end of check
+         if ( !already) { // store it
+           tempo[fMulTrack] = newprimary ; 
+           fMulTrack++ ;
+         } // store it
+       } // all primaries in digit
+       delete [] newprimaryarray ; 
       }
-      Int_t newprimary = newprimaryarray[jndex] ;
-      Int_t kndex ;
-      Bool_t already = kFALSE ;
-      for ( kndex = 0 ; kndex < counter ; kndex++ ) { //check if not already stored
-       if ( newprimary == tempo[kndex] ){
-         already = kTRUE ;
-         break ;
-       }
-      } // end of check
-      if ( !already) { // store it
-       tempo[counter] = newprimary ; 
-       counter++ ;
-      } // store it
-    } // all primaries in digit
-    delete newprimaryarray ; 
+    }
   } // all digits
 
-  number = counter ; 
-  return tempo ; 
+  if(fMulTrack)
+    fTracksList = new Int_t[fMulTrack] ;
+  for(index = 0; index < fMulTrack; index++)
+    fTracksList[index] = tempo[index] ;
+  
+  delete [] tempo ;
+  
+}
+//____________________________________________________________________________
+void AliPHOSRecPoint::GetGlobalPosition(TVector3 & gpos, TMatrix & gmat) const
+{
+  // returns the position of the cluster in the global reference system of ALICE
+  // and the uncertainty on this position
+  
+  
+  AliPHOSGetter::GetInstance()->PHOSGeometry()->GetGlobal(this, gpos, gmat) ;
 }
 
+
 //______________________________________________________________________________
 void AliPHOSRecPoint::Paint(Option_t *)
 {