ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

//-----------------------------------------------------------------------------
// Class AliMUONVGeometryBuilder
// -----------------------------
// Abstract base class for geometry construction per geometry module(s).
// Author: Ivana Hrivnacova, IPN Orsay
// 23/01/2004
//-----------------------------------------------------------------------------

#include "AliMUONVGeometryBuilder.h"
#include "AliMUONGeometryModule.h"
#include "AliMUONGeometryDetElement.h"
#include "AliMUONGeometryEnvelopeStore.h"
#include "AliMUONGeometryEnvelope.h"
#include "AliMUONGeometryConstituent.h"
#include "AliMUONGeometryBuilder.h"
#include "AliMUONStringIntMap.h"

#include "AliMpDEManager.h"
#include "AliMpExMap.h"

#include "AliLog.h"

#include <Riostream.h>
#include <TObjArray.h>
#include <TSystem.h>
#include <TGeoMatrix.h>
#include <TVirtualMC.h>

/// \cond CLASSIMP
ClassImp(AliMUONVGeometryBuilder)
/// \endcond

//______________________________________________________________________________
AliMUONVGeometryBuilder::AliMUONVGeometryBuilder(
                            Int_t firstModuleId, 
                            Int_t nofModules)
 : TObject(),
   fGeometryModules(0),
   fReferenceFrame()
 {
/// Standard constructor

  // Create the module geometries array
  fGeometryModules = new TObjArray();
  fGeometryModules->SetOwner(kFALSE);
     
  for (Int_t i=0; i<nofModules; i++ )
    fGeometryModules->Add(new AliMUONGeometryModule(firstModuleId++));
}

//______________________________________________________________________________
AliMUONVGeometryBuilder::AliMUONVGeometryBuilder()
 : TObject(),
   fGeometryModules(0),
   fReferenceFrame()
{
/// Default constructor
}

//______________________________________________________________________________
AliMUONVGeometryBuilder::~AliMUONVGeometryBuilder() 
{
/// Destructor

  if (fGeometryModules) {
    fGeometryModules->Clear(); // Sets pointers to 0 since it is not the owner
    delete fGeometryModules;
  }
}

//
// private methods
//

//______________________________________________________________________________
TGeoHMatrix 
AliMUONVGeometryBuilder::ConvertTransform(const TGeoHMatrix& transform) const
{
/// Convert transformation into the reference frame

  if ( fReferenceFrame.IsIdentity() )
    return transform;
  else  {
    return AliMUONGeometryBuilder::Multiply( fReferenceFrame,
  				  	     transform,
    					     fReferenceFrame.Inverse() );  
  }			    
}

//______________________________________________________________________________
TGeoHMatrix 
AliMUONVGeometryBuilder::ConvertDETransform(const TGeoHMatrix& transform) const
{
/// Convert DE transformation into the reference frame

  if ( fReferenceFrame.IsIdentity() )
    return transform;
  else  {
    return AliMUONGeometryBuilder::Multiply( fReferenceFrame,
  				  	     transform );  
  }			    
}

//______________________________________________________________________________
TString  AliMUONVGeometryBuilder::ComposePath(const TString& volName,
                                              Int_t copyNo) const
{
/// Compose path from given volName and copyNo

  TString path = "/";
  path += volName;
  path += '_';
  path += copyNo;
  
  return path;
}  

//______________________________________________________________________________
void AliMUONVGeometryBuilder::MapSV(const TString& path0, 
                                    const TString& volName, Int_t detElemId) const
{
/// Update the path with all daughters volumes recursively
/// and map it to the detection element Id if it is a sensitive volume

  // Get module sensitive volumes map
  Int_t moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
  AliMUONStringIntMap* svMap = GetSVMap(moduleId);     

  Int_t nofDaughters = TVirtualMC::GetMC()->NofVolDaughters(volName);
  if (nofDaughters == 0) {

    // Get the name of the last volume in the path
    Ssiz_t npos1 = path0.Last('/')+1; 
    Ssiz_t npos2 = path0.Last('_');
    TString volName0(path0(npos1, npos2-npos1));  
    
    // Check if it is sensitive volume
    AliMUONGeometryModule* geometry = GetGeometry(moduleId);
    if (  geometry->IsSensitiveVolume(volName0) &&
        ! svMap->Get(path0) ) {
      //cout << ".. adding to the map  " 
      //     <<  path0 << "  "  << detElemId << endl;
    
      // Map the sensitive volume to detection element
      svMap->Add(path0, detElemId); 
    }  
    return; 
  }  

  for (Int_t i=0; i<nofDaughters; i++) {
    Int_t copyNo = TVirtualMC::GetMC()->VolDaughterCopyNo(volName, i);
    TString newName =  TVirtualMC::GetMC()->VolDaughterName(volName, i);
            
    TString path = path0;
    path += ComposePath(newName, copyNo);

    MapSV(path, newName, detElemId);
  }
}     

//
// protected methods
//

//______________________________________________________________________________
AliMUONGeometryModule*  
AliMUONVGeometryBuilder::GetGeometry(Int_t moduleId) const
{
/// Return the module geometry specified by moduleId

  for (Int_t i=0; i<fGeometryModules->GetEntriesFast(); i++) {

    AliMUONGeometryModule* geometry 
      = (AliMUONGeometryModule*)fGeometryModules->At(i);

    if ( geometry->GetModuleId() == moduleId) return geometry;
  }   
  
  return 0;
}  

