Changeset 1315 for trunk/source/processes/hadronic/models/chiral_inv_phase_space/processes/src/G4QLowEnergy.cc
- Timestamp:
- Jun 18, 2010, 11:42:07 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/chiral_inv_phase_space/processes/src/G4QLowEnergy.cc
r1228 r1315 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4QLowEnergy.cc,v 1. 1 2009/11/17 10:36:55 mkossov Exp $27 // GEANT4 tag $Name: geant4-09-0 3$26 // $Id: G4QLowEnergy.cc,v 1.4 2010/06/07 15:19:55 mkossov Exp $ 27 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 28 28 // 29 29 // ---------------- G4QLowEnergy class ----------------- … … 548 548 if(!tD || !pD) // Quasi-Elastic: B+A->(B-1)+N+A || ->B+N+(A-1) 549 549 { 550 G4VQCrossSection* CSmanager=G4QElasticCrossSection::GetPointer(); 550 G4VQCrossSection* PCSmanager=G4QProtonElasticCrossSection::GetPointer(); 551 G4VQCrossSection* NCSmanager=G4QNeutronElasticCrossSection::GetPointer(); 551 552 G4int pPDG=2112; // Proto of the nucleon PDG (proton) 552 553 G4double prM =mNeut; // Proto of the nucleon mass … … 587 588 else break; // Break the while loop 588 589 } 589 G4double xSec=CSmanager->GetCrossSection(false, Mom, tZ, tN, pPDG); 590 G4double xSec=0.; 591 if(pPDG==2212) xSec=PCSmanager->GetCrossSection(false, Mom, tZ, tN, pPDG); 592 else xSec=NCSmanager->GetCrossSection(false, Mom, tZ, tN, pPDG); 590 593 if( xSec <= 0. ) break; // Break the while loop 591 G4double mint=CSmanager->GetExchangeT(tZ,tN,pPDG); // functional randomized -t 592 G4double cost=1.-mint/CSmanager->GetHMaxT(); // cos(theta) in CMS 594 G4double mint=0.; // Prototype of functional randomized -t 595 if(pPDG==2212) mint=PCSmanager->GetExchangeT(tZ,tN,pPDG); // randomized -t 596 else mint=NCSmanager->GetExchangeT(tZ,tN,pPDG); // randomized -t 597 G4double maxt=0.; // Prototype of maximum -t 598 if(pPDG==2212) maxt=PCSmanager->GetHMaxT(); // maximum -t 599 else maxt=NCSmanager->GetHMaxT(); // maximum -t 600 G4double cost=1.-mint/maxt; // cos(theta) in CMS 593 601 if(cost>1. || cost<-1.) break; // Break the while loop 594 602 G4LorentzVector reco4M=G4LorentzVector(0.,0.,0.,tgM); // 4mom of recoil target … … 729 737 rNuc4M=G4LorentzVector(fm,rNE); 730 738 G4LorentzVector qfN4M=targ4M - rNuc4M;// 4Mom of the quasi-free nucleon in LS 731 com4M += qfN4M; // Calculate Total 4Mom for NA scattering739 com4M += qfN4M; // Calculate Total 4Mom for NA scattering 732 740 G4ThreeVector boostV=proj4M.vect()/proj4M.e(); 733 741 qfN4M.boost(-boostV); 734 G4double tNE = qfN4M.e(); // Energy of the QF nucleon in LS742 G4double tNE = qfN4M.e(); // Energy of the QF nucleon in LS 735 743 if(rNE >= prM) Mom = std::sqrt(tNE*tNE-prM2); // Mom(s) fake value 736 else break; // Break the while loop 737 } 738 G4double xSec=CSmanager->GetCrossSection(false, Mom, pZ, pN, pPDG); 739 if( xSec <= 0. ) break; // Break the while loop 740 G4double mint=CSmanager->GetExchangeT(pZ,pN,pPDG); // functional randomized -t 741 G4double cost=1.-mint/CSmanager->GetHMaxT(); // cos(theta) in CMS 742 if(cost>1. || cost<-1.) break; // Break the while loop 744 else break; // Break the while loop 745 } 746 G4double xSec=0.; 747 if(pPDG==2212) xSec=PCSmanager->GetCrossSection(false, Mom, tZ, tN, pPDG); 748 else xSec=NCSmanager->GetCrossSection(false, Mom, tZ, tN, pPDG); 749 if( xSec <= 0. ) break; // Break the while loop 750 G4double mint=0.; // Prototype of functional randomized -t 751 if(pPDG==2212) mint=PCSmanager->GetExchangeT(tZ,tN,pPDG); // randomized -t 752 else mint=NCSmanager->GetExchangeT(tZ,tN,pPDG); // randomized -t 753 G4double maxt=0.; // Prototype of maximum -t 754 if(pPDG==2212) maxt=PCSmanager->GetHMaxT(); // maximum -t 755 else maxt=NCSmanager->GetHMaxT(); // maximum -t 756 G4double cost=1.-mint/maxt; // cos(theta) in CMS 757 if(cost>1. || cost<-1.) break; // Break the while loop 743 758 G4LorentzVector reco4M=G4LorentzVector(0.,0.,0.,prM); // 4mom of recoil target 744 759 G4LorentzVector scat4M=G4LorentzVector(0.,0.,0.,rNM); // 4mom of scattered N … … 747 762 { 748 763 G4cout<<"G4QLE::Tt="<<com4M.m()<<",p="<<prM<<",r="<<rNM<<",c="<<cost<<G4endl; 749 break; // Break the while loop764 break; // Break the while loop 750 765 } 751 766 G4Track* targSpect = 0; 752 767 G4Track* aNucTrack = 0; 753 if(tB > tD) // Fill the residual nucleus768 if(tB > tD) // Fill the residual nucleus 754 769 { 755 770 G4int rZ=tZ-tC; … … 928 943 G4cout<<"G4QLE::PSDI: rpA=1, rpZ"<<rpZ<<G4endl; 929 944 #endif 945 } 946 else if(rpA==2 && rpZ==0) // nn decay 947 { 948 theDefinition = aNeutron; 949 G4LorentzVector f4M=G4LorentzVector(0.,0.,0.,mNeut); // 4mom of 1st neutron 950 G4LorentzVector s4M=G4LorentzVector(0.,0.,0.,mNeut); // 4mom of 2nd neutron 951 #ifdef pdebug 952 G4cout<<"G4QLE::CPS->n+n,nn="<<rp4M.m()<<" >? 2*MNeutron="<<2*mNeutron<<G4endl; 953 #endif 954 if(!G4QHadron(rp4M).DecayIn2(f4M, s4M)) 955 { 956 G4cout<<"*W*G4QLE::CPS->n+n,t="<<rp4M.m()<<" >? 2*Neutron="<<2*mAlph<<G4endl; 957 } 958 G4DynamicParticle* pNeu = new G4DynamicParticle(theDefinition, f4M); 959 aFraPTrack = new G4Track(pNeu, localtime, position ); 960 aFraPTrack->SetWeight(weight); // weighted 961 aFraPTrack->SetTouchableHandle(trTouchable); 962 tt4M-=f4M; 963 #ifdef edebug 964 totBaN-=2; 965 tch4M -=f4M; 966 G4cout<<">>G4QLEn::PSDI:n,tZ="<<totChg<<",tB="<<totBaN<<",t4M="<<tch4M<<G4endl; 967 #endif 968 #ifdef pdebug 969 G4cout<<"G4QLowEn::PSDI:-->ProjSpectA4M="<<f4M<<G4endl; 970 #endif 971 ++nSec; 972 rp4M=s4M; 973 } 974 else if(rpA>2 && rpZ==0) // Z=0 decay 975 { 976 theDefinition = aNeutron; 977 G4LorentzVector f4M=rp4M/rpA; // 4mom of 1st neutron 978 #ifdef pdebug 979 G4cout<<"G4QLE::CPS->Nn,M="<<rp4M.m()<<" >? N*MNeutron="<<rpA*mNeutron<<G4endl; 980 #endif 981 for(G4int it=1; it<rpA; ++it) // Fill (N-1) neutrons to output 982 { 983 G4DynamicParticle* pNeu = new G4DynamicParticle(theDefinition, f4M); 984 G4Track* aNTrack = new G4Track(pNeu, localtime, position ); 985 aNTrack->SetWeight(weight); // weighted 986 aNTrack->SetTouchableHandle(trTouchable); 987 result.push_back(aNTrack); 988 } 989 G4int nesc = rpA-1; 990 tt4M-=f4M*nesc; 991 #ifdef edebug 992 totBaN-=nesc; 993 tch4M -=f4M*nesc; 994 G4cout<<">G4QLEn::PSDI:Nn,tZ="<<totChg<<",tB="<<totBaN<<",t4M="<<tch4M<<G4endl; 995 #endif 996 #ifdef pdebug 997 G4cout<<"G4QLowEn::PSDI:-->ProjSpectA4M="<<f4M<<G4endl; 998 #endif 999 nSec+=nesc; 1000 rp4M=f4M; 930 1001 } 931 1002 else if(rpA==8 && rpZ==4) // Be8 decay
Note: See TracChangeset
for help on using the changeset viewer.