Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/parameterisations/Par02/src/Par02FastSimModelEMCal.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/extended/parameterisations/Par02/src/Par02FastSimModelEMCal.cc (Version 11.3.0) and /examples/extended/parameterisations/Par02/src/Par02FastSimModelEMCal.cc (Version 10.3.p3)


  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 // $Id: $
 26 //                                                 27 //
 27 /// \file Par02FastSimModelEMCal.cc                28 /// \file Par02FastSimModelEMCal.cc
 28 /// \brief Implementation of the Par02FastSimM     29 /// \brief Implementation of the Par02FastSimModelEMCal class
 29                                                    30 
 30 #include "Par02FastSimModelEMCal.hh"               31 #include "Par02FastSimModelEMCal.hh"
 31                                                << 
 32 #include "Par02EventInformation.hh"                32 #include "Par02EventInformation.hh"
 33 #include "Par02Output.hh"                      << 
 34 #include "Par02PrimaryParticleInformation.hh"      33 #include "Par02PrimaryParticleInformation.hh"
 35 #include "Par02Smearer.hh"                         34 #include "Par02Smearer.hh"
                                                   >>  35 #include "Par02Output.hh"
 36                                                    36 
 37 #include "G4AnalysisManager.hh"                <<  37 #include "G4Track.hh"
 38 #include "G4Electron.hh"                       << 
 39 #include "G4Event.hh"                              38 #include "G4Event.hh"
 40 #include "G4Gamma.hh"                          << 
 41 #include "G4Positron.hh"                       << 
 42 #include "G4RunManager.hh"                         39 #include "G4RunManager.hh"
 43 #include "G4SystemOfUnits.hh"                  <<  40 #include "g4root.hh"
 44 #include "G4Track.hh"                          <<  41 
 45 #include "Randomize.hh"                            42 #include "Randomize.hh"
                                                   >>  43 #include "G4SystemOfUnits.hh"
                                                   >>  44 
                                                   >>  45 #include "G4Electron.hh"
                                                   >>  46 #include "G4Positron.hh"
                                                   >>  47 #include "G4Gamma.hh"
 46                                                    48 
 47 //....oooOO0OOooo........oooOO0OOooo........oo     49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 48                                                    50 
 49 Par02FastSimModelEMCal::Par02FastSimModelEMCal <<  51 Par02FastSimModelEMCal::Par02FastSimModelEMCal( G4String aModelName, 
 50                                                <<  52   G4Region* aEnvelope, Par02DetectorParametrisation::Parametrisation aType ) :
 51   : G4VFastSimulationModel(aModelName, aEnvelo <<  53   G4VFastSimulationModel( aModelName, aEnvelope ), fCalculateParametrisation(),
 52     fCalculateParametrisation(),               <<  54   fParametrisation( aType ) {}
 53     fParametrisation(aType)                    << 
 54 {}                                             << 
 55                                                    55 
 56 //....oooOO0OOooo........oooOO0OOooo........oo     56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 57                                                    57 
 58 Par02FastSimModelEMCal::Par02FastSimModelEMCal <<  58 Par02FastSimModelEMCal::Par02FastSimModelEMCal( G4String aModelName, 
 59   : G4VFastSimulationModel(aModelName, aEnvelo <<  59                                                 G4Region* aEnvelope ) : 
 60     fCalculateParametrisation(),               <<  60   G4VFastSimulationModel( aModelName, aEnvelope ), fCalculateParametrisation(),
 61     fParametrisation(Par02DetectorParametrisat <<  61   fParametrisation( Par02DetectorParametrisation::eCMS ) {}
 62 {}                                             << 
 63                                                    62 
 64 //....oooOO0OOooo........oooOO0OOooo........oo     63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 65                                                    64 
 66 Par02FastSimModelEMCal::Par02FastSimModelEMCal <<  65 Par02FastSimModelEMCal::Par02FastSimModelEMCal( G4String aModelName ) :
 67   : G4VFastSimulationModel(aModelName),        <<  66   G4VFastSimulationModel( aModelName ), fCalculateParametrisation(), 
 68     fCalculateParametrisation(),               <<  67   fParametrisation( Par02DetectorParametrisation::eCMS ) {}
 69     fParametrisation(Par02DetectorParametrisat << 
 70 {}                                             << 
 71                                                    68 
 72 //....oooOO0OOooo........oooOO0OOooo........oo     69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 73                                                    70 
 74 Par02FastSimModelEMCal::~Par02FastSimModelEMCa <<  71 Par02FastSimModelEMCal::~Par02FastSimModelEMCal() {}
 75                                                    72 
 76 //....oooOO0OOooo........oooOO0OOooo........oo     73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 77                                                    74 
 78 G4bool Par02FastSimModelEMCal::IsApplicable(co <<  75 G4bool Par02FastSimModelEMCal::IsApplicable( 
 79 {                                              <<  76   const G4ParticleDefinition& aParticleType ) {
 80   // Applicable for electrons, positrons, and      77   // Applicable for electrons, positrons, and gammas
 81   return &aParticleType == G4Electron::Definit <<  78   return &aParticleType == G4Electron::Definition()  ||
 82          || &aParticleType == G4Gamma::Definit <<  79          &aParticleType == G4Positron::Definition()  ||
                                                   >>  80          &aParticleType == G4Gamma::Definition();
 83 }                                                  81 }
 84                                                    82 
 85 //....oooOO0OOooo........oooOO0OOooo........oo     83 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 86                                                    84 
 87 G4bool Par02FastSimModelEMCal::ModelTrigger(co <<  85 G4bool Par02FastSimModelEMCal::ModelTrigger( const G4FastTrack& /*aFastTrack*/ ) {
 88 {                                              << 
 89   return true;  // No kinematical restrictions     86   return true;  // No kinematical restrictions to apply the parametrisation
 90 }                                                  87 }
 91                                                    88 
 92 //....oooOO0OOooo........oooOO0OOooo........oo     89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 93                                                    90 
 94 void Par02FastSimModelEMCal::DoIt(const G4Fast <<  91 void Par02FastSimModelEMCal::DoIt( const G4FastTrack& aFastTrack,
 95 {                                              <<  92                                    G4FastStep& aFastStep ) {
 96   // G4cout << " ________EMCal model triggered <<  93   //G4cout << " ________EMCal model triggered _________" << G4endl;
 97                                                    94 
 98   // Kill the parameterised particle at the en     95   // Kill the parameterised particle at the entrance of the electromagnetic calorimeter
 99   aFastStep.KillPrimaryTrack();                    96   aFastStep.KillPrimaryTrack();
100   aFastStep.ProposePrimaryTrackPathLength(0.0) <<  97   aFastStep.ProposePrimaryTrackPathLength( 0.0 );
101   G4double Edep = aFastTrack.GetPrimaryTrack()     98   G4double Edep = aFastTrack.GetPrimaryTrack()->GetKineticEnergy();
102                                                    99 
103   // Consider only primary tracks (do nothing     100   // Consider only primary tracks (do nothing else for secondary e-, e+, gammas)
104   G4ThreeVector Pos = aFastTrack.GetPrimaryTra    101   G4ThreeVector Pos = aFastTrack.GetPrimaryTrack()->GetPosition();
105   if (!aFastTrack.GetPrimaryTrack()->GetParent << 102   if ( ! aFastTrack.GetPrimaryTrack()->GetParentID() ) {
106     auto info = (Par02EventInformation*)G4Even << 103     Par02EventInformation* info = (Par02EventInformation*) 
107     if (info->GetDoSmearing()) {               << 104                             G4EventManager::GetEventManager()->GetUserInformation();
                                                   >> 105     if ( info->GetDoSmearing() ) {
108       // Smearing according to the electromagn    106       // Smearing according to the electromagnetic calorimeter resolution
109       G4ThreeVector Porg = aFastTrack.GetPrima    107       G4ThreeVector Porg = aFastTrack.GetPrimaryTrack()->GetMomentum();
110       G4double res = fCalculateParametrisation << 108       G4double res = fCalculateParametrisation->GetResolution( 
111                                                << 109         Par02DetectorParametrisation::eEMCAL, fParametrisation, Porg.mag() );
112       G4double eff = fCalculateParametrisation << 110       G4double eff = fCalculateParametrisation->GetEfficiency( 
113                                                << 111         Par02DetectorParametrisation::eEMCAL, fParametrisation, Porg.mag() );
114       G4double Esm;                               112       G4double Esm;
115       Esm = std::abs(Par02Smearer::Instance()- << 113       Esm = std::abs( Par02Smearer::Instance()->
116       Par02Output::Instance()->FillHistogram(1 << 114                         SmearEnergy( aFastTrack.GetPrimaryTrack(), res ) );
                                                   >> 115       Par02Output::Instance()->FillHistogram( 1, (Esm/MeV) / (Edep/MeV) );
117       // Setting the values of Pos, Esm, res a    116       // Setting the values of Pos, Esm, res and eff
118       ((Par02PrimaryParticleInformation*)(cons << 117       ( (Par02PrimaryParticleInformation*) ( const_cast< G4PrimaryParticle* >
119                                             aF << 118           ( aFastTrack.GetPrimaryTrack()->GetDynamicParticle()->GetPrimaryParticle() )->
120                                                << 119             GetUserInformation() ) )->SetEMCalPosition( Pos );
121                                                << 120       ( (Par02PrimaryParticleInformation*) ( const_cast< G4PrimaryParticle* >
122                                             -> << 121           ( aFastTrack.GetPrimaryTrack()->GetDynamicParticle()->GetPrimaryParticle() )->
123         ->SetEMCalPosition(Pos);               << 122             GetUserInformation() ) )->SetEMCalEnergy( Esm );
124       ((Par02PrimaryParticleInformation*)(cons << 123       ( (Par02PrimaryParticleInformation*) ( const_cast< G4PrimaryParticle* >
125                                             aF << 124           ( aFastTrack.GetPrimaryTrack()->GetDynamicParticle()->GetPrimaryParticle() )->
126                                                << 125             GetUserInformation() ) )->SetEMCalResolution( res );
127                                                << 126       ( (Par02PrimaryParticleInformation*) ( const_cast< G4PrimaryParticle* >
128                                             -> << 127           ( aFastTrack.GetPrimaryTrack()->GetDynamicParticle()->GetPrimaryParticle() )->
129         ->SetEMCalEnergy(Esm);                 << 128             GetUserInformation() ) )->SetEMCalEfficiency( eff );
130       ((Par02PrimaryParticleInformation*)(cons << 
131                                             aF << 
132                                                << 
133                                                << 
134                                             -> << 
135         ->SetEMCalResolution(res);             << 
136       ((Par02PrimaryParticleInformation*)(cons << 
137                                             aF << 
138                                                << 
139                                                << 
140                                             -> << 
141         ->SetEMCalEfficiency(eff);             << 
142       // The (smeared) energy of the particle     129       // The (smeared) energy of the particle is deposited in the step
143       // (which corresponds to the entrance of    130       // (which corresponds to the entrance of the electromagnetic calorimeter)
144       aFastStep.ProposeTotalEnergyDeposited(Es << 131       aFastStep.ProposeTotalEnergyDeposited( Esm );
145     }                                          << 132     } else {
146     else {                                     << 
147       // No smearing: simply setting the value    133       // No smearing: simply setting the value of Edep
148       ((Par02PrimaryParticleInformation*)(cons << 134       ( (Par02PrimaryParticleInformation*) ( const_cast< G4PrimaryParticle* >
149                                             aF << 135           ( aFastTrack.GetPrimaryTrack()->GetDynamicParticle()->GetPrimaryParticle() )->
150                                                << 136             GetUserInformation() ) )->SetEMCalEnergy( Edep );
151                                                << 
152                                             -> << 
153         ->SetEMCalEnergy(Edep);                << 
154       // The (initial) energy of the particle     137       // The (initial) energy of the particle is deposited in the step
155       // (which corresponds to the entrance of    138       // (which corresponds to the entrance of the electromagnetic calorimeter)
156       aFastStep.ProposeTotalEnergyDeposited(Ed << 139       aFastStep.ProposeTotalEnergyDeposited( Edep );
157     }                                             140     }
158   }                                               141   }
159 }                                                 142 }
160                                                   143 
161 //....oooOO0OOooo........oooOO0OOooo........oo    144 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
                                                   >> 145 
162                                                   146