//______________________________________________________________________________
AliMUONGeometryEnvelopeStore*  
AliMUONVGeometryBuilder::GetEnvelopes(Int_t moduleId) const
{
/// Return the envelope store of the module geometry specified by moduleId

  AliMUONGeometryModule* geometry = GetGeometry(moduleId);
  
  if (!geometry) {
    AliFatal(Form("Module geometry %d is not defined", moduleId)); 
    return 0;
  }
  
  return geometry->GetEnvelopeStore();
}  

//______________________________________________________________________________
AliMUONStringIntMap*  
AliMUONVGeometryBuilder::GetSVMap(Int_t moduleId) const
{
/// Return the transformation store of the module geometry specified by moduleId

  AliMUONGeometryModule* geometry = GetGeometry(moduleId);
  
  if (!geometry) {
    AliFatal(Form("Geometry %d is not defined", moduleId)); 
    return 0;
  }
  
  return geometry->GetSVMap();
}  

//______________________________________________________________________________
Int_t                          
AliMUONVGeometryBuilder::GetModuleId(const TString& envName) const
{
/// Return module Id which has the envelope with given name

  for (Int_t i=0; i<fGeometryModules->GetEntriesFast(); i++) {

    AliMUONGeometryModule* geometry 
      = (AliMUONGeometryModule*)fGeometryModules->At(i);
      
    if ( geometry->GetEnvelopeStore()->FindEnvelope(envName) ) 
      return geometry->GetModuleId();
  }   
  
  return -1;
}  


//______________________________________________________________________________
void AliMUONVGeometryBuilder::SetTranslation(Int_t moduleId, 
                                  const TGeoTranslation& translation)
{
/// Set the translation to the geometry module given by moduleId,
/// apply reference frame transformation 

  AliMUONGeometryModule* geometry = GetGeometry(moduleId);
  
  if (!geometry) {
    AliFatal(Form("Geometry %d is not defined", moduleId)); 
    return;
  }
  
  // Apply frame transform
  TGeoHMatrix newTransform = ConvertTransform(translation);

  // Set new transformation
  geometry->SetTransformation(newTransform);
}  


//______________________________________________________________________________
void AliMUONVGeometryBuilder::SetTransformation(Int_t moduleId, 
                                  const TGeoTranslation& translation,
				  const TGeoRotation& rotation)
{
/// Set the transformation to the geometry module given by moduleId,
/// apply reference frame transformation 

  AliMUONGeometryModule* geometry = GetGeometry(moduleId);
  
  if (!geometry) {
    AliFatal(Form("Geometry %d is not defined", moduleId)); 
    return;
  }
  
  TGeoCombiTrans transformation 
    = TGeoCombiTrans(translation, rotation);

  // Apply frame transform
  TGeoHMatrix newTransform = ConvertTransform(transformation);

  // Set new transformation
  geometry->SetTransformation(newTransform);
}  

//______________________________________________________________________________
void AliMUONVGeometryBuilder::SetVolume(Int_t moduleId, 
                                 const TString& volumeName, 
				 Bool_t isVirtual)
{
/// Set volume name, virtuality

  TString path = GetGeometry(moduleId)->GetVolumePath();
  // cout << "in AliMUONVGeometryBuilder::SetVolume " << path.Data() << endl;
  
  if ( path == "" ) path = "/ALIC_1";
  path += ComposePath(volumeName, 1);

  GetGeometry(moduleId)->SetVolumePath(path);
  GetGeometry(moduleId)->SetIsVirtual(isVirtual);
  // cout << "... set " << path.Data() << endl;
}  				 

//______________________________________________________________________________
void AliMUONVGeometryBuilder::SetMotherVolume(Int_t moduleId, 
                                 const TString& volumeName)
{
/// Set mother volume name

  TString motherVolumeName = ComposePath(volumeName, 1);

  TString path = GetGeometry(moduleId)->GetVolumePath();
  if ( path == "" ) path = "/ALIC_1";
  path.Insert(7, motherVolumeName);  
  
  GetGeometry(moduleId)->SetVolumePath(path);
}  				 

//
// public functions
//

//______________________________________________________________________________
void  AliMUONVGeometryBuilder::SetReferenceFrame(
                                  const TGeoCombiTrans& referenceFrame)
{ 
/// Set reference frame to builder and to all associated geometry 
/// modules

  fReferenceFrame = referenceFrame; 

  for (Int_t i=0; i<fGeometryModules->GetEntriesFast(); i++) {
    AliMUONGeometryModule* geometry 
      = (AliMUONGeometryModule*)fGeometryModules->At(i);
    AliMUONGeometryEnvelopeStore* envelopeStore 
      = geometry->GetEnvelopeStore();
      
    envelopeStore->SetReferenceFrame(referenceFrame);
  }          
}

