ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CexmcTrackPoints.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file CexmcTrackPoints.cc
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