Warning, /GeneratorInterface/PartonShowerVeto/src/ME2pythia.f_old is written in an unsupported language. File is not indexed.
0001 C******************************************************
0002 C* MadEvent - Pythia interface. *
0003 C* Version 4.2, 4 March 2007 *
0004 C* *
0005 C* dkcira 2008.02.05 *
0006 C* *
0007 C* - Improvement of matching routines *
0008 C* *
0009 C* Version 4.1 *
0010 C* *
0011 C* - Possibility to use several files *
0012 C* *
0013 C* Version 4.0 *
0014 C* *
0015 C* - Routines for matching of ME and PS *
0016 C* *
0017 C* Version 3.8 *
0018 C* *
0019 C* - Give the event number in the event file in the *
0020 C* new variable IEVNT in UPPRIV *
0021 C* *
0022 C* Version 3.7 *
0023 C* *
0024 C* - Set mass of massless outgoing particles to *
0025 C* Pythia mass (PMAS(I,1)) *
0026 C* *
0027 C* Version 3.6 *
0028 C* *
0029 C* - Removed the 1st # from the event file header *
0030 C* *
0031 C* Version 3.5 *
0032 C* *
0033 C* - Reads according to the new LH event file format *
0034 C* - Now only LNHIN, LNHOUT and MSCAL in UPPRIV *
0035 C* *
0036 C* Version 3.4 *
0037 C* *
0038 C* - Reads particle masses from event file *
0039 C* *
0040 C* Version 3.3 *
0041 C* *
0042 C* - Added option MSCAL in common block UPPRIV to *
0043 C* choose between fix (0) or event-based (1) *
0044 C* scale for Pythia parton showering (SCALUP). *
0045 C* - Fixed bug in reading the SLHA file *
0046 C* *
0047 C* Version 3.2 *
0048 C* *
0049 C* - Reading the SLHA format param_card from the *
0050 C* banner *
0051 C* - Added support for lpp1/lpp2 = 2 or 3 *
0052 C* - Removed again support for different MadEvent *
0053 C* processes in different files (no longer *
0054 C* necessary with new multiple processes support *
0055 C* in MadGraph/MadEvent *
0056 C* *
0057 C* Version 3.1 *
0058 C* - Added support for different MadEvent processes *
0059 C* in different files *
0060 C* - Fixed bug in e+e- collisions *
0061 C* *
0062 C* Written by J.Alwall, alwall@fyma.ucl.ac.be *
0063 C* Earlier versions by S.Mrenna, M.Kirsanov *
0064 C* *
0065 C******************************************************
0066 C* *
0067 C* Instructions: *
0068 C* Please use the common block UPPRIV: *
0069 C* - The logical unit LNHIN must be an opened *
0070 C* MadEvent event file *
0071 C* - The output unit LNHOUT is by default 6 (std out) *
0072 C* - Set MSCAL to 1 if a dynamical scale is desired *
0073 C* for parton showers rather than the one given as *
0074 C* factorization scale by MadEvent (otherwise 0) *
0075 C* - IEVNT gives the number of the event in the event *
0076 C* file *
0077 C* - ICKKW is set automatically depending on whether *
0078 C* the events generated are matched or not *
0079 C* *
0080 C******************************************************
0081
0082 C*********************************************************************
0083 C...UPINIT
0084 C...Routine called by PYINIT to set up user-defined processes.
0085 C*********************************************************************
0086 SUBROUTINE MGINIT(npara,param,value)
0087
0088 IMPLICIT NONE
0089 c
0090 c arguments
0091 c
0092 integer npara
0093 character*20 param(*),value(*)
0094
0095 C CHARACTER*132 CHAR_READ
0096
0097 C...Pythia parameters.
0098 INTEGER MSTP,MSTI,MRPY
0099 DOUBLE PRECISION PARP,PARI,RRPY
0100 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0101 COMMON/PYDATR/MRPY(6),RRPY(100)
0102
0103 C...User process initialization commonblock.
0104 INTEGER MAXPUP
0105 PARAMETER (MAXPUP=100)
0106 INTEGER IDBMUP,PDFGUP,PDFSUP,IDWTUP,NPRUP,LPRUP
0107 DOUBLE PRECISION EBMUP,XSECUP,XERRUP,XMAXUP
0108 COMMON/HEPRUP/IDBMUP(2),EBMUP(2),PDFGUP(2),PDFSUP(2),
0109 & IDWTUP,NPRUP,XSECUP(MAXPUP),XERRUP(MAXPUP),XMAXUP(MAXPUP),
0110 & LPRUP(MAXPUP)
0111
0112 C...Extra commonblock to transfer run info.
0113 INTEGER LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0114 COMMON/UPPRIV/LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0115 DATA LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE/77,6,1,0,0,1/
0116 SAVE/UPPRIV/
0117
0118 C...Inputs for the matching algorithm
0119 double precision etcjet,rclmax,etaclmax,qcut,clfact
0120 integer maxjets,minjets,iexcfile,ktsche,nexcres,excres(30)
0121 common/MEMAIN/etcjet,rclmax,etaclmax,qcut,clfact,
0122 $ maxjets,minjets,iexcfile,ktsche,nexcres,excres
0123
0124 C
0125 C...Set kt clustering scheme (if not already set)
0126 C
0127 IF(ABS(IDBMUP(1)).EQ.11.AND.ABS(IDBMUP(2)).EQ.11.AND.
0128 $ IDBMUP(1).EQ.-IDBMUP(2).AND.ktsche.EQ.0)THEN
0129 ktsche=1
0130 ELSE IF(ktsche.EQ.0) THEN
0131 ktsche=4313
0132 ENDIF
0133
0134 IF(ickkw.gt.0) CALL set_matching(npara,param,value)
0135
0136 C...For photon initial states from protons: Set proton not to break up
0137 CALL PYGIVE('MSTP(98)=1')
0138
0139 RETURN
0140
0141 END
0142
0143 C*********************************************************************
0144 C...UPEVNT
0145 C...Routine called by PYEVNT or PYEVNW to get user process event
0146 C*********************************************************************
0147 SUBROUTINE MGEVNT
0148
0149 IMPLICIT NONE
0150
0151 C...Pythia parameters.
0152 INTEGER MSTP,MSTI
0153 DOUBLE PRECISION PARP,PARI
0154 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0155
0156 C...User process initialization commonblock.
0157 INTEGER MAXPUP
0158 PARAMETER (MAXPUP=100)
0159 INTEGER IDBMUP,PDFGUP,PDFSUP,IDWTUP,NPRUP,LPRUP
0160 DOUBLE PRECISION EBMUP,XSECUP,XERRUP,XMAXUP
0161 COMMON/HEPRUP/IDBMUP(2),EBMUP(2),PDFGUP(2),PDFSUP(2),
0162 & IDWTUP,NPRUP,XSECUP(MAXPUP),XERRUP(MAXPUP),XMAXUP(MAXPUP),
0163 & LPRUP(MAXPUP)
0164
0165 C...User process event common block.
0166 INTEGER MAXNUP
0167 PARAMETER (MAXNUP=500)
0168 INTEGER NUP,IDPRUP,IDUP,ISTUP,MOTHUP,ICOLUP
0169 DOUBLE PRECISION XWGTUP,SCALUP,AQEDUP,AQCDUP,PUP,VTIMUP,SPINUP
0170 COMMON/HEPEUP/NUP,IDPRUP,XWGTUP,SCALUP,AQEDUP,AQCDUP,IDUP(MAXNUP),
0171 & ISTUP(MAXNUP),MOTHUP(2,MAXNUP),ICOLUP(2,MAXNUP),PUP(5,MAXNUP),
0172 & VTIMUP(MAXNUP),SPINUP(MAXNUP)
0173
0174 C...Pythia common blocks
0175 INTEGER PYCOMP,KCHG,MINT,NPART,NPARTD,IPART,MAXNUR
0176 DOUBLE PRECISION PMAS,PARF,VCKM,VINT,PTPART
0177
0178 C...Particle properties + some flavour parameters.
0179 COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
0180 COMMON/PYINT1/MINT(400),VINT(400)
0181 PARAMETER (MAXNUR=1000)
0182 COMMON/PYPART/NPART,NPARTD,IPART(MAXNUR),PTPART(MAXNUR)
0183
0184 C...Extra commonblock to transfer run info.
0185 INTEGER LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0186 COMMON/UPPRIV/LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0187
0188 C...Inputs for the matching algorithm
0189 double precision etcjet,rclmax,etaclmax,qcut,clfact
0190 integer maxjets,minjets,iexcfile,ktsche,nexcres,excres(30)
0191 common/MEMAIN/etcjet,rclmax,etaclmax,qcut,clfact,
0192 $ maxjets,minjets,iexcfile,ktsche,nexcres,excres
0193
0194 C...Commonblock to transfer event-by-event matching info
0195 INTEGER NLJETS,IEXC,Ifile
0196 DOUBLE PRECISION PTCLUS
0197 COMMON/MEMAEV/PTCLUS(20),NLJETS,IEXC,Ifile
0198
0199 C...Local variables
0200 INTEGER I,J,IBEG,NEX,KP(MAXNUP),MOTH,NUPREAD!,IREM
0201 DOUBLE PRECISION PSUM,ESUM,PM1,PM2,A1,A2,A3,A4,A5
0202 DOUBLE PRECISION SCALLOW(MAXNUP),PNONJ(4),PMNONJ!,PT2JETS
0203
0204 NUPREAD=NUP
0205
0206 C...Read NUP subsequent lines with information on each particle.
0207 115 ESUM=0d0
0208 PSUM=0d0
0209 NEX=2
0210 NUP=1
0211
0212 DO 120 I=1,NUPREAD
0213 C...Reset resonance momentum to prepare for mass shifts
0214 IF(ISTUP(NUP).EQ.2) PUP(3,NUP)=0
0215 IF(ISTUP(NUP).EQ.1)THEN
0216 NEX=NEX+1
0217 IF(PUP(5,NUP).EQ.0D0.AND.IABS(IDUP(NUP)).GT.3
0218 $ .AND.IDUP(NUP).NE.21) THEN
0219 C...Set massless particle masses to Pythia default. Adjust z-momentum.
0220 PUP(5,NUP)=PMAS(IABS(PYCOMP(IDUP(NUP))),1)
0221 PUP(3,NUP)=SIGN(SQRT(MAX(0d0,PUP(4,NUP)**2-PUP(5,NUP)**2-
0222 $ PUP(1,NUP)**2-PUP(2,NUP)**2)),PUP(3,NUP))
0223 ENDIF
0224 PSUM=PSUM+PUP(3,NUP)
0225 C...Set mother resonance momenta
0226 MOTH=MOTHUP(1,NUP)
0227 DO WHILE (MOTH.GT.2)
0228 PUP(3,MOTH)=PUP(3,MOTH)+PUP(3,NUP)
0229 MOTH=MOTHUP(1,MOTH)
0230 ENDDO
0231 ENDIF
0232 NUP=NUP+1
0233 120 CONTINUE
0234 NUP=NUP-1
0235
0236 C..Adjust mass of resonances
0237 DO I=1,NUP
0238 IF(ISTUP(I).EQ.2)THEN
0239 PUP(5,I)=SQRT(PUP(4,I)**2-PUP(1,I)**2-PUP(2,I)**2-
0240 $ PUP(3,I)**2)
0241 ENDIF
0242 ENDDO
0243
0244 C...Adjust energy and momentum of incoming particles
0245 C...In massive case need to solve quadratic equation
0246 c PM1=PUP(5,1)**2
0247 c PM2=PUP(5,2)**2
0248 c A1=4d0*(ESUM**2-PSUM**2)
0249 c A2=ESUM**2-PSUM**2+PM2-PM1
0250 c A3=2d0*PSUM*A2
0251 c A4=A3/A1
0252 c A5=(A2**2-4d0*ESUM**2*PM2)/A1
0253 c
0254 c PUP(3,2)=A4+SIGN(SQRT(A4**2+A5),PUP(3,2))
0255 c PUP(3,1)=PSUM-PUP(3,2)
0256 c PUP(4,1)=SQRT(PUP(3,1)**2+PM1)
0257 c PUP(4,2)=SQRT(PUP(3,2)**2+PM2)
0258
0259 ESUM=PUP(4,1)+PUP(4,2)
0260
0261 C...Assuming massless incoming particles - otherwise Pythia adjusts
0262 C...the momenta to make them massless
0263 IF(IDBMUP(1).GT.100.AND.IDBMUP(2).GT.100)THEN
0264 DO I=1,2
0265 PUP(3,I)=0.5d0*(PSUM+SIGN(ESUM,PUP(3,I)))
0266 PUP(5,I)=0d0
0267 ENDDO
0268 PUP(4,1)=ABS(PUP(3,1))
0269 PUP(4,2)=ESUM-PUP(4,1)
0270 ENDIF
0271
0272 C...If you want to use some other scale for parton showering then the
0273 C...factorisation scale given by MadEvent, please implement the function PYMASC
0274 C...(example function included below)
0275
0276 IF(ickkw.eq.0.AND.MSCAL.GT.0) CALL PYMASC(SCALUP)
0277 IF(MINT(35).eq.3.AND.ickkw.EQ.1) SCALUP=SQRT(PARP(67))*SCALUP
0278
0279 IF(ickkw.gt.0) THEN
0280 c
0281 c Set up number of jets
0282 c
0283 NLJETS=0
0284 NPART=0
0285 do i=3,NUP
0286 if(ISTUP(i).ne.1) cycle
0287 NPART=NPART+1
0288 IPART(NPART)=i
0289 if(iabs(IDUP(i)).ge.6.and.IDUP(i).ne.21) cycle
0290 if(MOTHUP(1,i).gt.2) cycle
0291 NLJETS=NLJETS+1
0292 PTCLUS(NLJETS)=PTPART(NPART)
0293 enddo
0294 CALL ALPSOR(PTCLUS,nljets,KP,1)
0295
0296 C IDPRUP=LPRUP(NLJETS-MINJETS+1)
0297
0298 C IF(ickkw.eq.1) THEN
0299 Cc ... and decide whether exclusive or inclusive
0300 C if(IEXCFILE.eq.0.and.NLJETS.eq.MAXJETS)then
0301 C IEXC=0
0302 C else
0303 C IEXC=1
0304 C endif
0305 C ENDIF
0306 ENDIF
0307
0308 RETURN
0309 END
0310
0311 C*********************************************************************
0312 C...UPVETO
0313 C...Subroutine to implement the MLM jet matching criterion
0314 C*********************************************************************
0315 SUBROUTINE MGVETO(IPVETO)
0316
0317 IMPLICIT NONE
0318
0319 C...Pythia common blocks
0320 INTEGER MINT
0321 DOUBLE PRECISION VINT
0322 COMMON/PYINT1/MINT(400),VINT(400)
0323
0324 C...GUP Event common block
0325 INTEGER MAXNUP
0326 PARAMETER (MAXNUP=500)
0327 INTEGER NUP,IDPRUP,IDUP,ISTUP,MOTHUP,ICOLUP
0328 DOUBLE PRECISION XWGTUP,SCALUP,AQEDUP,AQCDUP,PUP,VTIMUP,SPINUP
0329 COMMON/HEPEUP/NUP,IDPRUP,XWGTUP,SCALUP,AQEDUP,AQCDUP,
0330 & IDUP(MAXNUP),ISTUP(MAXNUP),MOTHUP(2,MAXNUP),
0331 & ICOLUP(2,MAXNUP),PUP(5,MAXNUP),VTIMUP(MAXNUP),
0332 & SPINUP(MAXNUP)
0333
0334 C...User process initialization commonblock.
0335 INTEGER MAXPUP
0336 PARAMETER (MAXPUP=100)
0337 INTEGER IDBMUP,PDFGUP,PDFSUP,IDWTUP,NPRUP,LPRUP
0338 DOUBLE PRECISION EBMUP,XSECUP,XERRUP,XMAXUP
0339 COMMON/HEPRUP/IDBMUP(2),EBMUP(2),PDFGUP(2),PDFSUP(2),
0340 & IDWTUP,NPRUP,XSECUP(MAXPUP),XERRUP(MAXPUP),XMAXUP(MAXPUP),
0341 & LPRUP(MAXPUP)
0342
0343 C...HEPEVT commonblock.
0344 INTEGER NMXHEP,NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
0345 PARAMETER (NMXHEP=4000)
0346 COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
0347 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
0348 DOUBLE PRECISION PHEP,VHEP
0349 SAVE /HEPEVT/
0350 INTEGER IPVETO
0351
0352 C...GETJET commonblocks
0353 INTEGER MNCY,MNCPHI,NCY,NCPHI,NJMAX,JETNO,NCJET
0354 DOUBLE PRECISION YCMIN,YCMAX,DELY,DELPHI,ET,STHCAL,CTHCAL,CPHCAL,
0355 & SPHCAL,PCJET,ETJET
0356 PARAMETER (MNCY=200)
0357 PARAMETER (MNCPHI=200)
0358 COMMON/CALORM/DELY,DELPHI,ET(MNCY,MNCPHI),
0359 $CTHCAL(MNCY),STHCAL(MNCY),CPHCAL(MNCPHI),SPHCAL(MNCPHI),
0360 $YCMIN,YCMAX,NCY,NCPHI
0361 DATA NCY,NCPHI/50,60/
0362 PARAMETER (NJMAX=500)
0363 COMMON/GETCOMM/PCJET(4,NJMAX),ETJET(NJMAX),JETNO(MNCY,MNCPHI),
0364 $NCJET
0365 DOUBLE PRECISION PI
0366 PARAMETER (PI=3.141593D0)
0367 C
0368 DOUBLE PRECISION PSERAP
0369 INTEGER K(NJMAX),KP(NJMAX),kpj(njmax)
0370
0371 C...Variables for the kT-clustering
0372 INTEGER NMAX,NN,NJET,NSUB,JET,NJETM,IHARD,IP1,IP2
0373 DOUBLE PRECISION PP,PJET
0374 DOUBLE PRECISION ECUT,Y,YCUT,RAD
0375 PARAMETER (NMAX=512)
0376 DIMENSION JET(NMAX),Y(NMAX),PP(4,NMAX),PJET(4,NMAX),
0377 $ PJETM(4,NMAX)
0378 INTEGER NNM
0379 DOUBLE PRECISION YM(NMAX),PPM(4,NMAX),PJETM
0380
0381 C...kt clustering common block
0382 INTEGER NMAXKT,NUM,HIST
0383 PARAMETER (NMAXKT=512)
0384 DOUBLE PRECISION PPP,KT,ETOT,RSQ,KTP,KTS,KTLAST
0385 COMMON /KTCOMM/ETOT,RSQ,PPP(9,NMAXKT),KTP(NMAXKT,NMAXKT),
0386 $ KTS(NMAXKT),KT(NMAXKT),KTLAST(NMAXKT),HIST(NMAXKT),NUM
0387
0388 C...Extra commonblock to transfer run info.
0389 INTEGER LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0390 COMMON/UPPRIV/LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0391
0392 C...Inputs for the matching algorithm
0393 C clfact determines how jet-to parton matching is done
0394 C kt-jets: default=1
0395 C clfact >= 0: Max mult. if within clfact*max(qcut,Q(partNmax)) from jet, others within clfact*qcut
0396 C clfact < 0: Max mult. if within |clfact|*Q(jetNmax) from jet, other within |clfact|*qcut
0397 C cone-jets: default=1.5
0398 C Matching if within clfact*RCLMAX
0399
0400 double precision etcjet,rclmax,etaclmax,qcut,clfact
0401 integer maxjets,minjets,iexcfile,ktsche,nexcres,excres(30)
0402 common/MEMAIN/etcjet,rclmax,etaclmax,qcut,clfact,
0403 $ maxjets,minjets,iexcfile,ktsche,nexcres,excres
0404
0405 C...Commonblock to transfer event-by-event matching info
0406 INTEGER NLJETS,IEXC,Ifile
0407 DOUBLE PRECISION PTCLUS
0408 COMMON/MEMAEV/PTCLUS(20),NLJETS,IEXC,Ifile
0409
0410 INTEGER nvarev,nvar2
0411 PARAMETER (nvarev=57,nvar2=6)
0412
0413 REAL*4 varev(nvarev)
0414 COMMON/HISTDAT/varev
0415
0416
0417 C local variables
0418 integer i,j,ihep,nmatch,jrmin,KPT(MAXNUP),nres
0419 double precision etajet,phijet,delr,dphi,delrmin,ptjet
0420 double precision p(4,10),pt(10),eta(10),phi(10)
0421 integer idbg
0422 data idbg/0/
0423 REAL*4 var2(nvar2)
0424 c
0425 double precision tiny
0426 parameter (tiny=1d-3)
0427 integer icount
0428 data icount/0/
0429 INTEGER ISTOLD(NMXHEP),IST,IDA
0430 c LOGICAL FOUND
0431
0432 c if(NLJETS.GT.0)then
0433 c idbg=1
0434 c else
0435 c idbg=0
0436 c endif
0437
0438 IPVETO=0
0439
0440 IF(ICKKW.NE.1) RETURN
0441
0442 IF(NLJETS.LT.MINJETS.OR.NLJETS.GT.MAXJETS)THEN
0443 if(idbg.eq.1)
0444 $ WRITE(LNHOUT,*) 'Failed due to NLJETS ',NLJETS,' < ',MINJETS,
0445 $ ' or > ',MAXJETS
0446 GOTO 999
0447 ENDIF
0448
0449 C Throw event if it contains an excluded resonance
0450 NRES=0
0451 DO I=1,NUP
0452 IF(ISTUP(I).EQ.2)THEN
0453 DO J=1,nexcres
0454 IF(IDUP(I).EQ.EXCRES(J)) NRES=NRES+1
0455 ENDDO
0456 ENDIF
0457 ENDDO
0458 IF(NRES.GT.0)THEN
0459 if(idbg.eq.1)
0460 $ PRINT *,'Event',IEVNT,' thrown because of ',NRES,
0461 $ ' excluded resonance(s)'
0462 c CALL PYLIST(7)
0463 GOTO 999
0464 ENDIF
0465
0466
0467
0468 C Set up vetoed mothers
0469 c DO I=1,MAXNUP
0470 c INORAD(I)=0
0471 c ENDDO
0472 c DO IHEP=1,NUP-2
0473 c if(ISTHEP(ihep).gt.1.and.iabs(IDHEP(ihep)).gt.8) then
0474 c if(iabs(IDHEP(ihep)).gt.5.and.IDHEP(ihep).ne.21) then
0475 c INORAD(ihep)=1
0476 c endif
0477 c ENDDO
0478
0479 C Set status for non-clustering partons to 2
0480 DO ihep=1,NHEP
0481 c ISTORG(ihep)=ISTHEP(ihep)
0482 IF(ISTHEP(ihep).EQ.1.AND.iabs(IDHEP(ihep)).GE.6.AND.
0483 $ IDHEP(ihep).NE.21) ISTHEP(ihep)=2
0484 IF(ISTHEP(ihep).EQ.1.AND.(iabs(IDHEP(ihep)).lt.6.or.
0485 $ IDHEP(ihep).eq.21).AND.JMOHEP(1,ihep).GT.0) then
0486 IDA=ihep
0487 DO WHILE(JMOHEP(1,IDA).GT.0)
0488 c Trace mothers, if daughter particle in hard event,
0489 c must be decay - remove
0490 IF(iabs(IDHEP(JMOHEP(1,IDA))).GE.6.AND.
0491 $ IDHEP(JMOHEP(1,IDA)).NE.21.AND.
0492 $ IDA.LE.NUP+4) GOTO 5
0493 IDA=JMOHEP(1,IDA)
0494 ENDDO
0495 cycle
0496 5 ISTHEP(ihep)=2
0497 ENDIF
0498 ENDDO
0499
0500 C Prepare histogram filling
0501 DO I=1,4
0502 var2(1+I)=-1
0503 varev(46+I)=-1
0504 varev(50+I)=-1
0505 ENDDO
0506
0507 C CHECK FOR EVENT ERROR OR ZERO WGT
0508 I=0
0509 C
0510 c reconstruct parton-level event
0511
0512 if(idbg.eq.1) then
0513 write(LNHOUT,*) ' '
0514 write(LNHOUT,*) 'new event '
0515 c CALL PYLIST(1)
0516 CALL PYLIST(7)
0517 CALL PYLIST(5)
0518 write(LNHOUT,*) 'PARTONS'
0519 endif
0520 i=0
0521 do ihep=3,nup
0522 if(ISTUP(ihep).ne.1.or.
0523 $ (iabs(IDUP(ihep)).ge.6.and.IDUP(ihep).ne.21)) cycle
0524 if(MOTHUP(1,ihep).gt.2) cycle
0525 i=i+1
0526 do j=1,4
0527 p(j,i)=pup(j,ihep)
0528 enddo
0529 pt(i)=sqrt(p(1,i)**2+p(2,i)**2)
0530 if(i.LE.4) varev(50+i)=pt(i)
0531 eta(i)=-log(tan(0.5d0*atan2(pt(i)+tiny,p(3,i))))
0532 phi(i)=atan2(p(2,i),p(1,i))
0533 if(idbg.eq.1) then
0534 write(LNHOUT,*) pt(i),eta(i),phi(i)
0535 endif
0536 enddo
0537 if(i.ne.NLJETS)then
0538 print *,'Error in UPVETO: Wrong number of jets found ',i,NLJETS
0539 CALL PYLIST(7)
0540 CALL PYLIST(2)
0541 stop
0542 endif
0543
0544 C Bubble-sort PTs in descending order
0545 DO I=1,3
0546 DO J=4,I+1,-1
0547 IF(varev(50+J).GT.varev(50+I))THEN
0548 PTJET=varev(50+J)
0549 varev(50+J)=varev(50+I)
0550 varev(50+I)=PTJET
0551 ENDIF
0552 ENDDO
0553 ENDDO
0554
0555 if(idbg.eq.1) then
0556 do i=1,nhep
0557 write(LNHOUT,111) i,isthep(i),idhep(i),jmohep(1,i),jmohep(2,i)
0558 $ ,phep(1,i),phep(2,i),phep(3,i)
0559 enddo
0560 111 format(5(i4,1x),3(f12.5,1x))
0561 endif
0562
0563 IF(qcut.le.0d0)then
0564
0565 IF(clfact.EQ.0d0) clfact=1.5d0
0566
0567 c CALL PYLIST(7)
0568 c CALL PYLIST(2)
0569 c CALL PYLIST(5)
0570 c Start from the partonic system
0571 IF(NLJETS.GT.0) CALL ALPSOR(pt,nljets,KP,2)
0572 c reconstruct showered jets
0573 c
0574 YCMAX=ETACLMAX+RCLMAX
0575 YCMIN=-YCMAX
0576 CALL CALINIM
0577 CALL CALDELM(1,1)
0578 CALL GETJETM(RCLMAX,ETCJET,ETACLMAX)
0579 c analyse only events with at least nljets-reconstructed jets
0580 IF(NCJET.GT.0) CALL ALPSOR(ETJET,NCJET,K,2)
0581 if(idbg.eq.1) then
0582 write(LNHOUT,*) 'JETS'
0583 do i=1,ncjet
0584 j=k(ncjet+1-i)
0585 ETAJET=PSERAP(PCJET(1,j))
0586 PHIJET=ATAN2(PCJET(2,j),PCJET(1,j))
0587 write(LNHOUT,*) etjet(j),etajet,phijet
0588 enddo
0589 endif
0590 IF(NCJET.LT.NLJETS) THEN
0591 if(idbg.eq.1)
0592 $ WRITE(LNHOUT,*) 'Failed due to NCJET ',NCJET,' < ',NLJETS
0593 GOTO 999
0594 endif
0595 c associate partons and jets, using min(delr) as criterion
0596 NMATCH=0
0597 DO I=1,NCJET
0598 KPJ(I)=0
0599 ENDDO
0600 DO I=1,NLJETS
0601 DELRMIN=1D5
0602 DO 110 J=1,NCJET
0603 IF(KPJ(J).NE.0) GO TO 110
0604 ETAJET=PSERAP(PCJET(1,J))
0605 PHIJET=ATAN2(PCJET(2,J),PCJET(1,J))
0606 DPHI=ABS(PHI(KP(NLJETS-I+1))-PHIJET)
0607 IF(DPHI.GT.PI) DPHI=2.*PI-DPHI
0608 DELR=SQRT((ETA(KP(NLJETS-I+1))-ETAJET)**2+(DPHI)**2)
0609 IF(DELR.LT.DELRMIN) THEN
0610 DELRMIN=DELR
0611 JRMIN=J
0612 ENDIF
0613 110 CONTINUE
0614 IF(DELRMIN.LT.clfact*RCLMAX) THEN
0615 NMATCH=NMATCH+1
0616 KPJ(JRMIN)=I
0617 ENDIF
0618 C WRITE(*,*) 'PARTON-JET',I,' best match:',k(ncjet+1-jrmin)
0619 c $ ,delrmin
0620 ENDDO
0621 IF(NMATCH.LT.NLJETS) THEN
0622 if(idbg.eq.1)
0623 $ WRITE(LNHOUT,*) 'Failed due to NMATCH ',NMATCH,' < ',NLJETS
0624 GOTO 999
0625 endif
0626 C REJECT EVENTS WITH LARGER JET MULTIPLICITY FROM EXCLUSIVE SAMPLE
0627 IF(NCJET.GT.NLJETS.AND.IEXC.EQ.1) THEN
0628 if(idbg.eq.1)
0629 $ WRITE(LNHOUT,*) 'Failed due to NCJET ',NCJET,' > ',NLJETS
0630 GOTO 999
0631 endif
0632 C VETO EVENTS WHERE MATCHED JETS ARE SOFTER THAN NON-MATCHED ONES
0633 IF(IEXC.NE.1) THEN
0634 J=NCJET
0635 DO I=1,NLJETS
0636 IF(KPJ(K(J)).EQ.0) GOTO 999
0637 J=J-1
0638 ENDDO
0639 ENDIF
0640
0641 else ! qcut.gt.0
0642
0643 if(MINT(35).eq.3) then
0644 C The pt-ordered showers have been used - use "shower emission pt method"
0645 C Veto events where first shower emission has kt > YCUT
0646
0647 IF(NLJETS.EQ.0)THEN
0648 VINT(358)=0
0649 ENDIF
0650
0651 IF(idbg.eq.1) THEN
0652 PRINT *,'Using shower emission pt method'
0653 PRINT *,'qcut, ptclus(1), vint(357),vint(358): ',
0654 $ qcut,ptclus(1),vint(357),vint(358)
0655 ENDIF
0656 YCUT=qcut**2
0657
0658 IF(NLJETS.GT.0.AND.PTCLUS(1)**2.LT.YCUT) THEN
0659 if(idbg.eq.1)
0660 $ WRITE(LNHOUT,*) 'Failed due to KT ',
0661 $ PTCLUS(1),' < ',SQRT(YCUT)
0662 GOTO 999
0663 ENDIF
0664
0665 c PRINT *,'Y,VINT:',SQRT(Y(NLJETS+1)),SQRT(VINT(390))
0666
0667 IF(IEXC.EQ.1.AND.MAX(VINT(357),VINT(358)).GT.SQRT(YCUT))THEN
0668 if(idbg.eq.1)
0669 $ WRITE(LNHOUT,*),
0670 $ 'Failed due to ',max(VINT(357),VINT(358)),' > ',SQRT(YCUT)
0671 GOTO 999
0672 ENDIF
0673 c PRINT *,NLJETS,IEXC,SQRT(VINT(390)),PTCLUS(1),SQRT(YCUT)
0674 c Highest multiplicity case
0675 IF(IEXC.EQ.0.AND.NLJETS.GT.0.AND.
0676 $ MAX(VINT(357),VINT(358)).GT.PTCLUS(1))THEN
0677 c $ VINT(390).GT.PTCLUS(1)**2)THEN
0678 if(idbg.eq.1)
0679 $ WRITE(LNHOUT,*),
0680 $ 'Failed due to ',max(VINT(357),VINT(358)),' > ',PTCLUS(1)
0681 GOTO 999
0682 ENDIF
0683 c
0684 else ! not false ! not pt-ordered showers
0685
0686 IF(clfact.EQ.0d0) clfact=1d0
0687
0688 C---FIND FINAL STATE COLOURED PARTICLES
0689 NN=0
0690 DO IHEP=1,NHEP
0691 IF (ISTHEP(IHEP).EQ.1
0692 & .AND.(ABS(IDHEP(IHEP)).LT.6.OR.IDHEP(IHEP).EQ.21)) THEN
0693 PTJET=sqrt(PHEP(1,IHEP)**2+PHEP(2,IHEP)**2)
0694 ETAJET=ABS(LOG(MIN((SQRT(PTJET**2+PHEP(3,IHEP)**2)+
0695 $ ABS(PHEP(3,IHEP)))/PTJET,1d5)))
0696 IF(ETAJET.GT.etaclmax) cycle
0697 NN=NN+1
0698 IF (NN.GT.NMAX) then
0699 CALL PYLIST(2)
0700 PRINT *, 'Too many particles: ', NN
0701 NN=NN-1
0702 GOTO 10
0703 endif
0704 DO I=1,4
0705 PP(I,NN)=PHEP(I,IHEP)
0706 ENDDO
0707 ELSE if(idbg.eq.1)THEN
0708 PRINT *,'Skipping particle ',IHEP,ISTHEP(IHEP),IDHEP(IHEP)
0709 ENDIF
0710 ENDDO
0711
0712 C...Cluster event to find values of Y including jet matching but not veto of too many jets
0713 C...Only used to fill the beforeveto Root tree
0714 10 ECUT=1
0715 IF (NN.GT.1) then
0716 CALL KTCLUS(KTSCHE,PP,NN,ECUT,Y,*999)
0717 if(idbg.eq.1)
0718 $ WRITE(LNHOUT,*) 'Clustering values:',
0719 $ (SQRT(Y(i)),i=1,MIN(NN,3))
0720
0721 C Print out values in the case where all jets are matched at the
0722 C value of the NLJETS:th clustering
0723 var2(1)=NLJETS
0724 var2(6)= Ifile
0725
0726 if(NLJETS.GT.MINJETS)then
0727 YCUT=Y(NLJETS)
0728 CALL KTRECO(MOD(KTSCHE,10),PP,NN,ECUT,YCUT,YCUT,PJET,JET,
0729 $ NCJET,NSUB,*999)
0730
0731 C Cluster jets with first hard parton
0732 DO I=1,NLJETS
0733 DO J=1,4
0734 PPM(J,I)=PJET(J,I)
0735 ENDDO
0736 ENDDO
0737
0738 NJETM=NLJETS
0739 DO IHARD=1,NLJETS
0740 NNM=NJETM+1
0741 DO J=1,4
0742 PPM(J,NNM)=p(J,IHARD)
0743 ENDDO
0744 CALL KTCLUS(KTSCHE,PPM,NNM,ECUT,YM,*999)
0745 IF(YM(NNM).GT.YCUT) THEN
0746 C Parton not clustered
0747 GOTO 90
0748 ENDIF
0749
0750 C Find jet clustered with parton
0751
0752 IP1=HIST(NNM)/NMAXKT
0753 IP2=MOD(HIST(NNM),NMAXKT)
0754 IF(IP2.NE.NNM.OR.IP1.LE.0)THEN
0755 GOTO 90
0756 ENDIF
0757 DO I=IP1,NJETM-1
0758 DO J=1,4
0759 PPM(J,I)=PPM(J,I+1)
0760 ENDDO
0761 ENDDO
0762 NJETM=NJETM-1
0763 ENDDO ! IHARD=1,NLJETS
0764 endif ! NLJETS.GT.MINJETS
0765
0766 DO I=1,MIN(NN,4)
0767 var2(1+I)=SQRT(Y(I))
0768 ENDDO
0769 C DKC WRITE(15,4001) (var2(I),I=1,nvar2)
0770
0771 90 CONTINUE
0772
0773 C Now perform jet clustering at the value chosen in qcut
0774
0775 CALL KTCLUS(KTSCHE,PP,NN,ECUT,Y,*999)
0776
0777 YCUT=qcut**2
0778 NCJET=0
0779
0780 C Reconstruct jet momenta
0781 CALL KTRECO(MOD(KTSCHE,10),PP,NN,ECUT,YCUT,YCUT,PJET,JET,
0782 $ NCJET,NSUB,*999)
0783
0784 ELSE IF (NN.EQ.1) THEN
0785
0786 Y(1)=PP(1,1)**2+PP(2,1)**2
0787 IF(Y(1).GT.YCUT)THEN
0788 NCJET=1
0789 DO I=1,4
0790 PJET(I,1)=PP(I,1)
0791 ENDDO
0792 ENDIF
0793 endif
0794
0795 if(idbg.eq.1) then
0796 write(LNHOUT,*) 'JETS'
0797 do i=1,ncjet
0798 PTJET =SQRT(PJET(1,i)**2+PJET(2,i)**2)
0799 ETAJET=PSERAP(PJET(1,i))
0800 PHIJET=ATAN2(PJET(2,i),PJET(1,i))
0801 write(LNHOUT,*) ptjet,etajet,phijet
0802 enddo
0803 endif
0804
0805 IF(NCJET.LT.NLJETS) THEN
0806 if(idbg.eq.1)
0807 $ WRITE(LNHOUT,*) 'Failed due to NCJET ',NCJET,' < ',NLJETS
0808 GOTO 999
0809 endif
0810
0811 C...Right number of jets - but the right jets?
0812 C For max. multiplicity case, count jets only to the NHARD:th jet
0813 IF(IEXC.EQ.0)THEN
0814 IF(NLJETS.GT.0)THEN
0815 YCUT=Y(NLJETS)
0816 CALL KTRECO(MOD(KTSCHE,10),PP,NN,ECUT,YCUT,YCUT,PJET,JET,
0817 $ NCJET,NSUB,*999)
0818 IF(clfact.GE.0d0) THEN
0819 CALL ALPSOR(PTCLUS,nljets,KPT,2)
0820 YCUT=MAX(qcut,PTCLUS(KPT(1)))**2
0821 ENDIF
0822 ENDIF
0823 ELSE IF(NCJET.GT.NLJETS) THEN
0824 if(idbg.eq.1)
0825 $ WRITE(LNHOUT,*) 'Failed due to NCJET ',NCJET,' > ',NLJETS
0826 GOTO 999
0827 ENDIF
0828
0829 C Cluster jets with hard partons, one at a time
0830 DO I=1,NLJETS
0831 DO J=1,4
0832 PPM(J,I)=PJET(J,I)
0833 ENDDO
0834 ENDDO
0835
0836 NJETM=NLJETS
0837 IF(clfact.NE.0) YCUT=clfact**2*YCUT
0838 c YCUT=qcut**2
0839 c YCUT=(1.5*qcut)**2
0840
0841 DO 120 IHARD=1,NLJETS
0842 NN=NJETM+1
0843 DO J=1,4
0844 PPM(J,NN)=p(J,IHARD)
0845 ENDDO
0846 CALL KTCLUS(KTSCHE,PPM,NN,ECUT,Y,*999)
0847
0848 IF(Y(NN).GT.YCUT) THEN
0849 C Parton not clustered
0850 if(idbg.eq.1)
0851 $ WRITE(LNHOUT,*) 'Failed due to parton ',IHARD,
0852 $ ' not clustered.'
0853 GOTO 999
0854 ENDIF
0855
0856 C Find jet clustered with parton
0857
0858 IP1=HIST(NN)/NMAXKT
0859 IP2=MOD(HIST(NN),NMAXKT)
0860 IF(IP2.NE.NN.OR.IP1.LE.0)THEN
0861 if(idbg.eq.1)
0862 $ WRITE(LNHOUT,*) 'Failed due to parton ',IHARD,
0863 $ ' not clustered.'
0864 GOTO 999
0865 ENDIF
0866 C Remove jet clustered with parton
0867 DO I=IP1,NJETM-1
0868 DO J=1,4
0869 PPM(J,I)=PPM(J,I+1)
0870 ENDDO
0871 ENDDO
0872 NJETM=NJETM-1
0873 120 CONTINUE
0874
0875 endif ! pt-ordered showers
0876 endif ! qcut.gt.0
0877
0878 C...Cluster particles with |eta| < etaclmax for histograms
0879 NN=0
0880 DO IHEP=1,NHEP
0881 IF (ISTHEP(IHEP).EQ.1
0882 & .AND.(ABS(IDHEP(IHEP)).LT.6.OR.IDHEP(IHEP).EQ.21)) THEN
0883 PTJET=sqrt(PHEP(1,IHEP)**2+PHEP(2,IHEP)**2)
0884 ETAJET=ABS(LOG(MIN((SQRT(PTJET**2+PHEP(3,IHEP)**2)+
0885 $ ABS(PHEP(3,IHEP)))/PTJET,1d5)))
0886 IF(ETAJET.GT.etaclmax) cycle
0887 NN=NN+1
0888 IF (NN.GT.NMAX) then
0889 CALL PYLIST(2)
0890 PRINT *, 'Too many particles: ', NN
0891 NN=NN-1
0892 GOTO 20
0893 ENDIF
0894 DO I=1,4
0895 PP(I,NN)=PHEP(I,IHEP)
0896 ENDDO
0897 ELSE if(idbg.eq.1)THEN
0898 PRINT *,'Skipping particle ',IHEP,ISTHEP(IHEP),IDHEP(IHEP)
0899 ENDIF
0900 ENDDO
0901
0902 20 ECUT=1
0903 IF (NN.GT.1) THEN
0904 CALL KTCLUS(KTSCHE,PP,NN,ECUT,Y,*999)
0905 ELSE IF(NN.EQ.1) THEN
0906 Y(1)=SQRT(PP(1,NN)**2+PP(2,NN)**2)
0907 ENDIF
0908
0909 DO I=1,MIN(NN,4)
0910 varev(46+I)=SQRT(Y(I))
0911 ENDDO
0912
0913
0914 RETURN
0915 4001 FORMAT(50E15.6)
0916 c HERWIG/PYTHIA TERMINATION:
0917 999 IPVETO=1
0918 END
0919
0920 C*********************************************************************
0921 C PYMASC
0922 C Implementation of scale used in Pythia parton showers
0923 C*********************************************************************
0924 SUBROUTINE PYMASC(scale)
0925 IMPLICIT NONE
0926
0927 C...Arguments
0928 REAL*8 scale
0929
0930 C...Functions
0931 REAL*8 SMDOT5
0932
0933 C...User process initialization commonblock.
0934 INTEGER MAXPUP
0935 PARAMETER (MAXPUP=100)
0936 INTEGER IDBMUP,PDFGUP,PDFSUP,IDWTUP,NPRUP,LPRUP
0937 DOUBLE PRECISION EBMUP,XSECUP,XERRUP,XMAXUP
0938 COMMON/HEPRUP/IDBMUP(2),EBMUP(2),PDFGUP(2),PDFSUP(2),
0939 & IDWTUP,NPRUP,XSECUP(MAXPUP),XERRUP(MAXPUP),XMAXUP(MAXPUP),
0940 & LPRUP(MAXPUP)
0941 C...User process event common block.
0942 INTEGER MAXNUP
0943 PARAMETER (MAXNUP=500)
0944 INTEGER NUP,IDPRUP,IDUP,ISTUP,MOTHUP,ICOLUP
0945 DOUBLE PRECISION XWGTUP,SCALUP,AQEDUP,AQCDUP,PUP,VTIMUP,SPINUP
0946 COMMON/HEPEUP/NUP,IDPRUP,XWGTUP,SCALUP,AQEDUP,AQCDUP,IDUP(MAXNUP),
0947 & ISTUP(MAXNUP),MOTHUP(2,MAXNUP),ICOLUP(2,MAXNUP),PUP(5,MAXNUP),
0948 & VTIMUP(MAXNUP),SPINUP(MAXNUP)
0949
0950 C...Extra commonblock to transfer run info.
0951 INTEGER LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0952 COMMON/UPPRIV/LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
0953
0954 C...Local variables
0955 INTEGER ICC1,ICC2,IJ,IDC1,IDC2,IC,IC1,IC2
0956 REAL*8 QMIN,QTMP
0957
0958 C Just use the scale read off the event record
0959 scale=SCALUP
0960
0961 C Alternatively:
0962
0963 C... Guesses for the correct scale
0964 C Assumptions:
0965 C (1) if the initial state is a color singlet, then
0966 C use s-hat for the scale
0967 C
0968 C (2) if color flow to the final state, use the minimum
0969 C of the dot products of color connected pairs
0970 C (times two for consistency with above)
0971
0972 QMIN=SMDOT5(PUP(1,1),PUP(1,2))
0973 ICC1=1
0974 ICC2=2
0975 C
0976 C For now, there is no generic way to guarantee the "right"
0977 C scale choice. Here, we take the HERWIG pt. of view and
0978 C choose the dot product of the colored connected "primary"
0979 C pairs.
0980 C
0981
0982 DO 101 IJ=1,NUP
0983 IF(MOTHUP(2,IJ).GT.2) GOTO 101
0984 IDC1=ICOLUP(1,IJ)
0985 IDC2=ICOLUP(2,IJ)
0986 IF(IDC1.EQ.0) IDC1=-1
0987 IF(IDC2.EQ.0) IDC2=-2
0988
0989 DO 201 IC=IJ+1,NUP
0990 IF(MOTHUP(2,IC).GT.2) GOTO 201
0991 IC1=ICOLUP(1,IC)
0992 IC2=ICOLUP(2,IC)
0993 IF(ISTUP(IC)*ISTUP(IJ).GE.1) THEN
0994 IF(IDC1.EQ.IC2.OR.IDC2.EQ.IC1) THEN
0995 QTMP=SMDOT5(PUP(1,IJ),PUP(1,IC))
0996 IF(QTMP.LT.QMIN) THEN
0997 QMIN=QTMP
0998 ICC1=IJ
0999 ICC2=IC
1000 ENDIF
1001 ENDIF
1002 ELSEIF(ISTUP(IC)*ISTUP(IJ).LE.-1) THEN
1003 IF(IDC1.EQ.IC1.OR.IDC2.EQ.IC2) THEN
1004 QTMP=SMDOT5(PUP(1,IJ),PUP(1,IC))
1005 IF(QTMP.LT.QMIN) THEN
1006 QMIN=QTMP
1007 ICC1=IJ
1008 ICC2=IC
1009 ENDIF
1010 ENDIF
1011 ENDIF
1012 201 CONTINUE
1013 101 CONTINUE
1014
1015 scale=QMIN
1016
1017 RETURN
1018 END
1019
1020 C...SMDOT5
1021 C Helper function
1022
1023 FUNCTION SMDOT5(V1,V2)
1024 IMPLICIT NONE
1025 REAL*8 SMDOT5,TEMP
1026 REAL*8 V1(5),V2(5)
1027 INTEGER I
1028
1029 SMDOT5=0D0
1030 TEMP=V1(4)*V2(4)
1031 DO I=1,3
1032 TEMP=TEMP-V1(I)*V2(I)
1033 ENDDO
1034
1035 SMDOT5=SQRT(ABS(TEMP))
1036
1037 RETURN
1038 END
1039
1040 C*********************************************************************
1041 C...set_matching
1042 C...Sets parameters for the matching, i.e. cuts and jet multiplicities
1043 C*********************************************************************
1044
1045 SUBROUTINE set_matching(npara,param,value)
1046 implicit none
1047 c
1048 c arguments
1049 c
1050 integer npara
1051 character*20 param(*),value(*)
1052
1053 C...User process initialization commonblock.
1054 INTEGER MAXPUP
1055 PARAMETER (MAXPUP=100)
1056 INTEGER IDBMUP,PDFGUP,PDFSUP,IDWTUP,NPRUP,LPRUP
1057 DOUBLE PRECISION EBMUP,XSECUP,XERRUP,XMAXUP
1058 COMMON/HEPRUP/IDBMUP(2),EBMUP(2),PDFGUP(2),PDFSUP(2),
1059 & IDWTUP,NPRUP,XSECUP(MAXPUP),XERRUP(MAXPUP),XMAXUP(MAXPUP),
1060 & LPRUP(MAXPUP)
1061
1062 C...User process event common block.
1063 INTEGER MAXNUP
1064 PARAMETER (MAXNUP=500)
1065 INTEGER NUP,IDPRUP,IDUP,ISTUP,MOTHUP,ICOLUP
1066 DOUBLE PRECISION XWGTUP,SCALUP,AQEDUP,AQCDUP,PUP,VTIMUP,SPINUP
1067 COMMON/HEPEUP/NUP,IDPRUP,XWGTUP,SCALUP,AQEDUP,AQCDUP,IDUP(MAXNUP),
1068 & ISTUP(MAXNUP),MOTHUP(2,MAXNUP),ICOLUP(2,MAXNUP),PUP(5,MAXNUP),
1069 & VTIMUP(MAXNUP),SPINUP(MAXNUP)
1070
1071 C...Extra commonblock to transfer run info.
1072 INTEGER LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
1073 COMMON/UPPRIV/LNHIN,LNHOUT,MSCAL,IEVNT,ICKKW,ISCALE
1074
1075 C...Inputs for the matching algorithm
1076 double precision etcjet,rclmax,etaclmax,qcut,clfact
1077 integer maxjets,minjets,iexcfile,ktsche,nexcres,excres(30)
1078 common/MEMAIN/etcjet,rclmax,etaclmax,qcut,clfact,
1079 $ maxjets,minjets,iexcfile,ktsche,nexcres,excres
1080 CDKC DATA ktsche,maxjets,minjets,nexcres/0,-1,-1,0/
1081 DATA ktsche,maxjets,minjets,nexcres/0,-1,-1,0/
1082 DATA ktsche,nexcres/0,0/
1083 DATA qcut,clfact/0d0,0d0/
1084
1085 C...Commonblock to transfer event-by-event matching info
1086 INTEGER NLJETS,IEXC,Ifile
1087 DOUBLE PRECISION PTCLUS
1088 COMMON/MEMAEV/PTCLUS(20),NLJETS,IEXC,Ifile
1089
1090 C CALSIM VARIABLES
1091 INTEGER NCY,NCPHI
1092 DOUBLE PRECISION PI,DELY,DELPHI,ET,CTHCAL,STHCAL,CPHCAL,SPHCAL,
1093 $ YCMIN,YCMAX
1094 PARAMETER (NCY=50)
1095 PARAMETER (NCPHI=60,PI=3.141593D0)
1096 COMMON/CALOR/DELY,DELPHI,ET(NCY,NCPHI),
1097 $ CTHCAL(NCY),STHCAL(NCY),CPHCAL(NCPHI),SPHCAL(NCPHI),
1098 $ YCMIN,YCMAX
1099
1100 C...Local variables
1101 INTEGER I,MAXNJ,NREAD,MINJ,MAXJ
1102 parameter(MAXNJ=6)
1103 DOUBLE PRECISION XSTOT(MAXNJ),XSECTOT
1104 DOUBLE PRECISION ptjmin,etajmax,drjmin,ptbmin,etabmax,xqcut
1105
1106 CDKC -- initalize by assignment instead of data statement, whose behaviour is compiler dependent
1107 C minjets=-1
1108 C maxjets=-1
1109
1110 C...Need lower scale for final state radiation in e+e-
1111 IF(IABS(IDBMUP(1)).EQ.11.AND.IABS(IDBMUP(2)).EQ.11) then
1112 CALL PYGIVE('PARP(71)=1')
1113 ENDIF
1114
1115 C...CRUCIAL FOR JET-PARTON MATCHING: CALL UPVETO, ALLOW JET-PARTON MATCHING
1116 C call pygive('MSTP(143)=1')
1117
1118 if(ickkw.eq.1) then
1119
1120 C...Run PYPTFS instead of PYSHOW
1121 c CALL PYGIVE("MSTJ(41)=12")
1122
1123 c***********************************************************************
1124 c Read in jet cuts
1125 c***********************************************************************
1126
1127 call get_real (npara,param,value," ptj " ,ptjmin,7d3)
1128 call get_real (npara,param,value," etaj " ,etajmax,7d3)
1129 call get_real (npara,param,value," ptb " ,ptbmin,7d3)
1130 call get_real (npara,param,value," etab " ,etabmax,7d3)
1131 call get_real (npara,param,value," drjj " ,drjmin,7d3)
1132 call get_real (npara,param,value," xqcut " ,xqcut,0d0)
1133
1134 if(qcut.lt.xqcut) qcut=max(xqcut*1.2,xqcut+5)
1135 if(xqcut.le.0)then
1136 write(*,*) 'Warning! ME generation QCUT = 0. QCUT set to 0!'
1137 qcut=0
1138 endif
1139
1140 etajmax=min(etajmax,etabmax)
1141 ptjmin=max(ptjmin,ptbmin)
1142
1143 c IF(ICKKW.EQ.1) THEN
1144 c WRITE(*,*) ' '
1145 c WRITE(*,*) 'INPUT 0 FOR INCLUSIVE JET SAMPLE, 1 FOR EXCLUSIVE'
1146 c WRITE(*,*) '(SELECT 0 FOR HIGHEST PARTON MULTIPLICITY SAMPLE)'
1147 c WRITE(*,*) '(SELECT 1 OTHERWISE)'
1148 c READ(*,*) IEXCFILE
1149 c ENDIF
1150
1151 C INPUT PARAMETERS FOR CONE ALGORITHM
1152
1153 ETCJET=MAX(PTJMIN+5,1.2*PTJMIN)
1154 RCLMAX=DRJMIN
1155 ETACLMAX=ETAJMAX
1156 IF(qcut.le.0)THEN
1157 WRITE(*,*) 'JET CONE PARAMETERS FOR MATCHING:'
1158 WRITE(*,*) 'ET>',ETCJET,' R=',RCLMAX
1159 WRITE(*,*) 'DR(PARTON-JET)<',1.5*RCLMAX
1160 WRITE(*,*) 'ETA(JET)<',ETACLMAX
1161 ELSE
1162 WRITE(*,*) 'KT JET PARAMETERS FOR MATCHING:'
1163 WRITE(*,*) 'QCUT=',qcut
1164 WRITE(*,*) 'ETA(JET)<',ETACLMAX
1165 WRITE(*,*) 'Note that in ME generation, qcut = ',xqcut
1166 ENDIF
1167 endif
1168 return
1169 end
1170
1171 subroutine get_real(npara,param,value,name,var,def_value)
1172 c----------------------------------------------------------------------------------
1173 c finds the parameter named "name" in param and associate to "value" in value
1174 c----------------------------------------------------------------------------------
1175 implicit none
1176
1177 c
1178 c arguments
1179 c
1180 integer npara
1181 character*20 param(*),value(*)
1182 character*(*) name
1183 real*8 var,def_value
1184 c
1185 c local
1186 c
1187 logical found
1188 integer i
1189 c
1190 c start
1191 c
1192 i=1
1193 found=.false.
1194 do while(.not.found.and.i.le.npara)
1195 found = (index(param(i),name).ne.0)
1196 if (found) read(value(i),*) var
1197 c if (found) write (*,*) name,var
1198 i=i+1
1199 enddo
1200 if (.not.found) then
1201 write (*,*) "Warning: parameter ",name," not found"
1202 write (*,*) " setting it to default value ",def_value
1203 var=def_value
1204 else
1205 write(*,*),'Found parameter ',name,var
1206 endif
1207 return
1208
1209 end
1210 c
1211
1212 subroutine get_integer(npara,param,value,name,var,def_value)
1213 c----------------------------------------------------------------------------------
1214 c finds the parameter named "name" in param and associate to "value" in value
1215 c----------------------------------------------------------------------------------
1216 implicit none
1217 c
1218 c arguments
1219 c
1220 integer npara
1221 character*20 param(*),value(*)
1222 character*(*) name
1223 integer var,def_value
1224 c
1225 c local
1226 c
1227 logical found
1228 integer i
1229 c
1230 c start
1231 c
1232 i=1
1233 found=.false.
1234 do while(.not.found.and.i.le.npara)
1235 found = (index(param(i),name).ne.0)
1236 if (found) read(value(i),*) var
1237 c if (found) write (*,*) name,var
1238 i=i+1
1239 enddo
1240 if (.not.found) then
1241 write (*,*) "Warning: parameter ",name," not found"
1242 write (*,*) " setting it to default value ",def_value
1243 var=def_value
1244 else
1245 write(*,*)'Found parameter ',name,var
1246 endif
1247 return
1248
1249 end
1250
1251 C-----------------------------------------------------------------------
1252 SUBROUTINE ALPSOR(A,N,K,IOPT)
1253 C-----------------------------------------------------------------------
1254 C Sort A(N) into ascending order
1255 C IOPT = 1 : return sorted A and index array K
1256 C IOPT = 2 : return index array K only
1257 C-----------------------------------------------------------------------
1258 DOUBLE PRECISION A(N),B(5000)
1259 INTEGER N,I,J,IOPT,K(N),IL(5000),IR(5000)
1260 IF (N.GT.5000) then
1261 write(*,*) 'Too many entries to sort in alpsrt, stop'
1262 stop
1263 endif
1264 if(n.le.0) return
1265 IL(1)=0
1266 IR(1)=0
1267 DO 10 I=2,N
1268 IL(I)=0
1269 IR(I)=0
1270 J=1
1271 2 IF(A(I).GT.A(J)) GOTO 5
1272 3 IF(IL(J).EQ.0) GOTO 4
1273 J=IL(J)
1274 GOTO 2
1275 4 IR(I)=-J
1276 IL(J)=I
1277 GOTO 10
1278 5 IF(IR(J).LE.0) GOTO 6
1279 J=IR(J)
1280 GOTO 2
1281 6 IR(I)=IR(J)
1282 IR(J)=I
1283 10 CONTINUE
1284 I=1
1285 J=1
1286 GOTO 8
1287 20 J=IL(J)
1288 8 IF(IL(J).GT.0) GOTO 20
1289 9 K(I)=J
1290 B(I)=A(J)
1291 I=I+1
1292 IF(IR(J)) 12,30,13
1293 13 J=IR(J)
1294 GOTO 8
1295 12 J=-IR(J)
1296 GOTO 9
1297 30 IF(IOPT.EQ.2) RETURN
1298 DO 31 I=1,N
1299 31 A(I)=B(I)
1300 999 END
1301
1302 C-----------------------------------------------------------------------
1303 C----Calorimeter simulation obtained from Frank Paige 23 March 1988-----
1304 C
1305 C USE
1306 C
1307 C CALL CALINIM
1308 C CALL CALSIMM
1309 C
1310 C THEN TO FIND JETS WITH A SIMPLIFIED VERSION OF THE UA1 JET
1311 C ALGORITHM WITH JET RADIUS RJET AND MINIMUM SCALAR TRANSVERSE
1312 C ENERGY EJCUT
1313 C (RJET=1., EJCUT=5. FOR UA1)
1314 C USE
1315 C
1316 C CALL GETJETM(RJET,EJCUT)
1317 C
1318 C
1319 C-----------------------------------------------------------------------
1320 C
1321 C ADDED BY MIKE SEYMOUR: PARTON-LEVEL CALORIMETER. ALL PARTONS
1322 C ARE CONSIDERED TO BE HADRONS, SO IN FACT RESEM IS IGNORED
1323 C
1324 C CALL CALPARM
1325 C
1326 C HARD PARTICLE CALORIMETER. ONLY USES THOSE PARTICLES WHICH
1327 C CAME FROM THE HARD PROCESS, AND NOT THE UNDERLYING EVENT
1328 C
1329 C CALL CALHARM
1330 C
1331 C-----------------------------------------------------------------------
1332 SUBROUTINE CALINIM
1333 C
1334 C INITIALIZE CALORIMETER FOR CALSIMM AND GETJETM. NOTE THAT
1335 C BECAUSE THE INITIALIZATION IS SEPARATE, CALSIMM CAN BE
1336 C CALLED MORE THAN ONCE TO SIMULATE PILEUP OF SEVERAL EVENTS.
1337 C
1338 IMPLICIT NONE
1339 C...GETJET commonblocks
1340 INTEGER MNCY,MNCPHI,NCY,NCPHI,NJMAX,JETNO,NCJET
1341 DOUBLE PRECISION YCMIN,YCMAX,DELY,DELPHI,ET,STHCAL,CTHCAL,CPHCAL,
1342 & SPHCAL,PCJET,ETJET
1343 PARAMETER (MNCY=200)
1344 PARAMETER (MNCPHI=200)
1345 COMMON/CALORM/DELY,DELPHI,ET(MNCY,MNCPHI),
1346 $CTHCAL(MNCY),STHCAL(MNCY),CPHCAL(MNCPHI),SPHCAL(MNCPHI),
1347 $YCMIN,YCMAX,NCY,NCPHI
1348 PARAMETER (NJMAX=500)
1349 COMMON/GETCOMM/PCJET(4,NJMAX),ETJET(NJMAX),JETNO(MNCY,MNCPHI),
1350 $ NCJET
1351
1352 INTEGER IPHI,IY
1353 DOUBLE PRECISION PI,PHIX,YX,THX
1354 PARAMETER (PI=3.141593D0)
1355 LOGICAL FSTCAL
1356 DATA FSTCAL/.TRUE./
1357 C
1358 C INITIALIZE ET ARRAY.
1359 DO 100 IPHI=1,NCPHI
1360 DO 100 IY=1,NCY
1361 100 ET(IY,IPHI)=0.
1362 C
1363 IF (FSTCAL) THEN
1364 C CALCULATE TRIG. FUNCTIONS.
1365 DELPHI=2.*PI/FLOAT(NCPHI)
1366 DO 200 IPHI=1,NCPHI
1367 PHIX=DELPHI*(IPHI-.5)
1368 CPHCAL(IPHI)=COS(PHIX)
1369 SPHCAL(IPHI)=SIN(PHIX)
1370 200 CONTINUE
1371 DELY=(YCMAX-YCMIN)/FLOAT(NCY)
1372 DO 300 IY=1,NCY
1373 YX=DELY*(IY-.5)+YCMIN
1374 THX=2.*ATAN(EXP(-YX))
1375 CTHCAL(IY)=COS(THX)
1376 STHCAL(IY)=SIN(THX)
1377 300 CONTINUE
1378 FSTCAL=.FALSE.
1379 ENDIF
1380 END
1381 C
1382 SUBROUTINE CALSIMM
1383 C
1384 C SIMPLE CALORIMETER SIMULATION. ASSUME UNIFORM Y AND PHI
1385 C BINS
1386 C...HEPEVT commonblock.
1387 INTEGER NMXHEP,NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
1388 PARAMETER (NMXHEP=4000)
1389 COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
1390 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
1391 DOUBLE PRECISION PHEP,VHEP
1392 SAVE /HEPEVT/
1393
1394 C...GETJET commonblocks
1395 INTEGER MNCY,MNCPHI,NCY,NCPHI,NJMAX,JETNO,NCJET
1396 DOUBLE PRECISION YCMIN,YCMAX,DELY,DELPHI,ET,STHCAL,CTHCAL,CPHCAL,
1397 & SPHCAL,PCJET,ETJET
1398 PARAMETER (MNCY=200)
1399 PARAMETER (MNCPHI=200)
1400 COMMON/CALORM/DELY,DELPHI,ET(MNCY,MNCPHI),
1401 $CTHCAL(MNCY),STHCAL(MNCY),CPHCAL(MNCPHI),SPHCAL(MNCPHI),
1402 $YCMIN,YCMAX,NCY,NCPHI
1403 PARAMETER (NJMAX=500)
1404 COMMON/GETCOMM/PCJET(4,NJMAX),ETJET(NJMAX),JETNO(MNCY,MNCPHI),
1405 $ NCJET
1406
1407 INTEGER IHEP,ID,IY,IPHI
1408 DOUBLE PRECISION PI,YIP,PSERAP,PHIIP,EIP
1409 PARAMETER (PI=3.141593D0)
1410 C
1411 C FILL CALORIMETER
1412 C
1413 DO 200 IHEP=1,NHEP
1414 IF (ISTHEP(IHEP).EQ.1) THEN
1415 YIP=PSERAP(PHEP(1,IHEP))
1416 IF(YIP.LT.YCMIN.OR.YIP.GT.YCMAX) GOTO 200
1417 ID=ABS(IDHEP(IHEP))
1418 C---EXCLUDE TOP QUARK, LEPTONS, PROMPT PHOTONS
1419 IF ((ID.GE.11.AND.ID.LE.16).OR.ID.EQ.6.OR.ID.EQ.22) GOTO 200
1420 C
1421 PHIIP=ATAN2(PHEP(2,IHEP),PHEP(1,IHEP))
1422 IF(PHIIP.LT.0.) PHIIP=PHIIP+2.*PI
1423 IY=INT((YIP-YCMIN)/DELY)+1
1424 IPHI=INT(PHIIP/DELPHI)+1
1425 EIP=PHEP(4,IHEP)
1426 C WEIGHT BY SIN(THETA)
1427 ET(IY,IPHI)=ET(IY,IPHI)+EIP*STHCAL(IY)
1428 ENDIF
1429 200 CONTINUE
1430 999 END
1431 SUBROUTINE GETJETM(RJET,EJCUT,ETAJCUT)
1432 C
1433 C SIMPLE JET-FINDING ALGORITHM (SIMILAR TO UA1).
1434 C
1435 C FIND HIGHEST REMAINING CELL > ETSTOP AND SUM SURROUNDING
1436 C CELLS WITH--
1437 C DELTA(Y)**2+DELTA(PHI)**2<RJET**2
1438 C ET>ECCUT.
1439 C KEEP JETS WITH ET>EJCUT AND ABS(ETA)<ETAJCUT
1440 C THE UA1 PARAMETERS ARE RJET=1.0 AND EJCUT=5.0
1441 C
1442 IMPLICIT NONE
1443 C...GETJET commonblocks
1444 INTEGER MNCY,MNCPHI,NCY,NCPHI,NJMAX,JETNO,NCJET
1445 DOUBLE PRECISION YCMIN,YCMAX,DELY,DELPHI,ET,STHCAL,CTHCAL,CPHCAL,
1446 & SPHCAL,PCJET,ETJET
1447 PARAMETER (MNCY=200)
1448 PARAMETER (MNCPHI=200)
1449 COMMON/CALORM/DELY,DELPHI,ET(MNCY,MNCPHI),
1450 $CTHCAL(MNCY),STHCAL(MNCY),CPHCAL(MNCPHI),SPHCAL(MNCPHI),
1451 $YCMIN,YCMAX,NCY,NCPHI
1452 PARAMETER (NJMAX=500)
1453 COMMON/GETCOMM/PCJET(4,NJMAX),ETJET(NJMAX),JETNO(MNCY,MNCPHI),
1454 $ NCJET
1455
1456 INTEGER IPHI,IY,J,K,NPHI1,NPHI2,NY1,
1457 & NY2,IPASS,IYMX,IPHIMX,ITLIS,IPHI1,IPHIX,IY1,IYX
1458 DOUBLE PRECISION PI,RJET,
1459 & ETMAX,ETSTOP,RR,ECCUT,PX,EJCUT
1460 PARAMETER (PI=3.141593D0)
1461 DOUBLE PRECISION ETAJCUT,PSERAP
1462 C
1463 C PARAMETERS
1464 DATA ECCUT/0.1D0/
1465 DATA ETSTOP/1.5D0/
1466 DATA ITLIS/6/
1467 C
1468 C INITIALIZE
1469 C
1470 DO 100 IPHI=1,NCPHI
1471 DO 100 IY=1,NCY
1472 100 JETNO(IY,IPHI)=0
1473 DO 110 J=1,NJMAX
1474 ETJET(J)=0.
1475 DO 110 K=1,4
1476 110 PCJET(K,J)=0.
1477 NCJET=0
1478 NPHI1=RJET/DELPHI
1479 NPHI2=2*NPHI1+1
1480 NY1=RJET/DELY
1481 NY2=2*NY1+1
1482 IPASS=0
1483 C
1484 C FIND HIGHEST CELL REMAINING
1485 C
1486 1 ETMAX=0.
1487 DO 200 IPHI=1,NCPHI
1488 DO 210 IY=1,NCY
1489 IF(ET(IY,IPHI).LT.ETMAX) GOTO 210
1490 IF(JETNO(IY,IPHI).NE.0) GOTO 210
1491 ETMAX=ET(IY,IPHI)
1492 IYMX=IY
1493 IPHIMX=IPHI
1494 210 CONTINUE
1495 200 CONTINUE
1496 IF(ETMAX.LT.ETSTOP) RETURN
1497 C
1498 C SUM CELLS
1499 C
1500 IPASS=IPASS+1
1501 IF(IPASS.GT.NCY*NCPHI) THEN
1502 WRITE(ITLIS,8888) IPASS
1503 8888 FORMAT(//' ERROR IN GETJETM...IPASS > ',I6)
1504 RETURN
1505 ENDIF
1506 NCJET=NCJET+1
1507 IF(NCJET.GT.NJMAX) THEN
1508 WRITE(ITLIS,9999) NCJET
1509 9999 FORMAT(//' ERROR IN GETJETM...NCJET > ',I5)
1510 RETURN
1511 ENDIF
1512 DO 300 IPHI1=1,NPHI2
1513 IPHIX=IPHIMX-NPHI1-1+IPHI1
1514 IF(IPHIX.LE.0) IPHIX=IPHIX+NCPHI
1515 IF(IPHIX.GT.NCPHI) IPHIX=IPHIX-NCPHI
1516 DO 310 IY1=1,NY2
1517 IYX=IYMX-NY1-1+IY1
1518 IF(IYX.LE.0) GOTO 310
1519 IF(IYX.GT.NCY) GOTO 310
1520 IF(JETNO(IYX,IPHIX).NE.0) GOTO 310
1521 RR=(DELY*(IY1-NY1-1))**2+(DELPHI*(IPHI1-NPHI1-1))**2
1522 IF(RR.GT.RJET**2) GOTO 310
1523 IF(ET(IYX,IPHIX).LT.ECCUT) GOTO 310
1524 PX=ET(IYX,IPHIX)/STHCAL(IYX)
1525 C ADD CELL TO JET
1526 PCJET(1,NCJET)=PCJET(1,NCJET)+PX*STHCAL(IYX)*CPHCAL(IPHIX)
1527 PCJET(2,NCJET)=PCJET(2,NCJET)+PX*STHCAL(IYX)*SPHCAL(IPHIX)
1528 PCJET(3,NCJET)=PCJET(3,NCJET)+PX*CTHCAL(IYX)
1529 PCJET(4,NCJET)=PCJET(4,NCJET)+PX
1530 ETJET(NCJET)=ETJET(NCJET)+ET(IYX,IPHIX)
1531 JETNO(IYX,IPHIX)=NCJET
1532 310 CONTINUE
1533 300 CONTINUE
1534 C
1535 C DISCARD JET IF ET < EJCUT.
1536 C
1537 IF(ETJET(NCJET).GT.EJCUT.AND.ABS(PSERAP(PCJET(1,NCJET))).LT
1538 $ .ETAJCUT) GOTO 1
1539 ETJET(NCJET)=0.
1540 DO 400 K=1,4
1541 400 PCJET(K,NCJET)=0.
1542 NCJET=NCJET-1
1543 GOTO 1
1544 END
1545 C-----------------------------------------------------------------------
1546 SUBROUTINE CALDELM(ISTLO,ISTHI)
1547 C LABEL ALL PARTICLES WITH STATUS BETWEEN ISTLO AND ISTHI (UNTIL A
1548 C PARTICLE WITH STATUS ISTOP IS FOUND) AS FINAL-STATE, CALL CALSIMM
1549 C AND THEN PUT LABELS BACK TO NORMAL
1550 C-----------------------------------------------------------------------
1551 IMPLICIT NONE
1552 INTEGER MAXNUP
1553 PARAMETER(MAXNUP=500)
1554 C...HEPEVT commonblock.
1555 INTEGER NMXHEP,NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
1556 PARAMETER (NMXHEP=4000)
1557 COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
1558 &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
1559 DOUBLE PRECISION PHEP,VHEP
1560 SAVE /HEPEVT/
1561 INTEGER ISTOLD(NMXHEP),IHEP,IST,ISTLO,ISTHI,ISTOP,IMO,icount
1562
1563
1564 CALL CALSIMM
1565 END
1566