[KLOE] [Offline Doc] [TRK Files]

Track Reconstruction Library

dcmcan.kloe


C       =================================================================
C       DCMCAN - A module for general checkout of Monte Carlo data.
C       =================================================================
C
C       Language:-
C       ==========
C       KLOE Fortran
C
C       Modulename:-
C       ============
C       DCMCAN.KLOE
C
C       Description:-
C       =============
C       This is an A_C Normal Module which contains all entries to run 
C       cursory analyses of Monte Carlo production data.
C
C       DCMINI          Initialize input program at start of job.
C       DCMRIN          Run Initialization Entry.
C       DCMEVT          Event Entry.
C       DCMRFI          Run End Entry.
C       DCMFIN          Cleanup for job termination.
C       DCMBOO          Histogram/ntuple booking
C       DCMTLK          Talk module
C
C       Author:-
C       ========
C       F. Donno & F. Pelucchi
C       KLOE Computing Group
C       LNF Frascati
C
C       Revision History:-
C       ==================
C       10 Nov 1995     Original Creation
C
      SUBROUTINE DCMINI
C     =================
$$IMPLICIT 
C
C       Description:-
C       =============
C       This routine is called at program initialisation time.
C
C       Call Parameters:-
C       ================
C       None
C
C       Return Parameters:-
C       ===================
C       None
C
C       Function Value:-
C       ================
C       None
C
C       Global Declarations:-
C       =====================
C
C       External Functions:-
C       ====================
C
C       Local Declarations:-
C       ====================
C
C       Executable Code:-
C       =================
C
      RETURN
      END
C
      SUBROUTINE DCMRIN
C     =================
$$IMPLICIT
C
C       Description:-
C       =============
C       This routine is called at run initialisation time.
C       No actions at present
C
C       Call Parameters:-
C       ================
C       None
C
C       Return Parameters:-
C       ===================
C       None
C
C       Function Value:-
C       ================
C       None
C
C       Global Declarations:-
C       =====================
C
C       External Functions:-
C       ====================
C
C       None
C
C       Local Declarations:-
C       ====================
C
C       Executable Code:-
C       =================
C
      RETURN
      END
C
      SUBROUTINE DCMEVT
C     =================
$$IMPLICIT
C
C       Description:-
C       =============
C       This routine analyzes MC data ( MC data ONLY ! )
C
C       Call Parameters:-
C       ================
C       None
C
C       Return Parameters:-
C       ===================
C       None
C
C       Function Value:-
C       ================
C       None
C
C       Global Declarations:-
C       =====================
$$INCLUDE 'K$INC:BCS.INC'
$$INCLUDE 'YBOS$LIBRARY:ERRCOD.INC'
C
$$INCLUDE 'K$ITRK:CFLAGS.INC'
$$INCLUDE 'K$ITRK:CDFCUT.INC'
$$INCLUDE 'K$ITRK:DPRS.INC'
$$INCLUDE 'K$ITRK:DTFS.INC'
$$INCLUDE 'K$ITRK:DVFS.INC'
$$INCLUDE 'K$ITRK:DCHD.INC'
C
C       External Functions:-
C       ====================
      INTEGER BLOCAT,BNEXT,BDATA,BNUMB
C
C       Local Declarations:-
C       ====================
      INTEGER STATUS,STATUS_DTFS,STATUS_DPRS,STATUS_DVFS
C
      LOGICAL STABLE_PION,SUBMS
      INTEGER IND_DPRS,INDAT_DPRS,IND_DTFS,INDAT_DTFS
      INTEGER IND_DVFS,INDAT_DVFS
      INTEGER IND,INDAT
      INTEGER ITYPE,IDECAY,ITYK0,ITR
      INTEGER MCNTRAC,MCK0L,MCK0S,NCANKL,NCANKS,HITPOS,HITNEG
      INTEGER IVX,NTRVTX
C
      REAL FITLOSS,HITINI,HITFIN,HITREJ,CHINOR,PCHI2,FRACMIX
C
C       Executable Code:-
C       =================
C
C
C  Now locate the drift chamber header bank
      STATUS = BLOCAT(IW,'DCHD',1,IND,INDAT)
      IF (STATUS.EQ.YESUCC) THEN
        IND = INDAT + IW(INDAT+DCHHDS)
      ELSE
        RETURN
      ENDIF
