Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 /// \file persistency/gdml/G01/load_gdml.cc 27 /// \brief Main program of the persistency/gdm 28 // 29 // 30 // 31 // 32 // ------------------------------------------- 33 // GEANT 4 - load_gdml 34 // 35 // ------------------------------------------- 36 37 #include "FTFP_BERT.hh" 38 #include "G01ActionInitialization.hh" 39 #include "G01DetectorConstruction.hh" 40 #include "G01PrimaryGeneratorAction.hh" 41 42 #include "G4GDMLParser.hh" 43 #include "G4LogicalVolumeStore.hh" 44 #include "G4RunManagerFactory.hh" 45 #include "G4TransportationManager.hh" 46 #include "G4Types.hh" 47 #include "G4UIExecutive.hh" 48 #include "G4UImanager.hh" 49 #include "G4VisExecutive.hh" 50 51 #include <vector> 52 53 void print_aux(const G4GDMLAuxListType* auxInf 54 { 55 for (std::vector<G4GDMLAuxStructType>::const 56 iaux != auxInfoList->end(); iaux++) 57 { 58 G4String str = iaux->type; 59 G4String val = iaux->value; 60 G4String unit = iaux->unit; 61 62 G4cout << prepend << str << " : " << val < 63 64 if (iaux->auxList) print_aux(iaux->auxList 65 } 66 return; 67 } 68 69 // ------------------------------------------- 70 71 int main(int argc, char** argv) 72 { 73 G4cout << G4endl; 74 G4cout << "Usage: load_gdml <intput_gdml_fil 75 << " <output_gdml_file:optional>" << 76 G4cout << G4endl; 77 78 if (argc < 2) { 79 G4cout << "Error! Mandatory input file is 80 G4cout << G4endl; 81 return -1; 82 } 83 84 G4GDMLParser parser; 85 86 // Uncomment the following if wish to avoid 87 // parser.SetStripFlag(false); 88 89 // Uncomment the following and set a string 90 // schema filename if wishing to use alterna 91 // parser.SetImportSchema(""); 92 93 parser.SetOverlapCheck(true); 94 parser.Read(argv[1]); 95 96 if (argc > 4) { 97 G4cout << "Error! Too many arguments!" << 98 G4cout << G4endl; 99 return -1; 100 } 101 102 auto* runManager = G4RunManagerFactory::Crea 103 104 runManager->SetUserInitialization(new G01Det 105 runManager->SetUserInitialization(new FTFP_B 106 runManager->SetUserInitialization(new G01Act 107 108 runManager->Initialize(); 109 110 // Initialize visualization 111 G4VisManager* visManager = new G4VisExecutiv 112 visManager->Initialize(); 113 114 // Get the pointer to the User Interface man 115 G4UImanager* UImanager = G4UImanager::GetUIp 116 117 //////////////////////////////////////////// 118 // 119 // Example how to retrieve Auxiliary Informa 120 // 121 122 G4cout << std::endl; 123 124 const G4LogicalVolumeStore* lvs = G4LogicalV 125 std::vector<G4LogicalVolume*>::const_iterato 126 for (lvciter = lvs->begin(); lvciter != lvs- 127 G4GDMLAuxListType auxInfo = parser.GetVolu 128 129 if (auxInfo.size() > 0) 130 G4cout << "Auxiliary Information is foun 131 << G4endl; 132 133 print_aux(&auxInfo); 134 } 135 136 // now the 'global' auxiliary info 137 G4cout << std::endl; 138 G4cout << "Global auxiliary info:" << std::e 139 G4cout << std::endl; 140 141 print_aux(parser.GetAuxList()); 142 143 G4cout << std::endl; 144 145 // 146 // End of Auxiliary Information block 147 // 148 //////////////////////////////////////////// 149 150 runManager->BeamOn(0); 151 152 // example of writing out 153 154 if (argc >= 3) { 155 /* 156 G4GDMLAuxStructType mysubaux = {"mysu 157 G4GDMLAuxListType* myauxlist = new G4 158 myauxlist->push_back(mysubaux); 159 160 G4GDMLAuxStructType myaux = {"mytype" 161 parser.AddAuxiliary(myaux); 162 163 164 // example of setting auxiliary info 165 // (can be set for any volume) 166 167 G4GDMLAuxStructType mylocalaux = {"so 168 169 parser.AddVolumeAuxiliary(mylocalaux, 170 G4TransportationManager::GetTranspo 171 ->GetNavigatorForTracking()->GetWor 172 */ 173 174 parser.SetRegionExport(true); 175 // parser.SetEnergyCutsExport(true); 176 // parser.SetOutputFileOverwrite(true) 177 parser.Write(argv[2], G4TransportationMana 178 ->GetNavigatorForT 179 ->GetWorldVolume() 180 ->GetLogicalVolume 181 } 182 183 if (argc == 4) // batch mode 184 { 185 G4String command = "/control/execute "; 186 G4String fileName = argv[3]; 187 UImanager->ApplyCommand(command + fileName 188 } 189 else // interactive mode 190 { 191 G4UIExecutive* ui = new G4UIExecutive(argc 192 UImanager->ApplyCommand("/control/execute 193 ui->SessionStart(); 194 delete ui; 195 } 196 197 delete visManager; 198 delete runManager; 199 200 return 0; 201 } 202