/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
* Author: The ALICE Off-line Project. *
* Contributors are mentioned in the code where appropriate. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
/* $Id$ */
//_________________________________________________________________________
// Implementation version v1 of the PHOS particle identifier
// Identification is based on information from PPSD and EMC
//
//*-- Author: Yves Schutz (SUBATECH)
// --- ROOT system ---
// --- Standard library ---
#include <iostream>
// --- AliRoot header files ---
#include "AliPHOSPIDv1.h"
#include "AliPHOSTrackSegment.h"
#include "AliPHOSRecParticle.h"
ClassImp( AliPHOSPIDv1)
//____________________________________________________________________________
void AliPHOSPIDv1::MakeParticles(TrackSegmentsList * trsl, RecParticlesList * rpl)
{
// Makes a RecParticle out of a TrackSegment
TIter next(trsl) ;
AliPHOSTrackSegment * tracksegment ;
Int_t index = 0 ;
AliPHOSRecParticle * rp ;
Int_t type ;
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->SetType(type) ;
index++ ;
}
}
//____________________________________________________________________________
void AliPHOSPIDv1::Print()
{
// Print the parameters used for the particle type identification
cout << "AliPHOSPIDv1 : cuts for the particle idendification based on the shower profile " << endl
<< fLambda1m << " < value1 < " << fLambda1M << endl
<< fLambda2m << " < value2 < " << fLambda2M << endl ;
}
//____________________________________________________________________________
void AliPHOSPIDv1::SetShowerProfileCuts(Float_t l1m, Float_t l1M, Float_t l2m, Float_t l2M)
{
// Modifies the parameters used for the particle type identification
fLambda1m = l1m ;
fLambda1M = l1M ;
fLambda2m = l2m ;
fLambda2M = l2M ;
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.