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 * ============================================================================= 28 * 29 * Filename: CexmcEventAction.hh 30 * 31 * Description: event action 32 * 33 * Version: 1.0 34 * Created: 27.10.2009 22:41:29 35 * Revision: none 36 * Compiler: gcc 37 * 38 * Author: Alexey Radkov (), 39 * Company: PNPI 40 * 41 * ============================================================================= 42 */ 43 44 #ifndef CEXMC_EVENT_ACTION_HH 45 #define CEXMC_EVENT_ACTION_HH 46 47 #include <G4UserEventAction.hh> 48 #include "CexmcAngularRange.hh" 49 50 class G4Event; 51 class CexmcPhysicsManager; 52 class CexmcEnergyDepositDigitizer; 53 struct CexmcEnergyDepositStore; 54 class CexmcTrackPointsDigitizer; 55 struct CexmcTrackPointsStore; 56 class CexmcEventActionMessenger; 57 struct CexmcProductionModelData; 58 class CexmcChargeExchangeReconstructor; 59 60 61 class CexmcEventAction : public G4UserEventAction 62 { 63 public: 64 explicit CexmcEventAction( CexmcPhysicsManager * physicsManager, 65 G4int verbose = 0 ); 66 67 virtual ~CexmcEventAction(); 68 69 public: 70 void BeginOfEventAction( const G4Event * event ); 71 72 void EndOfEventAction( const G4Event * event ); 73 74 public: 75 void BeamParticleChangeHook( void ); 76 77 void SetVerboseOnCexmcLevel( G4int value ); 78 79 void SetVerboseDrawLevel( G4int value ); 80 81 CexmcChargeExchangeReconstructor * GetReconstructor( void ); 82 83 private: 84 void PrintReconstructedData( 85 const CexmcAngularRangeList & angularRanges, 86 const CexmcAngularRange & angularGap ) const; 87 88 #ifdef CEXMC_USE_ROOT 89 void FillEDTHistos( const CexmcEnergyDepositStore * edStore, 90 const CexmcAngularRangeList & triggeredAngularRanges ) const; 91 92 void FillTPTHistos( const CexmcTrackPointsStore * tpStore, 93 const CexmcProductionModelData & pmData, 94 const CexmcAngularRangeList & triggeredAngularRanges ) const; 95 96 void FillRTHistos( G4bool reconstructorHasFullTrigger, 97 const CexmcEnergyDepositStore * edStore, 98 const CexmcTrackPointsStore * tpStore, 99 const CexmcProductionModelData & pmData, 100 const CexmcAngularRangeList & triggeredAngularRanges ) const; 101 #endif 102 103 void DrawTrajectories( const G4Event * event ); 104 105 void DrawTrackPoints( const CexmcTrackPointsStore * tpStore ) const; 106 107 void DrawReconstructionData( void ); 108 109 void UpdateRunHits( const CexmcAngularRangeList & aRangesReal, 110 const CexmcAngularRangeList & aRangesRec, 111 G4bool tpDigitizerHasTriggered, 112 G4bool edDigitizerHasTriggered, 113 G4bool edDigitizerMonitorHasTriggered, 114 G4bool reconstructorHasTriggered, 115 const CexmcAngularRange & aGap ); 116 117 #ifdef CEXMC_USE_PERSISTENCY 118 void SaveEvent( const G4Event * event, 119 G4bool edDigitizerMonitorHasTriggered, 120 const CexmcEnergyDepositStore * edStore, 121 const CexmcTrackPointsStore * tpStore, 122 const CexmcProductionModelData & pmData ); 123 124 void SaveEventFast( const G4Event * event, 125 G4bool tpDigitizerHasTriggered, 126 G4bool edDigitizerHasTriggered, 127 G4bool edDigitizerMonitorHasTriggered, 128 G4double opCosThetaSCM ); 129 #endif 130 131 public: 132 static CexmcEnergyDepositStore * MakeEnergyDepositStore( 133 const CexmcEnergyDepositDigitizer * digitizer ); 134 135 static CexmcTrackPointsStore * MakeTrackPointsStore( 136 const CexmcTrackPointsDigitizer * digitizer ); 137 138 static void PrintEnergyDeposit( 139 const CexmcEnergyDepositStore * edStore ); 140 141 static void PrintTrackPoints( 142 const CexmcTrackPointsStore * tpStore ); 143 144 static void PrintProductionModelData( 145 const CexmcAngularRangeList & angularRanges, 146 const CexmcProductionModelData & pmData ); 147 148 private: 149 CexmcPhysicsManager * physicsManager; 150 151 CexmcChargeExchangeReconstructor * reconstructor; 152 153 #ifdef CEXMC_USE_ROOT 154 G4double opKinEnergy; 155 #endif 156 157 private: 158 G4int verbose; 159 160 G4int verboseDraw; 161 162 CexmcEventActionMessenger * messenger; 163 }; 164 165 166 inline void CexmcEventAction::SetVerboseOnCexmcLevel( G4int value ) 167 { 168 verbose = value; 169 } 170 171 172 inline void CexmcEventAction::SetVerboseDrawLevel( G4int value ) 173 { 174 verboseDraw = value; 175 } 176 177 178 inline CexmcChargeExchangeReconstructor * 179 CexmcEventAction::GetReconstructor( void ) 180 { 181 return reconstructor; 182 } 183 184 185 #endif 186 187