ROOT logo
/**************************************************************************
 * 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$ */

//   Compute PID weights for all the clusters that are in AliESDs.root file
//   the AliESDs.root have to be in the same directory as the class
//
//   and do:    
//   AliEMCALPID *pid = new AliEMCALPID(kFALSE); // this calls the constructor which avoids the call to recparam 
//   pid->SetReconstructor(kFALSE);
//   pid->SetPrintInfo(kTRUE);
//   pid->SetHighFluxParam(); //   pid->SetLowFluxParam(); 
//   
//   then in cluster loop do
//   pid->ComputePID(energy, lambda0);
//  	  
//        Compute PID Weight for all clusters in AliESDs.root file
//	  keep this function for the moment for a simple verification, could be removed
//
//   pid->GetPIDFinal(idx) gives the probabilities
//
//   Double_t PIDFinal[AliPID::kSPECIESCN]  is the standard PID for :
//
//	kElectron :  fPIDFinal[0]
//	kMuon     :  fPIDFinal[1]
//	kPion	    :  fPIDFinal[2]
//	kKaon	    :  fPIDFinal[3]
//	kProton   :  fPIDFinal[4]
//	kPhoton   :  fPIDFinal[5]
//	kPi0	    :  fPIDFinal[6]
//	kNeutron  :  fPIDFinal[7]
//	kKaon0	  :  fPIDFinal[8]
//	kEleCon   :  fPIDFinal[9]
//	kUnknown  :  fPIDFinal[10]
//
//
//    PID[3] is a simple PID for
//      Electron & Photon  PID[0]
//	              Pi0  PID[1]
//		   Hadron  PID[2]
//
// Author: Genole Bourdaud 2007 (SUBATECH)
//         Marie Germain 07/2009 (SUBATECH), new parametrization for low and high flux environment
//         Gustavo Conesa 08/2009 (LNF), divide class in AliEMCALPID and AliEMCALPIDUtils, PIDUtils belong to library EMCALUtils 
// --- standard c ---

// standard C++ includes
//#include <Riostream.h>

// ROOT includes

// STEER includes
#include "AliESDEvent.h"
#include "AliEMCALPID.h"
#include "AliESDCaloCluster.h"
#include "AliEMCALReconstructor.h"

  
ClassImp(AliEMCALPID)
  
//______________________________________________
  AliEMCALPID::AliEMCALPID()
	: AliEMCALPIDUtils(), fReconstructor(kTRUE)
{
  //
  // Constructor.
  // Initialize all constant values which have to be used
  // during PID algorithm execution
  //
  
  InitParameters(); 
  
  
}

//______________________________________________
AliEMCALPID::AliEMCALPID(Bool_t reconstructor)
: AliEMCALPIDUtils(), fReconstructor(reconstructor)
{
  //
  // Constructor.
  // Initialize all constant values which have to be used
  // during PID algorithm execution called when used in standalone mode 
  //
  
  InitParameters(); 
  
}