C
      CALL DFMCNTRAC(MCNTRAC,MCK0L,MCK0S)
      CALL HFILL(203,FLOAT(MCNTRAC-IW(IND+DCHCAN)),0.,1.)
C
      FITLOSS = 0.
      NCANKL = 0
      NCANKS = 0
C
C  Loop over p.r. track candidates
C
      STATUS_DPRS = BLOCAT(IW,'DPRS',-1,IND_DPRS,INDAT_DPRS)
      DO WHILE (IND_DPRS.GT.0)
        JDPRS = INDAT_DPRS + IW(INDAT_DPRS)
        IF (IW(JDPRS+DPRPOK) .EQ. 3) THEN
          JDPRS1 = JDPRS + DPRCEN
          STATUS=BNUMB(IW,IND_DPRS,ITR)
          HITINI = IW(JDPRS+DPRPOS) + IW(JDPRS+DPRNEG)
          CALL HFILL (403,HITINI,0.,1.)
C         
          CALL DFMCTRUE(ITR,ITYPE,IDECAY,ITYK0,FRACMIX,SUBMS)
          STABLE_PION = ITYPE.GT.7 .AND. IDECAY.LT.0
          IF (STABLE_PION) THEN
            IF (ITYK0.EQ.10) NCANKL = NCANKL+1
            IF (ITYK0.EQ.16) NCANKS = NCANKS+1
            STATUS_DTFS = BLOCAT(IW,'DTFS',ITR,IND_DTFS,INDAT_DTFS)
            IND_DTFS = INDAT_DTFS + IW(INDAT_DTFS+DTFHDS)
            IF (STATUS_DTFS.EQ.YESUCC) THEN
              HITPOS = IW(IND_DTFS+DTFNHF)/10000
              HITNEG = IW(IND_DTFS+DTFNHF)-10000*HITPOS
              HITFIN = HITPOS+HITNEG
              CALL HFILL (415,HITFIN,0.,1.)
              HITREJ = HITINI-HITFIN
              CALL HFILL (401,HITREJ,0.,1.)
              IF (HITFIN.GT.6.) THEN
                CHINOR=RW(IND_DTFS+DTFCHI)/(HITFIN-5)
                CALL HFILL(409,CHINOR,0.,1.)
                PCHI2 = RW(IND_DTFS+DTFPCH)
                CALL HFILL(410,PCHI2,0.,1.)
              ENDIF
              CALL HFILL(211,FRACMIX,0.,1.)
            ELSE
              FITLOSS=FITLOSS+1.
              CALL HFILL (402,HITINI,0.,1.)
            ENDIF
          ENDIF
        ENDIF
        STATUS_DPRS=BNEXT(IW,IND_DPRS,IND_DPRS)
        STATUS_DPRS=BDATA(IW,IND_DPRS,INDAT_DPRS)
      ENDDO
      CALL HFILL(201,FLOAT(MCK0L-NCANKL),0.,1.)
      CALL HFILL(202,FLOAT(MCK0S-NCANKS),0.,1.)
      CALL HFILL(405,FITLOSS,0.,1.)
C
C  Fill Vertex Histograms
      STATUS_DVFS = BLOCAT(IW,'DVFS',-1,IND_DVFS,INDAT_DVFS)
      DO WHILE (IND_DVFS.GT.0)
        STATUS=BNUMB(IW,IND_DVFS,IVX)
        NTRVTX = IW(INDAT_DVFS+IW(INDAT_DVFS+DVFHDS)+DVFNTR)
        IF (NTRVTX.EQ.2) CALL VXHFILL(IVX)
        STATUS_DVFS=BNEXT(IW,IND_DVFS,IND_DVFS)
        STATUS_DVFS=BDATA(IW,IND_DVFS,INDAT_DVFS)
      ENDDO
C
      RETURN
      END
C
      SUBROUTINE DCMRFI
C     =================
$$IMPLICIT
C
C       Description:-
C       =============
C       This routine is called at run termination.
C       It does any necessary cleanup.
C
C       Call Parameters:-
C       ================
C       None
C
C       Return Parameters:-
C       ===================
C       None
C
C       Function Value:-
C       ================
C       None
C
C       Global Declarations:-
C       =====================
C
C       External Functions:-
C       ====================
C
C       Local Declarations:-
C       ====================
C
C	Executable Code:-
C	=================
C
      RETURN
      END
C
      SUBROUTINE DCMFIN
