Gaudi Framework, version v23r4

Home   Generated: Mon Sep 17 2012

HistogramSvc.h

Go to the documentation of this file.
00001 // $Id: HistogramSvc.h,v 1.16 2008/10/09 09:59:14 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 // ============================================================================
00020 #include "AIDA_visibility_hack.h"
00021 #include "AIDA/IHistogramFactory.h"
00022 #include "AIDA/IAnnotation.h"
00023 // ============================================================================
00024 // local (+PI)
00025 // ============================================================================
00026 #include "Axis.h"
00027 #include "GaudiPI.h"
00028 #include "TH1.h"
00029 #include "TH2.h"
00030 #include "TH3.h"
00031 // ============================================================================
00032 namespace AIDA {
00033   class ICloud1D;
00034   class ICloud2D;
00035   class ICloud3D;
00036 }
00037 // ============================================================================
00038 // Forward declarations
00039 template <class T> class SvcFactory;
00040 #define DBINS(x) int n##x, double low##x, double up##x
00041 #define BINS(x)  n##x, low##x, up##x
00042 #define NOT_IMPLEMENTED { not_implemented(); return 0; }
00043 // ============================================================================
00049 class HistogramSvc : virtual public extends1<DataSvc, IHistogramSvc>,
00050                      virtual public AIDA::IHistogramFactory
00051 {
00052 
00053 private:
00054   // Allow SvcFactory to instantiate the service.
00055   friend class SvcFactory<HistogramSvc>;
00056   typedef const std::pair<std::string,std::string>& STRPAIR;
00057   void not_implemented()  const {
00058     MsgStream log( msgSvc(), name() );
00059     log << MSG::ERROR << "Sorry, not yet implemented..." << endmsg;
00060   }
00061 protected:
00062   typedef const std::string&       CSTR;
00063   typedef std::vector<double>      Edges;
00064   typedef std::vector<std::string> DBaseEntries;
00065   typedef AIDA::IHistogram1D       H1D;
00066   typedef AIDA::IHistogram2D       H2D;
00067   typedef AIDA::IHistogram3D       H3D;
00068   typedef AIDA::IProfile1D         P1D;
00069   typedef AIDA::IProfile2D         P2D;
00070   typedef AIDA::IBaseHistogram     Base;
00071   struct Helper {
00072     HistogramSvc* m_svc;
00073     Helper(HistogramSvc* p) : m_svc(p) {}
00074     template <class A1, class A3> StatusCode retrieve(A1 a1, A3*& a3)  {
00075       DataObject* pObject  = 0;
00076       StatusCode sc = m_svc->DataSvc::retrieveObject(a1,pObject);
00077       a3 = dynamic_cast<A3*>(pObject);
00078       return sc;
00079     }
00080     template <class A1, class A2, class A3> StatusCode retrieve(A1 a1, A2 a2, A3*& a3)  {
00081       DataObject* pObject  = 0;
00082       StatusCode sc = m_svc->DataSvc::retrieveObject(a1,a2,pObject);
00083       a3 = dynamic_cast<A3*>(pObject);
00084       return sc;
00085     }
00086     template <class A1, class A3> StatusCode find(A1 a1, A3*& a3)  {
00087       DataObject* pObject  = 0;
00088       StatusCode sc = m_svc->DataSvc::findObject(a1,pObject);
00089       a3 = dynamic_cast<A3*>(pObject);
00090       return sc;
00091     }
00092     template <class A1, class A2, class A3> StatusCode find(A1 a1, A2 a2, A3*& a3)  {
00093       DataObject* pObject  = 0;
00094       StatusCode sc = m_svc->DataSvc::findObject(a1,a2,pObject);
00095       a3 = dynamic_cast<A3*>(pObject);
00096       return sc;
00097     }
00098     template <class R, class S, class T1, class T2>
00099     static R* act(R* res,const S& b, void (T1::*pmf)(const T2*,Double_t), Double_t scale)  {
00100       T1 *h1 = Gaudi::getRepresentation<R,T1>(*res);
00101       T1 *h2 = Gaudi::getRepresentation<R,T1>(b);
00102       if ( h1 && h2 )  {
00103         (h1->*pmf)(h2,scale);
00104         return res;
00105       }
00106       return 0;
00107     }
00108     template <class R, class S, class T1, class T2>
00109     static R* act(R* res,const S& b, Bool_t (T1::*pmf)(const T2*,Double_t), Double_t scale)  {
00110       T1 *h1 = Gaudi::getRepresentation<R,T1>(*res);
00111       T1 *h2 = Gaudi::getRepresentation<R,T1>(b);
00112       if ( h1 && h2 )  {
00113         (h1->*pmf)(h2,scale);
00114         return res;
00115       }
00116       return 0;
00117     }
00118     template <class R, class S, class T1, class T2>
00119     static R* act(R* res,const S& b, void (T1::*pmf)(const T2*))  {
00120       T1 *h1 = Gaudi::getRepresentation<R,T1>(*res);
00121       T1 *h2 = Gaudi::getRepresentation<R,T1>(b);
00122       if ( h1 && h2 )  {
00123         (h1->*pmf)(h2);
00124         return res;
00125       }
00126       return 0;
00127     }
00128     template <class R, class S, class T1, class T2>
00129     static R* act(R* res,const S& b, Bool_t (T1::*pmf)(const T2*))  {
00130       T1 *h1 = Gaudi::getRepresentation<R,T1>(*res);
00131       T1 *h2 = Gaudi::getRepresentation<R,T1>(b);
00132       if ( h1 && h2 )  {
00133         (h1->*pmf)(h2);
00134         return res;
00135       }
00136       return 0;
00137     }
00138   };
00139 
00140 
00142   DBaseEntries                      m_input;
00143 
00144 public:
00149   HistogramSvc(CSTR name, ISvcLocator* svc );
00150 
00152   virtual ~HistogramSvc();
00153 
00159   std::pair<std::string,std::string> i_splitPath(CSTR full);
00160 
00164   StatusCode connectInput(CSTR ident);
00165   std::string _STR(int i);
00166 
00167   template <class T> inline
00168   T* i_book(DataObject* pPar,CSTR rel,CSTR title,const std::pair<DataObject*,T*>& o)  {
00169     if (o.first && registerObject(pPar, rel, (Base*)o.second).isSuccess())
00170       return o.second;
00171     delete o.first;
00172     throw GaudiException("Cannot book "+System::typeinfoName(typeid(T))+" "+title,
00173       "HistogramSvc",StatusCode::FAILURE);
00174   }
00175   template <class T> static DataObject* __cast(T* p)  {
00176     DataObject* q = dynamic_cast<DataObject*>(p);
00177     if ( 0 == q && 0 != p )  {
00178       throw std::runtime_error("HistogramSvc: Unexpected object type.");
00179     }
00180     return q;
00181   }
00183   H2D* i_project(CSTR nameAndTitle,const H3D& h, CSTR dir);
00184 
00185 public:
00187   virtual StatusCode initialize   ();
00189   virtual StatusCode reinitialize ();
00191   virtual StatusCode finalize     ();
00192 
00194   virtual AIDA::IHistogramFactory* histogramFactory()   {  return this; }
00195 
00196   // ==========================================================================
00197   // Book 1D histogram with fix binning
00198   // ==========================================================================
00216   virtual H1D* book(CSTR par,  CSTR rel, CSTR title, DBINS(x))
00217   {  return book(createPath(par), rel, title, BINS(x));                          }
00218   virtual H1D* book(CSTR par,  int hID, CSTR title, DBINS(x))
00219   {  return book(par, _STR(hID), title, BINS(x));                                }
00220   virtual H1D* book(DataObject* pPar, int hID, CSTR title, DBINS(x))
00221   {  return book(pPar, _STR(hID), title, BINS(x));                               }
00222   virtual H1D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x)) ;
00223   virtual H1D* book(STRPAIR loc,CSTR title, DBINS(x))
00224   { return book(loc.first, loc.second, title, BINS(x));                          }
00225   virtual H1D* book(CSTR full, CSTR title, DBINS(x))
00226   { return book(i_splitPath(full), title, BINS(x));                              }
00227   // ==========================================================================
00228   // Book 1D Profile histogram with fix binning
00229   // ==========================================================================
00247   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x),CSTR opt)
00248   { return bookProf(createPath(par), rel, title, BINS(x),opt);                     }
00249   virtual P1D* bookProf(CSTR par, int hID, CSTR title, DBINS(x),CSTR opt )
00250   { return bookProf(par, _STR(hID), title, BINS(x),opt);                           }
00251   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x),CSTR opt )
00252   { return bookProf(pPar, _STR(hID), title, BINS(x),opt);                          }
00253   virtual P1D* bookProf(STRPAIR loc,CSTR title, DBINS(x),CSTR opt)
00254   { return bookProf(loc.first, loc.second, title, BINS(x),opt);                    }
00255   virtual P1D* bookProf(CSTR full, CSTR title, DBINS(x),CSTR opt)
00256   { return bookProf(i_splitPath(full), title, BINS(x),opt);                        }
00257   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x),CSTR opt)
00258   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, BINS(x),0,0,opt));     }
00259 
00260   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), double upper, double lower,CSTR opt)
00261   { return bookProf(createPath(par), rel, title, BINS(x), upper, lower , opt);                     }
00262   virtual P1D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00263   { return bookProf(par, _STR(hID), title, BINS(x), upper, lower, opt );                           }
00264   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00265   { return bookProf(pPar, _STR(hID), title, BINS(x), upper, lower, opt);                          }
00266   virtual P1D* bookProf(STRPAIR loc,CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00267   { return bookProf(loc.first, loc.second, title, BINS(x), upper, lower,opt);                    }
00268   virtual P1D* bookProf(CSTR full, CSTR title, DBINS(x), double upper, double lower, CSTR opt )
00269   { return bookProf(i_splitPath(full), title, BINS(x), upper, lower , opt );                        }
00270   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00271   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, BINS(x), upper, lower, opt));         }
00272   // ==========================================================================
00273   // Book 1D histogram with variable binning
00274   // ==========================================================================
00289   virtual H1D* book(CSTR par, int hID, CSTR title, Edges e)
00290   {  return book(par, _STR(hID), title, e);                                 }
00291   virtual H1D* book(DataObject* pPar, int hID, CSTR title, Edges e)
00292   {  return book(pPar, _STR(hID), title, e);                                }
00293   virtual H1D* book(CSTR par, CSTR rel, CSTR title, Edges e )
00294   {  return book(createPath(par), rel, title, e);                           }
00295   virtual H1D* book(STRPAIR loc,CSTR title, Edges e )
00296   { return book(loc.first, loc.second, title, e);                           }
00297   virtual H1D* book(CSTR full, CSTR title, Edges e )
00298   { return book(i_splitPath(full), title, e);                               }
00299   virtual H1D* book(DataObject* pPar, CSTR rel, CSTR title, Edges e )
00300   { return i_book(pPar, rel, title, Gaudi::createH1D(title, e));            }
00301 
00302   // ==========================================================================
00303   // Book 1D profile histogram with variable binning
00304   // ==========================================================================
00319   virtual P1D* bookProf(CSTR full, CSTR title, Edges e )
00320   { return bookProf(i_splitPath(full), title, e);                             }
00321   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, Edges e )
00322   { return bookProf(createPath(par), rel, title, e);                          }
00323   virtual P1D* bookProf(CSTR par, int hID, CSTR title, Edges e )
00324   { return bookProf(par, _STR(hID), title, e);                                }
00325   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, Edges e )
00326   { return bookProf(pPar, _STR(hID), title, e);                               }
00327   virtual P1D* bookProf(STRPAIR loc,CSTR title, Edges e)
00328   { return bookProf(loc.first, loc.second, title, e);                         }
00329   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges e )
00330   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, e, 0, 0));        }
00331 
00332   virtual P1D* bookProf(CSTR full, CSTR title, Edges e, double upper, double lower)
00333   { return bookProf(i_splitPath(full), title, e, upper, lower);               }
00334   virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, Edges e, double upper, double lower)
00335   { return bookProf(createPath(par), rel, title, e, upper, lower);            }
00336   virtual P1D* bookProf(CSTR par, int hID, CSTR title, Edges e, double upper, double lower)
00337   { return bookProf(par, _STR(hID), title, e, upper, lower);                  }
00338   virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, Edges e, double upper, double lower)
00339   { return bookProf(pPar, _STR(hID), title, e, upper, lower);                 }
00340   virtual P1D* bookProf(STRPAIR loc,CSTR title, Edges e, double upper, double lower)
00341   { return bookProf(loc.first, loc.second, title, e, upper, lower);           }
00342   virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges e, double upper, double lower)
00343   { return i_book(pPar,rel,title,Gaudi::createProf1D(title, e, upper, lower));}
00344   // ==========================================================================
00345   // Book 2D histogram with fixed binning
00346   // ==========================================================================
00364   virtual H2D* book(CSTR full, CSTR title, DBINS(x), DBINS(y))
00365   { return book(i_splitPath(full), title, BINS(x),BINS(y));               }
00366   virtual H2D* book(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00367   { return book(createPath(par), rel, title, BINS(x),BINS(y));            }
00368   virtual H2D* book(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y))
00369   { return book(par,_STR(hID), title, BINS(x),BINS(y));                   }
00370   virtual H2D* book(STRPAIR loc,CSTR title, DBINS(x), DBINS(y))
00371   { return book(loc.first, loc.second, title, BINS(x), BINS(y));          }
00372   virtual H2D* book(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y))
00373   { return book(pPar,_STR(hID), title, BINS(x),BINS(y));                  }
00374   virtual H2D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00375   { return i_book(pPar,rel,title,Gaudi::createH2D(title, BINS(x),BINS(y)));}
00376   // ==========================================================================
00377   // Book 2D profile histogram with fixed binning
00378   // ==========================================================================
00396   virtual P2D* bookProf(CSTR full, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00397   { return bookProf(i_splitPath(full), title, BINS(x),BINS(y), upper, lower);               }
00398   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00399   { return bookProf(createPath(par), rel, title, BINS(x),BINS(y), upper, lower);            }
00400   virtual P2D* bookProf(STRPAIR loc,CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00401   { return bookProf(loc.first, loc.second, title, BINS(x), BINS(y), upper, lower);          }
00402   virtual P2D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00403   { return bookProf(par, _STR(hID), title, BINS(x),BINS(y), upper, lower);                  }
00404   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00405   { return bookProf(pPar,_STR(hID), title, BINS(x),BINS(y), upper, lower);                  }
00406   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00407   { return i_book(pPar,rel,title,Gaudi::createProf2D(title, BINS(x),BINS(y), upper, lower));  }
00408 
00409   virtual P2D* bookProf(CSTR full, CSTR title, DBINS(x), DBINS(y))
00410   { return bookProf(i_splitPath(full), title, BINS(x),BINS(y));               }
00411   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00412   { return bookProf(createPath(par), rel, title, BINS(x),BINS(y));            }
00413   virtual P2D* bookProf(STRPAIR loc,CSTR title, DBINS(x), DBINS(y))
00414   { return bookProf(loc.first, loc.second, title, BINS(x), BINS(y));          }
00415   virtual P2D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y))
00416   { return bookProf(par, _STR(hID), title, BINS(x),BINS(y));                  }
00417   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y))
00418   { return bookProf(pPar,_STR(hID), title, BINS(x),BINS(y));                  }
00419   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00420   { return i_book(pPar,rel,title,Gaudi::createProf2D(title, BINS(x),BINS(y),0,0));}
00421   // ==========================================================================
00422   // Book 2D histogram with variable binning
00423   // ==========================================================================
00438   virtual H2D* book(CSTR full, CSTR title, Edges x, Edges y )
00439   { return book(i_splitPath(full), title, x, y);                        }
00440   virtual H2D* book(CSTR par, CSTR rel, CSTR title, Edges x, Edges y )
00441   { return book(createPath(par), rel, title, x, y);                     }
00442   virtual H2D* book(CSTR par, int hID, CSTR title, Edges x, Edges y )
00443   { return book(par, _STR(hID), title, x, y);                           }
00444   virtual H2D* book(STRPAIR loc,CSTR title, Edges x, Edges y )
00445   { return book(loc.first, loc.second, title, x, y);                    }
00446   virtual H2D* book(DataObject* pPar, int hID, CSTR title, Edges x, Edges y )
00447   { return book(pPar, _STR(hID), title, x, y);                          }
00448   virtual H2D* book(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y )
00449   { return i_book(pPar, rel, title, Gaudi::createH2D(title, x,y));      }
00450   // ==========================================================================
00451   // Book 2D profile histogram with variable binning
00452   // ==========================================================================
00467   virtual P2D* bookProf(CSTR full, CSTR title, Edges x, Edges y )
00468   { return bookProf(i_splitPath(full), title, x, y);                    }
00469   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, Edges x, Edges y )
00470   { return bookProf(createPath(par), rel, title, x, y);                  }
00471   virtual P2D* bookProf(CSTR par, int hID, CSTR title, Edges x, Edges y )
00472   { return bookProf(par, _STR(hID), title, x, y);                        }
00473   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, Edges x, Edges y )
00474   { return bookProf(pPar, _STR(hID), title, x, y);                       }
00475   virtual P2D* bookProf(STRPAIR loc,CSTR title, Edges x, Edges y )
00476   { return bookProf(loc.first, loc.second, title, x, y);                 }
00477   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y )
00478   { return i_book(pPar, rel, title, Gaudi::createProf2D(title,x,y,0,0)); }
00479 
00480   virtual P2D* bookProf(CSTR full, CSTR title, Edges x, Edges y, double upper, double lower )
00481   { return bookProf(i_splitPath(full), title, x, y, upper, lower);       }
00482   virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, Edges x, Edges y, double upper, double lower )
00483   { return bookProf(createPath(par), rel, title, x, y, upper, lower);                  }
00484   virtual P2D* bookProf(CSTR par, int hID, CSTR title, Edges x, Edges y, double upper, double lower )
00485   { return bookProf(par, _STR(hID), title, x, y, upper, lower);                        }
00486   virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, Edges x, Edges y, double upper, double lower )
00487   { return bookProf(pPar, _STR(hID), title, x, y, upper, lower);                       }
00488   virtual P2D* bookProf(STRPAIR loc,CSTR title, Edges x, Edges y, double upper, double lower )
00489   { return bookProf(loc.first, loc.second, title, x, y, upper, lower);                 }
00490   virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y, double upper, double lower )
00491   { return i_book(pPar, rel, title, Gaudi::createProf2D(title,x,y, upper, lower));     }
00492   // ==========================================================================
00493   // Book 3D histogram with fixed binning
00494   // ==========================================================================
00512   virtual H3D* book(CSTR full, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00513   { return book(i_splitPath(full),title,BINS(x),BINS(y),BINS(z));            }
00514   virtual H3D* book(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00515   { return book(createPath(par),rel,title,BINS(x),BINS(y),BINS(z));          }
00516   virtual H3D* book(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00517   { return book(par,_STR(hID),title,BINS(x),BINS(y),BINS(z));                }
00518   virtual H3D* book(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00519   { return book(pPar,_STR(hID), title, BINS(x),BINS(y),BINS(z));             }
00520   virtual H3D* book(STRPAIR loc,CSTR title, DBINS(x), DBINS(y), DBINS(z))
00521   { return book(loc.first, loc.second, title, BINS(x),BINS(y),BINS(z));      }
00522   virtual H3D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00523   { return i_book(pPar, rel, title, Gaudi::createH3D(title,BINS(x),BINS(y),BINS(z)));}
00524   // ==========================================================================
00525   // Book 3D histogram with variable binning
00526   // ==========================================================================
00543   virtual H3D* book(CSTR full, CSTR title, Edges x, Edges y, Edges z)
00544   { return book(i_splitPath(full), title, x, y, z);                         }
00545   virtual H3D* book(CSTR par, CSTR rel, CSTR title, Edges x, Edges y, Edges z)
00546   { return book(createPath(par), rel, title, x, y, z);                      }
00547   virtual H3D* book(CSTR par, int hID, CSTR title, Edges x, Edges y, Edges z)
00548   { return book(par,_STR(hID), title, x, y, z);                             }
00549   virtual H3D* book(DataObject* pPar, int hID, CSTR title, Edges x, Edges y, Edges z)
00550   { return book(pPar,_STR(hID), title, x, y, z);                            }
00551   virtual H3D* book(STRPAIR loc,CSTR title, Edges x, Edges y, Edges z)
00552   { return book(loc.first, loc.second, title, x,y,z);                       }
00553   virtual H3D* book(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y, Edges z)
00554   { return i_book(pPar, rel, title, Gaudi::createH3D(title,x,y,z));         }
00555 
00556   // ==========================================================================
00557   // Register histogram with the data store
00558   // ==========================================================================
00559 //------------------------------------------------------------------------------
00560 // Register object with the data store
00561 //------------------------------------------------------------------------------
00562   virtual StatusCode registerObject(CSTR parent, CSTR rel, Base* obj )
00563   { return registerObject(createPath(parent), rel, obj);                       }
00564   virtual StatusCode registerObject(CSTR parent, int item, Base* obj )
00565   { return registerObject(parent, _STR(item), obj);                            }
00566   virtual StatusCode registerObject(Base* pPar, CSTR rel, Base* obj )
00567   { return registerObject(__cast(pPar), rel, obj);                             }
00568   virtual StatusCode registerObject(DataObject* pPar, int item, Base* obj )
00569   { return registerObject(pPar, _STR(item), obj);                              }
00570   virtual StatusCode registerObject(Base* pPar, int item, Base* obj )
00571   { return registerObject(__cast(pPar), item, obj);                            }
00572   virtual StatusCode registerObject(CSTR full, Base* obj );
00573   virtual StatusCode registerObject(DataObject* pPar, CSTR rel, Base* obj );
00574   // ==========================================================================
00575   // Unregister histogram from the data store
00576   // ==========================================================================
00577   virtual StatusCode unregisterObject(Base* obj )
00578   { return DataSvc::unregisterObject(__cast(obj));                             }
00579   virtual StatusCode unregisterObject(Base* obj, CSTR objectPath)
00580   { return DataSvc::unregisterObject(__cast(obj),objectPath);                  }
00581   virtual StatusCode unregisterObject(Base* obj, int item )
00582   { return DataSvc::unregisterObject(__cast(obj),item);                        }
00583   // ==========================================================================
00584   // Retrieve histogram from data store
00585   // ==========================================================================
00586   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H1D*& obj)
00587   { return Helper(this).retrieve(pReg,path,obj);                                }
00588   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, P1D*& obj)
00589   { return Helper(this).retrieve(pReg,path,obj);                                }
00590   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H2D*& obj)
00591   { return Helper(this).retrieve(pReg,path,obj);                                }
00592   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, P2D*& obj)
00593   { return Helper(this).retrieve(pReg,path,obj);                                }
00594   virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H3D*& obj)
00595   { return Helper(this).retrieve(pReg,path,obj);                                }
00596   //------------------------------------------------------------------------------
00597   virtual StatusCode retrieveObject(CSTR full,P1D*& obj)
00598   {  return Helper(this).retrieve(full,obj);                                    }
00599   virtual StatusCode retrieveObject(CSTR full,P2D*& obj)
00600   {  return Helper(this).retrieve(full,obj);                                    }
00601   virtual StatusCode retrieveObject(CSTR full,H1D*& obj)
00602   {  return Helper(this).retrieve(full,obj);                                    }
00603   virtual StatusCode retrieveObject(CSTR full,H2D*& obj)
00604   {  return Helper(this).retrieve(full,obj);                                    }
00605   virtual StatusCode retrieveObject(CSTR full,H3D*& obj)
00606   {  return Helper(this).retrieve(full,obj);                                    }
00607   //------------------------------------------------------------------------------
00608   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,P1D*& obj)
00609   {  return Helper(this).retrieve(parent,rel,obj);                              }
00610   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,P2D*& obj)
00611   {  return Helper(this).retrieve(parent,rel,obj);                              }
00612   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H1D*& obj)
00613   {  return Helper(this).retrieve(parent,rel,obj);                              }
00614   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H2D*& obj)
00615   {  return Helper(this).retrieve(parent,rel,obj);                              }
00616   virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H3D*& obj)
00617   {  return Helper(this).retrieve(parent,rel,obj);                              }
00618   //------------------------------------------------------------------------------
00619   virtual StatusCode retrieveObject(CSTR parent,int item,P1D*& obj)
00620   {  return Helper(this).retrieve(parent,item,obj);                             }
00621   virtual StatusCode retrieveObject(CSTR parent,int item,P2D*& obj)
00622   {  return Helper(this).retrieve(parent,item,obj);                             }
00623   virtual StatusCode retrieveObject(CSTR parent,int item,H1D*& obj)
00624   {  return Helper(this).retrieve(parent,item,obj);                             }
00625   virtual StatusCode retrieveObject(CSTR parent,int item,H2D*& obj)
00626   {  return Helper(this).retrieve(parent,item,obj);                             }
00627   virtual StatusCode retrieveObject(CSTR parent,int item,H3D*& obj)
00628   {  return Helper(this).retrieve(parent,item,obj);                             }
00629   //------------------------------------------------------------------------------
00630   virtual StatusCode retrieveObject(DataObject* par,CSTR item,P1D*& obj)
00631   {  return Helper(this).retrieve(par,item,obj);                                }
00632   virtual StatusCode retrieveObject(DataObject* par,CSTR item,P2D*& obj)
00633   {  return Helper(this).retrieve(par,item,obj);                                }
00634   virtual StatusCode retrieveObject(DataObject* par,CSTR item,H1D*& obj)
00635   {  return Helper(this).retrieve(par,item,obj);                                }
00636   virtual StatusCode retrieveObject(DataObject* par,CSTR item,H2D*& obj)
00637   {  return Helper(this).retrieve(par,item,obj);                                }
00638   virtual StatusCode retrieveObject(DataObject* par,CSTR item,H3D*& obj)
00639   {  return Helper(this).retrieve(par,item,obj);                                }
00640   //------------------------------------------------------------------------------
00641   virtual StatusCode retrieveObject(DataObject* par,int item,P1D*& obj)
00642   {  return Helper(this).retrieve(par,item,obj);                                }
00643   virtual StatusCode retrieveObject(DataObject* par,int item,P2D*& obj)
00644   {  return Helper(this).retrieve(par,item,obj);                                }
00645   virtual StatusCode retrieveObject(DataObject* par,int item,H1D*& obj)
00646   {  return Helper(this).retrieve(par,item,obj);                                }
00647   virtual StatusCode retrieveObject(DataObject* par,int item,H2D*& obj)
00648   {  return Helper(this).retrieve(par,item,obj);                                }
00649   virtual StatusCode retrieveObject(DataObject* par,int item,H3D*& obj)
00650   {  return Helper(this).retrieve(par,item,obj);                                }
00651   //------------------------------------------------------------------------------
00652   virtual StatusCode retrieveObject(Base* par,int item,P1D*& obj)
00653   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00654   virtual StatusCode retrieveObject(Base* par,int item,P2D*& obj)
00655   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00656   virtual StatusCode retrieveObject(Base* par,int item,H1D*& obj)
00657   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00658   virtual StatusCode retrieveObject(Base* par,int item,H2D*& obj)
00659   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00660   virtual StatusCode retrieveObject(Base* par,int item,H3D*& obj)
00661   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00662   //------------------------------------------------------------------------------
00663   virtual StatusCode retrieveObject(Base* par,CSTR item,P1D*& obj)
00664   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00665   virtual StatusCode retrieveObject(Base* par,CSTR item,P2D*& obj)
00666   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00667   virtual StatusCode retrieveObject(Base* par,CSTR item,H1D*& obj)
00668   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00669   virtual StatusCode retrieveObject(Base* par,CSTR item,H2D*& obj)
00670   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00671   virtual StatusCode retrieveObject(Base* par,CSTR item,H3D*& obj)
00672   {  return Helper(this).retrieve(__cast(par),item,obj);                        }
00673 
00674   // ==========================================================================
00675   // Find histogram identified by its full path in the data store
00676   // ==========================================================================
00677 
00678   //------------------------------------------------------------------------------
00679   // Find object identified by its full path in the data store
00680   //------------------------------------------------------------------------------
00681   virtual StatusCode findObject(IRegistry* pReg,CSTR path,P1D*& obj)
00682   {  return Helper(this).find(pReg,path,obj);                                 }
00683   virtual StatusCode findObject(IRegistry* pReg,CSTR path,P2D*& obj)
00684   {  return Helper(this).find(pReg,path,obj);                                 }
00685   virtual StatusCode findObject(IRegistry* pReg,CSTR path,H1D*& obj)
00686   {  return Helper(this).find(pReg,path,obj);                                 }
00687   virtual StatusCode findObject(IRegistry* pReg,CSTR path,H2D*& obj)
00688   {  return Helper(this).find(pReg,path,obj);                                 }
00689   virtual StatusCode findObject(IRegistry* pReg,CSTR path,H3D*& obj)
00690   {  return Helper(this).find(pReg,path,obj);                                 }
00691   //------------------------------------------------------------------------------
00692   virtual StatusCode findObject(CSTR full,P1D*& obj)
00693   {  return Helper(this).find(full,obj);                                      }
00694   virtual StatusCode findObject(CSTR full,P2D*& obj)
00695   {  return Helper(this).find(full,obj);                                      }
00696   virtual StatusCode findObject(CSTR full,H1D*& obj)
00697   {  return Helper(this).find(full,obj);                                      }
00698   virtual StatusCode findObject(CSTR full,H2D*& obj)
00699   {  return Helper(this).find(full,obj);                                      }
00700   virtual StatusCode findObject(CSTR full,H3D*& obj)
00701   {  return Helper(this).find(full,obj);                                      }
00702   //------------------------------------------------------------------------------
00703   virtual StatusCode findObject(CSTR par,CSTR rel,P1D*& obj)
00704   {  return Helper(this).find(par,rel,obj);                                   }
00705   virtual StatusCode findObject(CSTR par,CSTR rel,P2D*& obj)
00706   {  return Helper(this).find(par,rel,obj);                                   }
00707   virtual StatusCode findObject(CSTR par,CSTR rel,H1D*& obj)
00708   {  return Helper(this).find(par,rel,obj);                                   }
00709   virtual StatusCode findObject(CSTR par,CSTR rel,H2D*& obj)
00710   {  return Helper(this).find(par,rel,obj);                                   }
00711   virtual StatusCode findObject(CSTR par,CSTR rel,H3D*& obj)
00712   {  return Helper(this).find(par,rel,obj);                                   }
00713   //------------------------------------------------------------------------------
00714   virtual StatusCode findObject(CSTR par,int item,P1D*& obj)
00715   {  return Helper(this).find(par,item,obj);                                  }
00716   virtual StatusCode findObject(CSTR par,int item,P2D*& obj)
00717   {  return Helper(this).find(par,item,obj);                                  }
00718   virtual StatusCode findObject(CSTR par,int item,H1D*& obj)
00719   {  return Helper(this).find(par,item,obj);                                  }
00720   virtual StatusCode findObject(CSTR par,int item,H2D*& obj)
00721   {  return Helper(this).find(par,item,obj);                                  }
00722   virtual StatusCode findObject(CSTR par,int item,H3D*& obj)
00723   {  return Helper(this).find(par,item,obj);                                  }
00724   //------------------------------------------------------------------------------
00725   virtual StatusCode findObject(DataObject* par,int item,P1D*& obj)
00726   {  return Helper(this).find(par,item,obj);                                  }
00727   virtual StatusCode findObject(DataObject* par,int item,P2D*& obj)
00728   {  return Helper(this).find(par,item,obj);                                  }
00729   virtual StatusCode findObject(DataObject* par,int item,H1D*& obj)
00730   {  return Helper(this).find(par,item,obj);                                  }
00731   virtual StatusCode findObject(DataObject* par,int item,H2D*& obj)
00732   {  return Helper(this).find(par,item,obj);                                  }
00733   virtual StatusCode findObject(DataObject* par,int item,H3D*& obj)
00734   {  return Helper(this).find(par,item,obj);                                  }
00735   //------------------------------------------------------------------------------
00736   virtual StatusCode findObject(DataObject* par,CSTR item,P1D*& obj)
00737   {  return Helper(this).find(par,item,obj);                                  }
00738   virtual StatusCode findObject(DataObject* par,CSTR item,P2D*& obj)
00739   {  return Helper(this).find(par,item,obj);                                  }
00740   virtual StatusCode findObject(DataObject* par,CSTR item,H1D*& obj)
00741   {  return Helper(this).find(par,item,obj);                                  }
00742   virtual StatusCode findObject(DataObject* par,CSTR item,H2D*& obj)
00743   {  return Helper(this).find(par,item,obj);                                  }
00744   virtual StatusCode findObject(DataObject* par,CSTR item,H3D*& obj)
00745   {  return Helper(this).find(par,item,obj);                                  }
00746   //------------------------------------------------------------------------------
00747   virtual StatusCode findObject(Base* par,int item,P1D*& obj)
00748   {  return Helper(this).find(__cast(par),item,obj);                          }
00749   virtual StatusCode findObject(Base* par,int item,P2D*& obj)
00750   {  return Helper(this).find(__cast(par),item,obj);                          }
00751   virtual StatusCode findObject(Base* par,int item,H1D*& obj)
00752   {  return Helper(this).find(__cast(par),item,obj);                          }
00753   virtual StatusCode findObject(Base* par,int item,H2D*& obj)
00754   {  return Helper(this).find(__cast(par),item,obj);                          }
00755   virtual StatusCode findObject(Base* par,int item,H3D*& obj)
00756   {  return Helper(this).find(__cast(par),item,obj);                          }
00757   //------------------------------------------------------------------------------
00758   virtual StatusCode findObject(Base* par,CSTR item,P1D*& obj)
00759   {  return Helper(this).find(__cast(par),item,obj);                          }
00760   virtual StatusCode findObject(Base* par,CSTR item,P2D*& obj)
00761   {  return Helper(this).find(__cast(par),item,obj);                          }
00762   virtual StatusCode findObject(Base* par,CSTR item,H1D*& obj)
00763   {  return Helper(this).find(__cast(par),item,obj);                          }
00764   virtual StatusCode findObject(Base* par,CSTR item,H2D*& obj)
00765   {  return Helper(this).find(__cast(par),item,obj);                          }
00766   virtual StatusCode findObject(Base* par,CSTR item,H3D*& obj)
00767   {  return Helper(this).find(__cast(par),item,obj);                          }
00768 
00769   // ==========================================================================
00770   // Projections and slices.
00771   // ==========================================================================
00772   virtual H1D* projectionX(CSTR name,const H2D& h)
00773   {  return sliceX( name, h, IAxis::UNDERFLOW_BIN, IAxis::OVERFLOW_BIN);      }
00774   virtual H1D* projectionY(CSTR name,const H2D& h)
00775   {  return sliceY( name, h, IAxis::UNDERFLOW_BIN, IAxis::OVERFLOW_BIN);      }
00776   virtual H1D* sliceX(CSTR name,const H2D& h,int indexY)
00777   {  return sliceX( name, h, indexY, indexY );                                }
00778   virtual H1D* sliceY(CSTR name,const H2D& h,int indexX)
00779   {  return sliceY( name, h, indexX, indexX );                                }
00780   virtual H1D* sliceX(CSTR name,const H2D& h,int indexY1,int indexY2);
00781   virtual H1D* sliceY(CSTR name,const H2D& h,int indexX1,int indexX2);
00782   //------------------------------------------------------------------------------
00783   bool destroy( IBaseHistogram* hist);
00784 
00785   H1D* add(CSTR nameAndTitle, const H1D& a, const H1D& b)
00786   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Add, 1.);          }
00787   H1D* subtract(CSTR nameAndTitle, const H1D& a, const H1D& b)
00788   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Add,-1.);          }
00789   H1D* multiply(CSTR nameAndTitle, const H1D& a, const H1D& b)
00790   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Multiply);         }
00791   H1D* divide(CSTR nameAndTitle, const H1D& a, const H1D& b)
00792   { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Divide);           }
00793 
00794   H2D* add(CSTR nameAndTitle, const H2D& a, const H2D& b)
00795   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Add, 1.);           }
00796   H2D* subtract(CSTR nameAndTitle, const H2D& a, const H2D& b)
00797   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Add,-1.);           }
00798   H2D* multiply(CSTR nameAndTitle, const H2D& a, const H2D& b)
00799   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Multiply);          }
00800   H2D* divide(CSTR nameAndTitle, const H2D& a, const H2D& b)
00801   { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Divide);            }
00802 
00803   H3D* add(CSTR nameAndTitle, const H3D& a, const H3D& b)
00804   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Add, 1.);           }
00805   H3D* subtract(CSTR nameAndTitle, const H3D& a, const H3D& b)
00806   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Add,-1.);           }
00807   H3D* multiply(CSTR nameAndTitle, const H3D& a, const H3D& b)
00808   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Multiply);          }
00809   H3D* divide(CSTR nameAndTitle, const H3D& a, const H3D& b)
00810   { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Divide);            }
00811 
00812   H2D* projectionXY(CSTR nameAndTitle,const H3D& h)
00813   { return i_project(nameAndTitle,h,"xy");                                    }
00814   H2D* projectionXZ(CSTR nameAndTitle,const H3D& h)
00815   { return i_project(nameAndTitle,h,"xz");                                    }
00816   H2D* projectionYZ(CSTR nameAndTitle,const H3D& h)
00817   { return i_project(nameAndTitle,h,"yz");                                    }
00818   H2D* sliceXY(CSTR /* nameAndTitle */,const H3D& /* h */,int /* low */,int /* high */ ) NOT_IMPLEMENTED
00819   H2D* sliceXZ(CSTR /* nameAndTitle */,const H3D& /* h */,int /* low */,int /* high */ ) NOT_IMPLEMENTED
00820   H2D* sliceYZ(CSTR /* nameAndTitle */,const H3D& /* h */,int /* low */,int /* high */ ) NOT_IMPLEMENTED
00821 
00822   //------------------------------------------------------------------------------
00823   H1D* createHistogram1D(CSTR name,CSTR tit,DBINS(x))
00824   {  return book( name, tit, BINS(x));                                        }
00825   H1D* createHistogram1D(CSTR name,CSTR tit,DBINS(x),CSTR /*opt*/)
00826   {  return book( name, tit, BINS(x));                                        }
00827   H1D* createHistogram1D(CSTR name,CSTR title,const Edges& x,CSTR /*opt*/)
00828   {  return book(name, title, x);                                             }
00829   H1D* createHistogram1D(CSTR nameAndTitle, DBINS(x))
00830   { return book(nameAndTitle, nameAndTitle, BINS(x));                         }
00831   H1D* createCopy(CSTR full, const H1D& h)
00832   {  return createCopy(i_splitPath(full), h);                                 }
00833   H1D* createCopy(CSTR par, CSTR rel, const H1D& h)
00834   {  return createCopy(createPath(par), rel, h);                              }
00835   H1D* createCopy(STRPAIR loc, const H1D& h)
00836   {  return createCopy(loc.first, loc.second, h);                             }
00837   H1D* createCopy(DataObject* pPar, CSTR rel, const H1D& h)
00838   { return i_book(pPar, rel, h.title(), Gaudi::createH1D(h));                 }
00839   //------------------------------------------------------------------------------
00840   H2D* createHistogram2D(CSTR name,CSTR tit,DBINS(x),DBINS(y))
00841   {  return book( name, tit, BINS(x), BINS(y));                               }
00842   H2D* createHistogram2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),CSTR /*opt*/)
00843   {  return book( name, tit, BINS(x), BINS(y));                               }
00844   H2D* createHistogram2D(CSTR name,CSTR title,const Edges& x,const Edges& y, CSTR /*opt*/)
00845   {  return book(name, title, x, y);                                          }
00846   H2D* createHistogram2D(CSTR nameAndTitle, DBINS(x), DBINS(y))
00847   { return book(nameAndTitle, nameAndTitle, BINS(x), BINS(y));                }
00848   H2D* createCopy(CSTR full, const H2D& h)
00849   {  return createCopy(i_splitPath(full), h);                                 }
00850   H2D* createCopy(CSTR par, CSTR rel, const H2D& h)
00851   {  return createCopy(createPath(par), rel, h);                              }
00852   H2D* createCopy(STRPAIR loc, const H2D& h)
00853   {  return createCopy(loc.first, loc.second, h);                             }
00854   H2D* createCopy(DataObject* pPar, CSTR rel, const H2D& h)
00855   { return i_book(pPar, rel, h.title(), Gaudi::createH2D(h));                 }
00856   //------------------------------------------------------------------------------
00857   H3D* createHistogram3D(CSTR name, CSTR tit, DBINS(x), DBINS(y), DBINS(z))
00858   {  return book( name, tit, BINS(x), BINS(y), BINS(z));                      }
00859   H3D* createHistogram3D(CSTR name, CSTR tit, DBINS(x), DBINS(y), DBINS(z), CSTR /*opt*/)
00860   {  return book( name, tit, BINS(x), BINS(y), BINS(z));                      }
00861   H3D* createHistogram3D(CSTR name, CSTR title,const Edges& x,const Edges& y,const Edges& z,CSTR /*opt*/)
00862   {  return book(name, title, x, y, z);                                       }
00863   H3D* createHistogram3D(CSTR nameAndTitle, DBINS(x), DBINS(y), DBINS(z))
00864   { return book(nameAndTitle, nameAndTitle, BINS(x), BINS(y), BINS(z));       }
00865   H3D* createCopy(CSTR full, const H3D& h)
00866   {  return createCopy(i_splitPath(full), h);                                 }
00867   H3D* createCopy(CSTR par, CSTR rel, const H3D& h)
00868   {  return createCopy(createPath(par), rel, h);                              }
00869   H3D* createCopy(STRPAIR loc, const H3D& h)
00870   {  return createCopy(loc.first, loc.second, h);                             }
00871   H3D* createCopy(DataObject* pPar, CSTR rel, const H3D& h)
00872   { return i_book(pPar, rel, h.title(), Gaudi::createH3D(h));                 }
00873   //------------------------------------------------------------------------------
00874 
00875 
00876   P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x),CSTR opt )
00877   {  return bookProf( name, tit, BINS(x) , opt );                             }
00878   P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x),double upper, double lower , CSTR opt )
00879   {  return bookProf( name, tit, BINS(x), upper, lower , opt );               }
00880   P1D* createProfile1D(CSTR name,CSTR title,const Edges& x,CSTR   /* opt */ )
00881   {  return bookProf(name, title, x );                                        }
00882   P1D* createProfile1D(CSTR name,CSTR title,const Edges& x,double upper, double lower, CSTR /* opt */ )
00883   {  return bookProf(name, title, x, upper, lower );                          }
00884 
00885   P1D* createProfile1D(CSTR nametit,DBINS(x))
00886   {  return bookProf( nametit, nametit, BINS(x) , "s");                       }
00887   P1D* createProfile1D(CSTR nametit,DBINS(x),double upper, double lower )
00888   {  return bookProf( nametit, nametit, BINS(x), upper, lower , "s");         }
00889 
00890 
00891   P1D* createCopy(CSTR full, const P1D& h)
00892   {  return createCopy(i_splitPath(full), h);                                 }
00893   P1D* createCopy(CSTR par, CSTR rel, const P1D& h)
00894   {  return createCopy(createPath(par), rel, h);                              }
00895   P1D* createCopy(STRPAIR loc, const P1D& h)
00896   {  return createCopy(loc.first, loc.second, h);                             }
00897   P1D* createCopy(DataObject* pPar, CSTR rel, const P1D& h)
00898   { return i_book(pPar, rel, h.title(), Gaudi::createProf1D(h));              }
00899   //------------------------------------------------------------------------------
00900   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y))
00901   {  return bookProf( name, tit, BINS(x), BINS(y));                           }
00902   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),CSTR /*opt*/)
00903   {  return bookProf( name, tit, BINS(x), BINS(y));                           }
00904   P2D* createProfile2D(CSTR name,CSTR title,const Edges& x,const Edges& y, CSTR /*opt*/)
00905   {  return bookProf(name, title, x, y);                                      }
00906   P2D* createProfile2D(CSTR nameAndTitle, DBINS(x), DBINS(y))
00907   { return bookProf(nameAndTitle, nameAndTitle, BINS(x), BINS(y));            }
00908 
00909   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),double upper, double lower)
00910   {  return bookProf( name, tit, BINS(x), BINS(y), upper, lower);             }
00911   P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),double upper, double lower,CSTR /*opt*/)
00912   {  return bookProf( name, tit, BINS(x), BINS(y), upper, lower);             }
00913   P2D* createProfile2D(CSTR name,CSTR title,const Edges& x,const Edges& y,double upper, double lower, CSTR /*opt*/)
00914   {  return bookProf(name, title, x, y, upper, lower);                        }
00915   P2D* createProfile2D(CSTR nameAndTitle, DBINS(x), DBINS(y),double upper, double lower)
00916   { return bookProf(nameAndTitle, nameAndTitle, BINS(x), BINS(y), upper, lower);}
00917 
00918   P2D* createCopy(CSTR full, const P2D& h)
00919   {  return createCopy(i_splitPath(full), h);                                 }
00920   P2D* createCopy(CSTR par, CSTR rel, const P2D& h)
00921   {  return createCopy(createPath(par), rel, h);                              }
00922   P2D* createCopy(STRPAIR loc, const P2D& h)
00923   {  return createCopy(loc.first, loc.second, h);                             }
00924   P2D* createCopy(DataObject* pPar, CSTR rel, const P2D& h)
00925   { return i_book(pPar, rel, h.title(), Gaudi::createProf2D(h));              }
00926   //------------------------------------------------------------------------------
00927   AIDA::ICloud1D* createCloud1D(CSTR, CSTR, int, CSTR)         NOT_IMPLEMENTED
00928   AIDA::ICloud1D* createCloud1D(CSTR)                          NOT_IMPLEMENTED
00929   AIDA::ICloud1D* createCopy(CSTR, const AIDA::ICloud1D&)      NOT_IMPLEMENTED
00930   AIDA::ICloud2D* createCloud2D(CSTR, CSTR, int, CSTR)         NOT_IMPLEMENTED
00931   AIDA::ICloud2D* createCloud2D(CSTR)                          NOT_IMPLEMENTED
00932   AIDA::ICloud2D* createCopy(CSTR, const AIDA::ICloud2D&)      NOT_IMPLEMENTED
00933   AIDA::ICloud3D* createCloud3D(CSTR, CSTR, int, CSTR)         NOT_IMPLEMENTED
00934   AIDA::ICloud3D* createCloud3D(CSTR)                          NOT_IMPLEMENTED
00935   AIDA::ICloud3D* createCopy(CSTR, const AIDA::ICloud3D&)      NOT_IMPLEMENTED
00936 
00938   using IDataProviderSvc::registerObject;
00939   using IDataProviderSvc::unregisterObject;
00940   using IDataProviderSvc::retrieveObject;
00941   using IDataProviderSvc::findObject;
00942 
00944   virtual std::ostream& print(Base* h, std::ostream& s = std::cout) const;
00945 
00947   virtual std::ostream& write(Base* h, std::ostream& s = std::cout) const;
00948 
00950   virtual int write(Base* h, const char* file_name ) const;
00951 
00953   virtual DataObject* createPath(CSTR newPath );
00954 
00959   virtual DataObject* createDirectory  (CSTR parentDir, CSTR subDir );
00960 
00961 public:
00962   // ==========================================================================
00964   void update1Ddefs ( Property& ) ;
00965   // ==========================================================================
00966   typedef std::map<std::string,Gaudi::Histo1DDef> Histo1DMap ;
00967   // ==========================================================================
00968 private:
00969   // ==========================================================================
00970   // container with the definition of "the special" histograms
00971   Histo1DMap                  m_defs1D ;
00972   // ==========================================================================
00973   // modified histograms:
00974   std::set<std::string>       m_mods1D ;
00975   // ==========================================================================
00976 };
00977 // ===========================================================================
00978 // The END
00979 // ===========================================================================
00980 #endif    // GAUDISVC_HISTOGRAMSVC_H
00981 // ===========================================================================
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Sep 17 2012 13:49:27 for Gaudi Framework, version v23r4 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004