50 int Kinematics(
double A1I,
double A2I,
double A3I,
double A4I,
double E1I,
double QEFFI,
double PSII,
double &E3I,
double &E3AI,
double &E4I,
double &E4AI,
double &ZETAI,
double &ZETAAI,
double &thetaI,
double &thetaaI,
double &PHII,
double &PHIAI)
84 if(A1I==0 || A2I==0 || A3I==0 || A4I==0) {
85 std::cerr <<
"!!ERROR!! One or more of the particles in the kinematics routine has no mass." << std::endl;
89 double A1,A2,A3,A4,E1,QEFF,PSI,E3,E3A,E4,E4A;
90 double ZETA,ZETAA,THETA,THETAA,PHI,PHIA,ET,AD,ED,QD;
91 double A,B,C,D,CPSI,SPSI,DUM1,DUM2,DUM3,E3T,E3TA;
92 double SZETA,SZA,CTHETA,CTHETAA,PSIMX,DUM0;
106 QD=(A2+A1*QEFF/ET)/AD;
116 DUM0=(D/B-SPSI*SPSI);
118 DUM1=std::sqrt(DUM0);
120 PSIMX=std::asin(std::sqrt(D/B));
121 if(PSI>PSIMX)
return -1;
133 SZETA=std::sqrt(A3*E3/(A4*E4))*SPSI;
134 if(E4A>0) SZA=std::sqrt(A3*E3A/(A4*E4A))*SPSI;
136 ZETA=std::asin(SZETA);
137 ZETAA=std::asin(SZA);
139 CTHETA=(E3T-B-D)/(2.*std::sqrt(A*C));
140 CTHETAA=(E3TA-B-D)/(2.*std::sqrt(A*C));
141 if(CTHETA>1.) CTHETA=1.;
142 if(CTHETAA>1.) CTHETAA=1.;
143 if(CTHETA<-1.) CTHETA=-1.;
144 if(CTHETAA<-1.) CTHETAA=-1.;
145 THETA=std::acos(CTHETA);
146 THETAA=std::acos(CTHETAA);
148 PHI=TMath::Pi()-THETA;
149 PHIA=TMath::Pi()-THETAA;
182 double xcmlr(
double anglab,
double angCM,
double Ap,
double At,
double Ep,
double Q,
bool Tgtex)
203 double tau, taubar, Etp;
205 if(angCM==0 && !Tgtex)
return 1.;
210 Etp = Ep + Q * (1. + Ap/At);
211 taubar = std::sqrt(Ep/Etp);
212 return 1. / std::pow(1.+taubar,2);
215 Etp = Ep + Q * (1. + Ap/At);
216 tau = (Ap/At) * std::sqrt(Ep/Etp);
217 return 1. / std::pow(1.-tau,2);
220 return std::pow(std::sin(anglab)/std::sin(angCM),2) * std::fabs(std::cos(angCM-anglab));
229 int MakeDatafile(
int Zbeam,
float Abeam,
int Ztgt,
float Atgt,
int grouptype, std::vector<WDB_nuclvl> &nuclvls, std::vector<WDB_nuctrans> &nucEtrans, std::vector<WDB_nuctrans> &nucMtrans, std::string filename )
231 int nlvls = nuclvls.size();
232 int nEtrans = nucEtrans.size();
233 int nMtrans = nucMtrans.size();
236 std::ofstream datafile;
238 if(filename.empty()) filename =
"coulex.dat";
239 datafile.open(filename.c_str());
240 if(datafile.fail())
return 1;
242 strout =
"1 " + std::to_string(nlvls) +
"\n";
243 datafile.write(strout.c_str(),strout.size());
245 datafile.write(strout.c_str(),strout.size());
247 datafile.write(strout.c_str(),strout.size());
249 datafile.write(strout.c_str(),strout.size());
250 strout =
"17 " + std::to_string(Zbeam) +
' ' + std::to_string(Abeam) +
'\n';
251 datafile.write(strout.c_str(),strout.size());
252 strout =
"18 " + std::to_string(Ztgt) +
' ' + std::to_string(Atgt) +
'\n';
253 datafile.write(strout.c_str(),strout.size());
254 strout =
"19 1.0 \n";
255 datafile.write(strout.c_str(),strout.size());
256 strout =
"21 1.0 \n";
257 datafile.write(strout.c_str(),strout.size());
258 for(
int l=0;l<nlvls;l++) {
259 if(nuclvls[l].par) strout =
"22 " + std::to_string(l+1) +
' ' + std::to_string(nuclvls[l].spin) +
' ' + std::to_string(nuclvls[l].E) +
" +1 " + std::to_string(nuclvls[l].K_Band) +
'\n';
260 else strout =
"22 " + std::to_string(l+1) +
' ' + std::to_string(nuclvls[l].spin) +
' ' + std::to_string(nuclvls[l].E) +
" -1 " + std::to_string(nuclvls[l].K_Band) +
'\n';
261 datafile.write(strout.c_str(),strout.size());
263 for(
int tE=0;tE<nEtrans;tE++) {
264 strout =
"23 " + std::to_string(nucEtrans[tE].lvl1) +
' ' + std::to_string(nucEtrans[tE].lvl2) +
' ' + std::to_string(nucEtrans[tE].B) +
' ' + std::to_string(nucEtrans[tE].M) +
'\n';
265 datafile.write(strout.c_str(),strout.size());
267 for(
int tM=0;tM<nMtrans;tM++) {
268 strout =
"24 " + std::to_string(nucMtrans[tM].lvl1) +
' ' + std::to_string(nucMtrans[tM].lvl2) +
' ' + std::to_string(nucMtrans[tM].B) +
' ' + std::to_string(nucMtrans[tM].M) +
'\n';
269 datafile.write(strout.c_str(),strout.size());
272 datafile.write(strout.c_str(),strout.size());
275 strout =
"29 1 " + std::to_string(grouptype) +
'\n';
276 datafile.write(strout.c_str(),strout.size());
278 datafile.write(strout.c_str(),strout.size());
280 datafile.write(strout.c_str(),strout.size());