>
> Hi Tony,
>
> On Tue, Feb 14, 2006 at 05:06:51PM -0800, Johnson, Tony S. wrote:
> > HI, maybe I had to leave before we discussed this, but what is
> >
> > > which would look like:
> > >
> > > public interface ParticleEnergyCalibration {
> > > public double energy(ReconstructedParticle part);
> > > }
> > >
> > > public interface ClusterEnergyCalibration {
> > > public double energy(Cluster clus);
> > > }
> >
> > going to do that, part.getEnergy() doesn't (or can't)?
>
> Well, you could use part.getEnergy(), but then earlier in the
> code you would have to figure out what the actual energy of
> the particle is and set it. This is a complex problem which
> depends on the type of particle, which detector you're using,
> and your reconstruction algorithm; we don't yet have a
> general solution. So for now what people do is use one of a
> small number of calibration methods (Ron's, Lei's, ...),
> generally with constants hard-coded for a particular detector
> or set of detectors. But that's rather ugly -- you have to
> change your reconstruction code if you want to try a
> different detector or calibration, and it's kind of hard to
> put code like that in CVS (c.f. today's discussion). So it
> would be good if we could abstract that part out, defining a
> common interface so that I could change between calibrations
> just by passing my particle reconstructor a different
> calibration object...
My feeling is that it is the job of the reconstruction (including PFA, vertex finding etc) to fill the ReconstructedParticle with its best guess at the true energy (etc.). So I would think our goal should be to allow a user to call part.getEnergy() and be done.
Now of course this is an idealized solution, in real life we have many practical problems to deal with, but still I am not sure that putting a new interface on top of reconstucted particle is the way to go. We have the following tools already available:
1) Use the conditions database for true detector dependencies rather than hardwiring constants into the analysis code.
2) Make it possible to override the conditions database for testing, trying new ideas, etc. Either:
myPFA.setAnalysisParameter(someValue);
Or for when there are many parameters
myPFA.setAnalysisConfiguration("MyFileWhichOverridesConditionsDatabase");
3) Use plugable algorithms, as has been done for the Clustering. E.g.
myPFA.setEnergyCalibration(new MyEnergyCalibrationAlgorithm());
Are these sufficient to address the requirements, or do we really need something more?
Tony
|