C     =================
$$IMPLICIT
C
C       Description:-
C       =============
C       This routine is called at program termination.
C       It does any necessary cleanup.
C
C       Call Parameters:-
C       ================
C       None
C
C       Return Parameters:-
C       ===================
C       None
C
C       Function Value:-
C       ================
C       None
C
C       Global Declarations:-
C       =====================
C
C
C       External Functions:-
C       ====================
C
C       Local Declarations:-
C       ====================
C
C	Executable Code:-
C	=================
C
      RETURN
      END
C
      SUBROUTINE DCMBOO
C     =================
$$IMPLICIT
C
C       Description:-
C       =============
C       This routine is called at run initialisation.
C
C       Call Parameters:-
C       ================
C       None
C
C       Return Parameters:-
C       ===================
C       None
C
C       Function Value:-
C       ================
C       None
C
C       Global Declarations:-
C       =====================
C
C       External Functions:-
C       ====================
C
C       Local Declarations:-
C       ====================
C
C	Executable Code:-
C	=================
C
C Series 200: Histograms relative to Pattern Recognition control
C
      CALL HBOOK1(201,' MC - N.candidates from K0l (stable pions)$',
     +  10,-5.,5.,0.)
      CALL HBOOK1(202,' MC - N.candidates from K0s (stable pions)$',
     +  10,-5.,5.,0.)
      CALL HBOOK1(203,' MC Tracks - N.candidates  (stable pions) $',
     +  10,-5.,5.,0.)
      CALL HBOOK1(204,'dx 1st hit(Pattern-MC) K0S$',100,-10.,10.,0.)
      CALL HBOOK1(205,'dy 1st hit(Pattern-MC) K0S$',100,-10.,10.,0.)
      CALL HBOOK1(206,'dz 1st hit(Pattern-MC) K0S$',100,-10.,10.,0.)
      CALL HBOOK1(207,'dx 1st hit(Pattern-MC) K0L$',100,-20.,20.,0.)
      CALL HBOOK1(208,'dy 1st hit(Pattern-MC) K0L$',100,-20.,20.,0.)
      CALL HBOOK1(209,'dz 1st hit(Pattern-MC) K0L$',100,-20.,20.,0.)
      CALL HBOOK1(210,' Mixing fraction from P.Rec. (all candidates)$',
     +  50,0.,0.5,0.)
      CALL HBOOK1(211,' Mixing fraction from P.Rec. (fitted pions)$',
     +  50,0.,0.5,0.)
      CALL HBOOK1(212,' P.R. fromIP ID for Ks tracks$',10,0.,10.,0.)
      CALL HBOOK1(213,' P.R. fromIP ID for Kl tracks$',10,0.,10.,0.)
      CALL HBOOK1(214,' P.R. fromIP ID for other tracks$',10,0.,10.,0.)
C
C Series 400: Histograms relative to Track Fit control
C
      CALL HBOOK1(415,' accepted hits (fitted stable pions) $',
     + 100,0.,100.,0.)
      CALL HBOOK1(401,' rejected hits (fitted stable pions) $',
     + 100,0.,100.,0.)
      CALL HBOOK1(402,' initial hits (not fitted stable pions) $',
     + 100,0.,200.,0.)
      CALL HBOOK1(403,' initial hits (all track candidates) $',
     + 100,0.,200.,0.)
      CALL HBOOK1(404,' Geant type (lt.0 if decays) (all candidates)$',       
     +  20,-9.5,10.5,0.)
      CALL HBOOK1(405,' Not fitted candidates (stable pions)/event  $',       
     +  10,0.,10.,0.)
      CALL HBOOK1(409,' chi2/ndgf (stable pions)   $',50,0.,10.,0.)
      CALL HBOOK1(410,' chi2 probability(stable pions)',51,0.,1.02,0.)
      CALL HBOOK1(411,' CURV  (true-fit)/true (stable pions) K0L $',
     +  50,-0.025,0.025,0.)
      CALL HBOOK1(412,' COTAN  (true - fit) (stable pions) K0L $',
     +  50,-0.05,0.05,0.)
      CALL HBOOK1(413,' CURV  (true-fit)/true (stable pions) K0S $',
     +  50,-0.025,0.025,0.)
      CALL HBOOK1(414,' COTAN  (true - fit) (stable pions) K0S $',
     +  50,-0.05,0.05,0.)
