source: trunk/examples/advanced/radiation_monitor/materials/include/RadmonMaterialsManager.hh @ 1321

Last change on this file since 1321 was 807, checked in by garnier, 16 years ago

update

File size: 6.7 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// File name:     RadmonMaterialsManager.hh
28// Creation date: Sep 2005
29// Main author:   Riccardo Capra <capra@ge.infn.it>
30//
31// Id:            $Id: RadmonMaterialsManager.hh,v 1.4 2006/06/29 16:16:45 gunter Exp $
32// Tag:           $Name:  $
33//
34// Description:   Singleton that manages the materials creation
35//
36
37#ifndef   RADMONMATERIALSMANAGER_HH
38 #define  RADMONMATERIALSMANAGER_HH
39
40 // Include files
41 #include "globals.hh"
42 #include "G4String.hh"
43 #include "G4Element.hh"
44 #include "G4Material.hh"
45 #include "G4Color.hh"
46 
47 #include <list>
48 #include <map>
49
50 // Forward declaration
51 class RadmonMaterialsMessenger;
52 class G4Material;
53 class G4VisAttributes;
54 
55 class RadmonMaterialsManager
56 {
57  public:
58   static RadmonMaterialsManager *              Instance(void);
59
60   G4Element &                                  CreateElement(const G4String & elementName, const G4String & symbol, G4double zEff, G4double aEff);
61   G4Element &                                  GetElement(const G4String & elementName);
62   inline const G4Element &                     GetElement(const G4String & elementName) const;
63   inline G4Element &                           GetElement(G4int index);
64   inline const G4Element &                     GetElement(G4int index) const;
65   inline G4int                                 GetNElements() const;
66   G4bool                                       ExistsElement(const G4String & elementName) const;
67
68   void                                         CreateMaterial(const G4String & materialName, G4double density, G4int nComponents);
69   void                                         AddComponentByAtoms(const G4String & materialName, const G4String & elementName, G4int nAtoms);
70   void                                         AddComponentByFraction(const G4String & materialName, const G4String & componentName, G4double fraction);
71   G4Material &                                 GetMaterial(const G4String & materialName);
72   inline const G4Material &                    GetMaterial(const G4String & materialName) const;
73   inline G4Material &                          GetMaterial(G4int index);
74   inline const G4Material &                    GetMaterial(G4int index) const;
75   inline G4int                                 GetNMaterials() const;
76   G4bool                                       ExistsMaterial(const G4String & materialName) const;
77   inline G4bool                                IsIncompleteMaterial(const G4String & materialName) const;
78   
79   void                                         SetMaterialColor(const G4String & materialName, const G4Color & color);
80   void                                         SetMaterialVisibility(const G4String & materialName, G4bool visibility);
81   void                                         SetMaterialForceWireframe(const G4String & materialName, G4bool force);
82   void                                         SetMaterialForceSolid(const G4String & materialName, G4bool force);
83   
84   const G4Color &                              GetMaterialColor(const G4String & materialName) const;
85   G4bool                                       GetMaterialVisibility(const G4String & materialName) const;
86   G4bool                                       GetMaterialForceWireframe(const G4String & materialName) const;
87   G4bool                                       GetMaterialForceSolid(const G4String & materialName) const;
88
89   void                                         Dump(std::ostream & out, const G4String &indent=G4String()) const;
90
91   G4bool                                       Insert(std::istream & in);
92   G4bool                                       Save(std::ostream & out) const;
93
94  private:
95   inline G4Element *                           FindElement(const G4String & elementName);
96   inline G4Material *                          FindMaterial(const G4String & materialName);
97   G4Material *                                 FindIncompleteMaterial(const G4String & materialName);
98   G4Material *                                 FindIncompleteMaterialOrAbort(const G4String & materialName);
99   void                                         UpdateIncompleteStatus(const G4String & materialName);
100   
101  // Hidden constructors and operators
102   inline                                       RadmonMaterialsManager();
103                                                RadmonMaterialsManager(const RadmonMaterialsManager & copy);
104                                               ~RadmonMaterialsManager();
105   RadmonMaterialsManager &                     operator=(const RadmonMaterialsManager & copy);
106
107  // Private data types
108   typedef std::list<G4Material *>              MaterialsList;
109   typedef std::map<G4String, G4VisAttributes *> MaterialAttributes;
110 
111  // Private attributes
112   RadmonMaterialsMessenger *                   messenger;
113 
114   MaterialsList                                incompleteMaterialsList;
115   MaterialAttributes                           attributesMap;
116
117  // Private static attribute
118   static RadmonMaterialsManager *              instance;
119 };
120 
121 // Inline implementations
122 #include "RadmonMaterialsManager.icc"
123#endif /* RADMONMATERIALSMANAGER_HH */
Note: See TracBrowser for help on using the repository browser.