]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Add the possibility to set a specific storage for the alignment and add protections...
authorscompar <scompar@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 17 Feb 2013 20:04:28 +0000 (20:04 +0000)
committerscompar <scompar@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 17 Feb 2013 20:04:28 +0000 (20:04 +0000)
PWG/muondep/AliAnalysisTaskMuonRefit.cxx
PWG/muondep/AliAnalysisTaskMuonRefit.h

index 822fe161334fddd7ca0d7a689897f660cbae16fd..b3364c0d9785f5d64d3b9a81a85f334f21a38ec7 100644 (file)
@@ -64,6 +64,7 @@
 #include "AliMpVSegmentation.h"
 #include "AliMpConstants.h"
 #include "AliMpDDLStore.h"
+#include "AliMpManuStore.h"
 #include "AliMpPad.h"
 #include "AliMpDetElement.h"
 #include "AliMpCathodType.h"
@@ -354,18 +355,36 @@ void AliAnalysisTaskMuonRefit::NotifyRun()
 {
   /// load necessary data from OCDB and create the refitter
   
-  AliCDBManager* cdbm = AliCDBManager::Instance();
-  cdbm->SetDefaultStorage(fDefaultStorage.Data());
-  cdbm->SetRun(fCurrentRunNumber);
+  // do it only once
+  if (fRefitter) return;
   
-  if (!fField.IsNull()) {
-    if (!SetMagField()) return;
-  } else if (!AliMUONCDB::LoadField()) return;
+  // set OCDB location
+  AliCDBManager* cdbm = AliCDBManager::Instance();
+  if (cdbm->IsDefaultStorageSet()) printf("MCLabelAddition: CDB default storage already set!\n");
+  else {
+    cdbm->SetDefaultStorage(fDefaultStorage.Data());
+    if (fOldAlignStorage != "none" && !fOldAlignStorage.IsNull())
+      cdbm->SetSpecificStorage("MUON/Align/Data",fOldAlignStorage.Data());
+  }
+  if (cdbm->GetRun() > -1) printf("MCLabelAddition: run number already set!\n");
+  else cdbm->SetRun(fCurrentRunNumber);
+  
+  // load magnetic field or create it for track extrapolation
+  if (!TGeoGlobalMagField::Instance()->GetField()) {
+    if (!fField.IsNull()) {
+      if (!SetMagField()) return;
+    } else if (!AliMUONCDB::LoadField()) return;
+  }
   
-  if (!AliMUONCDB::LoadMapping()) return;
+  // load mapping
+  if (!AliMpDDLStore::Instance(kFALSE) || !AliMpManuStore::Instance(kFALSE)) {
+    if (!AliMUONCDB::LoadMapping()) return;
+  }
   
+  // load recoParam for refitting
   AliMUONRecoParam* recoParam = AliMUONCDB::LoadRecoParam();
   if (!recoParam) return;
+  if (!AliMUONESDInterface::GetTracker()) AliMUONESDInterface::ResetTracker(recoParam);
   
   if (fImproveTracks) {
     if (fSigmaCut > 0.) recoParam->ImproveTracks(kTRUE, fSigmaCut);
@@ -380,58 +399,49 @@ void AliAnalysisTaskMuonRefit::NotifyRun()
     if (fClusterResB[i] < 0.) fClusterResB[i] = recoParam->GetDefaultBendingReso(i);
   }
   
-  if (fReAlign) {
-    
-    // recover default storage full name (raw:// cannot be used to set specific storage)
-    TString defaultStorage(cdbm->GetDefaultStorage()->GetType());
-    if (defaultStorage == "alien") defaultStorage += Form("://folder=%s", cdbm->GetDefaultStorage()->GetBaseFolder().Data());
-    else defaultStorage += Form("://%s", cdbm->GetDefaultStorage()->GetBaseFolder().Data());
-    
-    // reset existing geometry/alignment if any
-    if (cdbm->GetEntryCache()->Contains("GRP/Geometry/Data")) cdbm->UnloadFromCache("GRP/Geometry/Data");
-    if (cdbm->GetEntryCache()->Contains("MUON/Align/Data")) cdbm->UnloadFromCache("MUON/Align/Data");
-    if (AliGeomManager::GetGeometry()) AliGeomManager::GetGeometry()->UnlockGeometry();
+  // load geometry for track extrapolation to vertex and mono-cathod cluster finding
+  if (!AliGeomManager::GetGeometry()) {
     
-    // get original geometry transformer
-    AliGeomManager::LoadGeometry();
-    if (!AliGeomManager::GetGeometry()) return;
-    if (fOldAlignStorage != "none") {
-      if (!fOldAlignStorage.IsNull()) cdbm->SetSpecificStorage("MUON/Align/Data",fOldAlignStorage.Data());
-      else cdbm->SetSpecificStorage("MUON/Align/Data",defaultStorage.Data());
-      AliGeomManager::ApplyAlignObjsFromCDB("MUON");
+    if (fReAlign) {
+      
+      // get original geometry transformer
+      AliGeomManager::LoadGeometry();
+      if (!AliGeomManager::GetGeometry()) return;
+      if (fOldAlignStorage != "none" && !AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return;
+      fOldGeoTransformer = new AliMUONGeometryTransformer();
+      fOldGeoTransformer->LoadGeometryData();
+      
+      // load the new geometry
+      if (cdbm->GetEntryCache()->Contains("GRP/Geometry/Data")) cdbm->UnloadFromCache("GRP/Geometry/Data");
+      AliGeomManager::GetGeometry()->UnlockGeometry();
+      AliGeomManager::LoadGeometry();
+      if (!AliGeomManager::GetGeometry()) return;
+      if (cdbm->GetEntryCache()->Contains("MUON/Align/Data")) cdbm->UnloadFromCache("MUON/Align/Data");
+      if (!fNewAlignStorage.IsNull()) cdbm->SetSpecificStorage("MUON/Align/Data",fNewAlignStorage.Data());
+      else {
+       // recover default storage full name (raw:// cannot be used to set specific storage)
+       TString defaultStorage(cdbm->GetDefaultStorage()->GetType());
+       if (defaultStorage == "alien") defaultStorage += Form("://folder=%s", cdbm->GetDefaultStorage()->GetBaseFolder().Data());
+       else defaultStorage += Form("://%s", cdbm->GetDefaultStorage()->GetBaseFolder().Data());
+       cdbm->SetSpecificStorage("MUON/Align/Data",defaultStorage.Data());
+      }
+      if (!AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return;
+      
+    } else {
+      
+      AliGeomManager::LoadGeometry();
+      if (!AliGeomManager::GetGeometry()) return;
+      if (!AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return;
+      
     }
-    fOldGeoTransformer = new AliMUONGeometryTransformer();
-    fOldGeoTransformer->LoadGeometryData();
     
-    // get new geometry transformer
-    cdbm->UnloadFromCache("GRP/Geometry/Data");
-    if (fOldAlignStorage != "none") cdbm->UnloadFromCache("MUON/Align/Data");
-    AliGeomManager::GetGeometry()->UnlockGeometry();
-    AliGeomManager::LoadGeometry();
-    if (!AliGeomManager::GetGeometry()) return;
-    if (!fNewAlignStorage.IsNull()) cdbm->SetSpecificStorage("MUON/Align/Data",fNewAlignStorage.Data());
-    else cdbm->SetSpecificStorage("MUON/Align/Data",defaultStorage.Data());
-    AliGeomManager::ApplyAlignObjsFromCDB("MUON");
-    fNewGeoTransformer = new AliMUONGeometryTransformer();
-    fNewGeoTransformer->LoadGeometryData();
-    
-  } else {
-    
-    // load geometry for track extrapolation to vertex
-    if (cdbm->GetEntryCache()->Contains("GRP/Geometry/Data")) cdbm->UnloadFromCache("GRP/Geometry/Data");
-    if (cdbm->GetEntryCache()->Contains("MUON/Align/Data")) cdbm->UnloadFromCache("MUON/Align/Data");
-    if (AliGeomManager::GetGeometry()) AliGeomManager::GetGeometry()->UnlockGeometry();
-    AliGeomManager::LoadGeometry();
-    if (!AliGeomManager::GetGeometry()) return;
-    AliGeomManager::ApplyAlignObjsFromCDB("MUON");
-    fNewGeoTransformer = new AliMUONGeometryTransformer();
-    fNewGeoTransformer->LoadGeometryData();
-    
-  }
+  } else fReAlign = kFALSE; // disable the realignment if the geometry was already loaded
+  
+  fNewGeoTransformer = new AliMUONGeometryTransformer();
+  fNewGeoTransformer->LoadGeometryData();
   
   fTriggerCircuit = new AliMUONTriggerCircuit(fNewGeoTransformer);
   
-  AliMUONESDInterface::ResetTracker(recoParam);
   fESDInterface = new AliMUONESDInterface();
   
   fRefitter = new AliMUONRefitter(recoParam);
index efb78d261d7c9a9fc17b12cdab38d818389f7184..7bd57b671968af2f528bf6488ecbd015b53c4602 100644 (file)
@@ -42,6 +42,9 @@ public:
   /// Set the sigma cut for tracker/trigger track matching (by default use the one set in the recoParam)
   void SetSigmaCutForTrigger(Double_t val) {fSigmaCutForTrigger = val;}
   
+  /// Set the OCDB path to the alignment file used in the reco (if not set use default storage)
+  void SetAlignStorage(const char* ocdbPath) { fOldAlignStorage = ocdbPath; }
+  
   // set the OCDB path to the alignment files to be used to realign the clusters before refitting
   void ReAlign(const char* oldAlignStorage = 0x0, const char* newAlignStorage = "");