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 /// \file radiobiology/include/RBE.hh 27 /// \brief Definition of the RadioBio::RBE class 28 29 #ifndef RadiobiologyRBE_H 30 #define RadiobiologyRBE_H 1 31 32 #include "globals.hh" 33 34 #include "VRadiobiologicalQuantity.hh" 35 36 #include <map> 37 #include <valarray> 38 #include <vector> 39 40 namespace RadioBio 41 { 42 43 // Forward declariation of other radiobiology classes 44 class DetectorConstruction; 45 class RBEAccumulable; 46 class RBEMessenger; 47 class VoxelizedSensitiveDetector; 48 49 class RBE : public VRadiobiologicalQuantity 50 { 51 public: 52 RBE(); 53 ~RBE(); 54 55 // Initialization of data from a CSV file 56 void LoadLEMTable(G4String path); 57 58 // Select the cell and update the pointer 59 void SetCellLine(G4String name); 60 61 // Calculate alpha and beta for single deposition, {0,0} if not applicable 62 std::tuple<G4double, G4double> GetHitAlphaAndBeta(G4double E, G4int Z); 63 64 // Virtual methods to override 65 void AddFromAccumulable(G4VAccumulable*) override; 66 void Initialize() override; 67 void Compute() override; 68 void Reset() override; 69 void Store() override; 70 void PrintParameters() override; 71 72 private: 73 // Calculation 74 void ComputeAlphaAndBeta(); 75 void ComputeRBE(); 76 77 // Output to text files (called at the end of run) 78 void StoreAlphaAndBeta(); 79 void StoreRBE(); 80 81 // Update the class with accumulated data 82 // (To be used for accumulation) 83 void SetAlphaNumerator(const array_type alpha); 84 void SetBetaNumerator(const array_type beta); 85 void SetDenominator(const array_type denom); 86 87 // Accumulation variants necessary for multi-run sumation 88 void AddAlphaNumerator(const array_type alpha); 89 void AddBetaNumerator(const array_type beta); 90 void AddDenominator(const array_type denom); 91 92 // Method to copy dose from the proper Radiobiological Quantity 93 void GetDose(); 94 95 // Parameters for calculation 96 G4double fAlphaX = 0.; 97 G4double fBetaX = 0.; 98 G4double fDoseCut = 0.; 99 100 // Matrices to be set when accumulated 101 array_type fAlpha = {}; 102 array_type fBeta = {}; 103 array_type fDose = {}; // Note: this is copied from calculation in Dose 104 105 array_type fAlphaNumerator = {}; 106 array_type fBetaNumerator = {}; 107 array_type fDenominator = {}; 108 109 // Matrices of calculated values 110 array_type fLnS = {}; 111 array_type fSurvival = {}; 112 array_type fDoseX = {}; 113 array_type fRBE = {}; 114 115 // Available tables and associated values. 116 using vector_type = std::map<G4int, std::vector<G4double>>; 117 std::map<G4String, vector_type> fTablesEnergy = {}; 118 std::map<G4String, vector_type> fTablesAlpha = {}; 119 std::map<G4String, vector_type> fTablesBeta = {}; 120 std::map<G4String, G4double> fTablesAlphaX = {}; 121 std::map<G4String, G4double> fTablesBetaX = {}; 122 std::map<G4String, G4double> fTablesDoseCut = {}; 123 124 // Selected tables and associated values. 125 // (changed when the cell line is set) 126 G4String fActiveCellLine; 127 vector_type* fActiveTableEnergy = nullptr; 128 vector_type* fActiveTableAlpha = nullptr; 129 vector_type* fActiveTableBeta = nullptr; 130 std::map<G4int, G4double> fMaxEnergies = {}; 131 std::map<G4int, G4double> fMinEnergies = {}; 132 G4int fMinZ = -1; 133 G4int fMaxZ = -1; 134 }; 135 136 } // namespace RadioBio 137 138 #endif 139