59 outputParticleMass( 0 ), nucleusOutputParticleMass( 0 ),
60 useTableMass( false ), useMassCut( false ), massCutOPCenter( 0 ),
61 massCutNOPCenter( 0 ), massCutOPWidth( 0 ), massCutNOPWidth( 0 ),
62 massCutEllipseAngle( 0 ), useAbsorbedEnergyCut( false ),
63 absorbedEnergyCutCLCenter( 0 ), absorbedEnergyCutCRCenter( 0 ),
64 absorbedEnergyCutCLWidth( 0 ), absorbedEnergyCutCRWidth( 0 ),
65 absorbedEnergyCutEllipseAngle( 0 ), expectedMomentumAmp( -1 ),
67 hasMassCutTriggered( false ), hasAbsorbedEnergyCutTriggered( false ),
68 beamParticleIsInitialized( false ), particleGun( NULL ), messenger( NULL )
70 if ( ! productionModel )
79 static_cast< const CexmcPrimaryGeneratorAction * >(
82 const_cast< CexmcPrimaryGeneratorAction * >(
83 primaryGeneratorAction ) );
157 calorimeterEDRight * ( 1 - cosTheAngle ) );
160 opdpLeftMomentum.
setMag( calorimeterEDLeft );
162 opdpRightMomentum.
setMag( calorimeterEDRight );
163 G4ThreeVector opMomentum( opdpLeftMomentum + opdpRightMomentum );
180 incidentParticleMomentum *= incidentParticleMomentumAmp;
184 G4double incidentParticlePDGMass2( incidentParticlePDGMass *
185 incidentParticlePDGMass );
187 std::sqrt( incidentParticleMomentumAmp * incidentParticleMomentumAmp +
188 incidentParticlePDGMass2 ) );
191 incidentParticleMomentum, incidentParticleEnergy );
218 G4ThreeVector nopMomentum( incidentParticleMomentum - opMomentum );
219 G4double nopEnergy( incidentParticleEnergy + nucleusParticlePDGMass -
222 nopMomentum.
mag2() );
240 cosMassCutEllipseAngle +
242 sinMassCutEllipseAngle, 2 ) / massCutOPWidth2 +
244 sinMassCutEllipseAngle +
246 cosMassCutEllipseAngle, 2 ) / massCutNOPWidth2 <
253 G4double cosAbsorbedEnergyCutEllipseAngle(
255 G4double sinAbsorbedEnergyCutEllipseAngle(
271 cosAbsorbedEnergyCutEllipseAngle +
273 sinAbsorbedEnergyCutEllipseAngle, 2 ) /
274 absorbedEnergyCutCLWidth2 +
276 sinAbsorbedEnergyCutEllipseAngle +
278 cosAbsorbedEnergyCutEllipseAngle, 2 ) /
279 absorbedEnergyCutCRWidth2 <
static G4RunManager * GetRunManager()
G4LorentzVector nucleusOutputParticleLAB
G4LorentzVector nucleusParticleLAB
G4LorentzVector nucleusParticleSCM
const G4ParticleDefinition * nucleusOutputParticle
G4double calorimeterEDRight
void ReconstructAngle(void)
CLHEP::Hep3Vector G4ThreeVector
G4bool hasAbsorbedEnergyCutTriggered
G4double expectedMomentumAmp
G4double absorbedEnergyCutEllipseAngle
G4ParticleDefinition * GetIncidentParticle(void) const
const G4ParticleDefinition * incidentParticle
G4ParticleDefinition * GetNucleusParticle(void) const
const G4ThreeVector & GetOrigDirection(void) const
G4double calorimeterEDLeftAdjacent
G4double nucleusOutputParticleMass
CexmcParticleGun * GetParticleGun(void)
G4double GetPDGMass() const
void SetExpectedMomentumAmpDiff(G4double)
G4double GetOrigMomentumAmp(void) const
G4double outputParticleMass
G4ThreeVector calorimeterEPLeftWorldPosition
G4double massCutNOPCenter
const XML_Char int const XML_Char * value
G4bool beamParticleIsInitialized
CexmcParticleGun * particleGun
G4double absorbedEnergyCutCLCenter
const G4ParticleDefinition * outputParticle
G4LorentzVector outputParticleLAB
const G4ParticleDefinition * nucleusParticle
G4ThreeVector calorimeterEPRightWorldPosition
G4LorentzVector nucleusOutputParticleSCM
G4double absorbedEnergyCutCLWidth
CexmcProductionModelData productionModelData
G4LorentzVector incidentParticleLAB
G4double calorimeterEDRightAdjacent
G4LorentzVector incidentParticleSCM
G4LorentzVector outputParticleSCM
G4bool useAbsorbedEnergyCut
void ReconstructTargetPoint(void)
G4double calorimeterEDLeft
G4ParticleDefinition * GetNucleusOutputParticle(void) const
G4ParticleDefinition * GetOutputParticle(void) const
G4bool hasMassCutTriggered
void Reconstruct(const CexmcEnergyDepositStore *edStore)
~CexmcChargeExchangeReconstructor()
void ReconstructEntryPoints(const CexmcEnergyDepositStore *edStore)
Hep3Vector boostVector() const
G4bool collectEDInAdjacentCrystals
G4bool HasFullTrigger(void) const
CLHEP::HepLorentzVector G4LorentzVector
G4double massCutEllipseAngle
CexmcChargeExchangeReconstructor(const CexmcProductionModel *productionModel)
CexmcEDCollectionAlgoritm edCollectionAlgorithm
G4ParticleDefinition * GetParticleDefinition() const
G4double absorbedEnergyCutCRWidth
void SetupBeamParticle(void)
G4double absorbedEnergyCutCRCenter
G4ThreeVector targetEPWorldPosition
const G4VUserPrimaryGeneratorAction * GetUserPrimaryGeneratorAction() const
HepLorentzVector & boost(double, double, double)
CexmcChargeExchangeReconstructorMessenger * messenger