Geant4  10.02
Par02FastSimModelHCal.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 // $Id: $
27 //
30 
31 #include "Par02FastSimModelHCal.hh"
32 #include "Par02EventInformation.hh"
34 #include "Par02Smearer.hh"
35 #include "Par02Output.hh"
36 
37 #include "G4Track.hh"
38 #include "G4Event.hh"
39 #include "G4RunManager.hh"
40 #include "g4root.hh"
41 
42 #include "Randomize.hh"
43 #include "G4SystemOfUnits.hh"
44 
45 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
46 
49  G4VFastSimulationModel( aModelName, aEnvelope ), fCalculateParametrisation(),
50  fParametrisation( aType ) {}
51 
52 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
53 
55  G4Region* aEnvelope ) :
56  G4VFastSimulationModel( aModelName, aEnvelope ), fCalculateParametrisation(),
57  fParametrisation( Par02DetectorParametrisation::eCMS ) {}
58 
59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
60 
62  G4VFastSimulationModel( aModelName ), fCalculateParametrisation(),
63  fParametrisation( Par02DetectorParametrisation::eCMS ) {}
64 
65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
66 
68 
69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
70 
72  G4bool isOk = false;
73  // Applicable to all hadrons, i.e. any particle made of quarks
74  if ( aParticleType.GetQuarkContent(1) +
75  aParticleType.GetQuarkContent(2) +
76  aParticleType.GetQuarkContent(3) +
77  aParticleType.GetQuarkContent(4) +
78  aParticleType.GetQuarkContent(5) +
79  aParticleType.GetQuarkContent(6) != 0 ) {
80  isOk = true;
81  }
82  return isOk;
83 }
84 
85 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
86 
88  return true; // No kinematical restrictions to apply the parametrisation
89 }
90 
91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
92 
93 void Par02FastSimModelHCal::DoIt( const G4FastTrack& aFastTrack,
94  G4FastStep& aFastStep ) {
95  //G4cout << " ________HCal model triggered _________" << G4endl;
96 
97  // Kill the parameterised particle at the entrance of the hadronic calorimeter
98  aFastStep.KillPrimaryTrack();
99  aFastStep.ProposePrimaryTrackPathLength( 0.0 );
100  G4double Edep = aFastTrack.GetPrimaryTrack()->GetKineticEnergy();
101 
102  // Consider only primary tracks (do nothing else for secondary hadrons)
103  G4ThreeVector Pos = aFastTrack.GetPrimaryTrack()->GetPosition();
104  if ( ! aFastTrack.GetPrimaryTrack()->GetParentID() ) {
107  if ( info->GetDoSmearing() ) {
108  // Smearing according to the hadronic calorimeter resolution
109  G4ThreeVector Porg = aFastTrack.GetPrimaryTrack()->GetMomentum();
111  GetResolution( Par02DetectorParametrisation::eHCAL,
112  fParametrisation, Porg.mag() );
114  GetEfficiency( Par02DetectorParametrisation::eHCAL,
115  fParametrisation, Porg.mag() );
116  G4double Esm;
117  Esm = std::abs( Par02Smearer::Instance()->
118  SmearEnergy( aFastTrack.GetPrimaryTrack(), res ) );
119  Par02Output::Instance()->FillHistogram( 2, (Esm/MeV) / (Edep/MeV) );
120  // Setting the values of Pos, Esm, res and eff
121  Par02PrimaryParticleInformation* primaryInfo=
122  static_cast<Par02PrimaryParticleInformation*>(
123  ( aFastTrack.GetPrimaryTrack()->GetDynamicParticle()->GetPrimaryParticle() )->
124  GetUserInformation() ) ;
125  primaryInfo->SetHCalPosition( Pos );
126  primaryInfo->SetHCalEnergy( Esm );
127  primaryInfo->SetHCalResolution( res );
128  primaryInfo->SetHCalEfficiency( eff );
129  // The (smeared) energy of the particle is deposited in the step
130  // (which corresponds to the entrance of the hadronic calorimeter)
131  aFastStep.ProposeTotalEnergyDeposited( Esm );
132  } else {
133  // No smearing: simply setting the value of Edep
134  ( (Par02PrimaryParticleInformation*) ( const_cast< G4PrimaryParticle* >
135  ( aFastTrack.GetPrimaryTrack()->GetDynamicParticle()->GetPrimaryParticle() )->
136  GetUserInformation() ) )->SetHCalEnergy( Edep );
137  // The (initial) energy of the particle is deposited in the step
138  // (which corresponds to the entrance of the hadronic calorimeter)
139  aFastStep.ProposeTotalEnergyDeposited( Edep );
140  }
141  }
142 }
143 
144 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
145 
Par02DetectorParametrisation::Parametrisation fParametrisation
A parametrisation type.
G4int GetParentID() const
Definition of the Par02EventInformation class.
static const double MeV
Definition: G4SIunits.hh:211
const G4Track * GetPrimaryTrack() const
Definition: G4FastTrack.hh:208
Definition of detector resolution and efficiency.
static Par02Smearer * Instance()
Allows the access to the unique Par02Smearer class object.
Definition: Par02Smearer.cc:59
virtual G4bool IsApplicable(const G4ParticleDefinition &aParticle)
Checks if this model should be applied to this particle type.
CLHEP::Hep3Vector G4ThreeVector
const G4DynamicParticle * GetDynamicParticle() const
void SetHCalResolution(G4double aResolution)
Sets the hadronic calorimeter resolution. Currently equal to -1 if AtlFast type of smearing is used...
const G4ThreeVector & GetPosition() const
Parametrisation
A parametrisation type (CMS, ATLAS, ALEPH).
Par02FastSimModelHCal(G4String aModelName, G4Region *aEnvelope, Par02DetectorParametrisation::Parametrisation aParamType)
A constructor.
Par02DetectorParametrisation * fCalculateParametrisation
A pointer to Par02DetectorParametrisation used to get the efficiency and resolution of the detector f...
Definition of the Par02PrimaryParticleInformation class.
void FillHistogram(G4int HNo, G4double value) const
Fills the histogram.
Definition: Par02Output.cc:219
Definition of the Par02Smearer class.
G4double GetKineticEnergy() const
bool G4bool
Definition: G4Types.hh:79
void ProposePrimaryTrackPathLength(G4double)
G4int GetQuarkContent(G4int flavor) const
Definition of the Par02Output class.
static Par02Output * Instance()
Allows the access to the unique Par02Output object.
Definition: Par02Output.cc:60
void SetHCalEnergy(G4double aEnergy)
Sets the energy deposit in the hadronic calorimeter.
G4PrimaryParticle * GetPrimaryParticle() const
G4ThreeVector GetMomentum() const
Definition of the Par02FastSimModelHCal class.
static G4EventManager * GetEventManager()
virtual void DoIt(const G4FastTrack &aFastTrack, G4FastStep &aFastStep)
Smears the energy deposit and saves it, together with the position of the deposit, the hadronic calorimeter resolution and efficiency to the Par02PrimaryParticleInformation.
void ProposeTotalEnergyDeposited(G4double anEnergyPart)
void KillPrimaryTrack()
Definition: G4FastStep.cc:87
virtual G4bool ModelTrigger(const G4FastTrack &aFastTrack)
Checks if the model should be applied, taking into account the kinematics of a track.
double G4double
Definition: G4Types.hh:76
void SetHCalPosition(G4ThreeVector aPosition)
Sets the position of the energy deposit in the hadronic calorimeter.
G4bool GetDoSmearing()
Gets the flag indicating if smearing should be done.
void SetHCalEfficiency(G4double aEfficiency)
Sets the hadronic calorimeter efficiency. Currently not used (efficiency is 1).
G4VUserEventInformation * GetUserInformation()