From: Jens Ivar Jordre (jensivar.jordre@fi.uib.no)
Date: Fri Aug 22 2003 - 13:29:46 EDT
Howdy.
I've found what I believe is a serious TOF digitization bug in
BrDigitizeTof::Event, and one should gauge our previous TOF
digitizations and analyses depending on them.
To put it short, there is, as far as I can see, a mismatch between slats
and GEANT hits. To explain the bug I have done some cut and paste into
the function, listed here below:
<snip>
for(int is = 0; is < noslats; is++)
{
...
for(ih = 0; ih < NumHits; ih++)
{
ghit_p = (BrGeantHit*) GeantHits->At(ih);
...
if (slat == is)
if(ghit_p->Dedx() > 0.0)
{
if(DebugLevel() > 1)
cout << "Add slat " << slat+1 << " i.e. Isub = "
<< ghit_p->Isub()
<< " for " << GetName() << endl;
slattable[slat]++;
hit_p = ghit_p;
hittable[hitno] = hit_p;
hitno++;
}
}
//
// Single hit
//
if(DebugLevel() > 3)
cout << "Slattable " << slattable[is] << endl;
if(slattable[is] == 1)
{
digtof_p = new BrTofDig();
DigitizedTof->Add(digtof_p);
digtof_p->SetSlatno(is+1);
// if (!tfp) // for mrs tofw
// digtof_p->SetSlatno(is + panel*noslats + 1);
hit_p = hittable[0];
...
}
//
// Multiple hits on same slat
//
else if(slattable[is] > 1)
{
...
//
// Find the first time for the up and down Tube.
//
tup = tdown = 9999.0;
for(n = 0; n < nlookup; n++)
{
hit_p = hittable[n];
...
}
...
for(n=0;n<nlookup;n++)
{
hit_p = hittable[n];
...
}
...
}
}
</snip>
In the first nested loop (above the "Single hit" comment) GEANT hits
matching the current slat number are stored (by pointer) in the hittable
array, and the number of found hits is incremented.
Looking in the signe hit section the selected hit used is _always_
hittable[0], meaning that for slat 1 (i.e. index is=0), the right GEANT
hit is picked, but for the other slats are get wrong hit unless all
slats with lower number have 0 hits.
A similar argument applies to the case for multiple hits. The nested
loops always start at index n=0 and thus start mismatches hits and slats
in the following.
I have thefore redone a lot of the BrDigitizeTof::Event, adding comments
and in particular taken care of proper matching of hits to slats. I've
also done some renaming of variables, applying to both header and source
file. Finally I also found a memory leak in the mentioned function which
I've taken care of. The arrays dynamically created in the function were
not deleted.
I guess that those of you who have used TOF digitization for corrections
etc. should, if possible, try to redo it.
I've checked in the changes, bumped the revision number and tagged. As
part of this I commented out BrRecoPackage from Makefile.am, Include.h
and LinkDef.h in the packages directory. Thereby, awaiting more info
from Pawel and Kris on how to deal with BrRecoPackage BRAT now compiles.
Best wishes from
Jens Ivar
--
_____________________________________________________
________| Jens Ivar Jřrdre |_______
\ | Dept. of Physics Office: 521 | /
\ | Allégt 55 Phone: +47 55 58 27 92 | /
\ | 5007 Bergen Fax: +47 55 58 94 40 | /
/ | Norway E-mail: jensivar.jordre@fi.uib.no | \
/ |_____________________________________________________| \
/__________) (_________\
This archive was generated by hypermail 2.1.5 : Fri Aug 22 2003 - 13:30:36 EDT