- Timestamp:
- May 27, 2010, 10:22:31 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/physics_lists/lists/src/G4HadronInelasticQBBC.cc
r1228 r1273 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4HadronInelasticQBBC.cc,v 1.2 4 2009/11/25 18:55:56 vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-03 $26 // $Id: G4HadronInelasticQBBC.cc,v 1.26 2010/05/19 18:14:16 vnivanch Exp $ 27 // GEANT4 tag $Name: phys-lists-V09-03-03 $ 28 28 // 29 29 //--------------------------------------------------------------------------- … … 52 52 #include "G4NeutronCaptureXS.hh" 53 53 54 #include "G4QInelastic.hh" 55 #include "G4HadronicProcessStore.hh" 56 54 57 #include "G4ProtonInelasticCrossSection.hh" 55 58 #include "G4NeutronInelasticCrossSection.hh" … … 65 68 #include "G4NeutronRadCapture.hh" 66 69 70 #include "G4PreCompoundModel.hh" 71 #include "G4ExcitationHandler.hh" 72 #include "G4Evaporation.hh" 73 67 74 enum QBBCType 68 75 { … … 77 84 { 78 85 htype = name; 86 theHandler = 0; 87 theEvaporation = 0; 79 88 } 80 89 81 90 G4HadronInelasticQBBC::~G4HadronInelasticQBBC() 82 {} 91 { 92 delete theHandler; 93 delete theEvaporation; 94 } 83 95 84 96 void G4HadronInelasticQBBC::ConstructProcess() … … 97 109 } 98 110 111 // PreCompound and Evaporation models 112 theEvaporation = new G4Evaporation(); 113 theEvaporation->SetCombinedChannel(); 114 theHandler = new G4ExcitationHandler(); 115 theHandler->SetEvaporation(theEvaporation); 116 theHandler->SetMinEForMultiFrag(3.0*GeV); 117 theHandler->SetMaxAandZForFermiBreakUp(17,9); 118 G4PreCompoundModel* thePreCompound = new G4PreCompoundModel(theHandler); 119 99 120 // configure models 100 121 G4HadronicInteraction* theQGSP = 101 BuildModel(new G4QGSBuilder("QGSP",t rue,false),9.5*GeV,100.*TeV);122 BuildModel(new G4QGSBuilder("QGSP",thePreCompound,true,false),12.5*GeV,100.*TeV); 102 123 G4HadronicInteraction* theFTFP = 103 BuildModel(new G4FTFBuilder("FTFP" ),4.5*GeV,25.*GeV);124 BuildModel(new G4FTFBuilder("FTFP",thePreCompound),4.0*GeV,25.*GeV); 104 125 G4HadronicInteraction* theFTFP1 = 105 BuildModel(new G4FTFBuilder("FTFP"),4.5*GeV,100.*TeV); 126 BuildModel(new G4FTFBuilder("FTFP",thePreCompound),4.0*GeV,100.*TeV); 127 106 128 G4HadronicInteraction* theBERT = 107 NewModel(new G4CascadeInterface(),0.0,6.5*GeV); 108 //G4HadronicInteraction* theBERT1 = 109 // NewModel(new G4CascadeInterface(),2.5*GeV,6.5*GeV); 110 //G4HadronicInteraction* theBIC = 111 // NewModel(new G4BinaryCascade(),0.0,3.5*GeV); 112 G4HadronicInteraction* theCHIPS = 113 NewModel(new G4QStringChipsParticleLevelInterface(),0.0,7.5*GeV); 129 NewModel(new G4CascadeInterface(),1.0*GeV,5.0*GeV); 130 G4HadronicInteraction* theBERT1 = 131 NewModel(new G4CascadeInterface(),0.0*GeV,5.0*GeV); 132 133 G4BinaryCascade* bic = new G4BinaryCascade(); 134 bic->SetDeExcitation(thePreCompound); 135 G4HadronicInteraction* theBIC = NewModel(bic,0.0,1.5*GeV); 136 137 // G4HadronicInteraction* theCHIPS = 138 // NewModel(new G4QStringChipsParticleLevelInterface(),0.0,7.5*GeV); 139 140 G4QInelastic* theCHIPS = new G4QInelastic(); 141 G4HadronicProcessStore* store = G4HadronicProcessStore::Instance(); 142 store->RegisterExtraProcess(theCHIPS); 114 143 115 144 // loop over particles … … 118 147 G4ParticleDefinition* particle = theParticleIterator->value(); 119 148 G4String pname = particle->GetParticleName(); 149 G4ProcessManager* pmanager = particle->GetProcessManager(); 120 150 if(verbose > 1) { G4cout << "### HadronInelasticQBBC: " << pname << G4endl; } 121 if(pname == "anti_lambda" || 122 pname == "anti_neutron" || 123 pname == "anti_omega-" || 124 pname == "anti_proton" || 125 pname == "anti_sigma-" || 126 pname == "anti_sigma+" || 127 pname == "anti_xi-" || 128 pname == "anti_xi0" || 129 pname == "kaon-" || 130 pname == "kaon+" || 131 pname == "kaon0S" || 132 pname == "kaon0L" || 133 pname == "lambda" || 134 pname == "neutron" || 135 pname == "omega-" || 136 pname == "pi-" || 137 pname == "pi+" || 138 pname == "proton" || 139 pname == "sigma-" || 140 pname == "sigma+" || 141 pname == "sigma0" || 142 pname == "xi-" || 143 pname == "xi0") { 144 145 // common for all particles 146 G4HadronicProcess* hp = FindInelasticProcess(particle); 147 if(!hp) { continue; } 148 G4ProcessManager* pmanager = particle->GetProcessManager(); 149 pmanager->AddDiscreteProcess(hp); 150 151 // model and X-section configuration 152 if(pname == "proton") { 153 if(fType == fQBBC) { 154 hp->AddDataSet(new G4ProtonInelasticCrossSection()); 155 } else { 156 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle)); 157 } 158 hp->RegisterMe(theQGSP); 159 hp->RegisterMe(theFTFP); 160 hp->RegisterMe(theBERT); 161 // hp->RegisterMe(theBERT1); 162 // hp->RegisterMe(theBIC); 163 164 } else if(pname == "neutron") { 165 if(fType == fQBBC) { 166 hp->AddDataSet(new G4NeutronInelasticCrossSection()); 167 } else if(fType == fQBBC_XGG) { 168 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle)); 169 } else { 170 hp->AddDataSet(new G4NeutronInelasticXS()); 171 } 172 173 hp->RegisterMe(theQGSP); 174 hp->RegisterMe(theFTFP); 175 // hp->RegisterMe(theBERT1); 151 152 // 153 // model and X-section configuration per particle type 154 // 155 if(pname == "proton") { 156 G4HadronicProcess* hp = FindInelasticProcess(particle); 157 if(fType == fQBBC) { 158 hp->AddDataSet(new G4ProtonInelasticCrossSection()); 159 } else { 160 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle)); 161 } 162 hp->RegisterMe(theQGSP); 163 hp->RegisterMe(theFTFP); 164 hp->RegisterMe(theBERT); 165 hp->RegisterMe(theBIC); 166 167 } else if(pname == "neutron") { 168 G4HadronicProcess* hp = FindInelasticProcess(particle); 169 if(fType == fQBBC) { 170 hp->AddDataSet(new G4NeutronInelasticCrossSection()); 171 } else if(fType == fQBBC_XGG) { 172 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle)); 173 } else { 174 hp->AddDataSet(new G4NeutronInelasticXS()); 175 } 176 177 hp->RegisterMe(theQGSP); 178 hp->RegisterMe(theFTFP); 176 179 177 G4HadronicProcess* capture = FindCaptureProcess(); 178 pmanager->AddDiscreteProcess(capture); 179 180 hp->RegisterMe(theBERT); 181 //hp->RegisterMe(theBIC); 182 capture->RegisterMe(new G4NeutronRadCapture()); 183 //capture->RegisterMe(new G4LCapture()); 184 if(fType == fQBBC_XGGSN) { 185 capture->AddDataSet(new G4NeutronCaptureXS()); 186 } 187 188 } else if(pname == "pi-" || pname == "pi+") { 189 if(fType == fQBBC) { 190 hp->AddDataSet(new G4PiNuclearCrossSection()); 191 } else { 192 hp->AddDataSet(new G4BGGPionInelasticXS(particle)); 193 } 194 hp->RegisterMe(theQGSP); 195 hp->RegisterMe(theFTFP); 196 hp->RegisterMe(theBERT); 197 198 } else if(pname == "kaon-" || 199 pname == "kaon+" || 200 pname == "kaon0S" || 201 pname == "kaon0L" || 202 pname == "lambda" || 203 pname == "sigma-" || 204 pname == "sigma+" || 205 pname == "sigma0" || 206 pname == "xi-" || 207 pname == "xi0") { 208 hp->RegisterMe(theFTFP1); 209 hp->RegisterMe(theBERT); 210 180 G4HadronicProcess* capture = FindCaptureProcess(); 181 182 hp->RegisterMe(theBERT); 183 hp->RegisterMe(theBIC); 184 capture->RegisterMe(new G4NeutronRadCapture()); 185 //capture->RegisterMe(new G4LCapture()); 186 if(fType == fQBBC_XGGSN) { 187 capture->AddDataSet(new G4NeutronCaptureXS()); 188 } 189 190 } else if(pname == "pi-" || pname == "pi+") { 191 G4HadronicProcess* hp = FindInelasticProcess(particle); 192 if(fType == fQBBC) { 193 hp->AddDataSet(new G4PiNuclearCrossSection()); 211 194 } else { 212 hp->RegisterMe(theFTFP1); 213 hp->RegisterMe(theCHIPS); 214 215 } 216 217 if(verbose > 1) { 218 G4cout << "### HadronInelasticQBBC: " << hp->GetProcessName() 219 << " added for " << pname << G4endl; 220 } 221 } 195 hp->AddDataSet(new G4BGGPionInelasticXS(particle)); 196 } 197 hp->RegisterMe(theQGSP); 198 hp->RegisterMe(theFTFP); 199 hp->RegisterMe(theBERT1); 200 201 } else if(pname == "kaon-" || 202 pname == "kaon+" || 203 pname == "kaon0S" || 204 pname == "kaon0L" || 205 pname == "lambda" || 206 pname == "sigma-" || 207 pname == "sigma+" || 208 pname == "sigma0" || 209 pname == "xi-" || 210 pname == "xi0") { 211 G4HadronicProcess* hp = FindInelasticProcess(particle); 212 hp->RegisterMe(theFTFP1); 213 hp->RegisterMe(theBERT1); 214 215 } else if(pname == "anti_lambda" || 216 pname == "anti_neutron" || 217 pname == "anti_omega-" || 218 pname == "anti_proton" || 219 pname == "anti_sigma-" || 220 pname == "anti_sigma+" || 221 pname == "anti_xi-" || 222 pname == "anti_xi0" || 223 pname == "omega-") { 224 //G4HadronicProcess* hp = FindInelasticProcess(particle); 225 //hp->RegisterMe(theFTFP1); 226 //hp->RegisterMe(theCHIPS); 227 pmanager->AddDiscreteProcess(theCHIPS); 228 store->RegisterParticleForExtraProcess(theCHIPS,particle); 229 } 222 230 } 223 231 }
Note: See TracChangeset
for help on using the changeset viewer.