1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //_________________________________________________________________________
19 // Implementation version v1 of the PHOS particle identifier
20 // Identification is based on information from PPSD and EMC
22 //*-- Author: Yves Schutz (SUBATECH)
25 // --- ROOT system ---
27 // --- Standard library ---
31 // --- AliRoot header files ---
33 #include "AliPHOSPIDv1.h"
34 #include "AliPHOSTrackSegment.h"
35 #include "AliPHOSRecParticle.h"
36 #include "AliPHOSIndexToObject.h"
38 ClassImp( AliPHOSPIDv1)
40 //____________________________________________________________________________
41 void AliPHOSPIDv1::MakeParticles(TrackSegmentsList * trsl, RecParticlesList * rpl)
43 // Makes a RecParticle out of a TrackSegment
46 AliPHOSTrackSegment * tracksegment ;
48 AliPHOSRecParticle * rp ;
51 while ( (tracksegment = (AliPHOSTrackSegment *)next()) ) {
52 new( (*rpl)[index] ) AliPHOSRecParticle(tracksegment) ;
53 rp = (AliPHOSRecParticle *)rpl->At(index) ;
55 // try to figure out the type of particle:
56 // 1. just looking at the PPSD information
58 if( tracksegment->GetPpsdUpRecPoint() == 0 ) { // Neutral
60 if( tracksegment->GetPpsdLowRecPoint() == 0 ) // Neutral
62 else { // check the shower profile
63 AliPHOSEmcRecPoint * recp = tracksegment->GetEmcRecPoint() ;
64 Float_t * lambda = new Float_t[2];
65 recp->GetElipsAxis(lambda) ;
66 if ( ( lambda[0] > fLambda1m && lambda[0] < fLambda1M ) && // shower profile cut
67 ( lambda[1] > fLambda2m && lambda[1] < fLambda2M ) )
68 type = kGAMMA ; // a well identified photon
70 type = kGAMMAHADRON ; // looks like a photon but is a hadron (most likely)
76 // 2. from the shower profile analysis
77 if ( type == kNEUTRAL ) {
78 AliPHOSEmcRecPoint * recp = tracksegment->GetEmcRecPoint() ;
79 Float_t * lambda = new Float_t[2];
80 recp->GetElipsAxis(lambda) ;
81 if ( ( lambda[0] > fLambda1m && lambda[0] < fLambda1M ) && // shower profile cut
82 ( lambda[1] > fLambda2m && lambda[1] < fLambda2M ) )
85 type = kNEUTRALHADRON ;
89 // 3. from the shower dispersion
90 if (type == kCHARGED) {
92 if( tracksegment->GetEmcRecPoint()->GetDispersion() > fCutOnDispersion) // shower dispersion cut
93 type = kCHARGEDHADRON ;
103 //____________________________________________________________________________
104 void AliPHOSPIDv1:: Print()
106 // Print the parameters used for the particle type identification
108 cout << "AliPHOSPIDv1 : cuts for the particle idendification based on the shower profile " << endl
109 << fLambda1m << " < value1 < " << fLambda1M << endl
110 << fLambda2m << " < value2 < " << fLambda2M << endl ;
114 //____________________________________________________________________________
115 void AliPHOSPIDv1::SetShowerProfileCuts(Float_t l1m, Float_t l1M, Float_t l2m, Float_t l2M)
117 // Modifies the parameters used for the particle type identification