Make the exploded transformations on-demand only
authorlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 2 Nov 2009 09:08:21 +0000 (09:08 +0000)
committerlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 2 Nov 2009 09:08:21 +0000 (09:08 +0000)
MUON/AliMUONContourHandler.cxx
MUON/AliMUONPainterHelper.cxx
MUON/AliMUONPainterHelper.h

index 1b9e0af..02529fa 100644 (file)
@@ -70,9 +70,15 @@ fAllContourArray(0x0)
   /// before you've loaded the mapping in memory (see e.g. AliMpCDB::LoadDDLStore)
   ///
   
-  fTransformations = GenerateTransformations(explodedView);
+  if ( explodedView ) 
+  {
+    fTransformations = GenerateTransformations(explodedView);
+  }
+  
   AliMUONManuContourMaker manuMaker(fTransformations);
+  
   TObjArray* manus = manuMaker.GenerateManuContours(kTRUE);
+  
   if (manus)
   {
     manus->SetOwner(kFALSE);
@@ -85,6 +91,7 @@ fAllContourArray(0x0)
 AliMUONContourHandler::~AliMUONContourHandler()
 {
   /// Dtor
+  delete fTransformations;
   delete fAllContourMap;
   delete fAllContourArray;
 }
@@ -122,6 +129,13 @@ AliMUONContourHandler::CreateContourList(const TObjArray& manuContours)
   
   AliCodeTimerAuto("",0);
   
+  Int_t start(0);
+  
+  if ( !fTransformations )
+  {
+    start = 2; // skip chamber and station contours, as we seem to be in 3D
+  }
+    
   TIter next(&manuContours);
   AliMUONContour* contour;
   TObjArray* mapArray = new TObjArray;
@@ -132,7 +146,7 @@ AliMUONContourHandler::CreateContourList(const TObjArray& manuContours)
     
     TString key(contour->GetName());
     TObjArray* s = key.Tokenize("/");
-    for ( Int_t i = 0; i < s->GetLast(); ++i ) 
+    for ( Int_t i = start; i < s->GetLast(); ++i ) 
     {
       TMap* m = static_cast<TMap*>(mapArray->At(i));
       if (!m)
@@ -184,9 +198,6 @@ AliMUONContourHandler::GenerateAllContours(const TObjArray& manuContours)
   // Get the list of contours to create
   TObjArray* mapArray = CreateContourList(manuContours);
   
-  // Now loop over the mapArray to actually create the contours
-  TIter next2(mapArray,kIterBackward);
-  
   fAllContourMap = new TMap(20000,1);
   fAllContourMap->SetOwnerKeyValue(kTRUE,kTRUE);
   
@@ -326,7 +337,7 @@ AliMUONContourHandler::GetContour(const char* contourname) const
 
 //_____________________________________________________________________________
 void
-AliMUONContourHandler::Print(Option_t* /*opt*/) const
+AliMUONContourHandler::Print(Option_t* opt) const
 {
   /// printout
   
@@ -337,4 +348,11 @@ AliMUONContourHandler::Print(Option_t* /*opt*/) const
                  fAllContourMap->GetSize(),
                  fAllContourMap->Capacity()) << endl;
   }
+  TString sopt(opt);
+  sopt.ToUpper();
+  
+  if ( sopt.Contains("ALL") || sopt.Contains("FULL") )
+  {
+    fAllContourMap->Print();
+  }
 }
index 5bc1a46..8cc51a8 100644 (file)
@@ -102,9 +102,7 @@ fExploded(0x0)
   if ( ! AliMpCDB::LoadDDLStore() ) 
   {
     AliFatal("Could not access DDL Store from OCDB !");
-  }
-  
-  fExploded = new AliMUONContourHandler(kTRUE);
+  }  
 }
 
 //_____________________________________________________________________________
@@ -118,6 +116,24 @@ AliMUONPainterHelper::~AliMUONPainterHelper()
   fgInstance = 0;
 }
 
