*-- Author : S.J. Maxfield
SUBROUTINE FPTPDT
**: FPTPDT 40000 SM. New definition of dead wire flag.
**----------------------------------------------------------------------
**: FPTPDT 30907 RP. Farm changes.
**----------------------------------------------------------------------
*
*
* Unpack Digitisations from bank FRPE.
* Create intermediate bank FPLC containing local
* coordinates
*
* Store hits in IOS COMMONs for Pattern Recognition
*
* Called once per event. Needs previous call to FTCORG
* to create corrected geometry bank FPG1
*
*
*KEEP,BCS.
INTEGER NHROW,NHCOL,NHLEN
PARAMETER (NHROW = 2, NHCOL = 1, NHLEN=2)
INTEGER NBOSIW
PARAMETER (NBOSIW=1000000)
INTEGER IW(NBOSIW)
REAL RW(NBOSIW)
COMMON /BCS/ IW
EQUIVALENCE (RW(1),IW(1))
SAVE /BCS/
*KEEP,CNSTBF.
INTEGER LW(NBOSIW)
REAL SW(NBOSIW)
EQUIVALENCE (RW(1),IW(1),LW(1),SW(1))
*KEEP,FRDIMS.
PARAMETER (MAXHTS=200)
PARAMETER (NUMWPL=36)
PARAMETER (MAXTRK=200)
PARAMETER (MXTTRK=900)
PARAMETER (MAXTR3=200)
PARAMETER (MAXHPW=2)
PARAMETER (MAXDIG=2000)
PARAMETER (NUMRWR=1727)
PARAMETER (NUMPWR=1151)
*KEEP,FH1WORK.
COMMON/FGMIOS/
* Planar geometry
+ ZPP(140),C(140),S(140),ITYPE(140),WZERO(140),WSPACE,
*
* Radial geometry
+ ZP(36),PHW(36),WS(36)
*
COMMON/H1WORK/
* Radial data...
+ WW(MAXHTS,36),DRI(MAXHTS,36),RM(MAXHTS,36),
+ NDP(36), NW(MAXHTS,36), DWS(MAXHTS,36),
*
* Planar Data
+ NDPW(NUMWPL),DW(MAXHTS,NUMWPL),
+ DRIW(MAXHTS,NUMWPL),NDW(MAXHTS,NUMWPL),
+ WWP(MAXHTS,NUMWPL),
+ IPHOLE(MAXHTS,NUMWPL),
*
* Pointers into DIGI bank for IOS labelled hits
+ IPFRRE(MAXHTS,36),IPFRPE(MAXHTS,36),NFRRE,NFRPE,
+ IRPIOS(MAXDIG,2), IPPIOS(MAXDIG,2),
*
* Track segment data
+ NTRAKS(3),IRPT(12,MAXTRK,3),SDRFT(12,MAXTRK,3),
*
* Fit data
+ PCOSL(MAXTRK,3),PSINL(MAXTRK,3),PHZL(MAXTRK,3),
+ DPCOSL(MAXTRK,3),DPSINL(MAXTRK,3),
+ DPHZL(MAXTRK,3),CHSQ(MAXTRK,3),RZI(MAXTRK,3),
+ RPCOSG(MAXTRK),RPSING(MAXTRK),
+ PHZG(MAXTRK),CC(3,MAXTRK),ZIG(MAXTRK),
+ IRADG(36,MAXTRK),PHIG(36,MAXTRK),
+ IG,SDRADG(36,MAXTRK),
+ R1,Z1,RFIT(MAXTRK,3),
+ CHG(MAXTRK),
+ PPA(MAXTRK,3), ZZA(MAXTRK,3),
+ GPA(MAXTRK,3),GZA(MAXTRK,3)
*
*
*KEND.
COMMON/FERROR/ERRDR(MAXHTS, 36), ERRRM(MAXHTS, 36),
+ ERPDR(MAXHTS, 36), IERRF(MAXHTS, 36),
+ IERPF(MAXHTS, 36)
* Max allowable bad hit flag...(To be gotten from bank sometime)
PARAMETER(IFRBAD=128)
PARAMETER(NBN=0)
* Locators for FPG1 bank
PARAMETER(IPDEAD=1)
PARAMETER(IPPPHP=2)
PARAMETER(IPPSTP=3)
* Locators for FPLC bank
PARAMETER(IPPCLN=1)
PARAMETER(IPPDRF=2)
PARAMETER(IPPERD=3)
PARAMETER(IPPERF=4)
LOGICAL FIRST
DATA FIRST/.TRUE./
*KEEP,STFUNCT.
* index of element before row number IROW
INDR(IND,IROW)=IND+2+IW(IND+1)*(IROW-1)
* index of L'th element of row number IROW
INDCR(IND,L,IROW)=INDR(IND,IROW) + L
* L'th integer element of the IROW'th row of bank with index IND
IBTAB(IND,L,IROW)=IW(INDCR(IND,L,IROW))
* L'th real element of the IROW'th row of bank with index IND
RBTAB(IND,L,IROW)=RW(INDCR(IND,L,IROW))
*KEEP,FTFUNCT.
* Statement functions for RADIAL Chamber data access.
* Using Channel Number J
* Module, Wedge-pair and Z-plane numbers...
IRMOD(J) = J/288
IRWDP(J) = (J-IRMOD(J)*288)/12
IRZPL(J) = J-IRMOD(J)*288-IRWDP(J)*12
* Statement function for obtaining WEDGE numbers(0-47) of
* wires at plus and minus ends of Cell numbers
IRWPL(J) = (IRWDP(J)/2)*4 + (MOD(IRWDP(J),2))
IRWMI(J) = MOD(IRWPL(J) + 34,48)
* Statement function for obtaining IOS wire number (1-36)
IRIOSW(J) = IRMOD(J)*12 + IRZPL(J) + 1
* Statement functions for PLANAR Chamber data access.
* Using Channel Number J
* Module, orientation, W-cell and Z-plane numbers...
IPMOD(J) = J/384
IPORI(J) = (J-IPMOD(J)*384)/128
IPWCL(J) = (J-IPMOD(J)*384-IPORI(J)*128)/4
IPZPL(J) = (J-IPMOD(J)*384-IPORI(J)*128-IPWCL(J)*4)
* IPSMD in range 0:8 Planar module number.
IPSMD(J) = IPMOD(J)*3 + IPORI(J)
*
* IOS wire number (runs from 0 to 36)
IPIOSW(J) = IPSMD(J)*4 + IPZPL(J) + 1
* SB plane numbers (1-72) from cell number
IPSBW(J) = 24*IPMOD(J) + 4*IPORI(J) + IPZPL(J) + 1
IRSBW(J) = 24*IRMOD(J) + IRZPL(J) + 13
* Module, orientation, wire and (typical) cell number from plane
* number in the range 1-72 (planars, radials and combined)
IPMSB(J) = (J - 1)/24
IPOSB(J) = (J - 24*IPMSB(J) - 1)/4
IPZSB(J) = J - 24*IPMSB(J) - 4*IPOSB(J) - 1
IPCLSB(J) = 384*IPMSB(J) + 128*IPOSB(J) + IPZSB(J)
IRMSB(J) = (J - 1)/24
IRZSB(J) = J - 24*IRMSB(J) - 13
IRCLSB(J) = 288*IRMSB(J) + IRZSB(J)
IRADSB(J) = (J - 24*((J-1)/24) - 1)/12
ICELSB(J) = IRADSB(J)*IRCLSB(J) + (1 - IRADSB(J))*IPCLSB(J)
*KEEP,STFCLW.
* statement functions acting on the BOS COMMON LW
* index of element before row number LWROW
LNDR(LND,LWROW) = LND + 2 + LW(LND+1)*(LWROW-1)
* index of L-th element of row number LWROW
LNDCR(LND,L,LWROW)=LNDR(LND,LWROW)+L
* L-th integer element of the LWROW'th row in bank with index LND
LBTAB(LND,L,LWROW)=LW(LNDCR(LND,L,LWROW))
* L-th real element of the LWROW'th row in bank with index LND
SBTAB(LND,L,LWROW)=SW(LNDCR(LND,L,LWROW))
*
*KEND.
*-------------------------------------------------------------------
IF(FIRST) THEN
FIRST = .FALSE.
IQFPG1 = NAMIND('FPG1')
IQFPLC = NAMIND('FPLC')
ENDIF
*
IFPG1= IW(IQFPG1)
IFPLC = IW(IQFPLC)
IF(IFPG1.EQ.0) THEN
CALL ERRLOG(106,'S:FPTPDT: FPG1 bank not found')
RETURN
ENDIF
IF(IFPLC.EQ.0) THEN
RETURN
ENDIF
NFPLC = IW(IFPLC+2)
IF(NFPLC.LE.0) THEN
RETURN
ENDIF
* Extract Hits...
DO 300 K= 1, NFPLC
ICLNUM= IBTAB(IFPLC,IPPCLN,K)
IDEAD = LBTAB(IFPG1,IPDEAD,ICLNUM+1)
IF(IDEAD .NE. 1) THEN
DRIFT = RBTAB(IFPLC,IPPDRF,K)
ERRDRF= RBTAB(IFPLC,IPPERD,K)
ISGNW = IBTAB(IFPLC,IPPERF,K)
IF(ISGNW .LT. IFRBAD) THEN
* IOS wire planes numbered 1-36 through 3 Modules
KWIR = IPIOSW(ICLNUM)
* increment number of hits in this wire plane...
NDPW(KWIR) = NDPW(KWIR) + 1
IF(NDPW(KWIR) .GT. MAXHTS) THEN
CALL ERRLOG(102,'W:FPTPDT: MAX HITS exceeded ')
NDPW(KWIR) = NDPW(KWIR) - 1
ELSE
* W-coordinate of wire...
* W-coordinate of wire...
DW ( NDPW(KWIR), KWIR) = SBTAB(IFPG1,IPPSTP,ICLNUM+1)
* Phi of hit wire...
WWP( NDPW(KWIR), KWIR) = SBTAB(IFPG1,IPPPHP,ICLNUM+1)
* Drift in W, Error, flag...
DRIW( NDPW(KWIR), KWIR) = DRIFT
ERPDR( NDPW(KWIR), KWIR) = ERRDRF
IERPF( NDPW(KWIR), KWIR) = ISGNW
* W-cell number of this hit...
KWCL = IPWCL(ICLNUM)
IF(KWCL.LE.15)THEN
NDW(NDPW(KWIR),KWIR) = KWCL
ELSE
NDW(NDPW(KWIR),KWIR) = KWCL-6
ENDIF
*
IF(KWCL.LE.15.AND.KWCL.GE.10)THEN
IPHOLE(NDPW(KWIR),KWIR) = 1
ELSE IF(KWCL.LE.21.AND.KWCL.GE.16)THEN
IPHOLE(NDPW(KWIR),KWIR) = -1
ELSE
IPHOLE(NDPW(KWIR),KWIR) = 0
ENDIF
*
* relations between IOS labelling and FRRE bank...
IPFRPE(NDPW(KWIR),KWIR) = K
IF(K.LE.MAXDIG) THEN
IPPIOS(K,1) = KWIR
IPPIOS(K,2) = NDPW(KWIR)
ENDIF
ENDIF
ENDIF
ENDIF
300 CONTINUE
RETURN
END
*