Next: The same example in
Up: A complete example
Previous: A complete example
  Index
The example job given here is set up for batch processing.
The OPEN statements assign the input and output files, and are
somewhat computer-dependent (those given here are for a Vax).
On many systems, it may be more convenient (or necessary)
to perform the file assignments in JCL rather than from the Fortran,
but whatever the user decides,
the files must be opened and the unit numbers
communicated to Minuit before the call to MINUIT.
The same job could be run interactively, in which case the input
and output files would be assigned to the terminal,
and the ``user's data'' listed below, instead of coming from a file,
would be typed in directly to the terminal.
The User's main program
PROGRAM DSDQ
EXTERNAL FCNK0
OPEN (UNIT=5,FILE='DSDQ.DAT',STATUS='OLD')
OPEN (UNIT=6,FILE='DSDQ.OUT',STATUS='NEW',FORM='FORMATTED')
CC CALL MINTIO(5,6,7) ! Not needed, default values
CALL MINUIT(FCNK0,0) ! User routine is called FCNK0
STOP
END
The User's FCN
SUBROUTINE FCNK0(NPAR,GIN,F,X,IFLAG,FUTIL)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
REAL THPLUI, THMINI
DIMENSION X(*),GIN(*)
C this subroutine does not use FUTIL
PARAMETER (MXBIN=50)
DIMENSION THPLU(MXBIN),THMIN(MXBIN),T(MXBIN),
+ EVTP(MXBIN),EVTM(MXBIN)
DATA NBINS,NEVTOT/ 30,250/
DATA (EVTP(IGOD),IGOD=1,30)
+ /11., 9., 13., 13., 17., 9., 1., 7., 8., 9.,
+ 6., 4., 6., 3., 7., 4., 7., 3., 8., 4.,
+ 6., 5., 7., 2., 7., 1., 4., 1., 4., 5./
DATA (EVTM(IGOD),IGOD=1,30)
+ / 0., 0., 0., 0., 0., 0., 0., 0., 1., 1.,
+ 0., 2., 1., 4., 4., 2., 4., 2., 2., 0.,
+ 2., 3., 7., 2., 3., 6., 2., 4., 1., 5./
C
XRE = X(1)
XIM = X(2)
DM = X(5)
GAMS = 1.0/X(10)
GAML = 1.0/X(11)
GAMLS = 0.5*(GAML+GAMS)
IF (IFLAG .NE. 1) GO TO 300
C generate random data
STHPLU = 0.
STHMIN = 0.
DO 200 I= 1, NBINS
T(I) = 0.1*REAL(I)
TI = T(I)
EHALF = EXP(-TI*GAMLS)
TH = ((1.0-XRE)**2 + XIM**2) * EXP(-TI*GAML)
TH = TH + ((1.0+XRE)**2 + XIM**2) * EXP(-TI*GAMS)
TH = TH - 4.0*XIM*SIN(DM*TI) * EHALF
STERM = 2.0*(1.0-XRE**2-XIM**2)*COS(DM*TI) * EHALF
THPLU(I) = TH + STERM
THMIN(I) = TH - STERM
STHPLU = STHPLU + THPLU(I)
STHMIN = STHMIN + THMIN(I)
200 CONTINUE
NEVPLU = REAL(NEVTOT)*(STHPLU/(STHPLU+STHMIN))
NEVMIN = REAL(NEVTOT)*(STHMIN/(STHPLU+STHMIN))
WRITE (6,'(A)') ' LEPTONIC K ZERO DECAYS'
WRITE (6,'(A,3I10)') ' PLUS, MINUS, TOTAL=',NEVPLU,NEVMIN,NEVTOT
WRITE (6,'(A)')
+ '0 TIME THEOR+ EXPTL+ THEOR- EXPTL-'
SEVTP = 0.
SEVTM = 0.
DO 250 I= 1, NBINS
THPLU(I) = THPLU(I)*REAL(NEVPLU) / STHPLU
THMIN(I) = THMIN(I)*REAL(NEVMIN) / STHMIN
THPLUI = THPLU(I)
CCCCC remove the CCC to generate random data
CCC CALL POISSN(THPLUI,NP,IERROR)
CCC EVTP(I) = NP
SEVTP = SEVTP + EVTP(I)
THMINI = THMIN(I)
CCC CALL POISSN(THMINI,NM,IERROR)
CCC EVTM(I) = NM
SEVTM = SEVTM + EVTM(I)
IF (IFLAG .NE. 4)
+ WRITE (6,'(1X,5G12.4)') T(I),THPLU(I),EVTP(I),THMIN(I),EVTM(I)
250 CONTINUE
WRITE (6, '(A,2F10.2)') ' DATA EVTS PLUS, MINUS=', SEVTP,SEVTM
C calculate chisquare
300 CONTINUE
CHISQ = 0.
STHPLU = 0.
STHMIN = 0.
DO 400 I= 1, NBINS
TI = T(I)
EHALF = EXP(-TI*GAMLS)
TH = ((1.0-XRE)**2 + XIM**2) * EXP(-TI*GAML)
TH = TH + ((1.0+XRE)**2 + XIM**2) * EXP(-TI*GAMS)
TH = TH - 4.0*XIM*SIN(DM*TI) * EHALF
STERM = 2.0*(1.0-XRE**2-XIM**2)*COS(DM*TI) * EHALF
THPLU(I) = TH + STERM
THMIN(I) = TH - STERM
STHPLU = STHPLU + THPLU(I)
STHMIN = STHMIN + THMIN(I)
400 CONTINUE
THP = 0.
THM = 0.
EVP = 0.
EVM = 0.
IF (IFLAG .NE. 4) WRITE (6,'(1H0,10X,A,20X,A)')
+ 'POSITIVE LEPTONS','NEGATIVE LEPTONS'
IF (IFLAG .NE. 4) WRITE (6,'(A,3X,A)')
+ ' TIME THEOR EXPTL CHISQ',
+ ' TIME THEOR EXPTL CHISQ'
C
DO 450 I= 1, NBINS
THPLU(I) = THPLU(I)*SEVTP / STHPLU
THMIN(I) = THMIN(I)*SEVTM / STHMIN
THP = THP + THPLU(I)
THM = THM + THMIN(I)
EVP = EVP + EVTP(I)
EVM = EVM + EVTM(I)
C Sum over bins until at least four events found
IF (EVP .GT. 3.) THEN
CHI1 = (EVP-THP)**2/EVP
CHISQ = CHISQ + CHI1
IF (IFLAG .NE. 4)
+ WRITE (6,'(1X,4F9.3)') T(I),THP,EVP,CHI1
THP = 0.
EVP = 0.
ENDIF
IF (EVM .GT. 3) THEN
CHI2 = (EVM-THM)**2/EVM
CHISQ = CHISQ + CHI2
IF (IFLAG .NE. 4)
+ WRITE (6,'(42X,4F9.3)') T(I),THM,EVM,CHI2
THM = 0.
EVM = 0.
ENDIF
450 CONTINUE
F = CHISQ
RETURN
END
The user's data to drive Minuit.
set title
FIT DELTA S/ DELTA Q RULE TO LEPTONIC K ZERO DECAYS
parameters
1 'Real(X)' 0. .1
2 'Imag(X)' 0. .1
5 'Delta M' .535 .01
10 'K Short LT' .892
11 'K Long LT' 518.3
fix 5
migr
print 0
set print 0
minos
restore
migrad
minos
set param 5 0.535
fix 5
contour 1 2
stop
Next: The same example in
Up: A complete example
Previous: A complete example
  Index
Back to
CERN
| IT
| ASD
| CERN Program Library Home
MG
(last mod. 1998-08-19)