* * * * * * example_abcfit.html * * *
C-----------------------------------------------------------------------
      PROGRAM EXAMPLE_ABCFIT
C
C THIS EXAMPLE PROGRAM SHOWS A SERIES OF DIFFERENT ABCFIT
C CALLS TO ILLUSTRATE THE USE AND POSSIBILITIES OF THE PACKAGE
C
C-----------------------------------------------------------------------
      implicit none 
C------------------ABCFIT INCLUDE FILE(S)------------------
#include "abcfit_setup.inc"
#include "abcfit.inc"
#include "abcfit_bmatrix.inc"
C--------------INPUT PARAMETERS FOR ABCFIT--------------
      INTEGER NJET,ITF,ITYPP,ITEVOL,NUP
      REAL    M0(3),G0(3),CVAL(4),P_REC(4,NPARTICLES)
C--------------OUTPUT PARAMETERS FOR ABCFIT-------------
      INTEGER NDF,IERR
      REAL    CHI2T,P_FIT(4,NPARTICLES)
C--------------INPUT PARAMETERS FOR CY02PM--------------
      INTEGER LIST(NPARTICLES,2)
C--------------OUTPUT PARAMETERS FOR CY02PM-------------
      INTEGER NDIM
      REAL ERRMTR(PLEN,PLEN),PULL(PLEN),COVP(4*NPARTICLES,4*NPARTICLES)
     &     ,COVM(2,2)
C-------------------------------------------------------

C INTERNAL PARAMETERS
      INTEGER I,J,K,PARIN(7)
      REAL SUM(4)

C---------PARAMETER INITIALISATION FOR ABCFIT-----------
C DON'T CALL AIBI_EVOL_USER TO GET PARAMETERISATION
C USE AIBI_EVOL FROM ABCFIT TO GIVE PARAMETRISATION DATA
      DATA USER_AIBI_EVOL /.FALSE./
C---------PARAMETER INITIALISATION FOR CY02PM-----------
C LIST SPECIFIES HOW TO COMBINE PARTICLES IN THE CALCULATION
C OF THE MASS-COVARIANCE MATRIX. (ZERO TERMINATES A ROW)
      DATA LIST /1,2,0,0,0,0,  ! MASS1 IS MADE FROM 1+2
     &           3,4,0,0,0,0/  ! MASS2 IS MADE FROM 3+4
      DATA Eindex /1,2,0,0,0,0, ! MASS1 IS MADE FROM 1+2
     &           3,4,0,0,0,0,  ! MASS2 IS MADE FROM 3+4
     &           0,0,0,0,0,0/ ! MASS2 IS MADE FROM 3+4
C-------------------------------------------------------
C
C START OF CODE -- FIRST FILL AN ARRAY OF INPUT MOMENTA
C USED IN THE FOLLOWING FOR ALL EXAMPLES...
C
C PARTICLE ONE
      P_REC(1,1)=2.67377        ! PX
      P_REC(2,1)=13.5278        ! PY
      P_REC(3,1)=-14.7699       ! PZ
      P_REC(4,1)=21.5475        ! E
C PARTICLE TWO
      P_REC(1,2)=-36.0753       ! PX
      P_REC(2,2)=-33.4628       ! PY
      P_REC(3,2)=32.5065        ! PZ
      P_REC(4,2)=64.3082        ! E
C PARTICLE THREE
      P_REC(1,3)=35.4921        ! PX
      P_REC(2,3)=-19.6482       ! PY
      P_REC(3,3)=-32.833        ! PZ
      P_REC(4,3)=52.1897        ! E
C PARTICLE FOUR
      P_REC(1,4)=-2.09058       ! PX
      P_REC(2,4)=39.5834        ! PY
      P_REC(3,4)=15.0964        ! PZ
      P_REC(4,4)=42.416         ! E
C PARTICLE FIVE -- YES! WHY NOT? WHEN ABCFIT CAN DO IT!
C THIS COULD A THREE-JET LIKE W DECAY....
      P_REC(1,5)=-2.13801       ! PX
      P_REC(2,5)=18.2512        ! PY
      P_REC(3,5)=7.74521        ! PZ
      P_REC(4,5)=22.207         ! E
