45 G4cout <<
"Please enter the energy loss per fermi in GeV"<<
G4endl;
46 G4cin >> theEnergyLossPerFermi;
49 G4cout<<
"G4StringChipsInterface::Constructor is called"<<
G4endl;
51 theEnergyLossPerFermi = 0.5*
GeV;
59 G4cout<<
"G4StringChipsInterface::ApplyYourself is called"<<
G4endl;
68 G4cout<<
"G4StringChipsInterface::Propagate is called"<<
G4endl;
72 if(theSecondaries->size() == 1)
73 throw G4HadronicException(__FILE__, __LINE__,
"G4StringChipsInterface: Only one particle from String models!");
79 G4double inpactPar2 = impactX*impactX + impactY*impactY;
84 if(radius2 - inpactPar2>0) pathlength = 2.*std::sqrt(radius2 - inpactPar2);
85 G4double theEnergyLostInFragmentation = theEnergyLossPerFermi*pathlength/
fermi;
88 std::list<std::pair<G4double, G4KineticTrack *> > theSorted;
89 std::list<std::pair<G4double, G4KineticTrack *> >::iterator current;
90 for(
unsigned int secondary = 0; secondary<theSecondaries->size(); secondary++)
92 G4LorentzVector a4Mom = theSecondaries->operator[](secondary)->Get4Momentum();
95 G4cout <<
"ALL STRING particles "<<theSecondaries->operator[](secondary)->GetDefinition()->GetPDGCharge()<<
" "
96 << theSecondaries->operator[](secondary)->GetDefinition()->GetPDGEncoding()<<
" "
101 std::pair<G4double, G4KineticTrack *> it;
103 it.second = theSecondaries->operator[](secondary);
105 for(current = theSorted.begin(); current!=theSorted.end(); current++)
107 if((*current).first > toSort)
109 theSorted.insert(current, it);
116 theSorted.push_front(it);
133 std::list<std::pair<G4double, G4KineticTrack *> >::iterator firstEscaping = theSorted.begin();
135 G4int particleCount = 0;
136 G4LorentzVector theLow = (*(theSorted.begin())).second->Get4Momentum();
140 G4cout <<
"CHIPS ENERGY LOST "<<theEnergyLostInFragmentation<<
G4endl;
148 G4cout<<
"G4StringChipsInterface::Propagate: Absorption"<<
G4endl;
152 for(current = theSorted.begin(); current!=theSorted.end(); current++)
154 firstEscaping = current;
155 if((*current).second->GetDefinition()->GetQuarkContent(3)!=0 ||
156 (*current).second->GetDefinition()->GetAntiQuarkContent(3) !=0)
163 secondaries = aResult->
Decay();
165 if ( secondaries == NULL )
171 theResult->push_back(theSec);
175 for (
unsigned int aSecondary=0; aSecondary<secondaries->size(); aSecondary++)
177 theSec =
new G4ReactionProduct(secondaries->operator[](aSecondary)->GetDefinition());
178 G4LorentzVector current4Mom = secondaries->operator[](aSecondary)->Get4Momentum();
181 theResult->push_back(theSec);
188 runningEnergy += (*current).second->Get4Momentum().t();
189 if(runningEnergy > theEnergyLostInFragmentation)
break;
192 G4cout <<
"ABSORBED STRING particles "<<current->second->GetDefinition()->GetPDGCharge()<<
" "
193 << current->second->GetDefinition()->GetPDGEncoding()<<
" "
194 << current->second->Get4Momentum() <<
G4endl;
197 G4cout<<
"G4StringChipsInterface::Propagate:C="
198 <<current->second->GetDefinition()->GetPDGCharge()<<
", PDG="
199 << current->second->GetDefinition()->GetPDGEncoding()<<
", 4M="
200 << current->second->Get4Momentum() <<
G4endl;
205 theHigh = (*current).second->Get4Momentum();
206 proj4Mom += (*current).second->Get4Momentum();
209 G4cout <<
"sorted rapidities "<<current->second->Get4Momentum().rapidity()<<
G4endl;
213 nD += (*current).second->GetDefinition()->GetQuarkContent(1);
214 nU += (*current).second->GetDefinition()->GetQuarkContent(2);
215 nS += (*current).second->GetDefinition()->GetQuarkContent(3);
216 nAD += (*current).second->GetDefinition()->GetAntiQuarkContent(1);
217 nAU += (*current).second->GetDefinition()->GetAntiQuarkContent(2);
218 nAS += (*current).second->GetDefinition()->GetAntiQuarkContent(3);
223 G4cout <<
"Quark content: d="<<nD<<
", u="<<nU<<
", s="<< nS <<
G4endl;
224 G4cout <<
"Anti-quark content: anit-d="<<nAD<<
", anti-u="<<nAU<<
", anti-s="<< nAS <<
G4endl;
227 G4QContent theProjectiles(nD, nU, nS, nAD, nAU, nAS);
230 G4cout <<
"G4QContent is constructed"<<endl;
256 G4int targetPDGCode = 90000000 + 1000*resZ + (resA-resZ);
258 targetMass -= hitMass;
259 G4double targetEnergy = std::sqrt(hitMomentum.
mag2()+targetMass*targetMass);
267 G4double fractionOfSingleQuasiFreeNucleons = 0.5;
268 G4double fractionOfPairedQuasiFreeNucleons = 0.05;
269 G4double clusteringCoefficient = 5.;
271 G4double halfTheStrangenessOfSee = 0.3;
275 fractionOfPairedQuasiFreeNucleons,
276 clusteringCoefficient);
278 halfTheStrangenessOfSee,
282 G4cout <<
"G4QNucleus parameters "<< fractionOfSingleQuasiFreeNucleons <<
" "
283 << fractionOfPairedQuasiFreeNucleons <<
" "<< clusteringCoefficient <<
G4endl;
284 G4cout <<
"G4Quasmon parameters "<< temperature <<
" "<< halfTheStrangenessOfSee <<
" "
285 <<etaToEtaPrime <<
G4endl;
286 G4cout <<
"The Target PDG code = "<<targetPDGCode<<
G4endl;
297 proj4Mom.
boost(-1.*targ4Mom.boostVector());
302 proj4Mom = toZ*proj4Mom;
306 G4cout <<
"a Boosted projectile vector along z"<<proj4Mom<<
" "<<proj4Mom.mag()<<
G4endl;
310 projHV.push_back(iH);
314 if (particleCount!=0)
323 G4cerr <<
"Exception thrown passing through G4ChiralInvariantPhaseSpace "<<
G4endl;
325 G4cerr <<
" Dumping the information in the pojectile list"<<
G4endl;
326 for(
size_t i=0; i< projHV.size(); i++)
328 G4cerr <<
" Incoming 4-momentum and PDG code of "<<i<<
"'th hadron: "
329 <<
" "<< projHV[i]->Get4Momentum()<<
" "<<projHV[i]->GetPDGCode()<<
G4endl;
333 std::for_each(projHV.begin(), projHV.end(),
DeleteQHadron());
341 G4cout <<
"NEXT EVENT"<<endl;
345 for(current = firstEscaping; current!=theSorted.end(); current++)
352 secondaries = aResult->
Decay();
354 if ( secondaries == NULL )
358 current4Mom = toLab*current4Mom;
359 current4Mom.
boost(targ4Mom.boostVector());
362 theResult->push_back(theSec);
366 for (
unsigned int aSecondary=0; aSecondary<secondaries->size(); aSecondary++)
368 theSec =
new G4ReactionProduct(secondaries->operator[](aSecondary)->GetDefinition());
369 G4LorentzVector current4Mom = secondaries->operator[](aSecondary)->Get4Momentum();
370 current4Mom = toLab*current4Mom;
371 current4Mom.boost(targ4Mom.boostVector());
374 theResult->push_back(theSec);
381 delete theSecondaries;
385 G4cout <<
"Number of particles from string"<<theResult->size()<<
G4endl;
386 G4cout <<
"Number of particles from chips"<<output->size()<<
G4endl;
389 for(
unsigned int particle = 0; particle < output->size(); particle++)
391 if(output->operator[](particle)->GetNFragments() != 0)
393 delete output->operator[](particle);
397 G4int pdgCode = output->operator[](particle)->GetPDGCode();
406 G4int aZ = (pdgCode-90000000)/1000;
407 if (aZ>1000) aZ=aZ%1000;
408 G4int anN = pdgCode-90000000-1000*aZ;
409 if(anN>1000) anN=anN%1000;
426 G4cout <<
"Particle code produced = "<< pdgCode <<
G4endl;
430 G4LorentzVector current4Mom = output->operator[](particle)->Get4Momentum();
431 current4Mom = toLab*current4Mom;
432 current4Mom.
boost(targ4Mom.boostVector());
435 theResult->push_back(theSec);
443 delete output->operator[](particle);
447 G4cout <<
"Number of particles"<<theResult->size()<<
G4endl;
450 G4cout <<
"QUASMON preparation info "
451 << 1./
MeV*proj4Mom<<
" "
452 << 1./
MeV*targ4Mom<<
" "
453 << nD<<
" "<<nU<<
" "<<nS<<
" "<<nAD<<
" "<<nAU<<
" "<<nAS<<
" "
455 << particleCount<<
" "