]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskPIDResponse.cxx
AliAnalysisTaskPhiEffMc added to CFDPhi lib
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskPIDResponse.cxx
index f0a2f086322723e1529696e69229110033b4da4c..a9a436ff6980df5941bc235f343dbddc2a4668d9 100644 (file)
@@ -26,6 +26,7 @@
 #include <AliLog.h>
 #include <AliPIDResponse.h>
 #include <AliESDpid.h>
+#include <AliProdInfo.h>
 
 #include "AliAnalysisTaskPIDResponse.h"
 
@@ -37,12 +38,17 @@ AliAnalysisTaskSE(),
 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
@@ -55,12 +61,17 @@ AliAnalysisTaskSE(name),
 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
@@ -96,9 +107,24 @@ void AliAnalysisTaskPIDResponse::UserCreateOutputObjects()
   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;
+  }  
 }
 
 //______________________________________________________________________________
@@ -113,6 +139,9 @@ void AliAnalysisTaskPIDResponse::UserExec(Option_t */*option*/)
   if (fRun!=fOldRun){
     SetRecoInfo();
     fOldRun=fRun;
+    
+    fPIDResponse->SetUseTPCEtaCorrection(fUseTPCEtaCorrection);
+    fPIDResponse->SetUseTPCMultiplicityCorrection(fUseTPCMultiplicityCorrection);
   }
 
   fPIDResponse->InitialiseEvent(event,fRecoPass);
@@ -121,9 +150,9 @@ void AliAnalysisTaskPIDResponse::UserExec(Option_t */*option*/)
       pidresp->SetEventHandler(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
   }
   //create and attach transient PID object
-  if (fCachePID) {
-    fPIDResponse->FillTrackDetectorPID();
-  }
+//   if (fCachePID) {
+//     fPIDResponse->FillTrackDetectorPID();
+//   }
 }
 
 //______________________________________________________________________________
@@ -136,32 +165,59 @@ void AliAnalysisTaskPIDResponse::SetRecoInfo()
   //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());
 }