]> git.uio.no Git - u/mrichter/AliRoot.git/blob - LHAPDF/lhapdf5.3.1/lhaglue.f
Add missing newline
[u/mrichter/AliRoot.git] / LHAPDF / lhapdf5.3.1 / lhaglue.f
1 C*********************************************************************
2
3 C...  LHAGLUE Interface to LHAPDF library of modern parton
4 C...   density functions (PDF) with uncertainties
5 C...
6 C...Authors for v4: Dimitri Bourilkov, Craig Group, Mike Whalley
7 C...
8 C...Authors for v3: Dimitri Bourilkov, Craig Group, Mike Whalley
9 C...
10 C...Author for v1 and v2: Dimitri Bourilkov  bourilkov@mailaps.org
11 C...                      University of Florida
12 C...
13 C...HERWIG interface by Dimitri Bourilkov and Craig Group
14 C...
15 C...New numbering scheme and upgrade for LHAPDF v2.1
16 C...by Dimitri Bourilkov and Mike Whalley
17 C...
18 C...For more information, or when you cite this interface, currently
19 C...the official reference is:
20 C...D.Bourilkov, "Study of Parton Density Function Uncertainties with
21 C...LHAPDF and PYTHIA at LHC", hep-ph/0305126.
22 C...
23 C...The official LHAPDF page is:
24 C...
25 C...   http://durpdg.dur.ac.uk/lhapdf/index.html 
26 C...
27 C...The interface contains four subroutines (similar to PDFLIB).
28 C...It can be used seamlessly by Monte Carlo generators 
29 C...interfaced to PDFLIB or in stand-alone mode.
30 C...
31 C...    For initialization (called once)
32 C...
33 C...    PDFSET(PARM,VALUE)
34 C...
35 C...    For the proton/pion structure functions
36 C...
37 C...    STRUCTM(X,Q,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
38 C...
39 C...    For the photon structure functions
40 C...
41 C...    STRUCTP(X,Q2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
42 C...
43 C...    For statistics ON structure functions (under/over-flows)
44 C...
45 C...    PDFSTA
46 C...
47 C...This interface can be invoked in 3 ways depending
48 C...on the value of PARM(1) provided by the user when
49 C...calling PDFSET(PARM,VALUE):
50 C...
51 C...    For PYTHIA:         PARM(1).EQ.'NPTYPE'
52 C...      (this is set automatically by PYTHIA)
53 C...
54 C...    For HERWIG:         PARM(1).EQ.'HWLHAPDF'
55 C...      (set by the USER e.g. in the main program like this:
56 C...          AUTPDF(1) = 'HWLHAPDF'
57 C...          AUTPDF(2) = 'HWLHAPDF'                         )
58 C...
59 C...    For Stand-alone:    PARM(1).EQ.'DEFAULT'
60 C...      (can be used for PDF studies or when interfacing
61 C...       new generators)
62 C...
63 C...The LHAPDF set/member is selected depending on the value of:
64 C...
65 C...        PYTHIA:   ABS(MSTP(51)) - proton
66 C...                  ABS(MSTP(53)) - pion
67 C...                  ABS(MSTP(55)) - photon
68 C...
69 C...        HERWIG:   ABS(INT(VALUE(1)))
70 C...
71 C...   STAND-ALONE:   ABS(INT(VALUE(1)))
72 C...
73 C...
74 C...        CONTROL switches:
75 C...       ==================
76 C...
77 C...     THE LOCATION OF THE LHAPDF LIBRARY HAS TO BE SPECIFIED
78 C...     AS DESCRIBED BELOW (the rest is optional)
79 C...
80 C...     if the user does nothing, sensible defaults
81 C...     are active; to change the behaviour, the corresponding
82 C...     values of LHAPARM() should be set to the values given below
83 C...
84 C...  Location of the LHAPDF library of PDFs (pathname):
85 C...     uses common block /LHAPDFC/
86 C...
87 C...   If the user does nothing => default = subdir PDFsets of the 
88 C...                              current directory (can be real subdir
89 C...                              OR a soft link to the real location)
90 C...   If the user sets LHAPATH => supplied by the USER who defines the
91 C...                        path in common block COMMON/LHAPDFC/LHAPATH
92 C...                        BEFORE calling PDFSET
93 C...
94 C...   Other controls:
95 C...   ===============
96 C...     use common block /LHACONTROL/
97 C...
98 C...  Collect statistics on under/over-flow requests for PDFs
99 C...  outside their validity ranges in X and Q**2
100 C...  (call PDFSTA at end of run to print it out)
101 C...
102 C...      LHAPARM(16).EQ.'NOSTAT' => No statistics (faster)
103 C...      LHAPARM(16).NE.'NOSTAT' => Default: collect statistics
104 C...
105 C...  Option to use the values for the strong coupling alpha_s
106 C...  as computed in LHAPDF in the MC generator
107 C...  (to ensure uniformity between the MC generator and the PDF set)
108 C...  WARNING: implemented ONLY for PYTHIA in LHAPDFv4
109 C...
110 C...      LHAPARM(17).EQ.'LHAPDF' => Use alpha_s from LHAPDF
111 C...      LHAPARM(17).NE.'LHAPDF' => Default (same as LHAPDF v1/v3)
112 C...
113 C...  Extrapolation of PDFs outside LHAPDF validity range given by
114 C...  [Xmin,Xmax] and [Q2min,Q2max]; DEFAULT => PDFs "frozen" at the
115 C...  boundaries
116 C...
117 C...      LHAPARM(18).EQ.'EXTRAPOLATE' => Extrapolate PDFs on OWN RISK
118 C...                          WARNING: Crazy values can be returned
119 C...
120 C...  Printout of initialization information in PDFSET (by default)
121 C...
122 C...      LHAPARM(19).EQ.'SILENT' => No printout (silent mode)
123 C...      LHAPARM(19).EQ.'LOWKEY' => Print 5 times (almost silent mode)
124 C...
125 C...
126 C...v5.0  06-Oct-2005  Major change to allow multiset-initializations 
127 C...v4.0  28-Apr-2005  PDFSTA routine; option to use Alfa_s from LHAPDF
128 C...v4.0  21-Mar-2005  Photon/pion/new p PDFs, updated for LHAPDF v4
129 C...v3.1  26-Apr-2004  New numbering scheme, updated for LHAPDF v2/v3
130 C...v3.0  23-Jan-2004  HERWIG interface added
131 C...v2.0  20-Sep-2003  PDFLIB style adopted
132 C...v1.0  05-Mar-2003  First working version from PYTHIA to LHAPDF v1
133 C...
134 C...interface to LHAPDF library
135
136 C*********************************************************************
137 C...PDFSET
138 C...Initialization for use of parton distributions
139 C... according to the LHAPDF interface.
140 C...
141 C...v4.0  28-Apr-2005  Option to use Alfa_s from LHAPDF
142 C...v4.0  21-Mar-2005  Photon/pion/new p PDFs, updated for LHAPDF v4
143 C...v3.1  26-Apr-2004  New numbering scheme
144 C...v3.0  23-Jan-2004  HERWIG interface added
145 C...
146 C...interface to LHAPDF library
147
148       SUBROUTINE PDFSET(PARM,VALUE,
149      >     MSTU11,MSTP51,MSTP53,MSTP55,
150      >     QCDL4,QCDL5,
151      >     AXMIN,AXMAX,AQ2MIN,AQ2MAX)
152 C...Double precision and integer declarations.
153       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
154       IMPLICIT INTEGER(I-N)
155 c...additions for multiset use
156       include 'parmsetup.inc'
157       include 'pathsetup.inc'
158 c      character*172 LHANAMES(nmxset)
159       integer LHAMEMBERS(nmxset),LHANUMBERS(nmxset)
160       common/LHASETS/LHANAMES,LHANUMBERS,LHAMEMBERS,nsets
161       real*8 xxmin(nmxset),xxmax(nmxset),qq2min(nmxset),qq2max(nmxset)
162       save xxmin,xxmax,qq2min,qq2max
163 C...Interface to LHAPDFLIB.
164 c      CHARACTER*172 LHANAME
165       INTEGER LHASET, LHAMEMB
166       COMMON/LHAPDF/LHANAME, LHASET, LHAMEMB
167       SAVE /LHAPDF/
168       DOUBLE PRECISION QCDLHA4, QCDLHA5
169       INTEGER NFLLHA
170       COMMON/LHAPDFR/QCDLHA4, QCDLHA5, NFLLHA
171       SAVE /LHAPDFR/
172 c      CHARACTER*132 LHAPATH
173       COMMON/LHAPDFC/LHAPATH
174       SAVE /LHAPDFC/
175       CHARACTER*20 LHAPARM(20)
176       DOUBLE PRECISION LHAVALUE(20)
177       COMMON/LHACONTROL/LHAPARM,LHAVALUE
178       SAVE/LHACONTROL/
179       INTEGER LHAEXTRP
180       COMMON/LHAPDFE/LHAEXTRP
181       SAVE /LHAPDFE/
182       INTEGER LHASILENT
183       COMMON/LHASILENT/LHASILENT
184       SAVE /LHASILENT/
185       DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
186      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
187       COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
188      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
189       SAVE/LHAGLSTA/
190 C...Interface to PDFLIB.
191       COMMON/W50511/ NPTYPEPDFL,NGROUPPDFL,NSETPDFL,MODEPDFL,
192      >               NFLPDFL,LOPDFL,TMASPDFL
193       SAVE /W50511/
194       DOUBLE PRECISION TMASPDFL
195 C...Interface to PDFLIB.
196       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
197       SAVE /W50513/
198       DOUBLE PRECISION XMIN,XMAX,Q2MIN,Q2MAX
199 C...Local arrays and character variables (NOT USED here DB)
200       CHARACTER*20 PARM(20)
201       DOUBLE PRECISION VALUE(20)
202 C...
203       DOUBLE PRECISION QCDL4,QCDL5
204       DOUBLE PRECISION AXMIN,AXMAX,AQ2MIN,AQ2MAX
205       INTEGER LHAPATHLEN
206       INTEGER LHAINPUT
207       INTEGER LHASELECT
208       INTEGER LHAPRINT
209       INTEGER LHAONCE
210       INTEGER LHAFIVE
211       SAVE LHAONCE
212       SAVE LHAFIVE
213       logical first
214       save first
215
216       INTEGER LNROOT
217       CHARACTER*1000 CHROOT
218       CHROOT=' '
219       DATA LHAONCE/0/
220       DATA LHAFIVE/0/
221       data first/.TRUE./
222
223       if(first .AND. (LHAPARM(20).NE.'LHAPATH')) then
224 c...overide the default PDFsets path
225 c ... check first if the environmental variable LHAPATH is set
226          call getenv('LHAPATH',lhapath)
227          if(lhapath.eq.'') then
228 C     The environment variable LHAPATH is not set.
229 C     Take the data from $ALICE_ROOT/LHAPDF/PDFsets
230             CALL GETENV('ALICE_ROOT',CHROOT)
231             LNROOT = LNBLNK(CHROOT)
232             IF(LNROOT.LE.0) THEN
233                LHAPATH='PDFsets' ! Default value
234             ELSE
235                LHAPATH=CHROOT(1:LNROOT)//'/LHAPDF/PDFsets'
236             ENDIF
237          endif
238       first=.FALSE.
239       endif
240 c
241 *
242 C...Init
243       LHAEXTRP = 0
244       IF(LHAPARM(18).EQ.'EXTRAPOLATE')
245      >   THEN  ! Extrapolate PDFs on own risk
246          LHAEXTRP = 1
247       ENDIF
248       LHASILENT = 0
249       IF(LHAPARM(19).EQ.'SILENT') THEN    !  No printout (silent MODE)
250          LHASILENT = 1
251       ELSEIF(LHAPARM(19).EQ.'LOWKEY') THEN ! Print 5 times (lowkey MODE)
252          IF(LHAFIVE .LT. 6) THEN
253             LHAFIVE = LHAFIVE + 1
254          ELSE
255             LHASILENT = 1
256          ENDIF
257       ENDIF
258       IF(PARM(1).EQ.'NPTYPE') THEN        !  PYTHIA
259          LHAPRINT = MSTU11
260          IF(VALUE(1) .EQ. 1) THEN         !   nucleon
261            LHAINPUT = ABS(MSTP51)
262          ELSEIF(VALUE(1) .EQ. 2) THEN     !   pion
263            LHAINPUT = ABS(MSTP53)
264          ELSEIF(VALUE(1) .EQ. 3) THEN     !   photon
265            LHAINPUT = ABS(MSTP55)
266          ENDIF
267          IF(LHASILENT .NE. 1) 
268      >    PRINT *,'==== PYTHIA WILL USE LHAPDF ===='
269       ELSEIF(PARM(1).EQ.'HWLHAPDF') THEN  !  HERWIG
270          LHAINPUT = ABS(INT(VALUE(1)))
271          IF(LHAONCE.EQ.LHAINPUT) RETURN
272          IF(LHASILENT .NE. 1) 
273      >    PRINT *,'==== HERWIG WILL USE LHAPDF ===='
274          LHAPRINT = 6
275          LHAONCE = LHAINPUT
276       ELSEIF(PARM(1).EQ.'DEFAULT') THEN  !  Stand-alone
277          LHAINPUT = ABS(INT(VALUE(1)))
278          IF(LHAONCE.EQ.LHAINPUT) RETURN
279          IF(LHASILENT .NE. 1) 
280      >    PRINT *,'==== STAND-ALONE LHAGLUE MODE TO USE LHAPDF ===='
281          LHAPRINT = 6
282          LHAONCE = LHAINPUT
283       ELSE
284          PRINT *,'== UNKNOWN LHAPDF INTERFACE CALL! STOP EXECUTION! =='
285          STOP
286       ENDIF
287 C...Initialize parton distributions: LHAPDFLIB.
288         LHAPATHLEN=INDEX(LHAPATH,' ')-1
289         LHASET = LHAINPUT
290         XMIN = 1.0D-6      ! X_min for current PDF set
291         XMAX = 1.0D0       ! X_max for current PDF set
292         Q2MIN = 1.0D0**2   ! Q**2_min scale for current PDF set [GeV]
293         Q2MAX = 1.0D5**2   ! Q**2_max scale for current PDF set [GeV]
294 C...
295 C...Protons
296 C...
297 C...CTEQ Family
298         IF((LHAINPUT .GE. 10000) .AND. (LHAINPUT .LE. 19999)) THEN
299           Q2MAX = 1.0D08
300           IF((LHAINPUT .GE. 10000) .AND. (LHAINPUT .LE. 10040)) THEN
301            LHASET = 10000
302            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6.LHpdf'
303            Q2MIN = 1.69D0
304           ELSEIF((LHAINPUT .GE. 10041) .AND. (LHAINPUT .LE. 10041)) THEN
305            LHASET = 10041
306            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6l.LHpdf'
307            Q2MIN = 1.69D0
308           ELSEIF((LHAINPUT .GE. 10042) .AND. (LHAINPUT .LE. 10042)) THEN
309            LHASET = 10042
310            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6ll.LHpdf'
311            Q2MIN = 1.69D0
312           ELSEIF((LHAINPUT .GE. 10050) .AND. (LHAINPUT .LE. 10090)) THEN
313            LHASET = 10050
314            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6mE.LHgrid'
315            Q2MIN = 1.69D0
316           ELSEIF((LHAINPUT .GE. 10100) .AND. (LHAINPUT .LE. 10140)) THEN
317            LHASET = 10100
318            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq61.LHpdf'
319            Q2MIN = 1.69D0
320           ELSEIF((LHAINPUT .GE. 10150) .AND. (LHAINPUT .LE. 10190)) THEN
321            LHASET = 10150
322            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq61.LHgrid'
323            Q2MIN = 1.69D0
324           ELSEIF((LHAINPUT .GE. 10250) .AND. (LHAINPUT .LE. 10269)) THEN
325            LHASET = 10250
326            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq6AB.LHgrid'
327            Q2MIN = 1.69D0
328           ELSEIF((LHAINPUT .GE. 10350) .AND. (LHAINPUT .LE. 10390)) THEN
329            LHASET = 10350
330            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq65.LHgrid'
331            Q2MIN = 1.69D0
332            Q2MAX = 1.0D10
333            XMIN =  1.0D-7
334           ELSEIF((LHAINPUT .GE. 10450) .AND. (LHAINPUT .LE. 10456)) THEN
335            LHASET = 10450
336            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq65c.LHgrid'
337            Q2MIN = 1.69D0
338            Q2MAX = 1.0D10
339            XMIN =  1.0D-7
340           ELSEIF((LHAINPUT .GE. 19050) .AND. (LHAINPUT .LE. 19050)) THEN
341            LHASET = 19050
342            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5m.LHgrid'
343            XMIN=1.0D-5
344           ELSEIF((LHAINPUT .GE. 19051) .AND. (LHAINPUT .LE. 19051)) THEN
345            LHASET = 19051
346            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5m1.LHgrid'
347            XMIN=1.0D-5
348           ELSEIF((LHAINPUT .GE. 19053) .AND. (LHAINPUT .LE. 19053)) THEN
349            LHASET = 19053
350            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5f3.LHgrid'
351            XMIN=1.0D-5
352           ELSEIF((LHAINPUT .GE. 19054) .AND. (LHAINPUT .LE. 19054)) THEN
353            LHASET = 19054
354            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5f4.LHgrid'
355            XMIN=1.0D-5
356           ELSEIF((LHAINPUT .GE. 19060) .AND. (LHAINPUT .LE. 19060)) THEN
357            LHASET = 19060
358            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5d.LHgrid'
359            XMIN=1.0D-5
360           ELSEIF((LHAINPUT .GE. 19070) .AND. (LHAINPUT .LE. 19070)) THEN
361            LHASET = 19070
362            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq5l.LHgrid'
363            XMIN=1.0D-5
364           ELSEIF((LHAINPUT .GE. 19150) .AND. (LHAINPUT .LE. 19150)) THEN
365            LHASET = 19150
366            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq4m.LHgrid'
367            Q2MIN = 2.56D0
368            XMIN=1.0D-5
369           ELSEIF((LHAINPUT .GE. 19160) .AND. (LHAINPUT .LE. 19160)) THEN
370            LHASET = 19160
371            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq4d.LHgrid'
372            Q2MIN = 2.56D0
373            XMIN=1.0D-5
374           ELSEIF((LHAINPUT .GE. 19170) .AND. (LHAINPUT .LE. 19170)) THEN
375            LHASET = 19170
376            LHANAME=LHAPATH(1:LHAPATHLEN)//'/cteq4l.LHgrid'
377            Q2MIN = 2.56D0
378            XMIN=1.0D-5
379           ELSE
380            WRITE(LHAPRINT,5150)  LHASET
381            STOP
382           ENDIF          
383 C...MRST Family
384         ELSEIF((LHAINPUT .GE. 20000) .AND. (LHAINPUT .LE. 29999)) THEN
385           Q2MIN = 1.25D0
386           Q2MAX = 1.0D07
387           XMIN = 1.0D-5
388           IF((LHAINPUT .GE. 20000) .AND. (LHAINPUT .LE. 20004)) THEN
389            LHASET = 20000
390            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001nlo.LHpdf'
391           ELSEIF((LHAINPUT .GE. 20050) .AND. (LHAINPUT .LE. 20054)) THEN
392            LHASET = 20050
393            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001nlo.LHgrid'
394           ELSEIF((LHAINPUT .GE. 20060) .AND. (LHAINPUT .LE. 20061)) THEN
395            LHASET = 20060
396            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001lo.LHgrid'
397           ELSEIF((LHAINPUT .GE. 20070) .AND. (LHAINPUT .LE. 20074)) THEN
398            LHASET = 20070
399            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001nnlo.LHgrid'
400           ELSEIF((LHAINPUT .GE. 20100) .AND. (LHAINPUT .LE. 20130)) THEN
401            LHASET = 20100
402            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001E.LHpdf'
403           ELSEIF((LHAINPUT .GE. 20150) .AND. (LHAINPUT .LE. 20180)) THEN
404            LHASET = 20150
405            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2001E.LHgrid'
406           ELSEIF((LHAINPUT .GE. 20200) .AND. (LHAINPUT .LE. 20201)) THEN
407            LHASET = 20200
408            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2002nlo.LHpdf'
409           ELSEIF((LHAINPUT .GE. 20250) .AND. (LHAINPUT .LE. 20251)) THEN
410            LHASET = 20250
411            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2002nlo.LHgrid'
412           ELSEIF((LHAINPUT .GE. 20270) .AND. (LHAINPUT .LE. 20271)) THEN
413            LHASET = 20270
414            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2002nnlo.LHgrid'
415           ELSEIF((LHAINPUT .GE. 20300) .AND. (LHAINPUT .LE. 20301)) THEN
416            LHASET = 20300
417            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2003cnlo.LHpdf'
418            Q2MIN = 10.0D0
419            XMIN = 1.0D-3
420           ELSEIF((LHAINPUT .GE. 20350) .AND. (LHAINPUT .LE. 20351)) THEN
421            LHASET = 20350
422            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2003cnlo.LHgrid'
423            Q2MIN = 10.0D0
424            XMIN = 1.0D-3
425           ELSEIF((LHAINPUT .GE. 20370) .AND. (LHAINPUT .LE. 20371)) THEN
426            LHASET = 20370
427            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2003cnnlo.LHgrid'
428            Q2MIN = 7.0D0
429            XMIN = 1.0D-3
430           ELSEIF((LHAINPUT .GE. 20400) .AND. (LHAINPUT .LE. 20401)) THEN
431            LHASET = 20400
432            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004nlo.LHpdf'
433           ELSEIF((LHAINPUT .GE. 20406) .AND. (LHAINPUT .LE. 20407)) THEN
434            LHASET = 20406
435            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF3nlo.LHpdf'
436           ELSEIF((LHAINPUT .GE. 20408) .AND. (LHAINPUT .LE. 20409)) THEN
437            LHASET = 20408
438            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF4nlo.LHpdf'
439           ELSEIF((LHAINPUT .GE. 20450) .AND. (LHAINPUT .LE. 20451)) THEN
440            LHASET = 20450
441            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004nlo.LHgrid'
442           ELSEIF((LHAINPUT .GE. 20452) .AND. (LHAINPUT .LE. 20453)) THEN
443            LHASET = 20452
444            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF3lo.LHgrid'
445           ELSEIF((LHAINPUT .GE. 20454) .AND. (LHAINPUT .LE. 20455)) THEN
446            LHASET = 20454
447            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF4lo.LHgrid'
448           ELSEIF((LHAINPUT .GE. 20456) .AND. (LHAINPUT .LE. 20457)) THEN
449            LHASET = 20456
450            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF3nlo.LHgrid'
451           ELSEIF((LHAINPUT .GE. 20458) .AND. (LHAINPUT .LE. 20459)) THEN
452            LHASET = 20458
453            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004FF4nlo.LHgrid'
454           ELSEIF((LHAINPUT .GE. 20460) .AND. (LHAINPUT .LE. 20462)) THEN
455            LHASET = 20460
456            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004qed.LHgrid'
457           ELSEIF((LHAINPUT .GE. 20470) .AND. (LHAINPUT .LE. 20471)) THEN
458            LHASET = 20470
459            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2004nnlo.LHgrid'
460           ELSEIF((LHAINPUT .GE. 20550) .AND. (LHAINPUT .LE. 20580)) THEN
461            LHASET = 20550
462            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST2006nnlo.LHgrid'
463            Q2MIN = 1.0D0
464            Q2MAX = 1.0D09
465            XMIN = 1.0D-6
466           ELSEIF((LHAINPUT .GE. 29000) .AND. (LHAINPUT .LE. 29003)) THEN
467            LHASET = 29000
468            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98.LHpdf'
469           ELSEIF((LHAINPUT .GE. 29040) .AND. (LHAINPUT .LE. 29045)) THEN
470            LHASET = 29040
471            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98lo.LHgrid'
472           ELSEIF((LHAINPUT .GE. 29050) .AND. (LHAINPUT .LE. 29055)) THEN
473            LHASET = 29050
474            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98nlo.LHgrid'
475           ELSEIF((LHAINPUT .GE. 29060) .AND. (LHAINPUT .LE. 29065)) THEN
476            LHASET = 29060
477            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98dis.LHgrid'
478           ELSEIF((LHAINPUT .GE. 29070) .AND. (LHAINPUT .LE. 29071)) THEN
479            LHASET = 29070
480            LHANAME=LHAPATH(1:LHAPATHLEN)//'/MRST98ht.LHgrid'
481           ELSE
482            WRITE(LHAPRINT,5150)  LHASET
483            STOP
484           ENDIF          
485 C...Fermi Family
486         ELSEIF((LHAINPUT .GE. 30000) .AND. (LHAINPUT .LE. 39999)) THEN
487           IF((LHAINPUT .GE. 30100) .AND. (LHAINPUT .LE. 30200)) THEN
488            LHASET = 30100
489            LHANAME=LHAPATH(1:LHAPATHLEN)//'/Fermi2002_100.LHpdf'
490           ELSEIF((LHAINPUT .GE. 31000) .AND. (LHAINPUT .LE. 32000)) THEN
491            LHASET = 31000
492            LHANAME=LHAPATH(1:LHAPATHLEN)//'/Fermi2002_1000.LHpdf'
493           ELSE
494            WRITE(LHAPRINT,5150)  LHASET
495            STOP
496           ENDIF          
497 C...Alekhin Family
498         ELSEIF((LHAINPUT .GE. 40000) .AND. (LHAINPUT .LE. 49999)) THEN
499           IF((LHAINPUT .GE. 40100) .AND. (LHAINPUT .LE. 40200)) THEN
500            LHASET = 40100
501            LHANAME=LHAPATH(1:LHAPATHLEN)//'/Alekhin_100.LHpdf'
502           ELSEIF((LHAINPUT .GE. 41000) .AND. (LHAINPUT .LE. 41999)) THEN
503            LHASET = 41000
504            LHANAME=LHAPATH(1:LHAPATHLEN)//'/Alekhin_1000.LHpdf'
505           ELSEIF((LHAINPUT .GE. 40350) .AND. (LHAINPUT .LE. 40367)) THEN
506            LHASET = 40350
507            LHANAME=LHAPATH(1:LHAPATHLEN)//'/a02m_lo.LHgrid'
508            XMIN = 1.0D-7
509            Q2MIN = 0.8D0
510            Q2MAX = 2.0D08
511           ELSEIF((LHAINPUT .GE. 40450) .AND. (LHAINPUT .LE. 40467)) THEN
512            LHASET = 40450
513            LHANAME=LHAPATH(1:LHAPATHLEN)//'/a02m_nlo.LHgrid'
514            XMIN = 1.0D-7
515            Q2MIN = 0.8D0
516            Q2MAX = 2.0D08
517           ELSEIF((LHAINPUT .GE. 40550) .AND. (LHAINPUT .LE. 40567)) THEN
518            LHASET = 40550 
519            LHANAME=LHAPATH(1:LHAPATHLEN)//'/a02m_nnlo.LHgrid'
520            XMIN = 1.0D-7
521            Q2MIN = 0.8D0
522            Q2MAX = 2.0D08
523           ELSE
524            WRITE(LHAPRINT,5150)  LHASET
525            STOP
526           ENDIF          
527 C...Botje Family
528         ELSEIF((LHAINPUT .GE. 50000) .AND. (LHAINPUT .LE. 59999)) THEN
529           IF((LHAINPUT .GE. 50100) .AND. (LHAINPUT .LE. 50200)) THEN
530            LHASET = 50100
531            LHANAME=LHAPATH(1:LHAPATHLEN)//'/Botje_100.LHpdf'
532           ELSEIF((LHAINPUT .GE. 51000) .AND. (LHAINPUT .LE. 51999)) THEN
533            LHASET = 51000
534            LHANAME=LHAPATH(1:LHAPATHLEN)//'/Botje_1000.LHpdf'
535           ELSE
536            WRITE(LHAPRINT,5150)  LHASET
537            STOP
538           ENDIF          
539 C...ZEUS Family
540         ELSEIF((LHAINPUT .GE. 60000) .AND. (LHAINPUT .LE. 69999)) THEN
541           Q2MIN = 0.3D0
542           Q2MAX = 2.0D05
543           IF((LHAINPUT .GE. 60000) .AND. (LHAINPUT .LE. 60022)) THEN
544            LHASET = 60000
545            LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2002_TR.LHpdf'
546           ELSEIF((LHAINPUT .GE. 60100) .AND. (LHAINPUT .LE. 60122)) THEN
547            LHASET = 60100
548            LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2002_ZM.LHpdf'
549           ELSEIF((LHAINPUT .GE. 60200) .AND. (LHAINPUT .LE. 60222)) THEN
550            LHASET = 60200
551            LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2002_FF.LHpdf'
552           ELSEIF((LHAINPUT .GE. 60300) .AND. (LHAINPUT .LE. 60322)) THEN
553            LHASET = 60300
554            LHANAME=LHAPATH(1:LHAPATHLEN)//'/ZEUS2005_ZJ.LHpdf'
555           ELSE
556            WRITE(LHAPRINT,5150)  LHASET
557            STOP
558           ENDIF          
559 C...H1 Family
560         ELSEIF((LHAINPUT .GE. 70000) .AND. (LHAINPUT .LE. 79999)) THEN
561           Q2MIN = 1.5D0
562           Q2MAX = 3.5D04
563           XMIN = 5.7D-5
564           IF((LHAINPUT .GE. 70050) .AND. (LHAINPUT .LE. 70050)) THEN
565            LHASET = 70050
566            LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000ms.LHgrid'
567           ELSEIF((LHAINPUT .GE. 70051) .AND. (LHAINPUT .LE. 70070)) THEN
568            LHASET = 70050
569            LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000msE.LHgrid'
570           ELSEIF((LHAINPUT .GE. 70150) .AND. (LHAINPUT .LE. 70150)) THEN
571            LHASET = 70150
572            LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000dis.LHgrid'
573           ELSEIF((LHAINPUT .GE. 70151) .AND. (LHAINPUT .LE. 70170)) THEN
574            LHASET = 70150
575            LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000disE.LHgrid'
576           ELSEIF((LHAINPUT .GE. 70250) .AND. (LHAINPUT .LE. 70250)) THEN
577            LHASET = 70250
578            LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000lo.LHgrid'
579           ELSEIF((LHAINPUT .GE. 70251) .AND. (LHAINPUT .LE. 70270)) THEN
580            LHASET = 70250
581            LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000loE.LHgrid'
582 c tempoararily removed on returning to original H!2000 files
583 c          ELSEIF((LHAINPUT .GE. 70350) .AND. (LHAINPUT .LE. 70350)) THEN
584 c           LHASET = 70350
585 c           LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000lo2.LHgrid'
586 c          ELSEIF((LHAINPUT .GE. 70351) .AND. (LHAINPUT .LE. 70370)) THEN
587 c           LHASET = 70350
588 c           LHANAME=LHAPATH(1:LHAPATHLEN)//'/H12000lo2E.LHgrid'
589           ELSE
590            WRITE(LHAPRINT,5150)  LHASET
591            STOP
592           ENDIF          
593 C...GRV Family
594         ELSEIF((LHAINPUT .GE. 80000) .AND. (LHAINPUT .LE. 89999)) THEN
595           Q2MIN = 0.8D0
596           Q2MAX = 2.0D06
597           XMIN = 1.0D-9
598           IF((LHAINPUT .GE. 80050) .AND. (LHAINPUT .LE. 80051)) THEN
599            LHASET = 80050
600            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRV98nlo.LHgrid'
601           ELSEIF((LHAINPUT .GE. 80060) .AND. (LHAINPUT .LE. 80060)) THEN
602            LHASET = 80060
603            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRV98lo.LHgrid'
604           ELSE
605            WRITE(LHAPRINT,5150)  LHASET
606            STOP
607           ENDIF          
608 C...
609 C...Pions
610 C...
611 C...OW-PI Family
612         ELSEIF((LHAINPUT .GE. 210) .AND. (LHAINPUT .LE. 212)) THEN
613           Q2MIN = 4.0D0
614           Q2MAX = 2.0D03
615           XMIN = 5.0D-03
616           XMAX = 0.9998D0
617           IF((LHAINPUT .GE. 210) .AND. (LHAINPUT .LE. 212)) THEN
618            LHASET = 210
619            LHANAME=LHAPATH(1:LHAPATHLEN)//'/OWPI.LHgrid'
620           ELSE
621            WRITE(LHAPRINT,5150)  LHASET
622            STOP
623           ENDIF          
624 C...SMRS-PI Family
625         ELSEIF((LHAINPUT .GE. 230) .AND. (LHAINPUT .LE. 233)) THEN
626           Q2MIN = 5.0D0
627           Q2MAX = 1.31D06
628           XMIN = 1.0D-05
629           XMAX = 0.9998D0
630           IF((LHAINPUT .GE. 230) .AND. (LHAINPUT .LE. 233)) THEN
631            LHASET = 230
632            LHANAME=LHAPATH(1:LHAPATHLEN)//'/SMRSPI.LHgrid'
633           ELSE
634            WRITE(LHAPRINT,5150)  LHASET
635            STOP
636           ENDIF          
637 C...GRV-PI Family
638         ELSEIF((LHAINPUT .GE. 250) .AND. (LHAINPUT .LE. 252)) THEN
639           Q2MAX = 1.00D06
640           XMIN = 1.0D-05
641           XMAX = 0.9998D0
642           IF((LHAINPUT .GE. 250) .AND. (LHAINPUT .LE. 251)) THEN
643            Q2MIN = 3.0D-1
644            LHASET = 250
645            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVPI1.LHgrid'
646           ELSEIF((LHAINPUT .GE. 252) .AND. (LHAINPUT .LE. 252)) THEN
647            Q2MIN = 2.5D-1
648            LHASET = 252
649            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVPI0.LHgrid'
650           ELSE
651            WRITE(LHAPRINT,5150)  LHASET
652            STOP
653           ENDIF          
654 C...ABFKW-PI Family
655         ELSEIF((LHAINPUT .GE. 260) .AND. (LHAINPUT .LE. 263)) THEN
656           Q2MIN = 2.0D0
657           Q2MAX = 1.00D08
658           XMIN = 1.0D-03
659           XMAX = 0.9998D0
660           IF((LHAINPUT .GE. 260) .AND. (LHAINPUT .LE. 263)) THEN
661            LHASET = 260
662            LHANAME=LHAPATH(1:LHAPATHLEN)//'/ABFKWPI.LHgrid'
663           ELSE
664            WRITE(LHAPRINT,5150)  LHASET
665            STOP
666           ENDIF          
667 C...
668 C...Photons
669 C...
670 C...DO-G Family
671         ELSEIF((LHAINPUT .GE. 310) .AND. (LHAINPUT .LE. 312)) THEN
672           Q2MIN = 1.0D01
673           Q2MAX = 1.00D04
674           XMIN = 1.0D-05
675           XMAX = 0.9D0
676           IF((LHAINPUT .GE. 310) .AND. (LHAINPUT .LE. 311)) THEN
677            LHASET = 310
678            LHANAME=LHAPATH(1:LHAPATHLEN)//'/DOG0.LHgrid'
679           ELSEIF((LHAINPUT .GE. 312) .AND. (LHAINPUT .LE. 312)) THEN
680            LHASET = 312
681            LHANAME=LHAPATH(1:LHAPATHLEN)//'/DOG1.LHgrid'
682           ELSE
683            WRITE(LHAPRINT,5150)  LHASET
684            STOP
685           ENDIF          
686 C...DG-G Family
687         ELSEIF((LHAINPUT .GE. 320) .AND. (LHAINPUT .LE. 324)) THEN
688           XMIN = 1.0D-05
689           XMAX = 0.9998D0
690           LHASET = 320
691           IF((LHAINPUT .GE. 320) .AND. (LHAINPUT .LE. 321)) THEN
692            Q2MIN = 1.0D0
693            Q2MAX = 1.0D04
694 c           LHASET = 320
695            LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid'
696           ELSEIF((LHAINPUT .GE. 322) .AND. (LHAINPUT .LE. 322)) THEN
697            Q2MIN = 1.0D0
698            Q2MAX = 5.0D01
699 c           LHASET = 322
700            LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid'
701           ELSEIF((LHAINPUT .GE. 323) .AND. (LHAINPUT .LE. 323)) THEN
702            Q2MIN = 2.0D1
703            Q2MAX = 5.0D02
704 c           LHASET = 323
705            LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid'
706           ELSEIF((LHAINPUT .GE. 324) .AND. (LHAINPUT .LE. 324)) THEN
707            Q2MIN = 2.0D2
708            Q2MAX = 1.0D04
709 c           LHASET = 324
710            LHANAME=LHAPATH(1:LHAPATHLEN)//'/DGG.LHgrid'
711           ELSE
712            WRITE(LHAPRINT,5150)  LHASET
713            STOP
714           ENDIF          
715 C...LAC/GAL-G Family
716         ELSEIF((LHAINPUT .GE. 330) .AND. (LHAINPUT .LE. 334)) THEN
717           Q2MIN = 4.0D00
718           Q2MAX = 1.0D05
719           XMIN = 1.0D-04
720           XMAX = 0.9998D0
721           LHASET = 330
722           IF((LHAINPUT .GE. 330) .AND. (LHAINPUT .LE. 332)) THEN
723 c           LHASET = 330
724            LHANAME=LHAPATH(1:LHAPATHLEN)//'/LACG.LHgrid'
725           ELSEIF((LHAINPUT .GE. 333) .AND. (LHAINPUT .LE. 333)) THEN
726            Q2MIN = 1.0D00
727 c           LHASET = 333
728            LHANAME=LHAPATH(1:LHAPATHLEN)//'/LACG.LHgrid'
729           ELSEIF((LHAINPUT .GE. 334) .AND. (LHAINPUT .LE. 334)) THEN
730            Q2MIN = 4.0D00
731 c           LHASET = 334
732            LHANAME=LHAPATH(1:LHAPATHLEN)//'/LACG.LHgrid'
733           ELSE
734            WRITE(LHAPRINT,5150)  LHASET
735            STOP
736           ENDIF          
737 C...GSG/GSG96-G Family
738         ELSEIF((LHAINPUT .GE. 340) .AND. (LHAINPUT .LE. 345)) THEN
739           Q2MIN = 5.3D00
740           Q2MAX = 1.0D08
741           XMIN = 5.0D-04
742           XMAX = 0.9998D0
743           IF((LHAINPUT .GE. 340) .AND. (LHAINPUT .LE. 341)) THEN
744            LHASET = 340
745            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG1.LHgrid'
746           ELSEIF((LHAINPUT .GE. 342) .AND. (LHAINPUT .LE. 343)) THEN
747            LHASET = 342
748            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG0.LHgrid'
749           ELSEIF((LHAINPUT .GE. 344) .AND. (LHAINPUT .LE. 344)) THEN
750            LHASET = 344
751            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG961.LHgrid'
752           ELSEIF((LHAINPUT .GE. 345) .AND. (LHAINPUT .LE. 345)) THEN
753            LHASET = 345
754            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GSG960.LHgrid'
755           ELSE
756            WRITE(LHAPRINT,5150)  LHASET
757            STOP
758           ENDIF          
759 C...GRV-G Family
760         ELSEIF((LHAINPUT .GE. 350) .AND. (LHAINPUT .LE. 354)) THEN
761           Q2MIN = 3.0D-1
762           Q2MAX = 1.0D06
763           XMIN = 1.0D-05
764           XMAX = 0.9998D0
765           IF((LHAINPUT .GE. 350) .AND. (LHAINPUT .LE. 352)) THEN
766            LHASET = 350
767            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVG1.LHgrid'
768           ELSEIF((LHAINPUT .GE. 353) .AND. (LHAINPUT .LE. 353)) THEN
769            Q2MIN = 2.5D-1
770            LHASET = 353
771            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVG0.LHgrid'
772           ELSEIF((LHAINPUT .GE. 354) .AND. (LHAINPUT .LE. 354)) THEN
773            Q2MIN = 6.0D-1
774            Q2MAX = 5.0D04
775            LHASET = 354
776            LHANAME=LHAPATH(1:LHAPATHLEN)//'/GRVG0.LHgrid'
777           ELSE
778            WRITE(LHAPRINT,5150)  LHASET
779            STOP
780           ENDIF          
781 C...ACFGP-G Family
782         ELSEIF((LHAINPUT .GE. 360) .AND. (LHAINPUT .LE. 363)) THEN
783           Q2MIN = 2.0D00
784           Q2MAX = 5.5D05
785           XMIN = 1.37D-03
786           XMAX = 0.9998D0
787           IF((LHAINPUT .GE. 360) .AND. (LHAINPUT .LE. 363)) THEN
788            LHASET = 360
789            LHANAME=LHAPATH(1:LHAPATHLEN)//'/ACFGPG.LHgrid'
790           ELSE
791            WRITE(LHAPRINT,5150)  LHASET
792            STOP
793           ENDIF          
794 C...WHIT-G Family
795         ELSEIF((LHAINPUT .GE. 380) .AND. (LHAINPUT .LE. 386)) THEN
796           Q2MIN = 4.0D00
797           Q2MAX = 2.5D03
798           XMIN = 1.0D-03
799           XMAX = 0.9998D0
800           IF((LHAINPUT .GE. 380) .AND. (LHAINPUT .LE. 386)) THEN
801            LHASET = 380
802            LHANAME=LHAPATH(1:LHAPATHLEN)//'/WHITG.LHgrid'
803           ELSE
804            WRITE(LHAPRINT,5150)  LHASET
805            STOP
806           ENDIF          
807 C...SAS-G Family
808         ELSEIF((LHAINPUT .GE. 390) .AND. (LHAINPUT .LE. 398)) THEN
809           Q2MAX = 5.0D04
810           XMIN = 1.0D-05
811           XMAX = 0.9998D0
812           LHASET = 390
813           IF((LHAINPUT .GE. 390) .AND. (LHAINPUT .LE. 392)) THEN
814            Q2MIN = 3.6D-1
815 c           LHASET = 390
816            LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid'
817           ELSEIF((LHAINPUT .GE. 393) .AND. (LHAINPUT .LE. 394)) THEN
818            Q2MIN = 4.0D00
819 c           LHASET = 393
820            LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid'
821           ELSEIF((LHAINPUT .GE. 395) .AND. (LHAINPUT .LE. 396)) THEN
822            Q2MIN = 3.6D-1
823 c           LHASET = 395
824            LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid'
825           ELSEIF((LHAINPUT .GE. 397) .AND. (LHAINPUT .LE. 398)) THEN
826            Q2MIN = 4.0D00
827 c           LHASET = 397
828            LHANAME=LHAPATH(1:LHAPATHLEN)//'/SASG.LHgrid'
829           ELSE
830            WRITE(LHAPRINT,5150)  LHASET
831            STOP
832           ENDIF          
833 C...Unknown Family ?! Giving up
834         ELSE
835            WRITE(LHAPRINT,5150)  LHASET
836            STOP
837         ENDIF
838
839         LHAMEMB=LHAINPUT-LHASET
840 c....Now work out if we have already called this set/member
841         iset = 0
842         do j=1,nsets
843           if(lhaname.eq.lhanames(j).and.
844      +       lhamemb.eq.lhamembers(j)) then
845              iset = j
846           endif
847         enddo
848         if(iset.eq.0) then
849            nsets=nsets+1
850            if(nsets.gt.nmxset) then
851              if(LHASILENT.ne.1) then
852                print *,'WARNING:too many sets initialised'
853                print *,'overwriting from set 1 again'
854              endif
855              nsets = 1
856 c            stop
857            endif 
858            iset=nsets
859            lhanames(iset)=lhaname
860            lhanumbers(iset)=lhainput
861            lhamembers(iset)=lhamemb
862            xxmin(iset)=xmin
863            xxmax(iset)=xmax
864            qq2min(iset)=q2min
865            qq2max(iset)=q2max
866            CALL INITPDFSETM(iset,LHANAME)
867            CALL NUMBERPDFM(iset,LHAALLMEM)
868            IF(LHASILENT .NE. 1) THEN
869              WRITE(LHAPRINT,5151)
870              WRITE(LHAPRINT,5152) LHANAME
871              WRITE(LHAPRINT,5153) LHAALLMEM
872              WRITE(LHAPRINT,5154)
873            ENDIF
874            IF ((LHAMEMB.LT.0) .OR. (LHAMEMB.GT.LHAALLMEM)) THEN
875              WRITE(LHAPRINT,5155)  LHAMEMB
876              WRITE(LHAPRINT,5156)  LHAALLMEM
877              STOP
878            ENDIF
879
880 c        print *,'calling initpdf',lhamemb 
881 c           print *,'calling initpdfm ',iset,lhaname,lhamemb
882 c           print *,'LHAGLUE .... initializing set,member ',iset,lhamemb
883            CALL INITPDFM(iset,LHAMEMB)
884         endif      
885 c... the rest is done every time pdfset is called
886 c           print *,'setting nset to:',iset
887            call setnset(iset)
888            call setnmem(iset,lhamemb)
889            xmin = xxmin(iset)
890            xmax = xxmax(iset)
891            q2min=qq2min(iset)
892            q2max=qq2max(iset)      
893            call GetLam4M(iset,LHAMEMB,qcdl4)
894            call GetLam5M(iset,LHAMEMB,qcdl5)
895
896            QMZ = 91.1876D0
897            alphasLHA = alphasPDFM(iset,QMZ)
898            IF(LHASILENT .NE. 1) 
899      >     WRITE(LHAPRINT,5158) alphasLHA
900
901            IF(LHAPARM(17).EQ.'LHAPDF') THEN
902            NPTYPEPDFL = 1      ! Proton PDFs
903            NFLPDFL = 4
904            QCDLHA4 = QCDL4
905            QCDLHA5 = QCDL5
906            IF(LHASILENT .NE. 1) 
907      >       WRITE(LHAPRINT,5159) QCDL4, QCDL5
908            ELSE
909              NPTYPEPDFL = 1      ! Proton PDFs
910              NFLPDFL = 4
911              ALAMBDA = 0.192D0
912              QCDLHA4 = ALAMBDA
913              QCDLHA5 = ALAMBDA
914              IF(PARM(1).EQ.'NPTYPE') THEN        !  PYTHIA
915              QCDL4 = ALAMBDA
916              QCDL5 = ALAMBDA
917            ENDIF
918         ENDIF
919
920         AXMIN = XMIN
921         AXMAX = XMAX
922         AQ2MIN = Q2MIN
923         AQ2MAX = Q2MAX
924
925 C...Formats for initialization information.
926  5150 FORMAT(1X,'WRONG LHAPDF set number =',I12,' given! STOP EXE!')
927  5151 FORMAT(1X,'==============================================')
928  5152 FORMAT(1X,'PDFset name ',A80)
929  5153 FORMAT(1X,'with ',I10,' members')
930  5154 FORMAT(1X,'====  initialized. ===========================')
931  5155 FORMAT(1X,'LHAPDF problem => YOU asked for member = ',I10)
932  5156 FORMAT(1X,'Valid range is: 0 - ',I10,' Execution stopped.')
933  5157 FORMAT(1X,'Number of flavors for PDF is:',I4)
934  5158 FORMAT(1X,'Strong coupling at Mz for PDF is:',F9.5)
935  5159 FORMAT(1X,'Will use for PYTHIA QCDL4, QCDL5:',2F9.5)
936
937       RETURN
938       END
939  
940 c********************************************************************
941 c -- STRUCTA
942 c -- copy of PDFLIB to use the eks98 nuclear correction factors
943
944       SUBROUTINE STRUCTA(X,Q,A,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
945       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
946       CALL EKS98(X,Q,A,RUV,RDV,RU,RD,RS,RC,RB,RT,RG)
947       CALL STRUCTM(X,Q,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
948       UPV = RUV*UPV
949       DNV = RDV*DNV
950       USEA = RU*USEA
951       DSEA = RD*DSEA
952       STR = RS*STR
953       CHM = RC*CHM
954       BOT = RB*BOT
955       TOP = RT*TOP
956       GLU = RG*GLU
957       RETURN
958       END
959       
960 C*********************************************************************
961  
962 C...STRUCTM
963 C...Gives parton distributions according to the LHAPDF interface.
964 C...Two evolution codes used:
965 C...  EVLCTEQ for CTEQ PDF sets
966 C...  QCDNUM  for Other PDF sets
967 C...
968 C...Author: Dimitri Bourilkov  bourilkov@mailaps.org
969 C...
970 C...v4.0  21-Mar-2005  Photon/pion/new p PDFs, updated for LHAPDF v4
971 C...v3.0  23-Jan-2004
972 C...
973 C...interface to LHAPDF library
974
975       SUBROUTINE STRUCTM(DX,DQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
976
977 C...Double precision and integer declarations.
978       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
979       IMPLICIT INTEGER(I-N)
980       include 'parmsetup.inc'
981 C...Interface to LHAPDFLIB.
982       include 'pathsetup.inc'
983 c      CHARACTER*172 LHANAME
984       INTEGER LHASET, LHAMEMB
985       COMMON/LHAPDF/LHANAME, LHASET, LHAMEMB
986       SAVE /LHAPDF/
987 c...added next 2 lines for structp fix
988       integer LHAMEMBERS(nmxset),LHANUMBERS(nmxset)
989       common/LHASETS/LHANAMES,LHANUMBERS,LHAMEMBERS,nsets
990 c
991       DOUBLE PRECISION QCDLHA4, QCDLHA5
992       INTEGER NFLLHA
993       COMMON/LHAPDFR/QCDLHA4, QCDLHA5, NFLLHA
994       SAVE /LHAPDFR/
995       CHARACTER*20 LHAPARM(20)
996       DOUBLE PRECISION LHAVALUE(20)
997       COMMON/LHACONTROL/LHAPARM,LHAVALUE
998       SAVE/LHACONTROL/
999       INTEGER LHAEXTRP
1000       COMMON/LHAPDFE/LHAEXTRP
1001       SAVE /LHAPDFE/
1002       DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
1003      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
1004       COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
1005      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
1006       SAVE/LHAGLSTA/
1007 C...Interface to PDFLIB.
1008       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
1009       SAVE /W50513/
1010       DOUBLE PRECISION XMIN,XMAX,Q2MIN,Q2MAX
1011 C...Local variables
1012       DOUBLE PRECISION UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU
1013       DOUBLE PRECISION DX,DQ,X,Q,F(-6:6)
1014    
1015       X = DX
1016       Q = DQ
1017       Q2 = Q**2
1018 C...Statistics
1019       IF(LHAPARM(16).NE.'NOSTAT') THEN
1020       TOTNUM = TOTNUM+1.D0
1021       IF(X .LT. XMIN) XMINNUM = XMINNUM+1.D0
1022       IF(X .GT. XMAX) XMAXNUM = XMAXNUM+1.D0
1023       IF(Q2 .LT. Q2MIN) Q2MINNUM = Q2MINNUM+1.D0
1024       IF(Q2 .GT. Q2MAX) Q2MAXNUM = Q2MAXNUM+1.D0
1025       ENDIF
1026  
1027 C...Range of validity e.g. 10^-6 < x < 1, Q2MIN < Q^2 extended by
1028 C...freezing x*f(x,Q2) at borders.
1029       IF(LHAEXTRP .NE. 1) THEN    ! safe mode == "freeze"
1030        XIN=MAX(XMIN,MIN(XMAX,X))
1031        Q=SQRT(MAX(0D0,Q2MIN,MIN(Q2MAX,Q2)))
1032       ELSE                        ! adventurous mode == OWN RISK !
1033        XIN=X
1034       ENDIF
1035
1036       call getnset(iset)
1037 c      print *,'calling evolvepdfm:',iset
1038 C
1039 C...fix to allow STRUCTM to work for photon PDFs (Herwig does this)
1040 C...set P2 = 0.0d0 and IP2 = 0
1041       if(LHANUMBERS(iset).ge.300.and.LHANUMBERS(iset).le.399) then  
1042         P2 = 0.0d0
1043         IP2 = 0
1044         CALL EVOLVEPDFPM(iset,XIN,Q,P2,IP2,F)
1045       else
1046         CALL EVOLVEPDFM(iset,XIN,Q,F)
1047       endif
1048       GLU = F(0)
1049       DSEA = F(-1)
1050       DNV = F(1) - DSEA
1051       USEA = F(-2)
1052       UPV = F(2) - USEA
1053       STR = F(3)
1054       CHM = F(4)
1055       BOT = F(5)
1056       TOP = F(6)
1057
1058       RETURN
1059       END
1060  
1061 C*********************************************************************
1062  
1063 C...STRUCTP
1064 C...Gives parton distributions according to the LHAPDF interface.
1065 C...Used for photons.
1066 C...
1067 C...v4.0  21-Mar-2005  Photon/pion/new p PDFs, updated for LHAPDF v4
1068 C...
1069 C...interface to LHAPDF library
1070
1071       SUBROUTINE STRUCTP
1072      > (DX,DQ2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
1073
1074 C...Double precision and integer declarations.
1075       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
1076       IMPLICIT INTEGER(I-N)
1077       include 'parmsetup.inc'
1078 C...Interface to LHAPDFLIB.
1079       include 'pathsetup.inc'
1080 c      CHARACTER*172 LHANAME
1081       INTEGER LHASET, LHAMEMB
1082       COMMON/LHAPDF/LHANAME, LHASET, LHAMEMB
1083       SAVE /LHAPDF/
1084       DOUBLE PRECISION QCDLHA4, QCDLHA5
1085       INTEGER NFLLHA
1086       COMMON/LHAPDFR/QCDLHA4, QCDLHA5, NFLLHA
1087       SAVE /LHAPDFR/
1088       CHARACTER*20 LHAPARM(20)
1089       DOUBLE PRECISION LHAVALUE(20)
1090       COMMON/LHACONTROL/LHAPARM,LHAVALUE
1091       SAVE/LHACONTROL/
1092       INTEGER LHAEXTRP
1093       COMMON/LHAPDFE/LHAEXTRP
1094       SAVE /LHAPDFE/
1095       DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
1096      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
1097       COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
1098      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
1099       SAVE/LHAGLSTA/
1100 C...Interface to PDFLIB.
1101       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
1102       SAVE /W50513/
1103       DOUBLE PRECISION XMIN,XMAX,Q2MIN,Q2MAX
1104 C...Local variables
1105       DOUBLE PRECISION UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU
1106       DOUBLE PRECISION DX,DQ2,Q2,X,Q,F(-6:6)
1107  
1108       X = DX
1109       Q2 = DQ2
1110 C...Statistics
1111       IF(LHAPARM(16).NE.'NOSTAT') THEN
1112       TOTNUP = TOTNUP+1.D0
1113       IF(X .LT. XMIN) XMINNUP = XMINNUP+1.D0
1114       IF(X .GT. XMAX) XMAXNUP = XMAXNUP+1.D0
1115       IF(Q2 .LT. Q2MIN) Q2MINNUP = Q2MINNUP+1.D0
1116       IF(Q2 .GT. Q2MAX) Q2MAXNUP = Q2MAXNUP+1.D0
1117       ENDIF
1118  
1119 C...Range of validity e.g. 10^-6 < x < 1, Q2MIN < Q^2 extended by
1120 C...freezing x*f(x,Q2) at borders.
1121       Q = DSQRT(Q2)
1122       IF(LHAEXTRP .NE. 1) THEN    ! safe mode == "freeze"
1123        XIN=MAX(XMIN,MIN(XMAX,X))
1124        Q=SQRT(MAX(0D0,Q2MIN,MIN(Q2MAX,Q2)))
1125       ELSE                        ! adventurous mode == OWN RISK !
1126        XIN=X
1127       ENDIF
1128       call getnset(iset)
1129       CALL EVOLVEPDFPM(iset,XIN,Q,P2,IP2,F)
1130
1131       GLU = F(0)
1132       DSEA = F(-1)
1133       DNV = F(1) - DSEA
1134       USEA = F(-2)
1135       UPV = F(2) - USEA
1136       STR = F(3)
1137       CHM = F(4)
1138       BOT = F(5)
1139       TOP = F(6)
1140
1141       RETURN
1142       END
1143  
1144 C*********************************************************************
1145  
1146 C...PDFSTA
1147 C...For statistics ON structure functions (under/over-flows)
1148 C...
1149 C...Author: Dimitri Bourilkov  bourilkov@mailaps.org
1150 C...
1151 C...
1152 C...first introduced in v4.0  28-Apr-2005 
1153 C...
1154
1155       SUBROUTINE PDFSTA
1156
1157 C...Double precision and integer declarations.
1158       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
1159       IMPLICIT INTEGER(I-N)
1160 C...Interface to LHAPDFLIB.
1161       DOUBLE PRECISION XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
1162      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
1163       COMMON/LHAGLSTA/ XMINNUM,XMAXNUM,Q2MINNUM,Q2MAXNUM,TOTNUM,
1164      >                 XMINNUP,XMAXNUP,Q2MINNUP,Q2MAXNUP,TOTNUP
1165       SAVE/LHAGLSTA/
1166
1167       PRINT *
1168       PRINT *,'===== PDFSTA statistics for PDF under/over-flows ===='
1169       PRINT *
1170       PRINT *,'====== STRUCTM statistics for nucleon/pion PDFs ====='
1171       PRINT *
1172       PRINT *,'  total # of calls ',TOTNUM
1173       IF(TOTNUM .GT. 0.D0) THEN
1174         PERCBELOW = 100.D0*XMINNUM/TOTNUM
1175         PERCABOVE = 100.D0*XMAXNUM/TOTNUM
1176         PRINT *,'  X  below PDF min ',XMINNUM,' or ',PERCBELOW, ' %'
1177         PRINT *,'  X  above PDF max ',XMAXNUM,' or ',PERCABOVE, ' %'
1178         PERCBELOW = 100.D0*Q2MINNUM/TOTNUM
1179         PERCABOVE = 100.D0*Q2MAXNUM/TOTNUM
1180         PRINT *,'  Q2 below PDF min ',Q2MINNUM,' or ',PERCBELOW, ' %'
1181         PRINT *,'  Q2 above PDF max ',Q2MAXNUM,' or ',PERCABOVE, ' %'
1182       ENDIF
1183       PRINT *
1184       PRINT *,'========= STRUCTP statistics for photon PDFs ========'
1185       PRINT *
1186       PRINT *,'  total # of calls ',TOTNUP
1187       IF(TOTNUP .GT. 0.D0) THEN
1188         PERCBELOW = 100.D0*XMINNUP/TOTNUP
1189         PERCABOVE = 100.D0*XMAXNUP/TOTNUP
1190         PRINT *,'  X  below PDF min ',XMINNUP,' or ',PERCBELOW, ' %'
1191         PRINT *,'  X  above PDF max ',XMAXNUP,' or ',PERCABOVE, ' %'
1192         PERCBELOW = 100.D0*Q2MINNUP/TOTNUP
1193         PERCABOVE = 100.D0*Q2MAXNUP/TOTNUP
1194         PRINT *,'  Q2 below PDF min ',Q2MINNUP,' or ',PERCBELOW, ' %'
1195         PRINT *,'  Q2 above PDF max ',Q2MAXNUP,' or ',PERCABOVE, ' %'
1196       ENDIF
1197       PRINT *
1198
1199       RETURN
1200       END
1201 **********************************************************************
1202 *
1203 * $Id: lhaglue.f 209 2007-11-16 15:14:45Z whalley $
1204 *
1205 * $Log$
1206 * Revision 1.7  2005/12/02 14:50:54  whalley
1207 * Changes for new CTEQ code/AB sets
1208 *
1209 * Revision 1.6  2005/10/18 15:35:48  whalley
1210 * fix to allow LHAPATH to be user defined as well as lhapdf-config
1211 *
1212 * Revision 1.5  2005/10/18 11:47:48  whalley
1213 * Change to only set LHAPATH once per run
1214 *
1215 * Revision 1.1.1.2  1996/10/30 08:29:06  cernlib
1216 * Version 7.04
1217 *
1218 * Revision 1.1.1.1  1996/04/12 15:29:26  plothow
1219 * Version 7.01
1220 *
1221 *
1222       SUBROUTINE PFTOPDG(DX,DSCALE,DXPDF)
1223 C
1224 Cinclude "pdf/expdp.inc"
1225       double precision
1226      +       DX,DSCALE,DUPV,DDNV,DUSEA,DDSEA,DSTR,DCHM,DBOT,DTOP,DGL,
1227      +       DXPDF(-6:6)
1228 C... call STRUCTM in PDFLIB to get flavour content
1229       CALL STRUCTM(DX,DSCALE,
1230      +                   DUPV,DDNV,DUSEA,DDSEA,DSTR,DCHM,DBOT,DTOP,DGL)
1231 C... convert flavour convention of PDFLIB to PDG convention
1232       DXPDF(0) = DGL
1233       DXPDF(1) = DDNV + DDSEA
1234       DXPDF(2) = DUPV + DUSEA
1235       DXPDF(3) = DSTR
1236       DXPDF(4) = DCHM
1237       DXPDF(5) = DBOT
1238       DXPDF(6) = DTOP
1239       DXPDF(-1) = DDSEA
1240       DXPDF(-2) = DUSEA
1241       DXPDF(-3) = DSTR
1242       DXPDF(-4) = DCHM
1243       DXPDF(-5) = DBOT
1244       DXPDF(-6) = DTOP
1245 C
1246       RETURN
1247       END
1248 ****************************************************************************
1249       subroutine setPDFpath(pathname)
1250       implicit real*8 (A-H,O-Z)
1251       include 'parmsetup.inc'
1252       character*(*) pathname
1253       include 'pathsetup.inc'
1254 c      character*132 lhapath
1255       common/LHAPDFC/lhapath
1256       character*20 lhaparm(20)
1257       real*8 lhavalue(20)
1258       common/LHACONTROL/lhaparm,lhavalue
1259       lhaparm(20) = 'LHAPATH'
1260 c      do j=1,lnblnk(lhapath)
1261       do j=1,LEN_TRIM(lhapath)
1262         lhapath(j:j)=''
1263       enddo
1264       lhapath = pathname
1265       return
1266       end
1267 ***********************************************************************  
1268       subroutine lhaset(lhaparm2,lhavalue2)
1269       implicit real*8 (a-h,o-z)
1270       character*20 lhaparm(20),lhaparm2(20)
1271       real*8 lhavalue(20),lhavalue2(20)
1272       common/LHACONTROL/lhaparm,lhavalue
1273       do j=1,20
1274        lhaparm(j)=lhaparm2(j)
1275        lhavalue(j)=lhavalue2(j)
1276       enddo
1277       return
1278       end
1279 ******************************************************************
1280       subroutine setlhaparm(lparm)
1281       implicit real*8 (a-h,o-z)
1282 c      character*(*) lparm,parm
1283       character*(*) lparm
1284       character*20 lhaparm(20)
1285       real*8 lhavalue(20)
1286       common/LHACONTROL/lhaparm,lhavalue
1287       if(lparm.eq.'NOSTAT') then
1288         lhaparm(16)='NOSTAT'
1289       else if (lparm.eq.'16') then
1290         lhaparm(16)=''
1291       else if (lparm.eq.'LHAPDF') then
1292         lhaparm(17)='LHAPDF'
1293       else if (lparm.eq.'17') then
1294         lhaparm(17)=''
1295       else if (lparm.eq.'EXTRAPOLATE') then
1296         lhaparm(18)='EXTRAPOLATE'
1297       else if (lparm.eq.'18') then
1298         lhaparm(18)=''
1299       else if (lparm.eq.'SILENT') then
1300         lhaparm(19)='SILENT'
1301       else if (lparm.eq.'LOWKEY') then
1302         lhaparm(19)='LOWKEY'
1303       else if (lparm.eq.'19') then
1304         lhaparm(19)=''
1305       else
1306         print *,'WARNING from SetLHAPARM - value',lparm,' 
1307      & not recognized!'  
1308       endif     
1309       return
1310
1311       entry getlhaparm(nparm,lparm)
1312       lparm = lhaparm(nparm)
1313       return
1314       
1315       end
1316 ***************************************************************