C ====================================================== SUBROUTINE FINDIS95_SECOND( Iopt, OutCut, Cand, Ierr ) C ====================================================== C... Routine for siNISTra95 C... Finds among candidates stored in CANDAT the second best e- c c c c C INPUT : c c... Iopt = 1 <> candidate with highest probability from siNISTra. c... If 2 or more candidates have the same probability, c... the one with highest energy is going to be picked up c as c... the DIS e- c... !!! Candidates with Yel>0.99 are rejected. !!!! c c OutCut = 0.9 <> Cut in probability of NN. This value is recommended c c c OUTPUT : c c... Cand <> Number of candidate which is supposed to be the DIS e- c... Ierr = 0 <> No error c... = 1 <> WARNING !!!!!!!!!!!!!!!! #include "partap.inc" #include "sidat95.inc" #include "vctvtx.inc" INTEGER Iopt,Cand,Ierr, Index1, Index2 REAL OutMax1, Emax1, OutMax2, Emax2, OutCut REAL Yel INTEGER I,K c... Initialize Cand = 0 Ierr = 0 C... check for negative OutCut IF ( OutCut.LT.0.0 ) THEN WRITE(6,*) '**********************************' WRITE(6,*) '* This is siNISTra95 Version 1.1 *' WRITE(6,*) '* Probability definition has *' WRITE(6,*) '* changed ! *' WRITE(6,*) '* Electromagnetic objects *' WRITE(6,*) '* populate now the probability *' WRITE(6,*) '* region close to one ! *' WRITE(6,*) '* Chose OutCut = 0.9 ! *' WRITE(6,*) '* Program stopped by siNISTra95 *' WRITE(6,*) '**********************************' STOP '---- Program aborted by siNISTra95 ----' END IF C... No candidates available IF ( Ncand.EQ.0 ) GOTO 1000 IF ( Iopt.EQ.1 ) THEN C... find highest probability among candidates with OUT values above OutCut Index1 = 0 Index2 = 0 OutMax1 = -1.0 OutMax2 = -1.0 Emax1 = -999.9 Emax2 = -999.9 DO I=1,Ncand Yel = 1. - CANDAT(2,I)/(2*27.5)* & (1-(CANDAT(5,I)-VCTVTX_V(3))/ & sqrt(CANDAT(3,I)**2+ & CANDAT(4,I)**2+ & (CANDAT(5,I)-VCTVTX_V(3))**2 & ) & ) IF ( CANDAT(1,I) .GE. OutCut .AND. & Yel .LT. 0.99) THEN IF (CANDAT(1,I) .GT. OutMax1 .OR. & ((CANDAT(1,I).EQ.OutMax1) .AND. & (CANDAT(2,I).GT.Emax1))) THEN OutMax2 = OutMax1 OutMax1 = CANDAT(1,I) Emax2 = Emax1 Emax1 = CANDAT(2,I) Index2 = Index1 Index1 = I ELSEIF (CANDAT(1,I).EQ.OutMax2 .OR. & ((CANDAT(1,I).EQ.OutMax2) .AND. & (CANDAT(2,I).GT.Emax2))) THEN OutMax2 = CANDAT(1,I) Emax2 = CANDAT(2,I) Index2 = I ENDIF ENDIF END DO C... found at least a candidate ? IF ( OutMax.EQ.-1.0 ) RETURN Cand = Index2 ELSE WRITE(6,*) 'FINDIS95_SECOND : Option not yet implemented' END IF 1000 CONTINUE RETURN END