]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Compiling lhaglue.F in libpythia6.so to fix the initialization of the common blocks...
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 29 Jan 2007 21:54:37 +0000 (21:54 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 29 Jan 2007 21:54:37 +0000 (21:54 +0000)
LHAPDF/liblhapdf.pkg
PYTHIA6/lhaglue.F [new file with mode: 0644]
PYTHIA6/libpythia6.pkg

index 75f94e072d82149cabdffab7e010216d827556e4..44d4347474382bea1605e3a3a28f9ace7cb4f338 100644 (file)
@@ -52,28 +52,28 @@ lhapdf5.2.2/commons.f
 EXPORT:=AliStructFuncType.h
 
 
 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 (file)
index 0000000..3231a3b
--- /dev/null
@@ -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
+***************************************************************
index 9999abab4e3bc75cc9b17622c47c504f74e04345..5d07cf3b887b333163ac1e22356b6512b70de2ec 100644 (file)
@@ -15,7 +15,8 @@ pdf_alice.F\
 pythia6_common_block_address.F \
 tpythia6_called_from_cc.F\
 openDecayTable.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 | \
 
 ifeq ($(ALICE_TARGET),linux)
    GCC_VERSION    := $(shell $(CXX) -v 2>&1 | \