Skip to content

Commit

Permalink
Use Peter Bosted's implementation of MAID model for exclusive pions a…
Browse files Browse the repository at this point in the history
…t lower W.
  • Loading branch information
gaskelld committed Sep 4, 2020
1 parent 79c7610 commit 745b620
Show file tree
Hide file tree
Showing 6 changed files with 34,736 additions and 22 deletions.
6,906 changes: 6,906 additions & 0 deletions maidpi0n.dat

Large diffs are not rendered by default.

6,906 changes: 6,906 additions & 0 deletions maidpi0p.dat

Large diffs are not rendered by default.

6,909 changes: 6,909 additions & 0 deletions maidpi0pborn.dat

Large diffs are not rendered by default.

6,906 changes: 6,906 additions & 0 deletions maidpimp.dat

Large diffs are not rendered by default.

6,906 changes: 6,906 additions & 0 deletions maidpipn.dat

Large diffs are not rendered by default.

225 changes: 203 additions & 22 deletions physics_pion.f
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,15 @@ real*8 function peepi(vertex,main)
real*8 ebeamcm,pbeamcm,pbeamcmx,pbeamcmy,pbeamcmz !p_beam in C.M.
real*8 etarcm,ptarcm,ptarcmx,ptarcmy,ptarcmz !p_fermi in C.M.
real*8 thetacm,phicm,phiqn,jacobian,jac_old
real*8 Wgev, Q2gev, E0, cthcm, sig0, fac1

real*8 sig_multipole,sig_blok,sig_param04,sig_param_3000

integer final_state
integer final_state, ipi
logical first,low_w_flag

data first /.TRUE./
data low_w_flag /.FALSE./ !Assume high W kinematics to start
cdg data low_w_flag /.FALSE./ !Assume high W kinematics to start

* Calculate velocity of PHOTON-NUCLEON C.M. system in the lab frame. Use beta
* and gamma of the cm system (bstar and gstar) to transform particles into
Expand Down Expand Up @@ -89,19 +90,20 @@ real*8 function peepi(vertex,main)
* in the subroutine (according to DJG - see gaskell_model.ps)
k_eq = (main%wcm**2-targ%Mtar_struck**2)/2./targ%Mtar_struck

* Initialize some stuff for the multipole model.
if (first) then
first = .false.
if(which_pion.eq.0 .or. which_pion.eq.10) then !pi+
final_state = 1
else
final_state = 2
endif
if(k_eq.lt.500.)then
write(6,*) 'Using low W multipole pion model...'
low_w_flag = .TRUE.
endif
endif
CDG - Remove multipole model
CDG* Initialize some stuff for the multipole model.
CDG if (first) then
CDG first = .false.
CDG if(which_pion.eq.0 .or. which_pion.eq.10) then !pi+
CDG final_state = 1
CDG else
CDG final_state = 2
CDG endif
CDG if(k_eq.lt.500.)then
CDG write(6,*) 'Using low W multipole pion model...'
CDG low_w_flag = .TRUE.
CDG endif
CDG endif

* Get cross section in photon-nucleon center of mass. sigcm1 is blok
* fit (default model - can always be evaluated). sigcm2 is multipole,
Expand All @@ -121,14 +123,30 @@ real*8 function peepi(vertex,main)

sigma_eepi = ntup%sigcm1

* For low w, use multipole expansion as default cross section model.
if(low_w_flag) then

ntup%sigcm2 = sig_multipole(k_eq,efer,qstar,tfcos,ppicm,s/1.e6,thetacm,
> phicm,main%epsilon,final_state,vertex%q2/1.e6,targ%Mtar_struck/1000.,pfer,mh)
sigma_eepi = ntup%sigcm2

