Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ParticleHPInelastic Class Reference

#include <G4ParticleHPInelastic.hh>

+ Inheritance diagram for G4ParticleHPInelastic:

Public Member Functions

 G4ParticleHPInelastic (G4ParticleDefinition *projectile=G4Neutron::Neutron(), const char *name="NeutronHPInelastic")
 
 ~G4ParticleHPInelastic ()
 
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
 
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
 
G4int GetVerboseLevel () const
 
void SetVerboseLevel (G4int)
 
void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void ModelDescription (std::ostream &outFile) const
 
- Public Member Functions inherited from G4HadronicInteraction
 G4HadronicInteraction (const G4String &modelName="HadronicModel")
 
virtual ~G4HadronicInteraction ()
 
virtual G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
G4double GetMinEnergy () const
 
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMinEnergy (G4double anEnergy)
 
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
 
G4double GetMaxEnergy () const
 
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMaxEnergy (const G4double anEnergy)
 
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
 
G4int GetVerboseLevel () const
 
void SetVerboseLevel (G4int value)
 
const G4StringGetModelName () const
 
void DeActivateFor (const G4Material *aMaterial)
 
void ActivateFor (const G4Material *aMaterial)
 
void DeActivateFor (const G4Element *anElement)
 
void ActivateFor (const G4Element *anElement)
 
G4bool IsBlocked (const G4Material *aMaterial) const
 
G4bool IsBlocked (const G4Element *anElement) const
 
void SetRecoilEnergyThreshold (G4double val)
 
G4double GetRecoilEnergyThreshold () const
 
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
 
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
virtual void ModelDescription (std::ostream &outFile) const
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void InitialiseModel ()
 
 G4HadronicInteraction (const G4HadronicInteraction &right)=delete
 
const G4HadronicInteractionoperator= (const G4HadronicInteraction &right)=delete
 
G4bool operator== (const G4HadronicInteraction &right) const =delete
 
G4bool operator!= (const G4HadronicInteraction &right) const =delete
 

Protected Attributes

std::vector< G4ParticleHPChannelList * > * theInelastic
 
G4String dataDirVariable
 
G4String dirName
 
G4int numEle
 
- Protected Attributes inherited from G4HadronicInteraction
G4HadFinalState theParticleChange
 
G4int verboseLevel
 
G4double theMinEnergy
 
G4double theMaxEnergy
 
G4bool isBlocked
 

Additional Inherited Members

- Protected Member Functions inherited from G4HadronicInteraction
void SetModelName (const G4String &nam)
 
G4bool IsBlocked () const
 
void Block ()
 

Detailed Description

Definition at line 89 of file G4ParticleHPInelastic.hh.

Constructor & Destructor Documentation

◆ G4ParticleHPInelastic()

G4ParticleHPInelastic::G4ParticleHPInelastic ( G4ParticleDefinition projectile = G4Neutron::Neutron(),
const char *  name = "NeutronHPInelastic" 
)

Definition at line 47 of file G4ParticleHPInelastic.cc.

