SUBROUTINE ZES_T8(t8e,t8x) IMPLICIT NONE * ********************************************************************** * This is an interface routine to the standard-t8-subroutine GT_TAG8 * written to be used by ZES. Output of ZES_T8 is energy and xposition * measured in the 8m-tagger (t8e, t8x). * The 8m-tagger was working properly only since runnumber 21714! (Aug1996) * For 1997 only default calibration values are used so far! * * ERRORFLAGS: t8e = -999. ==> either run<21714 or any other bad run * (Tagger not in Data-chain ... ) * t8x = -999. ==> either run<21714 or any other bad run * * t8x = -100. ==> energy-measurement ok, xposition could not * be reconstructed, some users might want * to cut on this * * In Case of problems / comments: mailto Ulrike.Wollmer@desy.de * * today : 21.11.1997 ************************************************************************* #include "partap.inc" #include "zrevt.inc" #include "t8_data.inc" * INTEGER irun,zerr REAL run,t8e,t8x * IF (Coutab(ZREVT).gt.0) THEN CALL Fettab(ZREVT,id,1) run = ZREVT_runnr irun = int(run) ELSE t8e = -999. t8x = -999. RETURN ENDIF IF (irun.le.21713) THEN t8e = -999. t8x = -999. RETURN ELSE zerr = 0 CALL GT_TAG8(irun,zerr) IF (zerr.lt.0) THEN t8e = -999. t8x = -999. ELSE t8e = t8_e IF (abs(t8_x).lt.0.5) THEN t8x = -100. ELSE t8x = t8_x ENDIF ENDIF RETURN ENDIF END ********************************************************************** Subroutine GT_TAG8(irun,ierr) * ***************************** Implicit NONE * #include "partap.inc" #include "zrevt.inc" #include "t8main.inc" #include "t8_data.inc" INTEGER vector(4),ierr,irun,nrun SAVE nrun REAL e_p(11),e_tot,e_ped(11),e_cor(11),eped,ecor SAVE eped,ecor,e_ped,e_cor INTEGER pos,og,ug,i REAL t_emax,sum_g,thr_e,xmitte(11) PARAMETER (thr_e=1.25) LOGICAL t8_first SAVE t8_first DATA t8_first /.true./ DATA xmitte/0.,4.,8.,12.,16.,20.,24.,28.,32.,36.,40./ ierr = 0 IF (t8_first) THEN nrun = 1 t8_first = .false. ENDIF * only if runnumber has changed, call calibconstants and pedestals IF (nrun.ne.irun) THEN nrun = irun * check wether run is good and get calibration constants: * ierr=-1 : run is bad, don't use CALL GT_8_COR(nrun,ecor,e_cor,ierr) IF (ierr.eq.-1) THEN t8_nstr = -100 t8_xerr = -100 t8_max = -100 t8_e = -100. t8_x = -100. t8_pres = -100. t8_veto = -100. RETURN ENDIF * get the pedestal-values * ierr=-2 : one of the central position strips is dead * ==> x-reconstruction will give false values! * ==> recommend : don't use CALL GT_8_PED(nrun,eped,e_ped,ierr) ENDIF * now read out t8main: IF( COUTAB(T8MAIN).GT.0 ) THEN CALL fettab(T8MAIN, id, 1) CALL ucopy(T8MAIN_ADC1, vector, 5) e_p(10) = ibits(vector(1),0,8) e_p(9) = ibits(vector(1),8,8) e_p(8) = ibits(vector(1),16,8) e_tot = ibits(vector(1),24,8) e_p(11) = ibits(vector(2),8,8) e_p(5) = ibits(vector(2),16,8) t8_pres = ibits(vector(2),24,8) e_p(7) = ibits(vector(3),0,8) t8_veto = ibits(vector(3),8,8) e_p(6) = ibits(vector(3),24,8) e_p(3) = ibits(vector(4),0,8) e_p(4) = ibits(vector(4),8,8) e_p(1) = ibits(vector(4),16,8) e_p(2) = ibits(vector(4),24,8) ELSE ierr = -3 t8_e = -100. t8_x = -100. t8_pres = -100. t8_veto = -100. t8_max = -100 t8_nstr = -100 t8_xerr = -100 RETURN ENDIF * * Pedestalsubtraction etc: * t8_e = (e_tot - eped) / ecor DO i=1,11 e_p(i) = (e_p(i) - e_ped(i)) * e_cor(i) ENDDO t8_pres = t8_pres - 6.5 t8_veto = t8_veto - 7.2 * look for strip with max energy deposition t_emax = e_p(1) pos = 1 DO i=2,10 IF (e_p(i).gt.t_emax) THEN t_emax = e_p(i) pos = i ENDIF ENDDO t8_max = pos * check if strip with max energy is not the very left or very right * and if deposition exceeds threshold * t8_xerr = 0 IF (pos.eq.1) THEN t8_xerr = 1 t8_nstr = 1 t8_x = 1. RETURN ENDIF IF (pos.eq.10) THEN t8_xerr = 1 t8_nstr = 1 t8_x = 36. RETURN ENDIF IF (e_p(pos).lt.thr_e*e_cor(pos)) THEN t8_xerr = 2 t8_nstr = 0 t8_x = 0. t8_max = 0 RETURN ENDIF * calculate xposition (energyweighted geometrical mean) * IF (t8_xerr.eq.0) THEN ug = pos og = pos sum_g = e_p(pos) DO i=pos+1,10 IF (e_p(i).gt.thr_e*e_cor(i)) THEN sum_g = sum_g + e_p(i) og = i ELSE goto 501 ENDIF ENDDO 501 continue DO i=pos-1,1,-1 IF (e_p(i).gt.thr_e*e_cor(i)) THEN sum_g = sum_g + e_p(i) ug = i ELSE goto 502 ENDIF ENDDO 502 continue t8_nstr = og - ug +1 t8_x = 0.0 DO i=ug,og t8_x = t8_x + e_p(i)*xmitte(i) ENDDO t8_x = t8_x / sum_g * end of { IF (t8_xerr.eq.0) } ENDIF RETURN END ********************************************************************* SUBROUTINE GT_8_COR(irun,cor_e,cor_p,ierr) IMPLICIT NONE INTEGER irun,ierr,i REAL cor_e,cor_p(11) * calibration-constants for energy-channel: REAL t8_ce(3) * calibration-constants for position strips: REAL t8_strip(11) DATA t8_ce / 32.91,33.22,31.89 / DATA t8_strip / 4.63,1.477,1.029,1.496,1.552,1.298,1.989,6.039, &2.408,2.331,3.057 / ierr = 0 * period -1 : no useful t8-data IF (irun.lt.21105) THEN ierr = -1 RETURN * period 0 : tagger in data-chain, but no calibration-banks ELSEIF ((irun.ge.21105).and.(irun.le.21712)) THEN IF (irun.eq.21338) THEN ierr = -1 RETURN ELSEIF (irun.eq.21469) THEN ierr = -1 RETURN ELSEIF ((irun.ge.21551).and.(irun.le.21556)) THEN ierr = -1 RETURN ELSEIF ((irun.ge.21585).and.(irun.le.21588)) THEN ierr = -1 RETURN ELSEIF (irun.eq.21709) THEN ierr = -1 RETURN ELSEIF (irun.eq.21710) THEN ierr = -1 RETURN ELSE cor_e = t8_ce(1) DO i=1,11 cor_p(i) = t8_strip(i) ENDDO ierr = 1 ENDIF * period 1 ELSEIF ((irun.ge.21713).and.(irun.le.22099)) THEN IF (irun.eq.21732) THEN ierr = -1 RETURN ELSEIF (irun.eq.21966) THEN ierr = -1 RETURN ELSE cor_e = t8_ce(1) DO i=1,11 cor_p(i) = t8_strip(i) ENDDO ENDIF * period 2 ELSEIF ((irun.ge.22100).and.(irun.le.22570)) THEN cor_e = t8_ce(2) DO i=1,11 cor_p(i) = t8_strip(i) ENDDO * period 3 ELSEIF ((irun.ge.22571).and.(irun.le.22954)) THEN IF (irun.eq.22516) THEN ierr = -1 RETURN ELSEIF (irun.eq.22716) THEN ierr = -1 RETURN ELSEIF (irun.eq.22835) THEN ierr = -1 RETURN ELSEIF (irun.eq.22836) THEN ierr = -1 RETURN ELSEIF (irun.eq.22942) THEN ierr = -1 RETURN ELSE cor_e = t8_ce(3) DO i=1,11 cor_p(i) = t8_strip(i) ENDDO ENDIF * period 4 : 1997 - only default values so far * ELSEIF (irun.gt.22954) THEN ELSE cor_e = t8_ce(3) DO i=1,11 cor_p(i) = t8_strip(i) ENDDO ierr = 2 ENDIF RETURN END ********************************************************************* SUBROUTINE GT_8_PED(irun,ped_e,ped_p,ierr) IMPLICIT NONE INTEGER irun,ierr,i REAL ped_e,ped_p(11) REAL tped_00(12),tped_01(12),tped_02(12),tped_03(12),tped_04(12) REAL tped_05(12),tped_06(12),tped_07(12),tped_08(12),tped_09(12) REAL tped_10(12),tped_11(12),tped_12(12),tped_13(12),tped_14(12) REAL tped_15(12),tped_16(12),tped_17(12),tped_18(12),tped_19(12) DATA tped_00 / 12*6.0 / DATA tped_01 / 5.5,4.7,5.5,5.1,5.6,5.5,6.6,6.1,6.5,6.5,3.5,7.4/ DATA tped_02 / 6.2,0.0,5.5,5.5,5.7,5.5,6.6,6.1,6.5,6.5,3.5,7.4/ DATA tped_03 / 5.6,3.5,5.5,5.2,6.4,5.7,7.3,6.1,6.5,6.5,3.5,7.4/ DATA tped_04 / 5.6,3.5,5.5,5.1,6.3,5.5,6.8,5.9,6.5,6.5,3.5,7.3/ DATA tped_05 / 5.6,3.5,5.5,5.1,6.5,5.5,6.8,5.9,6.5,6.5,3.5,7.3/ DATA tped_06 / 5.6,3.5,5.5,5.0,6.2,5.5,6.8,5.8,6.5,6.5,3.5,7.3/ DATA tped_07 / 5.6,3.5,5.5,5.1,6.5,5.5,6.6,5.8,6.5,6.5,3.5,7.1/ DATA tped_08 / 5.6,3.5,5.5,5.1,6.4,5.5,6.6,5.7,6.5,6.5,3.5,7.1/ DATA tped_09 / 5.6,3.5,5.5,5.0,6.2,5.5,6.6,5.7,6.5,6.5,3.5,7.1/ DATA tped_10 / 5.6,3.5,5.5,5.0,6.5,5.5,6.6,5.7,6.5,6.5,3.5,7.1/ DATA tped_11 / 5.6,3.5,5.5,5.1,5.7,5.5,6.6,5.8,6.5,6.5,3.5,7.1/ DATA tped_12 / 5.6,3.5,5.5,5.1,5.7,5.5,6.7,5.8,6.5,6.5,3.5,7.1/ DATA tped_13 / 5.6,3.5,5.5,5.1,6.0,5.5,6.7,5.7,6.5,6.5,3.5,7.1/ DATA tped_14 / 5.6,3.5,5.5,5.1,5.6,5.5,6.7,5.7,6.5,6.5,3.3,7.1/ DATA tped_15 / 5.6,3.5,5.5,5.1,5.9,5.5,6.7,5.6,6.5,6.4,3.5,7.0/ DATA tped_16 / 5.6,3.5,5.5,5.1,6.5,5.5,6.7,5.7,6.5,6.5,0.0,7.2/ DATA tped_17 / 5.6,3.5,5.5,5.1,6.3,5.5,6.7,5.8,6.5,6.5,0.0,7.2/ DATA tped_18 / 5.6,3.5,5.4,5.0,6.4,5.5,6.7,5.8,6.5,6.5,0.0,7.2/ DATA tped_19 / 5.6,3.5,5.4,5.0,6.1,5.5,6.6,5.7,6.5,6.5,0.0,7.1/ IF ((irun.ge.21105).and.(irun.le.21227)) THEN ierr = -2 ped_e = tped_01(12) DO i=1,11 ped_p(i) = tped_01(i) ENDDO ELSEIF ((irun.ge.21228).and.(irun.le.21258)) THEN ped_e = tped_01(12) DO i=1,11 ped_p(i) = tped_01(i) ENDDO ELSEIF ((irun.ge.21259).and.(irun.le.21338)) THEN ped_e = tped_02(12) DO i=1,11 ped_p(i) = tped_02(i) ENDDO ELSEIF ((irun.ge.21339).and.(irun.le.21439)) THEN ierr = -2 ped_e = tped_03(12) DO i=1,11 ped_p(i) = tped_03(i) ENDDO ELSEIF ((irun.ge.21440).and.(irun.le.21446)) THEN ped_e = tped_04(12) DO i=1,11 ped_p(i) = tped_04(i) ENDDO ELSEIF ((irun.ge.21447).and.(irun.le.21625)) THEN ped_e = tped_05(12) DO i=1,11 ped_p(i) = tped_05(i) ENDDO ELSEIF ((irun.ge.21626).and.(irun.le.21648)) THEN ped_e = tped_06(12) DO i=1,11 ped_p(i) = tped_06(i) ENDDO ELSEIF ((irun.ge.21649).and.(irun.le.21700)) THEN ped_e = tped_07(12) DO i=1,11 ped_p(i) = tped_07(i) ENDDO ELSEIF ((irun.ge.21701).and.(irun.le.21870)) THEN ped_e = tped_08(12) DO i=1,11 ped_p(i) = tped_08(i) ENDDO ELSEIF ((irun.ge.21871).and.(irun.le.21988)) THEN ped_e = tped_09(12) DO i=1,11 ped_p(i) = tped_09(i) ENDDO ELSEIF ((irun.ge.21989).and.(irun.le.22057)) THEN ped_e = tped_10(12) DO i=1,11 ped_p(i) = tped_10(i) ENDDO ELSEIF ((irun.ge.22058).and.(irun.le.22071)) THEN ped_e = tped_11(12) DO i=1,11 ped_p(i) = tped_11(i) ENDDO ELSEIF ((irun.ge.22072).and.(irun.le.22100)) THEN ped_e = tped_12(12) DO i=1,11 ped_p(i) = tped_12(i) ENDDO ELSEIF ((irun.ge.22101).and.(irun.le.22128)) THEN ped_e = tped_13(12) DO i=1,11 ped_p(i) = tped_13(i) ENDDO ELSEIF ((irun.ge.22129).and.(irun.le.22150)) THEN ped_e = tped_14(12) DO i=1,11 ped_p(i) = tped_14(i) ENDDO ELSEIF ((irun.ge.22151).and.(irun.le.22500)) THEN ped_e = tped_15(12) DO i=1,11 ped_p(i) = tped_15(i) ENDDO ELSEIF ((irun.ge.22501).and.(irun.le.22634)) THEN ped_e = tped_16(12) DO i=1,11 ped_p(i) = tped_16(i) ENDDO ELSEIF ((irun.ge.22635).and.(irun.le.22694)) THEN ped_e = tped_17(12) DO i=1,11 ped_p(i) = tped_17(i) ENDDO ELSEIF ((irun.ge.22695).and.(irun.le.22809)) THEN ped_e = tped_18(12) DO i=1,11 ped_p(i) = tped_18(i) ENDDO ELSEIF ((irun.ge.22810).and.(irun.le.22954)) THEN ped_e = tped_19(12) DO i=1,11 ped_p(i) = tped_19(i) ENDDO * ELSEIF (irun.ge.22955) THEN ELSE ped_e = tped_00(12) DO i=1,11 ped_p(i) = tped_00(i) ENDDO ENDIF RETURN END