Geant4  10.01.p02
G4BuildGeom.cc
Go to the documentation of this file.
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: G4BuildGeom.cc 67982 2013-03-13 10:36:03Z gcosmo $
28 //
29 // modified by I. Hrivnacova, 13.10.99
30 
31 #include <iomanip>
32 #include <fstream>
33 #include "globals.hh"
34 #include "G3toG4.hh"
35 #include "G3MatTable.hh"
36 #include "G3MedTable.hh"
37 #include "G3RotTable.hh"
38 #include "G3VolTable.hh"
39 #include "G3PartTable.hh"
40 #include "G3DetTable.hh"
41 #include "G3toG4BuildTree.hh"
42 #include "G4GeometryManager.hh"
43 #include "G4LogicalVolume.hh"
44 #include "G4LogicalVolumeStore.hh"
45 #include "G4PVPlacement.hh"
46 #include "G4VisAttributes.hh"
47 
48 extern std::ofstream ofile;
49 
50 void G3CLRead(G4String &, char *);
52 void checkVol();
53 
54 
56 
57  G4int irot=0;
58  G4gsrotm(0, 90, 0, 90, 90, 0, 0);
59 
60  G4cout << "Instantiated unit rotation matrix irot=" << irot << G4endl;
61 
62  // Read the call List and interpret to Generate Geant4 geometry
63 
64  G4cout << "Reading the call List file " << inFile << "..." << G4endl;
65 
66  G3CLRead(inFile, 0);
67 
68  G3Part.PrintAll();
69 
70  G3Det.PrintAll();
71 
72  G3Vol.PrintAll();
73 
74  G4cout << "Call List file read completed. Build geometry" << G4endl;
75 
76  // Build the geometry
77 
78  G3VolTableEntry* topVTE = G3Vol.GetFirstVTE();
79  G4cout << "G3toG4 top level volume is " << topVTE->GetName() << G4endl;
80 
81  // modified
82  G3toG4BuildTree(topVTE, 0);
83 
84  // Retrieve the top-level G3toG4 logical mother volume pointer
85 
86  G4LogicalVolume* topLV = topVTE->GetLV();
87 
88  // position the top logical volume
89  // (in Geant3 the top volume is not positioned)
90  //
91  new G4PVPlacement(0, G4ThreeVector(), topLV->GetName(), topLV, 0, false, 0);
92 
93  // mark as invisible
94 
96 
97  G4cout << "Top-level G3toG4 logical volume " << topLV->GetName() << " "
98  << *(topLV->GetVisAttributes()) << G4endl;
99 
100  // check the geometry here
101 
102  #ifdef G3G4DEBUG
103  G4cout << "scan through G4LogicalVolumeStore:" << G4endl;
104  checkVol();
105  #endif
106 
107  return topLV;
108 }
109 
110 void checkVol()
111 {
113  G4LogicalVolume* ll = (*theStore)[0];
114  G4int level=0;
115  checkVol(ll, level);
116 }
117 
118 void checkVol(G4LogicalVolume* _lvol, G4int level)
119 {
120  G4LogicalVolume* _ldvol;
121  G4VPhysicalVolume* _pdvol;
122  level++;
123 
124  G4int ndau = _lvol -> GetNoDaughters();
125 
126  G4cout << "G44LogicalVolume " << _lvol->GetName() << " at level " << level
127  << " contains " << ndau << " daughters." << G4endl;
128  for (G4int idau=0; idau<ndau; idau++){
129  _pdvol = _lvol-> GetDaughter(idau);
130  _ldvol = _pdvol -> GetLogicalVolume();
131  G4cout << "G4VPhysical volume " << std::setw(5) << _pdvol -> GetName()
132  << " (G4LogicalVolume " << std::setw(5) << _ldvol->GetName() << ")"
133  << G4endl;
134  checkVol(_ldvol, level);
135  }
136  return;
137 }
138 
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
G3G4DLL_API G3PartTable G3Part
Definition: clparse.cc:58
void PrintAll()
Definition: G3DetTable.cc:96
void G4gsrotm(G4int irot, G4double theta1, G4double phi1, G4double theta2, G4double phi2, G4double theta3, G4double phi3)
Definition: G4gsrotm.cc:54
G4String GetName() const
CLHEP::Hep3Vector G4ThreeVector
G3VolTableEntry * GetFirstVTE()
Definition: G3VolTable.cc:107
void G3CLRead(G4String &, char *)
Definition: clparse.cc:99
G4LogicalVolume * GetLV()
void PrintAll()
Definition: G3PartTable.cc:79
G3G4DLL_API G3DetTable G3Det
Definition: clparse.cc:59
int G4int
Definition: G4Types.hh:78
std::ofstream ofile
Definition: clparse.cc:45
void PrintAll()
Definition: G3VolTable.cc:61
void checkVol(G4LogicalVolume *, G4int)
Definition: G4BuildGeom.cc:118
G4GLOB_DLL std::ostream G4cout
const G4VisAttributes * GetVisAttributes() const
static G4LogicalVolumeStore * GetInstance()
void G3toG4BuildTree(G3VolTableEntry *curVTE, G3VolTableEntry *motherVTE)
G4String GetName()
static const G4VisAttributes Invisible
G4LogicalVolume * G4BuildGeom(G4String &inFile)
Definition: G4BuildGeom.cc:55
#define G4endl
Definition: G4ios.hh:61
void SetVisAttributes(const G4VisAttributes *pVA)
G3G4DLL_API G3VolTable G3Vol
Definition: clparse.cc:54