]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONMCDataInterface.cxx
minors
[u/mrichter/AliRoot.git] / MUON / AliMUONMCDataInterface.cxx
index c5ccda8be7db10a9514d88a06ec4dde754564057..2a42ec8a3e969fcd3e2e7baf0de91ec6ea2ecf8a 100644 (file)
 #include "AliMpIntPair.h"
 #include "AliMpDEManager.h"
 #include "AliMpConstants.h"
-#include "AliMpSegmentation.h"
+#include "AliMpCDB.h"
 
 #include "AliLog.h"
 #include "AliRunLoader.h"
+#include "AliHeader.h"
 #include "AliStack.h"
+#include "AliCDBManager.h"
 
 #include <Riostream.h>
 #include <TClonesArray.h>
@@ -81,6 +83,11 @@ fIterator(0x0)
   ++fgInstanceCounter;
   
   Open(filename);
+
+  // Load mapping
+  if ( ! AliMpCDB::LoadMpSegmentation() ) {
+    AliFatal("Could not access mapping from OCDB !");
+  }
 }
 
 //_____________________________________________________________________________
@@ -103,14 +110,17 @@ AliMUONMCDataInterface::HitStore(Int_t event, Int_t track)
   /// Returned pointer should not be deleted
   
   if (not IsValid()) return 0x0;
-  if (event == fCurrentEvent
-      and fDataX == track  // using fDataX as track number.
-      and fHitStore != 0x0
-     )
+
+  if (event == fCurrentEvent)
+  {
+    if (track == fDataX and fHitStore != 0x0)  // using fDataX as track number.
       return fHitStore;
-  
-  ResetStores();
-  if (not LoadEvent(event)) return 0x0;
+  }
+  else
+  {
+    ResetStores();
+    if ( not LoadEvent(event) ) return 0x0;
+  }
   
   fLoader->LoadHits();
   
@@ -149,10 +159,17 @@ AliMUONMCDataInterface::SDigitStore(Int_t event)
   /// Returned pointer should not be deleted
   
   if (not IsValid()) return 0x0;
-  if (event == fCurrentEvent and fSDigitStore != 0x0) return fSDigitStore;
   
-  ResetStores();
-  if (not LoadEvent(event)) return 0x0;
+  if (event == fCurrentEvent)
+  {
+    if (fSDigitStore != 0x0)
+      return fSDigitStore;
+  }
+  else
+  {
+    ResetStores();
+    if ( not LoadEvent(event) ) return 0x0;
+  }
   
   fLoader->LoadSDigits();
   
@@ -184,10 +201,17 @@ AliMUONMCDataInterface::DigitStore(Int_t event)
   /// Returned pointer should not be deleted
   
   if (not IsValid()) return 0x0;
-  if (event == fCurrentEvent and fDigitStore != 0x0) return fDigitStore;
   
-  ResetStores();
-  if (not LoadEvent(event)) return 0x0;
+  if (event == fCurrentEvent)
+  {
+    if (fDigitStore != 0x0)
+      return fDigitStore;
+  }
+  else
+  {
+    ResetStores();
+    if ( not LoadEvent(event) ) return 0x0;
+  }
   
   fLoader->LoadDigits();
   
@@ -239,16 +263,18 @@ AliMUONMCDataInterface::TrackRefs(Int_t event, Int_t track)
   /// Returned pointer should not be deleted
   
   if ( not IsValid() ) return 0x0;
-
-  if (event != fCurrentEvent)
+  
+  if (event == fCurrentEvent)
+  {
+    if (track == fDataX and fTrackRefs != 0x0)  // using fDataX as track number.
+      return fTrackRefs;
+  }
+  else
   {
     ResetStores();
     if ( not LoadEvent(event) ) return 0x0;
   }
   
-  if (track == fDataX)  // using fDataX as track number.
-    return fTrackRefs;
-  
   fLoader->GetRunLoader()->LoadTrackRefs();
   
   TTree* treeTR = fLoader->GetRunLoader()->TreeTR();
