Put back the two bellows in front of the absorber.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSPIDv1.cxx
index 732a12a..dd16d3a 100644 (file)
@@ -19,7 +19,7 @@
 // Implementation version v1 of the PHOS particle identifier 
 // Identification is based on information from PPSD and EMC
 //                  
-//*-- Author: Yves Schutz (SUBATECH)
+//*-- Author: Yves Schutz (SUBATECH)  & Gines Martinez (SUBATECH)
 
 
 // --- ROOT system ---
 #include "AliPHOSPIDv1.h"
 #include "AliPHOSTrackSegment.h"
 #include "AliPHOSRecParticle.h"
+#include "AliPHOSIndexToObject.h"
 
 ClassImp( AliPHOSPIDv1) 
 
 //____________________________________________________________________________
-void  AliPHOSPIDv1::MakeParticles(TrackSegmentsList * trsl, RecParticlesList * rpl)
+void  AliPHOSPIDv1::MakeParticles(AliPHOSTrackSegment::TrackSegmentsList * trsl, 
+                                 AliPHOSRecParticle::RecParticlesList * rpl)
 {
   // Makes a RecParticle out of a TrackSegment
 
@@ -46,51 +48,37 @@ void  AliPHOSPIDv1::MakeParticles(TrackSegmentsList * trsl, RecParticlesList * r
   Int_t index = 0 ; 
   AliPHOSRecParticle * rp ; 
   Int_t type ; 
+  Int_t showerprofile;  // 0 narrow and 1 wide
+  Int_t cpvdetector;  // 1 hit and 0 no hit
+  Int_t pcdetector;  // 1 hit and 0 no hit
 
   while ( (tracksegment = (AliPHOSTrackSegment *)next()) ) {
     new( (*rpl)[index] ) AliPHOSRecParticle(tracksegment) ;
-    rp = (AliPHOSRecParticle *)(*rpl)[index] ; 
-
-    // try to figure out the type of particle:
-    //    1. just looking at the PPSD information 
-    if( tracksegment->GetPpsdUp() == 0 ) {     // Neutral
-      
-      if( tracksegment->GetPpsdLow() == 0 )    // Neutral  
-       type = kNEUTRAL ;   
-      else {    // check the shower profile       
-       AliPHOSEmcRecPoint * recp = tracksegment->GetEmcRecPoint() ; 
-       Float_t * lambda = new Float_t[2]; 
-       recp->GetElipsAxis(lambda) ; 
-       if ( ( lambda[0] > fLambda1m && lambda[0] < fLambda1M ) && // shower profile cut
-            ( lambda[1] > fLambda2m && lambda[1] < fLambda2M ) )       
-         type = kGAMMA ;                      // a well identified photon 
-       else 
-         type = kGAMMAHADRON ;                // looks like a photon but is a hadron (most likely)  
-      }
-    } // Neutral
-    else                            // Charged           
-      type = kCHARGED ;   
-
-    //   2. from the shower profile analysis
-    if ( type == kNEUTRAL ) { 
-      AliPHOSEmcRecPoint * recp = tracksegment->GetEmcRecPoint() ; 
-      Float_t * lambda = new Float_t[2]; 
-      recp->GetElipsAxis(lambda) ; 
-      if ( ( lambda[0] > fLambda1m && lambda[0] < fLambda1M ) && // shower profile cut
-          ( lambda[1] > fLambda2m && lambda[1] < fLambda2M ) )
-       type = kNEUTRALEM ; 
-      else 
-       type = kNEUTRALHADRON ; 
-      delete lambda ; 
-   }
-
-    //   3. from the shower dispersion 
-    if (type == kCHARGED) { 
-      if( tracksegment->GetEmcRecPoint()->GetDispersion() > fCutOnDispersion)  // shower dispersion cut
-       type = kCHARGEDHADRON ;
-      else  
-       type = kELECTRON ; 
-    } 
+    rp = (AliPHOSRecParticle *)rpl->At(index) ; 
+    AliPHOSEmcRecPoint * recp = tracksegment->GetEmcRecPoint() ; 
+    Float_t * lambda = new Float_t[2]; 
+    recp->GetElipsAxis(lambda) ; 
+
+ // Looking at the lateral development of the shower
+    if ( ( lambda[0] > fLambda1m && lambda[0] < fLambda1M ) && // shower profile cut
+        ( lambda[1] > fLambda2m && lambda[1] < fLambda2M ) )         
+      showerprofile = 0 ;   // NARROW PROFILE   
+    else      
+      showerprofile = 1 ;// WIDE PROFILE
+  
+    // Looking at the photon conversion detector
+    if( tracksegment->GetPpsdLowRecPoint() == 0 )   
+      pcdetector = 0 ;  // No hit
+    else      
+      pcdetector = 1 ;  // hit
+  
+    // Looking at the photon conversion detector
+    if( tracksegment->GetPpsdUpRecPoint() == 0 )
+      cpvdetector = 0 ;  // No hit
+    else  
+      cpvdetector = 1 ;  // Hit
+     
+    type = showerprofile + 2 * pcdetector + 4 * cpvdetector ;
     rp->SetType(type) ; 
     index++ ; 
   }
@@ -98,7 +86,7 @@ void  AliPHOSPIDv1::MakeParticles(TrackSegmentsList * trsl, RecParticlesList * r
 }
 
 //____________________________________________________________________________
-void  AliPHOSPIDv1:: Print() 
+void  AliPHOSPIDv1:: Print(const char * opt) 
 {
   // Print the parameters used for the particle type identification