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.                  *
**************************************************************************/
//
// Class for Bayesian PID
// Implements the abstract base class AliHFEpidBase
// 
// Class contains Bayesian specific cuts and QA histograms
// several detectors added for combined PID
// 
//
// Authors: 
//
//   Yvonne Pachmayer <pachmay@physi.uni-heidelberg.de>
//  
#include <TF1.h>
#include <TMath.h>

#include "AliAODPid.h"
#include "AliAODTrack.h"
#include "AliAODMCParticle.h"
#include "AliESDtrack.h"
#include "AliExternalTrackParam.h"
#include "AliLog.h"
#include "AliMCParticle.h"
#include "AliPID.h"
#include "AliPIDResponse.h"
#include "AliPIDCombined.h"

#include "AliHFEpidTPC.h"
#include "AliHFEpidTOF.h"
#include "AliHFEpidTRD.h"
#include "AliHFEpidBayes.h"
#include "AliHFEpidQAmanager.h"

ClassImp(AliHFEpidBayes)

//___________________________________________________________________
AliHFEpidBayes::AliHFEpidBayes() :
  // add a list here
    AliHFEpidBase()
    , fPIDCombined(NULL)
    , fDetMask(10)
    , fDetMaskDefault(10)
    , fDetMaskDefaultandTRD(14)
    , fpidthres(0.9)
{
  //
  // default  constructor
  // 


}

//___________________________________________________________________
AliHFEpidBayes::AliHFEpidBayes(const char* name) :
  // add a list here
    AliHFEpidBase(name)
    , fPIDCombined(NULL)
    , fDetMask(10)
    , fDetMaskDefault(10)
    , fDetMaskDefaultandTRD(14)
    , fpidthres(0.9)
{
  //
  // default  constructor
  // 
  //

}

//____________________________________________________________
AliHFEpidBayes::AliHFEpidBayes(const AliHFEpidBayes &ref):
    AliHFEpidBase("")
    , fPIDCombined(NULL)
    , fDetMask(10)
    , fDetMaskDefault(10)
    , fDetMaskDefaultandTRD(14)
    , fpidthres(0.9)
{
  //
  // Copy constructor
  //
  ref.Copy(*this);
}

//____________________________________________________________
AliHFEpidBayes &AliHFEpidBayes::operator=(const AliHFEpidBayes &ref){
  //
  // Make assignment
  //
  if(this != &ref){
    ref.Copy(*this);
  } 
  return *this;
}

//___________________________________________________________________
AliHFEpidBayes::~AliHFEpidBayes(){
  //
  // Destructor
  //
}

//___________________________________________________________________
void AliHFEpidBayes::Copy(TObject &ref) const {
  //
  // Performs the copying of the object
  //
  AliHFEpidBayes &target = dynamic_cast<AliHFEpidBayes &>(ref);

  target.fPIDCombined           = fPIDCombined;
  target.fDetMask               = fDetMask;
  target.fDetMaskDefault        = fDetMaskDefault;
  target.fDetMaskDefaultandTRD  = fDetMaskDefaultandTRD;
  target.fpidthres              = fpidthres;

  AliHFEpidBase::Copy(ref);

}

//___________________________________________________________________
Bool_t AliHFEpidBayes::InitializePID(Int_t /*run*/){
  //
  // Initialize Bayes PID
  //

    fPIDCombined=new AliPIDCombined;
    fDetMaskDefault=AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF;
    fDetMaskDefaultandTRD=AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF+AliPIDResponse::kDetTRD;
    return kTRUE;
}

//___________________________________________________________________
Int_t AliHFEpidBayes::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const
{
  //
  // identification of electrons via Bayes pid
  //

    if(pidqa) pidqa->ProcessTrack(track, AliHFEpid::kBAYESpid, AliHFEdetPIDqa::kBeforePID);
    AliDebug(1, "Doing Bayes PID based");

    if (!fkPIDResponse)
    {
	AliFatal("This Task needs the PID response attached to the inputHandler");
	return 0;
    }

    Bool_t used=kFALSE;
    Bool_t usedTOF=kFALSE;
    Bool_t usedTPC=kFALSE;
    Bool_t usedTRD=kFALSE;



    if((fDetMask==fDetMaskDefault)||(fDetMask==fDetMaskDefaultandTRD))
    {
	Double_t probTPC[AliPID::kSPECIES]={0.};
	usedTPC = fkPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTPC,(AliVTrack*)track->GetRecTrack(),AliPID::kSPECIES,probTPC) == AliPIDResponse::kDetPidOk;
	Double_t probTOF[AliPID::kSPECIES]={0.};
	usedTOF = fkPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTOF,(AliVTrack*)track->GetRecTrack(),AliPID::kSPECIES,probTOF) == AliPIDResponse::kDetPidOk;
	if((usedTOF==1)&&(usedTPC==1)) used=1;
        else used=0;

	if(fDetMask==fDetMaskDefaultandTRD)
	{
	    Double_t probTRD[AliPID::kSPECIES]={0.};
	    usedTRD = fkPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTRD,(AliVTrack*)track->GetRecTrack(),AliPID::kSPECIES,probTRD) == AliPIDResponse::kDetPidOk;
	    if((usedTOF==1)&&(usedTPC==1)&&(usedTRD==1)) used=1;
	    else used=0;
	} 
    }




    Double_t fprobComb[AliPID::kSPECIES]={0.};
    CalcCombProb(track,fkPIDResponse, fprobComb);

    Int_t pdg=0;
    if(fprobComb[AliPID::kElectron]>fpidthres) pdg=11;

    if((pidqa) && (pdg==11) && (used==1)) pidqa->ProcessTrack(track, AliHFEpid::kBAYESpid, AliHFEdetPIDqa::kAfterPID);

    return pdg;


}

void AliHFEpidBayes::CalcCombProb(const AliHFEpidObject *track,const AliPIDResponse *fPIDResponse, Double_t* fprobTPCTOF) const
{
  //
  // The name says it all
  //

    for(Int_t i=0;i<AliPID::kSPECIES;i++)
    {
	fprobTPCTOF[i]=0.;
    }
    fPIDCombined->SetEnablePriors(kFALSE);
    fPIDCombined->SetDetectorMask(fDetMask);

    fPIDCombined->ComputeProbabilities((AliVTrack*)track->GetRecTrack(), fPIDResponse, fprobTPCTOF);

}

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