//______________________________________________
void AliEMCALPID::RunPID(AliESDEvent *esd)
{
  //
  // Make the PID for all the EMCAL clusters containedin the ESDs File
  // but just gamma/PiO/Hadron
  //
  // trivial check against NULL object passed
  
  if (esd == 0x0) {
    AliInfo("NULL ESD object passed !!" );
    return ;
  }
  
  Int_t nClusters = esd->GetNumberOfCaloClusters();
  Int_t firstCluster = 0;
  Double_t energy=0., lambda0=0.;
  for (Int_t iCluster = firstCluster; iCluster < (nClusters + firstCluster); iCluster++) {
    
    AliESDCaloCluster *clust = esd->GetCaloCluster(iCluster);
    if (!clust->IsEMCAL()) continue ; 
    
    energy = clust->E();
    lambda0 = clust->GetM02();
   
    if (lambda0 != 0  && energy < 1000) {
      
      // reject clusters with lambda0 = 0
      
      
      ComputePID(energy, lambda0);
      
      
      if (fPrintInfo) {
	AliInfo("___________________________________________________");
	AliInfo(Form( "Particle Energy = %f",energy));
	AliInfo(Form( "Particle Lambda0 of the particle = %f", lambda0) );
	AliInfo("PIDWeight of the particle :" );
	AliInfo(Form( " GAMMA  : %f",fPID[0] ));
	AliInfo(Form( " PiZero : %f",fPID[1] ));
	AliInfo(Form( " HADRON : %f", fPID[2] ));
	AliInfo("_________________________________________");
	AliInfo(Form( " kElectron : %f", fPIDFinal[0]) );
	AliInfo(Form( " kMuon     : %f", fPIDFinal[1] ));
	AliInfo(Form( " kPion	    : %f", fPIDFinal[2] ));
	AliInfo(Form( " kKaon	    : %f", fPIDFinal[3] ));
	AliInfo(Form( " kProton   : %f", fPIDFinal[4] ));
	AliInfo(Form( " kPhoton   : %f", fPIDFinal[5] ));
	AliInfo(Form( " kPi0	    : %f", fPIDFinal[6] ));
	AliInfo(Form( " kNeutron  : %f", fPIDFinal[7] ));
	AliInfo(Form( " kKaon0	: %f", fPIDFinal[8] ));
	AliInfo(Form( " kEleCon   : %f", fPIDFinal[9] ));
	AliInfo(Form( " kUnknown  : %f", fPIDFinal[10] ));
	AliInfo("___________________________________________________");
      }
      
      if(fReconstructor){ // In case it is called during reconstruction.
	//	cout << "############# Fill ESDs with PIDWeight ##########" << endl;
	clust->SetPID(fPIDFinal);}
    } // end if (lambda0 != 0  && energy < 1000)
  } // end for (iCluster...)
}


