/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
GeneratorInterface/PartonShowerVeto/src/getjet.f
285 строк
9 KB
Giulio Eulisse
Snapshot of CMSSW_6_2_0_pre8.
26 июн 2013, 18:12
26 июн 2013, 18:12
214ab73
Код
Авторство
О чём код?
C----------------------------------------------------------------------- C----Calorimeter simulation obtained from Frank Paige 23 March 1988----- C C USE C C CALL CALINI C CALL CALSIM C C THEN TO FIND JETS WITH A SIMPLIFIED VERSION OF THE UA1 JET C ALGORITHM WITH JET RADIUS RJET AND MINIMUM SCALAR TRANSVERSE C ENERGY EJCUT C (RJET=1., EJCUT=5. FOR UA1) C USE C C CALL GETJET(RJET,EJCUT) C C C----------------------------------------------------------------------- C C ADDED BY MIKE SEYMOUR: PARTON-LEVEL CALORIMETER. ALL PARTONS C ARE CONSIDERED TO BE HADRONS, SO IN FACT RESEM IS IGNORED C C CALL CALPAR C C HARD PARTICLE CALORIMETER. ONLY USES THOSE PARTICLES WHICH C CAME FROM THE HARD PROCESS, AND NOT THE UNDERLYING EVENT C C CALL CALHAR C C----------------------------------------------------------------------- SUBROUTINE CALINI C C INITIALIZE CALORIMETER FOR CALSIM AND GETJET. NOTE THAT C BECAUSE THE INITIALIZATION IS SEPARATE, CALSIM CAN BE C CALLED MORE THAN ONCE TO SIMULATE PILEUP OF SEVERAL EVENTS. C IMPLICIT NONE C...GETJET commonblocks INTEGER MNCY,MNCPHI,NCY,NCPHI,NJMAX,JETNO,NCJET DOUBLE PRECISION YCMIN,YCMAX,DELY,DELPHI,ET,STHCAL,CTHCAL,CPHCAL, & SPHCAL,PCJET,ETJET PARAMETER (MNCY=200) PARAMETER (MNCPHI=200) COMMON/CALOR/DELY,DELPHI,ET(MNCY,MNCPHI), $CTHCAL(MNCY),STHCAL(MNCY),CPHCAL(MNCPHI),SPHCAL(MNCPHI), $YCMIN,YCMAX,NCY,NCPHI PARAMETER (NJMAX=500) COMMON/GETCOM/PCJET(4,NJMAX),ETJET(NJMAX),JETNO(MNCY,MNCPHI),NCJET INTEGER IPHI,IY DOUBLE PRECISION PI,PHIX,YX,THX PARAMETER (PI=3.141593D0) LOGICAL FSTCAL DATA FSTCAL/.TRUE./ C C INITIALIZE ET ARRAY. DO 100 IPHI=1,NCPHI DO 100 IY=1,NCY 100 ET(IY,IPHI)=0. C IF (FSTCAL) THEN C CALCULATE TRIG. FUNCTIONS. DELPHI=2.*PI/FLOAT(NCPHI) DO 200 IPHI=1,NCPHI PHIX=DELPHI*(IPHI-.5) CPHCAL(IPHI)=COS(PHIX) SPHCAL(IPHI)=SIN(PHIX) 200 CONTINUE DELY=(YCMAX-YCMIN)/FLOAT(NCY) DO 300 IY=1,NCY YX=DELY*(IY-.5)+YCMIN THX=2.*ATAN(EXP(-YX)) CTHCAL(IY)=COS(THX) STHCAL(IY)=SIN(THX) 300 CONTINUE FSTCAL=.FALSE. ENDIF END C SUBROUTINE CALSIM C C SIMPLE CALORIMETER SIMULATION. ASSUME UNIFORM Y AND PHI C BINS C...HEPEVT commonblock. INTEGER NMXHEP,NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP PARAMETER (NMXHEP=4000) COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP), &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP) DOUBLE PRECISION PHEP,VHEP SAVE /HEPEVT/ C...GETJET commonblocks INTEGER MNCY,MNCPHI,NCY,NCPHI,NJMAX,JETNO,NCJET DOUBLE PRECISION YCMIN,YCMAX,DELY,DELPHI,ET,STHCAL,CTHCAL,CPHCAL, & SPHCAL,PCJET,ETJET PARAMETER (MNCY=200) PARAMETER (MNCPHI=200) COMMON/CALOR/DELY,DELPHI,ET(MNCY,MNCPHI), $CTHCAL(MNCY),STHCAL(MNCY),CPHCAL(MNCPHI),SPHCAL(MNCPHI), $YCMIN,YCMAX,NCY,NCPHI PARAMETER (NJMAX=500) COMMON/GETCOM/PCJET(4,NJMAX),ETJET(NJMAX),JETNO(MNCY,MNCPHI),NCJET INTEGER IHEP,ID,IY,IPHI DOUBLE PRECISION PI,YIP,PSERAP,PHIIP,EIP PARAMETER (PI=3.141593D0) C C FILL CALORIMETER C DO 200 IHEP=1,NHEP IF (ISTHEP(IHEP).EQ.1) THEN YIP=PSERAP(PHEP(1,IHEP)) IF(YIP.LT.YCMIN.OR.YIP.GT.YCMAX) GOTO 200 ID=ABS(IDHEP(IHEP)) C---EXCLUDE TOP QUARK, LEPTONS, PROMPT PHOTONS IF ((ID.GE.11.AND.ID.LE.16).OR.ID.EQ.6.OR.ID.EQ.22) GOTO 200 C PHIIP=ATAN2(PHEP(2,IHEP),PHEP(1,IHEP)) IF(PHIIP.LT.0.) PHIIP=PHIIP+2.*PI IY=INT((YIP-YCMIN)/DELY)+1 IPHI=INT(PHIIP/DELPHI)+1 EIP=PHEP(4,IHEP) C WEIGHT BY SIN(THETA) ET(IY,IPHI)=ET(IY,IPHI)+EIP*STHCAL(IY) ENDIF 200 CONTINUE END SUBROUTINE GETJET(RJET,EJCUT,ETAJCUT) C C SIMPLE JET-FINDING ALGORITHM (SIMILAR TO UA1). C C FIND HIGHEST REMAINING CELL > ETSTOP AND SUM SURROUNDING C CELLS WITH-- C DELTA(Y)**2+DELTA(PHI)**2<RJET**2 C ET>ECCUT. C KEEP JETS WITH ET>EJCUT AND ABS(ETA)<ETAJCUT C THE UA1 PARAMETERS ARE RJET=1.0 AND EJCUT=5.0 C IMPLICIT NONE C...GETJET commonblocks INTEGER MNCY,MNCPHI,NCY,NCPHI,NJMAX,JETNO,NCJET DOUBLE PRECISION YCMIN,YCMAX,DELY,DELPHI,ET,STHCAL,CTHCAL,CPHCAL, & SPHCAL,PCJET,ETJET PARAMETER (MNCY=200) PARAMETER (MNCPHI=200) COMMON/CALOR/DELY,DELPHI,ET(MNCY,MNCPHI), $CTHCAL(MNCY),STHCAL(MNCY),CPHCAL(MNCPHI),SPHCAL(MNCPHI), $YCMIN,YCMAX,NCY,NCPHI PARAMETER (NJMAX=500) COMMON/GETCOM/PCJET(4,NJMAX),ETJET(NJMAX),JETNO(MNCY,MNCPHI),NCJET INTEGER IPHI,IY,J,K,NPHI1,NPHI2,NY1, & NY2,IPASS,IYMX,IPHIMX,ITLIS,IPHI1,IPHIX,IY1,IYX DOUBLE PRECISION PI,RJET, & ETMAX,ETSTOP,RR,ECCUT,PX,EJCUT PARAMETER (PI=3.141593D0) DOUBLE PRECISION ETAJCUT,PSERAP C C PARAMETERS DATA ECCUT/0.1D0/ DATA ETSTOP/1.5D0/ DATA ITLIS/6/ C C INITIALIZE C c init uninit variables iymx = 0 iphimx = 0 c DO 100 IPHI=1,NCPHI DO 100 IY=1,NCY 100 JETNO(IY,IPHI)=0 DO 110 J=1,NJMAX ETJET(J)=0. DO 110 K=1,4 110 PCJET(K,J)=0. NCJET=0 NPHI1=RJET/DELPHI NPHI2=2*NPHI1+1 NY1=RJET/DELY NY2=2*NY1+1 IPASS=0 C C FIND HIGHEST CELL REMAINING C 1 ETMAX=0. DO 200 IPHI=1,NCPHI DO 210 IY=1,NCY IF(ET(IY,IPHI).LT.ETMAX) GOTO 210 IF(JETNO(IY,IPHI).NE.0) GOTO 210 ETMAX=ET(IY,IPHI) IYMX=IY IPHIMX=IPHI 210 CONTINUE 200 CONTINUE IF(ETMAX.LT.ETSTOP) RETURN C C SUM CELLS C IPASS=IPASS+1 IF(IPASS.GT.NCY*NCPHI) THEN WRITE(ITLIS,8888) IPASS 8888 FORMAT(//' ERROR IN GETJET...IPASS > ',I6) RETURN ENDIF NCJET=NCJET+1 IF(NCJET.GT.NJMAX) THEN WRITE(ITLIS,9999) NCJET 9999 FORMAT(//' ERROR IN GETJET...NCJET > ',I5) RETURN ENDIF DO 300 IPHI1=1,NPHI2 IPHIX=IPHIMX-NPHI1-1+IPHI1 IF(IPHIX.LE.0) IPHIX=IPHIX+NCPHI IF(IPHIX.GT.NCPHI) IPHIX=IPHIX-NCPHI DO 310 IY1=1,NY2 IYX=IYMX-NY1-1+IY1 IF(IYX.LE.0) GOTO 310 IF(IYX.GT.NCY) GOTO 310 IF(JETNO(IYX,IPHIX).NE.0) GOTO 310 RR=(DELY*(IY1-NY1-1))**2+(DELPHI*(IPHI1-NPHI1-1))**2 IF(RR.GT.RJET**2) GOTO 310 IF(ET(IYX,IPHIX).LT.ECCUT) GOTO 310 PX=ET(IYX,IPHIX)/STHCAL(IYX) C ADD CELL TO JET PCJET(1,NCJET)=PCJET(1,NCJET)+PX*STHCAL(IYX)*CPHCAL(IPHIX) PCJET(2,NCJET)=PCJET(2,NCJET)+PX*STHCAL(IYX)*SPHCAL(IPHIX) PCJET(3,NCJET)=PCJET(3,NCJET)+PX*CTHCAL(IYX) PCJET(4,NCJET)=PCJET(4,NCJET)+PX ETJET(NCJET)=ETJET(NCJET)+ET(IYX,IPHIX) JETNO(IYX,IPHIX)=NCJET 310 CONTINUE 300 CONTINUE C C DISCARD JET IF ET < EJCUT. C IF(ETJET(NCJET).GT.EJCUT.AND.ABS(PSERAP(PCJET(1,NCJET))).LT $ .ETAJCUT) GOTO 1 ETJET(NCJET)=0. DO 400 K=1,4 400 PCJET(K,NCJET)=0. NCJET=NCJET-1 GOTO 1 END C----------------------------------------------------------------------- SUBROUTINE CALDEL(ISTLO,ISTHI) C LABEL ALL PARTICLES WITH STATUS BETWEEN ISTLO AND ISTHI (UNTIL A C PARTICLE WITH STATUS ISTOP IS FOUND) AS FINAL-STATE, CALL CALSIM C AND THEN PUT LABELS BACK TO NORMAL C----------------------------------------------------------------------- IMPLICIT NONE INTEGER MAXNUP PARAMETER(MAXNUP=500) C...HEPEVT commonblock. INTEGER NMXHEP,NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP PARAMETER (NMXHEP=4000) COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP), &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP) DOUBLE PRECISION PHEP,VHEP SAVE /HEPEVT/ INTEGER ISTLO,ISTHI C...Inputs for the matching algorithm double precision etcjet,rclmax,etaclmax,qcut,qfact integer maxjets,minjets,iexcfile,ktsche common/MEMAIN/etcjet,rclmax,etaclmax,qcut,qfact, $ maxjets,minjets,iexcfile,ktsche C...Silence gcc 4.3.4 warnings. ISTLO=ISTLO ISTHI=ISTHI CALL CALSIM END C----------------------------------------------------------------------- FUNCTION PSERAP(P) C PSEUDO-RAPIDITY (-LOG TAN THETA/2) C----------------------------------------------------------------------- DOUBLE PRECISION PSERAP,P(3),PT,PL,TINY,THETA PARAMETER (TINY=1D-3) PT=SQRT(P(1)**2+P(2)**2)+TINY PL=P(3) THETA=ATAN2(PT,PL) PSERAP=-LOG(TAN(0.5*THETA)) END C-----------------------------------------------------------------------