00001
00002 #include "BesHadronPhysics.hh"
00003
00004 #include "globals.hh"
00005 #include "G4ios.hh"
00006 #include <iomanip>
00007
00008
00009 BesHadronPhysics::BesHadronPhysics(const G4String& name)
00010 : G4VPhysicsConstructor(name)
00011 {
00012 }
00013
00014 BesHadronPhysics::~BesHadronPhysics()
00015 {
00016
00017 }
00018
00019 #include "G4ParticleDefinition.hh"
00020
00021
00022
00023 #include "G4MesonConstructor.hh"
00024 #include "G4BaryonConstructor.hh"
00025 #include "G4ShortLivedConstructor.hh"
00026
00027 void BesHadronPhysics::ConstructParticle()
00028 {
00029
00030 G4MesonConstructor pMesonConstructor;
00031 pMesonConstructor.ConstructParticle();
00032
00033
00034 G4BaryonConstructor pBaryonConstructor;
00035 pBaryonConstructor.ConstructParticle();
00036
00037
00038 G4ShortLivedConstructor pShortLivedConstructor;
00039 pShortLivedConstructor.ConstructParticle();
00040
00041 }
00042
00043
00044 #include "G4ProcessManager.hh"
00045
00046
00047 void BesHadronPhysics::ConstructProcess()
00048 {
00049 G4ProcessManager * pManager = 0;
00050 G4cout << "" << G4endl;
00051 G4cout << "You are using the ExN04HadronPhysics" << G4endl;
00052 G4cout << " - Note that this hadronic physics list is not optimized for any particular usage" << G4endl;
00053 G4cout << " - If you wish to have a starting point tailored for a particular area of work," << G4endl;
00054 G4cout << " please use one of the available physics lists by use-case." << G4endl;
00055 G4cout << " More information can also be found from the Geant4 HyperNews." << G4endl;
00056 G4cout << "" << G4endl;
00057
00058 theElasticModel = new G4LElastic();
00059 theElasticProcess.RegisterMe(theElasticModel);
00060
00061
00062
00063 thePreEquilib = new G4PreCompoundModel(&theHandler);
00064 theCascade.SetDeExcitation(thePreEquilib);
00065
00066
00067
00068
00069
00070
00071
00072
00073 pManager = G4PionPlus::PionPlus()->GetProcessManager();
00074
00075 pManager->AddDiscreteProcess(&theElasticProcess);
00076
00077 theLEPionPlusModel = new G4LEPionPlusInelastic();
00078 thePionPlusInelastic.RegisterMe(theLEPionPlusModel);
00079
00080 pManager->AddDiscreteProcess(&thePionPlusInelastic);
00081
00082 pManager->AddProcess(&thePionPlusIonisation, ordInActive,2, 2);
00083
00084 pManager->AddProcess(&thePionPlusMult);
00085 pManager->SetProcessOrdering(&thePionPlusMult, idxAlongStep, 1);
00086 pManager->SetProcessOrdering(&thePionPlusMult, idxPostStep, 1);
00087
00088
00089 pManager = G4PionMinus::PionMinus()->GetProcessManager();
00090
00091 pManager->AddDiscreteProcess(&theElasticProcess);
00092
00093 theLEPionMinusModel = new G4LEPionMinusInelastic();
00094 thePionMinusInelastic.RegisterMe(theLEPionMinusModel);
00095
00096 pManager->AddDiscreteProcess(&thePionMinusInelastic);
00097
00098 pManager->AddProcess(&thePionMinusIonisation, ordInActive,2, 2);
00099
00100 pManager->AddProcess(&thePionMinusMult);
00101 pManager->SetProcessOrdering(&thePionMinusMult, idxAlongStep, 1);
00102 pManager->SetProcessOrdering(&thePionMinusMult, idxPostStep, 1);
00103
00104 pManager->AddRestProcess(&thePionMinusAbsorption, ordDefault);
00105
00106
00107 pManager = G4KaonPlus::KaonPlus()->GetProcessManager();
00108
00109 pManager->AddDiscreteProcess(&theElasticProcess);
00110
00111 theLEKaonPlusModel = new G4LEKaonPlusInelastic();
00112 theHEKaonPlusModel = new G4HEKaonPlusInelastic();
00113 theKaonPlusInelastic.RegisterMe(theLEKaonPlusModel);
00114
00115 pManager->AddDiscreteProcess(&theKaonPlusInelastic);
00116
00117 pManager->AddProcess(&theKaonPlusIonisation, ordInActive,2, 2);
00118
00119 pManager->AddProcess(&theKaonPlusMult);
00120 pManager->SetProcessOrdering(&theKaonPlusMult, idxAlongStep, 1);
00121 pManager->SetProcessOrdering(&theKaonPlusMult, idxPostStep, 1);
00122
00123
00124 pManager = G4KaonMinus::KaonMinus()->GetProcessManager();
00125
00126 pManager->AddDiscreteProcess(&theElasticProcess);
00127
00128 theLEKaonMinusModel = new G4LEKaonMinusInelastic();
00129 theHEKaonMinusModel = new G4HEKaonMinusInelastic();
00130 theKaonMinusInelastic.RegisterMe(theLEKaonMinusModel);
00131 theKaonMinusInelastic.RegisterMe(theHEKaonMinusModel);
00132 pManager->AddDiscreteProcess(&theKaonMinusInelastic);
00133
00134 pManager->AddProcess(&theKaonMinusIonisation, ordInActive,2, 2);
00135
00136 pManager->AddProcess(&theKaonMinusMult);
00137 pManager->SetProcessOrdering(&theKaonMinusMult, idxAlongStep, 1);
00138 pManager->SetProcessOrdering(&theKaonMinusMult, idxPostStep, 1);
00139
00140 pManager->AddRestProcess(&theKaonMinusAbsorption, ordDefault);
00141
00142
00143 pManager = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
00144
00145 pManager->AddDiscreteProcess(&theElasticProcess);
00146
00147 theLEKaonZeroLModel = new G4LEKaonZeroLInelastic();
00148 theHEKaonZeroLModel = new G4HEKaonZeroInelastic();
00149 theKaonZeroLInelastic.RegisterMe(theLEKaonZeroLModel);
00150 theKaonZeroLInelastic.RegisterMe(theHEKaonZeroLModel);
00151 pManager->AddDiscreteProcess(&theKaonZeroLInelastic);
00152
00153
00154 pManager = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
00155
00156 pManager->AddDiscreteProcess(&theElasticProcess);
00157
00158 theLEKaonZeroSModel = new G4LEKaonZeroSInelastic();
00159 theHEKaonZeroSModel = new G4HEKaonZeroInelastic();
00160 theKaonZeroSInelastic.RegisterMe(theLEKaonZeroSModel);
00161 theKaonZeroSInelastic.RegisterMe(theHEKaonZeroSModel);
00162 pManager->AddDiscreteProcess(&theKaonZeroSInelastic);
00163
00164
00165 pManager = G4Proton::Proton()->GetProcessManager();
00166
00167 pManager->AddDiscreteProcess(&theElasticProcess);
00168
00169 theLEProtonModel = new G4LEProtonInelastic();
00170 theHEProtonModel = new G4HEProtonInelastic();
00171 theProtonInelastic.RegisterMe(theLEProtonModel);
00172
00173 pManager->AddDiscreteProcess(&theProtonInelastic);
00174
00175 pManager->AddProcess(&theProtonIonisation, ordInActive,2, 2);
00176
00177 pManager->AddProcess(&theProtonMult);
00178 pManager->SetProcessOrdering(&theProtonMult, idxAlongStep, 1);
00179 pManager->SetProcessOrdering(&theProtonMult, idxPostStep, 1);
00180
00181
00182 pManager = G4AntiProton::AntiProton()->GetProcessManager();
00183
00184 pManager->AddDiscreteProcess(&theElasticProcess);
00185
00186 theLEAntiProtonModel = new G4LEAntiProtonInelastic();
00187 theHEAntiProtonModel = new G4HEAntiProtonInelastic();
00188 theAntiProtonInelastic.RegisterMe(theLEAntiProtonModel);
00189 theAntiProtonInelastic.RegisterMe(theHEAntiProtonModel);
00190 pManager->AddDiscreteProcess(&theAntiProtonInelastic);
00191
00192 pManager->AddProcess(&theAntiProtonIonisation, ordInActive,2, 2);
00193
00194 pManager->AddProcess(&theAntiProtonMult);
00195 pManager->SetProcessOrdering(&theAntiProtonMult, idxAlongStep, 1);
00196 pManager->SetProcessOrdering(&theAntiProtonMult, idxPostStep, 1);
00197
00198 pManager->AddRestProcess(&theAntiProtonAnnihilation);
00199
00200
00201 pManager = G4Neutron::Neutron()->GetProcessManager();
00202
00203 pManager->AddDiscreteProcess(&theElasticProcess);
00204
00205 theLENeutronModel = new G4LENeutronInelastic();
00206 theHENeutronModel = new G4HENeutronInelastic();
00207 theNeutronInelastic.RegisterMe(theLENeutronModel);
00208
00209 pManager->AddDiscreteProcess(&theNeutronInelastic);
00210
00211 theNeutronFissionModel = new G4LFission();
00212 theNeutronFission.RegisterMe(theNeutronFissionModel);
00213 pManager->AddDiscreteProcess(&theNeutronFission);
00214
00215 theNeutronCaptureModel = new G4LCapture();
00216 theNeutronCapture.RegisterMe(theNeutronCaptureModel);
00217 pManager->AddDiscreteProcess(&theNeutronCapture);
00218
00219
00220 pManager = G4AntiNeutron::AntiNeutron()->GetProcessManager();
00221
00222 pManager->AddDiscreteProcess(&theElasticProcess);
00223
00224 theLEAntiNeutronModel = new G4LEAntiNeutronInelastic();
00225 theHEAntiNeutronModel = new G4HEAntiNeutronInelastic();
00226 theAntiNeutronInelastic.RegisterMe(theLEAntiNeutronModel);
00227 theAntiNeutronInelastic.RegisterMe(theHEAntiNeutronModel);
00228 pManager->AddDiscreteProcess(&theAntiNeutronInelastic);
00229
00230 pManager->AddRestProcess(&theAntiNeutronAnnihilation);
00231
00232
00233 pManager = G4Lambda::Lambda()->GetProcessManager();
00234
00235 pManager->AddDiscreteProcess(&theElasticProcess);
00236
00237 theLELambdaModel = new G4LELambdaInelastic();
00238 theHELambdaModel = new G4HELambdaInelastic();
00239 theLambdaInelastic.RegisterMe(theLELambdaModel);
00240 theLambdaInelastic.RegisterMe(theHELambdaModel);
00241 pManager->AddDiscreteProcess(&theLambdaInelastic);
00242
00243
00244 pManager = G4AntiLambda::AntiLambda()->GetProcessManager();
00245
00246 pManager->AddDiscreteProcess(&theElasticProcess);
00247
00248 theLEAntiLambdaModel = new G4LEAntiLambdaInelastic();
00249 theHEAntiLambdaModel = new G4HEAntiLambdaInelastic();
00250 theAntiLambdaInelastic.RegisterMe(theLEAntiLambdaModel);
00251 theAntiLambdaInelastic.RegisterMe(theHEAntiLambdaModel);
00252 pManager->AddDiscreteProcess(&theAntiLambdaInelastic);
00253
00254
00255 pManager = G4SigmaMinus::SigmaMinus()->GetProcessManager();
00256
00257 pManager->AddDiscreteProcess(&theElasticProcess);
00258
00259 theLESigmaMinusModel = new G4LESigmaMinusInelastic();
00260 theHESigmaMinusModel = new G4HESigmaMinusInelastic();
00261 theSigmaMinusInelastic.RegisterMe(theLESigmaMinusModel);
00262 theSigmaMinusInelastic.RegisterMe(theHESigmaMinusModel);
00263 pManager->AddDiscreteProcess(&theSigmaMinusInelastic);
00264
00265 pManager->AddProcess(&theSigmaMinusIonisation, ordInActive,2, 2);
00266
00267 pManager->AddProcess(&theSigmaMinusMult);
00268 pManager->SetProcessOrdering(&theSigmaMinusMult, idxAlongStep, 1);
00269 pManager->SetProcessOrdering(&theSigmaMinusMult, idxPostStep, 1);
00270
00271
00272 pManager = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
00273
00274 pManager->AddDiscreteProcess(&theElasticProcess);
00275
00276 theLEAntiSigmaMinusModel = new G4LEAntiSigmaMinusInelastic();
00277 theHEAntiSigmaMinusModel = new G4HEAntiSigmaMinusInelastic();
00278 theAntiSigmaMinusInelastic.RegisterMe(theLEAntiSigmaMinusModel);
00279 theAntiSigmaMinusInelastic.RegisterMe(theHEAntiSigmaMinusModel);
00280 pManager->AddDiscreteProcess(&theAntiSigmaMinusInelastic);
00281
00282 pManager->AddProcess(&theAntiSigmaMinusIonisation, ordInActive,2, 2);
00283
00284 pManager->AddProcess(&theAntiSigmaMinusMult);
00285 pManager->SetProcessOrdering(&theAntiSigmaMinusMult, idxAlongStep, 1);
00286 pManager->SetProcessOrdering(&theAntiSigmaMinusMult, idxPostStep, 1);
00287
00288
00289 pManager = G4SigmaPlus::SigmaPlus()->GetProcessManager();
00290
00291 pManager->AddDiscreteProcess(&theElasticProcess);
00292
00293 theLESigmaPlusModel = new G4LESigmaPlusInelastic();
00294 theHESigmaPlusModel = new G4HESigmaPlusInelastic();
00295 theSigmaPlusInelastic.RegisterMe(theLESigmaPlusModel);
00296 theSigmaPlusInelastic.RegisterMe(theHESigmaPlusModel);
00297 pManager->AddDiscreteProcess(&theSigmaPlusInelastic);
00298
00299 pManager->AddProcess(&theSigmaPlusIonisation, ordInActive,2, 2);
00300
00301 pManager->AddProcess(&theSigmaPlusMult);
00302 pManager->SetProcessOrdering(&theSigmaPlusMult, idxAlongStep, 1);
00303 pManager->SetProcessOrdering(&theSigmaPlusMult, idxPostStep, 1);
00304
00305
00306 pManager = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
00307
00308 pManager->AddDiscreteProcess(&theElasticProcess);
00309
00310 theLEAntiSigmaPlusModel = new G4LEAntiSigmaPlusInelastic();
00311 theHEAntiSigmaPlusModel = new G4HEAntiSigmaPlusInelastic();
00312 theAntiSigmaPlusInelastic.RegisterMe(theLEAntiSigmaPlusModel);
00313 theAntiSigmaPlusInelastic.RegisterMe(theHEAntiSigmaPlusModel);
00314 pManager->AddDiscreteProcess(&theAntiSigmaPlusInelastic);
00315
00316 pManager->AddProcess(&theAntiSigmaPlusIonisation, ordInActive,2, 2);
00317
00318 pManager->AddProcess(&theAntiSigmaPlusMult);
00319 pManager->SetProcessOrdering(&theAntiSigmaPlusMult, idxAlongStep, 1);
00320 pManager->SetProcessOrdering(&theAntiSigmaPlusMult, idxPostStep, 1);
00321
00322
00323 pManager = G4XiMinus::XiMinus()->GetProcessManager();
00324
00325 pManager->AddDiscreteProcess(&theElasticProcess);
00326
00327 theLEXiMinusModel = new G4LEXiMinusInelastic();
00328 theHEXiMinusModel = new G4HEXiMinusInelastic();
00329 theXiMinusInelastic.RegisterMe(theLEXiMinusModel);
00330 theXiMinusInelastic.RegisterMe(theHEXiMinusModel);
00331 pManager->AddDiscreteProcess(&theXiMinusInelastic);
00332
00333 pManager->AddProcess(&theXiMinusIonisation, ordInActive,2, 2);
00334
00335 pManager->AddProcess(&theXiMinusMult);
00336 pManager->SetProcessOrdering(&theXiMinusMult, idxAlongStep, 1);
00337 pManager->SetProcessOrdering(&theXiMinusMult, idxPostStep, 1);
00338
00339
00340 pManager = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
00341
00342 pManager->AddDiscreteProcess(&theElasticProcess);
00343
00344 theLEAntiXiMinusModel = new G4LEAntiXiMinusInelastic();
00345 theHEAntiXiMinusModel = new G4HEAntiXiMinusInelastic();
00346 theAntiXiMinusInelastic.RegisterMe(theLEAntiXiMinusModel);
00347 theAntiXiMinusInelastic.RegisterMe(theHEAntiXiMinusModel);
00348 pManager->AddDiscreteProcess(&theAntiXiMinusInelastic);
00349
00350 pManager->AddProcess(&theAntiXiMinusIonisation, ordInActive,2, 2);
00351
00352 pManager->AddProcess(&theAntiXiMinusMult);
00353 pManager->SetProcessOrdering(&theAntiXiMinusMult, idxAlongStep, 1);
00354 pManager->SetProcessOrdering(&theAntiXiMinusMult, idxPostStep, 1);
00355
00356
00357 pManager = G4XiZero::XiZero()->GetProcessManager();
00358
00359 pManager->AddDiscreteProcess(&theElasticProcess);
00360
00361 theLEXiZeroModel = new G4LEXiZeroInelastic();
00362 theHEXiZeroModel = new G4HEXiZeroInelastic();
00363 theXiZeroInelastic.RegisterMe(theLEXiZeroModel);
00364 theXiZeroInelastic.RegisterMe(theHEXiZeroModel);
00365 pManager->AddDiscreteProcess(&theXiZeroInelastic);
00366
00367
00368 pManager = G4AntiXiZero::AntiXiZero()->GetProcessManager();
00369
00370 pManager->AddDiscreteProcess(&theElasticProcess);
00371
00372 theLEAntiXiZeroModel = new G4LEAntiXiZeroInelastic();
00373 theHEAntiXiZeroModel = new G4HEAntiXiZeroInelastic();
00374 theAntiXiZeroInelastic.RegisterMe(theLEAntiXiZeroModel);
00375 theAntiXiZeroInelastic.RegisterMe(theHEAntiXiZeroModel);
00376 pManager->AddDiscreteProcess(&theAntiXiZeroInelastic);
00377
00378
00379 pManager = G4OmegaMinus::OmegaMinus()->GetProcessManager();
00380
00381 pManager->AddDiscreteProcess(&theElasticProcess);
00382
00383 theLEOmegaMinusModel = new G4LEOmegaMinusInelastic();
00384 theHEOmegaMinusModel = new G4HEOmegaMinusInelastic();
00385 theOmegaMinusInelastic.RegisterMe(theLEOmegaMinusModel);
00386 theOmegaMinusInelastic.RegisterMe(theHEOmegaMinusModel);
00387 pManager->AddDiscreteProcess(&theOmegaMinusInelastic);
00388
00389 pManager->AddProcess(&theOmegaMinusIonisation, ordInActive,2, 2);
00390
00391 pManager->AddProcess(&theOmegaMinusMult);
00392 pManager->SetProcessOrdering(&theOmegaMinusMult, idxAlongStep, 1);
00393 pManager->SetProcessOrdering(&theOmegaMinusMult, idxPostStep, 1);
00394
00395
00396 pManager = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
00397
00398 pManager->AddDiscreteProcess(&theElasticProcess);
00399
00400 theLEAntiOmegaMinusModel = new G4LEAntiOmegaMinusInelastic();
00401 theHEAntiOmegaMinusModel = new G4HEAntiOmegaMinusInelastic();
00402 theAntiOmegaMinusInelastic.RegisterMe(theLEAntiOmegaMinusModel);
00403 theAntiOmegaMinusInelastic.RegisterMe(theHEAntiOmegaMinusModel);
00404 pManager->AddDiscreteProcess(&theAntiOmegaMinusInelastic);
00405
00406 pManager->AddProcess(&theAntiOmegaMinusIonisation, ordInActive,2, 2);
00407
00408 pManager->AddProcess(&theAntiOmegaMinusMult);
00409 pManager->SetProcessOrdering(&theAntiOmegaMinusMult, idxAlongStep, 1);
00410 pManager->SetProcessOrdering(&theAntiOmegaMinusMult, idxPostStep, 1);
00411
00412 }
00413
00414
00415
00416
00417