diff --git a/hc_hodo_calib/.gitignore b/hc_hodo_calib/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..1498364b5043b5412a1fdb30a1ad575e561f1c2f --- /dev/null +++ b/hc_hodo_calib/.gitignore @@ -0,0 +1,7 @@ +tofcal +h1fort.37 +fort.15 +*.adchist +*.tdchist +tofcal.out +tofcal.param* diff --git a/hc_hodo_calib/Maketof b/hc_hodo_calib/Maketof new file mode 100755 index 0000000000000000000000000000000000000000..41260f4b912c4b2d76c6957c489e1047882dfb27 --- /dev/null +++ b/hc_hodo_calib/Maketof @@ -0,0 +1 @@ +gfortran -W -ff2c -fbounds-check -fno-automatic -fdefault-real-8 tofcal.f -L$CERN_ROOT/lib -lmathlib -lpacklib -lkernlib -o tofcal diff --git a/hc_hodo_calib/tofcal.f b/hc_hodo_calib/tofcal.f new file mode 100644 index 0000000000000000000000000000000000000000..39c7917caefecc245e8c2d3ba9c82ae896d69416 --- /dev/null +++ b/hc_hodo_calib/tofcal.f @@ -0,0 +1,477 @@ + program tofcal +! Fit TOF for Hall C HMS or SOS with the form for each PMT: +! tcorr = time - offset - path * velocity - adccor / sqrt(ADC) +! where offset, velocity, and adccor are parameters +! April 10, 2005 P. Bosted +! Input file: tofcal.inp should contain name of data file to be fit +! First xter of file name should be "h" for HMS data +! and "s" for SOS. +! To generate an input file, set xdumptof = 1 in xdebug.param in +! the PARAM directory, where x=h for HMS, x=s for SOS +! The HMS output will be in fort.37, and the SOS in fort.38 +! The output parameters will be in tofcal.param. Insert these +! into the xhodo.param file that you are using. Make sure to +! erase the old values of sigma, or put the new ones after the +! old ones, so that they get used properly +! Normal values of invadc_offset are between -50 and 50, +! normal values of invadc_velocity are between 12 and 17 (50 is +! default if not enough data for the fit), and normal values of +! shodo_pos_invadc_adc are 20 to 50. Normal values of the sigmas +! are 0.3 to 0.8 nsec. + + implicit none + integer i,j,k,n,nparam,ipn,ipl,idt,idet(1000),nhit(200) + integer ip1(200),ip2(200),ip3(200),ifail,nhit0(200) + integer ipdet(600),iptyp(600),iwork(1000),k1,k2,k3,k4,k5,k6 + real*8 tr(1000),p(1000),zc(1000),tc1(1000),p2(1000),hival,dtc + real*8 ax(1000,1000),bx(1000),sum1(200),sum2(200),sum3(200) + real*8 mean0(200),sig0(200),mean(200),sig(200),dt,adc(1000) + real*8 toff(200),vel(200),quad(200),chisq,df,ttol,adcmin(200) + real*8 avtime,ntime + integer thist(200,10),iloop,adchist(200,18),phist(200,18) + integer thistf(200,50),adchistf(200,50) + integer adchistpm(200,20,2) + + character*80 string + character*40 filename + + open(unit=7,file='tofcal.inp') + read(7,'(a)') filename + open(unit=8,file='tofcal.out') + open(unit=11,file='tofcal.parampass1') + open(unit=12,file='tofcal.param') + open(unit=13,file='tofcal.adchist') + write(13,'(1x,'' xv'',50f5.0)') (20.*(j-0.5),j=1,50) + open(unit=14,file='tofcal.tdchist') + write(14,'(1x,'' xv'',50f5.1)') (-5.0+0.2*(j-0.5),j=1,50) + +! first see how many hits per PMT: need at least 100 for fitting +! also make ADC histograms + open(unit=9,file=filename,err=998) + if(filename(1:1).ne.'h'.and.filename(1:1).ne.'s') then + write(6,'(1x,''error, input file name '', + > '' should start with h or s'')') + goto 999 + endif + write(*,*) ' filling adc histograms' + do i=1,10000000 + n=0 + do j=1,1000 + read(9,'(a)',end=10) string + read(string,'(1x,i1)') k + if(k.eq.0) goto 9 + n=n+1 + read(string,'(1x,i1,2i3,5f10.3)') ipn,ipl,idt, + > tr(n),p(n),zc(n),tc1(n),adc(n) + k = min(18, max(1, int((adc(n)/20.)+1))) + idet(n) = 100*(ipn-1) + 20*(ipl-1) + idt + adchist(idet(n), k) = adchist(idet(n), k) + 1 + k = min(50, max(1, int((adc(n)/20.)+1))) + adchistf(idet(n), k) = adchistf(idet(n), k) + 1 + nhit0(idet(n)) = nhit0(idet(n)) + 1. + enddo + 9 continue + enddo + +! find more or less where threshold is + 10 do i=1,200 + adcmin(i)=50. + if(nhit0(i).gt.0.) then + write(13,'(i3,50i4)') i,(min(999,adchistf(i,j)),j=1,50) + hival=0. + k=0 + do j=1,17 + if(adchist(i,j).gt.hival) then + hival = adchist(i,j) + k = j + endif + enddo +c for test +c do n=1,max(1,k) +c if(adchist(i,n).lt.hival/20.) adcmin(i)=20.*(n-0.5) +c enddo +c write(13,'(1x,''adcmin='',f6.1)') adcmin(i) + endif + enddo + close(unit=9) + do i=1,200 + sum1(i)=0. + sum2(i)=0. + sum3(i)=0. + enddo + +! Do everything twice, 2nd time with tighter tolerance (ttol) on +! time differences, based on first pass + ttol=5.0 + do iloop=1,2 + write(*,*) ' loop = ',iloop +! Initialize the fitting arrays + do i=1,1000 + if(i.le.200) nhit(i)=0 + bx(i)=0. + do j=1,1000 + ax(i,j)=0. + enddo + enddo + +! read in data + open(unit=9,file=filename) + nparam=0 + chisq=0. + df=0. + do i=1,10000000 + n=0 + do j=1,1000 + read(9,'(a)',end=12) string + read(string,'(1x,i1)') k + if(k.eq.0) goto 11 + n=n+1 + read(string,'(1x,i1,2i3,5f10.3)') ipn,ipl,idt, + > tr(n),p(n),zc(n),tc1(n),adc(n) + +! linearize the detector numbers + idet(n) = 100*(ipn-1) + 20*(ipl-1) + idt + if(idet(n).lt.1.or.idet(n).gt.200) write(6,'(1x, + > ''error! '',4i4)') ipn,ipl,idt,idet(n) + +! correct raw times for zpos using betap + tr(n) = tr(n)- zc(n) + +! remember path**2 or sqrt(p) or adc + p(n) = min(200., max(0., p(n))) +c adc(n) = min(500, max(0., adc(n))) + p2(n) = 1./sqrt(max(20., adc(n))) + k = min(18, max(1, int(p(n)/7.)+1)) + phist(idet(n), k) = phist(idet(n), k) + 1 +! ignore hits from paddles that are rarely hit + if(nhit0(idet(n)).lt.100) n=n-1 + enddo + +! Loop over all pairs, if at least 6 + 11 if(n.ge.6) then + +! see if this is first time a detector is used + do j=1,n + nhit(idet(j))=nhit(idet(j))+1 + +! If first time detector used, assign corresponding parameters +! Note that detector had has a fixed time offset (ip1) of zero +! since all times are relative) + if(nhit(idet(j)).eq.1) then + if(idet(j).eq.4) then + ip1(idet(j))=0 + else + +! fixed time offsets + nparam=nparam+1 + ip1(idet(j))=nparam + ipdet(nparam)=idet(j) + iptyp(nparam)=1 + endif + +! linear term in path + nparam=nparam+1 + ip2(idet(j))=nparam + ipdet(nparam)=idet(j) + iptyp(nparam)=2 + +! quadratic term for path**2 + nparam=nparam+1 + ip3(idet(j))=nparam + ipdet(nparam)=idet(j) + iptyp(nparam)=3 + k=idet(j) + write(8,'(1x,i3,4i5)') k,nhit(k),ip1(k),ip2(k),ip3(k) + endif + enddo ! loop over n + +! now loop over all pairs in fill in the matrix +! also accumulate sums to get means and sigmas for each detector +! of original corrected times as read in from the file + do j=1,n-1 + do k=j+1,n + dt = tc1(j)-tc1(k) + dtc = dt + if(iloop.eq.1.or.abs(dt).lt.ttol) then + idt = min(10,max(1,int((dt+5.))+1)) + thist(idet(j),idt) = thist(idet(j),idt) + 1 + chisq = chisq + dt**2 + df = df + 1 + sum1(idet(j)) = sum1(idet(j)) + 1. + sum2(idet(j)) = sum2(idet(j)) + dt + sum3(idet(j)) = sum3(idet(j)) + dt**2 + dt = tc1(k)-tc1(j) + idt = min(10,max(1,int((dt+5.))+1)) + thist(idet(k),idt) = thist(idet(k),idt) + 1 + sum1(idet(k)) = sum1(idet(k)) + 1. + sum2(idet(k)) = sum2(idet(k)) + dt + sum3(idet(k)) = sum3(idet(k)) + dt**2 + endif + k1 = idet(j) + k2 = idet(k) + dt = (tr(j) + toff(k1) + vel(k1)*p(j) + quad(k1)*p2(j))- + > (tr(k) + toff(k2) + vel(k2)*p(k) + quad(k2)*p2(k)) + if(iloop.eq.1.or.abs(dt).lt.ttol) then + k1=ip1(idet(j)) + k2=ip1(idet(k)) + k3=ip2(idet(j)) + k4=ip2(idet(k)) + k5=ip3(idet(j)) + k6=ip3(idet(k)) + if(k1.gt.0) then + bx(k1) = bx(k1) - (tr(j)-tr(k)) + ax(k1,k1) = ax(k1,k1) + 1. + ax(k1,k3) = ax(k1,k3) + p(j) + ax(k1,k4) = ax(k1,k4) - p(k) + ax(k1,k5) = ax(k1,k5) + p2(j) + ax(k1,k6) = ax(k1,k6) - p2(k) + ax(k3,k1) = ax(k3,k1) + p(j) + ax(k4,k1) = ax(k4,k1) - p(k) + ax(k5,k1) = ax(k5,k1) + p2(j) + ax(k6,k1) = ax(k6,k1) - p2(k) + endif + if(k1.gt.0.and.k2.gt.0) then + ax(k1,k2) = ax(k1,k2) - 1. + ax(k2,k1) = ax(k2,k1) - 1. + endif + if(k2.gt.0) then + bx(k2) = bx(k2) + (tr(j)-tr(k)) + ax(k2,k2) = ax(k2,k2) + 1. + ax(k2,k3) = ax(k2,k3) - p(j) + ax(k2,k4) = ax(k2,k4) + p(k) + ax(k2,k5) = ax(k2,k5) - p2(j) + ax(k2,k6) = ax(k2,k6) + p2(k) + ax(k3,k2) = ax(k3,k2) - p(j) + ax(k4,k2) = ax(k4,k2) + p(k) + ax(k5,k2) = ax(k5,k2) - p2(j) + ax(k6,k2) = ax(k6,k2) + p2(k) + endif + bx(k3) = bx(k3) - (tr(j)-tr(k)) * p(j) + bx(k4) = bx(k4) + (tr(j)-tr(k)) * p(k) + bx(k5) = bx(k5) - (tr(j)-tr(k)) * p2(j) + bx(k6) = bx(k6) + (tr(j)-tr(k)) * p2(k) + ax(k3,k3) = ax(k3,k3) + p(j)*p(j) + ax(k3,k4) = ax(k3,k4) - p(k)*p(j) + ax(k3,k5) = ax(k3,k5) + p2(j)*p(j) + ax(k3,k6) = ax(k3,k6) - p2(k)*p(j) + ax(k4,k3) = ax(k4,k3) - p(j)*p(k) + ax(k4,k4) = ax(k4,k4) + p(k)*p(k) + ax(k4,k5) = ax(k4,k5) - p2(j)*p(k) + ax(k4,k6) = ax(k4,k6) + p2(k)*p(k) + ax(k5,k3) = ax(k5,k3) + p(j)*p2(j) + ax(k5,k4) = ax(k5,k4) - p(k)*p2(j) + ax(k5,k5) = ax(k5,k5) + p2(j)*p2(j) + ax(k5,k6) = ax(k5,k6) - p2(k)*p2(j) + ax(k6,k3) = ax(k6,k3) - p(j)*p2(k) + ax(k6,k4) = ax(k6,k4) + p(k)*p2(k) + ax(k6,k5) = ax(k6,k5) - p2(j)*p2(k) + ax(k6,k6) = ax(k6,k6) + p2(k)*p2(k) + endif + enddo + enddo + endif ! if n>1 + enddo ! loop over reading in data + 12 close(unit=9) + +! Histograms + if(iloop.eq.1) then + do i=1,200 + if(sum1(i).gt.0.) then + write(13,'(i3,18i4)') i,(phist(i,j),j=1,18) + endif + enddo + endif +! see how many hits per detector and get mean, sigma of original corr. times + do i=1,200 + if(sum1(i).gt.0.) then + mean0(i)=sum2(i)/sum1(i) + sig0(i)=sqrt(sum3(i)/sum1(i) - mean0(i)**2) + endif + write(8,'(1x,i3,i5,2f6.2,10i5)') i,nhit(i), + > mean0(i),sig0(i),(min(9999,thist(i,j)),j=1,10) + sum1(i)=0. + sum2(i)=0. + sum3(i)=0. + do j=1,10 + thist(i,j)=0 + enddo + enddo + df = max(1., df - nparam) + write(6,'(1x,''initial chi2/d.f.='',f8.3,'' for '',f7.0, + > '' deg. freedom'')') chisq/df,df + write(8,'(1x,''initial chi2/d.f.='',f8.3,'' for '',f7.0, + > '' deg. freedom'')') chisq/df,df + +! find the solutions + call deqn (nparam,ax,1000,iwork,ifail,1,bx) + write(8,'(1x,''ifail='',i10)') ifail + +! association of parameters with detectors + do i=1,nparam + if(iptyp(i).eq.1) toff(ipdet(i))=bx(i) + if(iptyp(i).eq.2) vel(ipdet(i))=bx(i) + if(iptyp(i).eq.3) quad(ipdet(i))=bx(i) + enddo + +! write solutions + write(10 + iloop,'(/''; use '',a, + > ''tofusinginvadc=1 if want invadc_offset''/ + > ''; invadc_linear, and invadc_adc to be used''/ + > a,''tofusinginvadc=1'')') + > filename(1:1),filename(1:1) + write(10+iloop,'(/a,''hodo_pos_invadc_offset ='',3(f8.2,'',''), + > f8.2)') filename(1:1),(-1.0*toff(i),i=1,80,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f8.2,'',''), + > f8.2)')(-1.0*toff(i),i=j,79+j,20) + enddo + + write(10+iloop,'(/a,''hodo_neg_invadc_offset ='',3(f8.2,'',''), + > f8.2)')filename(1:1),(-1.0*toff(i),i=101,180,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f8.2,'',''), + > f8.2)')(-1.0*toff(i),i=100+j,179+j,20) + enddo + + write(10+iloop,'(/a,''hodo_pos_invadc_linear ='',3(f8.2,'',''), + > f8.2)')filename(1:1),( -1./min(-0.02,vel(i)),i=1,80,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f8.2,'',''), + > f8.2)')(-1./min(-0.02,vel(i)),i=j,79+j,20) + enddo + + write(10+iloop,'(/a,''hodo_neg_invadc_linear ='',3(f8.2,'',''), + > f8.2)')filename(1:1),( -1./min(-0.02,vel(i)),i=101,180,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f8.2,'',''), + > f8.2)')(-1./min(-0.02,vel(i)),i=100+j,179+j,20) + enddo + + write(10+iloop,'(/a,''hodo_pos_invadc_adc='',3(f9.2,'',''), + > f9.2)')filename(1:1),(-1.*quad(i),i=1,80,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f9.2,'',''), + > f9.2)')(-1.*quad(i),i=j,79+j,20) + enddo + + write(10+iloop,'(/a,''hodo_neg_invadc_adc='',3(f9.2,'',''), + > f9.2)')filename(1:1),(-1.0*quad(i),i=101,180,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f9.2,'',''), + > f9.2)')(-1.*quad(i),i=100+j,179+j,20) + enddo + + +! read in data again and look at sigmas relative to average fp time + chisq = 0. + df = 0. + open(unit=9,file=filename) + do i=1,10000000 + n=0 + do j=1,1000 + read(9,'(a)',end=14) string + read(string,'(1x,i1)') k + if(k.eq.0) goto 13 + n=n+1 + read(string,'(1x,i1,2i3,5f10.3)') ipn,ipl,idt, + > tr(n),p(n),zc(n),tc1(n),adc(n) + idet(n) = 100*(ipn-1) + 20*(ipl-1) + idt + tr(n) = tr(n)- zc(n) + p(n) = min(200., max(0., p(n))) +c adc(n) = min(500, max(0., adc(n))) + p2(n) = 1./sqrt(max(20., adc(n))) +! ignore hits from paddles that are rarely hit + k1 = idet(n) + dt = (tr(n) + toff(k1) + vel(k1)*p(n) + quad(k1)*p2(n)) + if(nhit0(idet(n)).lt.100) n=n-1 + enddo +! Loop over all pairs, if at least 6 hits + 13 if(n.ge.6) then + do j=1,n + avtime=0. + ntime=0. + do k=1,n + if(k.ne.j) then + k1 = idet(j) + k2 = idet(k) + dt = (tr(k) + toff(k2) + vel(k2)*p(k) + quad(k2)*p2(k)) + avtime = avtime + dt + ntime = ntime + 1. + endif + enddo + avtime = avtime / ntime + dt = (tr(j) + toff(k1) + vel(k1)*p(j) + quad(k1)*p2(j))- + > avtime + if(iloop.eq.2) then + idt = min(50,max(1,int((dt+ 5.)/0.2)+1)) + thistf(idet(j),idt) = thistf(idet(j),idt) + 1 + idt = max(1,min(20, int(adc(j)/50.)+1)) + if(dt.gt.0.) adchistpm(idet(j),idt,1)= + > adchistpm(idet(j),idt,1)+1 + if(dt.le.0.) adchistpm(idet(j),idt,2)= + > adchistpm(idet(j),idt,2)+1 + endif + if(iloop.eq.1.or.abs(dt).lt.ttol) then + idt = min(10,max(1,int((dt+ 5.))+1)) + thist(idet(j),idt) = thist(idet(j),idt) + 1 + chisq = chisq + dt**2 + df = df + 1 + sum1(idet(j)) = sum1(idet(j)) + 1. + sum2(idet(j)) = sum2(idet(j)) + dt + sum3(idet(j)) = sum3(idet(j)) + dt**2 + endif + enddo + endif ! if n>5 + enddo ! loop over reading in data + 14 close(unit=9) +! see how many hits per detector and get mean, sigma of original corr. times + do i=1,200 + sig(i)=100. + if(sum1(i).gt.0.) then + mean(i)=sum2(i)/sum1(i) + sig(i)=sqrt(sum3(i)/sum1(i) - mean(i)**2) + endif + write(8,'(1x,i3,i5,2f6.2,10i5)') i,nhit(i), + > mean(i),sig(i),(min(9999,thist(i,j)),j=1,10) + if(iloop.eq.2) + > write(14,'(1x,i3,50i5)') i,(min(9999,thistf(i,j)),j=1,50) + sum1(i)=0. + sum2(i)=0. + sum3(i)=0. + do j=1,10 + thist(i,j)=0 + enddo + enddo + df = max(1., df - nparam) + write(6,'(1x,'' final chi2/d.f.='',f8.3,'' for '',f7.0, + > '' deg. freedom'')') chisq/df,df + write(8,'(1x,'' final chi2/d.f.='',f8.3,'' for '',f7.0, + > '' deg. freedom'')') chisq/df,df + + write(10+iloop,'(/a,''hodo_pos_sigma ='',3(f8.2,'',''), + > f8.2)')filename(1:1),(sig(i),i= 1, 80,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f8.2,'',''), + > f8.2)')(sig(i),i= j, 79+j,20) + enddo + write(10+iloop,'(/a,''hodo_neg_sigma ='',3(f8.2,'',''), + > f8.2)')filename(1:1),(sig(i),i=101,180,20) + do j=2,16 + write(10+iloop,'(1x,'' '',3(f8.2,'',''), + > f8.2)')(sig(i),i=100+j,179+j,20) + enddo + + enddo ! loop over time tolerance + + do i=1,200 + write(15,'(1x,i3,20i4)') i,(adchistpm(i,j,1),j=1,20) + write(15,'(1x,i3,20i4)') i,(adchistpm(i,j,2),j=1,20) + enddo + + goto 999 + + 998 write(6,'(1x,''error, cant find file '',a)') filename + + 999 stop + end + diff --git a/hc_hodo_calib/tofcal.inp b/hc_hodo_calib/tofcal.inp new file mode 100644 index 0000000000000000000000000000000000000000..a3cb12b95192d795e0fef245355d11e347b40d93 --- /dev/null +++ b/hc_hodo_calib/tofcal.inp @@ -0,0 +1,8 @@ +h1fort.37 +hmstofcal.53411 +sostofcal.46765 +htmp +hmstofcal.47940 + + + diff --git a/hc_hodo_calib/tofcal.pdf b/hc_hodo_calib/tofcal.pdf new file mode 100644 index 0000000000000000000000000000000000000000..81da24e7071e4eea734009e47f92952b6ab6f6ec Binary files /dev/null and b/hc_hodo_calib/tofcal.pdf differ diff --git a/src/THcHodoscope.cxx b/src/THcHodoscope.cxx index b7ce40020394e147b0209ca05c401c21d64ddbb7..e9e571f51211d7de985b86758b7ed956d88ffc73 100644 --- a/src/THcHodoscope.cxx +++ b/src/THcHodoscope.cxx @@ -852,14 +852,6 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) Int_t timehist[200]; // ------------------------------------------------- - if(fDumpTOF) { - Int_t ntothits = 0; - for(Int_t ip = 0; ip < fNPlanes; ip++ ) { - ntothits += fPlanes[ip]->GetNScinHits(); - } - fDumpOut << "ntrk,tothits " << ntracks << " " << ntothits - << " " << fScinTdcToTime << endl; - } if (tracks.GetLast()+1 > 0 ) { @@ -1056,12 +1048,6 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) } } - if(fDumpTOF) { - fDumpOut << "trk=" << itrack << " " << jmax << " " << - theTrack->GetX() << " " << theTrack->GetY() << " " << - theTrack->GetTheta() << " " << theTrack->GetPhi() << " " << - theTrack->GetP() << endl; - } if(jmax > 0) { Double_t tmin = 0.5 * jmax; @@ -1114,7 +1100,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) if ( fTOFPInfo[ih].keep_pos ) { // 301 fTOFCalc[ih].good_tdc_pos = kTRUE; fGoodFlags[itrack][ip][iphit].goodTdcPos = kTRUE; - if(fDumpTOF) { + if(fDumpTOF && ntracks==1) { fDumpOut << "1 " << ip+1 << " " << paddle+1 << " " << hit->GetPosTDC()*fScinTdcToTime << " " << fTOFPInfo[ih].pathp << " " << fTOFPInfo[ih].zcor << " " << fTOFPInfo[ih].time_pos << @@ -1124,7 +1110,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) if ( fTOFPInfo[ih].keep_neg ) { // fTOFCalc[ih].good_tdc_neg = kTRUE; fGoodFlags[itrack][ip][iphit].goodTdcNeg = kTRUE; - if(fDumpTOF) { + if(fDumpTOF && ntracks==1) { fDumpOut << "2 " << ip+1 << " " << paddle+1 << " " << hit->GetNegTDC()*fScinTdcToTime << " " << fTOFPInfo[ih].pathn << " " << fTOFPInfo[ih].zcor << " " << fTOFPInfo[ih].time_neg << @@ -1609,6 +1595,9 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ( fChern->GetCerNPE() > fNCerNPE ) && ( tracks.GetLast() + 1 > 0 ) ) { fScinDid = 1; } + if(fDumpTOF && ntracks==1) { + fDumpOut << "0 " << endl; + } return 0;