Below we describe proposed fixes and small changes to the AIDA interfaces. Changes are based on our experience with current version of AIDA and attempts to extend it.

 

 

1. Cloud

Missing method "reset()" must be included in ICloud interface.

 

 

2. Histogram

In order to make profile and efficiency histograms, "String options" in "create…" method of ITupleFactory should be allowed to contain "type=profile" and "type=efficiency" strings. 

 

3. IXYData

An interface representing collection of points with errors, IXYData, should be included in AIDA.

 

4. IFunction

 

It would be convenient for fitting and plotting purposes to be able to get value of a function without changing its internal state:

 

public interface IFunction

{

   // Get value of the function without changing value of parameters

   public double value(double[] point, double[] parameters);

}

 

There will be more about IFunctions in the Fitting Proposal section.

 

 

5. ITuple
 

It looks convenient to be able to manipulate ITuples - create new ITuple by applying cuts to the original one, make one ITuple by combining several smaller ones:
 

public interface ITupleFactory

{

   ...

   // New methods 

   public ITuple create(String name, String label, ITuple tuple, IFilter filter);

   public ITuple create(String name, String label, String[] columns, ITuple tuple, IFilter filter);

 

   public ITuple chain(String name, String label, ITuple[] set);

   public ITuple merge(String name, String label, ITuple[] set);

}
 

"create" methods really create a new ITuple: copy data to a new place. "columns" is array of column names that will be copied to a new ITuple. Same functionality can also be provided by some external package (say hep.aida.util) by using already defined AIDA interfaces.

 

Method "chain()" makes a chain of ITuples with the same internal structure, while "merge()" creates a union of columns from all ITuples in the set. Exact rules how to do it must be defined. "chain()" and "merge()" do not copy data, but rather provide a "wrapper" around existing ITuples.
 

 

Also more flexibility is needed while making ITuple projections:
 

public interface ITuple

{

   ...

   // New methods

   // Need more "project" methods. Same with 2D and 3D histograms and clouds.

   public boolean project(IHistogram1D hist, IEvaluator value);

   public boolean project(IHistogram1D hist, IEvaluator value, IEvaluator weight);

   public boolean project(IHistogram1D hist, IEvaluator value, IEvaluator weight, IFilter filter);

}