Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/ChargeExchangeMC/src/CexmcTrackingAction.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/ChargeExchangeMC/src/CexmcTrackingAction.cc (Version 11.3.0) and /examples/advanced/ChargeExchangeMC/src/CexmcTrackingAction.cc (Version 11.1.1)


  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 /*                                                 26 /*
 27  * ===========================================     27  * ============================================================================
 28  *                                                 28  *
 29  *       Filename:  CexmcTrackingAction.cc         29  *       Filename:  CexmcTrackingAction.cc
 30  *                                                 30  *
 31  *    Description:  tracking action                31  *    Description:  tracking action
 32  *                                                 32  *
 33  *        Version:  1.0                            33  *        Version:  1.0
 34  *        Created:  22.11.2009 18:22:22            34  *        Created:  22.11.2009 18:22:22
 35  *       Revision:  none                           35  *       Revision:  none
 36  *       Compiler:  gcc                            36  *       Compiler:  gcc
 37  *                                                 37  *
 38  *         Author:  Alexey Radkov (),              38  *         Author:  Alexey Radkov (), 
 39  *        Company:  PNPI                           39  *        Company:  PNPI
 40  *                                                 40  *
 41  * ===========================================     41  * ============================================================================
 42  */                                                42  */
 43                                                    43 
 44 #include <G4ParticleDefinition.hh>                 44 #include <G4ParticleDefinition.hh>
 45 #include <G4VProcess.hh>                           45 #include <G4VProcess.hh>
 46 #include <G4Track.hh>                              46 #include <G4Track.hh>
 47 #include <G4RunManager.hh>                         47 #include <G4RunManager.hh>
 48 #include "CexmcTrackingAction.hh"                  48 #include "CexmcTrackingAction.hh"
 49 #include "CexmcTrackInfo.hh"                       49 #include "CexmcTrackInfo.hh"
 50 #include "CexmcIncidentParticleTrackInfo.hh"       50 #include "CexmcIncidentParticleTrackInfo.hh"
 51 #include "CexmcProductionModel.hh"                 51 #include "CexmcProductionModel.hh"
 52 #include "CexmcPhysicsManager.hh"                  52 #include "CexmcPhysicsManager.hh"
 53 #include "CexmcSetup.hh"                           53 #include "CexmcSetup.hh"
 54 #include "CexmcException.hh"                       54 #include "CexmcException.hh"
 55 #include "CexmcCommon.hh"                          55 #include "CexmcCommon.hh"
 56                                                    56 
 57                                                    57 
 58 CexmcTrackingAction::CexmcTrackingAction(          58 CexmcTrackingAction::CexmcTrackingAction(
 59                                     CexmcPhysi     59                                     CexmcPhysicsManager *  physicsManager_ ) :
 60     physicsManager( physicsManager_ ), targetV     60     physicsManager( physicsManager_ ), targetVolume( NULL ),
 61     outputParticleTrackId( CexmcInvalidTrackId     61     outputParticleTrackId( CexmcInvalidTrackId ),
 62     outputParticleDecayProductCopyNumber( 0 ),     62     outputParticleDecayProductCopyNumber( 0 ), incidentParticle( NULL ),
 63     outputParticle( NULL ), nucleusOutputParti     63     outputParticle( NULL ), nucleusOutputParticle( NULL )
 64 {                                                  64 {
 65     CexmcProductionModel *  productionModel(       65     CexmcProductionModel *  productionModel(
 66                                     physicsMan     66                                     physicsManager->GetProductionModel() );
 67     if ( ! productionModel )                       67     if ( ! productionModel )
 68         throw CexmcException( CexmcWeirdExcept     68         throw CexmcException( CexmcWeirdException );
 69                                                    69 
 70     incidentParticle = productionModel->GetInc     70     incidentParticle = productionModel->GetIncidentParticle();
 71     outputParticle = productionModel->GetOutpu     71     outputParticle = productionModel->GetOutputParticle();
 72     nucleusOutputParticle = productionModel->G     72     nucleusOutputParticle = productionModel->GetNucleusOutputParticle();
 73                                                    73 
 74     if ( ! incidentParticle || ! outputParticl     74     if ( ! incidentParticle || ! outputParticle || ! nucleusOutputParticle )
 75         throw CexmcException( CexmcIncompleteP     75         throw CexmcException( CexmcIncompleteProductionModel );
 76                                                    76 
 77     G4RunManager *      runManager( G4RunManag     77     G4RunManager *      runManager( G4RunManager::GetRunManager() );
 78     const CexmcSetup *  setup( static_cast< co     78     const CexmcSetup *  setup( static_cast< const CexmcSetup * >(
 79                                 runManager->Ge     79                                 runManager->GetUserDetectorConstruction() ) );
 80     targetVolume = setup->GetVolume( CexmcSetu     80     targetVolume = setup->GetVolume( CexmcSetup::Target );
 81 }                                                  81 }
 82                                                    82 
 83                                                    83 
 84 void  CexmcTrackingAction::PreUserTrackingActi     84 void  CexmcTrackingAction::PreUserTrackingAction( const G4Track *  track )
 85 {                                                  85 {
 86     CexmcTrackInfo *  trackInfo( static_cast<      86     CexmcTrackInfo *  trackInfo( static_cast< CexmcTrackInfo * >(
 87                                                    87                                                 track->GetUserInformation() ) );
 88                                                    88 
 89     if ( trackInfo )                               89     if ( trackInfo )
 90         return;                                    90         return;
 91                                                    91 
 92     G4Track *  theTrack( const_cast< G4Track *     92     G4Track *  theTrack( const_cast< G4Track * >( track ) );
 93                                                    93 
 94     do                                             94     do
 95     {                                              95     {
 96         if ( track->GetParentID() == 0 )           96         if ( track->GetParentID() == 0 )
 97         {                                          97         {
 98             if ( *track->GetDefinition() == *i     98             if ( *track->GetDefinition() == *incidentParticle )
 99             {                                      99             {
100                 trackInfo = new CexmcIncidentP    100                 trackInfo = new CexmcIncidentParticleTrackInfo(
101                                                   101                                                     CexmcBeamParticleTrack );
102                 theTrack->SetUserInformation(     102                 theTrack->SetUserInformation( trackInfo );
103                 SetupIncidentParticleTrackInfo    103                 SetupIncidentParticleTrackInfo( track );
104             }                                     104             }
105             else                                  105             else
106             {                                     106             {
107                 trackInfo = new CexmcTrackInfo    107                 trackInfo = new CexmcTrackInfo( CexmcBeamParticleTrack );
108             }                                     108             }
109             break;                                109             break;
110         }                                         110         }
111                                                   111 
112         if ( track->GetCreatorProcess()->GetPr    112         if ( track->GetCreatorProcess()->GetProcessName() ==
113              CexmcStudiedProcessFullName )        113              CexmcStudiedProcessFullName )
114         {                                         114         {
115             do                                    115             do
116             {                                     116             {
117                 if ( *track->GetDefinition() =    117                 if ( *track->GetDefinition() == *outputParticle )
118                 {                                 118                 {
119                     outputParticleTrackId = tr    119                     outputParticleTrackId = track->GetTrackID();
120                     trackInfo = new CexmcTrack    120                     trackInfo = new CexmcTrackInfo( CexmcOutputParticleTrack );
121                     break;                        121                     break;
122                 }                                 122                 }
123                 if ( *track->GetDefinition() =    123                 if ( *track->GetDefinition() == *nucleusOutputParticle )
124                 {                                 124                 {
125                     trackInfo = new CexmcTrack    125                     trackInfo = new CexmcTrackInfo( CexmcNucleusParticleTrack );
126                     break;                        126                     break;
127                 }                                 127                 }
128             } while ( false );                    128             } while ( false );
129             break;                                129             break;
130         }                                         130         }
131                                                   131 
132         if ( track->GetParentID() == outputPar    132         if ( track->GetParentID() == outputParticleTrackId )
133         {                                         133         {
134             trackInfo = new CexmcTrackInfo(       134             trackInfo = new CexmcTrackInfo(
135                                     CexmcOutpu    135                                     CexmcOutputParticleDecayProductTrack,
136                                     outputPart    136                                     outputParticleDecayProductCopyNumber++ );
137             break;                                137             break;
138         }                                         138         }
139                                                   139 
140         if ( *track->GetDefinition() == *incid    140         if ( *track->GetDefinition() == *incidentParticle )
141         {                                         141         {
142             if ( physicsManager->OnlyBeamParti    142             if ( physicsManager->OnlyBeamParticleCanTriggerStudiedProcess() )
143                 break;                            143                 break;
144             trackInfo = new CexmcIncidentParti    144             trackInfo = new CexmcIncidentParticleTrackInfo( CexmcInsipidTrack );
145             theTrack->SetUserInformation( trac    145             theTrack->SetUserInformation( trackInfo );
146             SetupIncidentParticleTrackInfo( tr    146             SetupIncidentParticleTrackInfo( track );
147             break;                                147             break;
148         }                                         148         }
149     } while ( false );                            149     } while ( false );
150                                                   150 
151     if ( ! trackInfo )                            151     if ( ! trackInfo )
152         return;                                   152         return;
153                                                   153 
154     if ( ! track->GetUserInformation() )          154     if ( ! track->GetUserInformation() )
155         theTrack->SetUserInformation( trackInf    155         theTrack->SetUserInformation( trackInfo );
156 }                                                 156 }
157                                                   157 
158                                                   158 
159 void  CexmcTrackingAction::SetupIncidentPartic    159 void  CexmcTrackingAction::SetupIncidentParticleTrackInfo(
160                                                   160                                                     const G4Track *  track )
161 {                                                 161 {
162     CexmcIncidentParticleTrackInfo *  trackInf    162     CexmcIncidentParticleTrackInfo *  trackInfo(
163                     static_cast< CexmcIncident    163                     static_cast< CexmcIncidentParticleTrackInfo * >(
164                                                   164                                                 track->GetUserInformation() ) );
165                                                   165 
166     if ( ! trackInfo )                            166     if ( ! trackInfo )
167         return;                                   167         return;
168                                                   168 
169     G4VPhysicalVolume *  volume( track->GetVol    169     G4VPhysicalVolume *  volume( track->GetVolume() );
170                                                   170 
171     if ( volume && volume->GetLogicalVolume()     171     if ( volume && volume->GetLogicalVolume() == targetVolume )
172     {                                             172     {
173         physicsManager->ResampleTrackLengthInT    173         physicsManager->ResampleTrackLengthInTarget( track );
174         trackInfo->ActivateStudiedProcess();      174         trackInfo->ActivateStudiedProcess();
175     }                                             175     }
176 }                                                 176 }
177                                                   177 
178                                                   178