17 #include "TClonesArray.h" 
   21 #include "FairRootManager.h" 
   35 #define PIDMVA_ASSOCIATORT_DEBUG 0 
   38 #if (PIDMVA_ASSOCIATORT_DEBUG != 0) 
   40 void printResult(std::map<std::string,float>& 
res)
 
   42   std::cout << 
"\n\t================================== \n";
 
   43   for( std::map<std::string,float>::iterator ii=res.begin(); 
 
   44        ii != res.end(); ++ii)
 
   46     std::cout << 
"\t"    << (*ii).first 
 
   47               << 
"\t=> " << (*ii).second
 
   50   std::cout << 
"\n\t================================== \n";
 
   60   : FairTask(
"PndPidMvaAssociatorTaskSTD"),
 
   62     fVarNames  (std::vector<std::string>()),
 
   63     fClassNames(std::vector<std::string>()),
 
   64     fWeightsFileName(std::string(getenv(
"VMCWORKDIR")) + std::string(
"/tools/MVA/PndMVAWeights/")),
 
   71     fPidChargedProb(new TClonesArray(
"PndPidProbability")),
 
   73     fMethodName(
"UNKNOWN_METHOD")
 
   89     fVarNames  (std::vector<std::string>()),
 
   90     fClassNames(std::vector<std::string>()),
 
   91     fWeightsFileName(std::string(getenv(
"VMCWORKDIR")) + std::string(
"/tools/MVA/PndMVAWeights/")),
 
   98     fPidChargedProb(new TClonesArray(
"PndPidProbability")),
 
  100     fMethodName(
"UNKNOWN_METHOD")
 
  116   std::cout<<
"<INFO> Default Weights path is set to " 
  158   std::cout << 
"<-I-> InitStatus PndPidMvaAssociatorTask::Init()\n";
 
  160   fManager = FairRootManager::Instance();
 
  162     std::cerr << 
"<ERROR> PndPidMvaAssociatorTask::Init:\n" 
  163               << 
"\t Could not init FairRootManager." 
  172     std::cerr << 
"<ERROR> PndPidMvaAssociatorTask::Init: No PidChargedCand there!" 
  200       std::cerr << 
"<Error> Failed to initialize TMVA_MLP classifier." 
  209     std::cout << 
"<INFO> TMVA_MLP initialized using " << fWeightsFileName << 
'\n';
 
  221       std::cerr << 
"<Error> Failed to initialize TMVA_BDT classifier." 
  230     std::cout << 
"<INFO> TMVA_BDT initialized using " << fWeightsFileName << 
'\n';
 
  242       std::cerr << 
"<Error> Failed to initialize LVQ classifier." 
  251     std::cout << 
"<INFO> LVQ initialized using " << fWeightsFileName << 
'\n';
 
  264       std::cerr << 
"<Error> Failed to initialize KNN classifier." 
  276     std::cout << 
"<INFO> KNN initialized using " << fWeightsFileName << 
'\n';
 
  286   std::cout << 
"<INFO> PndPidMvaAssociatorTask::Init: Success!\n";
 
  296   if(methodNameStr == 
"KNN")
 
  301   else if(methodNameStr == 
"LVQ")
 
  306   else if(methodNameStr == 
"TMVA_MLP")
 
  311   else if(methodNameStr == 
"TMVA_BDT")
 
  318     std::cerr << 
"<ERROR> Unknown Method." 
  325   std::cout << option << 
'\n';
 
  332 #if ( PIDMVA_ASSOCIATORT_DEBUG != 0 ) 
  333   std::cout << 
"<INFO> Call to Exec with options = " << option
 
  339     std::cout << 
"-I- Start PndPidMvaAssociatorTask.\n";
 
  353       std::cout << 
"-I- PndPidMVAAssociatorTask Ch BEFORE  " 
  362       std::cout << 
"-I- PndPidMVAAssociatorTask Ch AFTER " 
  391   std::map<std::string, float> 
out;
 
  406 #if ( PIDMVA_ASSOCIATORT_DEBUG != 0 ) 
  407   std::cout << 
"****************************************************\n" 
  409             << 
"\nGetEnergy = " << pidcand.
GetEnergy()
 
  424   std::cout << 
"====================================================\n";
 
  432     if(name == 
"electron")
 
  436     else if(name == 
"muon")
 
  440     else if(name == 
"pion")
 
  444     else if(name == 
"kaon")
 
  448     else if(name == 
"proton")
 
  454       std::cerr << 
"<ERROR> Unknown label (class Name).\n" 
  462   std::vector<float>* vect = 
new std::vector<float>();
 
  477         std::cerr << 
"<WARNING> (p > 0) failed. The event is skipped.\n" 
  478                   << 
"<ER-I> p = " << mom << std::endl;
 
  503         std::cerr << 
"<WARNING> (EmcClusterE9 > 0) failed. The event is skipped.\n" 
  516         std::cerr << 
"<WARNING> (EmcClusterE25 > 0) failed. The event is skipped.\n" 
  559   FairRootManager::Instance()->Register(tcaName.c_str(),
"Pid", 
fPidChargedProb, kTRUE); 
 
Double_t GetEmcClusterE25() const 
TClonesArray * fMCTrack
PndPidProbability TCA for charged particles. 
void SetPionPdf(Double_t val)
PndMvaClassifier * fClassifier
MVA classifier object. 
Float_t GetSttMeanDEDX() const 
Float_t GetEmcCalEnergy() const 
virtual void GetMvaValues(std::vector< float > EvtData, std::map< std::string, float > &result)=0
TLorentzVector GetLorentzVector() const 
std::vector< float > const * PrepareEvtVect(PndPidCandidate const &pidcand) const 
virtual void Exec(Option_t *option)
virtual InitStatus Init()
void SetDefaultWeightsPath()
Double_t GetEnergy() const 
void SetKaonPdf(Double_t val)
Double_t GetEmcClusterE9() const 
TClonesArray * fPidChargedProb
PndPidCandidate TCA for charged particles. 
!< Type definition of the neighbour list. 
Float_t GetDrcThetaC() const 
void SetElectronPdf(Double_t val)
virtual ~PndPidMvaAssociatorTask()
void SetMuonPdf(Double_t val)
Double_t GetEmcClusterE1() const 
std::string fMethodName
Monte-Carlo Truth track TCA. 
Double_t GetEmcClusterZ53() const 
void SetEvtParam(float const scFact, double const weight)
Double_t GetEmcClusterLat() const 
Float_t GetMvdDEDX() const 
Double_t GetEmcClusterZ20() const 
std::vector< std::string > fVarNames
Variable names container. 
void SetKnn(size_t const N)
Set the number of neighbours. 
virtual void SetParContainers()
size_t fNumNeigh
Number of neighbors. 
void SetProtonPdf(Double_t val)
TClonesArray * fPidChargedCand
void SetClassifier(Mva_MethodType const &methodT)
virtual void Initialize()
std::vector< std::string > fClassNames
Class names container. 
Interface definition of the LVQ classifier. 
void DoPidMatch(PndPidCandidate &pidcand, PndPidProbability &prob)
std::string fWeightsFileName
Path to the file holding weights (proto-types, examples, ...) 
virtual void Initialize()
PndPidMvaAssociatorTask()
TVector3 GetMomentum() const 
Mva_MethodType fMethodType
MVA Method name. 
FairRootManager * fManager