C
C Series 500: Histograms relative to Vertex Fit control
C
      CALL HBOOK2(501,' MK0S vs EK0S $',100,0.45,0.55,100,0.45,0.55,0.)       
      CALL HBOOK2(502,' MK0L vs EK0L $',100,0.45,0.55,100,0.45,0.55,0.)
      CALL HBOOK1(504,' K0L Rxyz vertex  $',100,0.,200.,0.)
      CALL HBOOK1(503,' K0S Rxyz vertex  $',100,0.,20.,0.)
      CALL HBOOK1(505,' Dxyz(Vfit,Vtrue) K0S  $',50,0.,10.,0.)
      CALL HBOOK1(506,' Dx  (Vfit,Vtrue) K0S  $',50,-5.,5.,0.)       
      CALL HBOOK1(507,' Dy  (Vfit,Vtrue) K0S  $',50,-5.,5.,0.)       
      CALL HBOOK1(508,' Dz  (Vfit,Vtrue) K0S  $',50,-5.,5.,0.)       
      CALL HBOOK1(509,' Dxyz(Vfit,Vtrue) K0L  $',50,0.,5.,0.)
      CALL HBOOK1(510,' Dx  (Vfit,Vtrue) K0L  $',60,-1.5,1.5,0.)       
      CALL HBOOK1(511,' Dy  (Vfit,Vtrue) K0L  $',60,-1.5,1.5,0.)
      CALL HBOOK1(512,' Dz  (Vfit,Vtrue) K0L  $',60,-1.5,1.5,0.)     
      CALL HBOOK1(517,' DR  (Vfit,Vtrue) K0L  $',60,-1.5,1.5,0.)     
      CALL HBOOK1(513,' MK0S   $',100,0.48,0.52,0.)
      CALL HBOOK1(515,' EK0S   $',100,0.50,0.54,0.)
      CALL HBOOK1(514,' MK0L   $',100,0.48,0.52,0.)
      CALL HBOOK1(516,' EK0L   $',100,0.50,0.54,0.)
C
      RETURN
      END
C
      SUBROUTINE DCMTLK
C     =================
$$IMPLICIT
C
C	Description:-
C	=============
C
C       Call Parameters:-
C       ================
C       None
C
C       Return Parameters:-
C       ===================
C       None
C
C       Function Value:-
C       ================
C       None
C
C	Global Declarations:-
C	=====================
C
C	External Functions:-
C	====================
C
C	Local Declarations:-
C	====================
C
C	Executable Code:-
C	=================
C
      RETURN
      END
C*DK DFMCTRUE
C
      SUBROUTINE DFMCTRUE(THISTRK,ITYPE,IDECAY,ITYK0,FRACMIX,SUBMS)
C
$$IMPLICIT
      INTEGER THISTRK,ITYPE,IDECAY,ITYK0
      REAL    FRACMIX
      LOGICAL SUBMS
$$INCLUDE 'K$INC:BCS.INC'
$$INCLUDE 'K$INC:BPOYBS.INC'
$$INCLUDE 'YBOS$LIBRARY:ERRCOD.INC'
$$INCLUDE 'K$ITRK:DPRS.INC'
$$INCLUDE 'K$ITRK:DTFS.INC'
$$INCLUDE 'K$ITRK:MCKINE.INC'
$$INCLUDE 'K$ITRK:CDFWORK.INC'
C
      INTEGER STATUS,BLOCAT,IND,INDDAT
      INTEGER IND2,INDH,INDDATH
      INTEGER DHITNCO,FLAGS
      REAL RTOIP,ZTOIP
C
      INTEGER INDEX(100)
      REAL TTPTR,TTCOT1,TTKUR1,DPTNOR,DCOTAN
C
      INTEGER MCLIS(100)
      LOGICAL IN_DRIFT
C
      INTEGER NHITSP,IHITL,IHITM,ITRMC
      INTEGER NTMO
      INTEGER II,IIPMAX,NHISEC
      REAL    TYPE,XTRUE,YTRUE,ZTRUE,RDEC,ZDEC
C
      NHITSP = IW(JDPRS+DPRPOS) + IW(JDPRS+DPRNEG)
      CALL VZERO(MCLIS,100)
C
C  Start finding out the GEANFI DHIT mother bank and the pointer banks DTHA
C  and DTKA
      STATUS = BLOCAT(IW,'DTHA',1,INDH,INDDATH)
      IF (STATUS .NE. YESUCC) RETURN
      INDH     = INDDATH + IW(INDDATH+DTHHDS)
