240{
245
246 const G4HadProjectile* aParticle = &aTrack;
248
250
252 {
256 }
257
259
261 {
262
266 }
267
268
269
273
274
278 G4double cost(1.), sint(0.), phi(0.), muMom(0.), massX2(0.), massX(0.), massR(0.), eCut(0.);
279 G4DynamicParticle* aLept = nullptr;
280
284 G4int pdgP(0), qB(0);
285
286
289
291 {
292
293 lvsum = lvp1 + lvt1;
294
296 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
298 eP =
G4ThreeVector( sint*std::cos(phi), sint*std::sin(phi), cost );
299
300
302
303 eP *= muMom;
304
305
306
308
309
314
315 if ( massX2 <= 0. )
316 {
321 }
323
324 if( pName ==
"nu_mu" ) aLept =
new G4DynamicParticle(
theMuonMinus, lv2 );
325
326 else
327 {
331 }
332 if( pName == "nu_mu" ) pdgP = 211;
333
334
335
337 {
338 eCut = (
fMpi + mTarg)*(
fMpi + mTarg) - (massX + massR)*(massX + massR);
339 eCut /= 2.*massR;
340 eCut += massX;
341 }
343
344 if ( lvX.
e() > eCut )
345 {
347 }
348 else
349 {
354 }
356
358 }
359 else
360 {
361 lvsum = lvp1 + lvt1;
363 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
365 eP =
G4ThreeVector( sint*std::cos(phi), sint*std::sin(phi), cost );
366
368
369 eP *= muMom;
370
373 lvX = lvsum - lv2;
376
377 if ( massX2 <= 0. )
378 {
383 }
385
386 if( pName ==
"nu_mu" ) aLept =
new G4DynamicParticle(
theMuonMinus, lv2 );
387
388 else
389 {
393 }
395 }
396
397
398
400
402 {
403 if( pName == "nu_mu" ) qB = 2;
404
405
406
407 {
409 }
411 }
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427 G4Nucleus recoil;
429
431 {
433 recoil = G4Nucleus(
A-1,Z-1);
436
437 if( pName == "nu_mu" )
438 {
441 }
442 else
443 {
444
445
446 }
447 }
448 else
449 {
451 recoil = G4Nucleus(
A-1,Z);
454
455 if( pName == "nu_mu" )
456 {
459 }
460 else
461 {
462
463
464 }
465 }
466
468
471
475
476
477
479 {
481
483 {
485 fMr = proton_mass_c2;
486 recoil = G4Nucleus(
A-1,Z-1);
489 }
490 else
491 {
495 recoil = G4Nucleus(
A-1,Z);
498 }
499
501
502 if( eX <= eTh )
503 {
508 }
509
511 }
512 else
513 {
514 if (
fProton && pName ==
"nu_mu" ) qB = 2;
515
516 else if( !
fProton && pName ==
"nu_mu" ) qB = 1;
517
518
519
521 }
523}
CLHEP::HepLorentzVector G4LorentzVector
CLHEP::Hep3Vector G4ThreeVector
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
G4double GetTotalEnergy() const
G4HadFinalState theParticleChange
void CoherentPion(G4LorentzVector &lvP, G4int pdgP, G4Nucleus &targetNucleus)
G4int GetOnePionIndex(G4double energy)
G4ParticleDefinition * theMuonMinus
G4double GetNuMuOnePionProb(G4int index, G4double energy)
G4double CalculateQEratioA(G4int Z, G4int A, G4double energy, G4int nepdg)
void ClusterDecay(G4LorentzVector &lvX, G4int qX)
void FinalBarion(G4LorentzVector &lvB, G4int qB, G4int pdgB)
void SampleLVkr(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
G4double AtomicMass(const G4double A, const G4double Z, const G4int numberOfLambdas=0) const
G4double GetPDGMass() const
G4int GetPDGEncoding() const
const G4String & GetParticleName() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
G4double energy(const ThreeVector &p, const G4double m)