C
C=========================================================================
C
C DONE -- NOW THE EXAMPLES
C
C LIST OF EXAMPLES:
C
C EXAMPLE 1: QQQQ (NJET=4, NUP=0, ALEPH PAR, 4C)
C EXAMPLE 2: QQQQ (NJET=4, NUP=0, ALEPH PAR, 4C, FIXED JET MASSES)
C EXAMPLE 3: QQQQ (NJET=4, NUP=0, DELPHI PAR, 5C + 3 TIMES MINDEX)
C EXAMPLE 4: QQQQ (NJET=4, NUP=0, DELPHI PAR, 6C (ZZ CONSTRAINTS) WITH ALPHAS)
C EXAMPLE 5: LLQQ (NJET=4, NUP=0, DELPHI PAR, 5C (ONE Z CONSTRAINT))
C EXAMPLE 6: QQLV (NJET=4, NUP=1, DELPHI PAR, 1C, RECO BINNING)
C EXAMPLE 7: QQLV (NJET=4, NUP=1, DELPHI PAR, 2C("EQUAL ENERGY"), TRUE BINNING)
C EXAMPLE 8: QQLV (NJET=4, NUP=1, DELPHI PAR, 2C("EQUAL MASS"), TRUE BINNING)
C EXAMPLE 9: QGQLV (NJET=5, NUP=1, DELPHI PAR, 1C, RECO BINNING)
C EXAMPLE 10: (Q+Q)LV  (NJET=3, NUP=1, DELPHI PAR, 1C, RECO BINNING)
C EXAMPLE 11: (Q+Q)LV  (NJET=3, NUP=1, DELPHI PAR, MINDEX, 2C, RECO BINNING)
C EXAMPLE 12: QQGAMMA  (NJET=2, NUP=0, DELPHI PAR, 3C (NO PZ), RECO BINNING)
C
C=========================================================================
C
C EXAMPLE 1: QQQQ (NJET=4, NUP=0, ALEPH PAR, 4C)
C
C SET NUMBER OF UNMEASURED PARTICLES LOCATED AT THE END OF P_REC ARRAY
C
      NUP=1
C
C SET TOTAL NUMBER OF PARTICLES
C
      NJET=4
