reco pass user selectable
authorantoniol <antoniol@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Sep 2013 07:07:24 +0000 (07:07 +0000)
committerantoniol <antoniol@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Sep 2013 07:07:24 +0000 (07:07 +0000)
ANALYSIS/AliAnalysisTaskPIDResponse.cxx
ANALYSIS/AliAnalysisTaskPIDResponse.h
ANALYSIS/macros/AddTaskPIDResponse.C

index 49af37b..441437a 100644 (file)
@@ -46,8 +46,9 @@ fRecoPass(0),
 fIsTunedOnData(kFALSE),
 fTunedOnDataMask(0),
 fRecoPassTuned(0),
-fUseTPCEtaCorrection(kFALSE),//TODO: In future, default kTRUE 
-fUseTPCMultiplicityCorrection(kFALSE)//TODO: In future, default kTRUE  
+fUseTPCEtaCorrection(kFALSE),                 //TODO: In future, default kTRUE 
+fUseTPCMultiplicityCorrection(kFALSE),        //TODO: In future, default kTRUE  
+fUserDataRecoPass(-1)
 {
   //
   // Dummy constructor
@@ -69,7 +70,8 @@ fIsTunedOnData(kFALSE),
 fTunedOnDataMask(0),
 fRecoPassTuned(0),
 fUseTPCEtaCorrection(kFALSE),//TODO: In future, default kTRUE
-fUseTPCMultiplicityCorrection(kFALSE)//TODO: In future, default kTRUE  
+fUseTPCMultiplicityCorrection(kFALSE),//TODO: In future, default kTRUE  
+fUserDataRecoPass(-1)
 {
   //
   // Default constructor
@@ -186,26 +188,35 @@ void AliAnalysisTaskPIDResponse::SetRecoInfo()
   
   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
-    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 (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: please insert pass number inside the path of your local file ******");
+      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");
     }
   }
 
index d842ffd..82dd701 100644 (file)
@@ -52,6 +52,8 @@ public:
   Bool_t UseTPCMultiplicityCorrection() const { return fUseTPCMultiplicityCorrection; };
 
   void SetSpecialDetectorResponse(const char* det) { fSpecialDetResponse=det; }
+  void SetUserDataRecoPass(Int_t pass){fUserDataRecoPass=pass;};
+
 
 private:
   Bool_t fIsMC;                        // If we run on MC data
@@ -70,6 +72,7 @@ private:
   
   Bool_t fUseTPCEtaCorrection;          // Use TPC eta correction
   Bool_t fUseTPCMultiplicityCorrection; // Use TPC multiplicity correction
+  Int_t  fUserDataRecoPass;            //! forced DATA reco pass
   
   //
   void SetRecoInfo();
@@ -77,6 +80,6 @@ private:
   AliAnalysisTaskPIDResponse(const AliAnalysisTaskPIDResponse &other);
   AliAnalysisTaskPIDResponse& operator=(const AliAnalysisTaskPIDResponse &other);
   
-  ClassDef(AliAnalysisTaskPIDResponse,6)  // Task to properly set the PID response functions of all detectors
+  ClassDef(AliAnalysisTaskPIDResponse,7)  // Task to properly set the PID response functions of all detectors
 };
 #endif
index b407a6f..9ce86fd 100644 (file)
@@ -2,7 +2,8 @@ AliAnalysisTask *AddTaskPIDResponse(Bool_t isMC=kFALSE, Bool_t autoMCesd=kTRUE,
                                     Bool_t tuneOnData=kFALSE, Int_t recoPass=2,
                                     Bool_t cachePID=kFALSE, TString detResponse="",
                                     Bool_t useTPCEtaCorrection = kTRUE,
-                                    Bool_t useTPCMultiplicityCorrection = kFALSE)
+                                    Bool_t useTPCMultiplicityCorrection = kFALSE,
+                                   Int_t  recoDataPass = -1)
 {
 // Macro to connect a centrality selection task to an existing analysis manager.
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
@@ -46,6 +47,7 @@ AliAnalysisTask *AddTaskPIDResponse(Bool_t isMC=kFALSE, Bool_t autoMCesd=kTRUE,
   pidTask->SetSpecialDetectorResponse(detResponse);
   pidTask->SetUseTPCEtaCorrection(useTPCEtaCorrection);
   pidTask->SetUseTPCMultiplicityCorrection(useTPCMultiplicityCorrection);
+  pidTask->SetUserDataRecoPass(recoDataPass);
   mgr->AddTask(pidTask);
   
 //   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("PIDResponseQA",