1 |
C |
2 |
C--------------------------------------------------------------------- |
3 |
SUBROUTINE LASTRISCIA(BAR,IBAR) |
4 |
C--------------------------------------------------------------------- |
5 |
C TRASFORMA UN VALORE IN mm NELL'EQUIVALENTE VALORE IN NUMERO DI STRISCIA . |
6 |
C |
7 |
INCLUDE 'INTEST.TXT' |
8 |
C |
9 |
COMMON / SHIFT / SHIFT |
10 |
SAVE / SHIFT / |
11 |
C |
12 |
C EM: IF TRACK GO OUT OF THE CALORIMETER GIVE BACK AS STRIP VALUE -1 TO FLAG THE SITUATION |
13 |
C |
14 |
IF ( BAR.LT.-6..OR.BAR.GT.246. ) THEN |
15 |
IBAR = -1 |
16 |
GOTO 500 |
17 |
ENDIF |
18 |
C |
19 |
C END EM |
20 |
C |
21 |
BBAR = BAR - SHIFT |
22 |
IBAR = 0 |
23 |
DO L = 1, NCHA |
24 |
ALUNG = INT((FLOAT(L) - 1.) / 32.) * ADIST + AA |
25 |
II = L - 1 |
26 |
K = MOD(II,32) |
27 |
RLINF = FLOAT(K) * 2.44 + ALUNG |
28 |
RLSUP = FLOAT(K + 1) * 2.44 + ALUNG |
29 |
IF (BBAR.GT.RLINF.AND.BBAR.LT.RLSUP) THEN |
30 |
IBAR = L |
31 |
GO TO 500 |
32 |
ENDIF |
33 |
ENDDO |
34 |
C |
35 |
C SE BAR SI TROVA SU UN'AREA MORTA SI PRENDE LA STRISCIA INFERIORE PIU` |
36 |
C PROSSIMA TRANNE QUANDO SI TRATTA DELLA PRIMA AREA MORTA NEL QUAL CASO SI |
37 |
C PRENDE IBAR = 1 . |
38 |
C |
39 |
IF (IBAR.EQ.0.AND.BBAR.GT.0.0001) THEN |
40 |
LK = INT(BBAR / ADIST) |
41 |
DIS = BBAR - ADIST * FLOAT(LK+1) |
42 |
IF (DIS.LT.-1.96) THEN |
43 |
IBAR = 32 * LK |
44 |
ELSE IF (DIS.GE.-1.96.AND.DIS.LE.-0.5) THEN |
45 |
IBAR = 32 * (LK + 1) |
46 |
ELSE IF (DIS.GT.-0.5.AND.DIS.LE.0.) THEN |
47 |
IBAR = 32 * (LK + 1) + 1 |
48 |
ELSE |
49 |
PRINT *,'PROBLEMS :',BBAR |
50 |
ENDIF |
51 |
IF (IBAR.EQ.0) IBAR = 1 |
52 |
ENDIF |
53 |
C |
54 |
IF ( IBAR.LE.0 ) IBAR = 1 |
55 |
IF ( IBAR.GT.96 ) IBAR = 96 |
56 |
C |
57 |
500 CONTINUE |
58 |
RETURN |
59 |
END |
60 |
C |