C                 
C SET VALUES OF FOUR-MOMENTUM CONSTRAINS FOR THE FITTED SYSTEM
C
      CVAL(1)=0.                ! SUM(PX)=CVAL(1)
      CVAL(2)=0.                ! SUM(PY=CVAL(2)
      CVAL(3)=0                 ! SUM(PZ=CVAL(3)
      CVAL(4)=183.              ! SUM(E)=ETOT=CVAL(4)
C
C SET VALUES OF MASS CONSTRAINTS (IF USED -- WE SET THEM ANYWAY)
C
      DO I=1,3
        M0(I)=80.5
        G0(I)=2.7
      ENDDO
      
c      P_REC(1,6)=0.001       ! PX
c      P_REC(2,6)=0.001        ! PY
c      P_REC(3,6)=0.001        ! PZ
c      P_REC(4,6)=0.05
      
C
C WHICH CONSTRAINS TO USE??
C
      ITF=8      ! 4C=4NDF fit
C
C WHICH KIND OF PARAMETRISATION? WE TRY ALEPH (DELPHI IS RECOMMENDED)
C AND HAVE FULL CORRECTION (BOTH TRANSVERSE AND LONGITUDINAL) AND
C THE FITTED JET MASSES SCALE WITH FITTED MOMENTA
C
C           +---- SCALED JET-MASSES=0 (OLD MATHKINE WAY)
C           |+--- FULL CORRECTION=0
C           ||+-- ALEPH=0
C           VVV
      DO I=1,NJET
        PARIN(I)=1
      ENDDO  
C
C WHICH PARAMETRISATION DATA TO USE? DO WE WANT NON-DIAGONAL
C COVARIANCE? TRUE OR RECO BINNING? WHICH *TAG* SHOULD WE USE?
C HERE WE DECIDE TO USE A FILE WITH TAG=1, TRUE BINNING AND DIAGONAL
C COVARIANCE MATRIX
C
C            +---- TRUE=1
C            |+--- DIAGONAL=0
C            ||+-- TAG=1
C            VVV
      ITEVOL=001
C
C WITH THESE VALUES OF ITYPP AND ITEVOL ABCFIT WILL LOOK FOR THE
C PARAMETRISATION FILES NAMED:
C
C          AIBI_EVOL_0000_001.DAT (RECO BINNING FILE --
C                                  NEEDED TO START TRUE FIT)
C
C          AIBI_EVOL_0000_101.DAT (TRUE BINNING FILE)
C
C _BUT_ NOW WE ARE READY TO CALL ABCFIT :-)
C
      P_rec(           1,1)=  -31.99615    
      P_rec(           2,1)= -0.2356567    
      P_rec(           3,1)=   24.40369    
      P_rec(           4,1)=   44.36548    
      P_rec(           1,2)=   60.87659    
      P_rec(           2,2)=  -16.85388    
      P_rec(           3,2)=   31.44922    
      P_rec(           4,2)=   72.15112    
      P_rec(           1,3)=  -26.79729    
      P_rec(           2,3)=   14.52361    
      P_rec(           3,3)=  -31.28325    
      P_rec(           4,3)=   43.67712    
      P_rec(           1,4)=  -2.083147    
      P_rec(           2,4)=   2.565930    
      P_rec(           3,4)=  -24.56966    
      P_rec(           4,4)=   24.79096    

      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,PARIN,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 1                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 1                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '

      nup=0
      NJET=5

      IF (P_REC(4,1)+P_REC(4,2)-P_REC(4,3)-P_REC(4,4).GT.0) THEN
        
        EINDEX(1,1)=1
        EINDEX(2,1)=2
        EINDEX(3,1)=0
        EINDEX(1,2)=3
        EINDEX(2,2)=4
        EINDEX(3,2)=5
        EINDEX(4,2)=0

        LIST(1,1)=1
        LIST(2,1)=2
        LIST(3,1)=0
        LIST(1,2)=3
        LIST(2,2)=4
        LIST(3,2)=5
        LIST(4,2)=0
      ELSE
        EINDEX(1,1)=1
        EINDEX(2,1)=2
        EINDEX(3,1)=5
        EINDEX(4,1)=0
        EINDEX(1,2)=3
        EINDEX(2,2)=4
        EINDEX(3,2)=0
        EINDEX(4,2)=0

        LIST(1,1)=1
        LIST(2,1)=2
        LIST(3,1)=5
        LIST(4,1)=0
        LIST(1,2)=3
        LIST(2,2)=4
        LIST(3,2)=0
        LIST(4,2)=0
      ENDIF
      PRINT*,'EINDEX',((EINDEX(I,J),I=1,3),J=1,2)
      PRINT*,' '

      do i=1,6
        parin(i)=10
      enddo
      
      P_REC(1,5)=0.00001       ! PX
      P_REC(2,5)=0.00001         ! PY
      P_REC(3,5)=0.00001 ! PZ
      P_REC(4,5)=abs(p_rec(4,1)+p_rec(4,2)-p_rec(4,3)-p_rec(4,4))

      I=4
      j=1
c      P_REC(4,5)=SQRT((P_REC(1,i)**2+P_REC(2,i)**2+P_REC(3,i)**2)
c     &     /(P_REC(1,i)**2+P_REC(3,i)**2))
c      P_REC(1,5)=dble(j)*P_REC(3,i)*P_REC(4,5)
c      P_REC(2,5)=0.0
c      P_REC(3,5)=-dble(j)*P_REC(1,i)*P_REC(4,5)
c      p_rec(4,5)=sqrt(P_REC(1,5)**2+P_REC(2,5)**2+P_REC(3,5)**2)
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                    SOLUTION                     **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      PRINT*,'INPUT'
      EINDEX(1,1)=1
      EINDEX(2,1)=2
      EINDEX(3,1)=0
      EINDEX(4,1)=0
      EINDEX(1,2)=3
      EINDEX(2,2)=4
      EINDEX(3,2)=5
      EINDEX(4,2)=6
        LIST(1,1)=1
        LIST(2,1)=2
        LIST(3,1)=0
        LIST(4,1)=0
        LIST(1,2)=3
        LIST(2,2)=4
        LIST(3,2)=5
        LIST(4,2)=6
      CALL PRINTOUT(NJET,LIST,IERR,NDF,0,P_REC)

      CALL ABCFITKERNEL(0,NJET,NUP,P_REC,parin,ITF,CVAL,M0,G0,p_rec
     &     ,ITEVOL,P_FIT,CHI2T,NDF,IERR)
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  SOLUTION                       **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      DO J=1,4
        P_FIT(J,I)=P_FIT(J,I)+P_FIT(J,NJET)
      ENDDO  
     
        
      NJET=4
      nup=1
      EINDEX(3,1)=0
      EINDEX(1,2)=3
      EINDEX(2,2)=4
      EINDEX(3,2)=0
      do i=1,6
        parin(i)=1
      enddo
      itf=8
      
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 REFIT                           =='
      PRINT*,'====================================================='
      PRINT*,' '
      PRINT*,'=============== INPUT REFIT ========================='
      list(3,1)=0
      list(1,2)=3
      list(2,2)=4
      list(3,2)=0
      
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
     
      CALL ABCFITKERNEL(1,NJET,NUP,p_rec,parin,ITF,CVAL,M0,G0,p_rec
     &     ,ITEVOL,P_FIT,CHI2T,NDF,IERR)
      PRINT*,'=============== OUTPUT REFIT ========================='
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '

      STOP
C
C=========================================================================
C
C EXAMPLE 2: QQQQ (NJET=4, NUP=0, ALEPH PAR, 4C, FIXED JET MASSES)
C
C HERE WE DO ALMOST THE SAME AS FOR 1), BUT HAVE FIXED JET-MASSES (_NOT_
C JET-JET MASSES!!!!!). FOR THIS WE ONLY NEED TO CHANGE ITYPP.
C
C WHICH KIND OF PARAMETRISATION? WE TRY ALEPH (DELPHI IS RECOMMENDED)
C AND HAVE FULL CORRECTION (BOTH TRANSVERSE AND LONGITUDINAL) AND
C THE FITTED JET MASSES ARE _FIXED_
C
C           +---- FIXED JET-MASSES=1
C           |+--- FULL CORRECTION=0
C           ||+-- ALEPH=0
C           VVV
      ITYPP=100
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 2                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 3: QQQQ (NJET=4, NUP=0, DELPHI PAR, 5C + 3 TIMES MINDEX)
C
C IN THIS EXAMPLE WE ILLUSTRATE THE USE OF "MASS-CONSTRAIN" REDEFINITION
C TO GIVE US THE THREE MASS COMBINATIONS, RATHER THAN CHANGING THE PARTICLE
C ORDER IN THE ABCFIT CALL. MOST OF ABCFIT INPUT VARIABLES ARE THE SAME
C AS FOR 2).
C
C WHICH KIND OF PARAMETRISATION? WE TRY DELPHI (RECOMMENDED)
C AND HAVE FULL CORRECTION (BOTH TRANSVERSE AND LONGITUDINAL) AND
C THE FITTED JET MASSES SCALE WITH FITTED MOMENTA
C
C           +---- SCALED JET-MASSES=0 (OLD MATHKINE WAY)
C           |+--- FULL CORRECTION=0
C           ||+-- DELPHI=0
C           VVV
      ITYPP=001
