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 // G4MSSteppingAction 27 // 28 // Class description: 29 // 30 // Stepping action for material scanner. 31 32 // Author: M.Asai, 5 May 2006 33 // ------------------------------------------- 34 #ifndef G4MSSteppingAction_hh 35 #define G4MSSteppingAction_hh 1 36 37 #include "G4UserSteppingAction.hh" 38 #include "globals.hh" 39 #include "G4ThreeVector.hh" 40 41 #include <vector> 42 43 class G4Region; 44 45 46 class G4MSSteppingAction : public G4UserSteppi 47 { 48 public: 49 G4MSSteppingAction() = default; 50 ~G4MSSteppingAction() override = default; 51 52 void Initialize(G4bool rSens, G4Region* re 53 void UserSteppingAction(const G4Step*) ove 54 55 inline G4double GetTotalStepLength() const 56 inline G4double GetX0() const { return x0; 57 inline G4double GetLambda0() const { retur 58 59 /// Print material properties verbosely fo 60 /// This function is useful for single sho 61 void PrintEachMaterialVerbose(std::ostream 62 63 /// Print list of {material name, thicknes 64 /// This function is useful for global sca 65 void PrintIntegratedMaterialVerbose(std::o 66 67 private: 68 G4bool regionSensitive = false; 69 G4Region* theRegion = nullptr; 70 G4double length = 0.0; 71 G4double x0 = 0.0; 72 G4double lambda = 0.0; 73 struct shape_mat_info_t 74 { 75 /// Calculated average atomic number 76 G4double aveZ = 0.0; 77 /// Calculated average mass number 78 G4double aveA = 0.0; 79 /// Density of material given by user 80 G4double density = 0.0; 81 /// Material radiation length 82 G4double radiation_length = 0.0; 83 /// Material interaction length 84 G4double interaction_length = 0.0; 85 /// Step of the geantino 86 G4double thickness = 0.0; 87 /// Integrated path of the geantino 88 G4double integrated_thickness = 0.0; 89 /// Calculated x0 = thickness/radiation_ 90 G4double x0 = 0.0; 91 /// Calculated lambda = thickness/intera 92 G4double lambda = 0.0; 93 /// Integrated x0 94 G4double integrated_x0 = 0.0; 95 /// Integrated lambda 96 G4double integrated_lambda = 0.0; 97 /// Entry point of the geantino into the 98 G4ThreeVector entry_point = { }; 99 /// Exit point of the geantino out of th 100 G4ThreeVector exit_point = { }; 101 /// Material name. Composition is not ch 102 /// That is, if there are two identical 103 /// except for the name, they are treate 104 G4String material_name = { }; 105 /// Getter that returns the full materia 106 const G4String& GetName() { return mater 107 /// Getter that returns the material nam 108 G4String GetName(G4int column_width) 109 { 110 auto input_name_length = (G4int)materi 111 if( input_name_length < column_width) 112 113 G4String formatted_name; 114 for (std::size_t i = 0; i < material_n 115 { 116 // for each block of characters of l 117 formatted_name += material_name.subs 118 if (i + column_width < material_name 119 { 120 formatted_name += '\n'; 121 } 122 // append spaces for last block of c 123 else 124 { 125 formatted_name+=G4String( column_w 126 } 127 } 128 return formatted_name; 129 } 130 }; 131 std::vector<shape_mat_info_t> shape_mat_in 132 133 }; 134 135 #endif 136