#include <G4HadronInelasticQBBC.hh>
Inheritance diagram for G4HadronInelasticQBBC:
Public Member Functions | |
G4HadronInelasticQBBC (G4int ver=1) | |
G4HadronInelasticQBBC (const G4String &name, G4int ver=1, G4bool ftf=false, G4bool bert=false, G4bool chips=false, G4bool hp=false, G4bool glauber=false) | |
virtual | ~G4HadronInelasticQBBC () |
virtual void | ConstructProcess () |
Definition at line 47 of file G4HadronInelasticQBBC.hh.
G4HadronInelasticQBBC::G4HadronInelasticQBBC | ( | G4int | ver = 1 |
) |
Definition at line 90 of file G4HadronInelasticQBBC.cc.
00091 : G4VHadronPhysics("hInelastic"),verbose(ver),wasActivated(false) 00092 { 00093 htype = "QBBC"; 00094 theAntiNuclXS = 0; 00095 }
G4HadronInelasticQBBC::G4HadronInelasticQBBC | ( | const G4String & | name, | |
G4int | ver = 1 , |
|||
G4bool | ftf = false , |
|||
G4bool | bert = false , |
|||
G4bool | chips = false , |
|||
G4bool | hp = false , |
|||
G4bool | glauber = false | |||
) |
Definition at line 97 of file G4HadronInelasticQBBC.cc.
00099 : G4VHadronPhysics("hInelastic"),verbose(ver),wasActivated(false) 00100 { 00101 htype = name; 00102 theAntiNuclXS = 0; 00103 }
G4HadronInelasticQBBC::~G4HadronInelasticQBBC | ( | ) | [virtual] |
void G4HadronInelasticQBBC::ConstructProcess | ( | ) | [virtual] |
Implements G4VPhysicsConstructor.
Definition at line 110 of file G4HadronInelasticQBBC.cc.
References G4HadronicProcess::AddDataSet(), G4VHadronPhysics::BuildModel(), G4ChipsHyperonInelasticXS::Default_Name(), G4ChipsKaonZeroInelasticXS::Default_Name(), G4ChipsKaonPlusInelasticXS::Default_Name(), G4ChipsKaonMinusInelasticXS::Default_Name(), G4VHadronPhysics::FindCaptureProcess(), G4VHadronPhysics::FindInelasticProcess(), G4HadronicInteractionRegistry::FindModel(), G4cout, G4endl, G4ParticleDefinition::GetParticleName(), G4CrossSectionDataSetRegistry::Instance(), G4HadronicProcessStore::Instance(), G4HadronicInteractionRegistry::Instance(), G4VHadronPhysics::NewModel(), G4HadronicProcessStore::RegisterExtraProcess(), G4HadronicProcess::RegisterMe(), G4ParticleTableIterator< K, V >::reset(), G4VPhysicsConstructor::theParticleIterator, and G4ParticleTableIterator< K, V >::value().
00111 { 00112 if(wasActivated) return; 00113 wasActivated = true; 00114 00115 if(verbose > 1) { 00116 G4cout << "### HadronInelasticQBBC Construct Process with type <" 00117 << htype << ">" << G4endl; 00118 } 00119 00120 G4double emax = 100.*TeV; 00121 00122 00123 //G4cout << "G4HadronInelasticQBBC::ConstructProcess new PRECO"<< G4endl; 00124 00125 // PreCompound and Evaporation models are instantiated here 00126 G4PreCompoundModel* thePreCompound = 0; 00127 G4HadronicInteraction* p = 00128 G4HadronicInteractionRegistry::Instance()->FindModel("PRECO"); 00129 thePreCompound = static_cast<G4PreCompoundModel*>(p); 00130 if(!thePreCompound) { thePreCompound = new G4PreCompoundModel(); } 00131 //G4ExcitationHandler* handler = thePreCompound->GetExcitationHandler(); 00132 00133 // configure models 00134 //G4HadronicInteraction* theQGSP = 00135 // BuildModel(new G4QGSBuilder("QGSP",thePreCompound,true,false),12.5*GeV,emax); 00136 G4HadronicInteraction* theFTFP = 00137 BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax); 00138 G4HadronicInteraction* theFTFP1 = 00139 BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax); 00140 G4HadronicInteraction* theFTFP2 = 00141 BuildModel(new G4FTFBuilder("FTFP",thePreCompound),0.0,emax); 00142 00143 G4HadronicInteraction* theBERT = 00144 NewModel(new G4CascadeInterface(),1.0*GeV,12.0*GeV); 00145 G4HadronicInteraction* theBERT1 = 00146 NewModel(new G4CascadeInterface(),0.0*GeV,12.0*GeV); 00147 00148 //G4cout << "G4HadronInelasticQBBC::ConstructProcess new Binary"<< G4endl; 00149 G4BinaryCascade* bic = new G4BinaryCascade(thePreCompound); 00150 G4HadronicInteraction* theBIC = NewModel(bic,0.0,1.5*GeV); 00151 00152 G4QInelastic* theCHIPS = new G4QInelastic(); 00153 G4HadronicProcessStore* store = G4HadronicProcessStore::Instance(); 00154 store->RegisterExtraProcess(theCHIPS); 00155 00156 // cross sections 00157 theAntiNuclXS = new G4ComponentAntiNuclNuclearXS(); 00158 G4CrossSectionInelastic* anucxs = 00159 new G4CrossSectionInelastic(theAntiNuclXS); 00160 00161 // loop over particles 00162 theParticleIterator->reset(); 00163 while( (*theParticleIterator)() ) { 00164 G4ParticleDefinition* particle = theParticleIterator->value(); 00165 G4String pname = particle->GetParticleName(); 00166 //G4ProcessManager* pmanager = particle->GetProcessManager(); 00167 if(verbose > 1) { 00168 G4cout << "### HadronInelasticQBBC: " << pname << G4endl; 00169 } 00170 00171 // 00172 // model and X-section configuration per particle type 00173 // 00174 if(pname == "proton") { 00175 G4HadronicProcess* hp = FindInelasticProcess(particle); 00176 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle)); 00177 00178 //hp->RegisterMe(theQGSP); 00179 hp->RegisterMe(theFTFP); 00180 hp->RegisterMe(theBERT); 00181 hp->RegisterMe(theBIC); 00182 00183 } else if(pname == "neutron") { 00184 G4HadronicProcess* hp = FindInelasticProcess(particle); 00185 hp->AddDataSet(new G4NeutronInelasticXS()); 00186 //hp->RegisterMe(theQGSP); 00187 hp->RegisterMe(theFTFP); 00188 00189 G4HadronicProcess* capture = FindCaptureProcess(); 00190 capture->AddDataSet(new G4NeutronCaptureXS()); 00191 hp->RegisterMe(theBERT); 00192 hp->RegisterMe(theBIC); 00193 capture->RegisterMe(new G4NeutronRadCapture()); 00194 00195 } else if(pname == "pi-" || pname == "pi+") { 00196 G4HadronicProcess* hp = FindInelasticProcess(particle); 00197 // hp->AddDataSet(new G4BGGPionInelasticXS(particle)); 00198 hp->AddDataSet(new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV)); 00199 //hp->RegisterMe(theQGSP); 00200 hp->RegisterMe(theFTFP); 00201 hp->RegisterMe(theBERT1); 00202 00203 } else if(pname == "kaon-" ) { 00204 G4HadronicProcess* hp = FindInelasticProcess(particle); 00205 hp->RegisterMe(theFTFP1); 00206 hp->RegisterMe(theBERT1); 00207 hp->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name())); 00208 00209 } else if(pname == "kaon+" ) { 00210 G4HadronicProcess* hp = FindInelasticProcess(particle); 00211 hp->RegisterMe(theFTFP1); 00212 hp->RegisterMe(theBERT1); 00213 hp->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name())); 00214 00215 } else if(pname == "kaon0S" || 00216 pname == "kaon0L") { 00217 G4HadronicProcess* hp = FindInelasticProcess(particle); 00218 hp->RegisterMe(theFTFP1); 00219 hp->RegisterMe(theBERT1); 00220 hp->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name())); 00221 00222 } else if(pname == "lambda" || 00223 pname == "omega-" || 00224 pname == "sigma-" || 00225 pname == "sigma+" || 00226 pname == "sigma0" || 00227 pname == "xi-" || 00228 pname == "xi0") { 00229 G4HadronicProcess* hp = FindInelasticProcess(particle); 00230 hp->RegisterMe(theFTFP1); 00231 hp->RegisterMe(theBERT1); 00232 hp->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsHyperonInelasticXS::Default_Name())); 00233 00234 } else if(pname == "anti_alpha" || 00235 pname == "anti_deuteron"|| 00236 pname == "anti_He3" || 00237 pname == "anti_proton" || 00238 pname == "anti_triton" || 00239 pname == "anti_lambda" || 00240 pname == "anti_neutron" || 00241 pname == "anti_omega-" || 00242 pname == "anti_sigma-" || 00243 pname == "anti_sigma+" || 00244 pname == "anti_xi-" || 00245 pname == "anti_xi0" 00246 ) { 00247 00248 G4HadronicProcess* hp = FindInelasticProcess(particle); 00249 hp->RegisterMe(theFTFP2); 00250 hp->AddDataSet(anucxs); 00251 00252 //pmanager->AddDiscreteProcess(theCHIPS); 00253 //store->RegisterParticleForExtraProcess(theCHIPS,particle); 00254 } 00255 } 00256 }