A note on the abstract histograms
class RootHisto1d : public Histo1d {
RootHisto1d(const char* , const int , const float, const float);
RootHisto1d(const int id , const char* , const int , const float, const float);
virtual void Fill( const float, const float weight =1.);
virtual void print() const;
virtual TH1F * getHistoObject() {return h1d;} ;
You have seen this class definition
If you need functionality from a histogram which is not provided through the abstract interface (fitting the histogram is the best example), you can ask the abstract histogram object for a pointer to its real internal histogram object and do your work.
In some parts of your code, you may want to discard the abstract interface in this way.
Still, you can protect maybe 95% or the code from changes in the histogram implementation.