#include <TFile.h>
#include <TChain.h>
#include <AliAnalysisManager.h>
#include <AliInputEventHandler.h>
#include <AliVEventHandler.h>
#include <AliVEvent.h>
#include <AliVParticle.h>
#include <AliVTrack.h>
#include <AliLog.h>
#include <AliPIDResponse.h>
#include <AliESDpid.h>
#include <AliProdInfo.h>
#include "AliAnalysisTaskPIDResponse.h"
ClassImp(AliAnalysisTaskPIDResponse)
AliAnalysisTaskPIDResponse::AliAnalysisTaskPIDResponse():
AliAnalysisTaskSE(),
fIsMC(kFALSE),
fCachePID(kTRUE),
fOADBPath(),
fSpecialDetResponse(),
fPIDResponse(0x0),
fRun(-1),
fOldRun(-1),
fRecoPass(0),
fIsTunedOnData(kFALSE),
fTunedOnDataMask(0),
fRecoPassTuned(0),
fUseTPCEtaCorrection(kTRUE),
fUseTPCMultiplicityCorrection(kTRUE),
fUserDataRecoPass(-1)
{
}
AliAnalysisTaskPIDResponse::AliAnalysisTaskPIDResponse(const char* name):
AliAnalysisTaskSE(name),
fIsMC(kFALSE),
fCachePID(kTRUE),
fOADBPath(),
fSpecialDetResponse(),
fPIDResponse(0x0),
fRun(-1),
fOldRun(-1),
fRecoPass(0),
fIsTunedOnData(kFALSE),
fTunedOnDataMask(0),
fRecoPassTuned(0),
fUseTPCEtaCorrection(kTRUE),
fUseTPCMultiplicityCorrection(kTRUE),
fUserDataRecoPass(-1)
{
DefineInput(0,TChain::Class());
}
AliAnalysisTaskPIDResponse::~AliAnalysisTaskPIDResponse()
{
}
void AliAnalysisTaskPIDResponse::UserCreateOutputObjects()
{
AliLog::SetClassDebugLevel("AliAnalysisTaskPIDResponse",10);
AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
AliInputEventHandler *inputHandler=dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
if (!inputHandler) AliFatal("Input handler needed");
inputHandler->CreatePIDResponse(fIsMC);
fPIDResponse=inputHandler->GetPIDResponse();
if (!fPIDResponse) AliFatal("PIDResponse object was not created");
fPIDResponse->SetOADBPath(AliAnalysisManager::GetOADBPath());
fPIDResponse->SetCachePID(fCachePID);
if (!fOADBPath.IsNull()) fPIDResponse->SetOADBPath(fOADBPath.Data());
if(fIsTunedOnData) fPIDResponse->SetTunedOnData(kTRUE,fRecoPassTuned);
if(fTunedOnDataMask != 0) fPIDResponse->SetTunedOnDataMask(fTunedOnDataMask);
if (!fSpecialDetResponse.IsNull()){
TObjArray *arr=fSpecialDetResponse.Tokenize("; ");
for (Int_t i=0; i<arr->GetEntriesFast();++i){
TString resp(arr->At(i)->GetName());
if (resp.BeginsWith("TPC:")){
resp.ReplaceAll("TPC:","");
fPIDResponse->SetCustomTPCpidResponse(resp.Data());
AliInfo(Form("Setting custom TPC response file: '%s'",resp.Data()));
}
else if (resp.BeginsWith("TPC-Maps:")){
resp.ReplaceAll("TPC-Maps:","");
fPIDResponse->SetCustomTPCetaMaps(resp.Data());
AliInfo(Form("Setting custom TPC eta maps file: '%s'",resp.Data()));
}
}
delete arr;
}
}
void AliAnalysisTaskPIDResponse::UserExec(Option_t *)
{
AliVEvent *event=InputEvent();
if (!event) return;
fRun=event->GetRunNumber();
if (fRun!=fOldRun){
SetRecoInfo();
fOldRun=fRun;
fPIDResponse->SetUseTPCEtaCorrection(fUseTPCEtaCorrection);
fPIDResponse->SetUseTPCMultiplicityCorrection(fUseTPCMultiplicityCorrection);
}
fPIDResponse->InitialiseEvent(event,fRecoPass);
AliESDpid *pidresp = dynamic_cast<AliESDpid*>(fPIDResponse);
if(pidresp && AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()){
pidresp->SetEventHandler(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
}
}
void AliAnalysisTaskPIDResponse::SetRecoInfo()
{
fRecoPass=0;
AliAnalysisManager *mgr=AliAnalysisManager::GetAnalysisManager();
AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
if (!inputHandler) return;
TList *uiList = inputHandler->GetUserInfo();
AliProdInfo prodInfo(uiList);
prodInfo.List();
TTree *tree= (TTree*)inputHandler->GetTree();
TFile *file= (TFile*)tree->GetCurrentFile();
if (!file) {
AliError("Current file not found, cannot set reconstruction information");
return;
} else {
TString fileName(file->GetName());
fPIDResponse->SetCurrentFile(fileName.Data());
}
fPIDResponse->SetCurrentAliRootRev(prodInfo.GetAlirootSvnVersion());
if (prodInfo.IsMC() == kTRUE) fIsMC=kTRUE;
if ( (prodInfo.IsMC() == kFALSE) && (fIsMC == kFALSE) ) {
if (fUserDataRecoPass > -1) {
AliInfo(Form("Data reconstruction pass is user specified. Setting pass #: %d",fUserDataRecoPass));
fRecoPass = fUserDataRecoPass;
} else {
fRecoPass = prodInfo.GetRecoPass();
if (fRecoPass < 0) {
TString fileName(file->GetName());
if (fileName.Contains("pass1") ) {
fRecoPass=1;
} else if (fileName.Contains("pass2") ) {
fRecoPass=2;
} else if (fileName.Contains("pass3") ) {
fRecoPass=3;
} else if (fileName.Contains("pass4") ) {
fRecoPass=4;
} else if (fileName.Contains("pass5") ) {
fRecoPass=5;
}
}
}
if (fRecoPass <= 0) {
AliError(" ******** Failed to find reconstruction pass number *********");
AliError(" ******** PID information loaded for 'pass 0': parameters unreliable ******");
AliError(" --> If these are MC data: please set kTRUE first argument of AddTaskPIDResponse");
AliError(" --> If these are real data: ");
AliError(" (a) please insert pass number inside the path of your local file OR");
AliError(" (b) specify reconstruction pass number when adding PIDResponse task");
AliFatal(" no pass number specified for this data file, abort. Asserting AliFatal");
}
}
}
AliAnalysisTaskPIDResponse.cxx:1 AliAnalysisTaskPIDResponse.cxx:2 AliAnalysisTaskPIDResponse.cxx:3 AliAnalysisTaskPIDResponse.cxx:4 AliAnalysisTaskPIDResponse.cxx:5 AliAnalysisTaskPIDResponse.cxx:6 AliAnalysisTaskPIDResponse.cxx:7 AliAnalysisTaskPIDResponse.cxx:8 AliAnalysisTaskPIDResponse.cxx:9 AliAnalysisTaskPIDResponse.cxx:10 AliAnalysisTaskPIDResponse.cxx:11 AliAnalysisTaskPIDResponse.cxx:12 AliAnalysisTaskPIDResponse.cxx:13 AliAnalysisTaskPIDResponse.cxx:14 AliAnalysisTaskPIDResponse.cxx:15 AliAnalysisTaskPIDResponse.cxx:16 AliAnalysisTaskPIDResponse.cxx:17 AliAnalysisTaskPIDResponse.cxx:18 AliAnalysisTaskPIDResponse.cxx:19 AliAnalysisTaskPIDResponse.cxx:20 AliAnalysisTaskPIDResponse.cxx:21 AliAnalysisTaskPIDResponse.cxx:22 AliAnalysisTaskPIDResponse.cxx:23 AliAnalysisTaskPIDResponse.cxx:24 AliAnalysisTaskPIDResponse.cxx:25 AliAnalysisTaskPIDResponse.cxx:26 AliAnalysisTaskPIDResponse.cxx:27 AliAnalysisTaskPIDResponse.cxx:28 AliAnalysisTaskPIDResponse.cxx:29 AliAnalysisTaskPIDResponse.cxx:30 AliAnalysisTaskPIDResponse.cxx:31 AliAnalysisTaskPIDResponse.cxx:32 AliAnalysisTaskPIDResponse.cxx:33 AliAnalysisTaskPIDResponse.cxx:34 AliAnalysisTaskPIDResponse.cxx:35 AliAnalysisTaskPIDResponse.cxx:36 AliAnalysisTaskPIDResponse.cxx:37 AliAnalysisTaskPIDResponse.cxx:38 AliAnalysisTaskPIDResponse.cxx:39 AliAnalysisTaskPIDResponse.cxx:40 AliAnalysisTaskPIDResponse.cxx:41 AliAnalysisTaskPIDResponse.cxx:42 AliAnalysisTaskPIDResponse.cxx:43 AliAnalysisTaskPIDResponse.cxx:44 AliAnalysisTaskPIDResponse.cxx:45 AliAnalysisTaskPIDResponse.cxx:46 AliAnalysisTaskPIDResponse.cxx:47 AliAnalysisTaskPIDResponse.cxx:48 AliAnalysisTaskPIDResponse.cxx:49 AliAnalysisTaskPIDResponse.cxx:50 AliAnalysisTaskPIDResponse.cxx:51 AliAnalysisTaskPIDResponse.cxx:52 AliAnalysisTaskPIDResponse.cxx:53 AliAnalysisTaskPIDResponse.cxx:54 AliAnalysisTaskPIDResponse.cxx:55 AliAnalysisTaskPIDResponse.cxx:56 AliAnalysisTaskPIDResponse.cxx:57 AliAnalysisTaskPIDResponse.cxx:58 AliAnalysisTaskPIDResponse.cxx:59 AliAnalysisTaskPIDResponse.cxx:60 AliAnalysisTaskPIDResponse.cxx:61 AliAnalysisTaskPIDResponse.cxx:62 AliAnalysisTaskPIDResponse.cxx:63 AliAnalysisTaskPIDResponse.cxx:64 AliAnalysisTaskPIDResponse.cxx:65 AliAnalysisTaskPIDResponse.cxx:66 AliAnalysisTaskPIDResponse.cxx:67 AliAnalysisTaskPIDResponse.cxx:68 AliAnalysisTaskPIDResponse.cxx:69 AliAnalysisTaskPIDResponse.cxx:70 AliAnalysisTaskPIDResponse.cxx:71 AliAnalysisTaskPIDResponse.cxx:72 AliAnalysisTaskPIDResponse.cxx:73 AliAnalysisTaskPIDResponse.cxx:74 AliAnalysisTaskPIDResponse.cxx:75 AliAnalysisTaskPIDResponse.cxx:76 AliAnalysisTaskPIDResponse.cxx:77 AliAnalysisTaskPIDResponse.cxx:78 AliAnalysisTaskPIDResponse.cxx:79 AliAnalysisTaskPIDResponse.cxx:80 AliAnalysisTaskPIDResponse.cxx:81 AliAnalysisTaskPIDResponse.cxx:82 AliAnalysisTaskPIDResponse.cxx:83 AliAnalysisTaskPIDResponse.cxx:84 AliAnalysisTaskPIDResponse.cxx:85 AliAnalysisTaskPIDResponse.cxx:86 AliAnalysisTaskPIDResponse.cxx:87 AliAnalysisTaskPIDResponse.cxx:88 AliAnalysisTaskPIDResponse.cxx:89 AliAnalysisTaskPIDResponse.cxx:90 AliAnalysisTaskPIDResponse.cxx:91 AliAnalysisTaskPIDResponse.cxx:92 AliAnalysisTaskPIDResponse.cxx:93 AliAnalysisTaskPIDResponse.cxx:94 AliAnalysisTaskPIDResponse.cxx:95 AliAnalysisTaskPIDResponse.cxx:96 AliAnalysisTaskPIDResponse.cxx:97 AliAnalysisTaskPIDResponse.cxx:98 AliAnalysisTaskPIDResponse.cxx:99 AliAnalysisTaskPIDResponse.cxx:100 AliAnalysisTaskPIDResponse.cxx:101 AliAnalysisTaskPIDResponse.cxx:102 AliAnalysisTaskPIDResponse.cxx:103 AliAnalysisTaskPIDResponse.cxx:104 AliAnalysisTaskPIDResponse.cxx:105 AliAnalysisTaskPIDResponse.cxx:106 AliAnalysisTaskPIDResponse.cxx:107 AliAnalysisTaskPIDResponse.cxx:108 AliAnalysisTaskPIDResponse.cxx:109 AliAnalysisTaskPIDResponse.cxx:110 AliAnalysisTaskPIDResponse.cxx:111 AliAnalysisTaskPIDResponse.cxx:112 AliAnalysisTaskPIDResponse.cxx:113 AliAnalysisTaskPIDResponse.cxx:114 AliAnalysisTaskPIDResponse.cxx:115 AliAnalysisTaskPIDResponse.cxx:116 AliAnalysisTaskPIDResponse.cxx:117 AliAnalysisTaskPIDResponse.cxx:118 AliAnalysisTaskPIDResponse.cxx:119 AliAnalysisTaskPIDResponse.cxx:120 AliAnalysisTaskPIDResponse.cxx:121 AliAnalysisTaskPIDResponse.cxx:122 AliAnalysisTaskPIDResponse.cxx:123 AliAnalysisTaskPIDResponse.cxx:124 AliAnalysisTaskPIDResponse.cxx:125 AliAnalysisTaskPIDResponse.cxx:126 AliAnalysisTaskPIDResponse.cxx:127 AliAnalysisTaskPIDResponse.cxx:128 AliAnalysisTaskPIDResponse.cxx:129 AliAnalysisTaskPIDResponse.cxx:130 AliAnalysisTaskPIDResponse.cxx:131 AliAnalysisTaskPIDResponse.cxx:132 AliAnalysisTaskPIDResponse.cxx:133 AliAnalysisTaskPIDResponse.cxx:134 AliAnalysisTaskPIDResponse.cxx:135 AliAnalysisTaskPIDResponse.cxx:136 AliAnalysisTaskPIDResponse.cxx:137 AliAnalysisTaskPIDResponse.cxx:138 AliAnalysisTaskPIDResponse.cxx:139 AliAnalysisTaskPIDResponse.cxx:140 AliAnalysisTaskPIDResponse.cxx:141 AliAnalysisTaskPIDResponse.cxx:142 AliAnalysisTaskPIDResponse.cxx:143 AliAnalysisTaskPIDResponse.cxx:144 AliAnalysisTaskPIDResponse.cxx:145 AliAnalysisTaskPIDResponse.cxx:146 AliAnalysisTaskPIDResponse.cxx:147 AliAnalysisTaskPIDResponse.cxx:148 AliAnalysisTaskPIDResponse.cxx:149 AliAnalysisTaskPIDResponse.cxx:150 AliAnalysisTaskPIDResponse.cxx:151 AliAnalysisTaskPIDResponse.cxx:152 AliAnalysisTaskPIDResponse.cxx:153 AliAnalysisTaskPIDResponse.cxx:154 AliAnalysisTaskPIDResponse.cxx:155 AliAnalysisTaskPIDResponse.cxx:156 AliAnalysisTaskPIDResponse.cxx:157 AliAnalysisTaskPIDResponse.cxx:158 AliAnalysisTaskPIDResponse.cxx:159 AliAnalysisTaskPIDResponse.cxx:160 AliAnalysisTaskPIDResponse.cxx:161 AliAnalysisTaskPIDResponse.cxx:162 AliAnalysisTaskPIDResponse.cxx:163 AliAnalysisTaskPIDResponse.cxx:164 AliAnalysisTaskPIDResponse.cxx:165 AliAnalysisTaskPIDResponse.cxx:166 AliAnalysisTaskPIDResponse.cxx:167 AliAnalysisTaskPIDResponse.cxx:168 AliAnalysisTaskPIDResponse.cxx:169 AliAnalysisTaskPIDResponse.cxx:170 AliAnalysisTaskPIDResponse.cxx:171 AliAnalysisTaskPIDResponse.cxx:172 AliAnalysisTaskPIDResponse.cxx:173 AliAnalysisTaskPIDResponse.cxx:174 AliAnalysisTaskPIDResponse.cxx:175 AliAnalysisTaskPIDResponse.cxx:176 AliAnalysisTaskPIDResponse.cxx:177 AliAnalysisTaskPIDResponse.cxx:178 AliAnalysisTaskPIDResponse.cxx:179 AliAnalysisTaskPIDResponse.cxx:180 AliAnalysisTaskPIDResponse.cxx:181 AliAnalysisTaskPIDResponse.cxx:182 AliAnalysisTaskPIDResponse.cxx:183 AliAnalysisTaskPIDResponse.cxx:184 AliAnalysisTaskPIDResponse.cxx:185 AliAnalysisTaskPIDResponse.cxx:186 AliAnalysisTaskPIDResponse.cxx:187 AliAnalysisTaskPIDResponse.cxx:188 AliAnalysisTaskPIDResponse.cxx:189 AliAnalysisTaskPIDResponse.cxx:190 AliAnalysisTaskPIDResponse.cxx:191 AliAnalysisTaskPIDResponse.cxx:192 AliAnalysisTaskPIDResponse.cxx:193 AliAnalysisTaskPIDResponse.cxx:194 AliAnalysisTaskPIDResponse.cxx:195 AliAnalysisTaskPIDResponse.cxx:196 AliAnalysisTaskPIDResponse.cxx:197 AliAnalysisTaskPIDResponse.cxx:198 AliAnalysisTaskPIDResponse.cxx:199 AliAnalysisTaskPIDResponse.cxx:200 AliAnalysisTaskPIDResponse.cxx:201 AliAnalysisTaskPIDResponse.cxx:202 AliAnalysisTaskPIDResponse.cxx:203 AliAnalysisTaskPIDResponse.cxx:204 AliAnalysisTaskPIDResponse.cxx:205 AliAnalysisTaskPIDResponse.cxx:206 AliAnalysisTaskPIDResponse.cxx:207 AliAnalysisTaskPIDResponse.cxx:208 AliAnalysisTaskPIDResponse.cxx:209 AliAnalysisTaskPIDResponse.cxx:210 AliAnalysisTaskPIDResponse.cxx:211 AliAnalysisTaskPIDResponse.cxx:212 AliAnalysisTaskPIDResponse.cxx:213 AliAnalysisTaskPIDResponse.cxx:214 AliAnalysisTaskPIDResponse.cxx:215 AliAnalysisTaskPIDResponse.cxx:216 AliAnalysisTaskPIDResponse.cxx:217 AliAnalysisTaskPIDResponse.cxx:218 AliAnalysisTaskPIDResponse.cxx:219 AliAnalysisTaskPIDResponse.cxx:220 AliAnalysisTaskPIDResponse.cxx:221 AliAnalysisTaskPIDResponse.cxx:222 AliAnalysisTaskPIDResponse.cxx:223 AliAnalysisTaskPIDResponse.cxx:224 AliAnalysisTaskPIDResponse.cxx:225 AliAnalysisTaskPIDResponse.cxx:226 AliAnalysisTaskPIDResponse.cxx:227 AliAnalysisTaskPIDResponse.cxx:228