source: trunk/source/persistency/ascii/include/G4tgbVolumeMgr.hh @ 1035

Last change on this file since 1035 was 1035, checked in by garnier, 15 years ago

dossiers oublies

File size: 6.2 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26//
27// $Id: G4tgbVolumeMgr.hh,v 1.3 2008/12/18 12:58:28 gunter Exp $
28// GEANT4 tag $Name: geant4-09-02-ref-02 $
29//
30//
31// class G4tgbVolume
32//
33// Class description:
34//
35// Class to manage volumes: G4VSolids, G4LogicalVolumes, G4VPhysicalVolumes.
36// It is a singleton, accesed always through calls to GetInstance().
37
38// History:
39// - Created.                                 P.Arce, CIEMAT (November 2007)
40// -------------------------------------------------------------------------
41
42#ifndef G4tgbVolumeMgr_h
43#define G4tgbVolumeMgr_h
44
45#include "globals.hh"
46
47#include <string>
48#include <vector>
49#include <map>
50
51#include "G4VSolid.hh"
52#include "G4LogicalVolume.hh"
53#include "G4VPhysicalVolume.hh"
54
55class G4tgbVolume;
56class G4tgrVolume;
57class G4tgbDetectorBuilder;
58
59typedef std::map< G4String, G4tgbVolume* > G4mssvol;
60typedef std::multimap< G4String, G4VSolid* > G4mmssol;
61typedef std::multimap< G4String, G4LogicalVolume* > G4mmslv;
62typedef std::multimap< G4String, G4VPhysicalVolume* > G4mmspv;
63typedef std::map< G4LogicalVolume*, G4LogicalVolume* > G4mlvlv;
64typedef std::map< G4VPhysicalVolume*, G4VPhysicalVolume* > G4mpvpv;
65
66//---------------------------------------------------------------------------- 
67class G4tgbVolumeMgr 
68{ 
69  public:  // with description
70
71    G4tgbVolumeMgr();
72   ~G4tgbVolumeMgr();
73
74    static G4tgbVolumeMgr* GetInstance(); 
75      // Get the only instance
76
77    void AddTextFile( const G4String& fname );
78    G4VPhysicalVolume* ReadAndConstructDetector();
79
80    void CopyVolumes();
81      // Build a G4tgbVolume per each G4tgbVolume
82
83    G4tgbVolume* FindVolume( const G4String& volname);
84      // Find a G4tgbVolume by name
85
86    void RegisterMe( const G4tgbVolume* vol );
87      // Register a G4tgbVolume
88    void RegisterMe( const G4VSolid* solid );
89      // Register a G4VSolid
90    void RegisterMe( const G4LogicalVolume* lv );
91      // Register a G4LogicalVolume
92    void RegisterMe( const G4VPhysicalVolume* pv );
93      // Register a G4VPhysicalVolume
94    void RegisterChildParentLVs( const G4LogicalVolume* logvol,
95                                 const G4LogicalVolume* parentLV );
96      // Register a child and its parent LV
97
98    G4VSolid* FindG4Solid( const G4String& name );
99      // Find if solid already exists, comparing the name and all parameters
100      // (could be checked before creating it, but it would be quite
101      // complicated, because it would have to compare the parameters, and
102      // they depend on the type of solid)
103
104    G4LogicalVolume* FindG4LogVol( const G4String& theName,
105                                   const G4bool bExists = 0 );
106      // Find a G4LogicalVolume if it already exists
107
108    G4VPhysicalVolume* FindG4PhysVol( const G4String& theName,
109                                   const G4bool bExists = 0 );
110      // Find a G4VPhysicalVolume if it already exists
111
112    G4VPhysicalVolume* GetTopPhysVol();
113      // Get the top PV in the hierarchy tree: calls topLV, because
114      // physicalvolumes are not placed until geometry is initialized
115
116    G4LogicalVolume* GetTopLogVol();
117      // Get the top LV in the hierarchy tree
118
119    void BuildPhysVolTree();
120
121    // Dumping methods
122
123    void DumpSummary();
124    void DumpG4LogVolTree();
125    void DumpG4LogVolLeaf(const G4LogicalVolume* lv, unsigned int leafDepth);
126    void DumpG4PhysVolTree();
127    void DumpG4PhysVolLeaf(const G4VPhysicalVolume* pv, unsigned int leafDepth);
128    void DumpG4SolidList();
129
130  public:  // without description
131
132    const std::multimap< G4String, G4VSolid* >& GetSolids() const
133      { return theSolids; }
134    void SetDetectorBuilder( G4tgbDetectorBuilder* db )
135      { theDetectorBuilder = db; }
136    G4tgbDetectorBuilder* GetDetectorBuilder() const
137      { return theDetectorBuilder; }
138
139  private:
140
141    static G4tgbVolumeMgr* theInstance;
142
143    G4mssvol theVolumeList;
144      // Map of G4tgbVolume's: G4String is the G4tgbVolume name,
145      // G4tgbVolume* the pointer to it.
146
147    G4mmssol theSolids;
148      // Solids container
149
150    G4mmslv theLVs;
151      // Logical volume container
152    G4mmspv thePVs;
153      // Physical volume container
154
155    G4mlvlv theLVTree;
156      // Logical volume tree for navigation (from parent to children):
157      // first is parent, then child
158    G4mlvlv theLVInvTree;
159      // Logical volume tree for inverse navigation (from children to parent):
160      // first is child, then parent
161
162    G4mpvpv thePVTree;
163      // Physical volume tree for navigation (from parent to children):
164      // first is parent, then child
165    G4mpvpv thePVInvTree;
166      // Physical volume tree for inverse navigation (from children to parents):
167      // first is child, then parent
168
169    G4tgbDetectorBuilder* theDetectorBuilder;
170};
171
172#endif
Note: See TracBrowser for help on using the repository browser.