SUBROUTINE GG_MUID(ITK,XYES,pass) *----------------------------------------------------------------------- * FROM: Chris Brew, University of Sheffield. * * Identifies tracks as muons on the basis of * * Fraction of energy deposited in th ECAL * Fraction of energy deposited in th HCAL * Ratio of HCAL planes fired / number expected to have fired * Ratio of HCAL planes fired / number expected to have fired * in last 10 * Number of hits in the muon chambers * *----------------------------------------------------------------------- IMPLICIT NONE #include "qdecl.h" #include "qcde.h" * Declarations. INTEGER ITK , IRUN , IBE , IBT , IM1 , IM2 , NEXP , NFIR , N10 , & N03 , IDF , CODE , NP , NE , Q , NF , NEL , NFL , MUON REAL MC , EC , CST , HC , PHI , EFRAC , HFRAC & , CALH1 , CALH2 , MOMEN , MUHIT , pass(5) LOGICAL X1,X2,X3,X4,X5,X6,X7,E1,E2,E3,CUT1,CUT2,CUT3,CUT4,XMUON, & XYES #include "qmacro.h" X1(EFRAC) = efrac.lt.0.5 ! tightened to 0.4 in final paw analysis * FRACTION OF TRACK ENERGY DEPOSITED IN ECAL - REMOVES MOST ELECTRONS * X2(HFRAC) = hfrac.lt.0.3 X3(HFRAC) = hfrac.GT.0.6 ! tightened to 0.7 in final paw analysis X4(HFRAC) = hfrac.GT.0.8 ! tightened to 0.9 in final paw analysis * FRACTION OF TRACK ENERGY DEPOSITED IN HCAL - 3 DIFFERENT MUON * ENERGY REGIONS - Now 2 regions since high energy made little or no improvement. X5(CALH1) = calh1.gt.0.0 * RATIO OF HCAL PLANES FIRED / NUMBER EXPECTED TO HAVE FIRED * X6(CALH2) = calh2.gt.0.0 * RATIO OF HCAL PLANES FIRED / NUMBER EXPECTED TO HAVE FIRED - Not used anymore * IN LAST 10 * X7(MUHIT) = muhit.gt.0.0 * NUMBER OF MUON HITS - Ditto * THREE ENERGY REGIONS E1(MOMEN) = (MOMEN.LT.1.5) E2(MOMEN) = (MOMEN.GE.1.5).AND.(MOMEN.LT.3.0) * E3(MOMEN) = (MOMEN.GT.3.0).AND.(MOMEN.LT.50.0) * ACTUAL CUTS * CUT1(MUHIT,CALH2) = X6(CALH2).AND.X7(MUHIT) * GETS MOST MUONS * CUT2(MOMEN,HFRAC,CALH1,CALH2) = E3(MOMEN).AND.X2(HFRAC).AND. * & X5(CALH1).AND.X6(CALH2) * PICKS UP HIGH ENERGY MUONS WITHOUT MUON CHAMBER HITS CUT3(MOMEN,HFRAC,CALH1) = E2(MOMEN).AND.X4(HFRAC).AND.X5(CALH1) * GET LOWER ENERGY MUONS WHICH HAVE PUNCHED THROUGH ECAL BUT ARE THEN * ABSORBED IN HCAL, HADRONS LEAVE MORE ENERGY IN ECAL CUT4(MOMEN,HFRAC) = E1(MOMEN).AND.X3(HFRAC) * GETS VERY LOW ENERGY MUONS WHICH DEPOSIT SOME ENERGY IN ECAL BUT MOST * IN THE HCAL, HADRONS AT THESE ENERGIES FAIL THE X1 ECAL CUT XMUON(MOMEN,EFRAC,HFRAC,CALH1,CALH2,MUHIT) = X1(EFRAC).AND. & (CUT3(MOMEN,HFRAC,CALH1).OR.CUT4(MOMEN,HFRAC)) * Final Extra Muon id cut. *----------------------------------------------------------------------- call vzero(pass,3) CALL GETINFO(ITK,NP,NE,MC,EC,CST,HC,Q,PHI) CALL HMINFO(ITK,NF,NE,NFL,NEL,MC,IDF) MOMEN = QP(ITK) EFRAC = EC/MOMEN HFRAC = HC/MOMEN CALH1 = FLOAT(NF)/FLOAT(NE) CALH2 = FLOAT(NFL)/FLOAT(NEL) MUHIT = MC if(kevt.eq.7212) write(*,*) itk,momen,efrac,hfrac,calh1,idf IF(XMUON(MOMEN,EFRAC,HFRAC,CALH1,CALH2,MUHIT)) THEN XYES = .TRUE. ELSE IF(IDF.GT.0) THEN XYES = .TRUE. END IF END IF pass(1) = momen pass(2) = efrac pass(3) = hfrac pass(4) = idf pass(5) = calh1 RETURN END *--------------------------------------------------------------------- * * GETINFO- Look up properties of a track based on its alpha track * number. * * Input : ITK -- Alpha Track Number * Output: HCPLANE - Number of Planes fired in Muon Chambers * NEPLANE - Number of Expected Muon chambers * MUCHAMB - Number of Muon Chambers which fired * ECALE - ECAL energy associated with the track * COST - Cos Theta Measured for the track * HCALE - Energy in the HCAL for this track * CHG - Charge of the track * PHI - Phi Angle of track * J.Nash - April 1990 *--------------------------------------------------------------------- SUBROUTINE GETINFO(ITK, > HCPLANE,NEPLANE,MUCHAMB,ECALE,COST,HCALE,Chg,phi) INTEGER ITK REAL ECALE,COST,MUCHAMB,HCLPANE,HCALE,NEPLANE,Chg,phi #include "qcde.h" #include "qmacro.h" * * LOOK IN THE HCAL FOR ASSOCIATED PLANES * IF (XHMA(ITK)) THEN HCPLANE =KHMANF(ITK) NEPLANE =KHMANE(ITK) ELSE HCPLANE= 0 ENDIF * * LOOK IN THE MUON CHAMBERS INNNER AND OUTER FOR ASSOCIATED HITS * IF (XMCA(ITK)) THEN MUCHAMB =KMCANH(ITK,1)+KMCANH(ITK,2) ELSE MUCHAMB= 0 ENDIF * * LOOK IN THE ECAL FOR ASSOCIATED ENERGY SUMMING THE ASSOCIATED OBJECTS * ECALE = 0 DO 20 IE = 1,KNECAL(ITK) IEC = KECAL(ITK,IE) IF (XPEC(IEC)) THEN ECALE =QPECEC(IEC) + ECALE ENDIF 20 CONTINUE * * Fill in the charge, Cos Theta, and Phi for the track * COST = QCT(ITK) chg = qch(ITK) Phi = Qph(itk) * * NOW FIND THE HCAL ENERGY ASSOCIATED WITH THIS TRACK * HCALE = 0 DO 30 IE = 1,KNHCAL(ITK) IHC = KHCAL(ITK,IE) IF (XPHC(IHC)) THEN HCALE =QPHCEC(IHC) + HCALE ENDIF 30 CONTINUE RETURN END *--------------------------------------------------------------------- * * HMINFO- Returns the penetration parameters of a Muon given its * Alpha track number * * Input : ITK -- Alpha Track Number * Output: NFIR - Number of Planes fired in Muon Chambers * NEXP - Number of Expected Muon chambers * NFIRL - Number of Planes fired in last 10 layers * NEXPL - Number of planes expected in last 10 layers * MCHIT - Number of Muon Chamber hits associated * J.Nash - May 1990 * Updated to use the info on the mini... 12-12-92 JAN *--------------------------------------------------------------------- SUBROUTINE HMINFO(ITK,NFIR,NEXP,NFIRL,NEXPL,MCHIT,IDF) INTEGER ITK,NUMB,IDF REAL NFIR,NEXP,NFIRL,NEXPL,MCHIT PARAMETER(NPLH=23) DIMENSION IBME(NPLH),IBMT(NPLH),IPOW(NPLH) DATA IPOW/1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192, + 16384,32768,65536,131072,262144,524288,1048576, + 2097152,4194304/ #include "qcde.h" #include "qmacro.h" * * Get the indices into the HMAD bank * NAHMAD = NAMIND('HMAD') JHMAD = IW(NAHMAD) NEXP = 1 NEXPL = 1 NFIR = 0 NFIRL= 0 Call QMUIDO(ITK,IRN,IBE,IBT,IM1,IM2,IEXP,IFIR,IEL1, > IE3,xmult,rap,ang,ishad,sudnt,idf,imcf,ier) MCHIT = IM1+IM2 NFIR = IFIR NEXP = IEXP NFIRL = IEL1 * * Calculate how many expected in the last 10 planes * NUMB = IBE DO 21 I = NPLH,1,-1 IBME(I) = NUMB / IPOW(I) IRES = IBME(I) * IPOW(I) NUMB = NUMB - IRES 21 CONTINUE NEXPL = 0 JU = 0 DO 30 I = NPLH,1,-1 IF(IBME(I).EQ.1)THEN JU = I NU = I-9 GO TO 31 END IF 30 CONTINUE 31 IF(JU.GT.0) THEN IF(NU.LE.0) NU = 1 DO 32 J =JU,NU,-1 IF(IBME(J).EQ.1) NEXPL = NEXPL + 1 32 CONTINUE ENDIF * * Protection c If (NEXP.eq.0) then NEXP=1 NFIR=0 endif If (NEXPL.eq.0) then NEXPL=1 NFIRL=0 endif 999 CONTINUE RETURN END