//_______________________________________________________
void AliEMCALPID::InitParameters()
{
  // Initialize PID parameters, depending on the use or not of the reconstructor
  // and the kind of event type if the reconstructor is not used.
  //  fWeightHadronEnergy=0.;
  //  fWeightPiZeroEnergy=0.;
  //  fWeightGammaEnergy=0.;
  
  fPIDWeight[0] = -1;
  fPIDWeight[1] = -1;
  fPIDWeight[2] = -1;
  
  for(Int_t i=0; i<AliPID::kSPECIESCN+1; i++)
    fPIDFinal[i]= 0;
  
  const AliEMCALRecParam* recParam = AliEMCALReconstructor::GetRecParam();
  
  if(fReconstructor){
    
    if(!recParam) {
      AliFatal("Reconstruction parameters for EMCAL not set!");
    }
    else {
      
      for(Int_t i=0; i<6; i++){
	for(Int_t j=0; j<6; j++){
	  fGamma[i][j]       = recParam->GetGamma(i,j);
	  fGamma1to10[i][j]  = recParam->GetGamma1to10(i,j);
	  fHadron[i][j]      = recParam->GetHadron(i,j);
	  fHadron1to10[i][j] = recParam->GetHadron1to10(i,j);
	  fPiZero[i][j]      = recParam->GetPiZero(i,j);
	  
	  
	  // 	AliDebug(1,Form("PID parameters (%d, %d): fGamma=%.3f, fPi=%.3f, fHadron=%.3f",
	  // 			i,j, fGamma[i][j],fPiZero[i][j],fHadron[i][j] ));
	  // 	cout << "PID parameters (" << i << " ,"<<j<<") fGamma= "<<  fGamma[i][j]<<" fPi0 ="<<  fPiZero[i][j]<< endl;
	  
	} // end loop j
	fHadronEnergyProb[i] = recParam->GetHadronEnergyProb(i);
	fPiZeroEnergyProb[i] = recParam->GetPiZeroEnergyProb(i);
	fGammaEnergyProb[i]  = recParam->GetGammaEnergyProb(i);
      } //end loop i
      
      
    } // end if !recparam 
    
  } 
  
  else{
    //   init the parameters here instead of from loading from recparam
    //   default parameters are PbPb parameters.
    SetHighFluxParam();
    
  }
  
}

 AliEMCALPID.cxx:1
 AliEMCALPID.cxx:2
 AliEMCALPID.cxx:3
 AliEMCALPID.cxx:4
 AliEMCALPID.cxx:5
 AliEMCALPID.cxx:6
 AliEMCALPID.cxx:7
 AliEMCALPID.cxx:8
 AliEMCALPID.cxx:9
 AliEMCALPID.cxx:10
 AliEMCALPID.cxx:11
 AliEMCALPID.cxx:12
 AliEMCALPID.cxx:13
 AliEMCALPID.cxx:14
 AliEMCALPID.cxx:15
 AliEMCALPID.cxx:16
 AliEMCALPID.cxx:17
 AliEMCALPID.cxx:18
 AliEMCALPID.cxx:19
 AliEMCALPID.cxx:20
 AliEMCALPID.cxx:21
 AliEMCALPID.cxx:22
 AliEMCALPID.cxx:23
 AliEMCALPID.cxx:24
 AliEMCALPID.cxx:25
 AliEMCALPID.cxx:26
 AliEMCALPID.cxx:27
 AliEMCALPID.cxx:28
 AliEMCALPID.cxx:29
 AliEMCALPID.cxx:30
 AliEMCALPID.cxx:31
 AliEMCALPID.cxx:32
 AliEMCALPID.cxx:33
 AliEMCALPID.cxx:34
 AliEMCALPID.cxx:35
 AliEMCALPID.cxx:36
 AliEMCALPID.cxx:37
 AliEMCALPID.cxx:38
 AliEMCALPID.cxx:39
 AliEMCALPID.cxx:40
 AliEMCALPID.cxx:41
 AliEMCALPID.cxx:42
 AliEMCALPID.cxx:43
 AliEMCALPID.cxx:44
 AliEMCALPID.cxx:45
 AliEMCALPID.cxx:46
 AliEMCALPID.cxx:47
 AliEMCALPID.cxx:48
 AliEMCALPID.cxx:49
 AliEMCALPID.cxx:50
 AliEMCALPID.cxx:51
 AliEMCALPID.cxx:52
 AliEMCALPID.cxx:53
 AliEMCALPID.cxx:54
 AliEMCALPID.cxx:55
 AliEMCALPID.cxx:56
 AliEMCALPID.cxx:57
 AliEMCALPID.cxx:58
 AliEMCALPID.cxx:59
 AliEMCALPID.cxx:60
 AliEMCALPID.cxx:61
 AliEMCALPID.cxx:62
 AliEMCALPID.cxx:63
 AliEMCALPID.cxx:64
 AliEMCALPID.cxx:65
 AliEMCALPID.cxx:66
 AliEMCALPID.cxx:67
 AliEMCALPID.cxx:68
 AliEMCALPID.cxx:69
 AliEMCALPID.cxx:70
 AliEMCALPID.cxx:71
 AliEMCALPID.cxx:72
 AliEMCALPID.cxx:73
 AliEMCALPID.cxx:74
 AliEMCALPID.cxx:75
 AliEMCALPID.cxx:76
 AliEMCALPID.cxx:77
 AliEMCALPID.cxx:78
 AliEMCALPID.cxx:79
 AliEMCALPID.cxx:80
 AliEMCALPID.cxx:81
 AliEMCALPID.cxx:82
 AliEMCALPID.cxx:83
 AliEMCALPID.cxx:84
 AliEMCALPID.cxx:85
 AliEMCALPID.cxx:86
 AliEMCALPID.cxx:87
 AliEMCALPID.cxx:88
 AliEMCALPID.cxx:89
 AliEMCALPID.cxx:90
 AliEMCALPID.cxx:91
 AliEMCALPID.cxx:92
 AliEMCALPID.cxx:93
 AliEMCALPID.cxx:94
 AliEMCALPID.cxx:95
 AliEMCALPID.cxx:96
 AliEMCALPID.cxx:97
 AliEMCALPID.cxx:98
 AliEMCALPID.cxx:99
 AliEMCALPID.cxx:100
 AliEMCALPID.cxx:101
 AliEMCALPID.cxx:102
 AliEMCALPID.cxx:103
 AliEMCALPID.cxx:104
 AliEMCALPID.cxx:105
 AliEMCALPID.cxx:106
 AliEMCALPID.cxx:107
 AliEMCALPID.cxx:108
 AliEMCALPID.cxx:109
 AliEMCALPID.cxx:110
 AliEMCALPID.cxx:111
 AliEMCALPID.cxx:112
 AliEMCALPID.cxx:113
 AliEMCALPID.cxx:114
 AliEMCALPID.cxx:115
 AliEMCALPID.cxx:116
 AliEMCALPID.cxx:117
 AliEMCALPID.cxx:118
 AliEMCALPID.cxx:119
 AliEMCALPID.cxx:120
 AliEMCALPID.cxx:121
 AliEMCALPID.cxx:122
 AliEMCALPID.cxx:123
 AliEMCALPID.cxx:124
 AliEMCALPID.cxx:125
 AliEMCALPID.cxx:126
 AliEMCALPID.cxx:127
 AliEMCALPID.cxx:128
 AliEMCALPID.cxx:129
 AliEMCALPID.cxx:130
 AliEMCALPID.cxx:131
 AliEMCALPID.cxx:132
 AliEMCALPID.cxx:133
 AliEMCALPID.cxx:134
 AliEMCALPID.cxx:135
 AliEMCALPID.cxx:136
 AliEMCALPID.cxx:137
 AliEMCALPID.cxx:138
 AliEMCALPID.cxx:139
 AliEMCALPID.cxx:140
 AliEMCALPID.cxx:141
 AliEMCALPID.cxx:142
 AliEMCALPID.cxx:143
 AliEMCALPID.cxx:144
 AliEMCALPID.cxx:145
 AliEMCALPID.cxx:146
 AliEMCALPID.cxx:147
 AliEMCALPID.cxx:148
 AliEMCALPID.cxx:149
 AliEMCALPID.cxx:150
 AliEMCALPID.cxx:151
 AliEMCALPID.cxx:152
 AliEMCALPID.cxx:153
 AliEMCALPID.cxx:154
 AliEMCALPID.cxx:155
 AliEMCALPID.cxx:156
 AliEMCALPID.cxx:157
 AliEMCALPID.cxx:158
 AliEMCALPID.cxx:159
 AliEMCALPID.cxx:160
 AliEMCALPID.cxx:161
 AliEMCALPID.cxx:162
 AliEMCALPID.cxx:163
 AliEMCALPID.cxx:164
 AliEMCALPID.cxx:165
 AliEMCALPID.cxx:166
 AliEMCALPID.cxx:167
 AliEMCALPID.cxx:168
 AliEMCALPID.cxx:169
 AliEMCALPID.cxx:170
 AliEMCALPID.cxx:171
 AliEMCALPID.cxx:172
 AliEMCALPID.cxx:173
 AliEMCALPID.cxx:174
 AliEMCALPID.cxx:175
 AliEMCALPID.cxx:176
 AliEMCALPID.cxx:177
 AliEMCALPID.cxx:178
 AliEMCALPID.cxx:179
 AliEMCALPID.cxx:180
 AliEMCALPID.cxx:181
 AliEMCALPID.cxx:182
 AliEMCALPID.cxx:183
 AliEMCALPID.cxx:184
 AliEMCALPID.cxx:185
 AliEMCALPID.cxx:186
 AliEMCALPID.cxx:187
 AliEMCALPID.cxx:188
 AliEMCALPID.cxx:189
 AliEMCALPID.cxx:190
 AliEMCALPID.cxx:191
 AliEMCALPID.cxx:192
 AliEMCALPID.cxx:193
 AliEMCALPID.cxx:194
 AliEMCALPID.cxx:195
 AliEMCALPID.cxx:196
 AliEMCALPID.cxx:197
 AliEMCALPID.cxx:198
 AliEMCALPID.cxx:199
 AliEMCALPID.cxx:200
 AliEMCALPID.cxx:201
 AliEMCALPID.cxx:202
 AliEMCALPID.cxx:203
 AliEMCALPID.cxx:204
 AliEMCALPID.cxx:205
 AliEMCALPID.cxx:206
 AliEMCALPID.cxx:207
 AliEMCALPID.cxx:208
 AliEMCALPID.cxx:209
 AliEMCALPID.cxx:210
 AliEMCALPID.cxx:211
 AliEMCALPID.cxx:212
 AliEMCALPID.cxx:213
 AliEMCALPID.cxx:214
 AliEMCALPID.cxx:215
 AliEMCALPID.cxx:216
 AliEMCALPID.cxx:217
 AliEMCALPID.cxx:218
 AliEMCALPID.cxx:219
 AliEMCALPID.cxx:220
 AliEMCALPID.cxx:221
 AliEMCALPID.cxx:222
 AliEMCALPID.cxx:223
 AliEMCALPID.cxx:224