+//_____________________________________________________________________________
+AliMUONContourHandler*
+AliMUONPainterHelper::Exploded() const
+{
+  /// Create exploded contour handler
+  if (!fExploded) fExploded = new AliMUONContourHandler(kTRUE);
+  return fExploded;
+}
+
+//_____________________________________________________________________________
+AliMUONContourHandler*
+AliMUONPainterHelper::Real() const
+{
+  /// Create real contour handler
+  if (!fReal) fReal = new AliMUONContourHandler(kFALSE);
+  return fReal;
+}
+
 //_____________________________________________________________________________
 AliMUONContour*
 AliMUONPainterHelper::GetContour(const char* contourName, Bool_t explodedView) const
@@ -125,7 +141,7 @@ AliMUONPainterHelper::GetContour(const char* contourName, Bool_t explodedView) c
   /// Get a contour by name  
   if (explodedView) 
   {
-    return fExploded->GetContour(contourName);
+    return Exploded()->GetContour(contourName);
   }
   else
   {
@@ -319,7 +335,7 @@ AliMUONPainterHelper::Global2Local(Int_t detElemId,
 {
   /// Local to global transformation of coordinates
   
-  TGeoHMatrix* matrix = static_cast<TGeoHMatrix*>(fExploded->GetTransformations()->GetValue(detElemId));
+  TGeoHMatrix* matrix = static_cast<TGeoHMatrix*>(Exploded()->GetTransformations()->GetValue(detElemId));
   Double_t pg[3] = { xg, yg, zg };
   Double_t pl[3] = { 0., 0., 0. };
   matrix->MasterToLocal(pg, pl);
@@ -336,7 +352,7 @@ AliMUONPainterHelper::Local2Global(Int_t detElemId,
 {
   /// Local to (exploded) global transformation of coordinates
   
-  TGeoHMatrix* matrix = static_cast<TGeoHMatrix*>(fExploded->GetTransformations()->GetValue(detElemId));
+  TGeoHMatrix* matrix = static_cast<TGeoHMatrix*>(Exploded()->GetTransformations()->GetValue(detElemId));
   Double_t pl[3] = { xl, yl, zl };
   Double_t pg[3] = { 0., 0., 0. };
   matrix->LocalToMaster(pl, pg);
@@ -413,7 +429,7 @@ AliMUONPainterHelper::RegisterContour(AliMUONContour* contour, Bool_t explodedVi
   AliMUONContourHandler* ch = fReal;
   if ( explodedView ) 
   {
-    ch = fExploded;
+    ch = Exploded();
   }
   if (!ch)
   {
@@ -563,11 +579,14 @@ AliMUONPainterHelper::GetAllContoursAsArray(Bool_t explodedView) const
 {
   /// Get the contours in a specially arranged array (orderer by hierarchy level)
   
-  if ( explodedView ) return fExploded->AllContourArray(); // fExploded should always be created
-  
-  if (!fReal) fReal = new AliMUONContourHandler(kFALSE); // fReal might be first asked here.
-  
-  return fReal->AllContourArray();
+  if ( explodedView ) 
+  {
+    return Exploded()->AllContourArray();
+  }
+  else
+  {
+    return Real()->AllContourArray();
+  }
 }
 
 
index ad1b637..ad7b750 100644 (file)
@@ -132,13 +132,16 @@ private:
   /// Not implemented
   AliMUONPainterHelper& operator=(const AliMUONPainterHelper&);
   
+  AliMUONContourHandler* Exploded() const;
+  AliMUONContourHandler* Real() const;
+  
 private:
   static AliMUONPainterHelper* fgInstance; ///< global instance
   
   TObjArray* fPainterMatrices; ///< default matrices
   AliMUONPainterEnv* fEnv; ///< resources
   mutable AliMUONContourHandler* fReal; ///< contours in real coordinates
-  AliMUONContourHandler* fExploded; ///< contours in exploded coordinates
+  mutable AliMUONContourHandler* fExploded; ///< contours in exploded coordinates
   
   ClassDef(AliMUONPainterHelper,3) // Helper class for painters
 };