49 ,theInelastic(NULL)
50 ,numEle(0)
51 ,theProjectile(projectile)
52{
53 G4String baseName;
54 if ( std::getenv("G4PARTICLEHPDATA") ) {
55 baseName = std::getenv( "G4PARTICLEHPDATA" );
56 }
57 //const char* dataDirVariable;
58 G4String particleName;
59 if ( theProjectile == G4Neutron::Neutron() ) {
60 dataDirVariable = "G4NEUTRONHPDATA";
61 } else if( theProjectile == G4Proton::Proton() ) {
62 dataDirVariable = "G4PROTONHPDATA";
63 particleName = "Proton";
64 } else if( theProjectile == G4Deuteron::Deuteron() ) {
65 dataDirVariable = "G4DEUTERONHPDATA";
66 particleName = "Deuteron";
67 } else if( theProjectile == G4Triton::Triton() ) {
68 dataDirVariable = "G4TRITONHPDATA";
69 particleName = "Triton";
70 } else if( theProjectile == G4He3::He3() ) {
71 dataDirVariable = "G4HE3HPDATA";
72 particleName = "He3";
73 } else if( theProjectile == G4Alpha::Alpha() ) {
74 dataDirVariable = "G4ALPHAHPDATA";
75 particleName = "Alpha";
76 } else {
77 G4String message("G4ParticleHPInelastic may only be called for neutron, proton, deuteron, triton, He3 or alpha, while it is called for " + theProjectile->GetParticleName());
78 throw G4HadronicException(__FILE__, __LINE__,message.c_str());
79 }
80
81 SetMinEnergy( 0.0 );
82 SetMaxEnergy( 20.*MeV );
83
84 //G4cout << " entering G4ParticleHPInelastic constructor"<<G4endl;
85 if ( !std::getenv("G4PARTICLEHPDATA") && !std::getenv(dataDirVariable) ) {
86 G4String message("Please setenv G4PARTICLEHPDATA (recommended) or, at least setenv " +
87 G4String(dataDirVariable) + " to point to the " + theProjectile->GetParticleName() + " cross-section files." );
88 throw G4HadronicException(__FILE__, __LINE__,message.c_str());
89 }
90 if ( std::getenv(dataDirVariable) ) {
91 dirName = std::getenv(dataDirVariable);
92 } else {
93 dirName = baseName + "/" + particleName;
94 }
95
96 #ifdef G4VERBOSE
98 #endif
99
100 G4String tString = "/Inelastic";
101 dirName = dirName + tString;
102 //numEle = G4Element::GetNumberOfElements();
103
104 #ifdef G4VERBOSE
106 G4cout << "@@@ G4ParticleHPInelastic instantiated for particle " << theProjectile->GetParticleName() << " data directory variable is " << dataDirVariable << " pointing to " << dirName << G4endl;
107 #endif
108
109/*
110 theInelastic = new G4ParticleHPChannelList[numEle];
111 for (G4int i=0; i<numEle; i++)
112 {
113 theInelastic[i].Init((*(G4Element::GetElementTable()))[i], dirName);
114 G4int itry = 0;
115 do
116 {
117 theInelastic[i].Register(&theNFS, "F01"); // has
118 theInelastic[i].Register(&theNXFS, "F02");
119 theInelastic[i].Register(&the2NDFS, "F03");
120 theInelastic[i].Register(&the2NFS, "F04"); // has, E Done
121 theInelastic[i].Register(&the3NFS, "F05"); // has, E Done
122 theInelastic[i].Register(&theNAFS, "F06");
123 theInelastic[i].Register(&theN3AFS, "F07");
124 theInelastic[i].Register(&the2NAFS, "F08");
125 theInelastic[i].Register(&the3NAFS, "F09");
126 theInelastic[i].Register(&theNPFS, "F10");
127 theInelastic[i].Register(&theN2AFS, "F11");
128 theInelastic[i].Register(&the2N2AFS, "F12");
129 theInelastic[i].Register(&theNDFS, "F13");
130 theInelastic[i].Register(&theNTFS, "F14");
131 theInelastic[i].Register(&theNHe3FS, "F15");
132 theInelastic[i].Register(&theND2AFS, "F16");
133 theInelastic[i].Register(&theNT2AFS, "F17");
134 theInelastic[i].Register(&the4NFS, "F18"); // has, E Done
135 theInelastic[i].Register(&the2NPFS, "F19");
136 theInelastic[i].Register(&the3NPFS, "F20");
137 theInelastic[i].Register(&theN2PFS, "F21");
138 theInelastic[i].Register(&theNPAFS, "F22");
139 theInelastic[i].Register(&thePFS, "F23");
140 theInelastic[i].Register(&theDFS, "F24");
141 theInelastic[i].Register(&theTFS, "F25");
142 theInelastic[i].Register(&theHe3FS, "F26");
143 theInelastic[i].Register(&theAFS, "F27");
144 theInelastic[i].Register(&the2AFS, "F28");
145 theInelastic[i].Register(&the3AFS, "F29");
146 theInelastic[i].Register(&the2PFS, "F30");
147 theInelastic[i].Register(&thePAFS, "F31");
148 theInelastic[i].Register(&theD2AFS, "F32");
149 theInelastic[i].Register(&theT2AFS, "F33");
150 theInelastic[i].Register(&thePDFS, "F34");
151 theInelastic[i].Register(&thePTFS, "F35");
152 theInelastic[i].Register(&theDAFS, "F36");
153 theInelastic[i].RestartRegistration();
154 itry++;
155 }
156 //while(!theInelastic[i].HasDataInAnyFinalState());
157 while( !theInelastic[i].HasDataInAnyFinalState() && itry < 6 );
158 // 6 is corresponding to the value(5) of G4ParticleHPChannel. TK
159
160 if ( itry == 6 )
161 {
162 // No Final State at all.
163 G4bool exceptional = false;
164 if ( (*(G4Element::GetElementTable()))[i]->GetNumberOfIsotopes() == 1 )
165 {
166 if ( (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetZ() == 1 && (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetN() == 1 ) exceptional = true; //1H
167 }
168 if ( !exceptional ) throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not know what to do with this element");
169 }
170 }
171*/
172/*
173 for (G4int i=0; i<numEle; i++)
174 {
175 theInelastic.push_back( new G4ParticleHPChannelList );
176 (*theInelastic[i]).Init((*(G4Element::GetElementTable()))[i], dirName, theProjectile);
177 G4int itry = 0;
178 do
179 {
180 (*theInelastic[i]).Register(&theNFS, "F01"); // has
181 (*theInelastic[i]).Register(&theNXFS, "F02");
182 (*theInelastic[i]).Register(&the2NDFS, "F03");
183 (*theInelastic[i]).Register(&the2NFS, "F04"); // has, E Done
184 (*theInelastic[i]).Register(&the3NFS, "F05"); // has, E Done
185 (*theInelastic[i]).Register(&theNAFS, "F06");
186 (*theInelastic[i]).Register(&theN3AFS, "F07");
187 (*theInelastic[i]).Register(&the2NAFS, "F08");
188 (*theInelastic[i]).Register(&the3NAFS, "F09");
189 (*theInelastic[i]).Register(&theNPFS, "F10");
190 (*theInelastic[i]).Register(&theN2AFS, "F11");
191 (*theInelastic[i]).Register(&the2N2AFS, "F12");
192 (*theInelastic[i]).Register(&theNDFS, "F13");
193 (*theInelastic[i]).Register(&theNTFS, "F14");
194 (*theInelastic[i]).Register(&theNHe3FS, "F15");
195 (*theInelastic[i]).Register(&theND2AFS, "F16");
196 (*theInelastic[i]).Register(&theNT2AFS, "F17");
197 (*theInelastic[i]).Register(&the4NFS, "F18"); // has, E Done
198 (*theInelastic[i]).Register(&the2NPFS, "F19");
199 (*theInelastic[i]).Register(&the3NPFS, "F20");
200 (*theInelastic[i]).Register(&theN2PFS, "F21");
201 (*theInelastic[i]).Register(&theNPAFS, "F22");
202 (*theInelastic[i]).Register(&thePFS, "F23");
203 (*theInelastic[i]).Register(&theDFS, "F24");
204 (*theInelastic[i]).Register(&theTFS, "F25");
205 (*theInelastic[i]).Register(&theHe3FS, "F26");
206 (*theInelastic[i]).Register(&theAFS, "F27");
207 (*theInelastic[i]).Register(&the2AFS, "F28");
208 (*theInelastic[i]).Register(&the3AFS, "F29");
209 (*theInelastic[i]).Register(&the2PFS, "F30");
210 (*theInelastic[i]).Register(&thePAFS, "F31");
211 (*theInelastic[i]).Register(&theD2AFS, "F32");
212 (*theInelastic[i]).Register(&theT2AFS, "F33");
213 (*theInelastic[i]).Register(&thePDFS, "F34");
214 (*theInelastic[i]).Register(&thePTFS, "F35");
215 (*theInelastic[i]).Register(&theDAFS, "F36");
216 (*theInelastic[i]).RestartRegistration();
217 itry++;
218 }
219 while( !(*theInelastic[i]).HasDataInAnyFinalState() && itry < 6 );
220 // 6 is corresponding to the value(5) of G4ParticleHPChannel. TK
221
222 if ( itry == 6 )
223 {
224 // No Final State at all.
225 G4bool exceptional = false;
226 if ( (*(G4Element::GetElementTable()))[i]->GetNumberOfIsotopes() == 1 )
227 {
228 if ( (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetZ() == 1 && (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetN() == 1 ) exceptional = true; //1H
229 }
230 if ( !exceptional ) {
231 G4cerr << " ELEMENT Z " << (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetZ() << " N " << (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetN() << G4endl; //1H
232throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not know what to do with this element");
233 }
234 }
235
236 }
237*/
238
239 }
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4Alpha * Alpha()
Definition: G4Alpha.cc:88
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:93
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
static G4HadronicParameters * Instance()
static G4He3 * He3()
Definition: G4He3.cc:93
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
const G4String & GetParticleName() const
std::vector< G4ParticleHPChannelList * > * theInelastic
static G4Proton * Proton()
Definition: G4Proton.cc:92
static G4Triton * Triton()
Definition: G4Triton.cc:94

