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