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 );
172 G4double opEnergy( std::sqrt( opMomentum.mag2() +
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 <
G4double massCutEllipseAngle
G4LorentzVector nucleusOutputParticleLAB
const G4ParticleDefinition * nucleusParticle
G4ThreeVector calorimeterEPLeftWorldPosition
const G4VUserPrimaryGeneratorAction * GetUserPrimaryGeneratorAction() const
G4double absorbedEnergyCutCRCenter
void SetExpectedMomentumAmpDiff(G4double)
CLHEP::Hep3Vector G4ThreeVector
G4double expectedMomentumAmp
G4double calorimeterEDLeftAdjacent
G4double calorimeterEDLeft
void SetupBeamParticle(void)
G4double absorbedEnergyCutEllipseAngle
const G4ParticleDefinition * incidentParticle
G4double calorimeterEDRight
G4double GetOrigMomentumAmp(void) const
G4ParticleDefinition * GetIncidentParticle(void) const
G4LorentzVector incidentParticleSCM
~CexmcChargeExchangeReconstructor()
G4LorentzVector incidentParticleLAB
void ReconstructAngle(void)
CexmcChargeExchangeReconstructorMessenger * messenger
G4LorentzVector outputParticleLAB
G4LorentzVector outputParticleSCM
const G4ParticleDefinition * outputParticle
G4LorentzVector nucleusParticleLAB
G4LorentzVector nucleusOutputParticleSCM
G4ThreeVector targetEPWorldPosition
void ReconstructEntryPoints(const CexmcEnergyDepositStore *edStore)
CexmcChargeExchangeReconstructor(const CexmcProductionModel *productionModel)
void Reconstruct(const CexmcEnergyDepositStore *edStore)
G4bool hasMassCutTriggered
G4bool useAbsorbedEnergyCut
G4bool collectEDInAdjacentCrystals
G4double nucleusOutputParticleMass
G4bool HasFullTrigger(void) const
G4ParticleDefinition * GetOutputParticle(void) const
void ReconstructTargetPoint(void)
G4ThreeVector calorimeterEPRightWorldPosition
static G4RunManager * GetRunManager()
G4bool beamParticleIsInitialized
G4double massCutNOPCenter
G4double GetPDGMass() const
CexmcParticleGun * particleGun
G4double absorbedEnergyCutCLWidth
G4bool hasAbsorbedEnergyCutTriggered
G4ParticleDefinition * GetNucleusParticle(void) const
CexmcProductionModelData productionModelData
G4ParticleDefinition * GetParticleDefinition() const
CexmcParticleGun * GetParticleGun(void)
G4double absorbedEnergyCutCLCenter
G4ParticleDefinition * GetNucleusOutputParticle(void) const
const G4ParticleDefinition * nucleusOutputParticle
const G4ThreeVector & GetOrigDirection(void) const
CexmcEDCollectionAlgoritm edCollectionAlgorithm
G4double absorbedEnergyCutCRWidth
G4double outputParticleMass
G4LorentzVector nucleusParticleSCM
CLHEP::HepLorentzVector G4LorentzVector
G4double calorimeterEDRightAdjacent