ROOT logo
#include "AliSpectraBothPID.h"
#include "AliAODEvent.h"      
#include "TH1F.h"             
#include "TH2F.h"             
#include "TList.h"            
#include "AliAODTrack.h"      
#include "AliAODMCParticle.h" 
#include "AliPIDResponse.h"   
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
#include "AliSpectraBothTrackCuts.h"

ClassImp(AliSpectraBothPID)

AliSpectraBothPID::AliSpectraBothPID() : TNamed("PID", "PID object"), fPIDType(kNSigmacircleTPCTOF), fNSigmaPID(3), fPIDResponse(0),fshiftTPC(0),fshiftTOF(0) 
{

}

AliSpectraBothPID::AliSpectraBothPID(BothPIDType_t pidType) : TNamed("PID", "PID object"), fPIDType(pidType), fNSigmaPID(3), fPIDResponse(0), fshiftTPC(0),fshiftTOF(0)
{



}



void AliSpectraBothPID::FillQAHistos(AliSpectraBothHistoManager * hman, AliVTrack * track, AliSpectraBothTrackCuts * trackCuts) 
{

  // fill a bunch of QA histos


  // Get PID response object, if needed
  	if(!fPIDResponse) 
  	{
    		AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
   		 AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
    		fPIDResponse = inputHandler->GetPIDResponse();
  	}
	Bool_t ycut[3]={false,false,false};
   	ycut[0]=trackCuts->CheckYCut ((BothParticleSpecies_t) kSpPion);
  	ycut[1]=trackCuts->CheckYCut ((BothParticleSpecies_t) kSpKaon);
	ycut[2]=trackCuts->CheckYCut ((BothParticleSpecies_t) kSpProton);
 
 
  //Response
  	AliVParticle *inEvHMain = dynamic_cast<AliVParticle *>(track);
  
  	hman->GetPIDHistogram(kHistPIDTPC)->Fill(track->GetTPCmomentum(), track->GetTPCsignal()*track->Charge()); // PID histo
  	hman->GetPIDHistogram(kHistPIDTPCPion)->Fill(track->GetTPCmomentum(),fPIDResponse->GetTPCResponse().GetExpectedSignal(track->GetTPCmomentum(),AliPID::kPion)*track->Charge()); // Expected PIDPion histo
  	hman->GetPIDHistogram(kHistPIDTPCKaon)->Fill(track->GetTPCmomentum(),fPIDResponse->GetTPCResponse().GetExpectedSignal(track->GetTPCmomentum(),AliPID::kKaon)*track->Charge()); // Expected PIDKaon histo
  	hman->GetPIDHistogram(kHistPIDTPCProton)->Fill(track->GetTPCmomentum(),fPIDResponse->GetTPCResponse().GetExpectedSignal(track->GetTPCmomentum(),AliPID::kProton)*track->Charge()); // Expected PIDProton histo
  
  	Double_t nsigmaTPCkProton = fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kProton)+fshiftTPC;
  	Double_t nsigmaTPCkKaon = fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kKaon)+fshiftTPC; 
  	Double_t nsigmaTPCkPion = fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kPion)+fshiftTPC; 
  	Double_t nsigmaTOFkProton=100.0,nsigmaTOFkKaon=100.0,nsigmaTOFkPion=100.0;

  	Double_t nsigmaTPCTOFkProton = TMath::Abs(nsigmaTPCkProton);
  	Double_t nsigmaTPCTOFkKaon   = TMath::Abs(nsigmaTPCkKaon);
  	Double_t nsigmaTPCTOFkPion   = TMath::Abs(nsigmaTPCkPion);
	if(fPIDType==kNSigmaTOF)
	{
		nsigmaTPCTOFkProton = 100.0;
  		nsigmaTPCTOFkKaon   = 100.0;
  		nsigmaTPCTOFkPion   =100.0;

	}
	Float_t tmppt=TMath::Min(trackCuts->GetPtTOFMatchingPion(),TMath::Min(trackCuts->GetPtTOFMatchingKaon(),trackCuts->GetPtTOFMatchingProton()));
 	if(track->Pt()>tmppt&&trackCuts->CheckTOFMatchingParticleType(kSpProton)&&trackCuts->CheckTOFMatchingParticleType(kSpKaon)&&trackCuts->CheckTOFMatchingParticleType(kSpPion))
  	{
    
   		 hman->GetPIDHistogram(kHistPIDTOF)->Fill(track->P(),(track->GetTOFsignal()/100)*track->Charge()); // PID histo
    
   		 nsigmaTOFkProton = fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kProton)+fshiftTOF;
  		 nsigmaTOFkKaon = fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kKaon)+fshiftTOF; 
   		 nsigmaTOFkPion = fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kPion)+fshiftTOF; 
    
    //TOF	 	 
		if(ycut[0])
    		{
    			hman->GetPtHistogram(kHistNSigPionTOF)->Fill(track->P(),nsigmaTOFkPion );
    			hman->GetPtHistogram(kHistNSigPionPtTOF)->Fill(track->Pt(),nsigmaTOFkPion );
    		}
    		if(ycut[1])
  	 	{	
    			hman->GetPtHistogram(kHistNSigKaonTOF)->Fill(track->P(),nsigmaTOFkKaon);
   	 		hman->GetPtHistogram(kHistNSigKaonPtTOF)->Fill(track->Pt(),nsigmaTOFkKaon );	 
   		}
		if(ycut[2])
		{					
   			hman->GetPtHistogram(kHistNSigProtonTOF)->Fill(track->P(),nsigmaTOFkProton ); 
    			hman->GetPtHistogram(kHistNSigProtonPtTOF)->Fill(track->Pt(),nsigmaTOFkProton );
		}
	
    
   		 nsigmaTPCTOFkProton = TMath::Sqrt((nsigmaTPCkProton*nsigmaTPCkProton+nsigmaTOFkProton*nsigmaTOFkProton)/2.0);
    		nsigmaTPCTOFkKaon = TMath::Sqrt((nsigmaTPCkKaon*nsigmaTPCkKaon+nsigmaTOFkKaon*nsigmaTOFkKaon)/2.0);
    		nsigmaTPCTOFkPion = TMath::Sqrt((nsigmaTPCkPion*nsigmaTPCkPion+nsigmaTOFkPion*nsigmaTOFkPion)/2.0);
  
  	}

   	if(ycut[0])
    	{
    		hman->GetPtHistogram(kHistNSigPionTPC)->Fill(track->P(),nsigmaTPCkPion );
    		hman->GetPtHistogram(kHistNSigPionPtTPC)->Fill(track->Pt(),nsigmaTPCkPion );
  		hman->GetPtHistogram(kHistNSigPionTPCTOF)->Fill(track->P(),nsigmaTPCTOFkPion);
  		hman->GetPtHistogram(kHistNSigPionPtTPCTOF)->Fill(track->Pt(),nsigmaTPCTOFkPion);
	}
    	if(ycut[1])
  	 {	
    		hman->GetPtHistogram(kHistNSigKaonTPC)->Fill(track->P(),nsigmaTPCkKaon );
   	 	hman->GetPtHistogram(kHistNSigKaonPtTPC)->Fill(track->Pt(),nsigmaTPCkKaon );	 
  		hman->GetPtHistogram(kHistNSigKaonTPCTOF)->Fill(track->P(),nsigmaTPCTOFkKaon);
  		hman->GetPtHistogram(kHistNSigKaonPtTPCTOF)->Fill(track->Pt(),nsigmaTPCTOFkKaon);
		
	}
	if(ycut[2])
	{					
   		hman->GetPtHistogram(kHistNSigProtonTPC)->Fill(track->P(),nsigmaTPCkProton ); 
    		hman->GetPtHistogram(kHistNSigProtonPtTPC)->Fill(track->Pt(),nsigmaTPCkProton );
  		hman->GetPtHistogram(kHistNSigProtonTPCTOF)->Fill(track->P(),nsigmaTPCTOFkProton);
  		hman->GetPtHistogram(kHistNSigProtonPtTPCTOF)->Fill(track->Pt(),nsigmaTPCTOFkProton);
	}

}

