--- DarthVader/TrackerLevel2/src/F77/mini.f 2006/11/08 16:42:28 1.5 +++ DarthVader/TrackerLevel2/src/F77/mini.f 2006/11/14 16:21:09 1.6 @@ -41,8 +41,8 @@ * !the tracking procedure DATA STEPMAX/100./ !maximum number of steps in the trackin gprocess - DATA ALMAX/dinf,dinf,1.,dinf,dinf/ !limits on alpha vector components - DATA ALMIN/-dinf,-dinf,-1.,-dinf,-dinf/ !" + DATA ALMAX/dinf,dinf,dinf,dinf,dinf/ !limits on alpha vector components + DATA ALMIN/-dinf,-dinf,-dinf,-dinf,-dinf/ !" DIMENSION DAL(5) !increment of vector alfa DIMENSION CHI2DD_R(4,4),CHI2D_R(4) !hessiano e gradiente di chi2 @@ -138,7 +138,18 @@ RETURN ENDIF - COST=1e-7 + COST=1e-9 + costfac=1.1 + flagstep=0 + + 7 continue + + IF(costfac.le.1.) THEN + IFAIL=1 + PRINT *,'=== WARNING ===> no matrix inversion ' + RETURN + ENDIF + DO I=1,5 DO J=1,5 CHI2DD(I,J)=CHI2DD(I,J)*COST @@ -152,17 +163,30 @@ * track fitting with FREE deflection *------------------------------------------------------------* CALL DSFACT(5,CHI2DD,5,IFA,DET,JFA) !CHI2DD matrix determinant - IF(IFA.NE.0) THEN !not positive-defined - if(TRKVERBOSE)then + IF(IFA.NE.0.or.jfa.ne.0) THEN !not positive-defined + if(ifa.eq.-1)then + if(TRKVERBOSE)then PRINT *, $ '*** ERROR in mini ***'// $ 'on matrix inversion (not pos-def)' $ ,DET - endif - IF(CHI2.EQ.0) CHI2=-9999. - IF(CHI2.GT.0) CHI2=-CHI2 - IFAIL=1 - RETURN + endif + IF(CHI2.EQ.0) CHI2=-9999. + IF(CHI2.GT.0) CHI2=-CHI2 + IFAIL=1 + RETURN + endif + if(jfa.eq.-1)then + if(flagstep.eq.-1.) costfac=(costfac-1)/2+1 + cost=cost*costfact + flagstep=1. + goto 7 + elseif(jfa.eq.1)then + if(flagstep.eq.1.) costfac=(costfac-1)/2+1 + cost=cost/costfac + flagstep=-1. + goto 7 + endif ENDIF CALL DSFINV(5,CHI2DD,5) !CHI2DD matrix inversion * *******************************************