C
C WHICH CONSTRAINS TO USE??
C
      ITF=4      ! 4C=4NDF fit

C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 3                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
C
C NOW CHANGE THE MASS CONSTRAIN SETUP: USE MINDEX (LOCATED IN
C "abcfit_bmatrix.inc"
C
      MINDEX(1,1)=1             ! MASS1
      MINDEX(2,1)=3             ! MASS1
      MINDEX(1,2)=2             ! MASS2
      MINDEX(2,2)=4             ! MASS2
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
C
C NOW CHANGE THE MASS CONSTRAIN SETUP: USE MINDEX (LOCATED IN
C "abcfit_bmatrix.inc"
C
      MINDEX(1,1)=1             ! MASS1
      MINDEX(2,1)=4             ! MASS1
      MINDEX(1,2)=2             ! MASS2
      MINDEX(2,2)=3             ! MASS2
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
C
C NOW RESET THE MASS CONSTRAIN SETUP: USE MINDEX (LOCATED IN
C "abcfit_bmatrix.inc"
C
      MINDEX(1,1)=1             ! MASS1
      MINDEX(2,1)=2             ! MASS1
      MINDEX(1,2)=3             ! MASS2
      MINDEX(2,2)=4             ! MASS2
C
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 4: QQQQ (NJET=4, NUP=0, DELPHI PAR, 6C (ZZ CONSTRAINTS) WITH ALPHAS)
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 3).
C
C SET VALUES OF MASS CONSTRAINTS
C
      DO I=1,2
        M0(I)=91.2
        G0(I)=2.5
      ENDDO
C
C WHICH CONSTRAINS TO USE??
C
C         +--- ALPHAS FOLLOW GAUSSIAN=0
C         |+-- CHOICE OF CONSTRAINTS
C         VV
      ITF=07      ! 6C=6NDF WITH
C                  ALPHA(1,2)*M(1,2)=M0(1) AND ALPHA(3,4)*M(3,4)=M0(2)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 4                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 5: LLQQ (NJET=4, NUP=0, DELPHI PAR, 5C (ONE Z CONSTRAINT))
C
C THIS EXAMPLE COULD BE FOR A ZH EVENT...
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 4).
C
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS
C          V
      ITF= 2      ! 5C=5NDF WITH M(1,2)=M0(1)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 5                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 6: QQLV (NJET=4, NUP=1, DELPHI PAR, 1C, RECO BINNING)
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 5).
C
C THE NEUTRINO IS AN UNMEASURED PARTICLE AND SHOULD ONLY ENTER
C IN CONTRAINT FUNCTION -- MUST BE LAST PARTICLE IN ARRAY!
C
C THE *CORRECT* STARTING GUESS FOR THE NEUTRINO IS THE MISSING
C MOMENTUM AND MASSLESS!!!!:
C
      DO I=1,3
        P_REC(I,4)=0-(P_REC(I,1)+P_REC(I,2)+P_REC(I,3)) ! NEUTRINO 
      ENDDO
      P_REC(4,4)=SQRT(P_REC(1,4)**2+P_REC(2,4)**2+P_REC(3,4)**2) 