Int_t AliSpectraBothPID::GetParticleSpecie(AliAODMCParticle * part) 
{
  // return PID according to MC truth
  	switch(TMath::Abs(part->PdgCode()))
	{
  		case 2212:
   		return kSpProton;
   		 break;
  		case 321:
    		return kSpKaon;
    		break;
  		case 211:
    		return kSpPion;
    		break;
  		default:
    		return kSpUndefined;
  	} 
}

Int_t AliSpectraBothPID::GetParticleSpecie(TParticle* part) 
{
  // return PID according to MC truth
  switch(TMath::Abs(part->GetPdgCode()))
  {
  	case 2212:
    	return kSpProton;
   	 break;
  	case 321:
    	return kSpKaon;
    	break;
  	case 211:
    	return kSpPion;
    	break;
  	default:
    	return kSpUndefined;
  } 
}

Int_t AliSpectraBothPID::GetParticleSpecie(AliSpectraBothHistoManager * hman,AliVTrack      * trk, AliSpectraBothTrackCuts * trackCuts, Bool_t* rec) 
{
  // return PID according to detectors
  // Get PID response object, if needed

	  // guess the particle based on the smaller nsigma
  	rec[kSpPion]=false;
 	 rec[kSpKaon]=false;
  	rec[kSpProton]=false;

 	if(!fPIDResponse) 
 	 {
    		AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
    		AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
   		 fPIDResponse = inputHandler->GetPIDResponse();
  	}

  	if(!fPIDResponse) 
	{
    		AliFatal("Cannot get pid response");
    	return 0;
  	}


  // Compute nsigma for each hypthesis
  	AliVParticle *inEvHMain = dynamic_cast<AliVParticle *>(trk);

  // --- TPC
  	Double_t nsigmaTPCkProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kProton)+fshiftTPC);
  	Double_t nsigmaTPCkKaon   = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kKaon)+fshiftTPC); 
 	 Double_t nsigmaTPCkPion   = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kPion)+fshiftTPC);
  
 

	Double_t nsigmaTOFkProton=0.0;
	Double_t nsigmaTOFkKaon=0.0;
	Double_t nsigmaTOFkPion=0.0;



  	Double_t nsigmaTPCTOFkProton = TMath::Abs(nsigmaTPCkProton);
  	Double_t nsigmaTPCTOFkKaon   = TMath::Abs(nsigmaTPCkKaon);
  	Double_t nsigmaTPCTOFkPion   = TMath::Abs(nsigmaTPCkPion);
	if(fPIDType==kNSigmaTOF)
	{
		nsigmaTPCTOFkProton = 10000.0;
  		nsigmaTPCTOFkKaon   = 10000.0;
  		nsigmaTPCTOFkPion   =10000.0;
		nsigmaTOFkProton = 10000.0;
  		nsigmaTOFkKaon   = 10000.0;
  		nsigmaTOFkPion   =10000.0;

	}
	

	if(trackCuts->GetUseTypeDependedTOFCut())
  	{
		if(trackCuts->CheckTOFMatchingParticleType(kSpPion)&&trk->Pt()>trackCuts->GetPtTOFMatchingPion())
		{	
			nsigmaTOFkPion   = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kPion)+fshiftTOF); 
			nsigmaTPCTOFkPion   = TMath::Sqrt((nsigmaTPCkPion*nsigmaTPCkPion+nsigmaTOFkPion*nsigmaTOFkPion)/2.);
		}
		else if (trk->Pt()>trackCuts->GetPtTOFMatchingPion()) // tracks without proper flags
		{
			nsigmaTOFkPion   = 10000.0; 
			nsigmaTPCTOFkPion   =10000.0;

		}	
			
		if(trackCuts->CheckTOFMatchingParticleType(kSpKaon)&&trk->Pt()>trackCuts->GetPtTOFMatchingKaon())
		{	
			nsigmaTOFkKaon   = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kKaon)+fshiftTOF); 
			nsigmaTPCTOFkKaon   = TMath::Sqrt((nsigmaTPCkKaon*nsigmaTPCkKaon+nsigmaTOFkKaon*nsigmaTOFkKaon)/2.);
		}
		else if (trk->Pt()>trackCuts->GetPtTOFMatchingKaon()) // tracks without proper flags
		{
			nsigmaTOFkKaon   = 10000.0; 
			nsigmaTPCTOFkKaon   =10000.0;

		}	

		if(trackCuts->CheckTOFMatchingParticleType(kSpProton)&&trk->Pt()>trackCuts->GetPtTOFMatchingProton())
		{	
			nsigmaTOFkProton   = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kProton)+fshiftTOF); 
			nsigmaTPCTOFkProton   = TMath::Sqrt((nsigmaTPCkProton*nsigmaTPCkProton+nsigmaTOFkProton*nsigmaTOFkProton)/2.);
		}
		else if (trk->Pt()>trackCuts->GetPtTOFMatchingProton()) // tracks without proper flags
		{
			nsigmaTOFkProton   = 10000.0; 
			nsigmaTPCTOFkProton   =10000.0;

		}	


	}
	else if(trk->Pt()>trackCuts->GetPtTOFMatching())
  	{
    		nsigmaTOFkProton = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kProton)+fshiftTOF);
   	 	nsigmaTOFkKaon   = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kKaon)+fshiftTOF); 
    		nsigmaTOFkPion   = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kPion)+fshiftTOF); 
    		// the TOF info is used in combined
    		nsigmaTPCTOFkProton = TMath::Sqrt((nsigmaTPCkProton*nsigmaTPCkProton+nsigmaTOFkProton*nsigmaTOFkProton)/2.);
		nsigmaTPCTOFkKaon   = TMath::Sqrt((nsigmaTPCkKaon*nsigmaTPCkKaon+nsigmaTOFkKaon*nsigmaTOFkKaon)/2.);
		nsigmaTPCTOFkPion   = TMath::Sqrt((nsigmaTPCkPion*nsigmaTPCkPion+nsigmaTOFkPion*nsigmaTOFkPion)/2.);
  	}
	 else
	{ 
		if (fPIDType==kNSigmaTOF)
			return kSpUndefined;

	}
	
  	// select the nsigma to be used for the actual PID
  	Double_t nsigmaPion=10000.0; 
	Double_t nsigmaKaon=10000.0; 
	Double_t nsigmaProton=10000.0;

  	switch (fPIDType) 
	{
  		case kNSigmaTPC:
   		nsigmaProton  =  nsigmaTPCkProton;
    		nsigmaKaon	  =  nsigmaTPCkKaon  ;
    		nsigmaPion    =  nsigmaTPCkPion  ;
    		break;
  		case kNSigmaTOF:
    		nsigmaProton  =  nsigmaTOFkProton;
    		nsigmaKaon	  =  nsigmaTOFkKaon  ;
    		nsigmaPion    =  nsigmaTOFkPion  ;
    		break;
  		case kNSigmacircleTPCTOF:
    		nsigmaProton  =  nsigmaTPCTOFkProton;
    		nsigmaKaon	  =  nsigmaTPCTOFkKaon  ;
    		nsigmaPion    =  nsigmaTPCTOFkPion  ;
    		break;
		case kNSigmasquareTPCTOF:
		nsigmaProton  =  TMath::Max(nsigmaTPCkProton,nsigmaTOFkProton);
    		nsigmaKaon	  =  TMath::Max(nsigmaTPCkKaon,nsigmaTOFkKaon);
    		nsigmaPion    =  TMath::Max(nsigmaTPCkPion,nsigmaTOFkPion)  ;
    		break;

  	}	
  
  	if(nsigmaPion   < fNSigmaPID)
		rec[kSpPion]=true;
  	if(nsigmaKaon   < fNSigmaPID)
		rec[kSpKaon]=true;
 	 if(nsigmaProton   < fNSigmaPID)
		rec[kSpProton]=true;
	
  	if( ( nsigmaKaon==nsigmaPion ) && ( nsigmaKaon==nsigmaProton )) 
		return kSpUndefined;//if is the default value for the three
  	if( ( nsigmaKaon   < nsigmaPion ) && ( nsigmaKaon < nsigmaProton ) && (nsigmaKaon   < fNSigmaPID))
	{
		if(hman->GetPIDHistogram(kHistPIDTPCKaonRec))
    			hman->GetPIDHistogram(kHistPIDTPCKaonRec)->Fill(trk->GetTPCmomentum(), trk->GetTPCsignal()*trk->Charge()); // Reconstructed PIDKaon histo
    		return kSpKaon;
  	}
  	if( ( nsigmaPion   < nsigmaKaon ) && ( nsigmaPion < nsigmaProton ) && (nsigmaPion   < fNSigmaPID))
	{
		if(hman->GetPIDHistogram(kHistPIDTPCPionRec))
    			hman->GetPIDHistogram(kHistPIDTPCPionRec)->Fill(trk->GetTPCmomentum(), trk->GetTPCsignal()*trk->Charge()); // Reconstructed PIDPion histo
    		return kSpPion;
  	}
  	if( ( nsigmaProton < nsigmaKaon ) && ( nsigmaProton < nsigmaPion ) && (nsigmaProton < fNSigmaPID))
	{
		if(hman->GetPIDHistogram(kHistPIDTPCProtonRec))
    			hman->GetPIDHistogram(kHistPIDTPCProtonRec)->Fill(trk->GetTPCmomentum(), trk->GetTPCsignal()*trk->Charge()); // Reconstructed PIDProton histo
    		return kSpProton;
  	}
  	// else, return undefined
  	return kSpUndefined;

}

