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 Analysis.hh 28 /// \brief Definition of the Analysis class 29 /// \file Analysis.hh 30 /// \brief Definition of the Analysis class 31 32 #ifndef ANALYSIS_h 33 #define ANALYSIS_h 1 34 35 #include "G4ThreeVector.hh" 36 #include <map> 37 #include "G4AnalysisManager.hh" 38 #include "G4GenericMessenger.hh" 39 40 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 41 42 #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ 43 TypeName(const TypeName&); \ 44 void operator=(const TypeName&) 45 46 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 47 48 struct InfoForChemGeo // store info for creating input files for chem stage 49 { 50 G4int fType{0}; // water: 1; solvated electron=2 51 G4int fState{-99}; // no state for solvated electron 52 G4int fElectronicLevel{-99}; // no electronic level for solvated electron 53 G4double fX{0.}; // position of the incoming track 54 G4double fY{0.}; // position of the incoming track 55 G4double fZ{0.}; // position of the incoming track 56 G4int fParentTrackID{-1}; 57 G4int fEventNumber{-1}; 58 G4int fVolume{-1}; 59 G4int fVolumeCopyNumber{-1}; 60 G4int fMotherVolume{-1}; 61 G4int fMotherVolumeCopyNumber{-1}; 62 G4double fRelX{-1.}; 63 G4double fRelY{-1.}; 64 G4double fRelZ{-1.}; 65 }; 66 67 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 68 69 struct InfoInPhysStage // store info created in Physical stage 70 { 71 G4int fFlagParticle{-1}; 72 G4int fFlagParentID{-1}; 73 G4int fFlagProcess{-1}; 74 G4double fX{-1.}; 75 G4double fY{-1.}; 76 G4double fZ{-1.}; 77 G4double fEdep{-1.}; 78 G4int fEventNumber{-1}; 79 G4int fVolumeName{-1}; 80 G4int fCopyNumber{-1}; 81 G4int fLastMetVoxelCopyNum{-1}; 82 }; 83 84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 85 86 class Analysis 87 { 88 public: 89 ~Analysis() = default; 90 static Analysis* GetAnalysis(); 91 92 void OpenFile(const G4String outFolder=""); 93 void Save(); 94 void Close(G4bool reset = true); 95 void SetFileName(const G4String& name) {fFileName = name;}; 96 void Book(); 97 G4AnalysisManager* GetAnalysisManager(); 98 void ClearVector() ; // being called in Beginofeventaction 99 void AddInfoForChemGeo(InfoForChemGeo); 100 void AddInfoInPhysStage(InfoInPhysStage); 101 void UpdateChemInputDataAndFillNtuple(); // being called in Endofeventaction 102 void RecordCellDefFiliePath(const G4String &pth) {fCellDefFilePath = pth;}; 103 void RecordVoxelDefFilesList(std::set<G4String> list) {fVoxelDefFilesList = list;}; 104 void RecordChemInputFolderName(const G4String &pth) {fChemInputFolderName = pth;}; 105 void WritePhysGeo(); 106 G4String GetChemInputFolderName() {return fChemInputFolderName;} 107 G4String GetPhysOutFolderName() {return fPhysOutFolderName;} 108 G4String GetChemOutFolderName() {return fChemOutFolderName;} 109 void SetTotalNbBpPlacedInGeo(unsigned long long val) {fTotalNbBpPlacedInGeo = val;} 110 void SetTotalNbHistonePlacedInGeo(unsigned long long val) {fTotalNbHistonePlacedInGeo = val;} 111 void SetNucleusVolume(G4double vl) {fNucleusVolume = vl;}; 112 void SetNucleusMassDensity(G4double md) {fNucleusMassDensity = md;}; 113 void CheckAndCreateNewFolderInChemStage(); 114 void CheckAndCreateNewFolderInPhysStage(); 115 private: 116 Analysis() {DefineCommands();}; 117 G4String CreateChemInputFile(G4int eventNum,G4int volumeCopyNumber,const G4String &voxelName); 118 void UpdatingChemInputFile(InfoForChemGeo); 119 void UpdatingChemInputFile(InfoInPhysStage); 120 std::vector<InfoForChemGeo> fInfoForChemGeoVector; 121 std::vector<InfoInPhysStage> fInfoInPhysStageVector; 122 std::map<G4double, std::map<G4double, G4String> > fOutputFiles; 123 G4String fCellDefFilePath; 124 std::set<G4String> fVoxelDefFilesList; 125 G4String fChemInputFolderName{"chem_input"}; 126 G4String fPhysOutFolderName{"phys_output"}; 127 G4String fChemOutFolderName{"chem_output"}; 128 unsigned long long fTotalNbBpPlacedInGeo{0}; 129 unsigned long long fTotalNbHistonePlacedInGeo{0}; 130 G4double fNucleusVolume{0.}; 131 G4double fNucleusMassDensity{0.}; 132 G4String fFileName="Output";// output 133 std::unique_ptr<G4GenericMessenger> fMessenger; 134 void DefineCommands(); 135 DISALLOW_COPY_AND_ASSIGN(Analysis); 136 }; 137 138 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 139 140 #endif