CDG For lower W, user Peter Bosted's implementation of the MAID model
if(main%wcm.lt.2300) then ! W less than 2.3 GeV
Q2gev = vertex%q2/1.d6 !convert to GeV**2
Wgev = main%wcm/1000.0 ! convert to GeV
cthcm = cos(thetacm)
E0 = vertex%Ein/1000.0 !convert to GeV
ipi = 3 ! pi+ by default
if (which_pion.eq.1 .or. which_pion.eq.11) ipi=4 ! pi-
call sigmaid(ipi,Q2gev,Wgev,E0,cthcm,phicm,sig0)
! convert from mub / dOmega* to mub / dt / dphi*
ntup%sigcm2 = sig0 / ppicm / qstar / 2.
c smoothly join between W of 1.7 and 2.3
fac1 = max(0., (Wgev - 1.7) / 0.6)
sigma_eepi = ntup%sigcm1 * fac1 + ntup%sigcm2 * (1 - fac1)
endif
* For low w, use multipole expansion as default cross section model.
CDG if(low_w_flag) then
CDG
CDG ntup%sigcm2 = sig_multipole(k_eq,efer,qstar,tfcos,ppicm,s/1.e6,thetacm,
CDG > phicm,main%epsilon,final_state,vertex%q2/1.e6,targ%Mtar_struck/1000.,pfer,mh)
CDG sigma_eepi = ntup%sigcm2
CDG
CDG endif
ntup%sigcm = sigma_eepi !sig_cm
Expand Down Expand Up @@ -539,3 +557,166 @@ real*8 function sig_param_3000(thetacm,phicm,t,q2_gev,s_gev,eps,mtar_gev,which_p
return
end
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
subroutine sigmaid(Ipi,q2,w,e0,costh,phi,sig0)
ccccccccccccccccccccccccccccccccccccccccccccccccccc
c get exclusive pion cross sections and target
c asymmetries from MAID 2007.
c inputs: ipi = 1, 2, 3, 4 for pi0 p, pi0 n, pi+ n, pi- p
c q2 in GeV2. For Q2>5, extrapolation is done
c W in GeV. For W>2, extrapolation is done
c E0 beam energy in GeV
c costh cos(th*) (from -1 to 1)
c phi phi* (in radians, from 0 to 2pi)
c outputs: cross section dsigma/dOmega in the N-pi
c c.m. system, in mub/sr
c sigma = sig0 + Pt * sigz + Pb * Pt * sigez
c where Pb and Pt are beam and target polarization
ccccccccccccccccccccccccccccccccccccccccccccccccccc
implicit none
integer i,Ipi,iq,iw,ith,j,k
real*8 q2,w,e0,costh,phi,sig0,sigz, sigez, sige
real*8 maidtbl(4,25,46,6,18)
real*8 wfact, ST, SL, STL, STT, STLZ, STTZ, STLP
real*8 STLPZ, STTPZ, CSF, SNF, CS2F, SN2F, CST,SNT
real*8 STLPY,STTPX,SLY,STY,STLX,sthe,pt,pl,pn
REAL*8 STLY,STTX,STTY,STLPX
real*8 x, eps, am/0.9383/, nu, ep, sin2
real*8 cthmin(6)/-0.20, 0.20, 0.44, 0.63, 0.78, 0.90/
real*8 cthmax(6)/ 0.20, 0.44, 0.63, 0.78, 0.90, 1.0/
logical first/.true./
! Read in the MAID tables generated by
! ~bosted/eg1c/MAID/targetall.f using code
! provided by Lothar Tiator (MAID group)
if(first) then
first = .false.
do i=1,4
if(i.eq.1) open(unit=9,file='maidpi0p.dat')
if(i.eq.2) open(unit=9,file='maidpi0n.dat')
if(i.eq.3) open(unit=9,file='maidpipn.dat')
if(i.eq.4) open(unit=9,file='maidpimp.dat')
do iq=1,25
do iw=1,46
do ith=1,6
read(9,'(f11.6,18f8.4)')
> (maidtbl(i,iq,iw,ith,j),j=1,18)
enddo
enddo
enddo
close(unit=9)
enddo
endif
! Initialize answers
sig0 = 0.
sigz = 0.
sigez = 0.
st = 0.
sige = 0.
if(w.lt.1.08) return
! get epsilon
nu = (w**2 - am**2 + q2) / 2. / am
if(nu .gt. e0) return
ep = e0 - nu
sin2 = q2 / 4. / e0 / ep
if(sin2.le.0.0 .or. sin2.gt. 1.) return
eps = 1./(1. + 2. * (1. + nu**2 / q2) * sin2 /
> (1. - sin2))
! tHIS IS sin(theta_electron)
sthe = 2. * sqrt(sin2)
! this is sin(theta_q)
pt = ep * sthe / sqrt(q2 + nu**2)
! this is cos(theta_q) (target b-field along q)
pl = sqrt(1. - pt**2)
! This is normal component of target b-field
pn = -pt * sin(phi)
! This is now the in-plane component
pt = pt * cos(phi)
! Get nearest bin in Q2, W, and costh
iq = int((q2 + 0.1)/0.2)
iq = min(25,max(1,iq))
iw = int((w-1.090)/0.020)
iw = min(46,max(1,iw))
ith=0
do i=1,6
if(costh.ge.cthmin(i).and.costh.le.cthmax(i)) ith=i
enddo
ith = min(6,max(1,ith))
! Get sigma_t in mub/sr, as well as sigm_l, ...
wfact = 1.
if(w.gt.1.232) wfact = (w -1.132)/0.100
ST = maidtbl(Ipi,iq,iw,ith,1) / max(0.2,q2) / wfact
SL = maidtbl(Ipi,iq,iw,ith,2) * ST
STL = maidtbl(Ipi,iq,iw,ith,3) * ST
STT = maidtbl(Ipi,iq,iw,ith,4) * ST
STLZ = maidtbl(Ipi,iq,iw,ith,5) * ST
STTZ = maidtbl(Ipi,iq,iw,ith,6) * ST
STLPZ= maidtbl(Ipi,iq,iw,ith,7) * ST
STTPZ= maidtbl(Ipi,iq,iw,ith,8) * ST
STLP = maidtbl(Ipi,iq,iw,ith,9) * ST
STLX = maidtbl(Ipi,iq,iw,ith,10) * ST
STLY = maidtbl(Ipi,iq,iw,ith,11) * ST
STTX = maidtbl(Ipi,iq,iw,ith,12) * ST
STTY = maidtbl(Ipi,iq,iw,ith,13) * ST
STLPX= maidtbl(Ipi,iq,iw,ith,14) * ST
STLPY= maidtbl(Ipi,iq,iw,ith,15) * ST
STTPX= maidtbl(Ipi,iq,iw,ith,16) * ST
SLY = maidtbl(Ipi,iq,iw,ith,17) * ST
STY = maidtbl(Ipi,iq,iw,ith,18) * ST
! get cos(phi), etc.
CSF =COS(phi)
SNF =SIN(phi)
CS2F=COS(2.*phi)
SN2F=SIN(2.*phi)
CST =costh
SNT =SQRT(1.-costh**2)
! Get sigma_0, etc.
sig0 = ST + EPS * SL +
> sqrt(2.*EPS*(1.+EPS))*CSF*STL +
> EPS*CS2F*STT
sigz = sqrt(2.*EPS*(1.+EPS)) *
> (PT * SNF * STLX +
> PN * CSF * STLY +
> PL * SNF * STLZ) +
> EPS *
> (PT * SN2F * STTX +
> PN * CS2F * STTY +
> PL * SN2F * STTZ) +
> PN * (STY + EPS * SLY)
sigez = sqrt(2.*EPS*(1.-EPS)) *
> (PT * STLPx * CSF +
> PN * STLPy * SNF +
> PL * STLPZ * CSF) +
> sqrt(1.-EPS**2) *
> (PT * STTPx +
> PL * STTPZ)
sige = sqrt(2.*EPS*(1.-EPS))*SNF*STLP
! change sign of sigez to agree with DIS convention
! in which Delta has negative A_LL
sigez = -1.0 * sigez
! also change sign of sigz so agrees with our results for
c W>1.4. Note: this was *not* done for eg1c!
sigz = -1.0 * sigz
return
end

0 comments on commit 745b620

Please sign in to comment.