File indexing completed on 2025-01-31 09:21:49
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044 #ifndef CEXMC_CHARGE_EXCHANGE_RECONSTRUCTOR_HH
0045 #define CEXMC_CHARGE_EXCHANGE_RECONSTRUCTOR_HH
0046
0047 #include "CexmcReconstructor.hh"
0048 #include "CexmcProductionModelData.hh"
0049 #include "CexmcCommon.hh"
0050
0051 class CexmcChargeExchangeReconstructorMessenger;
0052 struct CexmcEnergyDepositStore;
0053 class CexmcProductionModel;
0054 class CexmcParticleGun;
0055
0056
0057 class CexmcChargeExchangeReconstructor : public CexmcReconstructor
0058 {
0059 public:
0060 CexmcChargeExchangeReconstructor(
0061 const CexmcProductionModel * productionModel );
0062
0063 ~CexmcChargeExchangeReconstructor();
0064
0065 public:
0066 void Reconstruct( const CexmcEnergyDepositStore * edStore );
0067
0068 public:
0069 G4double GetOutputParticleMass( void ) const;
0070
0071 G4double GetNucleusOutputParticleMass( void ) const;
0072
0073 const CexmcProductionModelData & GetProductionModelData( void ) const;
0074
0075 void UseTableMass( G4bool on );
0076
0077 void UseMassCut( G4bool on );
0078
0079 void SetMassCutOPCenter( G4double value );
0080
0081 void SetMassCutNOPCenter( G4double value );
0082
0083 void SetMassCutOPWidth( G4double value );
0084
0085 void SetMassCutNOPWidth( G4double value );
0086
0087 void SetMassCutEllipseAngle( G4double value );
0088
0089 void UseAbsorbedEnergyCut( G4bool on );
0090
0091 void SetAbsorbedEnergyCutCLCenter( G4double value );
0092
0093 void SetAbsorbedEnergyCutCRCenter( G4double value );
0094
0095 void SetAbsorbedEnergyCutCLWidth( G4double value );
0096
0097 void SetAbsorbedEnergyCutCRWidth( G4double value );
0098
0099 void SetAbsorbedEnergyCutEllipseAngle( G4double value );
0100
0101 void SetExpectedMomentumAmp( G4double );
0102
0103 void SetExpectedMomentumAmpDiff( G4double );
0104
0105 void SetEDCollectionAlgorithm( CexmcEDCollectionAlgoritm value );
0106
0107 void SetupBeamParticle( void );
0108
0109 G4bool IsTableMassUsed( void ) const;
0110
0111 G4bool IsMassCutUsed( void ) const;
0112
0113 G4double GetMassCutOPCenter( void ) const;
0114
0115 G4double GetMassCutNOPCenter( void ) const;
0116
0117 G4double GetMassCutOPWidth( void ) const;
0118
0119 G4double GetMassCutNOPWidth( void ) const;
0120
0121 G4double GetMassCutEllipseAngle( void ) const;
0122
0123 G4bool HasMassCutTriggered( void ) const;
0124
0125 G4bool IsAbsorbedEnergyCutUsed( void ) const;
0126
0127 G4double GetAbsorbedEnergyCutCLCenter( void ) const;
0128
0129 G4double GetAbsorbedEnergyCutCRCenter( void ) const;
0130
0131 G4double GetAbsorbedEnergyCutCLWidth( void ) const;
0132
0133 G4double GetAbsorbedEnergyCutCRWidth( void ) const;
0134
0135 G4double GetAbsorbedEnergyCutEllipseAngle( void ) const;
0136
0137 G4double GetExpectedMomentumAmp( void ) const;
0138
0139 CexmcEDCollectionAlgoritm GetEDCollectionAlgorithm( void ) const;
0140
0141 G4bool HasAbsorbedEnergyCutTriggered( void ) const;
0142
0143 G4bool HasFullTrigger( void ) const;
0144
0145 private:
0146 G4double outputParticleMass;
0147
0148 G4double nucleusOutputParticleMass;
0149
0150 private:
0151 CexmcProductionModelData productionModelData;
0152
0153 private:
0154 G4bool useTableMass;
0155
0156 G4bool useMassCut;
0157
0158 G4double massCutOPCenter;
0159
0160 G4double massCutNOPCenter;
0161
0162 G4double massCutOPWidth;
0163
0164 G4double massCutNOPWidth;
0165
0166 G4double massCutEllipseAngle;
0167
0168 G4bool useAbsorbedEnergyCut;
0169
0170 G4double absorbedEnergyCutCLCenter;
0171
0172 G4double absorbedEnergyCutCRCenter;
0173
0174 G4double absorbedEnergyCutCLWidth;
0175
0176 G4double absorbedEnergyCutCRWidth;
0177
0178 G4double absorbedEnergyCutEllipseAngle;
0179
0180 G4double expectedMomentumAmp;
0181
0182 CexmcEDCollectionAlgoritm edCollectionAlgorithm;
0183
0184 private:
0185 G4bool hasMassCutTriggered;
0186
0187 G4bool hasAbsorbedEnergyCutTriggered;
0188
0189 private:
0190 G4bool beamParticleIsInitialized;
0191
0192 CexmcParticleGun * particleGun;
0193
0194 CexmcChargeExchangeReconstructorMessenger * messenger;
0195 };
0196
0197
0198 inline G4double CexmcChargeExchangeReconstructor::GetOutputParticleMass(
0199 void ) const
0200 {
0201 return outputParticleMass;
0202 }
0203
0204
0205 inline G4double CexmcChargeExchangeReconstructor::GetNucleusOutputParticleMass(
0206 void ) const
0207 {
0208 return nucleusOutputParticleMass;
0209 }
0210
0211
0212 inline const CexmcProductionModelData &
0213 CexmcChargeExchangeReconstructor::GetProductionModelData( void ) const
0214 {
0215 return productionModelData;
0216 }
0217
0218
0219 inline void CexmcChargeExchangeReconstructor::UseTableMass( G4bool on )
0220 {
0221 useTableMass = on;
0222 }
0223
0224
0225 inline void CexmcChargeExchangeReconstructor::UseMassCut( G4bool on )
0226 {
0227 useMassCut = on;
0228 }
0229
0230
0231 inline void CexmcChargeExchangeReconstructor::SetMassCutOPCenter(
0232 G4double value )
0233 {
0234 massCutOPCenter = value;
0235 }
0236
0237
0238 inline void CexmcChargeExchangeReconstructor::SetMassCutNOPCenter(
0239 G4double value )
0240 {
0241 massCutNOPCenter = value;
0242 }
0243
0244
0245 inline void CexmcChargeExchangeReconstructor::SetMassCutOPWidth(
0246 G4double value )
0247 {
0248 massCutOPWidth = value;
0249 }
0250
0251
0252 inline void CexmcChargeExchangeReconstructor::SetMassCutNOPWidth(
0253 G4double value )
0254 {
0255 massCutNOPWidth = value;
0256 }
0257
0258
0259 inline void CexmcChargeExchangeReconstructor::SetMassCutEllipseAngle(
0260 G4double value )
0261 {
0262 massCutEllipseAngle = value;
0263 }
0264
0265
0266 inline void CexmcChargeExchangeReconstructor::UseAbsorbedEnergyCut(
0267 G4bool on )
0268 {
0269 useAbsorbedEnergyCut = on;
0270 }
0271
0272
0273 inline void CexmcChargeExchangeReconstructor::SetAbsorbedEnergyCutCLCenter(
0274 G4double value )
0275 {
0276 absorbedEnergyCutCLCenter = value;
0277 }
0278
0279
0280 inline void CexmcChargeExchangeReconstructor::SetAbsorbedEnergyCutCRCenter(
0281 G4double value )
0282 {
0283 absorbedEnergyCutCRCenter = value;
0284 }
0285
0286
0287 inline void CexmcChargeExchangeReconstructor::SetAbsorbedEnergyCutCLWidth(
0288 G4double value )
0289 {
0290 absorbedEnergyCutCLWidth = value;
0291 }
0292
0293
0294 inline void CexmcChargeExchangeReconstructor::SetAbsorbedEnergyCutCRWidth(
0295 G4double value )
0296 {
0297 absorbedEnergyCutCRWidth = value;
0298 }
0299
0300
0301 inline void CexmcChargeExchangeReconstructor::SetAbsorbedEnergyCutEllipseAngle(
0302 G4double value )
0303 {
0304 absorbedEnergyCutEllipseAngle = value;
0305 }
0306
0307
0308 inline void CexmcChargeExchangeReconstructor::SetExpectedMomentumAmp(
0309 G4double value )
0310 {
0311 expectedMomentumAmp = value;
0312 }
0313
0314
0315 inline void CexmcChargeExchangeReconstructor::SetEDCollectionAlgorithm(
0316 CexmcEDCollectionAlgoritm value )
0317 {
0318 edCollectionAlgorithm = value;
0319 }
0320
0321
0322 inline G4bool CexmcChargeExchangeReconstructor::IsTableMassUsed( void ) const
0323 {
0324 return useTableMass;
0325 }
0326
0327
0328 inline G4bool CexmcChargeExchangeReconstructor::IsMassCutUsed( void ) const
0329 {
0330 return useMassCut;
0331 }
0332
0333
0334 inline G4double CexmcChargeExchangeReconstructor::GetMassCutOPCenter( void )
0335 const
0336 {
0337 return massCutOPCenter;
0338 }
0339
0340
0341 inline G4double CexmcChargeExchangeReconstructor::GetMassCutNOPCenter( void )
0342 const
0343 {
0344 return massCutNOPCenter;
0345 }
0346
0347
0348 inline G4double CexmcChargeExchangeReconstructor::GetMassCutOPWidth( void )
0349 const
0350 {
0351 return massCutOPWidth;
0352 }
0353
0354
0355 inline G4double CexmcChargeExchangeReconstructor::GetMassCutNOPWidth( void )
0356 const
0357 {
0358 return massCutNOPWidth;
0359 }
0360
0361
0362 inline G4double CexmcChargeExchangeReconstructor::GetMassCutEllipseAngle(
0363 void ) const
0364 {
0365 return massCutEllipseAngle;
0366 }
0367
0368
0369 inline G4bool CexmcChargeExchangeReconstructor::HasMassCutTriggered( void )
0370 const
0371 {
0372 return hasMassCutTriggered;
0373 }
0374
0375
0376 inline G4bool CexmcChargeExchangeReconstructor::IsAbsorbedEnergyCutUsed( void )
0377 const
0378 {
0379 return useAbsorbedEnergyCut;
0380 }
0381
0382
0383 inline G4double CexmcChargeExchangeReconstructor::GetAbsorbedEnergyCutCLCenter(
0384 void ) const
0385 {
0386 return absorbedEnergyCutCLCenter;
0387 }
0388
0389
0390 inline G4double CexmcChargeExchangeReconstructor::GetAbsorbedEnergyCutCRCenter(
0391 void ) const
0392 {
0393 return absorbedEnergyCutCRCenter;
0394 }
0395
0396
0397 inline G4double CexmcChargeExchangeReconstructor::GetAbsorbedEnergyCutCLWidth(
0398 void ) const
0399 {
0400 return absorbedEnergyCutCLWidth;
0401 }
0402
0403
0404 inline G4double CexmcChargeExchangeReconstructor::GetAbsorbedEnergyCutCRWidth(
0405 void ) const
0406 {
0407 return absorbedEnergyCutCRWidth;
0408 }
0409
0410
0411 inline G4double CexmcChargeExchangeReconstructor::
0412 GetAbsorbedEnergyCutEllipseAngle( void ) const
0413 {
0414 return absorbedEnergyCutEllipseAngle;
0415 }
0416
0417
0418 inline G4double CexmcChargeExchangeReconstructor::GetExpectedMomentumAmp(
0419 void ) const
0420 {
0421 return expectedMomentumAmp;
0422 }
0423
0424
0425 inline CexmcEDCollectionAlgoritm CexmcChargeExchangeReconstructor::
0426 GetEDCollectionAlgorithm( void ) const
0427 {
0428 return edCollectionAlgorithm;
0429 }
0430
0431
0432 inline G4bool CexmcChargeExchangeReconstructor::HasAbsorbedEnergyCutTriggered(
0433 void ) const
0434 {
0435 return hasAbsorbedEnergyCutTriggered;
0436 }
0437
0438
0439 #endif
0440