C
C SET NUMBER OF UNMEASURED PARTICLES LOCATED AT THE END OF P_REC ARRAY
C
      NUP=1
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS
C          V
      ITF= 1      ! "4"C=1NDF (SOCALLED 1C FIT, BUT IS ACTUALLY A 1
C                              DEGREE OF FREEDOM FIT )
C
C WHICH PARAMETRISATION DATA TO USE? DO WE WANT NON-DIAGONAL
C COVARIANCE? TRUE OR RECO BINNING? WHICH *TAG* SHOULD WE USE?
C HERE WE DECIDE TO USE A FILE WITH TAG=1, TRUE BINNING AND DIAGONAL
C COVARIANCE MATRIX
C
C            +---- RECO=0
C            |+--- DIAGONAL=0
C            ||+-- TAG=1
C            VVV
      ITEVOL=001
C
C WITH THESE VALUES OF ITYPP AND ITEVOL ABCFIT WILL LOOK FOR THE
C PARAMETRISATION FILES NAMED:
C
C          AIBI_EVOL_1111_001.DAT (RECO BINNING FILE)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 6                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 7: QQLV (NJET=4, NUP=1, DELPHI PAR, 2C("EQUAL ENERGY"), TRUE BINNING)
C
C IN THIS EXAMPLE WE ILLUSTRATE THE USE OF THE EQUAL ENERGY CONSTRAINT
C WHICH CAN BE USED TO GIVE EQUAL MASS ON A NUMERICAL BASIS (IS FASTER)
C BUT CAN ALSO BE USED MORE SOPHISTICATED OF CAUSE...
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 6).
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS (EQUAL ENERGY)
C          V
      ITF= 8      ! "5"C=2NDF (SOCALLED 2C FIT, BUT IS ACTUALLY A 2
C                              DEGREE OF FREEDOM FIT!)
C
C WHICH PARAMETRISATION DATA TO USE? DO WE WANT NON-DIAGONAL
C COVARIANCE? TRUE OR RECO BINNING? WHICH *TAG* SHOULD WE USE?
C HERE WE DECIDE TO USE A FILE WITH TAG=1, TRUE BINNING AND DIAGONAL
C COVARIANCE MATRIX
C
C            +---- TRUE=1
C            |+--- DIAGONAL=0
C            ||+-- TAG=1
C            VVV
      ITEVOL=101
