C ============================== SUBROUTINE DO_EM(CTRL_YEAR,XV) C ============================== C C ------------------------------------------------------------- C --- Run EM in cell island mode. --- C ------------------------------------------------------------- IMPLICIT NONE #include "zescommon.inc" #include "zestmpcommon.inc" #include "empar.inc" #include "emcom.inc" #include "emfatal.inc" LOGICAL FIRST DATA FIRST / .TRUE. / INTEGER J,K, CTRL_YEAR REAL XV(3), CALPOS(3), SPOS(3),SRTDC(20), ECAL REAL ESRTD, ECORR_SRTD, RDIST INTEGER IDCLU, ICAND, IERR, I INTEGER CENTRAL_TILE, E_IND INTEGER HESMODE, MAXCLU, IX, IY, NHES INTEGER IFLAG REAL D1, D2, XHES, YHES, EHES, RATIO PARAMETER ( D1 = 0.0 , D2 = 10.0 ) PARAMETER ( maxclu = 20 ) REAL RCLU(4,MAXCLU) INTEGER ICLU(2,MAXCLU) REAL PSAME(3) REAL EInDummy(100), ENotInDummy(100) REAL Ecorr(nEeCorr), NOUSE, EMERROR DATA NOUSE / -999.99 / DATA EMERROR / -100.00 / Integer icandind,tmpInd CHARACTER config*100 IF (FIRST) THEN FIRST = .FALSE. WRITE(*,*) ' +----------------+' WRITE(*,*) ' | EM called |' WRITE(*,*) ' +----------------+' DO I=1,20 SRTDC(I) = 0.0 ENDDO ENDIF CALL INIT_ZESEM (NOUSE) C --- need additional bug fix for PRESAMPLER here ... CALL PRCALIB(Ierr) C config = 'fHAC fModF fCelF fModB fCelB fModR fCelR'// + ' Bkgd dThe dPhi InvP CellIsl' CALL EMConfigure(config, .TRUE., .TRUE., .TRUE.) CALL EM(XV, Ierr, 0) ZESTMP_Ncand_em = nCand C ------------------------------------------------------------------ C --- In case of a fatal error set all EM variables to --- C --- (-100-ErrorCode). Previously a STOP statement was executed --- C --- under such circumstances. --- C ------------------------------------------------------------------ IF (emFatalError.NE.0) THEN CALL INIT_ZESEM(EMERROR - float(emFatalError)) RETURN ENDIF C ----------------------------------------- C --- Count number of Good Candidates --- C ----------------------------------------- C E > 4 GeV and grandprob > 1E-4 C added in a hurry by mike Wodarczyk May 11, 1999 C ZES_NcandG_em = 0 do icandind=0,nCand tmpInd = eSelProbRank(icandInd) if ( eE(tmpInd).gt. 4.0 .and. eGrandProb(tmpInd).gt.1E-4 ) & ZES_NcandG_em = ZES_NcandG_em + 1 enddo IF (nCand.GT.0) THEN C --------------------------------- C --- Calorimeter information --- C --------------------------------- E_IND = eSelProbRank(1) ZES_Eeu_em = eE( E_IND) ZES_Xeu_em = ePos(1, E_IND) ZES_Yeu_em = ePos(2, E_IND) ZES_Zeu_em = ePos(3, E_IND) C AFM 17.12.98: change of definition of ZES_Prob_em: C Use grand prob instead of selection prob C ZES_Prob_em = eSelProb( E_IND) ZES_Prob_em = eGrandProb( E_IND) ZESTMP_Ncell_em = MIN(eNCell(E_IND),50) !!! store <= 50 cells C --- temp. storage of cell numbers for hadronic variables --- DO I=1,ZESTMP_Ncell_em ZESTMP_CellList_em(I) = eCellList(eCellPtr(E_IND)+I) ENDDO c BS 12.12.99 take theta,phi from emcom.inc ZES_theta_em = eTheta(E_IND) ZES_phi_em = ePhi(E_IND) ZES_pt_em = ZES_Eeu_em*sin(ZES_theta_em) C ----------------------------------- C --- corrected electron energy --- C ----------------------------------- CALPOS(1) = ZES_Xeu_em CALPOS(2) = ZES_Yeu_em CALPOS(3) = ZES_Zeu_em c BS 12.12.99 eliminate the call to emEnergyCorrection. c the corrected energy was already computed in the c call to em. ZES_Ecorr_em = eECorr(3,E_IND) C ----------------------------------- C --- electron cone isolation ? --- C ----------------------------------- ZES_Ein_em = eECone(1, E_IND) ZES_ENin_em = eBCone(1, E_IND) C -------------------------- C --- SRTD information --- C -------------------------- ECAL = ZES_Eeu_em CALL SRTDELEC(XV,CALPOS,ECAL,SRTDC, 1 IDCLU,SPOS,ESRTD,ECORR_SRTD,RDIST,Ierr) ZES_xsrtd_em = SPOS(1) ZES_ysrtd_em = SPOS(2) C SRTD z not stored since it is always the same ZES_Esrtd_em = ESRTD ZES_Fsrtd_em = FLOAT(Ierr) C -------------------------------- C --- PRESAMPLER information --- C -------------------------------- CALL PRCLUS(CALPOS, XV(3), PSAME, CENTRAL_TILE, Ierr) IF (Ierr .GE. 0) THEN ZES_Epres1_em = PSAME(1) ZES_Epres2_em = PSAME(2) ZES_Epres3_em = PSAME(3) ENDIF C ------------------------- C --- HES information --- C ------------------------- IF (CTRL_YEAR.EQ.1992) HESMODE = 1992 IF (CTRL_YEAR.EQ.1993) HESMODE = 1993 IF (CTRL_YEAR.EQ.1994) HESMODE = 1994 IF (CTRL_YEAR.EQ.1995) HESMODE = 1995 IF (CTRL_YEAR.EQ.1996) HESMODE = 1996 IF (CTRL_YEAR.EQ.1997) HESMODE = 1997 CALL HESCLU (CALPOS(1), CALPOS(2), CALPOS(3), & D1,D2,HESMODE, & IFLAG, & XHES,YHES,EHES, & RATIO,IX,IY,NHES,RCLU,ICLU) ZES_XHes_em = XHES ZES_YHes_em = YHES ZES_RHes_em = RATIO ZES_EHes_em = EHES C ------------------------------ C --- Tracking information --- C ------------------------------ ZES_TrkMatch_em = eTrkNo(E_Ind) ENDIF C ---------------------------------------------------------- C --- determine parameters for second electron candidate --- C ---------------------------------------------------------- IF (nCand .GE. 2) THEN C --------------------------------- C --- Calorimeter information --- C --------------------------------- E_IND = eSelProbRank(2) ZES_2Eeu_em = eE( E_IND) ZESTMP_2Xeu_em = ePos(1, E_IND) ZESTMP_2Yeu_em = ePos(2, E_IND) ZESTMP_2Zeu_em = ePos(3, E_IND) C AFM 17.12.98: change of definition of ZES_2Prob_em: C Use grand prob instead of selection prob C ZES_2Prob_em = eSelProb( E_IND) ZES_2Prob_em = eGrandProb( E_IND) ZESTMP_2Ncell_em = MIN(eNCell(E_IND),50) !!! store <= 50 cells C --- temp. storage of cell numbers for hadronic variables --- DO I=1,ZESTMP_2Ncell_em ZESTMP_2CellList_em(I) = eCellList(eCellPtr(E_IND)+I) ENDDO c BS 12.12.99 take theta,phi from emcom.inc ZES_2theta_em = eTheta(E_IND) ZESTMP_2phi_em = ePhi(E_IND) ZES_2pt_em = ZES_2Eeu_em*sin(ZES_2theta_em) C ----------------------------------- C --- electron cone isolation ? --- C ----------------------------------- ZES_2Ein_em = eECone(1, E_IND) ENDIF RETURN END C ============================== SUBROUTINE INIT_ZESEM(default) C ============================== IMPLICIT NONE #include "zescommon.inc" #include "zestmpcommon.inc" REAL default ZES_NcandG_em = 0 ZES_Eeu_em = default ZES_Xeu_em = default ZES_Yeu_em = default ZES_Zeu_em = default ZES_Prob_em = default ZES_Trkmatch_em = default ZES_xsrtd_em = default ZES_ysrtd_em = default ZES_Esrtd_em = default ZES_Fsrtd_em = default ZES_Epres1_em = default ZES_Epres2_em = default ZES_Epres3_em = default ZES_xhes_em = default ZES_yhes_em = default ZES_rhes_em = default ZES_ehes_em = default ZES_Ein_em = default ZES_ENin_em = default ZES_ecorr_em = default ZES_theta_em = default ZES_phi_em = default ZES_pt_em = default ZESTMP_Ncell_em = 0 ZESTMP_Ncand_em = 0 C --- Init second electron --- ZES_2Eeu_em = default ZESTMP_2Xeu_em = default ZESTMP_2Yeu_em = default ZESTMP_2Zeu_em = default ZES_2Prob_em = default ZES_2Ein_em = default ZES_2theta_em = default ZESTMP_2phi_em = default ZES_2pt_em = default ZESTMP_2Ncell_em = 0 RETURN END