#include <AliLog.h>
#include <AliPIDResponse.h>
#include <AliESDpid.h>
+#include <AliProdInfo.h>
#include "AliAnalysisTaskPIDResponse.h"
fIsMC(kFALSE),
fCachePID(kTRUE),
fOADBPath(),
+fSpecialDetResponse(),
fPIDResponse(0x0),
-fRun(0),
-fOldRun(0),
+fRun(-1),
+fOldRun(-1),
fRecoPass(0),
fIsTunedOnData(kFALSE),
-fRecoPassTuned(0)
+fTunedOnDataMask(0),
+fRecoPassTuned(0),
+fUseTPCEtaCorrection(kTRUE),
+fUseTPCMultiplicityCorrection(kTRUE),
+fUserDataRecoPass(-1)
{
//
// Dummy constructor
fIsMC(kFALSE),
fCachePID(kTRUE),
fOADBPath(),
+fSpecialDetResponse(),
fPIDResponse(0x0),
-fRun(0),
-fOldRun(0),
+fRun(-1),
+fOldRun(-1),
fRecoPass(0),
fIsTunedOnData(kFALSE),
-fRecoPassTuned(0)
+fTunedOnDataMask(0),
+fRecoPassTuned(0),
+fUseTPCEtaCorrection(kTRUE),
+fUseTPCMultiplicityCorrection(kTRUE),
+fUserDataRecoPass(-1)
{
//
// Default constructor
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()));
+ }
+ }
+ delete arr;
+ }
}
//______________________________________________________________________________
if (fRun!=fOldRun){
SetRecoInfo();
fOldRun=fRun;
+
+ fPIDResponse->SetUseTPCEtaCorrection(fUseTPCEtaCorrection);
+ fPIDResponse->SetUseTPCMultiplicityCorrection(fUseTPCMultiplicityCorrection);
}
fPIDResponse->InitialiseEvent(event,fRecoPass);
pidresp->SetEventHandler(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
}
//create and attach transient PID object
- if (fCachePID) {
- fPIDResponse->FillTrackDetectorPID();
- }
+// if (fCachePID) {
+// fPIDResponse->FillTrackDetectorPID();
+// }
}
//______________________________________________________________________________
//reset information
fRecoPass=0;
- //Get the current file to check the reconstruction pass (UGLY, but not stored in ESD... )
+ //Get UserInfo from the current tree
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());
- //find pass from file name (UGLY, but not stored in ESD... )
- 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 (prodInfo.IsMC() == kTRUE) fIsMC=kTRUE; // protection if user didn't use macro switch
+ if ( (prodInfo.IsMC() == kFALSE) && (fIsMC == kFALSE) ) { // reco pass is needed only for data
+
+ if (fUserDataRecoPass > -1) {
+ AliInfo(Form("Data reconstruction pass is user specified. Setting pass #: %d",fUserDataRecoPass));
+ fRecoPass = fUserDataRecoPass;
+ } else {
+ fRecoPass = prodInfo.GetRecoPass();
+ if (fRecoPass < 0) { // as last resort we find pass from file name (UGLY, but not stored in ESDs/AODs before LHC12d )
+ 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");
+ }
}
- fPIDResponse->SetCurrentFile(fileName.Data());
}