--- DarthVader/CalorimeterLevel2/src/calol2tr.for 2006/05/19 13:15:50 1.1 +++ DarthVader/CalorimeterLevel2/src/calol2tr.for 2007/11/22 13:53:27 1.17 @@ -6,12 +6,12 @@ INCLUDE 'INTEST.TXT' C DOUBLE PRECISION al_p(5), - & xout(npla),yout(npla),zin(npla) + & xout(nplav),yout(nplav),zin(nplav) C - REAL PIANO(22), VARFIT(2) + REAL PIANO(NPLAV), VARFIT(2) REAL TX, TY, SHIFT - REAL BAR(2,NPLA), DISTY - REAL DISTX, Y(NPLA), YY(NPLA) + REAL BAR(2,NPLAV), DISTY + REAL DISTX, Y(NPLAV), YY(NPLAV) REAL RIG, PPLANEMAX, RMASS REAL RNSS, QTOTT, RQT, MX, MY REAL CHECK, ENER, CX, CY @@ -26,7 +26,7 @@ INTEGER INDEX, NTOT(2), NPIANI, GTR INTEGER j, m, i, IWPL(2), timpx, timpy, T, nn INTEGER IPLANE, NNX, NNY, INFX, INFY, ISUPX, ISUPY - INTEGER IBAR(2,NPLA), NPFIT(2), CHTRACK,IWPLU + INTEGER IBAR(2,NPLAV), NPFIT(2), CHTRACK,IWPLU INTEGER Iquest(100), ICONTROL5, nin, IFAIL C PARAMETER (X01PL=0.74) @@ -55,7 +55,7 @@ COMMON / CH / CHECK SAVE / CH / C - COMMON / CALOFIT / VARFIT, NPFIT + COMMON / CALOFIT / VARFIT, NPFIT, IWPL,CHTRACK SAVE / CALOFIT / C COMMON / pawcd / hmemor @@ -66,6 +66,7 @@ C C Begin ! C +c print *,' sono qui' CALOL2TR = 0; NCORE = 0. QCORE = 0. @@ -89,18 +90,7 @@ NLAST = 0. PLANETOT = 0. QMEAN = 0. - SELFTRIGGER = 0 - CALL VZERO(VARCFIT,2) - CALL VZERO(NPCFIT,2) - CALL VZERO(TBAR,2*NPLA) - CALL VZERO(TIBAR,2*NPLA) - CALL VZERO(BAR,2*NPLA) - CALL VZERO(IBAR,2*NPLA) - CALL VZERO(IBAR,2*NPLA) - CALL VZERO(Y,NPLA) - CALL VZERO(YY,NPLA) - CALL VZERO(XOUT,NPLA) - CALL VZERO(YOUT,NPLA) +C SELFTRIGGER = 0 C C BEGIN WITH THE FISRT TRACK IF WE HAVE A TRACK FROM TRACKER C @@ -113,12 +103,17 @@ CHTRACK = 0 C CALL VZERO(IWPL,2) - CALL VZERO(BAR,2*NPLA) - CALL VZERO(IBAR,2*NPLA) - CALL VZERO(TBAR,2*NPLA) - CALL VZERO(TIBAR,2*NPLA) + CALL VZERO(BAR,2*NPLAV) + CALL VZERO(IBAR,2*NPLAV) + CALL VZERO(TBAR,2*NPLAV) + CALL VZERO(TIBAR,2*NPLAV) + CALL VZERO(Y,NPLAV) + CALL VZERO(YY,NPLAV) + CALL VZERO(XOUT,NPLAV) + CALL VZERO(YOUT,NPLAV) do m = 1, 5 al_p(m) = al_pp(t,m) +c print *,' al_p(',m,') = ',al_p(m) enddo if (al_p(5).eq.0.) THEN PRINT *,' CALORIMETER - WARNING F77: track with R = 0, discarded' @@ -131,10 +126,13 @@ YOUT(I) = 0. IF (MOD(M,2).EQ.0) THEN DISTX = PIANO(I) + ZALIG +c print *,'T Y PLANE I= ',I,' Z = ',DISTX ELSE DISTX = PIANO(I) - 5.81 + ZALIG +c print *,'T X PLANE I= ',I,' Z = ',DISTX ENDIF ZIN(I) = distx / 10. +c print *,' ZIN(',I,') = ',ZIN(I) TBAR(M,I) = 0. TIBAR(M,I) = 0 enddo @@ -142,7 +140,7 @@ call DOTRACK(NPLA,ZIN,XOUT,YOUT,AL_P,IFAIL) if(IFAIL.ne.0)then GOOD2 = 0 - print *,' CALORIMETER - WARNING F77: tracking failed ' +c print *,' CALORIMETER - WARNING F77: tracking failed ' goto 969 endif TX = TAN(ASIN(AL_P(3))) * COS(AL_P(4)) @@ -151,22 +149,30 @@ NN = 0 IF (M.EQ.2) NN = 1 IF (MOD(I,2).EQ.NN) THEN - SHIFT = +0.5 + IF (REVERSE.EQ.0) THEN + SHIFT = +0.5 + ELSE + SHIFT = -0.5 + ENDIF ELSE - SHIFT = -0.5 + IF (REVERSE.EQ.0) THEN + SHIFT = -0.5 + ELSE + SHIFT = +0.5 + ENDIF ENDIF C C CHECK IF XOUT OR YOUT ARE NaN C IF (XOUT(I).NE.XOUT(I).OR.YOUT(I).NE.YOUT(I)) THEN - print *, - & ' CALORIMETER - WARNING F77: tracking error (NaN values)' +c print *, +c & ' CALORIMETER - WARNING F77: tracking error (NaN values)' GOOD2 = 0 GOTO 969 ENDIF C CX = XOUT(I)*10. + XALIG - CY = -YOUT(I)*10. + YALIG + CY = YOUT(I)*10. + YALIG C IF (I.EQ.1) THEN TIMPX = CX @@ -176,12 +182,14 @@ Y(I) = CX BAR(M,I) = Y(I) TBAR(M,I) = (Y(I) - XALIG)/10. - IF (I.EQ.22) MX=ABS(Y(1)-Y(22))/ABS(ZIN(1)-ZIN(22)) + IF (I.EQ.NPLA) MX=ABS(Y(1)-Y(NPLA))/ + & ABS(ZIN(1)-ZIN(NPLA)) ELSE YY(I) = CY BAR(M,I) = YY(I) - TBAR(M,I) = (YALIG - YY(I))/10. - IF (I.EQ.22) MY=ABS(Y(1)-Y(22))/ABS(ZIN(1)-ZIN(22)) + TBAR(M,I) = (-YALIG + YY(I))/10. + IF (I.EQ.NPLA) MY=ABS(Y(1)-Y(NPLA))/ + & ABS(ZIN(1)-ZIN(NPLA)) ENDIF CALL LASTRISCIA(BAR(M,I),IBAR(M,I)) tibar(M,I) = ibar(m,i) @@ -235,10 +243,22 @@ C C WE MUST PROCESS A SELFTRIGGER EVENT C - IF (TRIGTY.GE.2) THEN + IF (TRIGTY.GE.2.AND.HZN.EQ.0) THEN C C CALL SELFTRIGGER SUBROUTINE C + CALL VZERO(IWPL,2) + CALL VZERO(VARCFIT,2) + CALL VZERO(NPCFIT,2) + CALL VZERO(TBAR,2*NPLAV) + CALL VZERO(TIBAR,2*NPLAV) + CALL VZERO(BAR,2*NPLAV) + CALL VZERO(IBAR,2*NPLAV) + CALL VZERO(Y,NPLAV) + CALL VZERO(YY,NPLAV) + CALL VZERO(XOUT,NPLAV) + CALL VZERO(YOUT,NPLAV) +C CALL SELFTRIG() ELEN = PARZEN3 SELEN = ABS(ELEN) * (11.98*1E-2 + 7.6 * EXP(-5736/ABS(ELEN))) @@ -248,14 +268,16 @@ C DO M = 1,2 C +c print *,' ax ',ax,' ay ',ay +c print *,' bx ',bx,' by ',by IF (NPCFIT(M).GE.2) THEN IF (M.EQ.1) THEN VARCFIT(1) = CHI2X - IMPX = 10. * ( AX + 12.1 ) + IMPX = AX ! PAMELA REF TANX = BX ELSE VARCFIT(2) = CHI2Y - IMPY = 10. * ( AY + 12.2 ) + IMPY = AY ! PAMELA REF TANY = BY ENDIF C @@ -263,39 +285,62 @@ NN = 0 IF (M.EQ.2) NN = 1 IF (MOD(I,2).EQ.NN) THEN - SHIFT = +0.5 + IF (REVERSE.EQ.0) THEN + SHIFT = +0.5 + ELSE + SHIFT = -0.5 + ENDIF ELSE - SHIFT = -0.5 + IF (REVERSE.EQ.0) THEN + SHIFT = -0.5 + ELSE + SHIFT = +0.5 + ENDIF ENDIF C IF (M.EQ.1) THEN DISTX = PIANO(I) - 5.81 - Y(I) = DISTX * TANX + CX + Y(I) = (DISTX * TANX) + AX - XALIG +c CBAR(M,I) = Y(I) BAR(M,I) = Y(I) - CBAR(M,I) = Y(I) - IF (I.EQ.22) MX=ABS(Y(1)-Y(22))/ABS(ZIN(1)-ZIN(22)) + CBAR(M,I) = (Y(I) + XALIG)/10. + IF (I.EQ.NPLA) MX=ABS(Y(1)-Y(NPLA))/ + & ABS(ZIN(1)-ZIN(NPLA)) C ELSE DISTY = PIANO(I) - YY(I) = DISTY * TANY + CY + YY(I) = (DISTY * TANY) + AY - YALIG +c CBAR(M,I) = YY(I) BAR(M,I) = YY(I) - CBAR(M,I) = YY(I) - IF (I.EQ.22) MY=ABS(Y(1)-Y(22))/ABS(ZIN(1)-ZIN(22)) + CBAR(M,I) = (YY(I) + YALIG)/10. + IF (I.EQ.NPLA) MY=ABS(Y(1)-Y(NPLA))/ + & ABS(ZIN(1)-ZIN(NPLA)) C ENDIF CALL LASTRISCIA(BAR(M,I),IBAR(M,I)) cibar(M,I) = ibar(m,i) + IF (ibar(m,i).EQ.-1) THEN + CHTRACK = CHTRACK + 1 + ELSE + IWPL(M) = IWPL(M) + 1 + ENDIF ENDDO ENDIF C ENDDO C - ELSE - IF (GOOD2.EQ.0) THEN + ENDIF +C + IF (TRIGTY.GE.2.AND.HZN.NE.0) THEN + IF (GOOD2.EQ.1) THEN PRINT *,' CALORIMETER - WARNING F77: unknown request' GOOD2 = 1 GOTO 50 ENDIF + IF ( NPCFIT(1).EQ.0.OR.NPCFIT(2).EQ.0 ) THEN + GOOD2 = 1 + GOTO 50 + ENDIF ENDIF C 6996 CONTINUE @@ -304,9 +349,9 @@ C C IF THE TRACK IS OUTSIDE THE CALORIMETER GO OUT, IF NOT CALCULATE DX0L C - IF (CHTRACK.EQ.44) THEN + IF (CHTRACK.EQ.44) THEN ! CHTRACK is the number of planes not touched by the track GOOD2 = 0 - PRINT *,' CALORIMETER - WARNING F77: track outside calorimeter' +c PRINT *,' CALORIMETER - WARNING F77: track outside calorimeter' GOTO 50 ELSE IF ( IWPL(1).LE.IWPL(2) ) THEN @@ -319,8 +364,6 @@ & + (BAR(1,1)-(2.66*MX+BAR(1,1)))**2 + 2.66**2) / & 3.6 C -C DX0L = X01PL * SQRT( (IWPL(1) * SQRT(1 + MX*MX))**2 + -C & (IWPL(2) * SQRT(1 + MY*MY))**2 )/2. ENDIF C C @@ -338,24 +381,29 @@ GOTO 50 ENDIF ENDIF - IF (TRIGTY.GE.2.AND.GOOD2.EQ.0) THEN + IF (TRIGTY.GE.2.AND.HZN.EQ.0.AND.GOOD2.EQ.0) THEN RIG = ELEN ! SELFTRIGGER RIGIDITY IF ( RIG.EQ.0. ) THEN - GOOD2 = 0 + GOOD2 = 1 PRINT *,' CALORIMETER - WARNING F77: ST track with R = 0' GOTO 50 ENDIF ENDIF C + IF (GOOD2.EQ.0.AND.(TRIGTY.LT.2.OR.HZN.EQ.1)) THEN + RIG = RIGINPUT + ENDIF +C RNSS = 0. QTOTT = 0. C - PPLANEMAX = 1.01*(LOG(ABS(RIG)/0.0081)-1.) + PPLANEMAX = 1.01*(LOG(ABS(RIG)/0.0081)-1.) / 0.74 C IPLANE = INT(ANINT(PPLANEMAX)) + 5 C IF (IPLANE.GT.NPLA) IPLANE=NPLA IF (IPLANE.LT.1) IPLANE = 1 +c print *,' calcolo...' C C CALCULATE QLOW AND NLOW C @@ -379,6 +427,8 @@ C DO J = 1,IPLANE NNX = IBAR(1,J) + RNSS = 0. ! BACO!! + QTOTT = 0. ! BACO!! IF (NNX.NE.-1) THEN IF (NNX.LT.9) NNX = 9 IF (NNX.GT.88) NNX = 88 @@ -559,10 +609,14 @@ DO J = NPLA-4,NPLA NNX = IBAR(1,J) IF (NNX.NE.-1) THEN - IF (NNX.LT.9) NNX = 9 - IF (NNX.GT.88) NNX = 88 - INFX = NNX - 8 - ISUPX = NNX + 8 + IF (NNX.LT.5) NNX = 5 + IF (NNX.GT.92) NNX = 92 +c IF (NNX.LT.9) NNX = 9 +c IF (NNX.GT.88) NNX = 88 + INFX = NNX - 4 + ISUPX = NNX + 4 +c INFX = NNX - 8 +c ISUPX = NNX + 8 DO I = INFX,ISUPX IF (DEXY(1,J,I).GE.EMIN) THEN NLAST = NLAST + 1 @@ -573,10 +627,14 @@ C NNY = IBAR(2,J) IF (NNY.NE.-1) THEN - IF (NNY.LT.9) NNY = 9 - IF (NNY.GT.88) NNY = 88 - INFY = NNY - 8 - ISUPY = NNY + 8 + IF (NNY.LT.5) NNY = 5 + IF (NNY.GT.92) NNY = 92 +c IF (NNY.LT.9) NNY = 9 +c IF (NNY.GT.88) NNY = 88 + INFY = NNY - 4 + ISUPY = NNY + 4 +c INFY = NNY - 8 +c ISUPY = NNY + 8 DO I=INFY,ISUPY IF (DEXY(2,J,I).GE.EMIN) THEN NLAST = NLAST + 1 @@ -586,8 +644,6 @@ ENDIF ENDDO C - EINF = EMIN - ESUP = 50. C C CALCULATE PLANETOT AND QMEAN C @@ -598,11 +654,22 @@ NPIANI = 5 QMEAN = 0. INDEX = 0 - CALL ELIO(RPIANO,NPIANI,QMEAN,NTOT,INDEX) - PLANETOT = RPIANO(1) + RPIANO(2) +C + IF (TRIGTY.GE.2.AND.HZN.NE.0) THEN + EINF = 50. + ESUP = 15000. + CALL NUCLEI(RPIANO,NPIANI,QMEAN,NTOT,INDEX) + PLANETOT = RPIANO(1) + RPIANO(2) + ELSE + EINF = EMIN + ESUP = 15000. + CALL ELIO(RPIANO,NPIANI,QMEAN,NTOT,INDEX) + PLANETOT = RPIANO(1) + RPIANO(2) + ENDIF C 50 CONTINUE C +c print *,' esco' RETURN END