From 48f2b607f50c0855be2e4a531e274590ddb0817e Mon Sep 17 00:00:00 2001 From: hristov Date: Mon, 29 Jan 2007 21:54:37 +0000 Subject: [PATCH] Compiling lhaglue.F in libpythia6.so to fix the initialization of the common blocks in case the libraries are loaded in Root --- LHAPDF/liblhapdf.pkg | 32 +- PYTHIA6/lhaglue.F | 1319 ++++++++++++++++++++++++++++++++++++++++ PYTHIA6/libpythia6.pkg | 3 +- 3 files changed, 1337 insertions(+), 17 deletions(-) create mode 100644 PYTHIA6/lhaglue.F diff --git a/LHAPDF/liblhapdf.pkg b/LHAPDF/liblhapdf.pkg index 75f94e072d8..44d43474743 100644 --- a/LHAPDF/liblhapdf.pkg +++ b/LHAPDF/liblhapdf.pkg @@ -52,28 +52,28 @@ lhapdf5.2.2/commons.f EXPORT:=AliStructFuncType.h -ifeq (,$(findstring macosx,$(ALICE_TARGET))) +#ifeq (,$(findstring macosx,$(ALICE_TARGET))) -FSRCS += lhapdf5.2.2/lhaglue.f +# FSRCS += lhapdf5.2.2/lhaglue.f -else +#else -TCSRCS=ctmp/lhapdf5.2.2/lhaglue.c +#TCSRCS=ctmp/lhapdf5.2.2/lhaglue.c -CSRCS+=$(TCSRCS) +#CSRCS+=$(TCSRCS) -.SECONDARY: $(TCSRCS) +#.SECONDARY: $(TCSRCS) -PACKCFLAGS:=$(CFLAGS) -w +#PACKCFLAGS:=$(CFLAGS) -w -LHAPDF/ctmp/%.c: LHAPDF/%.f - [ -d $(dir $@) ] || mkdir -p $(dir $@) -ifeq (macosx,$(ALICE_TARGET)) - $(F77) -E $(lhapdfINC) $(lhapdfFFLAGS) $< | f2c -E | sed -e 's/___/__/g' > $@ -endif -ifeq (macosxgcc4,$(ALICE_TARGET)) - $(F77) -E $(lhapdfINC) $(lhapdfFFLAGS) $< | f2c -E | sed -e 's/\___/__/g' > $@ -endif +#LHAPDF/ctmp/%.c: LHAPDF/%.f +# [ -d $(dir $@) ] || mkdir -p $(dir $@) +#ifeq (macosx,$(ALICE_TARGET)) +# $(F77) -E $(lhapdfINC) $(lhapdfFFLAGS) $< | f2c -E | sed -e 's/___/__/g' > $@ +#endif +#ifeq (macosxgcc4,$(ALICE_TARGET)) +# $(F77) -E $(lhapdfINC) $(lhapdfFFLAGS) $< | f2c -E | sed -e 's/\___/__/g' > $@ +#endif -endif +#endif diff --git a/PYTHIA6/lhaglue.F b/PYTHIA6/lhaglue.F new file mode 100644 index 00000000000..3231a3bd697 --- /dev/null +++ b/PYTHIA6/lhaglue.F @@ -0,0 +1,1319 @@ +C********************************************************************* + +C... LHAGLUE Interface to LHAPDF library of modern parton +C... density functions (PDF) with uncertainties +C... +C...Authors for v4: Dimitri Bourilkov, Craig Group, Mike Whalley +C... +C...Authors for v3: Dimitri Bourilkov, Craig Group, Mike Whalley +C... +C...Author for v1 and v2: Dimitri Bourilkov bourilkov@mailaps.org +C... University of Florida +C... +C...HERWIG interface by Dimitri Bourilkov and Craig Group +C... +C...New numbering scheme and upgrade for LHAPDF v2.1 +C...by Dimitri Bourilkov and Mike Whalley +C... +C...For more information, or when you cite this interface, currently +C...the official reference is: +C...D.Bourilkov, "Study of Parton Density Function Uncertainties with +C...LHAPDF and PYTHIA at LHC", hep-ph/0305126. +C... +C...The official LHAPDF page is: +C... +C... http://durpdg.dur.ac.uk/lhapdf/index.html +C... +C...The interface contains four subroutines (similar to PDFLIB). +C...It can be used seamlessly by Monte Carlo generators +C...interfaced to PDFLIB or in stand-alone mode. +C... +C... For initialization (called once) +C... +C... PDFSET(PARM,VALUE) +C... +C... For the proton/pion structure functions +C... +C... STRUCTM(X,Q,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU) +C... +C... For the photon structure functions +C... +C... STRUCTP(X,Q2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU) +C... +C... For statistics ON structure functions (under/over-flows) +C... +C... PDFSTA +C... +C...This interface can be invoked in 3 ways depending +C...on the value of PARM(1) provided by the user when +C...calling PDFSET(PARM,VALUE): +C... +C... For PYTHIA: PARM(1).EQ.'NPTYPE' +C... (this is set automatically by PYTHIA) +C... +C... For HERWIG: PARM(1).EQ.'HWLHAPDF' +C... (set by the USER e.g. in the main program like this: +C... AUTPDF(1) = 'HWLHAPDF' +C... AUTPDF(2) = 'HWLHAPDF' ) +C... +C... For Stand-alone: PARM(1).EQ.'DEFAULT' +C... (can be used for PDF studies or when interfacing +C... new generators) +C... +C...The LHAPDF set/member is selected depending on the value of: +C... +C... PYTHIA: ABS(MSTP(51)) - proton +C... ABS(MSTP(53)) - pion +C... ABS(MSTP(55)) - photon +C... +C... HERWIG: ABS(INT(VALUE(1))) +C... +C... STAND-ALONE: ABS(INT(VALUE(1))) +C... +C... +C... CONTROL switches: +C... ================== +C... +C... THE LOCATION OF THE LHAPDF LIBRARY HAS TO BE SPECIFIED +C... AS DESCRIBED BELOW (the rest is optional) +C... +C... if the user does nothing, sensible defaults +C... are active; to change the behaviour, the corresponding +C... values of LHAPARM() should be set to the values given below +C... +C... Location of the LHAPDF library of PDFs (pathname): +C... uses common block /LHAPDFC/ +C... +C... If the user does nothing => default = subdir PDFsets of the +C... current directory (can be real subdir +C... OR a soft link to the real location) +C... If the user sets LHAPATH => supplied by the USER who defines the +C... path in common block COMMON/LHAPDFC/LHAPATH +C... BEFORE calling PDFSET +C... +C... Other controls: +C... =============== +C... use common block /LHACONTROL/ +C... +C... Collect statistics on under/over-flow requests for PDFs +C... outside their validity ranges in X and Q**2 +C... (call PDFSTA at end of run to print it out) +C... +C... LHAPARM(16).EQ.'NOSTAT' => No statistics (faster) +C... LHAPARM(16).NE.'NOSTAT' => Default: collect statistics +C... +C... Option to use the values for the strong coupling alpha_s +C... as computed in LHAPDF in the MC generator +C... (to ensure uniformity between the MC generator and the PDF set) +C... WARNING: implemented ONLY for PYTHIA in LHAPDFv4 +C... +C... LHAPARM(17).EQ.'LHAPDF' => Use alpha_s from LHAPDF +C... LHAPARM(17).NE.'LHAPDF' => Default (same as LHAPDF v1/v3) +C... +C... Extrapolation of PDFs outside LHAPDF validity range given by +C... [Xmin,Xmax] and [Q2min,Q2max]; DEFAULT => PDFs "frozen" at the +C... boundaries +C... +C... LHAPARM(18).EQ.'EXTRAPOLATE' => Extrapolate PDFs on OWN RISK +C... WARNING: Crazy values can be returned +C... +C... Printout of initialization information in PDFSET (by default) +C... +C... LHAPARM(19).EQ.'SILENT' => No printout (silent mode) +C... LHAPARM(19).EQ.'LOWKEY' => Print 5 times (almost silent mode) +C... +C... +C...v5.0 06-Oct-2005 Major change to allow multiset-initializations +C...v4.0 28-Apr-2005 PDFSTA routine; option to use Alfa_s from LHAPDF +C...v4.0 21-Mar-2005 Photon/pion/new p PDFs, updated for LHAPDF v4 +C...v3.1 26-Apr-2004 New numbering scheme, updated for LHAPDF v2/v3 +C...v3.0 23-Jan-2004 HERWIG interface added +C...v2.0 20-Sep-2003 PDFLIB style adopted +C...v1.0 05-Mar-2003 First working version from PYTHIA to LHAPDF v1 +C... +C...interface to LHAPDF library + +C********************************************************************* + +C...PDFSET +C...Initialization for use of parton distributions +C... according to the LHAPDF interface. +C... +C...v4.0 28-Apr-2005 Option to use Alfa_s from LHAPDF +C...v4.0 21-Mar-2005 Photon/pion/new p PDFs, updated for LHAPDF v4 +C...v3.1 26-Apr-2004 New numbering scheme +C...v3.0 23-Jan-2004 HERWIG interface added +C... +C...interface to LHAPDF library + + SUBROUTINE PDFSET(PARM,VALUE) +C...Double precision and integer declarations. + IMPLICIT DOUBLE PRECISION(A-H, O-Z) + IMPLICIT INTEGER(I-N) +c...additions for multiset use + integer noemax,nopmax,npfmax,nofmax,linemax,nmxset + parameter (noemax=1000,nopmax=40,npfmax=10,nofmax=10,linemax=20) +c nmxset is the max number of sets that can be initialised at one time ---- added V5 + parameter (nmxset=3) + + character*232 lhapath + character*272 lhaname,lhanames(nmxset) +c character*172 LHANAMES(nmxset) + integer LHAMEMBERS(nmxset),LHANUMBERS(nmxset) + common/LHASETS/LHANAMES,LHANUMBERS,LHAMEMBERS,nsets + real*8 xxmin(nmxset),xxmax(nmxset),qq2min(nmxset),qq2max(nmxset) + save xxmin,xxmax,qq2min,qq2max +C...Commonblocks. + COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) + SAVE /PYDAT1/ + COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200) + SAVE /PYPARS/ +c... following 2 for earlier Pythia versions + COMMON/LUDAT1/MSTU5(200),PARU5(200),MSTJ5(200),PARJ5(200) + SAVE /LUDAT1/ +C...Interface to LHAPDFLIB. +c CHARACTER*172 LHANAME + INTEGER LHASET, LHAMEMB + COMMON/LHAPDF/LHANAME, LHASET, LHAMEMB + SAVE /LHAPDF/ + DOUBLE PRECISION QCDLHA4, QCDLHA5 + INTEGER NFLLHA + COMMON/LHAPDFR/QCDLHA4, QCDLHA5, NFLLHA + SAVE /LHAPDFR/ +c CHARACTER*132 LHAPATH + COMMON/LHAPDFC/LHAPATH + SAVE /LHAPDFC/ + CHARACTER*20 LHAPARM(20) + DOUBLE PRECISION LHAVALUE(20) + COMMON/LHACONTROL/LHAPARM,LHAVALUE + SAVE/LHACONTROL/ + INTEGER LHAEXTRP + COMMON/LHAPDFE/LHAEXTRP + SAVE /LHAPDFE/ + INTEGER LHASILENT + COMMON/LHASILENT/LHASILENT + SAVE /LHASILENT/ + DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + SAVE/LHAGLSTA/ +C...Interface to PDFLIB. + COMMON/W50511/ NPTYPEPDFL,NGROUPPDFL,NSETPDFL,MODEPDFL, + > NFLPDFL,LOPDFL,TMASPDFL + SAVE /W50511/ + DOUBLE PRECISION TMASPDFL +C...Interface to PDFLIB. + COMMON/W50512/QCDL4,QCDL5 + SAVE /W50512/ + DOUBLE PRECISION QCDL4,QCDL5 +C...Interface to PDFLIB. + COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX + SAVE /W50513/ + DOUBLE PRECISION XMIN,XMAX,Q2MIN,Q2MAX +C...Local arrays and character variables (NOT USED here DB) + CHARACTER*20 PARM(20) + DOUBLE PRECISION VALUE(20) + INTEGER LHAPATHLEN + INTEGER LHAINPUT + INTEGER LHASELECT + INTEGER LHAPRINT + INTEGER LHAONCE + INTEGER LHAFIVE + SAVE LHAONCE + SAVE LHAFIVE + logical first + save first + + INTEGER LNROOT + CHARACTER*1000 CHROOT + CHROOT=' ' + DATA LHAONCE/0/ + DATA LHAFIVE/0/ + data first/.TRUE./ + + if(first .AND. (LHAPARM(20).NE.'LHAPATH')) then +c...overide the default PDFsets path +c ... check first if the environmental variable LHAPATH is set + call getenv('LHAPATH',lhapath) + if(lhapath.eq.'') then +C The environment variable LHAPATH is not set. +C Take the data from $ALICE_ROOT/LHAPDF/PDFsets + CALL GETENV('ALICE_ROOT',CHROOT) + LNROOT = LNBLNK(CHROOT) + IF(LNROOT.LE.0) THEN + LHAPATH='PDFsets' ! Default value + ELSE + LHAPATH=CHROOT(1:LNROOT)//'/LHAPDF/PDFsets' + ENDIF + endif + first=.FALSE. + endif +c +* +C...Init + LHAEXTRP = 0 + IF(LHAPARM(18).EQ.'EXTRAPOLATE') + > THEN ! Extrapolate PDFs on own risk + LHAEXTRP = 1 + ENDIF + LHASILENT = 0 + IF(LHAPARM(19).EQ.'SILENT') THEN ! No printout (silent MODE) + LHASILENT = 1 + ELSEIF(LHAPARM(19).EQ.'LOWKEY') THEN ! Print 5 times (lowkey MODE) + IF(LHAFIVE .LT. 6) THEN + LHAFIVE = LHAFIVE + 1 + ELSE + LHASILENT = 1 + ENDIF + ENDIF + IF(PARM(1).EQ.'NPTYPE') THEN ! PYTHIA + if(MSTP(181).ge.6) then + LHAPRINT = MSTU(11) + else + LHAPRINT = MSTU5(11) + endif + IF(VALUE(1) .EQ. 1) THEN ! nucleon + LHAINPUT = ABS(MSTP(51)) + ELSEIF(VALUE(1) .EQ. 2) THEN ! pion + LHAINPUT = ABS(MSTP(53)) + ELSEIF(VALUE(1) .EQ. 3) THEN ! photon + LHAINPUT = ABS(MSTP(55)) + ENDIF + IF(LHASILENT .NE. 1) + > PRINT *,'==== PYTHIA WILL USE LHAPDF ====' + ELSEIF(PARM(1).EQ.'HWLHAPDF') THEN ! HERWIG + LHAINPUT = ABS(INT(VALUE(1))) + IF(LHAONCE.EQ.LHAINPUT) RETURN + IF(LHASILENT .NE. 1) + > PRINT *,'==== HERWIG WILL USE LHAPDF ====' + LHAPRINT = 6 + LHAONCE = LHAINPUT + ELSEIF(PARM(1).EQ.'DEFAULT') THEN ! Stand-alone + LHAINPUT = ABS(INT(VALUE(1))) + IF(LHAONCE.EQ.LHAINPUT) RETURN + IF(LHASILENT .NE. 1) + > PRINT *,'==== STAND-ALONE LHAGLUE MODE TO USE LHAPDF ====' + LHAPRINT = 6 + LHAONCE = LHAINPUT + ELSE + PRINT *,'== UNKNOWN LHAPDF INTERFACE CALL! STOP EXECUTION! ==' + STOP + ENDIF +C...Initialize parton distributions: LHAPDFLIB. + LHAPATHLEN=INDEX(LHAPATH,' ')-1 + LHASET = LHAINPUT + XMIN = 1.0D-6 ! X_min for current PDF set + XMAX = 1.0D0 ! X_max for current PDF set + Q2MIN = 1.0D0**2 ! Q**2_min scale for current PDF set [GeV] + Q2MAX = 1.0D5**2 ! Q**2_max scale for current PDF set [GeV] +C... +C...Protons +C... +C...CTEQ Family + IF((LHAINPUT .GE. 10000) .AND. (LHAINPUT .LE. 19999)) THEN + Q2MAX = 1.0D08 + IF((LHAINPUT .GE. 10000) .AND. (LHAINPUT .LE. 10040)) THEN + LHASET = 10000 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6.LHpdf' + Q2MIN = 1.69D0 + ELSEIF((LHAINPUT .GE. 10041) .AND. (LHAINPUT .LE. 10041)) THEN + LHASET = 10041 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6l.LHpdf' + Q2MIN = 1.69D0 + ELSEIF((LHAINPUT .GE. 10042) .AND. (LHAINPUT .LE. 10042)) THEN + LHASET = 10042 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6ll.LHpdf' + Q2MIN = 1.69D0 + ELSEIF((LHAINPUT .GE. 10050) .AND. (LHAINPUT .LE. 10090)) THEN + LHASET = 10050 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6mE.LHgrid' + Q2MIN = 1.69D0 + ELSEIF((LHAINPUT .GE. 10100) .AND. (LHAINPUT .LE. 10140)) THEN + LHASET = 10100 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq61.LHpdf' + Q2MIN = 1.69D0 + ELSEIF((LHAINPUT .GE. 10150) .AND. (LHAINPUT .LE. 10190)) THEN + LHASET = 10150 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq61.LHgrid' + Q2MIN = 1.69D0 + ELSEIF((LHAINPUT .GE. 10250) .AND. (LHAINPUT .LE. 10269)) THEN + LHASET = 10250 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6AB.LHgrid' + Q2MIN = 1.69D0 + ELSEIF((LHAINPUT .GE. 19050) .AND. (LHAINPUT .LE. 19050)) THEN + LHASET = 19050 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5m.LHgrid' + XMIN=1.0D-5 + ELSEIF((LHAINPUT .GE. 19051) .AND. (LHAINPUT .LE. 19051)) THEN + LHASET = 19051 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5m1.LHgrid' + XMIN=1.0D-5 + ELSEIF((LHAINPUT .GE. 19060) .AND. (LHAINPUT .LE. 19060)) THEN + LHASET = 19060 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5d.LHgrid' + XMIN=1.0D-5 + ELSEIF((LHAINPUT .GE. 19070) .AND. (LHAINPUT .LE. 19070)) THEN + LHASET = 19070 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5l.LHgrid' + XMIN=1.0D-5 + ELSEIF((LHAINPUT .GE. 19150) .AND. (LHAINPUT .LE. 19150)) THEN + LHASET = 19150 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq4m.LHgrid' + Q2MIN = 2.56D0 + XMIN=1.0D-5 + ELSEIF((LHAINPUT .GE. 19160) .AND. (LHAINPUT .LE. 19160)) THEN + LHASET = 19160 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq4d.LHgrid' + Q2MIN = 2.56D0 + XMIN=1.0D-5 + ELSEIF((LHAINPUT .GE. 19170) .AND. (LHAINPUT .LE. 19170)) THEN + LHASET = 19170 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq4l.LHgrid' + Q2MIN = 2.56D0 + XMIN=1.0D-5 + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...MRST Family + ELSEIF((LHAINPUT .GE. 20000) .AND. (LHAINPUT .LE. 29999)) THEN + Q2MIN = 1.25D0 + Q2MAX = 1.0D07 + XMIN = 1.0D-5 + IF((LHAINPUT .GE. 20000) .AND. (LHAINPUT .LE. 20004)) THEN + LHASET = 20000 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001nlo.LHpdf' + ELSEIF((LHAINPUT .GE. 20050) .AND. (LHAINPUT .LE. 20054)) THEN + LHASET = 20050 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001nlo.LHgrid' + ELSEIF((LHAINPUT .GE. 20060) .AND. (LHAINPUT .LE. 20061)) THEN + LHASET = 20060 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001lo.LHgrid' + ELSEIF((LHAINPUT .GE. 20070) .AND. (LHAINPUT .LE. 20074)) THEN + LHASET = 20070 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001nnlo.LHgrid' + ELSEIF((LHAINPUT .GE. 20100) .AND. (LHAINPUT .LE. 20130)) THEN + LHASET = 20100 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001E.LHpdf' + ELSEIF((LHAINPUT .GE. 20150) .AND. (LHAINPUT .LE. 20180)) THEN + LHASET = 20150 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001E.LHgrid' + ELSEIF((LHAINPUT .GE. 20200) .AND. (LHAINPUT .LE. 20201)) THEN + LHASET = 20200 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2002nlo.LHpdf' + ELSEIF((LHAINPUT .GE. 20250) .AND. (LHAINPUT .LE. 20251)) THEN + LHASET = 20250 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2002nlo.LHgrid' + ELSEIF((LHAINPUT .GE. 20270) .AND. (LHAINPUT .LE. 20271)) THEN + LHASET = 20270 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2002nnlo.LHgrid' + ELSEIF((LHAINPUT .GE. 20300) .AND. (LHAINPUT .LE. 20301)) THEN + LHASET = 20300 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2003cnlo.LHpdf' + Q2MIN = 10.0D0 + XMIN = 1.0D-3 + ELSEIF((LHAINPUT .GE. 20350) .AND. (LHAINPUT .LE. 20351)) THEN + LHASET = 20350 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2003cnlo.LHgrid' + Q2MIN = 10.0D0 + XMIN = 1.0D-3 + ELSEIF((LHAINPUT .GE. 20370) .AND. (LHAINPUT .LE. 20371)) THEN + LHASET = 20370 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2003cnnlo.LHgrid' + Q2MIN = 7.0D0 + XMIN = 1.0D-3 + ELSEIF((LHAINPUT .GE. 20400) .AND. (LHAINPUT .LE. 20401)) THEN + LHASET = 20400 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004nlo.LHpdf' + ELSEIF((LHAINPUT .GE. 20406) .AND. (LHAINPUT .LE. 20407)) THEN + LHASET = 20406 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF3nlo.LHpdf' + ELSEIF((LHAINPUT .GE. 20408) .AND. (LHAINPUT .LE. 20409)) THEN + LHASET = 20408 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF4nlo.LHpdf' + ELSEIF((LHAINPUT .GE. 20450) .AND. (LHAINPUT .LE. 20451)) THEN + LHASET = 20450 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004nlo.LHgrid' + ELSEIF((LHAINPUT .GE. 20452) .AND. (LHAINPUT .LE. 20453)) THEN + LHASET = 20452 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF3lo.LHgrid' + ELSEIF((LHAINPUT .GE. 20454) .AND. (LHAINPUT .LE. 20455)) THEN + LHASET = 20454 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF4lo.LHgrid' + ELSEIF((LHAINPUT .GE. 20456) .AND. (LHAINPUT .LE. 20457)) THEN + LHASET = 20456 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF3nlo.LHgrid' + ELSEIF((LHAINPUT .GE. 20458) .AND. (LHAINPUT .LE. 20459)) THEN + LHASET = 20458 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF4nlo.LHgrid' + ELSEIF((LHAINPUT .GE. 20470) .AND. (LHAINPUT .LE. 20471)) THEN + LHASET = 20470 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004nnlo.LHgrid' + ELSEIF((LHAINPUT .GE. 29000) .AND. (LHAINPUT .LE. 29003)) THEN + LHASET = 29000 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98.LHpdf' + ELSEIF((LHAINPUT .GE. 29040) .AND. (LHAINPUT .LE. 29045)) THEN + LHASET = 29040 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98lo.LHgrid' + ELSEIF((LHAINPUT .GE. 29050) .AND. (LHAINPUT .LE. 29055)) THEN + LHASET = 29050 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98nlo.LHgrid' + ELSEIF((LHAINPUT .GE. 29060) .AND. (LHAINPUT .LE. 29065)) THEN + LHASET = 29060 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98dis.LHgrid' + ELSEIF((LHAINPUT .GE. 29070) .AND. (LHAINPUT .LE. 29071)) THEN + LHASET = 29070 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98ht.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...Fermi Family + ELSEIF((LHAINPUT .GE. 30000) .AND. (LHAINPUT .LE. 39999)) THEN + IF((LHAINPUT .GE. 30100) .AND. (LHAINPUT .LE. 30200)) THEN + LHASET = 30100 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/Fermi2002_100.LHpdf' + ELSEIF((LHAINPUT .GE. 31000) .AND. (LHAINPUT .LE. 32000)) THEN + LHASET = 31000 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/Fermi2002_1000.LHpdf' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...Alekhin Family + ELSEIF((LHAINPUT .GE. 40000) .AND. (LHAINPUT .LE. 49999)) THEN + IF((LHAINPUT .GE. 40100) .AND. (LHAINPUT .LE. 40200)) THEN + LHASET = 40100 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/Alekhin_100.LHpdf' + ELSEIF((LHAINPUT .GE. 41000) .AND. (LHAINPUT .LE. 41999)) THEN + LHASET = 41000 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/Alekhin_1000.LHpdf' + ELSEIF((LHAINPUT .GE. 40350) .AND. (LHAINPUT .LE. 40367)) THEN + LHASET = 40350 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/a02m_lo.LHgrid' + XMIN = 1.0D-7 + Q2MIN = 0.8D0 + Q2MAX = 2.0D08 + ELSEIF((LHAINPUT .GE. 40450) .AND. (LHAINPUT .LE. 40467)) THEN + LHASET = 40450 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/a02m_nlo.LHgrid' + XMIN = 1.0D-7 + Q2MIN = 0.8D0 + Q2MAX = 2.0D08 + ELSEIF((LHAINPUT .GE. 40550) .AND. (LHAINPUT .LE. 40567)) THEN + LHASET = 40550 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/a02m_nnlo.LHgrid' + XMIN = 1.0D-7 + Q2MIN = 0.8D0 + Q2MAX = 2.0D08 + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...Botje Family + ELSEIF((LHAINPUT .GE. 50000) .AND. (LHAINPUT .LE. 59999)) THEN + IF((LHAINPUT .GE. 50100) .AND. (LHAINPUT .LE. 50200)) THEN + LHASET = 50100 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/Botje_100.LHpdf' + ELSEIF((LHAINPUT .GE. 51000) .AND. (LHAINPUT .LE. 51999)) THEN + LHASET = 51000 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/Botje_1000.LHpdf' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...ZEUS Family + ELSEIF((LHAINPUT .GE. 60000) .AND. (LHAINPUT .LE. 69999)) THEN + Q2MIN = 0.3D0 + Q2MAX = 2.0D05 + IF((LHAINPUT .GE. 60000) .AND. (LHAINPUT .LE. 60022)) THEN + LHASET = 60000 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2002_TR.LHpdf' + ELSEIF((LHAINPUT .GE. 60100) .AND. (LHAINPUT .LE. 60122)) THEN + LHASET = 60100 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2002_ZM.LHpdf' + ELSEIF((LHAINPUT .GE. 60200) .AND. (LHAINPUT .LE. 60222)) THEN + LHASET = 60200 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2002_FF.LHpdf' + ELSEIF((LHAINPUT .GE. 60300) .AND. (LHAINPUT .LE. 60322)) THEN + LHASET = 60300 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2005_ZJ.LHpdf' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...H1 Family + ELSEIF((LHAINPUT .GE. 70000) .AND. (LHAINPUT .LE. 79999)) THEN + Q2MIN = 1.5D0 + Q2MAX = 3.5D04 + XMIN = 5.7D-5 + IF((LHAINPUT .GE. 70050) .AND. (LHAINPUT .LE. 70050)) THEN + LHASET = 70050 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000ms.LHgrid' + ELSEIF((LHAINPUT .GE. 70051) .AND. (LHAINPUT .LE. 70070)) THEN + LHASET = 70050 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000msE.LHgrid' + ELSEIF((LHAINPUT .GE. 70150) .AND. (LHAINPUT .LE. 70150)) THEN + LHASET = 70150 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000dis.LHgrid' + ELSEIF((LHAINPUT .GE. 70151) .AND. (LHAINPUT .LE. 70170)) THEN + LHASET = 70150 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000disE.LHgrid' + ELSEIF((LHAINPUT .GE. 70250) .AND. (LHAINPUT .LE. 70250)) THEN + LHASET = 70250 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000lo.LHgrid' + ELSEIF((LHAINPUT .GE. 70251) .AND. (LHAINPUT .LE. 70270)) THEN + LHASET = 70250 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000loE.LHgrid' +c tempoararily removed on returning to original H!2000 files +c ELSEIF((LHAINPUT .GE. 70350) .AND. (LHAINPUT .LE. 70350)) THEN +c LHASET = 70350 +c LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000lo2.LHgrid' +c ELSEIF((LHAINPUT .GE. 70351) .AND. (LHAINPUT .LE. 70370)) THEN +c LHASET = 70350 +c LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000lo2E.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...GRV Family + ELSEIF((LHAINPUT .GE. 80000) .AND. (LHAINPUT .LE. 89999)) THEN + Q2MIN = 0.8D0 + Q2MAX = 2.0D06 + XMIN = 1.0D-9 + IF((LHAINPUT .GE. 80050) .AND. (LHAINPUT .LE. 80051)) THEN + LHASET = 80050 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRV98nlo.LHgrid' + ELSEIF((LHAINPUT .GE. 80060) .AND. (LHAINPUT .LE. 80060)) THEN + LHASET = 80060 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRV98lo.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C... +C...Pions +C... +C...OW-PI Family + ELSEIF((LHAINPUT .GE. 210) .AND. (LHAINPUT .LE. 212)) THEN + Q2MIN = 4.0D0 + Q2MAX = 2.0D03 + XMIN = 5.0D-03 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 210) .AND. (LHAINPUT .LE. 212)) THEN + LHASET = 210 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/OWPI.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...SMRS-PI Family + ELSEIF((LHAINPUT .GE. 230) .AND. (LHAINPUT .LE. 233)) THEN + Q2MIN = 5.0D0 + Q2MAX = 1.31D06 + XMIN = 1.0D-05 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 230) .AND. (LHAINPUT .LE. 233)) THEN + LHASET = 230 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/SMRSPI.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...GRV-PI Family + ELSEIF((LHAINPUT .GE. 250) .AND. (LHAINPUT .LE. 252)) THEN + Q2MAX = 1.00D06 + XMIN = 1.0D-05 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 250) .AND. (LHAINPUT .LE. 251)) THEN + Q2MIN = 3.0D-1 + LHASET = 250 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVPI1.LHgrid' + ELSEIF((LHAINPUT .GE. 252) .AND. (LHAINPUT .LE. 252)) THEN + Q2MIN = 2.5D-1 + LHASET = 252 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVPI0.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...ABFKW-PI Family + ELSEIF((LHAINPUT .GE. 260) .AND. (LHAINPUT .LE. 263)) THEN + Q2MIN = 2.0D0 + Q2MAX = 1.00D08 + XMIN = 1.0D-03 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 260) .AND. (LHAINPUT .LE. 263)) THEN + LHASET = 260 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/ABFKWPI.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C... +C...Photons +C... +C...DO-G Family + ELSEIF((LHAINPUT .GE. 310) .AND. (LHAINPUT .LE. 312)) THEN + Q2MIN = 1.0D01 + Q2MAX = 1.00D04 + XMIN = 1.0D-05 + XMAX = 0.9D0 + IF((LHAINPUT .GE. 310) .AND. (LHAINPUT .LE. 311)) THEN + LHASET = 310 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/DOG0.LHgrid' + ELSEIF((LHAINPUT .GE. 312) .AND. (LHAINPUT .LE. 312)) THEN + LHASET = 312 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/DOG1.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...DG-G Family + ELSEIF((LHAINPUT .GE. 320) .AND. (LHAINPUT .LE. 324)) THEN + XMIN = 1.0D-05 + XMAX = 0.9998D0 + LHASET = 320 + IF((LHAINPUT .GE. 320) .AND. (LHAINPUT .LE. 321)) THEN + Q2MIN = 1.0D0 + Q2MAX = 1.0D04 +c LHASET = 320 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid' + ELSEIF((LHAINPUT .GE. 322) .AND. (LHAINPUT .LE. 322)) THEN + Q2MIN = 1.0D0 + Q2MAX = 5.0D01 +c LHASET = 322 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid' + ELSEIF((LHAINPUT .GE. 323) .AND. (LHAINPUT .LE. 323)) THEN + Q2MIN = 2.0D1 + Q2MAX = 5.0D02 +c LHASET = 323 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid' + ELSEIF((LHAINPUT .GE. 324) .AND. (LHAINPUT .LE. 324)) THEN + Q2MIN = 2.0D2 + Q2MAX = 1.0D04 +c LHASET = 324 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...LAC/GAL-G Family + ELSEIF((LHAINPUT .GE. 330) .AND. (LHAINPUT .LE. 334)) THEN + Q2MIN = 4.0D00 + Q2MAX = 1.0D05 + XMIN = 1.0D-04 + XMAX = 0.9998D0 + LHASET = 330 + IF((LHAINPUT .GE. 330) .AND. (LHAINPUT .LE. 332)) THEN +c LHASET = 330 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/LACG.LHgrid' + ELSEIF((LHAINPUT .GE. 333) .AND. (LHAINPUT .LE. 333)) THEN + Q2MIN = 1.0D00 +c LHASET = 333 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/LACG.LHgrid' + ELSEIF((LHAINPUT .GE. 334) .AND. (LHAINPUT .LE. 334)) THEN + Q2MIN = 4.0D00 +c LHASET = 334 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/LACG.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...GSG/GSG96-G Family + ELSEIF((LHAINPUT .GE. 340) .AND. (LHAINPUT .LE. 345)) THEN + Q2MIN = 5.3D00 + Q2MAX = 1.0D08 + XMIN = 5.0D-04 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 340) .AND. (LHAINPUT .LE. 341)) THEN + LHASET = 340 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG1.LHgrid' + ELSEIF((LHAINPUT .GE. 342) .AND. (LHAINPUT .LE. 343)) THEN + LHASET = 342 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG0.LHgrid' + ELSEIF((LHAINPUT .GE. 344) .AND. (LHAINPUT .LE. 344)) THEN + LHASET = 344 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG961.LHgrid' + ELSEIF((LHAINPUT .GE. 345) .AND. (LHAINPUT .LE. 345)) THEN + LHASET = 345 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG960.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...GRV-G Family + ELSEIF((LHAINPUT .GE. 350) .AND. (LHAINPUT .LE. 354)) THEN + Q2MIN = 3.0D-1 + Q2MAX = 1.0D06 + XMIN = 1.0D-05 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 350) .AND. (LHAINPUT .LE. 352)) THEN + LHASET = 350 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVG1.LHgrid' + ELSEIF((LHAINPUT .GE. 353) .AND. (LHAINPUT .LE. 353)) THEN + Q2MIN = 2.5D-1 + LHASET = 353 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVG0.LHgrid' + ELSEIF((LHAINPUT .GE. 354) .AND. (LHAINPUT .LE. 354)) THEN + Q2MIN = 6.0D-1 + Q2MAX = 5.0D04 + LHASET = 354 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVG0.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...ACFGP-G Family + ELSEIF((LHAINPUT .GE. 360) .AND. (LHAINPUT .LE. 363)) THEN + Q2MIN = 2.0D00 + Q2MAX = 5.5D05 + XMIN = 1.37D-03 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 360) .AND. (LHAINPUT .LE. 363)) THEN + LHASET = 360 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/ACFGPG.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...WHIT-G Family + ELSEIF((LHAINPUT .GE. 380) .AND. (LHAINPUT .LE. 386)) THEN + Q2MIN = 4.0D00 + Q2MAX = 2.5D03 + XMIN = 1.0D-03 + XMAX = 0.9998D0 + IF((LHAINPUT .GE. 380) .AND. (LHAINPUT .LE. 386)) THEN + LHASET = 380 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/WHITG.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...SAS-G Family + ELSEIF((LHAINPUT .GE. 390) .AND. (LHAINPUT .LE. 398)) THEN + Q2MAX = 5.0D04 + XMIN = 1.0D-05 + XMAX = 0.9998D0 + LHASET = 390 + IF((LHAINPUT .GE. 390) .AND. (LHAINPUT .LE. 392)) THEN + Q2MIN = 3.6D-1 +c LHASET = 390 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid' + ELSEIF((LHAINPUT .GE. 393) .AND. (LHAINPUT .LE. 394)) THEN + Q2MIN = 4.0D00 +c LHASET = 393 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid' + ELSEIF((LHAINPUT .GE. 395) .AND. (LHAINPUT .LE. 396)) THEN + Q2MIN = 3.6D-1 +c LHASET = 395 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid' + ELSEIF((LHAINPUT .GE. 397) .AND. (LHAINPUT .LE. 398)) THEN + Q2MIN = 4.0D00 +c LHASET = 397 + LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid' + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF +C...Unknown Family ?! Giving up + ELSE + WRITE(LHAPRINT,5150) LHASET + STOP + ENDIF + + LHAMEMB=LHAINPUT-LHASET +c....Now work out if we have already called this set/member + iset = 0 + do j=1,nsets + if(lhaname.eq.lhanames(j).and. + + lhamemb.eq.lhamembers(j)) then + iset = j + endif + enddo + if(iset.eq.0) then + nsets=nsets+1 + if(nsets.gt.nmxset) then + if(LHASILENT.ne.1) then + print *,'WARNING:too many sets initialised' + print *,'overwriting from set 1 again' + endif + nsets = 1 +c stop + endif + iset=nsets + lhanames(iset)=lhaname + lhanumbers(iset)=lhainput + lhamembers(iset)=lhamemb + xxmin(iset)=xmin + xxmax(iset)=xmax + qq2min(iset)=q2min + qq2max(iset)=q2max + CALL INITPDFSETM(iset,LHANAME) + CALL NUMBERPDFM(iset,LHAALLMEM) + IF(LHASILENT .NE. 1) THEN + WRITE(LHAPRINT,5151) + WRITE(LHAPRINT,5152) LHANAME + WRITE(LHAPRINT,5153) LHAALLMEM + WRITE(LHAPRINT,5154) + ENDIF + IF ((LHAMEMB.LT.0) .OR. (LHAMEMB.GT.LHAALLMEM)) THEN + WRITE(LHAPRINT,5155) LHAMEMB + WRITE(LHAPRINT,5156) LHAALLMEM + STOP + ENDIF + +c print *,'calling initpdf',lhamemb +c print *,'calling initpdfm ',iset,lhaname,lhamemb +c print *,'LHAGLUE .... initializing set,member ',iset,lhamemb + CALL INITPDFM(iset,LHAMEMB) + endif +c... the rest is done every time pdfset is called +c print *,'setting nset to:',iset + call setnset(iset) + call setnmem(iset,lhamemb) + xmin = xxmin(iset) + xmax = xxmax(iset) + q2min=qq2min(iset) + q2max=qq2max(iset) + call GetLam4M(iset,LHAMEMB,qcdl4) + call GetLam5M(iset,LHAMEMB,qcdl5) + + QMZ = 91.1876D0 + alphasLHA = alphasPDFM(iset,QMZ) + IF(LHASILENT .NE. 1) + > WRITE(LHAPRINT,5158) alphasLHA + + IF(LHAPARM(17).EQ.'LHAPDF') THEN + NPTYPEPDFL = 1 ! Proton PDFs + NFLPDFL = 4 + QCDLHA4 = QCDL4 + QCDLHA5 = QCDL5 + IF(LHASILENT .NE. 1) + > WRITE(LHAPRINT,5159) QCDL4, QCDL5 + ELSE + NPTYPEPDFL = 1 ! Proton PDFs + NFLPDFL = 4 + ALAMBDA = 0.192D0 + QCDLHA4 = ALAMBDA + QCDLHA5 = ALAMBDA + IF(PARM(1).EQ.'NPTYPE') THEN ! PYTHIA + QCDL4 = ALAMBDA + QCDL5 = ALAMBDA + ENDIF + ENDIF +C...Formats for initialization information. + 5150 FORMAT(1X,'WRONG LHAPDF set number =',I12,' given! STOP EXE!') + 5151 FORMAT(1X,'==============================================') + 5152 FORMAT(1X,'PDFset name ',A80) + 5153 FORMAT(1X,'with ',I10,' members') + 5154 FORMAT(1X,'==== initialized. ===========================') + 5155 FORMAT(1X,'LHAPDF problem => YOU asked for member = ',I10) + 5156 FORMAT(1X,'Valid range is: 0 - ',I10,' Execution stopped.') + 5157 FORMAT(1X,'Number of flavors for PDF is:',I4) + 5158 FORMAT(1X,'Strong coupling at Mz for PDF is:',F9.5) + 5159 FORMAT(1X,'Will use for PYTHIA QCDL4, QCDL5:',2F9.5) + + RETURN + END + +c******************************************************************** +c -- STRUCTA +c -- copy of PDFLIB to use the eks98 nuclear correction factors + + SUBROUTINE STRUCTA(X,Q,A,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU) + IMPLICIT DOUBLE PRECISION (A-H,O-Z) + CALL EKS98(X,Q,A,RUV,RDV,RU,RD,RS,RC,RB,RT,RG) + CALL STRUCTM(X,Q,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU) + UPV = RUV*UPV + DNV = RDV*DNV + USEA = RU*USEA + DSEA = RD*DSEA + STR = RS*STR + CHM = RC*CHM + BOT = RB*BOT + TOP = RT*TOP + GLU = RG*GLU + RETURN + END + +C********************************************************************* + +C...STRUCTM +C...Gives parton distributions according to the LHAPDF interface. +C...Two evolution codes used: +C... EVLCTEQ for CTEQ PDF sets +C... QCDNUM for Other PDF sets +C... +C...Author: Dimitri Bourilkov bourilkov@mailaps.org +C... +C...v4.0 21-Mar-2005 Photon/pion/new p PDFs, updated for LHAPDF v4 +C...v3.0 23-Jan-2004 +C... +C...interface to LHAPDF library + + SUBROUTINE STRUCTM(X,Q,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU) + +C...Double precision and integer declarations. + IMPLICIT DOUBLE PRECISION(A-H, O-Z) + IMPLICIT INTEGER(I-N) +C include 'parmsetup.inc' + integer noemax,nopmax,npfmax,nofmax,linemax,nmxset + parameter (noemax=1000,nopmax=40,npfmax=10,nofmax=10,linemax=20) +c nmxset is the max number of sets that can be initialised at one time ---- added V5 + parameter (nmxset=3) +C...Commonblocks. + COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) + SAVE /PYDAT1/ +C...Interface to LHAPDFLIB. +C include 'pathsetup.inc' + character*232 lhapath + character*272 lhaname,lhanames(nmxset) +c CHARACTER*172 LHANAME + INTEGER LHASET, LHAMEMB + COMMON/LHAPDF/LHANAME, LHASET, LHAMEMB + SAVE /LHAPDF/ +c...added next 2 lines for structp fix + integer LHAMEMBERS(nmxset),LHANUMBERS(nmxset) + common/LHASETS/LHANAMES,LHANUMBERS,LHAMEMBERS,nsets +c + DOUBLE PRECISION QCDLHA4, QCDLHA5 + INTEGER NFLLHA + COMMON/LHAPDFR/QCDLHA4, QCDLHA5, NFLLHA + SAVE /LHAPDFR/ + CHARACTER*20 LHAPARM(20) + DOUBLE PRECISION LHAVALUE(20) + COMMON/LHACONTROL/LHAPARM,LHAVALUE + SAVE/LHACONTROL/ + INTEGER LHAEXTRP + COMMON/LHAPDFE/LHAEXTRP + SAVE /LHAPDFE/ + DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + SAVE/LHAGLSTA/ +C...Interface to PDFLIB. + COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX + SAVE /W50513/ + DOUBLE PRECISION XMIN,XMAX,Q2MIN,Q2MAX +C...Local variables + DOUBLE PRECISION UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU + DOUBLE PRECISION X,Q,F(-6:6) + + Q2 = Q**2 +C...Statistics + IF(LHAPARM(16).NE.'NOSTAT') THEN + TOTNUM = TOTNUM+1.D0 + IF(X .LT. XMIN) XMINNUM = XMINNUM+1.D0 + IF(X .GT. XMAX) XMAXNUM = XMAXNUM+1.D0 + IF(Q2 .LT. Q2MIN) Q2MINNUM = Q2MINNUM+1.D0 + IF(Q2 .GT. Q2MAX) Q2MAXNUM = Q2MAXNUM+1.D0 + ENDIF + +C...Range of validity e.g. 10^-6 < x < 1, Q2MIN < Q^2 extended by +C...freezing x*f(x,Q2) at borders. + IF(LHAEXTRP .NE. 1) THEN ! safe mode == "freeze" + XIN=MAX(XMIN,MIN(XMAX,X)) + Q=SQRT(MAX(0D0,Q2MIN,MIN(Q2MAX,Q2))) + ELSE ! adventurous mode == OWN RISK ! + XIN=X + ENDIF + + call getnset(iset) +c print *,'calling evolvepdfm:',iset +C +C...fix to allow STRUCTM to work for photon PDFs (Herwig does this) +C...set P2 = 0.0d0 and IP2 = 0 + if(LHANUMBERS(iset).ge.300.and.LHANUMBERS(iset).le.399) then + P2 = 0.0d0 + IP2 = 0 + CALL EVOLVEPDFPM(iset,XIN,Q,P2,IP2,F) + else + CALL EVOLVEPDFM(iset,XIN,Q,F) + endif + GLU = F(0) + DSEA = F(-1) + DNV = F(1) - DSEA + USEA = F(-2) + UPV = F(2) - USEA + STR = F(3) + CHM = F(4) + BOT = F(5) + TOP = F(6) + + RETURN + END + +C********************************************************************* + +C...STRUCTP +C...Gives parton distributions according to the LHAPDF interface. +C...Used for photons. +C... +C...v4.0 21-Mar-2005 Photon/pion/new p PDFs, updated for LHAPDF v4 +C... +C...interface to LHAPDF library + + SUBROUTINE STRUCTP + > (X,Q2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU) + +C...Double precision and integer declarations. + IMPLICIT DOUBLE PRECISION(A-H, O-Z) + IMPLICIT INTEGER(I-N) +C include 'parmsetup.inc' + integer noemax,nopmax,npfmax,nofmax,linemax,nmxset + parameter (noemax=1000,nopmax=40,npfmax=10,nofmax=10,linemax=20) +c nmxset is the max number of sets that can be initialised at one time ---- added V5 + parameter (nmxset=3) +C...Commonblocks. + COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) + SAVE /PYDAT1/ +C...Interface to LHAPDFLIB. +C include 'pathsetup.inc' + character*232 lhapath + character*272 lhaname,lhanames(nmxset) +c CHARACTER*172 LHANAME + INTEGER LHASET, LHAMEMB + COMMON/LHAPDF/LHANAME, LHASET, LHAMEMB + SAVE /LHAPDF/ + DOUBLE PRECISION QCDLHA4, QCDLHA5 + INTEGER NFLLHA + COMMON/LHAPDFR/QCDLHA4, QCDLHA5, NFLLHA + SAVE /LHAPDFR/ + CHARACTER*20 LHAPARM(20) + DOUBLE PRECISION LHAVALUE(20) + COMMON/LHACONTROL/LHAPARM,LHAVALUE + SAVE/LHACONTROL/ + INTEGER LHAEXTRP + COMMON/LHAPDFE/LHAEXTRP + SAVE /LHAPDFE/ + DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + SAVE/LHAGLSTA/ +C...Interface to PDFLIB. + COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX + SAVE /W50513/ + DOUBLE PRECISION XMIN,XMAX,Q2MIN,Q2MAX +C...Local variables + DOUBLE PRECISION UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU + DOUBLE PRECISION X,Q,F(-6:6) + +C...Statistics + IF(LHAPARM(16).NE.'NOSTAT') THEN + TOTNUP = TOTNUP+1.D0 + IF(X .LT. XMIN) XMINNUP = XMINNUP+1.D0 + IF(X .GT. XMAX) XMAXNUP = XMAXNUP+1.D0 + IF(Q2 .LT. Q2MIN) Q2MINNUP = Q2MINNUP+1.D0 + IF(Q2 .GT. Q2MAX) Q2MAXNUP = Q2MAXNUP+1.D0 + ENDIF + +C...Range of validity e.g. 10^-6 < x < 1, Q2MIN < Q^2 extended by +C...freezing x*f(x,Q2) at borders. + Q = DSQRT(Q2) + IF(LHAEXTRP .NE. 1) THEN ! safe mode == "freeze" + XIN=MAX(XMIN,MIN(XMAX,X)) + Q=SQRT(MAX(0D0,Q2MIN,MIN(Q2MAX,Q2))) + ELSE ! adventurous mode == OWN RISK ! + XIN=X + ENDIF + call getnset(iset) + CALL EVOLVEPDFPM(iset,XIN,Q,P2,IP2,F) + + GLU = F(0) + DSEA = F(-1) + DNV = F(1) - DSEA + USEA = F(-2) + UPV = F(2) - USEA + STR = F(3) + CHM = F(4) + BOT = F(5) + TOP = F(6) + + RETURN + END + +C********************************************************************* + +C...PDFSTA +C...For statistics ON structure functions (under/over-flows) +C... +C...Author: Dimitri Bourilkov bourilkov@mailaps.org +C... +C... +C...first introduced in v4.0 28-Apr-2005 +C... + + SUBROUTINE PDFSTA + +C...Double precision and integer declarations. + IMPLICIT DOUBLE PRECISION(A-H, O-Z) + IMPLICIT INTEGER(I-N) +C...Interface to LHAPDFLIB. + DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM, + > XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP + SAVE/LHAGLSTA/ + + PRINT * + PRINT *,'===== PDFSTA statistics for PDF under/over-flows ====' + PRINT * + PRINT *,'====== STRUCTM statistics for nucleon/pion PDFs =====' + PRINT * + PRINT *,' total # of calls ',TOTNUM + IF(TOTNUM .GT. 0.D0) THEN + PERCBELOW = 100.D0*XMINNUM/TOTNUM + PERCABOVE = 100.D0*XMAXNUM/TOTNUM + PRINT *,' X below PDF min ',XMINNUM,' or ',PERCBELOW, ' %' + PRINT *,' X above PDF max ',XMAXNUM,' or ',PERCABOVE, ' %' + PERCBELOW = 100.D0*Q2MINNUM/TOTNUM + PERCABOVE = 100.D0*Q2MAXNUM/TOTNUM + PRINT *,' Q2 below PDF min ',Q2MINNUM,' or ',PERCBELOW, ' %' + PRINT *,' Q2 above PDF max ',Q2MAXNUM,' or ',PERCABOVE, ' %' + ENDIF + PRINT * + PRINT *,'========= STRUCTP statistics for photon PDFs ========' + PRINT * + PRINT *,' total # of calls ',TOTNUP + IF(TOTNUP .GT. 0.D0) THEN + PERCBELOW = 100.D0*XMINNUP/TOTNUP + PERCABOVE = 100.D0*XMAXNUP/TOTNUP + PRINT *,' X below PDF min ',XMINNUP,' or ',PERCBELOW, ' %' + PRINT *,' X above PDF max ',XMAXNUP,' or ',PERCABOVE, ' %' + PERCBELOW = 100.D0*Q2MINNUP/TOTNUP + PERCABOVE = 100.D0*Q2MAXNUP/TOTNUP + PRINT *,' Q2 below PDF min ',Q2MINNUP,' or ',PERCBELOW, ' %' + PRINT *,' Q2 above PDF max ',Q2MAXNUP,' or ',PERCABOVE, ' %' + ENDIF + PRINT * + + RETURN + END +********************************************************************** +* +* $Id$ +* +* $Log$ +* Revision 1.3 2006/11/02 10:22:57 hristov +* Extracting the BLOCK DATA in a separate file. Changes to make it working on macosx +* +* Revision 1.2 2006/11/01 12:25:47 hristov +* Using LHAPDF instead of PDF +* +* Revision 1.1 2006/08/07 09:09:40 morsch +* LHAPDF 5.2.2 source code. +* +* Revision 1.7 2005/12/02 14:50:54 whalley +* Changes for new CTEQ code/AB sets +* +* Revision 1.6 2005/10/18 15:35:48 whalley +* fix to allow LHAPATH to be user defined as well as lhapdf-config +* +* Revision 1.5 2005/10/18 11:47:48 whalley +* Change to only set LHAPATH once per run +* +* Revision 1.1.1.2 1996/10/30 08:29:06 cernlib +* Version 7.04 +* +* Revision 1.1.1.1 1996/04/12 15:29:26 plothow +* Version 7.01 +* +* + SUBROUTINE PFTOPDG(DX,DSCALE,DXPDF) +C +Cinclude "pdf/expdp.inc" + double precision + + DX,DSCALE,DUPV,DDNV,DUSEA,DDSEA,DSTR,DCHM,DBOT,DTOP,DGL, + + DXPDF(-6:6) +C... call STRUCTM in PDFLIB to get flavour content + CALL STRUCTM(DX,DSCALE, + + DUPV,DDNV,DUSEA,DDSEA,DSTR,DCHM,DBOT,DTOP,DGL) +C... convert flavour convention of PDFLIB to PDG convention + DXPDF(0) = DGL + DXPDF(1) = DDNV + DDSEA + DXPDF(2) = DUPV + DUSEA + DXPDF(3) = DSTR + DXPDF(4) = DCHM + DXPDF(5) = DBOT + DXPDF(6) = DTOP + DXPDF(-1) = DDSEA + DXPDF(-2) = DUSEA + DXPDF(-3) = DSTR + DXPDF(-4) = DCHM + DXPDF(-5) = DBOT + DXPDF(-6) = DTOP +C + RETURN + END +**************************************************************************** + subroutine setPDFpath(pathname) + implicit real*8 (A-H,O-Z) +C include 'parmsetup.inc' + integer noemax,nopmax,npfmax,nofmax,linemax,nmxset + parameter (noemax=1000,nopmax=40,npfmax=10,nofmax=10,linemax=20) +c nmxset is the max number of sets that can be initialised at one time ---- added V5 + parameter (nmxset=3) + character*(*) pathname +C include 'pathsetup.inc' + character*232 lhapath + character*272 lhaname,lhanames(nmxset) +c character*132 lhapath + common/LHAPDFC/lhapath + character*20 lhaparm(20) + real*8 lhavalue(20) + common/LHACONTROL/lhaparm,lhavalue + lhaparm(20) = 'LHAPATH' + do j=1,lnblnk(lhapath) + lhapath(j:j)='' + enddo + lhapath = pathname + return + end +*********************************************************************** + subroutine lhaset(lhaparm2,lhavalue2) + implicit real*8 (a-h,o-z) + character*20 lhaparm(20),lhaparm2(20) + real*8 lhavalue(20),lhavalue2(20) + common/LHACONTROL/lhaparm,lhavalue + do j=1,20 + lhaparm(j)=lhaparm2(j) + lhavalue(j)=lhavalue2(j) + enddo + return + end +****************************************************************** + subroutine setlhaparm(lparm) + implicit real*8 (a-h,o-z) + character*(*) lparm + character*20 lhaparm(20) + real*8 lhavalue(20) + common/LHACONTROL/lhaparm,lhavalue + if(lparm.eq.'NOSTAT') then + lhaparm(16)='NOSTAT' + else if (lparm.eq.'16') then + lhaparm(16)='' + else if (lparm.eq.'LHAPDF') then + lhaparm(17)='LHAPDF' + else if (lparm.eq.'17') then + lhaparm(17)='' + else if (lparm.eq.'EXTRAPOLATE') then + lhaparm(18)='EXTRAPOLATE' + else if (lparm.eq.'18') then + lhaparm(18)='' + else if (lparm.eq.'SILENT') then + lhaparm(19)='SILENT' + else if (lparm.eq.'LOWKEY') then + lhaparm(19)='LOWKEY' + else if (lparm.eq.'19') then + lhaparm(19)='' + else + print *,'WARNING from SetLHAPARM - value',lparm,' + & not recognized!' + endif + return + end +*************************************************************** diff --git a/PYTHIA6/libpythia6.pkg b/PYTHIA6/libpythia6.pkg index 9999abab4e3..5d07cf3b887 100644 --- a/PYTHIA6/libpythia6.pkg +++ b/PYTHIA6/libpythia6.pkg @@ -15,7 +15,8 @@ pdf_alice.F\ pythia6_common_block_address.F \ tpythia6_called_from_cc.F\ openDecayTable.F\ -pyquen.F +pyquen.F\ +lhaglue.F ifeq ($(ALICE_TARGET),linux) GCC_VERSION := $(shell $(CXX) -v 2>&1 | \ -- 2.43.0