C
C WITH THESE VALUES OF ITYPP AND ITEVOL ABCFIT WILL LOOK FOR THE
C PARAMETRISATION FILES NAMED:
C
C          AIBI_EVOL_1111_001.DAT (RECO BINNING FILE --
C                                  NEEDED TO START TRUE FIT)
C
C          AIBI_EVOL_1111_101.DAT (TRUE BINNING FILE)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 7                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 8: QQLV (NJET=4, NUP=1, DELPHI PAR, 2C("EQUAL MASS"), TRUE BINNING)
C
C IN THIS EXAMPLE WE ILLUSTRATE THE USE OF THE *REAL* EQUAL MASS CONSTRAINT
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 7).
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS (EQUAL MASS)
C          V
      ITF= 4      ! "5"C=2NDF (SOCALLED 2C FIT, BUT IS ACTUALLY A 2
C                              DEGREE OF FREEDOM FIT!)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 8                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 9: QGQLV (NJET=5, NUP=1, DELPHI PAR, 1C, RECO BINNING)
C
C IN THIS EXAMPLE WE ILLUSTRATE HOW TO FIT WITH NJET>4. THIS COULD BE A
C WW -> QQGLUON LV OR A LL QQGLUON OR .....
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 8).
C
C REMEMBER THAT UNMEASURED PARTICLES MUST BE AT THE END OF P_REC
C SO SWAP APPROPRIATELY (1 AND 2 IS OKAY AND 3->4, 4->5 AND 5->3)
C
      CALL PSWAP (4,5,P_REC)
      CALL PSWAP (3,4,P_REC)
C
C WE NEED ALSO TO SET LIST TO GIVE THE RIGHT MASS COMBINATIONS (AND
c OPTIONAL ALSO MINDEX IF WE WANT TO USE EQUAL MASS CONSTRAINTS)
C
      LIST(3,1)=3
      LIST(1,2)=4
      LIST(2,2)=5
C
C SET TOTAL NUMBER OF PARTICLES
C
      NJET=5
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS
C          V
      ITF= 1      ! "4"C=1NDF (SOCALLED 1C FIT, BUT IS ACTUALLY A 1
C                              DEGREE OF FREEDOM FIT )
C
C WHICH PARAMETRISATION DATA TO USE? DO WE WANT NON-DIAGONAL
C COVARIANCE? TRUE OR RECO BINNING? WHICH *TAG* SHOULD WE USE?
C HERE WE DECIDE TO USE A FILE WITH TAG=1, TRUE BINNING AND DIAGONAL
C COVARIANCE MATRIX
C
C            +---- RECO=0
C            |+--- DIAGONAL=0
C            ||+-- TAG=1
C            VVV
      ITEVOL=001
C
C WITH THESE VALUES OF ITYPP AND ITEVOL ABCFIT WILL LOOK FOR THE
C PARAMETRISATION FILES NAMED:
C
C                   NJET=5
C                    \   /
C          AIBI_EVOL_11111_001.DAT (RECO BINNING FILE)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 9                      **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 10: (Q+Q)LV  (NJET=3, NUP=1, DELPHI PAR, 1C, RECO BINNING)
C
C IN THIS EXAMPLE WE ILLUSTRATE HOW TO FIT WITH NJET<4. THIS COULD BE A
C WW -> W_HAD LV OR A QQGAMMA OR .....
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 9).
C
C FIRST WE MAKE A SUM PARTICLE FROM 1 AND 2
C
      DO I=1,4
        P_REC(I,1)=P_REC(I,1)+P_REC(I,2)
      ENDDO
