ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4GEMChannelVI.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4GEMChannelVI.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 // GEM de-excitation model
28 // by V. Ivanchenko (July 2019)
29 //
30 
31 #include "G4GEMChannelVI.hh"
32 #include "G4GEMProbabilityVI.hh"
33 #include "G4VCoulombBarrier.hh"
34 #include "G4CoulombBarrier.hh"
35 #include "G4PairingCorrection.hh"
36 #include "G4NuclearLevelData.hh"
37 #include "G4LevelManager.hh"
38 #include "G4NucleiProperties.hh"
39 #include "G4RandomDirection.hh"
40 
42  : A(theA), Z(theZ)
43 {
46  const G4LevelManager* lManager = nullptr;
47  if(A > 4) { lManager = nData->GetLevelManager(Z, A); }
50 
51  cBarrier = new G4CoulombBarrier(A, Z);
52  fProbability = new G4GEMProbabilityVI(A, Z, lManager);
53 
54  resA = resZ = fragZ = fragA = 0;
55  mass = resMass = 0.0;
56 }
57 
59 {
60  delete cBarrier;
61  delete fProbability;
62 }
63 
65 {
67  fragZ = fragment->GetZ_asInt();
68  fragA = fragment->GetA_asInt();
69  resZ = fragZ - Z;
70  resA = fragA - A;
71  if(resA < A || resA < resZ || resZ < 0 || (resA == A && resZ < Z)) {
72  return 0.0;
73  }
74 
75  const G4double exc = fragment->GetExcitationEnergy();
76  const G4double delta0 =
78  if(exc < delta0) { return 0.0; }
79 
81  const G4double fragM = fragment->GetGroundStateMass() + exc;
82  const G4double CB = cBarrier->GetCoulombBarrier(resA, resZ, exc);
83 
84  const G4double delta1 =
86  if(fragM <= resMass + CB + delta1) { return 0.0; }
87 
89  G4double prob = fProbability->ComputeTotalProbability(*fragment, CB);
90  //G4cout<<"G4EvaporationChannel: probability= "<< prob <<G4endl;
91  return prob;
92 }
93 
95 {
96  // assumed, that TotalProbability(...) was already called
97  // if value iz zero no possiblity to sample final state
98  G4Fragment* evFragment = nullptr;
99  G4LorentzVector lv0 = theNucleus->GetMomentum();
100  if(resA <= 4 || fProbability->GetProbability() == 0.0) {
101  G4double ekin =
103  - evapMass, 0.0);
104  G4LorentzVector lv(std::sqrt(ekin*(ekin + 2.0*evapMass))
105  *G4RandomDirection(), ekin + evapMass);
106  lv.boost(lv0.boostVector());
107  evFragment = new G4Fragment(A, Z, lv);
108  lv0 -= lv;
109  } else {
110  evFragment = fProbability->SampleEvaporationFragment();
111  G4LorentzVector lv = evFragment->GetMomentum();
112  lv.boost(lv0.boostVector());
113  evFragment->SetMomentum(lv);
114  lv0 -= lv;
115  }
116  theNucleus->SetZandA_asInt(resZ, resA);
117  theNucleus->SetMomentum(lv0);
118 
119  return evFragment;
120 }
121 
123 {}
124 
125 
126