◆ ~G4ParticleHPInelastic()

G4ParticleHPInelastic::~G4ParticleHPInelastic ( )

Definition at line 241 of file G4ParticleHPInelastic.cc.

242 {
243// delete [] theInelastic;
244 //Vector is shared, only master deletes
246 if ( theInelastic != NULL ) {
247 for ( std::vector<G4ParticleHPChannelList*>::iterator
248 it = theInelastic->begin() ; it != theInelastic->end() ; it++ ) {
249 delete *it;
250 }
251 theInelastic->clear();
252 }
253 }
254 }
G4bool IsWorkerThread()
Definition: G4Threading.cc:123

Member Function Documentation

◆ ApplyYourself()

G4HadFinalState * G4ParticleHPInelastic::ApplyYourself ( const G4HadProjectile aTrack,
G4Nucleus aTargetNucleus 
)
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 258 of file G4ParticleHPInelastic.cc.

259 {
261 const G4Material * theMaterial = aTrack.GetMaterial();
262 G4int n = theMaterial->GetNumberOfElements();
263 G4int index = theMaterial->GetElement(0)->GetIndex();
264 G4int it=0;
265 if(n!=1)
266 {
267 G4double* xSec = new G4double[n];
268 G4double sum=0;
269 G4int i;
270 const G4double * NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume();
271 G4double rWeight;
272 G4ParticleHPThermalBoost aThermalE;
273 for (i=0; i<n; i++)
274 {
275 index = theMaterial->GetElement(i)->GetIndex();
276 rWeight = NumAtomsPerVolume[i];
277 if ( aTrack.GetDefinition() == G4Neutron::Neutron() ) {
278 xSec[i] = ((*theInelastic)[index])->GetXsec(aThermalE.GetThermalEnergy(aTrack,
279 theMaterial->GetElement(i),
280 theMaterial->GetTemperature()));
281 } else {
282 xSec[i] = ((*theInelastic)[index])->GetXsec(aTrack.GetKineticEnergy());
283 }
284 xSec[i] *= rWeight;
285 sum+=xSec[i];
286#ifdef G4PHPDEBUG
287 #ifdef G4VERBOSE
288 if( std::getenv("G4ParticleHPDebug") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 )
289 G4cout << " G4ParticleHPInelastic XSEC ELEM " << i << " = " << xSec[i] << G4endl;
290 #endif
291#endif
292
293 }
294 G4double random = G4UniformRand();
295 G4double running = 0;
296 for (i=0; i<n; i++)
297 {
298 running += xSec[i];
299 index = theMaterial->GetElement(i)->GetIndex();
300 it = i;
301 //if(random<=running/sum) break;
302 if( sum == 0 || random<=running/sum) break;
303 }
304 delete [] xSec;
305 }
306
307#ifdef G4PHPDEBUG
308 #ifdef G4VERBOSE
309 if( std::getenv("G4ParticleHPDebug") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 )
310 G4cout << " G4ParticleHPInelastic SELECTED ELEM " << it << " = " << theMaterial->GetElement(it)->GetName() << " FROM MATERIAL " << theMaterial->GetName() << G4endl;
311 #endif
312#endif
313 //return theInelastic[index].ApplyYourself(theMaterial->GetElement(it), aTrack);
314 G4HadFinalState* result = ((*theInelastic)[index])->ApplyYourself(theMaterial->GetElement(it), aTrack);
315 //
317 const G4Element* target_element = (*G4Element::GetElementTable())[index];
318 const G4Isotope* target_isotope=NULL;
319 G4int iele = target_element->GetNumberOfIsotopes();
320 for ( G4int j = 0 ; j != iele ; j++ ) {
321 target_isotope=target_element->GetIsotope( j );
322 if ( target_isotope->GetN() == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA() ) break;
323 }
324 //G4cout << "Target Material of this reaction is " << theMaterial->GetName() << G4endl;
325 //G4cout << "Target Element of this reaction is " << target_element->GetName() << G4endl;
326 //G4cout << "Target Isotope of this reaction is " << target_isotope->GetName() << G4endl;
327 aNucleus.SetIsotope( target_isotope );
328
330
331 //GDEB
332 if( std::getenv("G4PHPTEST") ) {
333 G4HadSecondary* seco = result->GetSecondary(0);
334 if(seco) {
335 G4ThreeVector secoMom = seco->GetParticle()->GetMomentum();
336 #ifdef G4VERBOSE
338 G4cout << " G4ParticleHPinelastic COS THETA " << std::cos(secoMom.theta()) <<" " << secoMom << G4endl;
339 #endif
340 }
341 }
342
343 return result;
344 }
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4UniformRand()
Definition: Randomize.hh:52
double theta() const
G4ThreeVector GetMomentum() const
static G4ElementTable * GetElementTable()
Definition: G4Element.cc:397
const G4Isotope * GetIsotope(G4int iso) const
Definition: G4Element.hh:169
size_t GetIndex() const
Definition: G4Element.hh:181
size_t GetNumberOfIsotopes() const
Definition: G4Element.hh:158
const G4String & GetName() const
Definition: G4Element.hh:126
G4HadSecondary * GetSecondary(size_t i)
const G4Material * GetMaterial() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4DynamicParticle * GetParticle()
G4int GetN() const
Definition: G4Isotope.hh:93
G4double GetTemperature() const
Definition: G4Material.hh:180
const G4Element * GetElement(G4int iel) const
Definition: G4Material.hh:200
size_t GetNumberOfElements() const
Definition: G4Material.hh:184
const G4double * GetVecNbOfAtomsPerVolume() const
Definition: G4Material.hh:204
const G4String & GetName() const
Definition: G4Material.hh:175
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
static G4ParticleHPManager * GetInstance()
G4ParticleHPReactionWhiteBoard * GetReactionWhiteBoard()
G4double GetThermalEnergy(const G4HadProjectile &aP, const G4Element *anE, G4double aT)

