1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
DOUBLE PRECISION FUNCTION DSIG%(proc_id)s(PP,WGT,IMODE)
C ****************************************************
C
%(info_lines)s
C
%(process_lines)s
C
C RETURNS DIFFERENTIAL CROSS SECTION
C Input:
C pp 4 momentum of external particles
C wgt weight from Monte Carlo
C imode 0 run, 1 init, 2 reweight,
C 3 finalize, 4 only PDFs
C Output:
C Amplitude squared and summed
C ****************************************************
IMPLICIT NONE
C
C CONSTANTS
C
include 'genps.inc'
include 'nexternal.inc'
include 'maxconfigs.inc'
include 'maxamps.inc'
DOUBLE PRECISION CONV
PARAMETER (CONV=389379.66*1000) !CONV TO PICOBARNS
REAL*8 PI
PARAMETER (PI=3.1415926d0)
C
C ARGUMENTS
C
DOUBLE PRECISION PP(0:3,NEXTERNAL), WGT
INTEGER IMODE
C
C LOCAL VARIABLES
C
INTEGER I,ITYPE,LP,IPROC
%(pdf_vars)s
DOUBLE PRECISION XPQ(-7:7),PD(0:MAXPROC)
DOUBLE PRECISION DSIGUU,R,RCONF
INTEGER LUN,ICONF,IFACT,NFACT
DATA NFACT/1/
SAVE NFACT
C
C EXTERNAL FUNCTIONS
C
LOGICAL PASSCUTS
DOUBLE PRECISION ALPHAS2,REWGT,PDG2PDF
INTEGER NEXTUNOPEN
C
C GLOBAL VARIABLES
C
INTEGER IPSEL
COMMON /SubProc/ IPSEL
C MINCFIG has this config number
integer mincfig, maxcfig
common/to_configs/mincfig, maxcfig
INTEGER MAPCONFIG(0:LMAXCONFIGS), ICONFIG
COMMON/TO_MCONFIGS/MAPCONFIG, ICONFIG
C Keep track of whether cuts already calculated for this event
LOGICAL cutsdone,cutspassed
COMMON/TO_CUTSDONE/cutsdone,cutspassed
%(define_subdiag_lines)s
include 'coupl.inc'
include 'run.inc'
C
C DATA
C
%(pdf_data)s
C ----------
C BEGIN CODE
C ----------
DSIG%(proc_id)s=0D0
%(cutsdone)s
IF(IMODE.EQ.1)THEN
C Set up process information from file symfact
LUN=NEXTUNOPEN()
NFACT=1
OPEN(UNIT=LUN,FILE='../symfact.dat',STATUS='OLD',ERR=20)
DO WHILE(.TRUE.)
READ(LUN,*,ERR=10,END=10) RCONF, IFACT
ICONF=INT(RCONF)
IF(ICONF.EQ.MAPCONFIG(MINCFIG))THEN
NFACT=IFACT
ENDIF
ENDDO
10 CLOSE(LUN)
RETURN
20 WRITE(*,*)'Error opening symfact.dat. No symmetry factor used.'
RETURN
ENDIF
C Only run if IMODE is 0
IF(IMODE.NE.0.AND.IMODE.NE.4) RETURN
%(passcuts_begin)s
%(pdf_lines)s
IF (IMODE.EQ.4)THEN
DSIG%(proc_id)s = PD(0)
RETURN
ENDIF
CALL SMATRIX%(proc_id)s(PP,DSIGUU)
DSIGUU=DSIGUU*REWGT(PP)*NFACT
IF (DSIGUU.LT.1D199) THEN
c Select a flavor combination (need to do here for right sign)
CALL RANMAR(R)
IPSEL=0
DO WHILE (R.GT.0D0 .AND. IPSEL.LT.IPROC)
IPSEL=IPSEL+1
R=R-DABS(PD(IPSEL))/PD(0)
ENDDO
c Set sign of dsig based on sign of PDF and matrix element
DSIG%(proc_id)s=DSIGN(%(dsig_line)s,DSIGUU*PD(IPSEL))
ELSE
write(*,*) "Error in matrix element"
DSIGUU=0D0
DSIG%(proc_id)s=0D0
ENDIF
IF(IMODE.EQ.0.AND.DABS(DSIG%(proc_id)s).GT.0D0)THEN
C Call UNWGT to unweight and store events
CALL UNWGT(PP,DSIG%(proc_id)s*WGT,%(numproc)d)
ENDIF
%(passcuts_end)s
END
|