Long64_t AliSpectraBothPID::Merge(TCollection* list)
{
  // Merging interface.
  // Returns the number of merged objects (including this).

  Printf("Merging");

  if (!list)
    return 0;

  if (list->IsEmpty())
    return 1;

  TIterator* iter = list->MakeIterator();
  TObject* obj;

  // Actually, we don't do anything here...
  // collections of all histograms
  //  TList collections;

  Int_t count = 0;

  while ((obj = iter->Next())) {
    AliSpectraBothPID* entry = dynamic_cast<AliSpectraBothPID*> (obj);
    if (entry == 0) 
      continue;

    // TH1I * histo = entry->GetHistoCuts();      
    // collections.Add(histo);
    count++;
  }
  
  //  fHistoCuts->Merge(&collections);
  
  delete iter;
  Printf("OK");
  return count+1;
}

 AliSpectraBothPID.cxx:1
 AliSpectraBothPID.cxx:2
 AliSpectraBothPID.cxx:3
 AliSpectraBothPID.cxx:4
 AliSpectraBothPID.cxx:5
 AliSpectraBothPID.cxx:6
 AliSpectraBothPID.cxx:7
 AliSpectraBothPID.cxx:8
 AliSpectraBothPID.cxx:9
 AliSpectraBothPID.cxx:10
 AliSpectraBothPID.cxx:11
 AliSpectraBothPID.cxx:12
 AliSpectraBothPID.cxx:13
 AliSpectraBothPID.cxx:14
 AliSpectraBothPID.cxx:15
 AliSpectraBothPID.cxx:16
 AliSpectraBothPID.cxx:17
 AliSpectraBothPID.cxx:18
 AliSpectraBothPID.cxx:19
 AliSpectraBothPID.cxx:20
 AliSpectraBothPID.cxx:21
 AliSpectraBothPID.cxx:22
 AliSpectraBothPID.cxx:23
 AliSpectraBothPID.cxx:24
 AliSpectraBothPID.cxx:25
 AliSpectraBothPID.cxx:26
 AliSpectraBothPID.cxx:27
 AliSpectraBothPID.cxx:28
 AliSpectraBothPID.cxx:29
 AliSpectraBothPID.cxx:30
 AliSpectraBothPID.cxx:31
 AliSpectraBothPID.cxx:32
 AliSpectraBothPID.cxx:33
 AliSpectraBothPID.cxx:34
 AliSpectraBothPID.cxx:35
 AliSpectraBothPID.cxx:36
 AliSpectraBothPID.cxx:37
 AliSpectraBothPID.cxx:38
 AliSpectraBothPID.cxx:39
 AliSpectraBothPID.cxx:40
 AliSpectraBothPID.cxx:41
 AliSpectraBothPID.cxx:42
 AliSpectraBothPID.cxx:43
 AliSpectraBothPID.cxx:44
 AliSpectraBothPID.cxx:45
 AliSpectraBothPID.cxx:46
 AliSpectraBothPID.cxx:47
 AliSpectraBothPID.cxx:48
 AliSpectraBothPID.cxx:49
 AliSpectraBothPID.cxx:50
 AliSpectraBothPID.cxx:51
 AliSpectraBothPID.cxx:52
 AliSpectraBothPID.cxx:53
 AliSpectraBothPID.cxx:54
 AliSpectraBothPID.cxx:55
 AliSpectraBothPID.cxx:56
 AliSpectraBothPID.cxx:57
 AliSpectraBothPID.cxx:58
 AliSpectraBothPID.cxx:59
 AliSpectraBothPID.cxx:60
 AliSpectraBothPID.cxx:61
 AliSpectraBothPID.cxx:62
 AliSpectraBothPID.cxx:63
 AliSpectraBothPID.cxx:64
 AliSpectraBothPID.cxx:65
 AliSpectraBothPID.cxx:66
 AliSpectraBothPID.cxx:67
 AliSpectraBothPID.cxx:68
 AliSpectraBothPID.cxx:69
 AliSpectraBothPID.cxx:70
 AliSpectraBothPID.cxx:71
 AliSpectraBothPID.cxx:72
 AliSpectraBothPID.cxx:73
 AliSpectraBothPID.cxx:74
 AliSpectraBothPID.cxx:75
 AliSpectraBothPID.cxx:76
 AliSpectraBothPID.cxx:77
 AliSpectraBothPID.cxx:78
 AliSpectraBothPID.cxx:79
 AliSpectraBothPID.cxx:80
 AliSpectraBothPID.cxx:81
 AliSpectraBothPID.cxx:82
 AliSpectraBothPID.cxx:83
 AliSpectraBothPID.cxx:84
 AliSpectraBothPID.cxx:85
 AliSpectraBothPID.cxx:86
 AliSpectraBothPID.cxx:87
 AliSpectraBothPID.cxx:88
 AliSpectraBothPID.cxx:89
 AliSpectraBothPID.cxx:90
 AliSpectraBothPID.cxx:91
 AliSpectraBothPID.cxx:92
 AliSpectraBothPID.cxx:93
 AliSpectraBothPID.cxx:94
 AliSpectraBothPID.cxx:95
 AliSpectraBothPID.cxx:96
 AliSpectraBothPID.cxx:97
 AliSpectraBothPID.cxx:98
 AliSpectraBothPID.cxx:99
 AliSpectraBothPID.cxx:100
 AliSpectraBothPID.cxx:101
 AliSpectraBothPID.cxx:102
 AliSpectraBothPID.cxx:103
 AliSpectraBothPID.cxx:104
 AliSpectraBothPID.cxx:105
 AliSpectraBothPID.cxx:106
 AliSpectraBothPID.cxx:107
 AliSpectraBothPID.cxx:108
 AliSpectraBothPID.cxx:109
 AliSpectraBothPID.cxx:110
 AliSpectraBothPID.cxx:111
 AliSpectraBothPID.cxx:112
 AliSpectraBothPID.cxx:113
 AliSpectraBothPID.cxx:114
 AliSpectraBothPID.cxx:115
 AliSpectraBothPID.cxx:116
 AliSpectraBothPID.cxx:117
 AliSpectraBothPID.cxx:118
 AliSpectraBothPID.cxx:119
 AliSpectraBothPID.cxx:120
 AliSpectraBothPID.cxx:121
 AliSpectraBothPID.cxx:122
 AliSpectraBothPID.cxx:123
 AliSpectraBothPID.cxx:124
 AliSpectraBothPID.cxx:125
 AliSpectraBothPID.cxx:126
 AliSpectraBothPID.cxx:127
 AliSpectraBothPID.cxx:128
 AliSpectraBothPID.cxx:129
 AliSpectraBothPID.cxx:130
 AliSpectraBothPID.cxx:131
 AliSpectraBothPID.cxx:132
 AliSpectraBothPID.cxx:133
 AliSpectraBothPID.cxx:134
 AliSpectraBothPID.cxx:135
 AliSpectraBothPID.cxx:136
 AliSpectraBothPID.cxx:137
 AliSpectraBothPID.cxx:138
 AliSpectraBothPID.cxx:139
 AliSpectraBothPID.cxx:140
 AliSpectraBothPID.cxx:141
 AliSpectraBothPID.cxx:142
 AliSpectraBothPID.cxx:143
 AliSpectraBothPID.cxx:144
 AliSpectraBothPID.cxx:145
 AliSpectraBothPID.cxx:146
 AliSpectraBothPID.cxx:147
 AliSpectraBothPID.cxx:148
 AliSpectraBothPID.cxx:149
 AliSpectraBothPID.cxx:150
 AliSpectraBothPID.cxx:151
 AliSpectraBothPID.cxx:152
 AliSpectraBothPID.cxx:153
 AliSpectraBothPID.cxx:154
 AliSpectraBothPID.cxx:155
 AliSpectraBothPID.cxx:156
 AliSpectraBothPID.cxx:157
 AliSpectraBothPID.cxx:158
 AliSpectraBothPID.cxx:159
 AliSpectraBothPID.cxx:160
 AliSpectraBothPID.cxx:161
 AliSpectraBothPID.cxx:162
 AliSpectraBothPID.cxx:163
 AliSpectraBothPID.cxx:164
 AliSpectraBothPID.cxx:165
 AliSpectraBothPID.cxx:166
 AliSpectraBothPID.cxx:167
 AliSpectraBothPID.cxx:168
 AliSpectraBothPID.cxx:169
 AliSpectraBothPID.cxx:170
 AliSpectraBothPID.cxx:171
 AliSpectraBothPID.cxx:172
 AliSpectraBothPID.cxx:173
 AliSpectraBothPID.cxx:174
 AliSpectraBothPID.cxx:175
 AliSpectraBothPID.cxx:176
 AliSpectraBothPID.cxx:177
 AliSpectraBothPID.cxx:178
 AliSpectraBothPID.cxx:179
 AliSpectraBothPID.cxx:180
 AliSpectraBothPID.cxx:181
 AliSpectraBothPID.cxx:182
 AliSpectraBothPID.cxx:183
 AliSpectraBothPID.cxx:184
 AliSpectraBothPID.cxx:185
 AliSpectraBothPID.cxx:186
 AliSpectraBothPID.cxx:187
 AliSpectraBothPID.cxx:188
 AliSpectraBothPID.cxx:189
 AliSpectraBothPID.cxx:190
 AliSpectraBothPID.cxx:191
 AliSpectraBothPID.cxx:192
 AliSpectraBothPID.cxx:193
 AliSpectraBothPID.cxx:194
 AliSpectraBothPID.cxx:195
 AliSpectraBothPID.cxx:196
 AliSpectraBothPID.cxx:197
 AliSpectraBothPID.cxx:198
 AliSpectraBothPID.cxx:199
 AliSpectraBothPID.cxx:200
 AliSpectraBothPID.cxx:201
 AliSpectraBothPID.cxx:202
 AliSpectraBothPID.cxx:203
 AliSpectraBothPID.cxx:204
 AliSpectraBothPID.cxx:205
 AliSpectraBothPID.cxx:206
 AliSpectraBothPID.cxx:207
 AliSpectraBothPID.cxx:208
 AliSpectraBothPID.cxx:209
 AliSpectraBothPID.cxx:210
 AliSpectraBothPID.cxx:211
 AliSpectraBothPID.cxx:212
 AliSpectraBothPID.cxx:213
 AliSpectraBothPID.cxx:214
 AliSpectraBothPID.cxx:215
 AliSpectraBothPID.cxx:216
 AliSpectraBothPID.cxx:217
 AliSpectraBothPID.cxx:218
 AliSpectraBothPID.cxx:219
 AliSpectraBothPID.cxx:220
 AliSpectraBothPID.cxx:221
 AliSpectraBothPID.cxx:222
 AliSpectraBothPID.cxx:223
 AliSpectraBothPID.cxx:224
 AliSpectraBothPID.cxx:225
 AliSpectraBothPID.cxx:226
 AliSpectraBothPID.cxx:227
 AliSpectraBothPID.cxx:228
 AliSpectraBothPID.cxx:229
 AliSpectraBothPID.cxx:230
 AliSpectraBothPID.cxx:231
 AliSpectraBothPID.cxx:232
 AliSpectraBothPID.cxx:233
 AliSpectraBothPID.cxx:234
 AliSpectraBothPID.cxx:235
 AliSpectraBothPID.cxx:236
 AliSpectraBothPID.cxx:237
 AliSpectraBothPID.cxx:238
 AliSpectraBothPID.cxx:239
 AliSpectraBothPID.cxx:240
 AliSpectraBothPID.cxx:241
 AliSpectraBothPID.cxx:242
 AliSpectraBothPID.cxx:243
 AliSpectraBothPID.cxx:244
 AliSpectraBothPID.cxx:245
 AliSpectraBothPID.cxx:246
 AliSpectraBothPID.cxx:247
 AliSpectraBothPID.cxx:248
 AliSpectraBothPID.cxx:249
 AliSpectraBothPID.cxx:250
 AliSpectraBothPID.cxx:251
 AliSpectraBothPID.cxx:252
 AliSpectraBothPID.cxx:253
 AliSpectraBothPID.cxx:254
 AliSpectraBothPID.cxx:255
 AliSpectraBothPID.cxx:256
 AliSpectraBothPID.cxx:257
 AliSpectraBothPID.cxx:258
 AliSpectraBothPID.cxx:259
 AliSpectraBothPID.cxx:260
 AliSpectraBothPID.cxx:261
 AliSpectraBothPID.cxx:262
 AliSpectraBothPID.cxx:263
 AliSpectraBothPID.cxx:264
 AliSpectraBothPID.cxx:265
 AliSpectraBothPID.cxx:266
 AliSpectraBothPID.cxx:267
 AliSpectraBothPID.cxx:268
 AliSpectraBothPID.cxx:269
 AliSpectraBothPID.cxx:270
 AliSpectraBothPID.cxx:271
 AliSpectraBothPID.cxx:272
 AliSpectraBothPID.cxx:273
 AliSpectraBothPID.cxx:274
 AliSpectraBothPID.cxx:275
 AliSpectraBothPID.cxx:276
 AliSpectraBothPID.cxx:277
 AliSpectraBothPID.cxx:278
 AliSpectraBothPID.cxx:279
 AliSpectraBothPID.cxx:280
 AliSpectraBothPID.cxx:281
 AliSpectraBothPID.cxx:282
 AliSpectraBothPID.cxx:283
 AliSpectraBothPID.cxx:284
 AliSpectraBothPID.cxx:285
 AliSpectraBothPID.cxx:286
 AliSpectraBothPID.cxx:287
 AliSpectraBothPID.cxx:288
 AliSpectraBothPID.cxx:289
 AliSpectraBothPID.cxx:290
 AliSpectraBothPID.cxx:291
 AliSpectraBothPID.cxx:292
 AliSpectraBothPID.cxx:293
 AliSpectraBothPID.cxx:294
 AliSpectraBothPID.cxx:295
 AliSpectraBothPID.cxx:296
 AliSpectraBothPID.cxx:297
 AliSpectraBothPID.cxx:298
 AliSpectraBothPID.cxx:299
 AliSpectraBothPID.cxx:300
 AliSpectraBothPID.cxx:301
 AliSpectraBothPID.cxx:302
 AliSpectraBothPID.cxx:303
 AliSpectraBothPID.cxx:304
 AliSpectraBothPID.cxx:305
 AliSpectraBothPID.cxx:306
 AliSpectraBothPID.cxx:307
 AliSpectraBothPID.cxx:308
 AliSpectraBothPID.cxx:309
 AliSpectraBothPID.cxx:310
 AliSpectraBothPID.cxx:311
 AliSpectraBothPID.cxx:312
 AliSpectraBothPID.cxx:313
 AliSpectraBothPID.cxx:314
 AliSpectraBothPID.cxx:315
 AliSpectraBothPID.cxx:316
 AliSpectraBothPID.cxx:317
 AliSpectraBothPID.cxx:318
 AliSpectraBothPID.cxx:319
 AliSpectraBothPID.cxx:320
 AliSpectraBothPID.cxx:321
 AliSpectraBothPID.cxx:322
 AliSpectraBothPID.cxx:323
 AliSpectraBothPID.cxx:324
 AliSpectraBothPID.cxx:325
 AliSpectraBothPID.cxx:326
 AliSpectraBothPID.cxx:327
 AliSpectraBothPID.cxx:328
 AliSpectraBothPID.cxx:329
 AliSpectraBothPID.cxx:330
 AliSpectraBothPID.cxx:331
 AliSpectraBothPID.cxx:332
 AliSpectraBothPID.cxx:333
 AliSpectraBothPID.cxx:334
 AliSpectraBothPID.cxx:335
 AliSpectraBothPID.cxx:336
 AliSpectraBothPID.cxx:337
 AliSpectraBothPID.cxx:338
 AliSpectraBothPID.cxx:339
 AliSpectraBothPID.cxx:340
 AliSpectraBothPID.cxx:341
 AliSpectraBothPID.cxx:342
 AliSpectraBothPID.cxx:343
 AliSpectraBothPID.cxx:344
 AliSpectraBothPID.cxx:345
 AliSpectraBothPID.cxx:346
 AliSpectraBothPID.cxx:347
 AliSpectraBothPID.cxx:348
 AliSpectraBothPID.cxx:349
 AliSpectraBothPID.cxx:350
 AliSpectraBothPID.cxx:351
 AliSpectraBothPID.cxx:352
 AliSpectraBothPID.cxx:353
 AliSpectraBothPID.cxx:354
 AliSpectraBothPID.cxx:355
 AliSpectraBothPID.cxx:356
 AliSpectraBothPID.cxx:357
 AliSpectraBothPID.cxx:358
 AliSpectraBothPID.cxx:359
 AliSpectraBothPID.cxx:360
 AliSpectraBothPID.cxx:361
 AliSpectraBothPID.cxx:362
 AliSpectraBothPID.cxx:363
 AliSpectraBothPID.cxx:364
 AliSpectraBothPID.cxx:365
 AliSpectraBothPID.cxx:366
 AliSpectraBothPID.cxx:367
 AliSpectraBothPID.cxx:368
 AliSpectraBothPID.cxx:369
 AliSpectraBothPID.cxx:370
 AliSpectraBothPID.cxx:371
 AliSpectraBothPID.cxx:372
 AliSpectraBothPID.cxx:373
 AliSpectraBothPID.cxx:374
 AliSpectraBothPID.cxx:375
 AliSpectraBothPID.cxx:376
 AliSpectraBothPID.cxx:377
 AliSpectraBothPID.cxx:378
 AliSpectraBothPID.cxx:379
 AliSpectraBothPID.cxx:380