Geant4 Cross Reference |
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 /// \file ChemGeoImporthh 28 /// \brief Definition of the ChemGeoImport class 29 30 #ifndef ChemGeoImport_HH 31 #define ChemGeoImport_HH 32 33 #include <map> 34 #include <fstream> 35 #include <algorithm> 36 #include <set> 37 38 #include "G4String.hh" 39 #include "G4ThreeVector.hh" 40 #include "G4Orb.hh" 41 #include "G4VSolid.hh" 42 #include "G4Box.hh" 43 #include "G4SystemOfUnits.hh" 44 #include "G4SubtractionSolid.hh" 45 #include "G4LogicalVolume.hh" 46 #include "G4PVPlacement.hh" 47 #include "G4NistManager.hh" 48 #include "G4VisAttributes.hh" 49 #include "G4H2O.hh" 50 #include "G4Electron_aq.hh" 51 #include "G4Scheduler.hh" 52 53 #include "UserMoleculeGun.hh" 54 55 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 56 57 struct ChemMolecule 58 { 59 ChemMolecule(G4String name, G4int copyNumber, G4ThreeVector position, 60 G4int strand, G4int state, G4int electronicLevel, G4int trackId) 61 { 62 fName = name; 63 fCopyNumber = copyNumber; 64 fPosition = position; 65 fStrand = strand; 66 fState = state; 67 fElectronicLevel = electronicLevel; 68 fTrackId = trackId; 69 } 70 71 ~ChemMolecule() {} 72 73 G4String fName{""}; 74 75 G4int fCopyNumber{-1}; 76 G4int fStrand{-1}; 77 G4int fState{-99}; 78 G4int fElectronicLevel{-99}; 79 G4int fTrackId{-1}; 80 81 G4ThreeVector fPosition{0}; 82 83 friend G4bool operator==(const ChemMolecule& lhs, const ChemMolecule& rhs) 84 { 85 return (lhs.fName == rhs.fName 86 && lhs.fCopyNumber == rhs.fCopyNumber 87 && lhs.fStrand == rhs.fStrand 88 && lhs.fState == rhs.fState 89 && lhs.fElectronicLevel == rhs.fElectronicLevel 90 && lhs.fTrackId == rhs.fTrackId); 91 } 92 }; 93 94 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 95 96 class ChemGeoImport 97 { 98 public: 99 ChemGeoImport(); 100 ~ChemGeoImport(); 101 102 void SetFactor(double factor){fFactor=factor;} 103 G4double GetFactor() const {return fFactor;} 104 105 G4double GetSize() const {return fSize;} 106 107 void ParseFiles(const G4String& chemInputFile); 108 109 // This method will trigger the build of the geometry 110 void InsertMoleculeInWorld(); 111 112 void Reset(); 113 G4String GetVoxelDefFilePath(G4String bareName); 114 G4bool IsFileParsed() {return fIsParsed;} 115 private: 116 G4bool fIsParsed{false}; 117 118 // Factor to scale the geometry 119 G4double fFactor{1}; 120 121 G4double fSize{0}; 122 123 G4String fGeoNameFromChemInput{""}; 124 125 // Vector to contain all the molecule structures listed within the imput file 126 std::vector<ChemMolecule> fMolecules; 127 128 std::vector<ChemMolecule> fToBeRemovedMol; 129 130 UserMoleculeGun* fpGun{nullptr}; 131 132 void ParseChemInputFile(const G4String& fileName); 133 void ParseGeoFile(const G4String& fileName); 134 G4bool IsMoleculeInTheRemoveTable(const ChemMolecule& molecule); 135 136 void GetVoxelDefFilePathList(); 137 std::set<G4String> fVoxelDefFilesList; 138 }; 139 140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 141 142 #endif // ChemGeoImport_HH 143