C
C THEN WE SWAP BACK THE LEPTON AND THE UNMEASURED NEUTRINO, WHICH MUST
C BE AT THE END OF P_REC
C
      CALL PSWAP (2,4,P_REC)
      CALL PSWAP (3,5,P_REC)
C
C WE NEED ALSO TO SET LIST TO GIVE THE RIGHT MASS COMBINATIONS (AND
c OPTIONAL ALSO MINDEX IF WE WANT TO USE EQUAL MASS CONSTRAINTS)
C
      LIST(2,1)=0 ! END LIST FOR MASS1 AFTER THE FIRST PARTICLE
      LIST(3,1)=0
      LIST(1,2)=2
      LIST(2,2)=3
C
C SET TOTAL NUMBER OF PARTICLES
C
      NJET=3
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS
C          V
      ITF= 1      ! "4"C=1NDF (SOCALLED 1C FIT, BUT IS ACTUALLY A 1
C                              DEGREE OF FREEDOM FIT )
C
C WITH THE CURRENT VALUES OF ITYPP AND ITEVOL ABCFIT WILL LOOK FOR THE
C PARAMETRISATION FILES NAMED:
C
C                   NJET=3
C                    \   /
C          AIBI_EVOL_111_001.DAT (RECO BINNING FILE)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 10                     **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 11: (Q+Q)LV  (NJET=3, NUP=1, DELPHI PAR, MINDEX, 2C, RECO BINNING)
C
C NOW WE WILL DO A EQUAL MASS FIT WITH ONLY THREE PARTICLES. THEREFORE
C WE NEED TO MODIFY THE MINDEX ARRAY
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 10).
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS
C          V
      ITF= 4      ! "5"C=2NDF (SOCALLED 2C FIT, BUT IS ACTUALLY A 2
C                              DEGREE OF FREEDOM FIT )
C
C NOW CHANGE THE MASS CONSTRAIN SETUP: USE MINDEX (LOCATED IN
C "abcfit_bmatrix.inc"
C
      MINDEX(1,1)=1             ! MASS1
      MINDEX(2,1)=0             ! END OF MASS1
      MINDEX(1,2)=2             ! MASS2
      MINDEX(2,2)=3             ! MASS2
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 11                     **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,MINDEX,IERR,NDF,CHI2T,P_FIT)
C
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C EXAMPLE 12: QQGAMMA (NJET=2, NUP=0, DELPHI PAR, 2C(NO E OR PZ), RECO BINNING)
C
C IN THIS EXAMPLE WE FIT A 2 JET EVENT, BUT DON'T USE THE PZ AND E CONSTRAIN.
C THIS COULD BE A QQGAMMA EVENT WHERE ONE WANTS THE GAMMA TO GO IN THE 
C BEAM-PIPE. OF CAUSE ONE COULD ALSO FIT WITH THE GAMMA AS A UNMEASURED
C PARTICLE (SEE EXAMPLE 11).
C
C AGAIN: WE ONLY CHANGE PARAMETERS WITH RESPECT TO 11).
C
C MAKE A SUM PARTICLE FROM 2 AND 3 (BUT SCREW UP PZ)
C
      DO I=1,4
        IF (I.NE.3) P_REC(I,2)=P_REC(I,2)+P_REC(I,3)
      ENDDO
C
C WHICH CONSTRAINS TO USE??
C
C          +-- CHOICE OF CONSTRAINTS
C          V
      ITF= 1      ! 4C=4NDF
C
C SET NUMBER OF UNMEASURED PARTICLES LOCATED AT THE END OF P_REC ARRAY
C
      NUP=0
C
C SET TOTAL NUMBER OF PARTICLES
C
      NJET=2
C
C NOW SWITCH OF THE E AND PZ CONSTRAINT BY SETTING THE VALUE LARGE NEGATIVE
C OF THE ENERGY CONSTRAINT AND EVEN GREATER FOR PZ CONSTRAINT
C
      CVAL(3)=2000.0
      CVAL(4)=-1000.0
C
C WE NEED ALSO TO SET LIST TO GIVE THE RIGHT MASS COMBINATIONS (AND
c OPTIONAL ALSO MINDEX IF WE WANT TO USE EQUAL MASS CONSTRAINTS)
C
      LIST(1,2)=2
      LIST(2,2)=0
