2
c*****************************************************************************
3
c Given identical particles, and the configurations. This program identifies
4
c identical configurations and specifies which ones can be skipped
5
c*****************************************************************************
11
include 'nexternal.inc'
12
include '../../Source/run_config.inc'
13
include 'nFKSconfigs.inc'
15
double precision ZERO,one
16
parameter (ZERO = 0d0)
19
parameter(maxswitch=99)
23
integer iforest(2,-max_branch:-1,lmaxconfigs)
24
integer mapconfig(0:lmaxconfigs)
25
integer sprop(-max_branch:-1,lmaxconfigs)
26
integer itree(2,-max_branch:-1)
28
integer i,j, k, n, nsym,l,ii,jj
29
double precision diff,xi_i_fks
30
c$$$ double precision pmass(-max_branch:-1,lmaxconfigs) !Propagotor mass
31
double precision pmass(nexternal)
32
double precision pwidth(-max_branch:-1,lmaxconfigs) !Propagotor width
33
integer pow(-max_branch:-1,lmaxconfigs)
35
integer biforest(2,-max_branch:-1,lmaxconfigs)
36
integer fksmother,fksgrandmother,fksaunt,compare
37
integer fksconfiguration,mapbconf(0:lmaxconfigs)
38
integer r2b(lmaxconfigs),b2r(lmaxconfigs)
39
logical searchforgranny,is_beta_cms,is_granny_sch,topdown,non_prop
40
integer nbranch,ns_channel,nt_channel
42
integer fks_j_from_i(nexternal,0:nexternal)
43
& ,particle_type(nexternal),pdg_type(nexternal)
44
common /c_fks_inc/fks_j_from_i,particle_type,pdg_type
45
double precision fxl,limit(15),wlimit(15)
46
double precision lxp(0:3,nexternal+1),xp(15,0:3,nexternal+1)
47
double precision fks_Sij
48
double precision check,tolerance,zh,h_damp
49
parameter (tolerance=1.d-4)
50
integer kk,ll,bs,bs_min,bs_max,iconfig_in
52
integer nsofttests,ncolltests,nerr,imax,iflag,iret
54
c Local for generating amps
56
double precision p(0:3,99), wgt, x(99), fx
57
double complex wgt1(2)
58
double precision p1(0:3,99),xx(maxinvar)
59
integer ninvar, ndim, iconfig, minconfig, maxconfig
60
integer ncall,itmax,nconfigs,ntry, ngraphs
61
integer ic(nexternal,maxswitch), jc(12),nswitch
62
double precision saveamp(maxamps)
67
double precision xi_i_fks_fix_save,y_ij_fks_fix_save
68
double precision xi_i_fks_fix,y_ij_fks_fix
69
common/cxiyfix/xi_i_fks_fix,y_ij_fks_fix
73
Double Precision amp2(maxamps), jamp2(0:maxamps)
74
common/to_amps/ amp2, jamp2
77
logical calculatedBorn
78
common/ccalculatedBorn/calculatedBorn
81
common/fks_indices/i_fks,j_fks
83
double precision p1_cnt(0:3,nexternal,-2:2)
84
double precision wgt_cnt(-2:2)
85
double precision pswgt_cnt(-2:2)
86
double precision jac_cnt(-2:2)
87
common/counterevnts/p1_cnt,wgt_cnt,pswgt_cnt,jac_cnt
89
double precision p_born(0:3,nexternal-1)
92
double precision xi_i_fks_ev,y_ij_fks_ev
93
double precision p_i_fks_ev(0:3),p_i_fks_cnt(0:3,-2:2)
94
common/fksvariables/xi_i_fks_ev,y_ij_fks_ev,p_i_fks_ev,p_i_fks_cnt
96
double precision xi_i_fks_cnt(-2:2)
97
common /cxiifkscnt/xi_i_fks_cnt
100
common/crotategranny/rotategranny
102
logical softtest,colltest
103
common/sctests/softtest,colltest
106
common /toxexternal/ xexternal
108
c Particle types (=color) of i_fks, j_fks and fks_mother
109
integer i_type,j_type,m_type
110
common/cparticle_types/i_type,j_type,m_type
117
double precision dsig,ran2
118
external pass_point, dsig,ran2
119
external check_swap, fks_Sij
121
c define here the maximum fraction of failures to consider the test
123
double precision max_fail, fail_frac
124
parameter (max_fail=0.3d0)
128
logical multi_channel
129
common/to_matrix/isum_hel, multi_channel
131
integer fks_conf_number,fks_loop_min,fks_loop_max,fks_loop
133
COMMON/C_NFKSPROCESS/NFKSPROCESS
139
integer tprid(-max_branch:-1,lmaxconfigs)
140
include 'born_conf.inc'
144
write(*,*)'Enter xi_i, y_ij to be used in coll/soft tests'
145
write(*,*)' Enter -2 to generate them randomly'
146
read(*,*)xi_i_fks_fix_save,y_ij_fks_fix_save
148
write(*,*)'Enter number of tests for soft and collinear limits'
149
read(*,*)nsofttests,ncolltests
151
write(*,*)'Sum over helicity (0), or random helicity (1)'
154
call setrun !Sets up run parameters
155
call setpara('param_card.dat') !Sets up couplings and masses
156
call setcuts !Sets up cuts
159
write (*,*) 'Give FKS configuration number ("0" loops over all)'
160
read (*,*) fks_conf_number
162
if (fks_conf_number.eq.0) then
164
fks_loop_max=fks_configs
166
fks_loop_min=fks_conf_number
167
fks_loop_max=fks_conf_number
170
do fks_loop=fks_loop_min,fks_loop_max
173
write (*,*) '================================================='
175
write (*,*) 'NEW FKS CONFIGURATION:'
177
call fks_inc_chooser()
178
call leshouche_inc_chooser()
179
write (*,*) 'FKS configuration number is ',nFKSprocess
180
write (*,*) 'FKS partons are: i=',i_fks,' j=',j_fks
181
write (*,*) 'with PDGs: i=',PDG_type(i_fks),' j='
192
c Set color types of i_fks, j_fks and fks_mother.
193
i_type=particle_type(i_fks)
194
j_type=particle_type(j_fks)
195
if (abs(i_type).eq.abs(j_type)) then
197
if ( (j_fks.le.nincoming .and.
198
& abs(i_type).eq.3 .and. j_type.ne.i_type) .or.
199
& (j_fks.gt.nincoming .and.
200
& abs(i_type).eq.3 .and. j_type.ne.-i_type)) then
201
write(*,*)'Flavour mismatch #1 in setfksfactor',
202
& i_fks,j_fks,i_type,j_type
205
elseif(abs(i_type).eq.3 .and. j_type.eq.8)then
206
if(j_fks.le.nincoming)then
209
write (*,*) 'Error in setfksfactor: (i,j)=(q,g)'
212
elseif(i_type.eq.8 .and. abs(j_type).eq.3)then
213
if (j_fks.le.nincoming) then
219
write(*,*)'Flavour mismatch #2 in setfksfactor',
220
& i_type,j_type,m_type
226
c Get momentum configuration
229
c Set xexternal to true to use the x's from external vegas in the
230
c x_to_f_arg subroutine
235
write(*,*)'Enter graph number (iconfig), '
236
& //"'0' loops over all graphs"
239
if (iconfig_in.eq.0) then
242
elseif (iconfig_in.eq.-1) then
250
do iconfig=bs_min,bs_max ! Born configurations
252
call setfksfactor(iconfig)
262
call generate_momenta(ndim,iconfig,wgt,x,p)
263
calculatedBorn=.false.
264
do while (( wgt.lt.0 .or. p(0,1).le.0d0 .or. p_born(0,1).le.0d0
265
& ) .and. ntry .lt. 1000)
270
call generate_momenta(ndim,iconfig,wgt,x,p)
271
calculatedBorn=.false.
275
if (ntry.ge.1000) then
276
write (*,*) 'No points passed cuts...'
277
write (12,*) 'ERROR: no points passed cuts...'
278
& //' Cannot perform ME tests properly for config',iconfig
282
call sborn(p_born,wgt1)
293
call get_helicity(i_fks,j_fks)
295
if(nsofttests.le.10)then
300
y_ij_fks_fix=y_ij_fks_fix_save
307
call generate_momenta(ndim,iconfig,wgt,x,p)
308
do while (( wgt.lt.0 .or. p(0,1).le.0d0) .and. ntry.lt.1000)
313
call generate_momenta(ndim,iconfig,wgt,x,p)
316
if(nsofttests.le.10)write (*,*) 'ntry',ntry
317
calculatedBorn=.false.
318
call set_cms_stuff(0)
319
call sreal(p1_cnt(0,1,0),zero,y_ij_fks_ev,fxl)
322
call set_cms_stuff(-100)
323
call sreal(p,xi_i_fks_ev,y_ij_fks_ev,fx)
329
lxp(l,k)=p1_cnt(l,k,0)
334
lxp(l,nexternal+1)=p_i_fks_cnt(l,0)
335
xp(1,l,nexternal+1)=p_i_fks_ev(l)
339
xi_i_fks_fix=xi_i_fks_fix/10d0
341
call generate_momenta(ndim,iconfig,wgt,x,p)
342
calculatedBorn=.false.
343
call set_cms_stuff(-100)
344
call sreal(p,xi_i_fks_ev,y_ij_fks_ev,fx)
353
xp(i,l,nexternal+1)=p_i_fks_ev(l)
357
if(nsofttests.le.10)then
358
write (*,*) 'Soft limit:'
360
call xprintout(6,limit(i),fxl)
364
write(80,*)'****************************'
372
call xprintout(80,xp(i,l,k),lxp(l,k))
378
call checkres(limit,fxl,wlimit,jac_cnt(0),xp,lxp,
379
& iflag,imax,j,nexternal,i_fks,j_fks,iret)
384
if(nsofttests.gt.10)then
385
write(*,*)'Soft tests done for (Born) config',iconfig
386
write(*,*)'Failures:',nerr
387
fail_frac= nerr/dble(nsofttests)
388
if (fail_frac.lt.max_fail) then
389
write(*,401) nFKSprocess, fail_frac
391
write(*,402) nFKSprocess, fail_frac
401
if (pmass(j_fks).ne.0d0) then
402
write (*,*) 'No collinear test for massive j_fks'
409
c Set rotategranny=.true. to align grandmother along the z axis, when
410
c grandmother is not the c.m. system (if granny=cms, this rotation coincides
411
c with the identity, and the following is harmless).
412
c WARNING: the setting of rotategranny changes the definition of xij_aor
413
c in genps_fks_test.f
419
call get_helicity(i_fks,j_fks)
421
if(ncolltests.le.10)then
427
xi_i_fks_fix=xi_i_fks_fix_save
433
call generate_momenta(ndim,iconfig,wgt,x,p)
434
do while (( wgt.lt.0 .or. p(0,1).le.0d0) .and. ntry.lt.1000)
439
call generate_momenta(ndim,iconfig,wgt,x,p)
442
if(ncolltests.le.10)write (*,*) 'ntry',ntry
443
calculatedBorn=.false.
444
call set_cms_stuff(1)
445
call sreal(p1_cnt(0,1,1),xi_i_fks_cnt(1),one,fxl)
448
call set_cms_stuff(-100)
449
call sreal(p,xi_i_fks_ev,y_ij_fks_ev,fx)
455
lxp(l,k)=p1_cnt(l,k,1)
460
lxp(l,nexternal+1)=p_i_fks_cnt(l,1)
461
xp(1,l,nexternal+1)=p_i_fks_ev(l)
465
y_ij_fks_fix=1-0.1d0**i
467
call generate_momenta(ndim,iconfig,wgt,x,p)
468
calculatedBorn=.false.
469
call set_cms_stuff(-100)
470
call sreal(p,xi_i_fks_ev,y_ij_fks_ev,fx)
479
xp(i,l,nexternal+1)=p_i_fks_ev(l)
482
if(ncolltests.le.10)then
483
write (*,*) 'Collinear limit:'
485
call xprintout(6,limit(i),fxl)
489
write(80,*)'****************************'
497
call xprintout(80,xp(i,l,k),lxp(l,k))
503
call checkres(limit,fxl,wlimit,jac_cnt(1),xp,lxp,
504
& iflag,imax,j,nexternal,i_fks,j_fks,iret)
508
if(ncolltests.gt.10)then
509
write(*,*)'Collinear tests done for (Born) config', iconfig
510
write(*,*)'Failures:',nerr
511
fail_frac= nerr/dble(ncolltests)
512
if (fail_frac.lt.max_fail) then
513
write(*,501) nFKSprocess, fail_frac
515
write(*,502) nFKSprocess, fail_frac
521
enddo ! Loop over Born configurations
522
enddo ! Loop over nFKSprocess
526
401 format(' Soft test ',i2,' PASSED. Fraction of failures: ',
528
402 format(' Soft test ',I2,' FAILED. Fraction of failures: ',
530
501 format('Collinear test ',i2,' PASSED. Fraction of failures: ',
532
502 format('Collinear test ',I2,' FAILED. Fraction of failures: ',
541
subroutine clear_events()
543
subroutine store_events()
545
integer function n_unwgted()
549
subroutine outfun(pp,www)
551
include 'nexternal.inc'
552
real*8 pp(0:3,nexternal),www
554
write(*,*)'This routine should not be called here'