Referenced by ApplyYourself().

◆ BuildPhysicsTable()

void G4ParticleHPInelastic::BuildPhysicsTable ( const G4ParticleDefinition projectile)
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 468 of file G4ParticleHPInelastic.cc.

468 {
469
471
472 theInelastic = hpmanager->GetInelasticFinalStates( &projectile );
473
475
476 if ( theInelastic == NULL ) theInelastic = new std::vector<G4ParticleHPChannelList*>;
477
478 if ( numEle == (G4int)G4Element::GetNumberOfElements() ) return;
479
480 if ( theInelastic->size() == G4Element::GetNumberOfElements() ) {
482 return;
483 }
484/*
485 const char* dataDirVariable;
486 if( &projectile == G4Neutron::Neutron() ) {
487 dataDirVariable = "G4NEUTRONHPDATA";
488 }else if( &projectile == G4Proton::Proton() ) {
489 dataDirVariable = "G4PROTONHPDATA";
490 }else if( &projectile == G4Deuteron::Deuteron() ) {
491 dataDirVariable = "G4DEUTERONHPDATA";
492 }else if( &projectile == G4Triton::Triton() ) {
493 dataDirVariable = "G4TRITONHPDATA";
494 }else if( &projectile == G4He3::He3() ) {
495 dataDirVariable = "G4HE3HPDATA";
496 }else if( &projectile == G4Alpha::Alpha() ) {
497 dataDirVariable = "G4ALPHAHPDATA";
498 } else {
499 G4String message("G4ParticleHPInelastic may only be called for neutron, proton, deuteron, triton, He3 or alpha, while it is called for " + projectile.GetParticleName());
500 throw G4HadronicException(__FILE__, __LINE__,message.c_str());
501 }
502 if(!std::getenv(dataDirVariable)){
503 G4String message("Please set the environment variable " + G4String(dataDirVariable) + " to point to the " + projectile.GetParticleName() + " cross-section files.");
504 throw G4HadronicException(__FILE__, __LINE__,message.c_str());
505 }
506 dirName = std::getenv(dataDirVariable);
507 G4cout << dirName << G4endl;
508
509 G4String tString = "/Inelastic";
510 dirName = dirName + tString;
511
512*/
513 #ifdef G4VERBOSE
515 hpmanager->DumpSetting();
516 G4cout << "@@@ G4ParticleHPInelastic instantiated for particle " << projectile.GetParticleName() << " data directory variable is " << dataDirVariable << " pointing to " << dirName << G4endl;
517 }
518 #endif
519 for (G4int i = numEle ; i < (G4int)G4Element::GetNumberOfElements(); i++)
520 {
521 theInelastic->push_back( new G4ParticleHPChannelList );
522 ((*theInelastic)[i])->Init((*(G4Element::GetElementTable()))[i], dirName, const_cast<G4ParticleDefinition*>(&projectile));
523 G4int itry = 0;
524 do
525 {
526 ((*theInelastic)[i])->Register( new G4ParticleHPNInelasticFS , "F01"); // has
527 ((*theInelastic)[i])->Register( new G4ParticleHPNXInelasticFS , "F02");
528 ((*theInelastic)[i])->Register( new G4ParticleHP2NDInelasticFS , "F03");
529 ((*theInelastic)[i])->Register( new G4ParticleHP2NInelasticFS , "F04"); // has, E Done
530 ((*theInelastic)[i])->Register( new G4ParticleHP3NInelasticFS , "F05"); // has, E Done
531 ((*theInelastic)[i])->Register( new G4ParticleHPNAInelasticFS , "F06");
532 ((*theInelastic)[i])->Register( new G4ParticleHPN3AInelasticFS , "F07");
533 ((*theInelastic)[i])->Register( new G4ParticleHP2NAInelasticFS , "F08");
534 ((*theInelastic)[i])->Register( new G4ParticleHP3NAInelasticFS , "F09");
535 ((*theInelastic)[i])->Register( new G4ParticleHPNPInelasticFS , "F10");
536 ((*theInelastic)[i])->Register( new G4ParticleHPN2AInelasticFS , "F11");
537 ((*theInelastic)[i])->Register( new G4ParticleHP2N2AInelasticFS , "F12");
538 ((*theInelastic)[i])->Register( new G4ParticleHPNDInelasticFS , "F13");
539 ((*theInelastic)[i])->Register( new G4ParticleHPNTInelasticFS , "F14");
540 ((*theInelastic)[i])->Register( new G4ParticleHPNHe3InelasticFS , "F15");
541 ((*theInelastic)[i])->Register( new G4ParticleHPND2AInelasticFS , "F16");
542 ((*theInelastic)[i])->Register( new G4ParticleHPNT2AInelasticFS , "F17");
543 ((*theInelastic)[i])->Register( new G4ParticleHP4NInelasticFS , "F18"); // has, E Done
544 ((*theInelastic)[i])->Register( new G4ParticleHP2NPInelasticFS , "F19");
545 ((*theInelastic)[i])->Register( new G4ParticleHP3NPInelasticFS , "F20");
546 ((*theInelastic)[i])->Register( new G4ParticleHPN2PInelasticFS , "F21");
547 ((*theInelastic)[i])->Register( new G4ParticleHPNPAInelasticFS , "F22");
548 ((*theInelastic)[i])->Register( new G4ParticleHPPInelasticFS , "F23");
549 ((*theInelastic)[i])->Register( new G4ParticleHPDInelasticFS , "F24");
550 ((*theInelastic)[i])->Register( new G4ParticleHPTInelasticFS , "F25");
551 ((*theInelastic)[i])->Register( new G4ParticleHPHe3InelasticFS , "F26");
552 ((*theInelastic)[i])->Register( new G4ParticleHPAInelasticFS , "F27");
553 ((*theInelastic)[i])->Register( new G4ParticleHP2AInelasticFS , "F28");
554 ((*theInelastic)[i])->Register( new G4ParticleHP3AInelasticFS , "F29");
555 ((*theInelastic)[i])->Register( new G4ParticleHP2PInelasticFS , "F30");
556 ((*theInelastic)[i])->Register( new G4ParticleHPPAInelasticFS , "F31");
557 ((*theInelastic)[i])->Register( new G4ParticleHPD2AInelasticFS , "F32");
558 ((*theInelastic)[i])->Register( new G4ParticleHPT2AInelasticFS , "F33");
559 ((*theInelastic)[i])->Register( new G4ParticleHPPDInelasticFS , "F34");
560 ((*theInelastic)[i])->Register( new G4ParticleHPPTInelasticFS , "F35");
561 ((*theInelastic)[i])->Register( new G4ParticleHPDAInelasticFS , "F36");
562 ((*theInelastic)[i])->RestartRegistration();
563 itry++;
564 }
565 while( !((*theInelastic)[i])->HasDataInAnyFinalState() && itry < 6 ); // Loop checking, 11.05.2015, T. Koi
566 // 6 is corresponding to the value(5) of G4ParticleHPChannel. TK
567
568 if ( itry == 6 ) {
569 // No Final State at all.
570 /*
571 G4bool exceptional = false;
572 if ( (*(G4Element::GetElementTable()))[i]->GetNumberOfIsotopes() == 1 )
573 {
574 if ( (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetZ() == 1 && (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetN() == 1 ) exceptional = true; //1H
575 }
576 if ( !exceptional ) {
577 G4cerr << " ELEMENT Z " << (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetZ() << " N " << (*(G4Element::GetElementTable()))[i]->GetIsotope( 0 )->GetN() << G4endl; //1H
578 throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not know what to do with this element");
579 }
580 */
581 #ifdef G4VERBOSE
584 G4cout << "ParticleHP::Inelastic for " << projectile.GetParticleName() << ". Do not know what to do with element of \"" << (*(G4Element::GetElementTable()))[i]->GetName() << "\"." << G4endl;
585 G4cout << "The components of the element are" << G4endl;
586 //G4cout << "TKDB dataDirVariable = " << dataDirVariable << G4endl;
587 for ( G4int ii = 0 ; ii < (G4int)( (*(G4Element::GetElementTable()))[i]->GetNumberOfIsotopes() ) ; ii++ ) {
588 G4cout << " Z: " << (*(G4Element::GetElementTable()))[i]->GetIsotope( ii )->GetZ() << ", A: " << (*(G4Element::GetElementTable()))[i]->GetIsotope( ii )->GetN() << G4endl;
589 }
590 G4cout << "No possible final state data of the element is found in " << dataDirVariable << "." << G4endl;
591 }
592 #endif
593 }
594 }
595 hpmanager->RegisterInelasticFinalStates( &projectile , theInelastic );
596 }
598}
static size_t GetNumberOfElements()
Definition: G4Element.cc:404
std::vector< G4ParticleHPChannelList * > * GetInelasticFinalStates(const G4ParticleDefinition *)
void RegisterInelasticFinalStates(const G4ParticleDefinition *, std::vector< G4ParticleHPChannelList * > *)
void Register(T *inst)
Definition: G4AutoDelete.hh:65
G4bool IsMasterThread()
Definition: G4Threading.cc:124
void Init()
Definition: G4IonTable.cc:77

