Gaudi Framework, version v20r2

Generated: 18 Jul 2008

HistogramSvc.h

Go to the documentation of this file.
00001 // $Id: HistogramSvc.h,v 1.15 2007/09/26 16:14:47 marcocle Exp $
00002 // ============================================================================
00003 #ifndef GAUDISVC_HISTOGRAMSVC_H
00004 #define GAUDISVC_HISTOGRAMSVC_H 1
00005 // ============================================================================
00006 // Include Files
00007 // ============================================================================
00008 // GaudiKernel
00009 // ============================================================================
00010 #include "GaudiKernel/System.h"
00011 #include "GaudiKernel/DataSvc.h"
00012 #include "GaudiKernel/IHistogramSvc.h"
00013 #include "GaudiKernel/GaudiException.h"
00014 #include "GaudiKernel/IRegistry.h"
00015 #include "GaudiKernel/HistoProperty.h"
00016 // ============================================================================
00017 // AIDA 
00018 // ============================================================================
00019 #include "AIDA/IHistogramFactory.h"
00020 #include "AIDA/IAnnotation.h"
00021 // ============================================================================
00022 // local (+PI)
00023 // ============================================================================
00024 #include "Axis.h"
00025 #include "GaudiPI.h"
00026 #include "TH1.h"
00027 #include "TH2.h"
00028 #include "TH3.h"
00029 // ============================================================================
00030 namespace AIDA {
00031   class ICloud1D;
00032   class ICloud2D;
00033   class ICloud3D;
00034 }
00035 // ============================================================================
00036 // Forward declarations
00037 template <class T> class SvcFactory;
00038 #define DBINS(x) int n##x, double low##x, double up##x
00039 #define BINS(x)  n##x, low##x, up##x
00040 #define NOT_IMPLEMENTED { not_implemented(); return 0; }
00041 // ============================================================================
00047 class HistogramSvc : public DataSvc, 
00048                      virtual public IHistogramSvc,
00049                      virtual public AIDA::IHistogramFactory
00050 {
00051     
00052 private:  
00053   // Allow SvcFactory to instantiate the service.
00054   friend class SvcFactory<HistogramSvc>;
00055   typedef const std::pair<std::string,std::string>& STRPAIR;
00056   void not_implemented()  const {
00057     MsgStream log( msgSvc(), name() );
00058     log << MSG::ERROR << "Sorry, not yet implemented..." << endreq;
00059   }
00060 protected:
00061   typedef const std::string&       CSTR;
00062   typedef std::vector<double>      Edges;
00063   typedef std::vector<std::string> DBaseEntries;
00064   typedef AIDA::IHistogram1D       H1D;
00065   typedef AIDA::IHistogram2D       H2D;
00066   typedef AIDA::IHistogram3D       H3D;
00067   typedef AIDA::IProfile1D         P1D;
00068   typedef AIDA::IProfile2D         P2D;
00069   typedef AIDA::IBaseHistogram     Base;
00070   struct Helper {
00071     HistogramSvc* m_svc;
00072     Helper(HistogramSvc* p) : m_svc(p) {}
00073     template <class A1, class A3> StatusCode retrieve(A1 a1, A3*& a3)  {
00074       DataObject* pObject  = 0;
00075       StatusCode sc = m_svc->DataSvc::retrieveObject(a1,pObject);
00076       a3 = dynamic_cast<A3*>(pObject);
00077       return sc;
00078     }
00079     template <class A1, class A2, class A3> StatusCode retrieve(A1 a1, A2 a2, A3*& a3)  {
00080       DataObject* pObject  = 0;
00081       StatusCode sc = m_svc->DataSvc::retrieveObject(a1,a2,pObject);
00082       a3 = dynamic_cast<A3*>(pObject);
00083       return sc;
00084     }
00085     template <class A1, class A3> StatusCode find(A1 a1, A3*& a3)  {
00086       DataObject* pObject  = 0;
00087       StatusCode sc = m_svc->DataSvc::findObject(a1,pObject);
00088       a3 = dynamic_cast<A3*>(pObject);
00089       return sc;
00090     }
00091     template <class A1, class A2, class A3> StatusCode find(A1 a1, A2 a2, A3*& a3)  {
00092       DataObject* pObject  = 0;
00093       StatusCode sc = m_svc->DataSvc::findObject(a1,a2,pObject);
00094       a3 = dynamic_cast<A3*>(pObject);
00095       return sc;
00096     }
00097     template <class R, class S, class T1, class T2> 
00098     static R* act(R* res,const S& b, void (T1::*pmf)(const T2*,Double_t), Double_t scale)  {
00099       T1 *h1 = Gaudi::getRepresentation<R,T1>(*res);
00100       T1 *h2 = Gaudi::getRepresentation<R,T1>(b);
00101       if ( h1 && h2 )  {
00102         (h1->*pmf)(h2,scale);
00103         return res;
00104       }
00105       return 0;
00106     }
00107     template <class R, class S, class T1, class T2> 
00108     static R* act(R* res,const S& b, void (T1::*pmf)(const T2*))  {
00109       T1 *h1 = Gaudi::getRepresentation<R,T1>(*res);
00110       T1 *h2 = Gaudi::getRepresentation<R,T1>(b);
00111       if ( h1 && h2 )  {
00112         (h1->*pmf)(h2);
00113         return res;
00114       }
00115       return 0;
00116     }
00117   };
00118 
00119 
00121   DBaseEntries                      m_input;
00122 
00123 public:
00128   HistogramSvc(CSTR name, ISvcLocator* svc );
00129 
00131   virtual ~HistogramSvc();
00132 
00138   std::pair<std::string,std::string> i_splitPath(CSTR full);
00139 
00143   StatusCode connectInput(CSTR ident);
00144   std::string _STR(int i);
00145 
00146   template <class T> inline 
00147   T* i_book(DataObject* pPar,CSTR rel,CSTR title,const std::pair<DataObject*,T*>& o)  {
00148     if (o.first && registerObject(pPar, rel, (Base*)o.second).isSuccess())
00149       return o.second;
00150     delete o.first;
00151     throw GaudiException("Cannot book "+System::typeinfoName(typeid(T))+" "+title,
00152       "HistogramSvc",StatusCode::FAILURE);
00153   }
00154   template <class T> static DataObject* __cast(T* p)  {  
00155     DataObject* q = dynamic_cast<DataObject*>(p);
00156     if ( 0 == q && 0 != p )  {
00157       throw std::runtime_error("HistogramSvc: Unexpected object type.");
00158     }
00159     return q;
00160   }
00162   H2D* i_project(CSTR nameAndTitle,const H3D& h, CSTR dir);
00163 
00164 public:
00166   virtual StatusCode initialize   ();
00168   virtual StatusCode reinitialize ();
00170   virtual StatusCode finalize     ();
00171 
00176   virtual StatusCode queryInterface(const InterfaceID& iid, void** ppv );
00177 
00179   virtual AIDA::IHistogramFactory* histogramFactory()   {  return this; }
00180 
00181   // ==========================================================================
00182   // Book 1D histogram with fix binning
00183   // ==========================================================================
00201   virtual H1D* book(CSTR par,  CSTR rel, CSTR title, DBINS(x))
00202   {  return book(createPath(par), rel, title, BINS(x));                          }
00203   virtual H1D* book(CSTR par,  int hID, CSTR title, DBINS(x))
00204   {  return book(par, _STR(hID), title, BINS(x));                                }
00205   virtual H1D* book(DataObject* pPar, int hID, CSTR title, DBINS(x))
00206   {  return book(pPar, _STR(hID), title, BINS(x));                               }
00207   virtual H1D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x)) ;
00208   virtual H1D* book(STRPAIR loc,CSTR title, DBINS(x))
00209   { return book(loc.first, loc.second, title, BINS(x));                          }
00210   virtual H1D* book(CSTR full, CSTR title, DBINS(x))  
00211   { return book(i_splitPath(full), title, BINS(x));                              }
00212   // ==========================================================================
00213   // Book 1D Profile histogram with fix binning
00214   // ==========================================================================
00232   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x))
00233   { return bookProf(createPath(par), rel, title, BINS(x));                     }
00234   virtual P1D* bookProf(CSTR par, int hID, CSTR title, DBINS(x))
00235   { return bookProf(par, _STR(hID), title, BINS(x));                           }
00236   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x))
00237   { return bookProf(pPar, _STR(hID), title, BINS(x));                          }
00238   virtual P1D* bookProf(STRPAIR loc,CSTR title, DBINS(x))
00239   { return bookProf(loc.first, loc.second, title, BINS(x));                    }
00240   virtual P1D* bookProf(CSTR full, CSTR title, DBINS(x))
00241   { return bookProf(i_splitPath(full), title, BINS(x));                        }
00242   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x))
00243   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, BINS(x),0,0));     }
00244 
00245   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), double upper, double lower)
00246   { return bookProf(createPath(par), rel, title, BINS(x), upper, lower);                     }
00247   virtual P1D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), double upper, double lower)
00248   { return bookProf(par, _STR(hID), title, BINS(x), upper, lower);                           }
00249   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), double upper, double lower)
00250   { return bookProf(pPar, _STR(hID), title, BINS(x), upper, lower);                          }
00251   virtual P1D* bookProf(STRPAIR loc,CSTR title, DBINS(x), double upper, double lower)
00252   { return bookProf(loc.first, loc.second, title, BINS(x), upper, lower);                    }
00253   virtual P1D* bookProf(CSTR full, CSTR title, DBINS(x), double upper, double lower)
00254   { return bookProf(i_splitPath(full), title, BINS(x), upper, lower);                        }
00255   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), double upper, double lower)
00256   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, BINS(x), upper, lower));         }
00257   // ==========================================================================
00258   // Book 1D histogram with variable binning
00259   // ==========================================================================
00274   virtual H1D* book(CSTR par, int hID, CSTR title, Edges e)
00275   {  return book(par, _STR(hID), title, e);                                 }
00276   virtual H1D* book(DataObject* pPar, int hID, CSTR title, Edges e)
00277   {  return book(pPar, _STR(hID), title, e);                                }
00278   virtual H1D* book(CSTR par, CSTR rel, CSTR title, Edges e )
00279   {  return book(createPath(par), rel, title, e);                           }
00280   virtual H1D* book(STRPAIR loc,CSTR title, Edges e )
00281   { return book(loc.first, loc.second, title, e);                           }
00282   virtual H1D* book(CSTR full, CSTR title, Edges e )
00283   { return book(i_splitPath(full), title, e);                               }
00284   virtual H1D* book(DataObject* pPar, CSTR rel, CSTR title, Edges e )
00285   { return i_book(pPar, rel, title, Gaudi::createH1D(title, e));            }
00286 
00287   // ==========================================================================
00288   // Book 1D profile histogram with variable binning
00289   // ==========================================================================
00304   virtual P1D* bookProf(CSTR full, CSTR title, Edges e )
00305   { return bookProf(i_splitPath(full), title, e);                             }
00306   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, Edges e )
00307   { return bookProf(createPath(par), rel, title, e);                          }
00308   virtual P1D* bookProf(CSTR par, int hID, CSTR title, Edges e )
00309   { return bookProf(par, _STR(hID), title, e);                                }
00310   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, Edges e )
00311   { return bookProf(pPar, _STR(hID), title, e);                               }
00312   virtual P1D* bookProf(STRPAIR loc,CSTR title, Edges e)
00313   { return bookProf(loc.first, loc.second, title, e);                         }
00314   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges e )
00315   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, e, 0, 0));        }
00316 
00317   virtual P1D* bookProf(CSTR full, CSTR title, Edges e, double upper, double lower)
00318   { return bookProf(i_splitPath(full), title, e, upper, lower);               }
00319   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, Edges e, double upper, double lower)
00320   { return bookProf(createPath(par), rel, title, e, upper, lower);            }
00321   virtual P1D* bookProf(CSTR par, int hID, CSTR title, Edges e, double upper, double lower)
00322   { return bookProf(par, _STR(hID), title, e, upper, lower);                  }
00323   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, Edges e, double upper, double lower)
00324   { return bookProf(pPar, _STR(hID), title, e, upper, lower);                 }
00325   virtual P1D* bookProf(STRPAIR loc,CSTR title, Edges e, double upper, double lower)
00326   { return bookProf(loc.first, loc.second, title, e, upper, lower);           }
00327   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges e, double upper, double lower)
00328   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, e, upper, lower));}
00329   // ==========================================================================
00330   // Book 2D histogram with fixed binning
00331   // ==========================================================================
00349   virtual H2D* book(CSTR full, CSTR title, DBINS(x), DBINS(y))
00350   { return book(i_splitPath(full), title, BINS(x),BINS(y));               }
00351   virtual H2D* book(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00352   { return book(createPath(par), rel, title, BINS(x),BINS(y));            }
00353   virtual H2D* book(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y))
00354   { return book(par,_STR(hID), title, BINS(x),BINS(y));                   }
00355   virtual H2D* book(STRPAIR loc,CSTR title, DBINS(x), DBINS(y))
00356   { return book(loc.first, loc.second, title, BINS(x), BINS(y));          }
00357   virtual H2D* book(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y))
00358   { return book(pPar,_STR(hID), title, BINS(x),BINS(y));                  }
00359   virtual H2D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00360   { return i_book(pPar,rel,title,Gaudi::createH2D(title, BINS(x),BINS(y)));}
00361   // ==========================================================================
00362   // Book 2D profile histogram with fixed binning
00363   // ==========================================================================
00381   virtual P2D* bookProf(CSTR full, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00382   { return bookProf(i_splitPath(full), title, BINS(x),BINS(y), upper, lower);               }
00383   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00384   { return bookProf(createPath(par), rel, title, BINS(x),BINS(y), upper, lower);            }
00385   virtual P2D* bookProf(STRPAIR loc,CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00386   { return bookProf(loc.first, loc.second, title, BINS(x), BINS(y), upper, lower);          }
00387   virtual P2D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00388   { return bookProf(par, _STR(hID), title, BINS(x),BINS(y), upper, lower);                  }
00389   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00390   { return bookProf(pPar,_STR(hID), title, BINS(x),BINS(y), upper, lower);                  }
00391   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00392   { return i_book(pPar,rel,title,Gaudi::createProf2D(title, BINS(x),BINS(y), upper, lower));  }
00393 
00394   virtual P2D* bookProf(CSTR full, CSTR title, DBINS(x), DBINS(y))
00395   { return bookProf(i_splitPath(full), title, BINS(x),BINS(y));               }
00396   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00397   { return bookProf(createPath(par), rel, title, BINS(x),BINS(y));            }
00398   virtual P2D* bookProf(STRPAIR loc,CSTR title, DBINS(x), DBINS(y))
00399   { return bookProf(loc.first, loc.second, title, BINS(x), BINS(y));          }
00400   virtual P2D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y))
00401   { return bookProf(par, _STR(hID), title, BINS(x),BINS(y));                  }
00402   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y))
00403   { return bookProf(pPar,_STR(hID), title, BINS(x),BINS(y));                  }
00404   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00405   { return i_book(pPar,rel,title,Gaudi::createProf2D(title, BINS(x),BINS(y),0,0));}
00406   // ==========================================================================
00407   // Book 2D histogram with variable binning
00408   // ==========================================================================
00423   virtual H2D* book(CSTR full, CSTR title, Edges x, Edges y )
00424   { return book(i_splitPath(full), title, x, y);                        }
00425   virtual H2D* book(CSTR par, CSTR rel, CSTR title, Edges x, Edges y )
00426   { return book(createPath(par), rel, title, x, y);                     }
00427   virtual H2D* book(CSTR par, int hID, CSTR title, Edges x, Edges y )
00428   { return book(par, _STR(hID), title, x, y);                           }
00429   virtual H2D* book(STRPAIR loc,CSTR title, Edges x, Edges y )
00430   { return book(loc.first, loc.second, title, x, y);                    }
00431   virtual H2D* book(DataObject* pPar, int hID, CSTR title, Edges x, Edges y )
00432   { return book(pPar, _STR(hID), title, x, y);                          }
00433   virtual H2D* book(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y )
00434   { return i_book(pPar, rel, title, Gaudi::createH2D(title, x,y));      }
00435   // ==========================================================================
00436   // Book 2D profile histogram with variable binning
00437   // ==========================================================================
00452   virtual P2D* bookProf(CSTR full, CSTR title, Edges x, Edges y )
00453   { return bookProf(i_splitPath(full), title, x, y);                    }
00454   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, Edges x, Edges y )
00455   { return bookProf(createPath(par), rel, title, x, y);                  }
00456   virtual P2D* bookProf(CSTR par, int hID, CSTR title, Edges x, Edges y )
00457   { return bookProf(par, _STR(hID), title, x, y);                        }
00458   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, Edges x, Edges y )
00459   { return bookProf(pPar, _STR(hID), title, x, y);                       }
00460   virtual P2D* bookProf(STRPAIR loc,CSTR title, Edges x, Edges y )
00461   { return bookProf(loc.first, loc.second, title, x, y);                 }
00462   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y )
00463   { return i_book(pPar, rel, title, Gaudi::createProf2D(title,x,y,0,0)); }
00464 
00465   virtual P2D* bookProf(CSTR full, CSTR title, Edges x, Edges y, double upper, double lower )
00466   { return bookProf(i_splitPath(full), title, x, y, upper, lower);       }
00467   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, Edges x, Edges y, double upper, double lower )
00468   { return bookProf(createPath(par), rel, title, x, y, upper, lower);                  }
00469   virtual P2D* bookProf(CSTR par, int hID, CSTR title, Edges x, Edges y, double upper, double lower )
00470   { return bookProf(par, _STR(hID), title, x, y, upper, lower);                        }
00471   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, Edges x, Edges y, double upper, double lower )
00472   { return bookProf(pPar, _STR(hID), title, x, y, upper, lower);                       }
00473   virtual P2D* bookProf(STRPAIR loc,CSTR title, Edges x, Edges y, double upper, double lower )
00474   { return bookProf(loc.first, loc.second, title, x, y, upper, lower);                 }
00475   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y, double upper, double lower )
00476   { return i_book(pPar, rel, title, Gaudi::createProf2D(title,x,y, upper, lower));     }
00477   // ==========================================================================
00478   // Book 3D histogram with fixed binning
00479   // ==========================================================================
00497   virtual H3D* book(CSTR full, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00498   { return book(i_splitPath(full),title,BINS(x),BINS(y),BINS(z));            }
00499   virtual H3D* book(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00500   { return book(createPath(par),rel,title,BINS(x),BINS(y),BINS(z));          }
00501   virtual H3D* book(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00502   { return book(par,_STR(hID),title,BINS(x),BINS(y),BINS(z));                }
00503   virtual H3D* book(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00504   { return book(pPar,_STR(hID), title, BINS(x),BINS(y),BINS(z));             }
00505   virtual H3D* book(STRPAIR loc,CSTR title, DBINS(x), DBINS(y), DBINS(z))
00506   { return book(loc.first, loc.second, title, BINS(x),BINS(y),BINS(z));      }
00507   virtual H3D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00508   { return i_book(pPar, rel, title, Gaudi::createH3D(title,BINS(x),BINS(y),BINS(z)));}
00509   // ==========================================================================
00510   // Book 3D histogram with variable binning
00511   // ==========================================================================
00528   virtual H3D* book(CSTR full, CSTR title, Edges x, Edges y, Edges z)
00529   { return book(i_splitPath(full), title, x, y, z);                         }
00530   virtual H3D* book(CSTR par, CSTR rel, CSTR title, Edges x, Edges y, Edges z)
00531   { return book(createPath(par), rel, title, x, y, z);                      }
00532   virtual H3D* book(CSTR par, int hID, CSTR title, Edges x, Edges y, Edges z)
00533   { return book(par,_STR(hID), title, x, y, z);                             }
00534   virtual H3D* book(DataObject* pPar, int hID, CSTR title, Edges x, Edges y, Edges z)
00535   { return book(pPar,_STR(hID), title, x, y, z);                            }
00536   virtual H3D* book(STRPAIR loc,CSTR title, Edges x, Edges y, Edges z)
00537   { return book(loc.first, loc.second, title, x,y,z);                       }
00538   virtual H3D* book(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y, Edges z)
00539   { return i_book(pPar, rel, title, Gaudi::createH3D(title,x,y,z));         }
00540 
00541   // ==========================================================================
00542   // Register histogram with the data store
00543   // ==========================================================================
00544 //------------------------------------------------------------------------------
00545 // Register object with the data store
00546 //------------------------------------------------------------------------------
00547   virtual StatusCode registerObject(CSTR parent, CSTR rel, Base* obj )
00548   { return registerObject(createPath(parent), rel, obj);                       }
00549   virtual StatusCode registerObject(CSTR parent, int item, Base* obj )
00550   { return registerObject(parent, _STR(item), obj);                            }
00551   virtual StatusCode registerObject(Base* pPar, CSTR rel, Base* obj )
00552   { return registerObject(__cast(pPar), rel, obj);                             }
00553   virtual StatusCode registerObject(DataObject* pPar, int item, Base* obj )
00554   { return registerObject(pPar, _STR(item), obj);                              }
00555   virtual StatusCode registerObject(Base* pPar, int item, Base* obj )
00556   { return registerObject(__cast(pPar), item, obj);                            }
00557   virtual StatusCode registerObject(CSTR full, Base* obj );
00558   virtual StatusCode registerObject(DataObject* pPar, CSTR rel, Base* obj );
00559   // ==========================================================================
00560   // Unregister histogram from the data store
00561   // ==========================================================================
00562   virtual StatusCode unregisterObject(Base* obj )
00563   { return DataSvc::unregisterObject(__cast(obj));                             }
00564   virtual StatusCode unregisterObject(Base* obj, CSTR objectPath)
00565   { return DataSvc::unregisterObject(__cast(obj),objectPath);                  }
00566   virtual StatusCode unregisterObject(Base* obj, int item )
00567   { return DataSvc::unregisterObject(__cast(obj),item);                        }
00568   // ==========================================================================
00569   // Retrieve histogram from data store
00570   // ==========================================================================
00571   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H1D*& obj)
00572   { return Helper(this).retrieve(pReg,path,obj);                                }
00573   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, P1D*& obj)
00574   { return Helper(this).retrieve(pReg,path,obj);                                }
00575   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H2D*& obj)
00576   { return Helper(this).retrieve(pReg,path,obj);                                }
00577   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, P2D*& obj)
00578   { return Helper(this).retrieve(pReg,path,obj);                                }
00579   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H3D*& obj)
00580   { return Helper(this).retrieve(pReg,path,obj);                                }
00581   //------------------------------------------------------------------------------
00582   virtual StatusCode retrieveObject(CSTR full,P1D*& obj)
00583   {  return Helper(this).retrieve(full,obj);                                    }
00584   virtual StatusCode retrieveObject(CSTR full,P2D*& obj)  
00585   {  return Helper(this).retrieve(full,obj);                                    }
00586   virtual StatusCode retrieveObject(CSTR full,H1D*& obj)  
00587   {  return Helper(this).retrieve(full,obj);                                    }
00588   virtual StatusCode retrieveObject(CSTR full,H2D*& obj)  
00589   {  return Helper(this).retrieve(full,obj);                                    }
00590   virtual StatusCode retrieveObject(CSTR full,H3D*& obj)  
00591   {  return Helper(this).retrieve(full,obj);                                    }
00592   //------------------------------------------------------------------------------
00593   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,P1D*& obj)
00594   {  return Helper(this).retrieve(parent,rel,obj);                              }
00595   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,P2D*& obj)
00596   {  return Helper(this).retrieve(parent,rel,obj);                              }
00597   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H1D*& obj)
00598   {  return Helper(this).retrieve(parent,rel,obj);                              }
00599   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H2D*& obj)
00600   {  return Helper(this).retrieve(parent,rel,obj);                              }
00601   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H3D*& obj)
00602   {  return Helper(this).retrieve(parent,rel,obj);                              }
00603   //------------------------------------------------------------------------------
00604   virtual StatusCode retrieveObject(CSTR parent,int item,P1D*& obj)
00605   {  return Helper(this).retrieve(parent,item,obj);                             }
00606   virtual StatusCode retrieveObject(CSTR parent,int item,P2D*& obj)
00607   {  return Helper(this).retrieve(parent,item,obj);                             }
00608   virtual StatusCode retrieveObject(CSTR parent,int item,H1D*& obj)
00609   {  return Helper(this).retrieve(parent,item,obj);                             }
00610   virtual StatusCode retrieveObject(CSTR parent,int item,H2D*& obj)
00611   {  return Helper(this).retrieve(parent,item,obj);                             }
00612   virtual StatusCode retrieveObject(CSTR parent,int item,H3D*& obj)
00613   {  return Helper(this).retrieve(parent,item,obj);                             }
00614   //------------------------------------------------------------------------------
00615   virtual StatusCode retrieveObject(DataObject* par,CSTR item,P1D*& obj)
00616   {  return Helper(this).retrieve(par,item,obj);                                }
00617   virtual StatusCode retrieveObject(DataObject* par,CSTR item,P2D*& obj)
00618   {  return Helper(this).retrieve(par,item,obj);                                }
00619   virtual StatusCode retrieveObject(DataObject* par,CSTR item,H1D*& obj)
00620   {  return Helper(this).retrieve(par,item,obj);                                }
00621   virtual StatusCode retrieveObject(DataObject* par,CSTR item,H2D*& obj)
00622   {  return Helper(this).retrieve(par,item,obj);                                }
00623   virtual StatusCode retrieveObject(DataObject* par,CSTR item,H3D*& obj)
00624   {  return Helper(this).retrieve(par,item,obj);                                }
00625   //------------------------------------------------------------------------------
00626   virtual StatusCode retrieveObject(DataObject* par,int item,P1D*& obj)
00627   {  return Helper(this).retrieve(par,item,obj);                                }
00628   virtual StatusCode retrieveObject(DataObject* par,int item,P2D*& obj)
00629   {  return Helper(this).retrieve(par,item,obj);                                }
00630   virtual StatusCode retrieveObject(DataObject* par,int item,H1D*& obj)
00631   {  return Helper(this).retrieve(par,item,obj);                                }
00632   virtual StatusCode retrieveObject(DataObject* par,int item,H2D*& obj)
00633   {  return Helper(this).retrieve(par,item,obj);                                }
00634   virtual StatusCode retrieveObject(DataObject* par,int item,H3D*& obj)
00635   {  return Helper(this).retrieve(par,item,obj);                                }
00636   //------------------------------------------------------------------------------
00637   virtual StatusCode retrieveObject(Base* par,int item,P1D*& obj)
00638   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00639   virtual StatusCode retrieveObject(Base* par,int item,P2D*& obj)
00640   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00641   virtual StatusCode retrieveObject(Base* par,int item,H1D*& obj)
00642   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00643   virtual StatusCode retrieveObject(Base* par,int item,H2D*& obj)
00644   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00645   virtual StatusCode retrieveObject(Base* par,int item,H3D*& obj)
00646   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00647   //------------------------------------------------------------------------------
00648   virtual StatusCode retrieveObject(Base* par,CSTR item,P1D*& obj)
00649   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00650   virtual StatusCode retrieveObject(Base* par,CSTR item,P2D*& obj)
00651   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00652   virtual StatusCode retrieveObject(Base* par,CSTR item,H1D*& obj)
00653   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00654   virtual StatusCode retrieveObject(Base* par,CSTR item,H2D*& obj)
00655   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00656   virtual StatusCode retrieveObject(Base* par,CSTR item,H3D*& obj)
00657   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00658 
00659   // ==========================================================================
00660   // Find histogram identified by its full path in the data store
00661   // ==========================================================================
00662 
00663   //------------------------------------------------------------------------------
00664   // Find object identified by its full path in the data store
00665   //------------------------------------------------------------------------------
00666   virtual StatusCode findObject(IRegistry* pReg,CSTR path,P1D*& obj)  
00667   {  return Helper(this).find(pReg,path,obj);                                 }
00668   virtual StatusCode findObject(IRegistry* pReg,CSTR path,P2D*& obj)  
00669   {  return Helper(this).find(pReg,path,obj);                                 }
00670   virtual StatusCode findObject(IRegistry* pReg,CSTR path,H1D*& obj)  
00671   {  return Helper(this).find(pReg,path,obj);                                 }
00672   virtual StatusCode findObject(IRegistry* pReg,CSTR path,H2D*& obj)  
00673   {  return Helper(this).find(pReg,path,obj);                                 }
00674   virtual StatusCode findObject(IRegistry* pReg,CSTR path,H3D*& obj)  
00675   {  return Helper(this).find(pReg,path,obj);                                 }
00676   //------------------------------------------------------------------------------
00677   virtual StatusCode findObject(CSTR full,P1D*& obj)
00678   {  return Helper(this).find(full,obj);                                      }
00679   virtual StatusCode findObject(CSTR full,P2D*& obj)  
00680   {  return Helper(this).find(full,obj);                                      }
00681   virtual StatusCode findObject(CSTR full,H1D*& obj)  
00682   {  return Helper(this).find(full,obj);                                      }
00683   virtual StatusCode findObject(CSTR full,H2D*& obj)  
00684   {  return Helper(this).find(full,obj);                                      }
00685   virtual StatusCode findObject(CSTR full,H3D*& obj)  
00686   {  return Helper(this).find(full,obj);                                      }
00687   //------------------------------------------------------------------------------
00688   virtual StatusCode findObject(CSTR par,CSTR rel,P1D*& obj)
00689   {  return Helper(this).find(par,rel,obj);                                   }
00690   virtual StatusCode findObject(CSTR par,CSTR rel,P2D*& obj)
00691   {  return Helper(this).find(par,rel,obj);                                   }
00692   virtual StatusCode findObject(CSTR par,CSTR rel,H1D*& obj)
00693   {  return Helper(this).find(par,rel,obj);                                   }
00694   virtual StatusCode findObject(CSTR par,CSTR rel,H2D*& obj)
00695   {  return Helper(this).find(par,rel,obj);                                   }
00696   virtual StatusCode findObject(CSTR par,CSTR rel,H3D*& obj)
00697   {  return Helper(this).find(par,rel,obj);                                   }
00698   //------------------------------------------------------------------------------
00699   virtual StatusCode findObject(CSTR par,int item,P1D*& obj)
00700   {  return Helper(this).find(par,item,obj);                                  }
00701   virtual StatusCode findObject(CSTR par,int item,P2D*& obj)
00702   {  return Helper(this).find(par,item,obj);                                  }
00703   virtual StatusCode findObject(CSTR par,int item,H1D*& obj)
00704   {  return Helper(this).find(par,item,obj);                                  }
00705   virtual StatusCode findObject(CSTR par,int item,H2D*& obj)
00706   {  return Helper(this).find(par,item,obj);                                  }
00707   virtual StatusCode findObject(CSTR par,int item,H3D*& obj)
00708   {  return Helper(this).find(par,item,obj);                                  }
00709   //------------------------------------------------------------------------------
00710   virtual StatusCode findObject(DataObject* par,int item,P1D*& obj)
00711   {  return Helper(this).find(par,item,obj);                                  }
00712   virtual StatusCode findObject(DataObject* par,int item,P2D*& obj)
00713   {  return Helper(this).find(par,item,obj);                                  }
00714   virtual StatusCode findObject(DataObject* par,int item,H1D*& obj)
00715   {  return Helper(this).find(par,item,obj);                                  }
00716   virtual StatusCode findObject(DataObject* par,int item,H2D*& obj)
00717   {  return Helper(this).find(par,item,obj);                                  }
00718   virtual StatusCode findObject(DataObject* par,int item,H3D*& obj)
00719   {  return Helper(this).find(par,item,obj);                                  }
00720   //------------------------------------------------------------------------------
00721   virtual StatusCode findObject(DataObject* par,CSTR item,P1D*& obj)
00722   {  return Helper(this).find(par,item,obj);                                  }
00723   virtual StatusCode findObject(DataObject* par,CSTR item,P2D*& obj)
00724   {  return Helper(this).find(par,item,obj);                                  }
00725   virtual StatusCode findObject(DataObject* par,CSTR item,H1D*& obj)
00726   {  return Helper(this).find(par,item,obj);                                  }
00727   virtual StatusCode findObject(DataObject* par,CSTR item,H2D*& obj)
00728   {  return Helper(this).find(par,item,obj);                                  }
00729   virtual StatusCode findObject(DataObject* par,CSTR item,H3D*& obj)
00730   {  return Helper(this).find(par,item,obj);                                  }
00731   //------------------------------------------------------------------------------
00732   virtual StatusCode findObject(Base* par,int item,P1D*& obj)
00733   {  return Helper(this).find(__cast(par),item,obj);                          }
00734   virtual StatusCode findObject(Base* par,int item,P2D*& obj)
00735   {  return Helper(this).find(__cast(par),item,obj);                          }
00736   virtual StatusCode findObject(Base* par,int item,H1D*& obj)
00737   {  return Helper(this).find(__cast(par),item,obj);                          }
00738   virtual StatusCode findObject(Base* par,int item,H2D*& obj)
00739   {  return Helper(this).find(__cast(par),item,obj);                          }
00740   virtual StatusCode findObject(Base* par,int item,H3D*& obj)
00741   {  return Helper(this).find(__cast(par),item,obj);                          }
00742   //------------------------------------------------------------------------------
00743   virtual StatusCode findObject(Base* par,CSTR item,P1D*& obj)
00744   {  return Helper(this).find(__cast(par),item,obj);                          }
00745   virtual StatusCode findObject(Base* par,CSTR item,P2D*& obj)
00746   {  return Helper(this).find(__cast(par),item,obj);                          }
00747   virtual StatusCode findObject(Base* par,CSTR item,H1D*& obj)
00748   {  return Helper(this).find(__cast(par),item,obj);                          }
00749   virtual StatusCode findObject(Base* par,CSTR item,H2D*& obj)
00750   {  return Helper(this).find(__cast(par),item,obj);                          }
00751   virtual StatusCode findObject(Base* par,CSTR item,H3D*& obj)
00752   {  return Helper(this).find(__cast(par),item,obj);                          }
00753 
00754   // ==========================================================================
00755   // Projections and slices.
00756   // ==========================================================================
00757   virtual H1D* projectionX(CSTR name,const H2D& h)
00758   {  return sliceX( name, h, IAxis::UNDERFLOW_BIN, IAxis::OVERFLOW_BIN);      }
00759   virtual H1D* projectionY(CSTR name,const H2D& h)
00760   {  return sliceY( name, h, IAxis::UNDERFLOW_BIN, IAxis::OVERFLOW_BIN);      }
00761   virtual H1D* sliceX(CSTR name,const H2D& h,int indexY)
00762   {  return sliceX( name, h, indexY, indexY );                                }
00763   virtual H1D* sliceY(CSTR name,const H2D& h,int indexX)
00764   {  return sliceY( name, h, indexX, indexX );                                }
00765   virtual H1D* sliceX(CSTR name,const H2D& h,int indexY1,int indexY2);
00766   virtual H1D* sliceY(CSTR name,const H2D& h,int indexX1,int indexX2);
00767   //------------------------------------------------------------------------------
00768   bool destroy( IBaseHistogram* hist);
00769 
00770   H1D* add(CSTR nameAndTitle, const H1D& a, const H1D& b)    
00771   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Add, 1.);          }
00772   H1D* subtract(CSTR nameAndTitle, const H1D& a, const H1D& b)    
00773   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Add,-1.);          }
00774   H1D* multiply(CSTR nameAndTitle, const H1D& a, const H1D& b)    
00775   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Multiply);         }
00776   H1D* divide(CSTR nameAndTitle, const H1D& a, const H1D& b)    
00777   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Divide);           }
00778 
00779   H2D* add(CSTR nameAndTitle, const H2D& a, const H2D& b)    
00780   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Add, 1.);           }
00781   H2D* subtract(CSTR nameAndTitle, const H2D& a, const H2D& b)    
00782   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Add,-1.);           }
00783   H2D* multiply(CSTR nameAndTitle, const H2D& a, const H2D& b)    
00784   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Multiply);          }
00785   H2D* divide(CSTR nameAndTitle, const H2D& a, const H2D& b)    
00786   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Divide);            }
00787 
00788   H3D* add(CSTR nameAndTitle, const H3D& a, const H3D& b)    
00789   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Add, 1.);           }
00790   H3D* subtract(CSTR nameAndTitle, const H3D& a, const H3D& b)    
00791   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Add,-1.);           }
00792   H3D* multiply(CSTR nameAndTitle, const H3D& a, const H3D& b)    
00793   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Multiply);          }
00794   H3D* divide(CSTR nameAndTitle, const H3D& a, const H3D& b)    
00795   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Divide);            }
00796 
00797   H2D* projectionXY(CSTR nameAndTitle,const H3D& h)
00798   { return i_project(nameAndTitle,h,"xy");                                    }
00799   H2D* projectionXZ(CSTR nameAndTitle,const H3D& h)
00800   { return i_project(nameAndTitle,h,"xz");                                    }
00801   H2D* projectionYZ(CSTR nameAndTitle,const H3D& h)
00802   { return i_project(nameAndTitle,h,"yz");                                    }
00803   H2D* sliceXY(CSTR /* nameAndTitle */,const H3D& /* h */,int /* low */,int /* high */ ) NOT_IMPLEMENTED
00804   H2D* sliceXZ(CSTR /* nameAndTitle */,const H3D& /* h */,int /* low */,int /* high */ ) NOT_IMPLEMENTED
00805   H2D* sliceYZ(CSTR /* nameAndTitle */,const H3D& /* h */,int /* low */,int /* high */ ) NOT_IMPLEMENTED
00806 
00807   //------------------------------------------------------------------------------
00808   H1D* createHistogram1D(CSTR name,CSTR tit,DBINS(x))
00809   {  return book( name, tit, BINS(x));                                        }
00810   H1D* createHistogram1D(CSTR name,CSTR tit,DBINS(x),CSTR /*opt*/) 
00811   {  return book( name, tit, BINS(x));                                        }
00812   H1D* createHistogram1D(CSTR name,CSTR title,const Edges& x,CSTR /*opt*/)
00813   {  return book(name, title, x);                                             }
00814   H1D* createHistogram1D(CSTR nameAndTitle, DBINS(x))
00815   { return book(nameAndTitle, nameAndTitle, BINS(x));                         }
00816   H1D* createCopy(CSTR full, const H1D& h) 
00817   {  return createCopy(i_splitPath(full), h);                                 }
00818   H1D* createCopy(CSTR par, CSTR rel, const H1D& h) 
00819   {  return createCopy(createPath(par), rel, h);                              }
00820   H1D* createCopy(STRPAIR loc, const H1D& h) 
00821   {  return createCopy(loc.first, loc.second, h);                             }
00822   H1D* createCopy(DataObject* pPar, CSTR rel, const H1D& h) 
00823   { return i_book(pPar, rel, h.title(), Gaudi::createH1D(h));                 }
00824   //------------------------------------------------------------------------------
00825   H2D* createHistogram2D(CSTR name,CSTR tit,DBINS(x),DBINS(y)) 
00826   {  return book( name, tit, BINS(x), BINS(y));                               }
00827   H2D* createHistogram2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),CSTR /*opt*/) 
00828   {  return book( name, tit, BINS(x), BINS(y));                               }
00829   H2D* createHistogram2D(CSTR name,CSTR title,const Edges& x,const Edges& y, CSTR /*opt*/)
00830   {  return book(name, title, x, y);                                          }
00831   H2D* createHistogram2D(CSTR nameAndTitle, DBINS(x), DBINS(y))
00832   { return book(nameAndTitle, nameAndTitle, BINS(x), BINS(y));                }
00833   H2D* createCopy(CSTR full, const H2D& h) 
00834   {  return createCopy(i_splitPath(full), h);                                 }
00835   H2D* createCopy(CSTR par, CSTR rel, const H2D& h) 
00836   {  return createCopy(createPath(par), rel, h);                              }
00837   H2D* createCopy(STRPAIR loc, const H2D& h) 
00838   {  return createCopy(loc.first, loc.second, h);                             }
00839   H2D* createCopy(DataObject* pPar, CSTR rel, const H2D& h) 
00840   { return i_book(pPar, rel, h.title(), Gaudi::createH2D(h));                 }
00841   //------------------------------------------------------------------------------
00842   H3D* createHistogram3D(CSTR name, CSTR tit, DBINS(x), DBINS(y), DBINS(z)) 
00843   {  return book( name, tit, BINS(x), BINS(y), BINS(z));                      }
00844   H3D* createHistogram3D(CSTR name, CSTR tit, DBINS(x), DBINS(y), DBINS(z), CSTR /*opt*/) 
00845   {  return book( name, tit, BINS(x), BINS(y), BINS(z));                      }
00846   H3D* createHistogram3D(CSTR name, CSTR title,const Edges& x,const Edges& y,const Edges& z,CSTR /*opt*/)
00847   {  return book(name, title, x, y, z);                                       }
00848   H3D* createHistogram3D(CSTR nameAndTitle, DBINS(x), DBINS(y), DBINS(z))
00849   { return book(nameAndTitle, nameAndTitle, BINS(x), BINS(y), BINS(z));       }
00850   H3D* createCopy(CSTR full, const H3D& h) 
00851   {  return createCopy(i_splitPath(full), h);                                 }
00852   H3D* createCopy(CSTR par, CSTR rel, const H3D& h) 
00853   {  return createCopy(createPath(par), rel, h);                              }
00854   H3D* createCopy(STRPAIR loc, const H3D& h) 
00855   {  return createCopy(loc.first, loc.second, h);                             }
00856   H3D* createCopy(DataObject* pPar, CSTR rel, const H3D& h) 
00857   { return i_book(pPar, rel, h.title(), Gaudi::createH3D(h));                 }
00858   //------------------------------------------------------------------------------
00859   P1D* createProfile1D(CSTR nameAndTitle, DBINS(x))
00860   { return bookProf(nameAndTitle, nameAndTitle, BINS(x));                     }
00861   P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x)) 
00862   {  return bookProf( name, tit, BINS(x));                                    }
00863   P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x),CSTR /*opt*/) 
00864   {  return bookProf( name, tit, BINS(x));                                    }
00865   P1D* createProfile1D(CSTR name,CSTR title,const Edges& x,CSTR /*opt*/)
00866   {  return bookProf(name, title, x);                                         }
00867 
00868   P1D* createProfile1D(CSTR nameAndTitle, DBINS(x),double upper, double lower)
00869   { return bookProf(nameAndTitle, nameAndTitle, BINS(x), upper, lower);       }
00870   P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x),double upper, double lower) 
00871   {  return bookProf( name, tit, BINS(x), upper, lower);                      }
00872   P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x),double upper, double lower,CSTR /* opt*/) 
00873   {  return bookProf( name, tit, BINS(x), upper, lower);                      }
00874   P1D* createProfile1D(CSTR name,CSTR title,const Edges& x,double upper, double lower)
00875   {  return bookProf(name, title, x, upper, lower);                           }
00876   P1D* createProfile1D(CSTR name,CSTR title,const Edges& x,double upper, double lower, CSTR /* opt */)
00877   {  return bookProf(name, title, x, upper, lower);                           }
00878   P1D* createCopy(CSTR full, const P1D& h) 
00879   {  return createCopy(i_splitPath(full), h);                                 }
00880   P1D* createCopy(CSTR par, CSTR rel, const P1D& h) 
00881   {  return createCopy(createPath(par), rel, h);                              }
00882   P1D* createCopy(STRPAIR loc, const P1D& h) 
00883   {  return createCopy(loc.first, loc.second, h);                             }
00884   P1D* createCopy(DataObject* pPar, CSTR rel, const P1D& h) 
00885   { return i_book(pPar, rel, h.title(), Gaudi::createProf1D(h));              }
00886   //------------------------------------------------------------------------------
00887   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y)) 
00888   {  return bookProf( name, tit, BINS(x), BINS(y));                           }
00889   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),CSTR /*opt*/) 
00890   {  return bookProf( name, tit, BINS(x), BINS(y));                           }
00891   P2D* createProfile2D(CSTR name,CSTR title,const Edges& x,const Edges& y, CSTR /*opt*/)
00892   {  return bookProf(name, title, x, y);                                      }
00893   P2D* createProfile2D(CSTR nameAndTitle, DBINS(x), DBINS(y))
00894   { return bookProf(nameAndTitle, nameAndTitle, BINS(x), BINS(y));            }
00895 
00896   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),double upper, double lower) 
00897   {  return bookProf( name, tit, BINS(x), BINS(y), upper, lower);             }
00898   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),double upper, double lower,CSTR /*opt*/) 
00899   {  return bookProf( name, tit, BINS(x), BINS(y), upper, lower);             }
00900   P2D* createProfile2D(CSTR name,CSTR title,const Edges& x,const Edges& y,double upper, double lower, CSTR /*opt*/)
00901   {  return bookProf(name, title, x, y, upper, lower);                        }
00902   P2D* createProfile2D(CSTR nameAndTitle, DBINS(x), DBINS(y),double upper, double lower)
00903   { return bookProf(nameAndTitle, nameAndTitle, BINS(x), BINS(y), upper, lower);}
00904 
00905   P2D* createCopy(CSTR full, const P2D& h) 
00906   {  return createCopy(i_splitPath(full), h);                                 }
00907   P2D* createCopy(CSTR par, CSTR rel, const P2D& h) 
00908   {  return createCopy(createPath(par), rel, h);                              }
00909   P2D* createCopy(STRPAIR loc, const P2D& h) 
00910   {  return createCopy(loc.first, loc.second, h);                             }
00911   P2D* createCopy(DataObject* pPar, CSTR rel, const P2D& h) 
00912   { return i_book(pPar, rel, h.title(), Gaudi::createProf2D(h));              }
00913   //------------------------------------------------------------------------------
00914   AIDA::ICloud1D* createCloud1D(CSTR, CSTR, int, CSTR)         NOT_IMPLEMENTED
00915   AIDA::ICloud1D* createCloud1D(CSTR)                          NOT_IMPLEMENTED
00916   AIDA::ICloud1D* createCopy(CSTR, const AIDA::ICloud1D&)      NOT_IMPLEMENTED
00917   AIDA::ICloud2D* createCloud2D(CSTR, CSTR, int, CSTR)         NOT_IMPLEMENTED
00918   AIDA::ICloud2D* createCloud2D(CSTR)                          NOT_IMPLEMENTED
00919   AIDA::ICloud2D* createCopy(CSTR, const AIDA::ICloud2D&)      NOT_IMPLEMENTED
00920   AIDA::ICloud3D* createCloud3D(CSTR, CSTR, int, CSTR)         NOT_IMPLEMENTED
00921   AIDA::ICloud3D* createCloud3D(CSTR)                          NOT_IMPLEMENTED  
00922   AIDA::ICloud3D* createCopy(CSTR, const AIDA::ICloud3D&)      NOT_IMPLEMENTED
00923 
00924   //------------------------------------------------------------------------------
00925   // Re-implementing these here avoids a compiler warning about hidden
00926   // functions. Refer to ARM Page 210.
00927   // Register object with the data store.
00928   virtual StatusCode registerObject(CSTR full, DataObject* obj ) 
00929   {    return DataSvc::registerObject(full, obj );                            }
00930   virtual StatusCode registerObject(CSTR parPath, CSTR rel, DataObject* obj) 
00931   {    return DataSvc::registerObject(parPath, rel, obj );                    }
00932   virtual StatusCode registerObject(CSTR parPath, int item, DataObject* obj) 
00933   {    return DataSvc::registerObject(parPath, item, obj );                   }
00934   virtual StatusCode registerObject(DataObject* pPar, CSTR rel, DataObject* obj) 
00935   {    return DataSvc::registerObject(pPar, rel, obj );                       }
00936   virtual StatusCode registerObject(DataObject* pPar, int item, DataObject* obj) 
00937   {    return DataSvc::registerObject(pPar, item, obj );                      }
00938 
00940   virtual StatusCode unregisterObject(CSTR full ) 
00941   {    return DataSvc::unregisterObject(full );                               }
00942   virtual StatusCode unregisterObject(CSTR parPath, CSTR objectPath ) 
00943   {    return DataSvc::unregisterObject(parPath, objectPath );                }
00944   virtual StatusCode unregisterObject(CSTR parPath, int item ) 
00945   {    return DataSvc::unregisterObject(parPath, item );                      }
00946   virtual StatusCode unregisterObject(DataObject* obj ) 
00947   {    return DataSvc::unregisterObject(obj );                                }
00948   virtual StatusCode unregisterObject(DataObject* obj, CSTR objectPath ) 
00949   {    return DataSvc::unregisterObject(obj, objectPath );                    }
00950   virtual StatusCode unregisterObject(DataObject* obj, int item ) 
00951   {    return DataSvc::unregisterObject(obj, item );                          }
00952 
00954   virtual StatusCode retrieveObject(IRegistry* dir, CSTR path, DataObject*& obj) 
00955   {    return DataSvc::retrieveObject(dir, path, obj );                       }
00956   virtual StatusCode retrieveObject(CSTR full, DataObject*& obj ) 
00957   {    return DataSvc::retrieveObject(full, obj );                            }
00958   virtual StatusCode retrieveObject(CSTR parPath, CSTR rel, DataObject*& obj) 
00959   {    return DataSvc::retrieveObject(parPath, rel, obj );                    }
00960   virtual StatusCode retrieveObject(CSTR parPath, int item, DataObject*& obj) 
00961   {    return DataSvc::retrieveObject(parPath, item, obj );                   }
00962   virtual StatusCode retrieveObject(DataObject* pPar, CSTR rel, DataObject*& obj ) 
00963   {    return DataSvc::retrieveObject(pPar, rel, obj );                       }
00964   virtual StatusCode retrieveObject(DataObject* pPar, int item, DataObject*& obj ) 
00965   {    return DataSvc::retrieveObject(pPar, item, obj );                      }
00966 
00968   virtual StatusCode findObject(CSTR full, DataObject*& obj ) 
00969   {    return DataSvc::findObject(full, obj );                                }
00970   virtual StatusCode findObject(IRegistry* dir, CSTR path, DataObject*& obj ) 
00971   {    return DataSvc::findObject(dir, path, obj );                           }
00972   virtual StatusCode findObject(CSTR parPath, CSTR rel, DataObject*& obj ) 
00973   {    return DataSvc::findObject(parPath, rel, obj );                        }
00974   virtual StatusCode findObject(CSTR parPath, int item, DataObject*& obj ) 
00975   {    return DataSvc::findObject(parPath, item, obj );                       }
00976   virtual StatusCode findObject(DataObject* pPar, CSTR rel, DataObject*& obj ) 
00977   {    return DataSvc::findObject(pPar, rel, obj );                           }
00978   virtual StatusCode findObject(DataObject* pPar, int item, DataObject*& obj ) 
00979   {    return DataSvc::findObject(pPar, item, obj );                          }
00980 
00982   virtual std::ostream& print(Base* h, std::ostream& s = std::cout) const;
00983 
00985   virtual std::ostream& write(Base* h, std::ostream& s = std::cout) const;
00986 
00988   virtual int write(Base* h, const char* file_name ) const;
00989 
00991   virtual DataObject* createPath(CSTR newPath );
00992 
00997   virtual DataObject* createDirectory  (CSTR parentDir, CSTR subDir );
00998 
00999 public:
01000   // ==========================================================================  
01002   void update1Ddefs ( Property& ) ;
01003   // ==========================================================================
01004   typedef std::map<std::string,Gaudi::Histo1DDef> Histo1DMap ;
01005   // ==========================================================================
01006 private:
01007   // ==========================================================================
01008   // container with the definition of "the special" histograms 
01009   Histo1DMap                  m_defs1D ;
01010   // ==========================================================================
01011   // modified histograms:
01012   std::set<std::string>       m_mods1D ;
01013   // ==========================================================================  
01014 };
01015 // ===========================================================================
01016 // The END 
01017 // ===========================================================================
01018 #endif    // GAUDISVC_HISTOGRAMSVC_H
01019 // ===========================================================================

Generated at Fri Jul 18 11:59:24 2008 for Gaudi Framework, version v20r2 by Doxygen version 1.5.1 written by Dimitri van Heesch, © 1997-2004