Fix crash when running the muon QA tasks due to problem in getting the default parame...
authorpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 8 Dec 2012 15:37:58 +0000 (15:37 +0000)
committerpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 8 Dec 2012 15:37:58 +0000 (15:37 +0000)
PWG/muon/AliMuonTrackCuts.cxx
PWG/muon/AliMuonTrackCuts.h
PWGPP/macros/AddTaskMTRchamberEfficiency.C

index 7e191b0..63a5472 100644 (file)
@@ -116,7 +116,7 @@ void AliMuonTrackCuts::SetCustomParamFromRun( Int_t runNumber, Int_t passNumber
   /// and allows to manually modify parameters
 
   fPassNumber = passNumber;
-  ReadParamFromOADB ( runNumber );
+  ReadParamFromOADB ( runNumber, passNumber );
   fUseCustomParam = kTRUE;
   //AliWarning (Form("Setting parameters from run %i pass %i. From now on SetRun does NOTHING!!", runNumber, passNumber));
   AliWarning (Form("From now on SetRun does NOTHING!!"));
@@ -145,21 +145,24 @@ Bool_t AliMuonTrackCuts::SetRun ( const AliInputEventHandler* eventHandler )
   
   if ( fUseCustomParam ) return kFALSE;
   Int_t runNumber = eventHandler->GetEvent()->GetRunNumber();
-  if ( fPassNumber < 0 ) {
+  
+  Int_t passNumber = fPassNumber;
+  if ( fPassNumber < 0 && ! fAllowDefaultParams ) {
     // Pass number not set by user: try to guess it from data
-    fPassNumber = AliAnalysisMuonUtility::GetPassNumber(eventHandler);
+    passNumber = AliAnalysisMuonUtility::GetPassNumber(eventHandler);
+    AliInfo(Form("Guessing pass number from path: pass%i", passNumber));
   }
-  return ReadParamFromOADB ( runNumber );
+  return ReadParamFromOADB ( runNumber, passNumber );
 }
 
 
 //________________________________________________________________________
-Bool_t AliMuonTrackCuts::ReadParamFromOADB ( Int_t runNumber )
+Bool_t AliMuonTrackCuts::ReadParamFromOADB ( Int_t runNumber, Int_t passNumber )
 {
 
   /// Read parameters from OADB
   
-  if ( fPassNumber < 0 && ! fAllowDefaultParams ) AliFatal("Pass number not specified!");
+  if ( passNumber < 0 && ! fAllowDefaultParams ) AliFatal("Pass number not specified!");
   
   TString filename = Form("%s/PWG/MUON/MuonTrackCuts.root",AliAnalysisManager::GetOADBPath());
   if ( fIsMC ) filename.ReplaceAll(".root", "_MC.root");
@@ -172,51 +175,58 @@ Bool_t AliMuonTrackCuts::ReadParamFromOADB ( Int_t runNumber )
 
   // Search the container name to find the correct pass
   AliOADBContainer* oadbContainer = 0x0;
-  AliOADBMuonTrackCutsParam* runMatchParams = 0x0, *defaultParams = 0x0;
+  AliOADBMuonTrackCutsParam* runMatchParams = 0x0, *lastMatchParams = 0x0, *lastDefaultParams = 0x0;
   
-  Int_t foundPass = -999, runMatchPass = -999;
+  Int_t lastDefaultPass = -999, lastMatchPass = -999, foundPass = -999;
   TList* listOfKeys = file->GetListOfKeys();
   TIter next(listOfKeys);
   TObject* key = 0x0;
   // loop on keys
   while ( ( key = next() ) ) {
     Int_t currPass = AliAnalysisMuonUtility::GetPassNumber(key->GetName());
-    if ( ( fPassNumber < 0 ) ) {
-      if ( currPass < runMatchPass ) continue;
-    }
-    else if ( currPass != fPassNumber ) continue;
-    oadbContainer = static_cast<AliOADBContainer*> (file->Get(key->GetName()));
+    // if user selects a specific pass number, check for it
+    if ( fPassNumber >= 0 && currPass != fPassNumber ) continue;
     
+    oadbContainer = static_cast<AliOADBContainer*> (file->Get(key->GetName()));    
     // Check if the found parameters are default or match the requested run
     AliOADBMuonTrackCutsParam* currParams = static_cast<AliOADBMuonTrackCutsParam*> (oadbContainer->GetObject(runNumber, "default"));
     if ( oadbContainer->GetDefaultObject(currParams->GetName()) ) {
-      if ( runMatchParams ) continue;
-      defaultParams = currParams;
+      if ( currPass > lastDefaultPass ) {
+        lastDefaultPass = currPass;
+        lastDefaultParams = currParams;
+      }
     }
     else {
-      runMatchParams = currParams;
-      runMatchPass = currPass;
+      if ( currPass == passNumber ) {
+        foundPass = currPass;
+        runMatchParams = currParams;
+        break;
+      }
+      else if ( currPass > lastMatchPass ) {
+        lastMatchPass = currPass;
+        lastMatchParams = currParams;
+      }
     }
-    foundPass = currPass;
-    if ( foundPass == fPassNumber ) break;
-  }
+  } // loop on keys
   
   if ( ! oadbContainer ) {
     file->Close();
-    AliFatal(Form("Requested pass%i not found!", fPassNumber));
+    AliFatal(Form("Requested pass%i not found!", passNumber));
     return kFALSE; // Not needed, but Coverity could complain
   }
   
   if ( runMatchParams ) fOADBParam = *runMatchParams;
   else if ( fAllowDefaultParams ) {
-    AliWarning(Form("Requested run %i not found in pass%i: using default", runNumber, fPassNumber));
-    fOADBParam = *defaultParams;
+    AliOADBMuonTrackCutsParam* currParams = ( lastMatchParams ) ? lastMatchParams : lastDefaultParams;
+    foundPass = ( lastMatchParams ) ? lastMatchPass : lastDefaultPass;
+    fOADBParam = *currParams;
+    AliWarning(Form("Requested run %i not found in pass%i: using %s (pass%i)", runNumber, passNumber, fOADBParam.GetName(),foundPass));
   }
-  else AliFatal(Form("Requested run %i not found in pass%i!", runNumber, foundPass));
+  else AliFatal(Form("Requested run %i not found in pass%i!", runNumber, passNumber));
   
   file->Close();
 
-  AliInfo(Form("Requested run %i pass %i. Param. set: %s (pass%i)", runNumber, fPassNumber, fOADBParam.GetName(), foundPass));
+  AliInfo(Form("Requested run %i pass%i. Param. set: %s (pass%i)", runNumber, passNumber, fOADBParam.GetName(), foundPass));
   
   return kTRUE;
 }