◆ GetFatalEnergyCheckLevels()

const std::pair< G4double, G4double > G4ParticleHPInelastic::GetFatalEnergyCheckLevels ( ) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 346 of file G4ParticleHPInelastic.cc.

347{
348 // max energy non-conservation is mass of heavy nucleus
349 // This should be same to the hadron default value
350 return std::pair<G4double, G4double>(10*perCent,DBL_MAX);
351}
#define DBL_MAX
Definition: templates.hh:62

◆ GetVerboseLevel()

G4int G4ParticleHPInelastic::GetVerboseLevel ( ) const

◆ ModelDescription()

void G4ParticleHPInelastic::ModelDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 600 of file G4ParticleHPInelastic.cc.

601{
602 outFile << "Extension of High Precision model for inelastic reaction of proton, deuteron, triton, He3 and alpha below 20MeV\n";
603}

◆ SetVerboseLevel()

void G4ParticleHPInelastic::SetVerboseLevel ( G4int  newValue)

Definition at line 426 of file G4ParticleHPInelastic.cc.

427{
429}

Member Data Documentation

◆ dataDirVariable

G4String G4ParticleHPInelastic::dataDirVariable
protected

Definition at line 110 of file G4ParticleHPInelastic.hh.

Referenced by BuildPhysicsTable(), and G4ParticleHPInelastic().

◆ dirName

G4String G4ParticleHPInelastic::dirName
protected

Definition at line 111 of file G4ParticleHPInelastic.hh.

Referenced by BuildPhysicsTable(), and G4ParticleHPInelastic().

◆ numEle

G4int G4ParticleHPInelastic::numEle
protected

Definition at line 112 of file G4ParticleHPInelastic.hh.

Referenced by BuildPhysicsTable().

◆ theInelastic

std::vector<G4ParticleHPChannelList*>* G4ParticleHPInelastic::theInelastic
protected

Definition at line 109 of file G4ParticleHPInelastic.hh.

Referenced by BuildPhysicsTable(), and ~G4ParticleHPInelastic().


The documentation for this class was generated from the following files: