source: trunk/source/g3tog4/src/G4BuildGeom.cc @ 1202

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

update g3tog4

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