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
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "G4HyperonFTFPBuilder.hh"
00039
00040 #include "G4SystemOfUnits.hh"
00041 #include "G4ParticleDefinition.hh"
00042 #include "G4ParticleTable.hh"
00043 #include "G4ProcessManager.hh"
00044 #include "G4CrossSectionDataSetRegistry.hh"
00045
00046
00047 G4HyperonFTFPBuilder::G4HyperonFTFPBuilder():
00048 theLambdaInelastic(0),
00049 theAntiLambdaInelastic(0),
00050 theSigmaMinusInelastic(0),
00051 theAntiSigmaMinusInelastic(0),
00052 theSigmaPlusInelastic(0),
00053 theAntiSigmaPlusInelastic(0),
00054 theXiZeroInelastic(0),
00055 theAntiXiZeroInelastic(0),
00056 theXiMinusInelastic(0),
00057 theAntiXiMinusInelastic(0),
00058 theOmegaMinusInelastic(0),
00059 theAntiOmegaMinusInelastic(0),
00060 wasActivated(false)
00061 {
00062
00063
00064
00065 HyperonFTFP = new G4TheoFSGenerator("FTFP");
00066
00067 HyperonFTFP->SetMinEnergy( 2.*GeV );
00068 HyperonFTFP->SetMaxEnergy( 100.*TeV );
00069
00070 theStringModel = new G4FTFModel;
00071 theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation);
00072 theStringModel->SetFragmentationModel(theStringDecay);
00073
00074 theCascade = new G4GeneratorPrecompoundInterface;
00075 thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
00076 theCascade->SetDeExcitation(thePreEquilib);
00077
00078 HyperonFTFP->SetTransport(theCascade);
00079 HyperonFTFP->SetHighEnergyGenerator(theStringModel);
00080
00081 theBertini = new G4CascadeInterface;
00082 theBertini->SetMinEnergy( 0.*GeV );
00083 theBertini->SetMaxEnergy( 6.*GeV );
00084
00085
00086
00087 AntiHyperonFTFP = new G4TheoFSGenerator("FTFP");
00088 AntiHyperonFTFP->SetMinEnergy( 0.*GeV );
00089 AntiHyperonFTFP->SetMaxEnergy( 100.*TeV );
00090 AntiHyperonFTFP->SetTransport(theCascade);
00091 AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel);
00092
00093
00094 theCHIPSInelastic = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsHyperonInelasticXS::Default_Name());
00095 }
00096
00097
00098 G4HyperonFTFPBuilder::~G4HyperonFTFPBuilder()
00099 {
00100 delete HyperonFTFP;
00101 delete theStringModel;
00102 delete theStringDecay;
00103 delete theCascade;
00104 delete thePreEquilib;
00105
00106 delete theBertini;
00107 delete AntiHyperonFTFP;
00108
00109 if (wasActivated) {
00110 delete theLambdaInelastic;
00111 delete theAntiLambdaInelastic;
00112 delete theSigmaMinusInelastic;
00113 delete theAntiSigmaMinusInelastic;
00114 delete theSigmaPlusInelastic;
00115 delete theAntiSigmaPlusInelastic;
00116 delete theXiMinusInelastic;
00117 delete theAntiXiMinusInelastic;
00118 delete theXiZeroInelastic;
00119 delete theAntiXiZeroInelastic;
00120 delete theOmegaMinusInelastic;
00121 delete theAntiOmegaMinusInelastic;
00122 }
00123 }
00124
00125 void G4HyperonFTFPBuilder::Build()
00126 {
00127 G4ProcessManager * aProcMan = 0;
00128 wasActivated = true;
00129
00130
00131 theLambdaInelastic = new G4LambdaInelasticProcess();
00132 theLambdaInelastic->RegisterMe(theBertini);
00133 theLambdaInelastic->RegisterMe(HyperonFTFP);
00134 theLambdaInelastic->AddDataSet(theCHIPSInelastic);
00135 aProcMan = G4Lambda::Lambda()->GetProcessManager();
00136 aProcMan->AddDiscreteProcess(theLambdaInelastic);
00137
00138
00139 theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess();
00140 theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP);
00141 theAntiLambdaInelastic->AddDataSet(theCHIPSInelastic);
00142
00143 aProcMan = G4AntiLambda::AntiLambda()->GetProcessManager();
00144 aProcMan->AddDiscreteProcess(theAntiLambdaInelastic);
00145
00146
00147 theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess();
00148 theSigmaMinusInelastic->RegisterMe(theBertini);
00149 theSigmaMinusInelastic->RegisterMe(HyperonFTFP);
00150 theSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
00151
00152 aProcMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
00153 aProcMan->AddDiscreteProcess(theSigmaMinusInelastic);
00154
00155
00156 theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess();
00157 theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP);
00158 theAntiSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
00159
00160 aProcMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
00161 aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic);
00162
00163
00164 theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess();
00165 theSigmaPlusInelastic->RegisterMe(theBertini);
00166 theSigmaPlusInelastic->RegisterMe(HyperonFTFP);
00167 theSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
00168
00169 aProcMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
00170 aProcMan->AddDiscreteProcess(theSigmaPlusInelastic);
00171
00172
00173 theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess();
00174 theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP);
00175 theAntiSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
00176
00177 aProcMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
00178 aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic);
00179
00180
00181 theXiMinusInelastic = new G4XiMinusInelasticProcess();
00182 theXiMinusInelastic->RegisterMe(theBertini);
00183 theXiMinusInelastic->RegisterMe(HyperonFTFP);
00184 theXiMinusInelastic->AddDataSet(theCHIPSInelastic);
00185
00186 aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
00187 aProcMan->AddDiscreteProcess(theXiMinusInelastic);
00188
00189
00190 theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess();
00191 theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP);
00192 theAntiXiMinusInelastic->AddDataSet(theCHIPSInelastic);
00193
00194 aProcMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
00195 aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic);
00196
00197
00198 theXiZeroInelastic = new G4XiZeroInelasticProcess();
00199 theXiZeroInelastic->RegisterMe(theBertini);
00200 theXiZeroInelastic->RegisterMe(HyperonFTFP);
00201 theXiZeroInelastic->AddDataSet(theCHIPSInelastic);
00202
00203 aProcMan = G4XiZero::XiZero()->GetProcessManager();
00204 aProcMan->AddDiscreteProcess(theXiZeroInelastic);
00205
00206
00207 theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess();
00208 theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP);
00209 theAntiXiZeroInelastic->AddDataSet(theCHIPSInelastic);
00210
00211 aProcMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
00212 aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic);
00213
00214
00215 theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess();
00216 theOmegaMinusInelastic->RegisterMe(theBertini);
00217 theOmegaMinusInelastic->RegisterMe(HyperonFTFP);
00218 theOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
00219
00220 aProcMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
00221 aProcMan->AddDiscreteProcess(theOmegaMinusInelastic);
00222
00223
00224 theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess();
00225 theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP);
00226 theAntiOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
00227
00228 aProcMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
00229 aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic);
00230 }
00231
00232