]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSRecPoint.cxx
assert removed
[u/mrichter/AliRoot.git] / PHOS / AliPHOSRecPoint.cxx
index 3490d20095a364da77baf21bff5e8255b2654ad3..d4611e1ff51703bba6949d0086ef6197eefb2d32 100644 (file)
 // --- ROOT system ---
 #include "TPad.h"
 #include "TClonesArray.h"
+#include "TGraph.h"
+#include "TPaveText.h"
 
 // --- Standard library ---
-#include <iostream.h>
 
 // --- AliRoot header files ---
 
@@ -58,6 +59,16 @@ AliPHOSRecPoint::AliPHOSRecPoint(const char * opt) : AliRecPoint(opt)
   
 }
 
+//____________________________________________________________________________
+AliPHOSRecPoint::AliPHOSRecPoint(const AliPHOSRecPoint & rp ) : AliRecPoint(rp)
+{
+  // cpy ctor
+  
+  fMaxTrack = rp.fMaxTrack;
+  fPHOSMod = rp.fPHOSMod;
+  
+}
+
 //____________________________________________________________________________
 Int_t AliPHOSRecPoint::DistancetoPrimitive(Int_t px, Int_t py)
 {
@@ -87,7 +98,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
@@ -192,42 +203,70 @@ void AliPHOSRecPoint::EvalPHOSMod(AliPHOSDigit * digit)
 void  AliPHOSRecPoint::EvalPrimaries(TClonesArray * digits)
 {
   // 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 * 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] )) ; 
-    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 ;
-         cout << "AliPHOSRecPoint::GetNprimaries ERROR > increase fMaxTrack " << endl ;
-         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 ;
+    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 = 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 ;
          }
-       } // 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 < 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 ; 
+      }
     }
   } // all digits