//______________________________________________________________________________
void  AliMUONVGeometryBuilder::UpdateDetElements(Bool_t create) const
{
/// Create or update detection elements:
/// - if parameter create is true: detection elements are
/// created and their global and local transformations are filled from geometry.
/// - otherwise: only the volume path is passed from geometry
/// to detection elements

  for (Int_t i=0; i<fGeometryModules->GetEntriesFast(); i++) {
    AliMUONGeometryModule* geometry 
      = (AliMUONGeometryModule*)fGeometryModules->At(i);
      
    const TObjArray* envelopes 
      = geometry->GetEnvelopeStore()->GetEnvelopes();    
    
    AliMpExMap* detElements 
      = geometry->GetTransformer()->GetDetElementStore(); 
      
    for (Int_t j=0; j<envelopes->GetEntriesFast(); j++) {
      AliMUONGeometryEnvelope* envelope
        = (AliMUONGeometryEnvelope*)envelopes->At(j);

      // skip envelope not corresponding to detection element
      if ( envelope->GetUniqueID() == 0) continue;
       
      // Get envelope data 
      Int_t detElemId = envelope->GetUniqueID();	

      // Compose full volume path
      TString volPath = geometry->GetVolumePath();
      volPath += ComposePath(envelope->GetName(), envelope->GetCopyNo());

      if ( create ) {
        // Create detection element 
        AliMUONGeometryDetElement* detElement
          = new AliMUONGeometryDetElement(detElemId, volPath);
        detElements->Add(detElemId, detElement);
      
        // Compose  local transformation
        const TGeoCombiTrans* transform = envelope->GetTransformation(); 
        // Apply frame transform
        TGeoHMatrix localTransform = ConvertDETransform(*transform);
        detElement->SetLocalTransformation(localTransform);

        // Compose global transformation
        TGeoHMatrix globalTransform 
	  = AliMUONGeometryBuilder::Multiply( 
	            (*geometry->GetTransformer()->GetTransformation()),
	             localTransform );
		    ;
        // Set the global transformation to detection element
        detElement->SetGlobalTransformation(globalTransform);
      }
      else {
        // Get existing det elements
        AliMUONGeometryDetElement* detElement
          = (AliMUONGeometryDetElement*)detElements->GetValue(detElemId);
          
        // Set volume path  
        detElement->SetVolumePath(volPath); 
      }
    }    
  }
}