C
      STATUS = BLOCAT(IW,'DHIT',1,IND,INDDAT)
      IF (STATUS .NE. YESUCC) RETURN
      IND = INDDAT + IW(INDDAT+DHIHDS)
      DHITNCO = IW(INDDAT+DHINCO)
C
C We find here every MC track (1 in most cases, but maybe more)
C contributing hits to the current candidate to the Track Fit.
C NOTE: some hits may have been rejected by the fit, and marked with a
C       negative wire number.
      SUBMS = .FALSE.
      DO II=1,NHITSP
        IHITL = IABS(IW(JDPRS1+1+(II-1)*DPRLWI))
        IHITM = IW(INDH+IHITL-1)
        FLAGS = IW(IND+(IHITM-1)*DHITNCO+DHIFLA)
        IF (MOD(FLAGS,10) .NE. 0) SUBMS = .TRUE.
        ITRMC = IW(IND+(IHITM-1)*DHITNCO+DHITRA)
        IF (ITRMC.GT.0 .AND. ITRMC.LT.100) THEN
          MCLIS(ITRMC)=MCLIS(ITRMC)+1
        ELSE
          PRINT *,' DFMCTRUE: WRONG DHITRA IN DHIT!! =',ITRMC
        ENDIF
      ENDDO
C
C Let us scan them, to find the MC track contributing most hits,
C and also the SECOND most important, to assess the mixing
      CALL SORTZV(MCLIS,INDEX,100,-1,1,0)
      IIPMAX = INDEX(1)
      NHISEC = MCLIS(INDEX(2))
      FRACMIX = FLOAT(NHISEC)/NHITSP
      CALL HFILL(210,FRACMIX,0.,1.)
C
      ITYK0 = KPLI(4,IIPMAX)  !  10,16  -> KL,KS
      ITYPE = KPLI(2,IIPMAX)
      IND2 = IND
      IHITM = 1
      DO WHILE (IW(IND2+DHITRA) .NE. IIPMAX)
        IHITM = IHITM+1
        IND2  = IND2+DHITNCO
      ENDDO
      XTRUE = RW(IND+(IHITM-1)*DHITNCO+DHIXCO)
      YTRUE = RW(IND+(IHITM-1)*DHITNCO+DHIYCO)
      ZTRUE = RW(IND+(IHITM-1)*DHITNCO+DHIZCO)
      IF (ITYK0.EQ.16 .AND. FRACMIX.EQ.0.) THEN
        CALL HFILL(204,RW(JDPRS+DPRXCO)-XTRUE,0.,1.)
        CALL HFILL(205,RW(JDPRS+DPRYCO)-YTRUE,0.,1.)
        CALL HFILL(206,RW(JDPRS+DPRZCO)-ZTRUE,0.,1.)
      ENDIF
      IF (ITYK0.EQ.10 .AND. FRACMIX.EQ.0.) THEN
        CALL HFILL(207,RW(JDPRS+DPRXCO)-XTRUE,0.,1.)
        CALL HFILL(208,RW(JDPRS+DPRYCO)-YTRUE,0.,1.)
        CALL HFILL(209,RW(JDPRS+DPRZCO)-ZTRUE,0.,1.)
      ENDIF
      IDECAY = -1
      DO II=IIPMAX+1,NNP
        NTMO = KPLI(3,II)
        IF (NTMO .EQ. IIPMAX) THEN
          RDEC = SQRT(VTI(1,II)**2+VTI(2,II)**2)
          ZDEC = VTI(3,II)
          IN_DRIFT = RDEC.LT.195.  .AND. ABS(ZDEC).LT.170.
          IF (IN_DRIFT) IDECAY = 1
        ENDIF
      ENDDO
C
      IF (FRACMIX .LT. 0.10) THEN
        IF     (ITYK0.EQ.16) THEN
          CALL HFILL(212,FLOAT(IW(JDPRS+DPRCEN)),0.,1.)
        ELSEIF (ITYK0.EQ.10) THEN
          CALL HFILL(213,FLOAT(IW(JDPRS+DPRCEN)),0.,1.)
        ELSE
          CALL HFILL(214,FLOAT(IW(JDPRS+DPRCEN)),0.,1.)
        ENDIF
      ENDIF
