2
C**************************************************************************
3
C This is a program for testing the integrated dipoles. For a couple of
4
C phase space points, chosen by RAMBO, it prints the the singular and
5
C finite terms for the given process.
6
C R.Frederix and N.Greiner - February 2010
7
C**************************************************************************
17
C--- the include file with the values of the parameters and masses
19
C--- integer nexternal ! number particles (incoming+outgoing) in the me
20
INCLUDE "nexternal.inc"
22
REAL*8 PMASS(NEXTERNAL)
24
INCLUDE "ngraphs.inc" !how many diagrams (could be useful to know...)
30
INTEGER I,J,K,l,m,l1,m1, number
31
REAL*8 P(0:3,NEXTERNAL) ! four momenta. Energy is the zeroth component.
32
REAL*8 SQRTS ! sqrt(s)= center of mass energy
33
REAL*8 ME,SUBTRACT,SUBTRACT2 ! Matrix Element and subtraction terms
34
real*8 start ! Starting value for invariants and the number of phase space points
35
logical cut ! Cut to prevent going into double limits
37
real*8 Z, eps,epssq, finite
48
C--- INITIALIZATION CALLS
50
c--- Call to initialize the values of the couplings, masses and widths
51
c used in the evaluation of the matrix element. The primary parameters of the
52
c models are read from Cards/param_card.dat. The secondary parameters are calculated
53
c in Source/MODEL/couplings.f. The values are stored in common blocks that are listed
56
call setpara('param_card.dat',.true.) !first call to setup the paramaters
57
include "pmass.inc" !set up masses
58
mu = 91.188d0 !renormalization scale
59
muf = 91.188d0 !factorization scale
61
SQRTS=1000d0 !CMS energy in GEV
64
number=3 !Number of phase space points
66
c For this check routine to work properly,
67
c the last parton should be a massless one
68
if (pmass(nexternal).ne.0d0) then
69
write (*,*) 'Error in process order:'
70
write (*,*) 'Please, change the order of the particles in the'
72
& 'process such that the last one is a massless particle'
76
c Loop over phase space points
79
c--- Now use a simple multipurpose PS generator (RAMBO) just to get a
80
c RANDOM set of four momenta of given masses pmass(i) to be used to evaluate
81
c the integrated dipoles.
83
CALL GET_INT_MOMENTA(SQRTS,PMASS,P,Z)
85
CALL INTDIPOLES(P,X,Z,1d0,EPS,EPSSQ,FINITE)
86
c Note that for the intdipolesfinite the phase space point from
87
c Rambo is, in general not correct
88
c CALL INTDIPOLESFINITE(P,X,Z,1d0,EPS,EPSSQ,FINITE)
90
write (*,*) 'PHASE SPACE POINT',i,':'
92
write (*,*)' ',j, P(0,j), P(1,j), P(2,j), P(3,j)
96
write (*,*) ' 1/eps^2: ',epssq
97
write (*,*) ' 1/eps: ',eps
98
write (*,*) ' Finite: ',finite
107
SUBROUTINE GET_INT_MOMENTA(ENERGY,PMASS,P,Z)
108
C Provide four-momenta for integrated dipoles.
111
INCLUDE "nexternal.inc"
113
REAL*8 ENERGY,PMASS(NEXTERNAL),P(0:3,NEXTERNAL),PRAMBO(4,10),WGT,Z
127
call rambo_int(nexternal-3,energy,pmass(3),prambo,Z)
146
double precision function dot(p1,p2)
147
C****************************************************************************
148
C 4-Vector Dot product
149
C****************************************************************************
151
double precision p1(0:3),p2(0:3)
152
dot=p1(0)*p2(0)-p1(1)*p2(1)-p1(2)*p2(2)-p1(3)*p2(3)
156
SUBROUTINE RAMBO_INT(N,ET,XM,P,Zvar)
157
C Modified RAMBO suited for integrated dipoles
158
C R.Frederix and N.Greiner - February 2010
159
***********************************************************************
161
* RA(NDOM) M(OMENTA) B(EAUTIFULLY) O(RGANIZED) *
163
* A DEMOCRATIC MULTI-PARTICLE PHASE SPACE GENERATOR *
164
* AUTHORS: S.D. ELLIS, R. KLEISS, W.J. STIRLING *
165
* THIS IS VERSION 1.0 - WRITTEN BY R. KLEISS *
166
* -- ADJUSTED BY HANS KUIJF, WEIGHTS ARE LOGARITHMIC (20-08-90) *
168
* N = NUMBER OF PARTICLES *
169
* ET = TOTAL CENTRE-OF-MASS ENERGY *
170
* XM = PARTICLE MASSES ( DIM=NEXTERNAL-2 ) *
171
* P = PARTICLE MOMENTA ( DIM=(4,NEXTERNAL-2) ) *
172
* WT = WEIGHT OF THE EVENT *
173
***********************************************************************
174
IMPLICIT REAL*8(A-H,O-Z)
175
INCLUDE "nexternal.inc"
176
DIMENSION XM(NEXTERNAL-2),P(4,NEXTERNAL-2)
177
DIMENSION Q(4,NEXTERNAL-2),Z(NEXTERNAL-2),R(4),
178
. B(3),P2(NEXTERNAL-2),XM2(NEXTERNAL-2),
179
. E(NEXTERNAL-2),V(NEXTERNAL-2),IWARN(5)
180
SAVE ACC,ITMAX,IBEGIN,IWARN
181
DATA ACC/1.D-14/,ITMAX/6/,IBEGIN/0/,IWARN/5*0/
183
* INITIALIZATION STEP: FACTORIALS FOR THE PHASE SPACE WEIGHT
184
IF(IBEGIN.NE.0) GOTO 103
190
101 Z(K)=Z(K-1)+PO2LOG-2.*LOG(DFLOAT(K-2))
192
102 Z(K)=(Z(K)-LOG(DFLOAT(K-1)))
194
* CHECK ON THE NUMBER OF PARTICLES
195
103 IF(N.GT.1.AND.N.LT.101) GOTO 104
199
* CHECK WHETHER TOTAL ENERGY IS SUFFICIENT; COUNT NONZERO MASSES
203
IF(XM(I).NE.0.D0) NM=NM+1
204
105 XMT=XMT+ABS(XM(I))
205
IF(XMT.LE.ET) GOTO 201
209
* THE PARAMETER VALUES ARE NOW ACCEPTED
211
* GENERATE N MASSLESS MOMENTA IN INFINITE PHASE SPACE
221
Q(2,I)=Q(4,I)*S*COS(F)
222
202 Q(1,I)=Q(4,I)*S*SIN(F)
226
* CALCULATE THE PARAMETERS OF THE CONFORMAL TRANSFORMATION
232
RMAS=SQRT(R(4)**2-R(3)**2-R(2)**2-R(1)**2)
239
* TRANSFORM THE Q'S CONFORMALLY INTO THE P'S
241
BQ=B(1)*Q(1,I)+B(2)*Q(2,I)+B(3)*Q(3,I)
243
206 P(K,I)=X*(Q(K,I)+B(K)*(Q(4,I)+A*BQ))
244
207 P(4,I)=X*(G*Q(4,I)+BQ)
246
* CALCULATE WEIGHT AND POSSIBLE WARNINGS
248
IF(N.NE.2) WT=(2.*N-4.)*LOG(ET)+Z(N)
249
IF(WT.GE.-180.D0) GOTO 208
250
IF(IWARN(1).LE.5) PRINT 1004,WT
252
208 IF(WT.LE. 174.D0) GOTO 209
253
IF(IWARN(2).LE.5) PRINT 1005,WT
256
* RETURN FOR WEIGHTED MASSLESS MOMENTA
257
209 IF(NM.NE.0) GOTO 210
258
* RETURN LOG OF WEIGHT
262
* MASSIVE PARTICLES: RESCALE THE MOMENTA BY A FACTOR X
263
210 XMAX=SQRT(1.-(XMT/ET)**2)
274
E(I)=SQRT(XM2(I)+X2*P2(I))
277
IF(ABS(F0).LE.ACCU) GOTO 305
279
IF(ITER.LE.ITMAX) GOTO 304
290
* CALCULATE THE MASS-EFFECT WEIGHT FACTOR
295
308 WT3=WT3+V(I)**2/E(I)
296
WTM=(2.*N-3.)*LOG(X)+LOG(WT2/WT3*ET)
298
* RETURN FOR WEIGHTED MASSIVE MOMENTA
300
IF(WT.GE.-180.D0) GOTO 309
301
IF(IWARN(3).LE.5) PRINT 1004,WT
303
309 IF(WT.LE. 174.D0) GOTO 310
304
IF(IWARN(4).LE.5) PRINT 1005,WT
306
* RETURN LOG OF WEIGHT
310
1001 FORMAT(' RAMBO FAILS: # OF PARTICLES =',I5,' IS NOT ALLOWED')
311
1002 FORMAT(' RAMBO FAILS: TOTAL MASS =',D15.6,' IS NOT',
312
. ' SMALLER THAN TOTAL ENERGY =',D15.6)
313
1004 FORMAT(' RAMBO WARNS: WEIGHT = EXP(',F20.9,') MAY UNDERFLOW')
314
1005 FORMAT(' RAMBO WARNS: WEIGHT = EXP(',F20.9,') MAY OVERFLOW')
315
1006 FORMAT(' RAMBO WARNS:',I3,' ITERATIONS DID NOT GIVE THE',
316
. ' DESIRED ACCURACY =',D15.6)
325
CALL RMARIN(1802,9373)
329
IF (RAN.LT.1D-16) GOTO 10
336
SUBROUTINE RANMAR(RVEC)
338
* Universal random number generator proposed by Marsaglia and Zaman
339
* in report FSU-SCRI-87-50
340
* In this version RVEC is a double precision variable.
341
IMPLICIT REAL*8(A-H,O-Z)
342
COMMON/ RASET1 / RANU(97),RANC,RANCD,RANCM
343
COMMON/ RASET2 / IRANMR,JRANMR
344
SAVE /RASET1/,/RASET2/
345
UNI = RANU(IRANMR) - RANU(JRANMR)
346
IF(UNI .LT. 0D0) UNI = UNI + 1D0
350
IF(IRANMR .EQ. 0) IRANMR = 97
351
IF(JRANMR .EQ. 0) JRANMR = 97
353
IF(RANC .LT. 0D0) RANC = RANC + RANCM
355
IF(UNI .LT. 0D0) UNI = UNI + 1D0
359
SUBROUTINE RMARIN(IJ,KL)
361
* Initializing routine for RANMAR, must be called before generating
362
* any pseudorandom numbers with RANMAR. The input values should be in
363
* the ranges 0<=ij<=31328 ; 0<=kl<=30081
364
IMPLICIT REAL*8(A-H,O-Z)
365
COMMON/ RASET1 / RANU(97),RANC,RANCD,RANCM
366
COMMON/ RASET2 / IRANMR,JRANMR
367
SAVE /RASET1/,/RASET2/
368
* This shows correspondence between the simplified input seeds IJ, KL
369
* and the original Marsaglia-Zaman seeds I,J,K,L.
370
* To get the standard values in the Marsaglia-Zaman paper (i=12,j=34
371
* k=56,l=78) put ij=1802, kl=9373
372
I = MOD( IJ/177 , 177 ) + 2
373
J = MOD( IJ , 177 ) + 2
374
K = MOD( KL/169 , 178 ) + 1
380
M = MOD( MOD(I*J,179)*K , 179 )
384
L = MOD( 53*L+1 , 169 )
385
IF(MOD(L*M,64) .GE. 32) S = S + T
390
RANC = 362436D0 / 16777216D0
391
RANCD = 7654321D0 / 16777216D0
392
RANCM = 16777213D0 / 16777216D0