*-- Author : Stephen Burke 07/05/92
SUBROUTINE FVZFIT
*-----------------------------------------Updates 21/09/93-------
**: FVZFIT.......SB. Ignore CT z-vertex if z=0.0.
*-----------------------------------------Updates 07/09/93-------
**: FVZFIT 40000 SB. Don't make a z-vertex if error is too big.
*-----------------------------------------Updates 26/07/93-------
**: FVZFIT 30907 SB. Change monitoring histograms.
**: FVZFIT 30907 RP. Farm changes.
*-----------------------------------------Updates 13/10/92-------
**: FVZFIT 30907 SB. Compare FT with CT z-vertex.
*-----------------------------------------Updates 29/07/92-------
**: FVZFIT 30907 SB. New monitoring histograms.
*-----------------------------------------Updates 06/05/92-------
**: FVZFIT 30907 SB. Bank FTGR added to the E-list:
*!: FTGR 30907 SB. New bank with forward z-vertex.
**: FVZFIT 30907 SB. New deck to perform forward z-vertex fit.
*-----------------------------------------Updates----------------
**********************************************************************
* *
* Fit a z-vertex from forward tracks *
* *
* Makes FTGR/FTGX banks: *
* *
* ! *
* TABLE FTGR ! z-vertex from forward tracks *
* ! *
* ! ATTributes: *
* ! ----------- *
* !COL ATT-name FMT Min Max ! Comments *
* ! *
* 1 Z F -200. 200. ! z *
* 2 dZ F 0. 200. ! sigma(z) *
* 3 CHISQ F 0. INF ! Chi-squared *
* 4 NDF I 0 INF ! (Number of tracks used) - 1 *
* ! *
* ! RELations: *
* ! ---------- *
* !COL REL.bank TYPE INT.bank !Comments *
* ! (COL) *
* ! *
* ! *
* END TABLE *
* *
* ! *
* TABLE FTGX ! pointers from FTGR to FTKR *
* ! *
* ! ATTributes: *
* ! ----------- *
* !COL ATT-name FMT Min Max ! Comments *
* ! *
* ! *
* ! RELations: *
* ! ---------- *
* !COL REL.bank TYPE INT.bank !Comments *
* ! (COL) *
* ! *
* 62 FTKR D1T1 ! FTKR tracks giving vertex *
* ! *
* ! FTGX is a list of all FTKR tracks used to create the FTGR *
* ! vertices. Note that there is no pointer from FTGR to FTGX, *
* ! so it is necessary to use the NDF values to calculate the *
* ! pointers. *
* ! *
* END TABLE *
* *
**********************************************************************
*KEEP,FVSTEE.
*KEEP,FVPAR.
*KEEP,FVSCAL.
* Various counters
*KEEP,FVWBI.
* Work bank indices
*KEEP,BCS.
*KEEP,BOSMDL.
C ------BOSMDL
C ------
*KEEP,STFUNCT.
* index of element before row number IROW
* index of L'th element of row number IROW
* L'th integer element of the IROW'th row of bank with index IND
* L'th real element of the IROW'th row of bank with index IND
*KEND.
**********************************************************************
INFTKR = NLINK('FTKR',0)
CALL ERRLOG(511,'S:FVZFIT: FTKR bank not found')
* Count events
* Zero work bank index
* Quick check to see if there are any forward tracks
* Create a work bank to store z values and weights
CALL WBANK(IW,INFVWK,NFTKR,*9000)
CALL HCDIR('//PAWC/FVFIT',' ')
* Write primary/secondary flag into word 7 (IPTYPE)
IF (LTRUTH) CALL FVTRUE(INFTKR)
* Get the nominal z-vertex
*
* Loop over forward tracks, and calculate z0
*
* Extrapolate to vertex region and calculate z0 and weight
CALL FVXTRP(RW(INDCR(INFTKR,1,JFT)),ZNOM,LPRIM,Z0,WZ0,IFAIL)
* Store in work bank
* If the weight is zero, the track will be ignored
* Take the weighted mean of the z values
CALL FVZWM(INFTKR,NFTKR,ZNOM,.TRUE.,FVVEC,IFAIL)
CALL SHS(21,0,0.)
* Create the FTGR bank ...
INFTGR = NBANK('FTGR',0,6)
CALL ERRLOG(512,'S:FVZFIT: Unable to create FTGR')
* ... and fill it
CALL UCOPY(FVVEC,IW(INFTGR+3),4)
CALL BLIST(IW,'E+','FTGR')
CALL BLIST(IW,'E+','FTGX')
* Monitoring histograms
CALL SHS(21,0,FLOAT(NDF+1))
CALL SHS(22,0,FVVEC(1))
CALL SHS(23,0,FVVEC(2))
CALL SHS(24,0,CHISQ/FLOAT(NDF))
CALL SHS(25,0,CHPROB)
CALL SHS(24,0,-1.)
CALL SHS(25,0,-1.)
* Compare with the CxKV z-vertex
CALL SHS(28,0,FVVEC(1)-CTZ)
& CALL SHS(29,0,(FVVEC(1)-CTZ)/FVVEC(2))
IF (LRESID) CALL FVCHEK(FVVEC)
* Now do "secondary" vertices
CALL FVZWM(INFTKR,NFTKR,ZNOM,.FALSE.,FVVEC,IFAIL)
INFTGR = NBANK('FTGR',0,2+4*NVERT)
CALL ERRLOG(513,'S:FVZFIT: Unable to extend FTGR bank')
CALL UCOPY(FVVEC,IW(INDCR(INFTGR,1,NVERT)),4)
* Monitoring histograms
CALL SHS(41,0,FLOAT(NDF+1))
CALL SHS(42,0,FVVEC(1))
CALL SHS(43,0,FVVEC(2))
CALL SHS(44,0,CHISQ/FLOAT(NDF))
CALL SHS(45,0,CHPROB)
CALL SHS(44,0,-1.)
CALL SHS(45,0,-1.)
* Truncate FTGX
INFTGX = NLINK('FTGX',0)
IF (INFTGX.GT.0) INFTGX = NBANK('FTGX',0,2+IW(INFTGX+2))
* Make sure work banks are dropped!
CALL WDROP(IW,INFVWK)
* Reset IPTYPE to 2
*
* Some CT diagnostics
*
CALL ERRLOG(514,'W:FVZFIT: No SVX bank')
CALL ERRLOG(515,'W:FVZFIT: No primary vertex!')
CALL HFILL(100,DZ,0.,1.)
* The FTGR bank must exist if possible
INFTGR = NLINK('FTGR',0)
INFTGR = NBANK('FTGR',0,2)
CALL BLIST(IW,'E+','FTGR')
CALL ERRLOG(516,'S:FVZFIT: Unable to create FTGR bank')
INFTGX = NLINK('FTGX',0)
INFTGX = NBANK('FTGX',0,2)
CALL BLIST(IW,'E+','FTGX')
CALL ERRLOG(517,'S:FVZFIT: Unable to create FTGX bank')
CALL ERRLOG(518,'S:FVZFIT: Work bank creation failed')
*