Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // G4GDMLMessenger implementation << 27 // 26 // 28 // Author: Witold Pokorski, October 2010 << 27 // $Id: G4GDMLMessenger.cc 68053 2013-03-13 14:39:51Z gcosmo $ 29 // ------------------------------------------- << 28 // >> 29 // >> 30 // class G4GDMLMessenger Implementation >> 31 // >> 32 // ------------------------------------------------------------------------- 30 33 31 #include "G4GDMLMessenger.hh" 34 #include "G4GDMLMessenger.hh" 32 #include "G4GDMLParser.hh" 35 #include "G4GDMLParser.hh" 33 36 34 #include "globals.hh" 37 #include "globals.hh" 35 #include "G4RunManager.hh" 38 #include "G4RunManager.hh" 36 #include "G4UIdirectory.hh" 39 #include "G4UIdirectory.hh" 37 #include "G4UIcmdWithAString.hh" 40 #include "G4UIcmdWithAString.hh" 38 #include "G4UIcmdWithABool.hh" << 39 #include "G4UIcmdWithoutParameter.hh" 41 #include "G4UIcmdWithoutParameter.hh" 40 #include "G4GeometryManager.hh" 42 #include "G4GeometryManager.hh" 41 #include "G4LogicalVolumeStore.hh" 43 #include "G4LogicalVolumeStore.hh" 42 #include "G4PhysicalVolumeStore.hh" 44 #include "G4PhysicalVolumeStore.hh" 43 #include "G4SolidStore.hh" 45 #include "G4SolidStore.hh" 44 46 45 // ------------------------------------------- << 46 G4GDMLMessenger::G4GDMLMessenger(G4GDMLParser* 47 G4GDMLMessenger::G4GDMLMessenger(G4GDMLParser* myPars) 47 : myParser(myPars) << 48 : myParser(myPars), topvol(0) 48 { << 49 { 49 persistencyDir = new G4UIdirectory("/persist 50 persistencyDir = new G4UIdirectory("/persistency/"); 50 persistencyDir->SetGuidance("UI commands spe 51 persistencyDir->SetGuidance("UI commands specific to persistency."); 51 << 52 52 gdmlDir = new G4UIdirectory("/persistency/gd 53 gdmlDir = new G4UIdirectory("/persistency/gdml/"); 53 gdmlDir->SetGuidance("GDML parser and writer 54 gdmlDir->SetGuidance("GDML parser and writer."); 54 << 55 55 ReaderSchema = new G4UIcmdWithAString("/pers << 56 ReaderCmd = new G4UIcmdWithAString("/persistency/gdml/read",this); 56 ReaderSchema->SetGuidance("Set alternative G << 57 ReaderSchema->SetParameterName("schema_path_ << 58 ReaderSchema->AvailableForStates(G4State_Pre << 59 ReaderSchema->SetToBeBroadcasted(false); << 60 << 61 ReaderCmd = new G4UIcmdWithAString("/persist << 62 ReaderCmd->SetGuidance("Read GDML file."); 57 ReaderCmd->SetGuidance("Read GDML file."); 63 ReaderCmd->SetParameterName("filename", fals << 58 ReaderCmd->SetParameterName("filename",false); 64 ReaderCmd->AvailableForStates(G4State_PreIni << 59 ReaderCmd->AvailableForStates(G4State_PreInit,G4State_Idle); 65 ReaderCmd->SetToBeBroadcasted(false); << 66 60 67 TopVolCmd = new G4UIcmdWithAString("/persist << 61 TopVolCmd = new G4UIcmdWithAString("/persistency/gdml/topvol",this); 68 TopVolCmd->SetGuidance("Set the top volume f 62 TopVolCmd->SetGuidance("Set the top volume for writing the GDML file."); 69 TopVolCmd->SetParameterName("topvol", false) << 63 TopVolCmd->SetParameterName("topvol",false); 70 TopVolCmd->SetToBeBroadcasted(false); << 71 64 72 WriterCmd = new G4UIcmdWithAString("/persist << 65 WriterCmd = new G4UIcmdWithAString("/persistency/gdml/write",this); 73 WriterCmd->SetGuidance("Write GDML file."); 66 WriterCmd->SetGuidance("Write GDML file."); 74 WriterCmd->SetParameterName("filename", fals << 67 WriterCmd->SetParameterName("filename",false); 75 WriterCmd->AvailableForStates(G4State_Idle); 68 WriterCmd->AvailableForStates(G4State_Idle); 76 WriterCmd->SetToBeBroadcasted(false); << 77 69 78 StripCmd = new G4UIcmdWithABool("/persistenc << 70 ClearCmd = new G4UIcmdWithoutParameter("/persistency/gdml/clear",this); 79 StripCmd->SetGuidance("Enable/disable stripp << 80 StripCmd->SetGuidance("when reading a GDML f << 81 StripCmd->SetParameterName("strip_pointers", << 82 StripCmd->SetDefaultValue(true); << 83 StripCmd->AvailableForStates(G4State_Idle); << 84 StripCmd->SetToBeBroadcasted(false); << 85 << 86 AppendCmd = new G4UIcmdWithABool("/persisten << 87 AppendCmd->SetGuidance("Enable/disable appen << 88 AppendCmd->SetGuidance("when writing a GDML << 89 AppendCmd->SetParameterName("append_pointers << 90 AppendCmd->SetDefaultValue(true); << 91 AppendCmd->AvailableForStates(G4State_Idle); << 92 AppendCmd->SetToBeBroadcasted(false); << 93 << 94 RegionCmd = new G4UIcmdWithABool("/persisten << 95 RegionCmd->SetGuidance("Enable export of geo << 96 RegionCmd->SetGuidance("for storing producti << 97 RegionCmd->SetParameterName("export_regions" << 98 RegionCmd->SetDefaultValue(false); << 99 RegionCmd->AvailableForStates(G4State_Idle); << 100 RegionCmd->SetToBeBroadcasted(false); << 101 << 102 EcutsCmd = new G4UIcmdWithABool("/persistenc << 103 EcutsCmd->SetGuidance("Enable export of ener << 104 EcutsCmd->SetGuidance("to logical volumes.") << 105 EcutsCmd->SetGuidance("NOTE: may increase co << 106 EcutsCmd->SetGuidance(" GDML file! Inf << 107 EcutsCmd->SetGuidance(" for import."); << 108 EcutsCmd->SetParameterName("export_Ecuts", f << 109 EcutsCmd->SetDefaultValue(false); << 110 EcutsCmd->AvailableForStates(G4State_Idle); << 111 EcutsCmd->SetToBeBroadcasted(false); << 112 << 113 SDCmd = new G4UIcmdWithABool("/persistency/g << 114 SDCmd->SetGuidance("Enable export of SD asso << 115 SDCmd->SetGuidance("to logical volumes."); << 116 SDCmd->SetParameterName("export_SD", false); << 117 SDCmd->SetDefaultValue(false); << 118 SDCmd->AvailableForStates(G4State_Idle); << 119 SDCmd->SetToBeBroadcasted(false); << 120 << 121 ClearCmd = new G4UIcmdWithoutParameter("/per << 122 ClearCmd->SetGuidance("Clear geometry (befor 71 ClearCmd->SetGuidance("Clear geometry (before reading a new one from GDML)."); 123 ClearCmd->AvailableForStates(G4State_Idle); 72 ClearCmd->AvailableForStates(G4State_Idle); 124 ClearCmd->SetToBeBroadcasted(false); << 125 } 73 } 126 74 127 // ------------------------------------------- << 128 G4GDMLMessenger::~G4GDMLMessenger() 75 G4GDMLMessenger::~G4GDMLMessenger() 129 { 76 { 130 delete ReaderSchema; << 131 delete ReaderCmd; 77 delete ReaderCmd; 132 delete WriterCmd; 78 delete WriterCmd; 133 delete ClearCmd; 79 delete ClearCmd; 134 delete TopVolCmd; 80 delete TopVolCmd; 135 delete RegionCmd; << 136 delete EcutsCmd; << 137 delete SDCmd; << 138 delete persistencyDir; 81 delete persistencyDir; 139 delete gdmlDir; 82 delete gdmlDir; 140 delete StripCmd; << 141 delete AppendCmd; << 142 } 83 } 143 84 144 // ------------------------------------------- << 145 void G4GDMLMessenger::SetNewValue(G4UIcommand* 85 void G4GDMLMessenger::SetNewValue(G4UIcommand* command, G4String newValue) 146 { << 86 { 147 if(command == StripCmd) << 87 if( command == ReaderCmd ) 148 { << 88 { 149 G4bool mode = StripCmd->GetNewBoolValue(ne << 150 myParser->SetStripFlag(mode); << 151 } << 152 << 153 if(command == AppendCmd) << 154 { << 155 pFlag = AppendCmd->GetNewBoolValue(newValu << 156 myParser->SetAddPointerToName(pFlag); << 157 } << 158 << 159 if(command == ReaderSchema) << 160 { << 161 myParser->SetImportSchema(newValue); << 162 } << 163 << 164 if(command == ReaderCmd) << 165 { << 166 G4GeometryManager::GetInstance()->OpenGeom 89 G4GeometryManager::GetInstance()->OpenGeometry(); 167 myParser->Read(newValue); 90 myParser->Read(newValue); 168 G4RunManager::GetRunManager()->DefineWorld << 91 G4RunManager::GetRunManager()->DefineWorldVolume(myParser->GetWorldVolume()); 169 myParser->GetWorldVolume()); << 170 G4RunManager::GetRunManager()->GeometryDir << 171 } << 172 << 173 if(command == RegionCmd) << 174 { << 175 G4bool mode = RegionCmd->GetNewBoolValue(n << 176 myParser->SetRegionExport(mode); << 177 } << 178 << 179 if(command == EcutsCmd) << 180 { << 181 G4bool mode = EcutsCmd->GetNewBoolValue(ne << 182 myParser->SetEnergyCutsExport(mode); << 183 } 92 } 184 93 185 if(command == SDCmd) << 94 if( command == TopVolCmd ) 186 { << 187 G4bool mode = SDCmd->GetNewBoolValue(newVa << 188 myParser->SetSDExport(mode); << 189 } << 190 << 191 if(command == TopVolCmd) << 192 { 95 { 193 topvol = G4LogicalVolumeStore::GetInstance 96 topvol = G4LogicalVolumeStore::GetInstance()->GetVolume(newValue); 194 } 97 } 195 << 98 196 if(command == WriterCmd) << 99 if( command == WriterCmd ) 197 { 100 { 198 myParser->Write(newValue, topvol, pFlag); << 101 myParser->Write(newValue, topvol); 199 } << 102 } 200 103 201 if(command == ClearCmd) << 104 if( command == ClearCmd ) 202 { << 105 { 203 myParser->Clear(); 106 myParser->Clear(); 204 G4RunManager::GetRunManager()->Reinitializ << 107 G4GeometryManager::GetInstance()->OpenGeometry(); 205 } << 108 G4PhysicalVolumeStore::Clean(); >> 109 G4LogicalVolumeStore::Clean(); >> 110 G4SolidStore::Clean(); >> 111 } 206 } 112 } 207 113