259 #ifdef INCLXX_IN_GEANT4_MODE
262 ed <<
" Data missing: set environment variable G4INCLDATA\n"
263 <<
" to point to the directory containing data files needed\n"
264 <<
" by the INCL++ model" <<
G4endl;
265 G4Exception(
"G4INCLDataFile::readData()",
"rawppbarFS.dat, ...",
269 G4String dataPathnbarp(dataPath0 +
"/rawnbarpFS.dat");
270 G4String dataPathnbarn(dataPath0 +
"/rawnbarnFS.dat");
271 G4String dataPathnbarnk(dataPath0 +
"/rawppbarFSkaonic.dat");
272 G4String dataPathnbarpk(dataPath0 +
"/rawnbarpFSkaonic.dat");
274 Config const *theConfig=theNucleus->getStore()->getConfig();
278 std::string dataPathnbarn(path +
"/rawnbarnFS.dat");
279 INCL_DEBUG(
"Reading nbarn final states" << dataPathnbarn <<
'\n');
280 std::string dataPathnbarp(path +
"/rawnbarpFS.dat");
281 INCL_DEBUG(
"Reading nbarp final states" << dataPathnbarp <<
'\n');
282 std::string dataPathnbarnk(path +
"/rawppbarFSkaonic.dat");
283 INCL_DEBUG(
"Reading nbarn kaonic final states" << dataPathnbarnk <<
'\n');
284 std::string dataPathnbarpk(path +
"/rawnbarpFSkaonic.dat");
285 INCL_DEBUG(
"Reading nbarp kaonic final states" << dataPathnbarpk <<
'\n');
288 std::vector<G4double> probabilities;
289 std::vector<std::vector<std::string>> particle_types;
295 G4int z = theNucleus->getZ();
296 G4int a = theNucleus->getA();
298 if(isProton ==
true){z++;}
305 if(isProton ==
true){
307 if(rdm < (1.-kaonicFSprob)){
308 INCL_DEBUG(
"pionic pp final state chosen" <<
'\n');
309 sum =
read_file(dataPathnbarp, probabilities, particle_types);
310 rdm = (rdm/(1.-kaonicFSprob))*sum;
313 if ( n < 0 )
return starlist;
314 for(
G4int j = 0; j < static_cast<G4int>(particle_types[n].size()); j++){
315 if(particle_types[n][j] ==
"pi0"){
317 starlist.push_back(p);
319 else if(particle_types[n][j] ==
"pi-"){
321 starlist.push_back(p);
323 else if(particle_types[n][j] ==
"pi+"){
325 starlist.push_back(p);
327 else if(particle_types[n][j] ==
"omega"){
329 starlist.push_back(p);
331 else if(particle_types[n][j] ==
"eta"){
333 starlist.push_back(p);
335 else if(particle_types[n][j] ==
"rho-"){
337 starlist.push_back(p);
339 starlist.push_back(pp);
341 else if(particle_types[n][j] ==
"rho+"){
343 starlist.push_back(p);
345 starlist.push_back(pp);
347 else if(particle_types[n][j] ==
"rho0"){
349 starlist.push_back(p);
351 starlist.push_back(pp);
354 INCL_ERROR(
"Some non-existing FS particle detected when reading pbar FS files");
355 for(
G4int jj = 0; jj < static_cast<G4int>(particle_types[n].size()); jj++){
356 std::cout <<
"gotcha! " << particle_types[n][jj] << std::endl;
358 std::cout <<
"Some non-existing FS particle detected when reading pbar FS files" << std::endl;
363 INCL_DEBUG(
"kaonic pp final state chosen" <<
'\n');
364 sum =
read_file(dataPathnbarpk, probabilities, particle_types);
365 rdm = ((1-rdm)/kaonicFSprob)*sum;
368 if ( n < 0 )
return starlist;
369 for(
G4int j = 0; j < static_cast<G4int>(particle_types[n].size()); j++){
370 if(particle_types[n][j] ==
"pi0"){
372 starlist.push_back(p);
374 else if(particle_types[n][j] ==
"pi-"){
376 starlist.push_back(p);
378 else if(particle_types[n][j] ==
"pi+"){
380 starlist.push_back(p);
382 else if(particle_types[n][j] ==
"omega"){
384 starlist.push_back(p);
386 else if(particle_types[n][j] ==
"eta"){
388 starlist.push_back(p);
390 else if(particle_types[n][j] ==
"K-"){
392 starlist.push_back(p);
394 else if(particle_types[n][j] ==
"K+"){
396 starlist.push_back(p);
398 else if(particle_types[n][j] ==
"K0"){
400 starlist.push_back(p);
402 else if(particle_types[n][j] ==
"K0b"){
404 starlist.push_back(p);
407 INCL_ERROR(
"Some non-existing FS particle detected when reading pbar FS files");
408 for(
G4int jj = 0; jj < static_cast<G4int>(particle_types[n].size()); jj++){
409 std::cout <<
"gotcha! " << particle_types[n][jj] << std::endl;
411 std::cout <<
"Some non-existing FS particle detected when reading pbar FS files" << std::endl;
418 if(rdm < (1.-kaonicFSprob)){
419 INCL_DEBUG(
"pionic np final state chosen" <<
'\n');
420 sum =
read_file(dataPathnbarn, probabilities, particle_types);
421 rdm = (rdm/(1.-kaonicFSprob))*sum;
424 if ( n < 0 )
return starlist;
425 for(
G4int j = 0; j < static_cast<G4int>(particle_types[n].size()); j++){
426 if(particle_types[n][j] ==
"pi0"){
428 starlist.push_back(p);
430 else if(particle_types[n][j] ==
"pi-"){
432 starlist.push_back(p);
434 else if(particle_types[n][j] ==
"pi+"){
436 starlist.push_back(p);
438 else if(particle_types[n][j] ==
"omega"){
440 starlist.push_back(p);
442 else if(particle_types[n][j] ==
"eta"){
444 starlist.push_back(p);
446 else if(particle_types[n][j] ==
"rho-"){
448 starlist.push_back(p);
450 starlist.push_back(pp);
452 else if(particle_types[n][j] ==
"rho+"){
454 starlist.push_back(p);
456 starlist.push_back(pp);
458 else if(particle_types[n][j] ==
"rho0"){
460 starlist.push_back(p);
462 starlist.push_back(pp);
465 INCL_ERROR(
"Some non-existing FS particle detected when reading pbar FS files");
466 for(
G4int jj = 0; jj < static_cast<G4int>(particle_types[n].size()); jj++){
467 std::cout <<
"gotcha! " << particle_types[n][jj] << std::endl;
469 std::cout <<
"Some non-existing FS particle detected when reading pbar FS files" << std::endl;
474 INCL_DEBUG(
"kaonic np final state chosen" <<
'\n');
475 sum =
read_file(dataPathnbarnk, probabilities, particle_types);
476 rdm = ((1-rdm)/kaonicFSprob)*sum;
479 if ( n < 0 )
return starlist;
480 for(
G4int j = 0; j < static_cast<G4int>(particle_types[n].size()); j++){
481 if(particle_types[n][j] ==
"pi0"){
483 starlist.push_back(p);
485 else if(particle_types[n][j] ==
"pi-"){
487 starlist.push_back(p);
489 else if(particle_types[n][j] ==
"pi+"){
491 starlist.push_back(p);
493 else if(particle_types[n][j] ==
"omega"){
495 starlist.push_back(p);
497 else if(particle_types[n][j] ==
"eta"){
499 starlist.push_back(p);
501 else if(particle_types[n][j] ==
"K-"){
503 starlist.push_back(p);
505 else if(particle_types[n][j] ==
"K+"){
507 starlist.push_back(p);
509 else if(particle_types[n][j] ==
"K0"){
511 starlist.push_back(p);
513 else if(particle_types[n][j] ==
"K0b"){
515 starlist.push_back(p);
518 INCL_ERROR(
"Some non-existing FS particle detected when reading pbar FS files");
519 for(
G4int jj = 0; jj < static_cast<G4int>(particle_types[n].size()); jj++){
520 std::cout <<
"gotcha! " << particle_types[n][jj] << std::endl;
522 std::cout <<
"Some non-existing FS particle detected when reading pbar FS files" << std::endl;
529 G4int stra = theNucleus->getS();
531 if(theNucleus->isNucleusNucleusCollision()==
false){
532 if(isProton ==
true){
540 }
else if(theNucleus->isNucleusNucleusCollision()==
true){
545 if(starlist.size() < 2){
546 INCL_ERROR(
"should never happen, at least 2 final state particles!" <<
'\n');
548 else if(starlist.size() == 2){
553 G4double s = energyOfMesonStar*energyOfMesonStar;
554 G4double mom1 = std::sqrt(s/4 - (std::pow(m1,2) + std::pow(m2,2))/2 - std::pow(m1,2)*std::pow(m2,2)/s + (std::pow(m1,4) + 2*std::pow(m1*m2,2) + std::pow(m2,4))/(4*s));
556 (*first)->setMomentum(momentello);
557 (*first)->adjustEnergyFromMomentum();
558 (*last)->setMomentum(-momentello);
559 (*last)->adjustEnergyFromMomentum();