00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "G4PSMinKinEAtGeneration.hh"
00031 #include "G4UnitsTable.hh"
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 G4PSMinKinEAtGeneration::G4PSMinKinEAtGeneration(G4String name, G4int depth)
00043 :G4VPrimitiveScorer(name,depth),HCID(-1)
00044 {
00045 SetUnit("MeV");
00046 }
00047
00048 G4PSMinKinEAtGeneration::G4PSMinKinEAtGeneration(G4String name,
00049 const G4String& unit,
00050 G4int depth)
00051 :G4VPrimitiveScorer(name,depth),HCID(-1)
00052 {
00053 SetUnit(unit);
00054 }
00055
00056 G4PSMinKinEAtGeneration::~G4PSMinKinEAtGeneration()
00057 {;}
00058
00059 G4bool G4PSMinKinEAtGeneration::ProcessHits(G4Step* aStep,G4TouchableHistory*)
00060 {
00061
00062
00063
00064
00065
00066 if ( aStep->GetTrack()->GetCurrentStepNumber() != 1) return FALSE;
00067
00068 if ( aStep->GetTrack()->GetParentID() == 0 ) return FALSE;
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 G4double kinetic = aStep->GetPreStepPoint()->GetKineticEnergy();
00081
00082
00083 G4int index = GetIndex(aStep);
00084 G4double* mapValue= ((*EvtMap)[index]);
00085
00086
00087
00088
00089 if ( mapValue && ( kinetic > *mapValue ) ) return FALSE;
00090
00091
00092
00093
00094
00095 EvtMap->set(index, kinetic);
00096 return TRUE;
00097 }
00098
00099 void G4PSMinKinEAtGeneration::Initialize(G4HCofThisEvent* HCE)
00100 {
00101 EvtMap = new G4THitsMap<G4double>(detector->GetName(),GetName());
00102 if(HCID < 0) {HCID = GetCollectionID(0);}
00103 HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap);
00104 }
00105
00106 void G4PSMinKinEAtGeneration::EndOfEvent(G4HCofThisEvent*)
00107 {;}
00108
00109 void G4PSMinKinEAtGeneration::clear(){
00110 EvtMap->clear();
00111 }
00112
00113 void G4PSMinKinEAtGeneration::DrawAll()
00114 {;}
00115
00116 void G4PSMinKinEAtGeneration::PrintAll()
00117 {
00118 G4cout << " PrimitiveScorer " << GetName() << G4endl;
00119 G4cout << " Number of entries " << EvtMap->entries() << G4endl;
00120 std::map<G4int,G4double*>::iterator itr = EvtMap->GetMap()->begin();
00121 for(; itr != EvtMap->GetMap()->end(); itr++) {
00122 G4cout << " copy no.: " << itr->first
00123 << " energy: " << *(itr->second)/GetUnitValue()
00124 << " ["<<GetUnit()<<"]"
00125 << G4endl;
00126 }
00127 }
00128
00129 void G4PSMinKinEAtGeneration::SetUnit(const G4String& unit)
00130 {
00131 CheckAndSetUnit(unit,"Energy");
00132 }
00133
00134