44 #ifdef CEXMC_USE_GENBOD
53 extern int genbod_(
void );
57 extern struct genbod_in_data
66 extern struct genbod_out_data
73 CexmcGenbod::CexmcGenbod()
80 G4bool CexmcGenbod::CheckKinematics(
void )
83 for ( CexmcPhaseSpaceInVector::const_iterator k( inVec.begin() );
84 k != inVec.end(); ++k )
86 totalEnergy += ( *k )->e();
92 const float epsilon( 3E-6 );
94 return totalEnergy - totalMass > 0.0f + epsilon;
98 G4double CexmcGenbod::Generate(
void )
100 genin_.tecm = totalEnergy /
GeV;
104 float ( *pcm )[ 5 ]( &genout_.pcm[ 0 ] );
106 for ( CexmcPhaseSpaceOutVector::iterator k( outVec.begin() );
107 k != outVec.end(); ++k )
109 k->lVec->setPx( ( *pcm )[ 0 ] *
GeV );
110 k->lVec->setPy( ( *pcm )[ 1 ] * GeV );
111 k->lVec->setPz( ( *pcm )[ 2 ] * GeV );
112 k->lVec->setE( ( *pcm++ )[ 3 ] * GeV );
119 void CexmcGenbod::ParticleChangeHook(
void )
121 size_t nmbOfOutputParticles( outVec.size() );
123 if ( nmbOfOutputParticles < 2 || nmbOfOutputParticles > 18 )
126 genin_.np = nmbOfOutputParticles;
128 float * amass( genin_.amass );
130 for ( CexmcPhaseSpaceOutVector::const_iterator k( outVec.begin() );
131 k != outVec.end(); ++k )
133 *amass++ = k->mass /
GeV;
138 void CexmcGenbod::FermiEnergyDepStatusChangeHook(
void )
140 genin_.kgenev = fermiEnergyDepIsOn ? 2 : 1;