C
      TYPE = -IDECAY*ITYPE
      CALL HFILL(404,TYPE,0.,1.)
C
      STATUS = BLOCAT(IW,'DTFS',THISTRK,IND,INDDAT)
      IND = INDDAT+IW(INDDAT+DTFHDS)
      IF (STATUS.EQ.YESUCC.AND.ITYPE.GT.7 .AND. IDECAY.LT.0) THEN
        TTPTR  = SQRT(PLI(1,IIPMAX)**2+PLI(2,IIPMAX)**2)
        TTCOT1 = PLI(3,IIPMAX)/TTPTR
        TTKUR1 = CHRG(IIPMAX)/TTPTR
        IF (TTKUR1 .NE. 0.) THEN
          DPTNOR = (TTKUR1-RW(IND+DTFCUR))/TTKUR1
          DCOTAN = TTCOT1 - RW(IND+DTFCTT)
          ZTOIP  = 0.
          RTOIP  = 0.
          IF(ITYK0.EQ.10) THEN
            CALL HFILL(411,DPTNOR,0.,1.)
            CALL HFILL(412,DCOTAN,0.,1.)
            CALL HFILL(1011,ZTOIP,RTOIP,1.)
          ENDIF
          IF(ITYK0.EQ.16) THEN
            CALL HFILL(413,DPTNOR,0.,1.)
            CALL HFILL(414,DCOTAN,0.,1.)
            CALL HFILL(1012,ZTOIP,RTOIP,1.)
          ENDIF
        ENDIF
      ENDIF
C
      RETURN
      END
C*DK DFMCNTRAC
C
      SUBROUTINE DFMCNTRAC(MCNTRAC,MCK0L,MCK0S)
C
$$IMPLICIT
      INTEGER MCNTRAC,MCK0L,MCK0S
$$INCLUDE 'K$INC:BCS.INC'
$$INCLUDE 'YBOS$LIBRARY:ERRCOD.INC'
$$INCLUDE 'K$INC:BPOYBS.INC'
$$INCLUDE 'K$ITRK:DPRS.INC'
$$INCLUDE 'K$ITRK:MCKINE.INC'
C
      INTEGER STATUS,BLOCAT,IND,INDDAT,INDH,INDDATH
      INTEGER DHITNCO,IHITL
C
      INTEGER II,JJ,NTMO,NHII,NHITS
      LOGICAL PION,DECAYED
C
      STATUS = BLOCAT(IW,'DHIT',1,IND,INDDAT)
      IF (STATUS .NE. YESUCC) RETURN
      DHITNCO = IW(INDDAT+DHINCO)
C
      STATUS = BLOCAT(IW,'DTHA',1,INDH,INDDATH)
      IF (STATUS .NE. YESUCC) RETURN
      NHITS = IW(INDDATH+DTHNRO)
      INDH  = INDDATH + IW(INDDATH+DTHHDS)
C
      MCNTRAC = 0
      MCK0L = 0
      MCK0S = 0
      DO II=1,NNP
        PION = KPLI(2,II).EQ.8 .OR. KPLI(2,II).EQ.9
        IF (PION) THEN
          DECAYED = .FALSE.
          DO JJ=II+1,NNP
            NTMO = KPLI(3,JJ)
            IF (NTMO .EQ. II) DECAYED = .TRUE.
          ENDDO
          IF (.NOT.DECAYED) THEN
            NHII = 0
            DO JJ=1,NHITS
              IHITL = IW(INDH+JJ-1)
              IND = INDDAT+IW(INDDAT+DHIHDS)+(IHITL-1)*DHITNCO
              IF (IW(IND+DHITRA).EQ.II) THEN
                NHII = NHII+1
              ENDIF
            ENDDO
            IF (NHII.GE.6) THEN
               MCNTRAC = MCNTRAC+1
               IF (KPLI(4,II).EQ.10) MCK0L = MCK0L+1
               IF (KPLI(4,II).EQ.16) MCK0S = MCK0S+1
            ENDIF
          ENDIF
        ENDIF
      ENDDO
C
      RETURN
      END
C*DK VXHFILL
C
      SUBROUTINE VXHFILL(IVX)
