--- DarthVader/CalorimeterLevel2/src/direction.for 2007/01/22 09:17:01 1.2 +++ DarthVader/CalorimeterLevel2/src/direction.for 2009/08/04 14:01:19 1.10 @@ -19,23 +19,28 @@ INCLUDE 'INTEST.TXT' - REAL FLIMIT + REAL FLIMIT, FLIMIT2 INTEGER NVAR,NPAR PARAMETER (NVAR=1,NPAR=2) - PARAMETER (FLIMIT=10000) - REAL X(NPLA),Y(NPLA),W(NPLA) +c PARAMETER (FLIMIT=10000) +c PARAMETER (FLIMIT2=2000) +c PARAMETER (FLIMIT=500) + PARAMETER (FLIMIT=2000) + PARAMETER (FLIMIT2=500) + REAL X(NPLAV),Y(NPLAV),W(NPLAV) REAL DEVIA(2),TG(2) - REAL BAR(2,NPLA) + REAL BAR(2,NPLAV) REAL A, B, VAR REAL SA, SB, SVAR REAL SSA, SSB, SSVAR - REAL PIANO(22) + REAL PIANO(NPLAV) REAL VARFIT(2) INTEGER ICONT, M, I, SNPFIT,SSNPFIT INTEGER NPFIT(2), CHTRACK,IWPL(2) + INTEGER FORCEMODE - INTEGER IBAR(2,NPLA) + INTEGER IBAR(2,NPLAV) COMMON/ANGOLO/BAR,IBAR SAVE /ANGOLO/ @@ -57,6 +62,11 @@ VARFIT(1) = 0. VARFIT(2) = 0. C + FORCEMODE = -1 + IF (FMODE(1).GE.1000.AND.FMODE(2).GE.1000) THEN + FORCEMODE = FMODE(1)-1000 + ENDIF +C C THE FIT IS PERFORMED WHEN THERE ARE AT LEAST TWO C LAYERS WITH SIGNAL . FOR THE FIT THE CLUSTER WITH THE C HIGHEST DETECTED ENERGY IS USED . @@ -68,21 +78,24 @@ FMODE(M) = 0 10 CONTINUE ICONT = 0 - CALL VZERO(X,NPLA) - CALL VZERO(Y,NPLA) - CALL VZERO(W,NPLA) + CALL VZERO(X,NPLAV) + CALL VZERO(Y,NPLAV) + CALL VZERO(W,NPLAV) DO I = 1,NPLA C IF (MOD(M,2).EQ.0) THEN - X(I) = PIANO(I) - 5.81 + X(I) = PIANO(I) +C X(I) = PIANO(I) - 5.81 ELSE - X(I) = PIANO(I) + X(I) = PIANO(I) - 5.81 +C X(I) = PIANO(I) ENDIF Y(I) = 0. C C C - IF (FMODE(M).EQ.0) THEN + IF ((FMODE(M).EQ.0.AND.FORCEMODE.EQ.-1) + + .OR.FORCEMODE.EQ.0) THEN IF (NCL(M,I).GE.1) THEN ICONT = ICONT + 1 Y(I) = CLUS(M,I,1) @@ -95,28 +108,32 @@ ENDIF ENDIF C -C More importance to weigth and less cluster per plane +C No weigth and less cluster per plane C - IF(FMODE(M).EQ.1) THEN + IF((FMODE(M).EQ.1.AND.FORCEMODE.EQ.-1).OR. + + FORCEMODE.EQ.1) THEN IF (NCL(M,I).GE.1.AND.NCL(M,I).LE.2) THEN ICONT = ICONT + 1 Y(I) = CLUS(M,I,1) W(I) = ((CLUS(M,I,1+NCHA/2)**0.29))**2. +c W(I) = 1. ENDIF - IF (W(I).GT.2000.) THEN - W(I) = 2000. -c Y(I) = 0. -c ICONT = ICONT -1 - ENDIF +c IF (W(I).GT.2000.) THEN +cx W(I) = 2000. +cc Y(I) = 0. +cc ICONT = ICONT -1 +c ENDIF ENDIF c c One cluster per plane c - IF(FMODE(M).EQ.2) THEN + IF((FMODE(M).EQ.2.AND.FORCEMODE.EQ.-1).OR. + + FORCEMODE.EQ.2) THEN IF (NCL(M,I).EQ.1) THEN ICONT = ICONT + 1 Y(I) = CLUS(M,I,1) W(I) = ((CLUS(M,I,1+NCHA/2)**0.79))**2. +c W(I) = 1. ENDIF ENDIF c if (Y(I).eq.0.or.W(I).eq.2000.) NPFIT(M) = NPFIT(M) - 1 @@ -134,53 +151,57 @@ NPFIT(M) = 0 ENDIF C -C TRY A BETTER FIT IF VAR IS BIG ON THE FIRST TRY -C - IF ((ABS(VAR).GT.FLIMIT.OR.VAR.EQ.0.).AND.FMODE(M).EQ.0) THEN - SVAR = VAR - SB = B - SA = A - SNPFIT = NPFIT(M) - NPFIT(M) = NPLA - FMODE(M) = 1 - GOTO 10 - ENDIF -C -C TRY AGAIN IF STILL BAD AND WE HAVE AT LEAST 5 POINT TO MAKE THE FIT -C - IF ((ABS(VAR).GT.FLIMIT.OR.VAR.EQ.0.).AND.FMODE(M).EQ.1 - & .AND.NPFIT(M).GT.4) THEN - SSVAR = VAR - SSB = B - SSA = A - SSNPFIT = NPFIT(M) - NPFIT(M) = NPLA - FMODE(M) = 2 - GOTO 10 - ENDIF -C -C IF WE ARE AT THE THIRD TRY AND THE FIT IS WORST THAN THE SECOND TRY TAKE THE FIRST TRY -C - IF (FMODE(M).EQ.2) THEN - IF (ABS(VAR).GT.ABS(SSVAR).OR.ABS(VAR).EQ.0. - & .OR.NPFIT(M).LE.4) THEN + IF (FORCEMODE.EQ.-1) THEN +C +C TRY A BETTER FIT IF VAR IS BIG ON THE FIRST TRY +C + IF ((ABS(VAR).GT.FLIMIT.OR.VAR.EQ.0.) + & .AND.FMODE(M).EQ.0) THEN + SVAR = VAR + SB = B + SA = A + SNPFIT = NPFIT(M) + NPFIT(M) = NPLA FMODE(M) = 1 - VAR=SSVAR - B = SSB - A = SSA - NPFIT(M) = SSNPFIT + GOTO 10 ENDIF - ENDIF -C -C IF THE SECOND TRY AND THE FIT IS WORST THAN THE FIRST TRY TAKE THE FIRST TRY -C - IF (FMODE(M).EQ.1) THEN - IF (ABS(VAR).GT.ABS(SVAR).OR.ABS(VAR).EQ.0.) THEN - FMODE(M) = 0 - VAR=SVAR - B = SB - A = SA - NPFIT(M) = SNPFIT +C +C TRY AGAIN IF STILL BAD AND WE HAVE AT LEAST 10 POINT TO MAKE THE FIT +C + IF ((ABS(VAR).GT.FLIMIT2.OR.VAR.EQ.0.).AND.FMODE(M).EQ.1 + & .AND.SNPFIT.GT.5) THEN + SSVAR = VAR + SSB = B + SSA = A + SSNPFIT = NPFIT(M) + NPFIT(M) = NPLA + FMODE(M) = 2 + GOTO 10 + ENDIF +C +C IF WE ARE AT THE THIRD TRY AND THE FIT IS WORST THAN THE SECOND TRY TAKE THE FIRST TRY +C + IF (FMODE(M).EQ.2) THEN + IF (ABS(VAR).GT.ABS(SSVAR).OR.ABS(VAR).EQ.0. + & .OR.NPFIT(M).LE.4) THEN + FMODE(M) = 1 + VAR=SSVAR + B = SSB + A = SSA + NPFIT(M) = SSNPFIT + ENDIF + ENDIF +C +C IF THE SECOND TRY AND THE FIT IS WORST THAN THE FIRST TRY TAKE THE FIRST TRY +C + IF (FMODE(M).EQ.1) THEN + IF (ABS(VAR).GT.ABS(SVAR).OR.ABS(VAR).EQ.0.) THEN + FMODE(M) = 0 + VAR=SVAR + B = SB + A = SA + NPFIT(M) = SNPFIT + ENDIF ENDIF ENDIF C @@ -193,6 +214,7 @@ ENDDO C - 500 CONTINUE +c 500 CONTINUE + CONTINUE RETURN END