index 9e15c19..4ed59d2 100644 (file)
@@ -38,7 +38,7 @@ class AliMuonTrackCuts : public AliAnalysisCuts
   void SetDefaultFilterMask();
   void SetPassNumber ( Int_t passNumber ) { fPassNumber = passNumber; }
   void SetIsMC ( Bool_t isMC = kTRUE ) { fIsMC = isMC; }
-  void SetAllowDefaultParams ( Bool_t allowDefaultParams = kTRUE ) { fAllowDefaultParams = allowDefaultParams; }
+  void SetAllowDefaultParams ( Bool_t allowDefaultParams = kTRUE, Int_t passNumber = -1 ) { fAllowDefaultParams = allowDefaultParams; fPassNumber = passNumber; }
   void SetCustomParamFromRun ( Int_t runNumber = -1, Int_t passNumber = -1 );
   
   /// Get pass number
@@ -65,7 +65,7 @@ class AliMuonTrackCuts : public AliAnalysisCuts
 
  private:
   
-  Bool_t ReadParamFromOADB ( Int_t runNumber );
+  Bool_t ReadParamFromOADB ( Int_t runNumber, Int_t passNumber );
 
   Bool_t fIsMC;               ///< Monte Carlo analysis
   Bool_t fUseCustomParam;     ///< Use custom parameters (do not search in OADB)
index 7fe38ed..57911ff 100644 (file)
@@ -47,6 +47,7 @@ AliAnalysisTaskTrigChEff* AddTaskMTRchamberEfficiency(Bool_t useGhosts = kFALSE,
     taskTrigChEff->SetTrigClassPatterns(trigClassPatterns);
   }
   taskTrigChEff->GetMuonEventCuts()->SetFilterMask(AliMuonEventCuts::kSelectedTrig);
+  taskTrigChEff->GetMuonTrackCuts()->SetAllowDefaultParams();
   mgr->AddTask(taskTrigChEff);
 
   // Create container