@@ -284,10 +310,17 @@ AliMUONMCDataInterface::TriggerStore(Int_t event)
   /// Returned pointer should not be deleted.
   
   if (not IsValid()) return 0x0;
-  if (event == fCurrentEvent and fTriggerStore != 0x0) return fTriggerStore;
   
-  ResetStores();
-  if (not LoadEvent(event)) return 0x0;
+  if (event == fCurrentEvent)
+  {
+    if (fTriggerStore != 0x0)
+      return fTriggerStore;
+  }
+  else
+  {
+    ResetStores();
+    if ( not LoadEvent(event) ) return 0x0;
+  }
   
   fLoader->LoadDigits();
   
@@ -569,6 +602,19 @@ AliMUONMCDataInterface::Open(const char* filename)
     AliError(Form("Cannot open file %s",filename));    
     fIsValid = kFALSE;
   }
+  
+  // Get run number and set it to CDB manager
+  runLoader->LoadHeader();
+  if ( ! runLoader->GetHeader() ) {
+    AliError("Cannot load header.");    
+    fIsValid = kFALSE;
+  }
+  else {
+    Int_t runNumber = runLoader->GetHeader()->GetRun();
+    AliCDBManager::Instance()->SetRun(runNumber);
+  }  
+  runLoader->UnloadHeader(); 
+
   fLoader = runLoader->GetDetectorLoader("MUON");
   if (fLoader == 0x0)
   {
@@ -895,7 +941,6 @@ TIterator* AliMUONMCDataInterface::GetIterator(IteratorType type, Int_t x, Int_t
       Int_t detElem = x;
       AliMUONVDigitStore* store = SDigitStore(fCurrentEvent);
       if (store == 0x0) return 0x0;
-      AliMpSegmentation::ReadData(kFALSE); // kFALSE so that we do not get warning message.
       fIterator = store->CreateIterator(detElem, detElem, 2);
       if (fIterator == 0x0) return 0x0;
       fCurrentIteratorType = kSDigitIteratorByDetectorElement;
@@ -924,7 +969,6 @@ TIterator* AliMUONMCDataInterface::GetIterator(IteratorType type, Int_t x, Int_t
       
       AliMUONVDigitStore* store = SDigitStore(fCurrentEvent);
       if (store == 0x0) return 0x0;
-      AliMpSegmentation::ReadData(kFALSE); // kFALSE so that we do not get warning message.
       AliMpIntPair pair = AliMpDEManager::GetDetElemIdRange(chamber);
       fIterator = store->CreateIterator(pair.GetFirst(), pair.GetSecond(), cathode);
       if (fIterator == 0x0) return 0x0;
@@ -939,7 +983,6 @@ TIterator* AliMUONMCDataInterface::GetIterator(IteratorType type, Int_t x, Int_t
       Int_t detElem = x;
       AliMUONVDigitStore* store = DigitStore(fCurrentEvent);
       if (store == 0x0) return 0x0;
-      AliMpSegmentation::ReadData(kFALSE); // kFALSE so that we do not get warning message.
       fIterator = store->CreateIterator(detElem, detElem, 2);
       if (fIterator == 0x0) return 0x0;
       fCurrentIteratorType = kDigitIteratorByDetectorElement;
@@ -968,7 +1011,6 @@ TIterator* AliMUONMCDataInterface::GetIterator(IteratorType type, Int_t x, Int_t
       
       AliMUONVDigitStore* store = DigitStore(fCurrentEvent);
       if (store == 0x0) return 0x0;
-      AliMpSegmentation::ReadData(kFALSE); // kFALSE so that we do not get warning message.
       AliMpIntPair pair = AliMpDEManager::GetDetElemIdRange(chamber);
       fIterator = store->CreateIterator(pair.GetFirst(), pair.GetSecond(), cathode);
       if (fIterator == 0x0) return 0x0;