* * $Id: hkffi1.F,v 1.1.1.1 1996/01/16 17:07:40 mclareni Exp $ * * $Log: hkffi1.F,v $ * Revision 1.1.1.1 1996/01/16 17:07:40 mclareni * First import * * #include "hbook/pilot.h" *CMZ : 4.21/08 17/02/94 15.16.59 by Rene Brun *-- Author : Rene Brun 17/02/94 SUBROUTINE HKFFI1(LINE,ID1,X,Y,W) *.==========> *. Special fast filling routine for COMIS. *. Fast calls to HFILL are replaced by this routine. *..=========> ( R.Brun ) #include "hbook/hcbook.inc" #include "hbook/hcflag.inc" #include "hbook/hcprin.inc" #include "hbook/hcfast.inc" SAVE BWID1 *.___________________________________________ IF(ID1.NE.IDLAST)THEN * * CHECK IF ID1 IS AT THE ADDRESS CORRESPONDING TO NID(LINE) * IF NOT COMPUTE NID(LINE). * IF(NID(LINE).LE.0)GO TO 10 IF(NID(LINE).GT.IQ(LCDIR+KNRH))GO TO 10 LCID=LQ(LTAB-NID(LINE)) IF(IQ(LTAB+NID(LINE)).EQ.ID1)GO TO 20 * * SEARCH ADDRESS OF ID IN THE ADDRESS TABLE (BINARY SEARCH) * 10 ID=ID1 IDPOS=LOCATI(IQ(LTAB+1),IQ(LCDIR+KNRH),ID) IF(IDPOS.LE.0)RETURN NID(LINE)=IDPOS * * COMPUTE POINTERS TO ACCESS HISTOGRAM AREA * 20 IDLAST=ID1 LCID =LQ(LTAB-NID(LINE)) LCONT=LQ(LCID-1) BWID1=FLOAT(IQ(LCID+KNCX))/(Q(LCID+KXMAX)-Q(LCID+KXMIN)) ENDIF * * INCREMENT NUMBER OF ENTRIES AND COMPUTE CHANNEL NUMBER * IQ(LCONT+KNOENT)=IQ(LCONT+KNOENT)+1 IF(X.LT.Q(LCID+KXMIN))THEN ICHAN=0 ELSEIF(.NOT.(X.LT.Q(LCID+KXMAX)))THEN ICHAN=IQ(LCID+KNCX)+1 ELSE ICHAN=(X-Q(LCID+KXMIN))*BWID1+1 ENDIF IF(IQ(LCONT+KNBIT).GE.32)THEN Q(LCONT+ICHAN+KCON1)=Q(LCONT+ICHAN+KCON1)+W ELSE NBPROX=IQ(LCONT+KNBIT) NB=32/NBPROX LWORD=ICHAN/NB LBIT=(ICHAN-NB*LWORD)*NBPROX+1 INC=JBYT(IQ(LCONT+LWORD+KCON1),LBIT,NBPROX) INC=INC+W+0.5 IF(INC.GT.MAXBIT(NBPROX))INC=MAXBIT(NBPROX) CALL SBYT(INC,IQ(LCONT+LWORD+KCON1),LBIT,NBPROX) ENDIF END