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 // G4MSSteppingAction << 27 // 26 // 28 // Class description: << 27 // $Id: G4MSSteppingAction.hh,v 1.2 2006-06-29 21:13:10 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-09-04-patch-01 $ >> 29 // 29 // 30 // 30 // Stepping action for material scanner. << 31 31 32 // Author: M.Asai, 5 May 2006 << 32 // class description: 33 // ------------------------------------------- << 33 // 34 #ifndef G4MSSteppingAction_hh << 35 #define G4MSSteppingAction_hh 1 << 36 34 37 #include "G4UserSteppingAction.hh" << 35 ////////////////////// 38 #include "globals.hh" << 36 //G4MSSteppingAction 39 #include "G4ThreeVector.hh" << 37 ///////////////////// 40 38 41 #include <vector> << 39 >> 40 #ifndef G4MSSteppingAction_h >> 41 #define G4MSSteppingAction_h 1 42 42 43 class G4Region; 43 class G4Region; 44 44 >> 45 #include "G4UserSteppingAction.hh" >> 46 #include "globals.hh" 45 47 46 class G4MSSteppingAction : public G4UserSteppi 48 class G4MSSteppingAction : public G4UserSteppingAction 47 { 49 { 48 public: 50 public: 49 G4MSSteppingAction() = default; << 51 G4MSSteppingAction(); 50 ~G4MSSteppingAction() override = default; << 52 virtual ~G4MSSteppingAction(); 51 53 52 void Initialize(G4bool rSens, G4Region* re << 54 void Initialize(G4bool rSens,G4Region* reg); 53 void UserSteppingAction(const G4Step*) ove << 55 virtual void UserSteppingAction(const G4Step*); 54 56 >> 57 private: >> 58 G4bool regionSensitive; >> 59 G4Region* theRegion; >> 60 G4double length; >> 61 G4double x0; >> 62 G4double lambda; >> 63 >> 64 public: 55 inline G4double GetTotalStepLength() const 65 inline G4double GetTotalStepLength() const { return length; } 56 inline G4double GetX0() const { return x0; 66 inline G4double GetX0() const { return x0; } 57 inline G4double GetLambda0() const { retur 67 inline G4double GetLambda0() const { return lambda; } 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 }; 68 }; 134 69 135 #endif 70 #endif 136 71