//_____ _________________________________________________________________________
void  AliMUONVGeometryBuilder::RebuildSVMaps(Bool_t withEnvelopes) const
{
/// Clear the SV maps in memory and fill them from defined geometry.

  for (Int_t i=0; i<fGeometryModules->GetEntriesFast(); i++) {
    AliMUONGeometryModule* geometry 
      = (AliMUONGeometryModule*)fGeometryModules->At(i);
    
    // Clear the map   
    geometry->GetSVMap()->Clear();
     
    // Fill the map from geometry
    const TObjArray* envelopes 
      = geometry->GetEnvelopeStore()->GetEnvelopes();    

    for (Int_t j=0; j<envelopes->GetEntriesFast(); j++) {
      AliMUONGeometryEnvelope* envelope
        = (AliMUONGeometryEnvelope*)envelopes->At(j);

      // skip envelope not corresponding to detection element
      if ( envelope->GetUniqueID() == 0 ) continue;
      
      // Get volume path of detection element
      AliMUONGeometryDetElement* detElement
        = geometry->GetTransformer()->GetDetElement(envelope->GetUniqueID());
      std::string path0 = detElement->GetVolumePath().Data();	
	
      if ( ! withEnvelopes && geometry->IsVirtual() ) {
         std::string vName = geometry->GetTransformer()->GetVolumeName().Data();
	 std::string vPath = ComposePath(vName, 1).Data();
         std::string::size_type vPathPos = path0.find(vPath);
         if ( vPathPos != std::string::npos )
           path0.erase(vPathPos, vPath.size());
      }  
       
      if ( ! withEnvelopes && envelope->IsVirtual()) {
         std::string eName = envelope->GetName();
	 std::string ePath = ComposePath(eName, envelope->GetCopyNo()).Data();
         std::string::size_type ePathPos = path0.find(ePath);
         if ( ePathPos != std::string::npos )
           path0.erase(ePathPos, ePath.size());
      }

      if ( ! envelope->IsVirtual() )
        MapSV(path0, envelope->GetName(), envelope->GetUniqueID());
      else { 	
        for  (Int_t k=0; k<envelope->GetConstituents()->GetEntriesFast(); k++) {
          AliMUONGeometryConstituent* constituent
            = (AliMUONGeometryConstituent*)envelope->GetConstituents()->At(k);
         TString path = path0;
	 path += ComposePath(constituent->GetName(), constituent->GetCopyNo());
	 MapSV(path, constituent->GetName(), envelope->GetUniqueID());
        }
      }
    }  
  } 	             
}

 AliMUONVGeometryBuilder.cxx:1
 AliMUONVGeometryBuilder.cxx:2
 AliMUONVGeometryBuilder.cxx:3
 AliMUONVGeometryBuilder.cxx:4
 AliMUONVGeometryBuilder.cxx:5
 AliMUONVGeometryBuilder.cxx:6
 AliMUONVGeometryBuilder.cxx:7
 AliMUONVGeometryBuilder.cxx:8
 AliMUONVGeometryBuilder.cxx:9
 AliMUONVGeometryBuilder.cxx:10
 AliMUONVGeometryBuilder.cxx:11
 AliMUONVGeometryBuilder.cxx:12
 AliMUONVGeometryBuilder.cxx:13
 AliMUONVGeometryBuilder.cxx:14
 AliMUONVGeometryBuilder.cxx:15
 AliMUONVGeometryBuilder.cxx:16
 AliMUONVGeometryBuilder.cxx:17
 AliMUONVGeometryBuilder.cxx:18
 AliMUONVGeometryBuilder.cxx:19
 AliMUONVGeometryBuilder.cxx:20
 AliMUONVGeometryBuilder.cxx:21
 AliMUONVGeometryBuilder.cxx:22
 AliMUONVGeometryBuilder.cxx:23
 AliMUONVGeometryBuilder.cxx:24
 AliMUONVGeometryBuilder.cxx:25
 AliMUONVGeometryBuilder.cxx:26
 AliMUONVGeometryBuilder.cxx:27
 AliMUONVGeometryBuilder.cxx:28
 AliMUONVGeometryBuilder.cxx:29
 AliMUONVGeometryBuilder.cxx:30
 AliMUONVGeometryBuilder.cxx:31
 AliMUONVGeometryBuilder.cxx:32
 AliMUONVGeometryBuilder.cxx:33
 AliMUONVGeometryBuilder.cxx:34
 AliMUONVGeometryBuilder.cxx:35
 AliMUONVGeometryBuilder.cxx:36
 AliMUONVGeometryBuilder.cxx:37
 AliMUONVGeometryBuilder.cxx:38
 AliMUONVGeometryBuilder.cxx:39
 AliMUONVGeometryBuilder.cxx:40
 AliMUONVGeometryBuilder.cxx:41
 AliMUONVGeometryBuilder.cxx:42
 AliMUONVGeometryBuilder.cxx:43
 AliMUONVGeometryBuilder.cxx:44
 AliMUONVGeometryBuilder.cxx:45
 AliMUONVGeometryBuilder.cxx:46
 AliMUONVGeometryBuilder.cxx:47
 AliMUONVGeometryBuilder.cxx:48
 AliMUONVGeometryBuilder.cxx:49
 AliMUONVGeometryBuilder.cxx:50
 AliMUONVGeometryBuilder.cxx:51
 AliMUONVGeometryBuilder.cxx:52
 AliMUONVGeometryBuilder.cxx:53
 AliMUONVGeometryBuilder.cxx:54
 AliMUONVGeometryBuilder.cxx:55
 AliMUONVGeometryBuilder.cxx:56
 AliMUONVGeometryBuilder.cxx:57
 AliMUONVGeometryBuilder.cxx:58
 AliMUONVGeometryBuilder.cxx:59
 AliMUONVGeometryBuilder.cxx:60
 AliMUONVGeometryBuilder.cxx:61
 AliMUONVGeometryBuilder.cxx:62
 AliMUONVGeometryBuilder.cxx:63
 AliMUONVGeometryBuilder.cxx:64
 AliMUONVGeometryBuilder.cxx:65
 AliMUONVGeometryBuilder.cxx:66
 AliMUONVGeometryBuilder.cxx:67
 AliMUONVGeometryBuilder.cxx:68
 AliMUONVGeometryBuilder.cxx:69
 AliMUONVGeometryBuilder.cxx:70
 AliMUONVGeometryBuilder.cxx:71
 AliMUONVGeometryBuilder.cxx:72
 AliMUONVGeometryBuilder.cxx:73
 AliMUONVGeometryBuilder.cxx:74
 AliMUONVGeometryBuilder.cxx:75
 AliMUONVGeometryBuilder.cxx:76
 AliMUONVGeometryBuilder.cxx:77
 AliMUONVGeometryBuilder.cxx:78
 AliMUONVGeometryBuilder.cxx:79
 AliMUONVGeometryBuilder.cxx:80
 AliMUONVGeometryBuilder.cxx:81
 AliMUONVGeometryBuilder.cxx:82
 AliMUONVGeometryBuilder.cxx:83
 AliMUONVGeometryBuilder.cxx:84
 AliMUONVGeometryBuilder.cxx:85
 AliMUONVGeometryBuilder.cxx:86
 AliMUONVGeometryBuilder.cxx:87
 AliMUONVGeometryBuilder.cxx:88
 AliMUONVGeometryBuilder.cxx:89
 AliMUONVGeometryBuilder.cxx:90
 AliMUONVGeometryBuilder.cxx:91
 AliMUONVGeometryBuilder.cxx:92
 AliMUONVGeometryBuilder.cxx:93
 AliMUONVGeometryBuilder.cxx:94
 AliMUONVGeometryBuilder.cxx:95
 AliMUONVGeometryBuilder.cxx:96
 AliMUONVGeometryBuilder.cxx:97
 AliMUONVGeometryBuilder.cxx:98
 AliMUONVGeometryBuilder.cxx:99
 AliMUONVGeometryBuilder.cxx:100
 AliMUONVGeometryBuilder.cxx:101
 AliMUONVGeometryBuilder.cxx:102
 AliMUONVGeometryBuilder.cxx:103
 AliMUONVGeometryBuilder.cxx:104
 AliMUONVGeometryBuilder.cxx:105
 AliMUONVGeometryBuilder.cxx:106
 AliMUONVGeometryBuilder.cxx:107
 AliMUONVGeometryBuilder.cxx:108
 AliMUONVGeometryBuilder.cxx:109
 AliMUONVGeometryBuilder.cxx:110
 AliMUONVGeometryBuilder.cxx:111
 AliMUONVGeometryBuilder.cxx:112
 AliMUONVGeometryBuilder.cxx:113
 AliMUONVGeometryBuilder.cxx:114
 AliMUONVGeometryBuilder.cxx:115
 AliMUONVGeometryBuilder.cxx:116
 AliMUONVGeometryBuilder.cxx:117
 AliMUONVGeometryBuilder.cxx:118
 AliMUONVGeometryBuilder.cxx:119
 AliMUONVGeometryBuilder.cxx:120
 AliMUONVGeometryBuilder.cxx:121
 AliMUONVGeometryBuilder.cxx:122
 AliMUONVGeometryBuilder.cxx:123
 AliMUONVGeometryBuilder.cxx:124
 AliMUONVGeometryBuilder.cxx:125
 AliMUONVGeometryBuilder.cxx:126
 AliMUONVGeometryBuilder.cxx:127
 AliMUONVGeometryBuilder.cxx:128
 AliMUONVGeometryBuilder.cxx:129
 AliMUONVGeometryBuilder.cxx:130
 AliMUONVGeometryBuilder.cxx:131
 AliMUONVGeometryBuilder.cxx:132
 AliMUONVGeometryBuilder.cxx:133
 AliMUONVGeometryBuilder.cxx:134
 AliMUONVGeometryBuilder.cxx:135
 AliMUONVGeometryBuilder.cxx:136
 AliMUONVGeometryBuilder.cxx:137
 AliMUONVGeometryBuilder.cxx:138
 AliMUONVGeometryBuilder.cxx:139
 AliMUONVGeometryBuilder.cxx:140
 AliMUONVGeometryBuilder.cxx:141
 AliMUONVGeometryBuilder.cxx:142
 AliMUONVGeometryBuilder.cxx:143
 AliMUONVGeometryBuilder.cxx:144
 AliMUONVGeometryBuilder.cxx:145
 AliMUONVGeometryBuilder.cxx:146
 AliMUONVGeometryBuilder.cxx:147
 AliMUONVGeometryBuilder.cxx:148
 AliMUONVGeometryBuilder.cxx:149
 AliMUONVGeometryBuilder.cxx:150
 AliMUONVGeometryBuilder.cxx:151
 AliMUONVGeometryBuilder.cxx:152
 AliMUONVGeometryBuilder.cxx:153
 AliMUONVGeometryBuilder.cxx:154
 AliMUONVGeometryBuilder.cxx:155
 AliMUONVGeometryBuilder.cxx:156
 AliMUONVGeometryBuilder.cxx:157
 AliMUONVGeometryBuilder.cxx:158
 AliMUONVGeometryBuilder.cxx:159
 AliMUONVGeometryBuilder.cxx:160
 AliMUONVGeometryBuilder.cxx:161
 AliMUONVGeometryBuilder.cxx:162
 AliMUONVGeometryBuilder.cxx:163
 AliMUONVGeometryBuilder.cxx:164
 AliMUONVGeometryBuilder.cxx:165
 AliMUONVGeometryBuilder.cxx:166
 AliMUONVGeometryBuilder.cxx:167
 AliMUONVGeometryBuilder.cxx:168
 AliMUONVGeometryBuilder.cxx:169
 AliMUONVGeometryBuilder.cxx:170
 AliMUONVGeometryBuilder.cxx:171
 AliMUONVGeometryBuilder.cxx:172
 AliMUONVGeometryBuilder.cxx:173
 AliMUONVGeometryBuilder.cxx:174
 AliMUONVGeometryBuilder.cxx:175
 AliMUONVGeometryBuilder.cxx:176
 AliMUONVGeometryBuilder.cxx:177
 AliMUONVGeometryBuilder.cxx:178
 AliMUONVGeometryBuilder.cxx:179
 AliMUONVGeometryBuilder.cxx:180
 AliMUONVGeometryBuilder.cxx:181
 AliMUONVGeometryBuilder.cxx:182
 AliMUONVGeometryBuilder.cxx:183
 AliMUONVGeometryBuilder.cxx:184
 AliMUONVGeometryBuilder.cxx:185
 AliMUONVGeometryBuilder.cxx:186
 AliMUONVGeometryBuilder.cxx:187
 AliMUONVGeometryBuilder.cxx:188
 AliMUONVGeometryBuilder.cxx:189
 AliMUONVGeometryBuilder.cxx:190
 AliMUONVGeometryBuilder.cxx:191
 AliMUONVGeometryBuilder.cxx:192
 AliMUONVGeometryBuilder.cxx:193
 AliMUONVGeometryBuilder.cxx:194
 AliMUONVGeometryBuilder.cxx:195
 AliMUONVGeometryBuilder.cxx:196
 AliMUONVGeometryBuilder.cxx:197
 AliMUONVGeometryBuilder.cxx:198
 AliMUONVGeometryBuilder.cxx:199
 AliMUONVGeometryBuilder.cxx:200
 AliMUONVGeometryBuilder.cxx:201
 AliMUONVGeometryBuilder.cxx:202
 AliMUONVGeometryBuilder.cxx:203
 AliMUONVGeometryBuilder.cxx:204
 AliMUONVGeometryBuilder.cxx:205
 AliMUONVGeometryBuilder.cxx:206
 AliMUONVGeometryBuilder.cxx:207
 AliMUONVGeometryBuilder.cxx:208
 AliMUONVGeometryBuilder.cxx:209
 AliMUONVGeometryBuilder.cxx:210
 AliMUONVGeometryBuilder.cxx:211
 AliMUONVGeometryBuilder.cxx:212
 AliMUONVGeometryBuilder.cxx:213
 AliMUONVGeometryBuilder.cxx:214
 AliMUONVGeometryBuilder.cxx:215
 AliMUONVGeometryBuilder.cxx:216
 AliMUONVGeometryBuilder.cxx:217
 AliMUONVGeometryBuilder.cxx:218
 AliMUONVGeometryBuilder.cxx:219
 AliMUONVGeometryBuilder.cxx:220
 AliMUONVGeometryBuilder.cxx:221
 AliMUONVGeometryBuilder.cxx:222
 AliMUONVGeometryBuilder.cxx:223
 AliMUONVGeometryBuilder.cxx:224
 AliMUONVGeometryBuilder.cxx:225
 AliMUONVGeometryBuilder.cxx:226
 AliMUONVGeometryBuilder.cxx:227
 AliMUONVGeometryBuilder.cxx:228
 AliMUONVGeometryBuilder.cxx:229
 AliMUONVGeometryBuilder.cxx:230
 AliMUONVGeometryBuilder.cxx:231
 AliMUONVGeometryBuilder.cxx:232
 AliMUONVGeometryBuilder.cxx:233
 AliMUONVGeometryBuilder.cxx:234
 AliMUONVGeometryBuilder.cxx:235
 AliMUONVGeometryBuilder.cxx:236
 AliMUONVGeometryBuilder.cxx:237
 AliMUONVGeometryBuilder.cxx:238
 AliMUONVGeometryBuilder.cxx:239
 AliMUONVGeometryBuilder.cxx:240
 AliMUONVGeometryBuilder.cxx:241
 AliMUONVGeometryBuilder.cxx:242
 AliMUONVGeometryBuilder.cxx:243
 AliMUONVGeometryBuilder.cxx:244
 AliMUONVGeometryBuilder.cxx:245
 AliMUONVGeometryBuilder.cxx:246
 AliMUONVGeometryBuilder.cxx:247
 AliMUONVGeometryBuilder.cxx:248
 AliMUONVGeometryBuilder.cxx:249
 AliMUONVGeometryBuilder.cxx:250
 AliMUONVGeometryBuilder.cxx:251
 AliMUONVGeometryBuilder.cxx:252
 AliMUONVGeometryBuilder.cxx:253
 AliMUONVGeometryBuilder.cxx:254
 AliMUONVGeometryBuilder.cxx:255
 AliMUONVGeometryBuilder.cxx:256
 AliMUONVGeometryBuilder.cxx:257
 AliMUONVGeometryBuilder.cxx:258
 AliMUONVGeometryBuilder.cxx:259
 AliMUONVGeometryBuilder.cxx:260
 AliMUONVGeometryBuilder.cxx:261
 AliMUONVGeometryBuilder.cxx:262
 AliMUONVGeometryBuilder.cxx:263
 AliMUONVGeometryBuilder.cxx:264
 AliMUONVGeometryBuilder.cxx:265
 AliMUONVGeometryBuilder.cxx:266
 AliMUONVGeometryBuilder.cxx:267
 AliMUONVGeometryBuilder.cxx:268
 AliMUONVGeometryBuilder.cxx:269
 AliMUONVGeometryBuilder.cxx:270
 AliMUONVGeometryBuilder.cxx:271
 AliMUONVGeometryBuilder.cxx:272
 AliMUONVGeometryBuilder.cxx:273
 AliMUONVGeometryBuilder.cxx:274
 AliMUONVGeometryBuilder.cxx:275
 AliMUONVGeometryBuilder.cxx:276
 AliMUONVGeometryBuilder.cxx:277
 AliMUONVGeometryBuilder.cxx:278
 AliMUONVGeometryBuilder.cxx:279
 AliMUONVGeometryBuilder.cxx:280
 AliMUONVGeometryBuilder.cxx:281
 AliMUONVGeometryBuilder.cxx:282
 AliMUONVGeometryBuilder.cxx:283
 AliMUONVGeometryBuilder.cxx:284
 AliMUONVGeometryBuilder.cxx:285
 AliMUONVGeometryBuilder.cxx:286
 AliMUONVGeometryBuilder.cxx:287
 AliMUONVGeometryBuilder.cxx:288
 AliMUONVGeometryBuilder.cxx:289
 AliMUONVGeometryBuilder.cxx:290
 AliMUONVGeometryBuilder.cxx:291
 AliMUONVGeometryBuilder.cxx:292
 AliMUONVGeometryBuilder.cxx:293
 AliMUONVGeometryBuilder.cxx:294
 AliMUONVGeometryBuilder.cxx:295
 AliMUONVGeometryBuilder.cxx:296
 AliMUONVGeometryBuilder.cxx:297
 AliMUONVGeometryBuilder.cxx:298
 AliMUONVGeometryBuilder.cxx:299
 AliMUONVGeometryBuilder.cxx:300
 AliMUONVGeometryBuilder.cxx:301
 AliMUONVGeometryBuilder.cxx:302
 AliMUONVGeometryBuilder.cxx:303
 AliMUONVGeometryBuilder.cxx:304
 AliMUONVGeometryBuilder.cxx:305
 AliMUONVGeometryBuilder.cxx:306
 AliMUONVGeometryBuilder.cxx:307
 AliMUONVGeometryBuilder.cxx:308
 AliMUONVGeometryBuilder.cxx:309
 AliMUONVGeometryBuilder.cxx:310
 AliMUONVGeometryBuilder.cxx:311
 AliMUONVGeometryBuilder.cxx:312
 AliMUONVGeometryBuilder.cxx:313
 AliMUONVGeometryBuilder.cxx:314
 AliMUONVGeometryBuilder.cxx:315
 AliMUONVGeometryBuilder.cxx:316
 AliMUONVGeometryBuilder.cxx:317
 AliMUONVGeometryBuilder.cxx:318
 AliMUONVGeometryBuilder.cxx:319
 AliMUONVGeometryBuilder.cxx:320
 AliMUONVGeometryBuilder.cxx:321
 AliMUONVGeometryBuilder.cxx:322
 AliMUONVGeometryBuilder.cxx:323
 AliMUONVGeometryBuilder.cxx:324
 AliMUONVGeometryBuilder.cxx:325
 AliMUONVGeometryBuilder.cxx:326
 AliMUONVGeometryBuilder.cxx:327
 AliMUONVGeometryBuilder.cxx:328
 AliMUONVGeometryBuilder.cxx:329
 AliMUONVGeometryBuilder.cxx:330
 AliMUONVGeometryBuilder.cxx:331
 AliMUONVGeometryBuilder.cxx:332
 AliMUONVGeometryBuilder.cxx:333
 AliMUONVGeometryBuilder.cxx:334
 AliMUONVGeometryBuilder.cxx:335
 AliMUONVGeometryBuilder.cxx:336
 AliMUONVGeometryBuilder.cxx:337
 AliMUONVGeometryBuilder.cxx:338
 AliMUONVGeometryBuilder.cxx:339
 AliMUONVGeometryBuilder.cxx:340
 AliMUONVGeometryBuilder.cxx:341
 AliMUONVGeometryBuilder.cxx:342
 AliMUONVGeometryBuilder.cxx:343
 AliMUONVGeometryBuilder.cxx:344
 AliMUONVGeometryBuilder.cxx:345
 AliMUONVGeometryBuilder.cxx:346
 AliMUONVGeometryBuilder.cxx:347
 AliMUONVGeometryBuilder.cxx:348
 AliMUONVGeometryBuilder.cxx:349
 AliMUONVGeometryBuilder.cxx:350
 AliMUONVGeometryBuilder.cxx:351
 AliMUONVGeometryBuilder.cxx:352
 AliMUONVGeometryBuilder.cxx:353
 AliMUONVGeometryBuilder.cxx:354
 AliMUONVGeometryBuilder.cxx:355
 AliMUONVGeometryBuilder.cxx:356
 AliMUONVGeometryBuilder.cxx:357
 AliMUONVGeometryBuilder.cxx:358
 AliMUONVGeometryBuilder.cxx:359
 AliMUONVGeometryBuilder.cxx:360
 AliMUONVGeometryBuilder.cxx:361
 AliMUONVGeometryBuilder.cxx:362
 AliMUONVGeometryBuilder.cxx:363
 AliMUONVGeometryBuilder.cxx:364
 AliMUONVGeometryBuilder.cxx:365
 AliMUONVGeometryBuilder.cxx:366
 AliMUONVGeometryBuilder.cxx:367
 AliMUONVGeometryBuilder.cxx:368
 AliMUONVGeometryBuilder.cxx:369
 AliMUONVGeometryBuilder.cxx:370
 AliMUONVGeometryBuilder.cxx:371
 AliMUONVGeometryBuilder.cxx:372
 AliMUONVGeometryBuilder.cxx:373
 AliMUONVGeometryBuilder.cxx:374
 AliMUONVGeometryBuilder.cxx:375
 AliMUONVGeometryBuilder.cxx:376
 AliMUONVGeometryBuilder.cxx:377
 AliMUONVGeometryBuilder.cxx:378
 AliMUONVGeometryBuilder.cxx:379
 AliMUONVGeometryBuilder.cxx:380
 AliMUONVGeometryBuilder.cxx:381
 AliMUONVGeometryBuilder.cxx:382
 AliMUONVGeometryBuilder.cxx:383
 AliMUONVGeometryBuilder.cxx:384
 AliMUONVGeometryBuilder.cxx:385
 AliMUONVGeometryBuilder.cxx:386
 AliMUONVGeometryBuilder.cxx:387
 AliMUONVGeometryBuilder.cxx:388
 AliMUONVGeometryBuilder.cxx:389
 AliMUONVGeometryBuilder.cxx:390
 AliMUONVGeometryBuilder.cxx:391
 AliMUONVGeometryBuilder.cxx:392
 AliMUONVGeometryBuilder.cxx:393
 AliMUONVGeometryBuilder.cxx:394
 AliMUONVGeometryBuilder.cxx:395
 AliMUONVGeometryBuilder.cxx:396
 AliMUONVGeometryBuilder.cxx:397
 AliMUONVGeometryBuilder.cxx:398
 AliMUONVGeometryBuilder.cxx:399
 AliMUONVGeometryBuilder.cxx:400
 AliMUONVGeometryBuilder.cxx:401
 AliMUONVGeometryBuilder.cxx:402
 AliMUONVGeometryBuilder.cxx:403
 AliMUONVGeometryBuilder.cxx:404
 AliMUONVGeometryBuilder.cxx:405
 AliMUONVGeometryBuilder.cxx:406
 AliMUONVGeometryBuilder.cxx:407
 AliMUONVGeometryBuilder.cxx:408
 AliMUONVGeometryBuilder.cxx:409
 AliMUONVGeometryBuilder.cxx:410
 AliMUONVGeometryBuilder.cxx:411
 AliMUONVGeometryBuilder.cxx:412
 AliMUONVGeometryBuilder.cxx:413
 AliMUONVGeometryBuilder.cxx:414
 AliMUONVGeometryBuilder.cxx:415
 AliMUONVGeometryBuilder.cxx:416
 AliMUONVGeometryBuilder.cxx:417
 AliMUONVGeometryBuilder.cxx:418
 AliMUONVGeometryBuilder.cxx:419
 AliMUONVGeometryBuilder.cxx:420
 AliMUONVGeometryBuilder.cxx:421
 AliMUONVGeometryBuilder.cxx:422
 AliMUONVGeometryBuilder.cxx:423
 AliMUONVGeometryBuilder.cxx:424
 AliMUONVGeometryBuilder.cxx:425
 AliMUONVGeometryBuilder.cxx:426
 AliMUONVGeometryBuilder.cxx:427
 AliMUONVGeometryBuilder.cxx:428
 AliMUONVGeometryBuilder.cxx:429
 AliMUONVGeometryBuilder.cxx:430
 AliMUONVGeometryBuilder.cxx:431
 AliMUONVGeometryBuilder.cxx:432
 AliMUONVGeometryBuilder.cxx:433
 AliMUONVGeometryBuilder.cxx:434
 AliMUONVGeometryBuilder.cxx:435
 AliMUONVGeometryBuilder.cxx:436
 AliMUONVGeometryBuilder.cxx:437
 AliMUONVGeometryBuilder.cxx:438
 AliMUONVGeometryBuilder.cxx:439
 AliMUONVGeometryBuilder.cxx:440
 AliMUONVGeometryBuilder.cxx:441
 AliMUONVGeometryBuilder.cxx:442
 AliMUONVGeometryBuilder.cxx:443
 AliMUONVGeometryBuilder.cxx:444
 AliMUONVGeometryBuilder.cxx:445
 AliMUONVGeometryBuilder.cxx:446
 AliMUONVGeometryBuilder.cxx:447
 AliMUONVGeometryBuilder.cxx:448
 AliMUONVGeometryBuilder.cxx:449
 AliMUONVGeometryBuilder.cxx:450
 AliMUONVGeometryBuilder.cxx:451
 AliMUONVGeometryBuilder.cxx:452
 AliMUONVGeometryBuilder.cxx:453
 AliMUONVGeometryBuilder.cxx:454
 AliMUONVGeometryBuilder.cxx:455
 AliMUONVGeometryBuilder.cxx:456
 AliMUONVGeometryBuilder.cxx:457
 AliMUONVGeometryBuilder.cxx:458
 AliMUONVGeometryBuilder.cxx:459
 AliMUONVGeometryBuilder.cxx:460
 AliMUONVGeometryBuilder.cxx:461
 AliMUONVGeometryBuilder.cxx:462
 AliMUONVGeometryBuilder.cxx:463
 AliMUONVGeometryBuilder.cxx:464
 AliMUONVGeometryBuilder.cxx:465
 AliMUONVGeometryBuilder.cxx:466
 AliMUONVGeometryBuilder.cxx:467
 AliMUONVGeometryBuilder.cxx:468
 AliMUONVGeometryBuilder.cxx:469
 AliMUONVGeometryBuilder.cxx:470
 AliMUONVGeometryBuilder.cxx:471
 AliMUONVGeometryBuilder.cxx:472
 AliMUONVGeometryBuilder.cxx:473
 AliMUONVGeometryBuilder.cxx:474
 AliMUONVGeometryBuilder.cxx:475
 AliMUONVGeometryBuilder.cxx:476
 AliMUONVGeometryBuilder.cxx:477