C
C WITH THE CURRENT VALUES OF ITYPP AND ITEVOL ABCFIT WILL LOOK FOR THE
C PARAMETRISATION FILES NAMED:
C
C                   NJET=2
C                   \  /
C          AIBI_EVOL_111_001.DAT (RECO BINNING FILE)
C
C NOW WE ARE READY TO CALL ABCFIT :-)
C
      CALL ABCFIT(NJET,NUP,P_REC,ITF,CVAL,M0,G0,ITYPP,ITEVOL,P_FIT,CHI2T
     &  ,NDF,IERR)
C
C SO, WHAT DID WE GET?
C
      PRINT*,' '
      PRINT*,'*****************************************************'
      PRINT*,'**                  EXAMPLE 12                     **'
      PRINT*,'*****************************************************'
      PRINT*,' '
      CALL PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      PRINT*,' '
      PRINT*,'====================================================='
      PRINT*,'==                 END OF  EXAMPLE                 =='
      PRINT*,'====================================================='
      PRINT*,' '
C
C=========================================================================
C
C DONE
C                  
      END
C
      SUBROUTINE PRINTOUT(NJET,LIST,IERR,NDF,CHI2T,P_FIT)
      IMPLICIT NONE

#include "abcfit_setup.inc"

      INTEGER NJET,LIST(NPARTICLES,2),IERR,NDF
      REAL CHI2T,P_FIT(4,NPARTICLES)

      INTEGER I,J,K,NDIM
      REAL SUM(4),COVM(2,2),COVP(4*NPARTICLES,4*NPARTICLES),ERRMTR(PLEN
     &     ,PLEN),PULL(PLEN),CORR

      PRINT*,'-------------------FIT OUTPUT------------------'
      PRINT'(1X,A,I4,A,F8.3,A,I2)','STATUS:',IERR,'    CHI**2=',CHI2T
     &  ,' /',NDF
      CALL VZERO(SUM,4)
      DO I=1,NJET
        DO J=1,4
          SUM(J)=SUM(J)+P_FIT(J,I)
        ENDDO
        PRINT'(1X,A8,I2,A,4F12.3)','PARTICLE',I,':',(P_FIT(J,I),J=1,4)
      ENDDO
      PRINT'(1X,A11,4F12.3)','SUM:       ',(SUM(J),J=1,4)
C
C
C NOW GET THE EVENT-BY-EVENT ERRORS ON MOMENTA AND MASS-COMBINATIONS
C GIVEN BY LIST
C
      CALL CY02PM(LIST,NDIM,ERRMTR,PULL,COVP,COVM)
C
      CORR=0.0
     
      IF (COVM(1,1)*COVM(2,2).GT.0.0) CORR=COVM(1,2)/SQRT(COVM(1,1)
     &  *COVM(2,2))
C
      I=1
      DO WHILE(LIST(1,I).GT.0.AND.I.LE.2)
        J=1
        CALL VZERO(SUM,4)
        DO WHILE(LIST(J,I).GT.0.AND.J.LE.NPARTICLES)
          DO K=1,4
            SUM(K)=SUM(K)+P_FIT(K,LIST(J,I))
          ENDDO
          J=J+1
        ENDDO
        PRINT'(1X,A,7I1,A,F12.3,A,F6.3,A,F6.3)','MASS(',(LIST(J,I),J=1
     &    ,7),')=',SQRT(MAX(0.0,SUM(4)**2-SUM(1)**2-SUM(2)**2-SUM(3)**2)
     &    ),' +/- ',COVM(I,I),'     CORR=',CORR
        I=I+1
      ENDDO

      RETURN
      END
C
      SUBROUTINE PSWAP(IP1,IP2,P)
      IMPLICIT NONE

      INTEGER IP1,IP2
      REAL P(4,7)

      INTEGER I
      REAL RTEMP

      DO I=1,4
        RTEMP=P(I,IP1)
        P(I,IP1)=P(I,IP2)
        P(I,IP2)=RTEMP
      ENDDO
      
      RETURN
      END
*
*