ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4BuildGeom.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4BuildGeom.cc
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 //
28 // modified by I. Hrivnacova, 13.10.99
29 
30 #include <iomanip>
31 #include <fstream>
32 #include "globals.hh"
33 #include "G3toG4.hh"
34 #include "G3MatTable.hh"
35 #include "G3MedTable.hh"
36 #include "G3RotTable.hh"
37 #include "G3VolTable.hh"
38 #include "G3PartTable.hh"
39 #include "G3DetTable.hh"
40 #include "G3toG4BuildTree.hh"
41 #include "G4GeometryManager.hh"
42 #include "G4LogicalVolume.hh"
43 #include "G4LogicalVolumeStore.hh"
44 #include "G4PVPlacement.hh"
45 #include "G4VisAttributes.hh"
46 
47 extern std::ofstream ofile;
48 
49 void G3CLRead(G4String &, char *);
51 void checkVol();
52 
53 
55 
56  G4int irot=0;
57  G4gsrotm(0, 90, 0, 90, 90, 0, 0);
58 
59  G4cout << "Instantiated unit rotation matrix irot=" << irot << G4endl;
60 
61  // Read the call List and interpret to Generate Geant4 geometry
62 
63  G4cout << "Reading the call List file " << inFile << "..." << G4endl;
64 
65  G3CLRead(inFile, 0);
66 
67  G3Part.PrintAll();
68 
69  G3Det.PrintAll();
70 
71  G3Vol.PrintAll();
72 
73  G4cout << "Call List file read completed. Build geometry" << G4endl;
74 
75  // Build the geometry
76 
77  G3VolTableEntry* topVTE = G3Vol.GetFirstVTE();
78  G4cout << "G3toG4 top level volume is " << topVTE->GetName() << G4endl;
79 
80  // modified
81  G3toG4BuildTree(topVTE, 0);
82 
83  // Retrieve the top-level G3toG4 logical mother volume pointer
84 
85  G4LogicalVolume* topLV = topVTE->GetLV();
86 
87  // position the top logical volume
88  // (in Geant3 the top volume is not positioned)
89  //
90  new G4PVPlacement(0, G4ThreeVector(), topLV->GetName(), topLV, 0, false, 0);
91 
92  // mark as invisible
93 
95 
96  G4cout << "Top-level G3toG4 logical volume " << topLV->GetName() << " "
97  << *(topLV->GetVisAttributes()) << G4endl;
98 
99  // check the geometry here
100 
101  #ifdef G3G4DEBUG
102  G4cout << "scan through G4LogicalVolumeStore:" << G4endl;
103  checkVol();
104  #endif
105 
106  return topLV;
107 }
108 
109 void checkVol()
110 {
112  G4LogicalVolume* ll = (*theStore)[0];
113  G4int level=0;
114  checkVol(ll, level);
115 }
116 
117 void checkVol(G4LogicalVolume* _lvol, G4int level)
118 {
119  G4LogicalVolume* _ldvol;
120  G4VPhysicalVolume* _pdvol;
121  level++;
122 
123  G4int ndau = _lvol -> GetNoDaughters();
124 
125  G4cout << "G44LogicalVolume " << _lvol->GetName() << " at level " << level
126  << " contains " << ndau << " daughters." << G4endl;
127  for (G4int idau=0; idau<ndau; idau++){
128  _pdvol = _lvol-> GetDaughter(idau);
129  _ldvol = _pdvol -> GetLogicalVolume();
130  G4cout << "G4VPhysical volume " << std::setw(5) << _pdvol -> GetName()
131  << " (G4LogicalVolume " << std::setw(5) << _ldvol->GetName() << ")"
132  << G4endl;
133  checkVol(_ldvol, level);
134  }
135  return;
136 }
137 
138 
139 
140 
141 
142 
143 
144 
145 
146 
147