Geant4  10.02.p01
CexmcTrackPoints.cc
Go to the documentation of this file.
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: CexmcTrackPoints.cc
30  *
31  * Description: track points collection
32  *
33  * Version: 1.0
34  * Created: 16.11.2009 13:03:03
35  * Revision: none
36  * Compiler: gcc
37  *
38  * Author: Alexey Radkov (),
39  * Company: PNPI
40  *
41  * ============================================================================
42  */
43 
44 #include <G4HCofThisEvent.hh>
45 #include <G4AffineTransform.hh>
46 #include <G4UnitsTable.hh>
47 #include "CexmcTrackPoints.hh"
48 #include "CexmcTrackInfo.hh"
49 
50 
52  CexmcPrimitiveScorer( name ), hcId( -1 )
53 {
54 }
55 
56 
58 {
59  /* NB: trackInfo for these tracks shall always exist as far as
60  * track points filter decline tracks without it */
61  CexmcTrackInfo * trackInfo( static_cast< CexmcTrackInfo * >(
62  step->GetTrack()->GetUserInformation() ) );
63 
64  G4int ret( trackInfo->GetTrackType() );
65 
67  ret += trackInfo->GetCopyNumber();
68 
69  return ret;
70 }
71 
72 
74 {
75  return GetTrackId( step );
76 }
77 
78 
80 {
81  G4int index( GetIndex( step ) );
82 
83  if ( ( *eventMap )[ index ] )
84  return false;
85 
86  G4Track * track( step->GetTrack() );
87  G4ParticleDefinition * particle( track->GetDefinition() );
88  CexmcTrackType trackType( CexmcInsipidTrack );
89 
90  G4StepPoint * preStepPoint( step->GetPreStepPoint() );
91  G4ThreeVector position( preStepPoint->GetPosition() );
92  G4ThreeVector direction( preStepPoint->GetMomentumDirection() );
93 
94  const G4AffineTransform & transform( preStepPoint->GetTouchable()->
95  GetHistory()->GetTopTransform() );
96 
97  CexmcTrackInfo * trackInfo( static_cast< CexmcTrackInfo * >(
98  track->GetUserInformation() ) );
99  trackType = trackInfo->GetTrackType();
100 
101  CexmcTrackPointInfo trackPointInfo( transform.TransformPoint( position ),
102  position,
103  transform.TransformAxis( direction ),
104  direction,
105  preStepPoint->GetMomentum().mag(),
106  particle, track->GetTrackID(),
107  trackType );
108 
109  eventMap->set( index, trackPointInfo );
110 
111  return true;
112 }
113 
114 
116 {
118  primitiveName );
119 
120  if ( hcId < 0 )
121  hcId = GetCollectionID( 0 );
122 
123  hcOfEvent->AddHitsCollection( hcId, eventMap );
124 }
125 
126 
128 {
129  if ( GetVerboseLevel() > 0 )
130  PrintAll();
131 }
132 
133 
135 {
136  eventMap->clear();
137 }
138 
139 
141 {
142 }
143 
144 
146 {
147  G4int nmbOfEntries( eventMap->entries() );
148 
149  if ( nmbOfEntries == 0 )
150  return;
151 
152  PrintHeader( nmbOfEntries );
153 
154  for ( CexmcTrackPointsCollectionData::iterator
155  itr( eventMap->GetMap()->begin() );
156  itr != eventMap->GetMap()->end(); ++itr )
157  {
158  G4cout << " track id " << itr->first << G4endl;
159  G4cout << " , position: " <<
160  G4BestUnit( itr->second->positionLocal, "Length" ) << G4endl;
161  G4cout << " , direction: " <<
162  itr->second->directionLocal << G4endl;
163  G4cout << " , momentum: " <<
164  G4BestUnit( itr->second->momentumAmp, "Energy" ) << G4endl;
165  G4cout << " , particle: " <<
166  itr->second->particle->GetParticleName() << G4endl;
167  }
168 }
169 
void clear()
Definition: G4THitsMap.hh:209
CLHEP::Hep3Vector G4ThreeVector
void EndOfEvent(G4HCofThisEvent *hcOfThisEvent)
CexmcTrackPointsCollection * eventMap
G4String name
Definition: TRTMaterials.hh:40
G4int GetCopyNumber(void) const
G4int GetTrackId(G4Step *step)
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
int G4int
Definition: G4Types.hh:78
G4VUserTrackInformation * GetUserInformation() const
G4StepPoint * GetPreStepPoint() const
CexmcTrackPoints(const G4String &name)
#define position
Definition: xmlparse.cc:622
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
G4THitsMap< CexmcTrackPointInfo > CexmcTrackPointsCollection
Definition: G4Step.hh:76
G4int GetCollectionID(G4int)
void AddHitsCollection(G4int HCID, G4VHitsCollection *aHC)
G4int entries() const
Definition: G4THitsMap.hh:79
void Initialize(G4HCofThisEvent *hcOfThisEvent)
G4int GetIndex(G4Step *step)
std::map< G4int, T * > * GetMap() const
Definition: G4THitsMap.hh:68
void PrintHeader(G4int nmbOfEntries) const
G4int GetVerboseLevel() const
#define G4endl
Definition: G4ios.hh:61
CexmcTrackType GetTrackType(void) const
G4MultiFunctionalDetector * detector
CexmcTrackType
Definition: CexmcCommon.hh:115
G4Track * GetTrack() const
G4int set(const G4int &key, T *&aHit) const
Definition: G4THitsMap.hh:165
G4bool ProcessHits(G4Step *step, G4TouchableHistory *tHistory)