C
$$IMPLICIT
C
$$INCLUDE 'K$INC:BCS.INC'
$$INCLUDE 'K$INC:BPOYBS.INC'
$$INCLUDE 'YBOS$LIBRARY:ERRCOD.INC'
$$INCLUDE 'K$ITRK:MCKINE.INC'
$$INCLUDE 'K$ITRK:CFLAGS.INC'
$$INCLUDE 'K$ITRK:DPRS.INC'
$$INCLUDE 'K$ITRK:DTFS.INC'
$$INCLUDE 'K$ITRK:DVFS.INC'
C
      INTEGER IVX
      INTEGER STATUS,I,IV,INDV,INDDATV,INDC,INDDAT,IHDSIZ
      INTEGER BLOCAT
      INTEGER II
C
      INTEGER INDEX(100),ITR,IND,INDAT,INDH,INDDATH,INDT,INDDATT
      INTEGER MCLIS(100),NP(2)
      INTEGER NHITSP,IHITL,IHITM,ITRMC,DHITNCO
C
      REAL EK,PXK,PYK,PZK,CURV,COT,PHI,PTR,PZ,GMK,GMPI2
      REAL XINT(3),RVXY,DIST,RVF,DX,DY,DZ,DR
      LOGICAL K0S,K0L
      REAL X1,X2,X3,X4,CHI2MU3,PROXIM,RMES
      PARAMETER (GMPI2=0.019488)  !! IN GEV
C
      STATUS = BLOCAT(IW,'DVFS',IVX,INDV,INDDATV)
      IF (STATUS .NE. YESUCC) RETURN
      INDV = INDDATV + IW(INDDATV+DVFHDS)
      XINT(1) = RW(INDV+DVFXCO)
      XINT(2) = RW(INDV+DVFYCO)
      XINT(3) = RW(INDV+DVFZCO)
C
      EK=0.
      PXK=0.
      PYK=0.
      PZK=0.
C
      STATUS = BLOCAT(IW,'DTHA',1,INDH,INDDATH)
      IF (STATUS .NE. YESUCC) RETURN
      INDH     = INDDATH + IW(INDDATH+DTHHDS)
C
      STATUS = BLOCAT(IW,'DHIT',1,INDT,INDDATT)
      IF (STATUS .NE. YESUCC) RETURN
      INDT = INDDATT + IW(INDDATT+DHIHDS)
      DHITNCO = IW(INDDATT+DHINCO)
C
      DO 10 I=1,2
        ITR = IW(INDV+DVFNTR+DVFTRA+19*(I-1))
        STATUS = BLOCAT(IW,'DTFS',ITR,INDC,INDDAT)
        IHDSIZ=IW(INDDAT+DTFHDS)
        INDDAT=INDDAT+IHDSIZ
        CURV=RW(INDV+DVFNTR+DVFCRV+19*(I-1))
        COT =RW(INDV+DVFNTR+DVFCTV+19*(I-1))
        PHI =RW(INDV+DVFNTR+DVFPHV+19*(I-1))
        PTR=1./ABS(CURV)
        PZ=PTR*COT
        EK=EK+SQRT(GMPI2+PTR*PTR+PZ*PZ)
        PXK=PXK+PTR*COS(PHI)
        PYK=PYK+PTR*SIN(PHI)
        PZK=PZK+PZ
C------------------------
        IF (MONTECARLO) THEN
          STATUS = BLOCAT(IW,'DPRS',ITR,IND,INDAT)
          if (STATUS.eq.YESUCC) then
            JDPRS = INDAT + IW(INDAT)
            JDPRS1 = JDPRS + DPRCEN
            IF(IW(JDPRS+DPRPOS).LT.4 .OR.
     &         IW(JDPRS+DPRNEG).LT.4) GO TO 99 ! 4+4 hits
            NHITSP=IW(JDPRS+DPRPOS)+IW(JDPRS+DPRNEG)
            CALL VZERO(MCLIS,100)
            DO II=1,NHITSP
              IHITL=IABS(IW(JDPRS1+1+(II-1)*DPRLWI))
              IHITM = IW(INDH+IHITL-1)
              ITRMC = IW(INDT+(IHITM-1)*DHITNCO+DHITRA)
              IF (ITRMC.GT.0 .AND. ITRMC.LT.100) THEN
                MCLIS(ITRMC)=MCLIS(ITRMC)+1
              ELSE
                PRINT *,' VXHFILL: WRONG DHITRA IN DHIT!! =',ITRMC
              ENDIF
            ENDDO
            CALL SORTZV(MCLIS,INDEX,100,-1,1,0)
            NP(I) = INDEX(1)
            II = NP(I)
