/************************************************************************** * 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. * **************************************************************************/ //----------------------------------------------------------------- // Base class for combining PID of different detectors // // (user selected) and compute Bayesian probabilities // // // // // // Origin: Pietro Antonioli, INFN-BO Pietro.Antonioli@cern.ch // // // //----------------------------------------------------------------- #include #include #include #include #include #include "AliPIDCombined.h" AliPIDCombined::AliPIDCombined(): TNamed("CombinedPID","CombinedPID"), fDetectorMask(0), fRejectMismatchMask(0x7F), fEnablePriors(kTRUE), fSelectedSpecies(AliPID::kSPECIES) { // // default constructor // for (Int_t i=0;i= (AliPID::kSPECIESN+AliPID::kSPECIESLN) ) ){ AliError(Form("Invalid EParticleType setting prior (offending type: %d)",type)); return; } if(prior) { Int_t i = (Int_t)type; if (i >= AliPID::kSPECIES ) { if (i < (Int_t)AliPID::kDeuteron) { AliError(Form("Invalid EParticleType setting prior. Type: %d (neutral) not supported",i)); return; } else i -= (AliPID::kSPECIESN-AliPID::kSPECIES); } if (i>(AliPID::kSPECIES+AliPID::kSPECIESLN)) { // coverity fix (to put it mildly....) AliError(Form("Unexpected EParticleType setting prior. Type: %d (neutral) not supported",i)); return; } if (fPriorsDistributions[i]) { delete fPriorsDistributions[i]; } fPriorsDistributions[i]=new TH1F(*prior); } } //------------------------------------------------------------------------------------------------- UInt_t AliPIDCombined::ComputeProbabilities(const AliVTrack *track, const AliPIDResponse *response, Double_t* bayesProbabilities) const { Double_t pITS[fSelectedSpecies]; Double_t pTPC[fSelectedSpecies]; Double_t pTRD[fSelectedSpecies]; Double_t pTOF[fSelectedSpecies]; Double_t pHMPID[fSelectedSpecies]; Double_t pEMCAL[fSelectedSpecies]; Double_t pPHOS[fSelectedSpecies]; for (Int_t i=0;iComputeITSProbability(track, fSelectedSpecies, pITS); SetCombinedStatus(status,&usedMask,AliPIDResponse::kDetITS,pITS); } if (fDetectorMask & AliPIDResponse::kDetTPC) { status = response->ComputeTPCProbability(track, fSelectedSpecies, pTPC); SetCombinedStatus(status,&usedMask,AliPIDResponse::kDetTPC,pTPC); } if (fDetectorMask & AliPIDResponse::kDetTRD) { status = response->ComputeTRDProbability(track, fSelectedSpecies, pTRD); SetCombinedStatus(status,&usedMask,AliPIDResponse::kDetTRD,pTRD); } if (fDetectorMask & AliPIDResponse::kDetTOF) { status = response->ComputeTOFProbability(track, fSelectedSpecies, pTOF); SetCombinedStatus(status,&usedMask,AliPIDResponse::kDetTOF,pTOF); } if (fDetectorMask & AliPIDResponse::kDetHMPID) { status = response->ComputeHMPIDProbability(track, fSelectedSpecies, pHMPID); SetCombinedStatus(status,&usedMask,AliPIDResponse::kDetHMPID,pHMPID); } if (fDetectorMask & AliPIDResponse::kDetEMCAL) { status = response->ComputeEMCALProbability(track, fSelectedSpecies, pEMCAL); SetCombinedStatus(status,&usedMask,AliPIDResponse::kDetEMCAL,pEMCAL); } if (fDetectorMask & AliPIDResponse::kDetPHOS) { status = response->ComputePHOSProbability(track, fSelectedSpecies, pPHOS); SetCombinedStatus(status,&usedMask,AliPIDResponse::kDetPHOS,pPHOS); } for (Int_t i =0; iPt()); Double_t sumPriors = 0; for (Int_t i=0;iInterpolate(pt); } else { p[i]=0.; } sumPriors+=p[i]; } // normalizing priors if (sumPriors == 0) return; for (Int_t i=0;i