cx            IF ( KPLI(2,II).NE.8 .AND. KPLI(2,II).NE.9 ) GO TO 99 !  pion
cx            DO JJ=II+1,NNP
cx              IF( KPLI(3,JJ) .EQ. II) GO TO 99 ! stable pion
cx            ENDDO
            GO TO 10
          ENDIF
        ENDIF
C-----------------------
 10   CONTINUE
C
      GMK = SQRT(EK*EK-PXK*PXK-PYK*PYK-PZK*PZK)
      RVF = SQRT(XINT(1)*XINT(1)+XINT(2)*XINT(2)+XINT(3)*XINT(3))
      K0S = .FALSE.
      IF (RVF.LT.15.) K0S = .TRUE.  ! provisional definition for real data
C
      IF(MONTECARLO) THEN
        IF (KPLI(3,NP(1)) .NE. KPLI(3,NP(2)) ) GOTO 99 ! same mother
        K0S = .FALSE.
        IF(KPLI(4,NP(1)) .EQ. 16)  K0S =.TRUE.
        K0L = .FALSE.
        IF(KPLI(4,NP(1)) .EQ. 10)  K0L =.TRUE.
        IF ( .NOT.K0L .AND. .NOT.K0S ) GO TO 99
        DO IV=1,NNV
          IF(KVLI(1,IV) .EQ. KPLI(3,NP(1)) ) THEN
            RVXY = SQRT( VLI(1,IV)*VLI(1,IV) + VLI(2,IV)*VLI(2,IV))
            IF (K0L .AND. RVXY.LT.30.) GO TO 99  ! fid vol for K0L
            DX  = XINT(1) - VLI(1,IV)
            DY  = XINT(2) - VLI(2,IV)
            DZ  = XINT(3) - VLI(3,IV)
            DR = SQRT(XINT(1)**2  +XINT(2)**2  +0.000001) -
     .           SQRT(VLI(1,IV)**2+VLI(2,IV)**2+0.000001)
            DIST = SQRT(DX*DX + DY*DY + DZ*DZ)
            RMES = SQRT(XINT(1)**2+XINT(2)**2+XINT(3)**2)
            IF (K0S) THEN
              CALL HFILL(505,DIST,0.,1.)
              CALL HFILL(506,DX,0.,1.)
              CALL HFILL(507,DY,0.,1.)
              CALL HFILL(508,DZ,0.,1.)
            ELSE
              CALL HFILL(509,DIST,0.,1.)
              CALL HFILL(510,DX,0.,1.)
              CALL HFILL(511,DY,0.,1.)
              CALL HFILL(512,DZ,0.,1.)
              CALL HFILL(517,DR,0.,1.)
              CALL HFILL(518,RMES,0.,1.)
             ENDIF
          ENDIF
        ENDDO
C
        IF(K0S) THEN
          CALL HFILL(501,GMK,EK,1.)
          CALL HFILL(513,GMK,0.,1.)
          CALL HFILL(515,EK,0.,1.)
          CALL HFILL(503,RVF,0.,1.)
        ELSE
          CALL HFILL(502,GMK,EK,1.)
          CALL HFILL(514,GMK,0.,1.)
          CALL HFILL(516,EK,0.,1.)
          CALL HFILL(504,RVF,0.,1.)
          X1 = (EK-0.510)-(GMK-0.49767)
          X2 = (EK-0.510)+(GMK-0.49767)
          X3 = PROXIM(ATAN2(PYK,PXK)-ATAN2(XINT(2),XINT(1)),0.)
          X4 = PZK/SQRT(PXK**2+PYK**2) -
     +                     XINT(3)/SQRT(XINT(1)**2+XINT(2)**2)
          CALL HFILL(518,X1,0.,1.)
          CALL HFILL(519,X2,0.,1.)
          CALL HFILL(520,X3,0.,1.)
          CALL HFILL(521,X4,0.,1.)
          CHI2MU3 = (X1/0.001)**2 + (X2/0.002)**2 +
     +              (X3/0.006)**2 + (X4/0.03)**2
          CALL HFILL(522,CHI2MU3,0.,1.)
        ENDIF
C
      ENDIF
C
 99   RETURN
      END
[KLOE] [Offline Doc] [TRK Files]
Generated with Light on Thu Apr 8 13:00:16 MET DST 1999 .
Mail comments and suggestions.