00001
00002
00003 #ifndef GAUDISVC_HISTOGRAMSVC_H
00004 #define GAUDISVC_HISTOGRAMSVC_H 1
00005
00006
00007
00008
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
00018
00020 #include "AIDA_visibility_hack.h"
00021 #include "AIDA/IHistogramFactory.h"
00022 #include "AIDA/IAnnotation.h"
00023
00024
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
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
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, void (T1::*pmf)(const T2*)) {
00110 T1 *h1 = Gaudi::getRepresentation<R,T1>(*res);
00111 T1 *h2 = Gaudi::getRepresentation<R,T1>(b);
00112 if ( h1 && h2 ) {
00113 (h1->*pmf)(h2);
00114 return res;
00115 }
00116 return 0;
00117 }
00118 };
00119
00120
00122 DBaseEntries m_input;
00123
00124 public:
00129 HistogramSvc(CSTR name, ISvcLocator* svc );
00130
00132 virtual ~HistogramSvc();
00133
00139 std::pair<std::string,std::string> i_splitPath(CSTR full);
00140
00144 StatusCode connectInput(CSTR ident);
00145 std::string _STR(int i);
00146
00147 template <class T> inline
00148 T* i_book(DataObject* pPar,CSTR rel,CSTR title,const std::pair<DataObject*,T*>& o) {
00149 if (o.first && registerObject(pPar, rel, (Base*)o.second).isSuccess())
00150 return o.second;
00151 delete o.first;
00152 throw GaudiException("Cannot book "+System::typeinfoName(typeid(T))+" "+title,
00153 "HistogramSvc",StatusCode::FAILURE);
00154 }
00155 template <class T> static DataObject* __cast(T* p) {
00156 DataObject* q = dynamic_cast<DataObject*>(p);
00157 if ( 0 == q && 0 != p ) {
00158 throw std::runtime_error("HistogramSvc: Unexpected object type.");
00159 }
00160 return q;
00161 }
00163 H2D* i_project(CSTR nameAndTitle,const H3D& h, CSTR dir);
00164
00165 public:
00167 virtual StatusCode initialize ();
00169 virtual StatusCode reinitialize ();
00171 virtual StatusCode finalize ();
00172
00174 virtual AIDA::IHistogramFactory* histogramFactory() { return this; }
00175
00176
00177
00178
00196 virtual H1D* book(CSTR par, CSTR rel, CSTR title, DBINS(x))
00197 { return book(createPath(par), rel, title, BINS(x)); }
00198 virtual H1D* book(CSTR par, int hID, CSTR title, DBINS(x))
00199 { return book(par, _STR(hID), title, BINS(x)); }
00200 virtual H1D* book(DataObject* pPar, int hID, CSTR title, DBINS(x))
00201 { return book(pPar, _STR(hID), title, BINS(x)); }
00202 virtual H1D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x)) ;
00203 virtual H1D* book(STRPAIR loc,CSTR title, DBINS(x))
00204 { return book(loc.first, loc.second, title, BINS(x)); }
00205 virtual H1D* book(CSTR full, CSTR title, DBINS(x))
00206 { return book(i_splitPath(full), title, BINS(x)); }
00207
00208
00209
00227 virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x),CSTR opt)
00228 { return bookProf(createPath(par), rel, title, BINS(x),opt); }
00229 virtual P1D* bookProf(CSTR par, int hID, CSTR title, DBINS(x),CSTR opt )
00230 { return bookProf(par, _STR(hID), title, BINS(x),opt); }
00231 virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x),CSTR opt )
00232 { return bookProf(pPar, _STR(hID), title, BINS(x),opt); }
00233 virtual P1D* bookProf(STRPAIR loc,CSTR title, DBINS(x),CSTR opt)
00234 { return bookProf(loc.first, loc.second, title, BINS(x),opt); }
00235 virtual P1D* bookProf(CSTR full, CSTR title, DBINS(x),CSTR opt)
00236 { return bookProf(i_splitPath(full), title, BINS(x),opt); }
00237 virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x),CSTR opt)
00238 { return i_book(pPar,rel,title,Gaudi::createProf1D(title, BINS(x),0,0,opt)); }
00239
00240 virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), double upper, double lower,CSTR opt)
00241 { return bookProf(createPath(par), rel, title, BINS(x), upper, lower , opt); }
00242 virtual P1D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00243 { return bookProf(par, _STR(hID), title, BINS(x), upper, lower, opt ); }
00244 virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00245 { return bookProf(pPar, _STR(hID), title, BINS(x), upper, lower, opt); }
00246 virtual P1D* bookProf(STRPAIR loc,CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00247 { return bookProf(loc.first, loc.second, title, BINS(x), upper, lower,opt); }
00248 virtual P1D* bookProf(CSTR full, CSTR title, DBINS(x), double upper, double lower, CSTR opt )
00249 { return bookProf(i_splitPath(full), title, BINS(x), upper, lower , opt ); }
00250 virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), double upper, double lower, CSTR opt)
00251 { return i_book(pPar,rel,title,Gaudi::createProf1D(title, BINS(x), upper, lower, opt)); }
00252
00253
00254
00269 virtual H1D* book(CSTR par, int hID, CSTR title, Edges e)
00270 { return book(par, _STR(hID), title, e); }
00271 virtual H1D* book(DataObject* pPar, int hID, CSTR title, Edges e)
00272 { return book(pPar, _STR(hID), title, e); }
00273 virtual H1D* book(CSTR par, CSTR rel, CSTR title, Edges e )
00274 { return book(createPath(par), rel, title, e); }
00275 virtual H1D* book(STRPAIR loc,CSTR title, Edges e )
00276 { return book(loc.first, loc.second, title, e); }
00277 virtual H1D* book(CSTR full, CSTR title, Edges e )
00278 { return book(i_splitPath(full), title, e); }
00279 virtual H1D* book(DataObject* pPar, CSTR rel, CSTR title, Edges e )
00280 { return i_book(pPar, rel, title, Gaudi::createH1D(title, e)); }
00281
00282
00283
00284
00299 virtual P1D* bookProf(CSTR full, CSTR title, Edges e )
00300 { return bookProf(i_splitPath(full), title, e); }
00301 virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, Edges e )
00302 { return bookProf(createPath(par), rel, title, e); }
00303 virtual P1D* bookProf(CSTR par, int hID, CSTR title, Edges e )
00304 { return bookProf(par, _STR(hID), title, e); }
00305 virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, Edges e )
00306 { return bookProf(pPar, _STR(hID), title, e); }
00307 virtual P1D* bookProf(STRPAIR loc,CSTR title, Edges e)
00308 { return bookProf(loc.first, loc.second, title, e); }
00309 virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges e )
00310 { return i_book(pPar,rel,title,Gaudi::createProf1D(title, e, 0, 0)); }
00311
00312 virtual P1D* bookProf(CSTR full, CSTR title, Edges e, double upper, double lower)
00313 { return bookProf(i_splitPath(full), title, e, upper, lower); }
00314 virtual P1D* bookProf(CSTR par, CSTR rel, CSTR title, Edges e, double upper, double lower)
00315 { return bookProf(createPath(par), rel, title, e, upper, lower); }
00316 virtual P1D* bookProf(CSTR par, int hID, CSTR title, Edges e, double upper, double lower)
00317 { return bookProf(par, _STR(hID), title, e, upper, lower); }
00318 virtual P1D* bookProf(DataObject* pPar, int hID, CSTR title, Edges e, double upper, double lower)
00319 { return bookProf(pPar, _STR(hID), title, e, upper, lower); }
00320 virtual P1D* bookProf(STRPAIR loc,CSTR title, Edges e, double upper, double lower)
00321 { return bookProf(loc.first, loc.second, title, e, upper, lower); }
00322 virtual P1D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges e, double upper, double lower)
00323 { return i_book(pPar,rel,title,Gaudi::createProf1D(title, e, upper, lower));}
00324
00325
00326
00344 virtual H2D* book(CSTR full, CSTR title, DBINS(x), DBINS(y))
00345 { return book(i_splitPath(full), title, BINS(x),BINS(y)); }
00346 virtual H2D* book(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00347 { return book(createPath(par), rel, title, BINS(x),BINS(y)); }
00348 virtual H2D* book(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y))
00349 { return book(par,_STR(hID), title, BINS(x),BINS(y)); }
00350 virtual H2D* book(STRPAIR loc,CSTR title, DBINS(x), DBINS(y))
00351 { return book(loc.first, loc.second, title, BINS(x), BINS(y)); }
00352 virtual H2D* book(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y))
00353 { return book(pPar,_STR(hID), title, BINS(x),BINS(y)); }
00354 virtual H2D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00355 { return i_book(pPar,rel,title,Gaudi::createH2D(title, BINS(x),BINS(y)));}
00356
00357
00358
00376 virtual P2D* bookProf(CSTR full, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00377 { return bookProf(i_splitPath(full), title, BINS(x),BINS(y), upper, lower); }
00378 virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00379 { return bookProf(createPath(par), rel, title, BINS(x),BINS(y), upper, lower); }
00380 virtual P2D* bookProf(STRPAIR loc,CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00381 { return bookProf(loc.first, loc.second, title, BINS(x), BINS(y), upper, lower); }
00382 virtual P2D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00383 { return bookProf(par, _STR(hID), title, BINS(x),BINS(y), upper, lower); }
00384 virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00385 { return bookProf(pPar,_STR(hID), title, BINS(x),BINS(y), upper, lower); }
00386 virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y), double upper, double lower)
00387 { return i_book(pPar,rel,title,Gaudi::createProf2D(title, BINS(x),BINS(y), upper, lower)); }
00388
00389 virtual P2D* bookProf(CSTR full, CSTR title, DBINS(x), DBINS(y))
00390 { return bookProf(i_splitPath(full), title, BINS(x),BINS(y)); }
00391 virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00392 { return bookProf(createPath(par), rel, title, BINS(x),BINS(y)); }
00393 virtual P2D* bookProf(STRPAIR loc,CSTR title, DBINS(x), DBINS(y))
00394 { return bookProf(loc.first, loc.second, title, BINS(x), BINS(y)); }
00395 virtual P2D* bookProf(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y))
00396 { return bookProf(par, _STR(hID), title, BINS(x),BINS(y)); }
00397 virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y))
00398 { return bookProf(pPar,_STR(hID), title, BINS(x),BINS(y)); }
00399 virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y))
00400 { return i_book(pPar,rel,title,Gaudi::createProf2D(title, BINS(x),BINS(y),0,0));}
00401
00402
00403
00418 virtual H2D* book(CSTR full, CSTR title, Edges x, Edges y )
00419 { return book(i_splitPath(full), title, x, y); }
00420 virtual H2D* book(CSTR par, CSTR rel, CSTR title, Edges x, Edges y )
00421 { return book(createPath(par), rel, title, x, y); }
00422 virtual H2D* book(CSTR par, int hID, CSTR title, Edges x, Edges y )
00423 { return book(par, _STR(hID), title, x, y); }
00424 virtual H2D* book(STRPAIR loc,CSTR title, Edges x, Edges y )
00425 { return book(loc.first, loc.second, title, x, y); }
00426 virtual H2D* book(DataObject* pPar, int hID, CSTR title, Edges x, Edges y )
00427 { return book(pPar, _STR(hID), title, x, y); }
00428 virtual H2D* book(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y )
00429 { return i_book(pPar, rel, title, Gaudi::createH2D(title, x,y)); }
00430
00431
00432
00447 virtual P2D* bookProf(CSTR full, CSTR title, Edges x, Edges y )
00448 { return bookProf(i_splitPath(full), title, x, y); }
00449 virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, Edges x, Edges y )
00450 { return bookProf(createPath(par), rel, title, x, y); }
00451 virtual P2D* bookProf(CSTR par, int hID, CSTR title, Edges x, Edges y )
00452 { return bookProf(par, _STR(hID), title, x, y); }
00453 virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, Edges x, Edges y )
00454 { return bookProf(pPar, _STR(hID), title, x, y); }
00455 virtual P2D* bookProf(STRPAIR loc,CSTR title, Edges x, Edges y )
00456 { return bookProf(loc.first, loc.second, title, x, y); }
00457 virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y )
00458 { return i_book(pPar, rel, title, Gaudi::createProf2D(title,x,y,0,0)); }
00459
00460 virtual P2D* bookProf(CSTR full, CSTR title, Edges x, Edges y, double upper, double lower )
00461 { return bookProf(i_splitPath(full), title, x, y, upper, lower); }
00462 virtual P2D* bookProf(CSTR par, CSTR rel, CSTR title, Edges x, Edges y, double upper, double lower )
00463 { return bookProf(createPath(par), rel, title, x, y, upper, lower); }
00464 virtual P2D* bookProf(CSTR par, int hID, CSTR title, Edges x, Edges y, double upper, double lower )
00465 { return bookProf(par, _STR(hID), title, x, y, upper, lower); }
00466 virtual P2D* bookProf(DataObject* pPar, int hID, CSTR title, Edges x, Edges y, double upper, double lower )
00467 { return bookProf(pPar, _STR(hID), title, x, y, upper, lower); }
00468 virtual P2D* bookProf(STRPAIR loc,CSTR title, Edges x, Edges y, double upper, double lower )
00469 { return bookProf(loc.first, loc.second, title, x, y, upper, lower); }
00470 virtual P2D* bookProf(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y, double upper, double lower )
00471 { return i_book(pPar, rel, title, Gaudi::createProf2D(title,x,y, upper, lower)); }
00472
00473
00474
00492 virtual H3D* book(CSTR full, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00493 { return book(i_splitPath(full),title,BINS(x),BINS(y),BINS(z)); }
00494 virtual H3D* book(CSTR par, CSTR rel, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00495 { return book(createPath(par),rel,title,BINS(x),BINS(y),BINS(z)); }
00496 virtual H3D* book(CSTR par, int hID, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00497 { return book(par,_STR(hID),title,BINS(x),BINS(y),BINS(z)); }
00498 virtual H3D* book(DataObject* pPar, int hID, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00499 { return book(pPar,_STR(hID), title, BINS(x),BINS(y),BINS(z)); }
00500 virtual H3D* book(STRPAIR loc,CSTR title, DBINS(x), DBINS(y), DBINS(z))
00501 { return book(loc.first, loc.second, title, BINS(x),BINS(y),BINS(z)); }
00502 virtual H3D* book(DataObject* pPar, CSTR rel, CSTR title, DBINS(x), DBINS(y), DBINS(z))
00503 { return i_book(pPar, rel, title, Gaudi::createH3D(title,BINS(x),BINS(y),BINS(z)));}
00504
00505
00506
00523 virtual H3D* book(CSTR full, CSTR title, Edges x, Edges y, Edges z)
00524 { return book(i_splitPath(full), title, x, y, z); }
00525 virtual H3D* book(CSTR par, CSTR rel, CSTR title, Edges x, Edges y, Edges z)
00526 { return book(createPath(par), rel, title, x, y, z); }
00527 virtual H3D* book(CSTR par, int hID, CSTR title, Edges x, Edges y, Edges z)
00528 { return book(par,_STR(hID), title, x, y, z); }
00529 virtual H3D* book(DataObject* pPar, int hID, CSTR title, Edges x, Edges y, Edges z)
00530 { return book(pPar,_STR(hID), title, x, y, z); }
00531 virtual H3D* book(STRPAIR loc,CSTR title, Edges x, Edges y, Edges z)
00532 { return book(loc.first, loc.second, title, x,y,z); }
00533 virtual H3D* book(DataObject* pPar, CSTR rel, CSTR title, Edges x, Edges y, Edges z)
00534 { return i_book(pPar, rel, title, Gaudi::createH3D(title,x,y,z)); }
00535
00536
00537
00538
00539
00540
00541
00542 virtual StatusCode registerObject(CSTR parent, CSTR rel, Base* obj )
00543 { return registerObject(createPath(parent), rel, obj); }
00544 virtual StatusCode registerObject(CSTR parent, int item, Base* obj )
00545 { return registerObject(parent, _STR(item), obj); }
00546 virtual StatusCode registerObject(Base* pPar, CSTR rel, Base* obj )
00547 { return registerObject(__cast(pPar), rel, obj); }
00548 virtual StatusCode registerObject(DataObject* pPar, int item, Base* obj )
00549 { return registerObject(pPar, _STR(item), obj); }
00550 virtual StatusCode registerObject(Base* pPar, int item, Base* obj )
00551 { return registerObject(__cast(pPar), item, obj); }
00552 virtual StatusCode registerObject(CSTR full, Base* obj );
00553 virtual StatusCode registerObject(DataObject* pPar, CSTR rel, Base* obj );
00554
00555
00556
00557 virtual StatusCode unregisterObject(Base* obj )
00558 { return DataSvc::unregisterObject(__cast(obj)); }
00559 virtual StatusCode unregisterObject(Base* obj, CSTR objectPath)
00560 { return DataSvc::unregisterObject(__cast(obj),objectPath); }
00561 virtual StatusCode unregisterObject(Base* obj, int item )
00562 { return DataSvc::unregisterObject(__cast(obj),item); }
00563
00564
00565
00566 virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H1D*& obj)
00567 { return Helper(this).retrieve(pReg,path,obj); }
00568 virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, P1D*& obj)
00569 { return Helper(this).retrieve(pReg,path,obj); }
00570 virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H2D*& obj)
00571 { return Helper(this).retrieve(pReg,path,obj); }
00572 virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, P2D*& obj)
00573 { return Helper(this).retrieve(pReg,path,obj); }
00574 virtual StatusCode retrieveObject(IRegistry* pReg, CSTR path, H3D*& obj)
00575 { return Helper(this).retrieve(pReg,path,obj); }
00576
00577 virtual StatusCode retrieveObject(CSTR full,P1D*& obj)
00578 { return Helper(this).retrieve(full,obj); }
00579 virtual StatusCode retrieveObject(CSTR full,P2D*& obj)
00580 { return Helper(this).retrieve(full,obj); }
00581 virtual StatusCode retrieveObject(CSTR full,H1D*& obj)
00582 { return Helper(this).retrieve(full,obj); }
00583 virtual StatusCode retrieveObject(CSTR full,H2D*& obj)
00584 { return Helper(this).retrieve(full,obj); }
00585 virtual StatusCode retrieveObject(CSTR full,H3D*& obj)
00586 { return Helper(this).retrieve(full,obj); }
00587
00588 virtual StatusCode retrieveObject(CSTR parent,CSTR rel,P1D*& obj)
00589 { return Helper(this).retrieve(parent,rel,obj); }
00590 virtual StatusCode retrieveObject(CSTR parent,CSTR rel,P2D*& obj)
00591 { return Helper(this).retrieve(parent,rel,obj); }
00592 virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H1D*& obj)
00593 { return Helper(this).retrieve(parent,rel,obj); }
00594 virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H2D*& obj)
00595 { return Helper(this).retrieve(parent,rel,obj); }
00596 virtual StatusCode retrieveObject(CSTR parent,CSTR rel,H3D*& obj)
00597 { return Helper(this).retrieve(parent,rel,obj); }
00598
00599 virtual StatusCode retrieveObject(CSTR parent,int item,P1D*& obj)
00600 { return Helper(this).retrieve(parent,item,obj); }
00601 virtual StatusCode retrieveObject(CSTR parent,int item,P2D*& obj)
00602 { return Helper(this).retrieve(parent,item,obj); }
00603 virtual StatusCode retrieveObject(CSTR parent,int item,H1D*& obj)
00604 { return Helper(this).retrieve(parent,item,obj); }
00605 virtual StatusCode retrieveObject(CSTR parent,int item,H2D*& obj)
00606 { return Helper(this).retrieve(parent,item,obj); }
00607 virtual StatusCode retrieveObject(CSTR parent,int item,H3D*& obj)
00608 { return Helper(this).retrieve(parent,item,obj); }
00609
00610 virtual StatusCode retrieveObject(DataObject* par,CSTR item,P1D*& obj)
00611 { return Helper(this).retrieve(par,item,obj); }
00612 virtual StatusCode retrieveObject(DataObject* par,CSTR item,P2D*& obj)
00613 { return Helper(this).retrieve(par,item,obj); }
00614 virtual StatusCode retrieveObject(DataObject* par,CSTR item,H1D*& obj)
00615 { return Helper(this).retrieve(par,item,obj); }
00616 virtual StatusCode retrieveObject(DataObject* par,CSTR item,H2D*& obj)
00617 { return Helper(this).retrieve(par,item,obj); }
00618 virtual StatusCode retrieveObject(DataObject* par,CSTR item,H3D*& obj)
00619 { return Helper(this).retrieve(par,item,obj); }
00620
00621 virtual StatusCode retrieveObject(DataObject* par,int item,P1D*& obj)
00622 { return Helper(this).retrieve(par,item,obj); }
00623 virtual StatusCode retrieveObject(DataObject* par,int item,P2D*& obj)
00624 { return Helper(this).retrieve(par,item,obj); }
00625 virtual StatusCode retrieveObject(DataObject* par,int item,H1D*& obj)
00626 { return Helper(this).retrieve(par,item,obj); }
00627 virtual StatusCode retrieveObject(DataObject* par,int item,H2D*& obj)
00628 { return Helper(this).retrieve(par,item,obj); }
00629 virtual StatusCode retrieveObject(DataObject* par,int item,H3D*& obj)
00630 { return Helper(this).retrieve(par,item,obj); }
00631
00632 virtual StatusCode retrieveObject(Base* par,int item,P1D*& obj)
00633 { return Helper(this).retrieve(__cast(par),item,obj); }
00634 virtual StatusCode retrieveObject(Base* par,int item,P2D*& obj)
00635 { return Helper(this).retrieve(__cast(par),item,obj); }
00636 virtual StatusCode retrieveObject(Base* par,int item,H1D*& obj)
00637 { return Helper(this).retrieve(__cast(par),item,obj); }
00638 virtual StatusCode retrieveObject(Base* par,int item,H2D*& obj)
00639 { return Helper(this).retrieve(__cast(par),item,obj); }
00640 virtual StatusCode retrieveObject(Base* par,int item,H3D*& obj)
00641 { return Helper(this).retrieve(__cast(par),item,obj); }
00642
00643 virtual StatusCode retrieveObject(Base* par,CSTR item,P1D*& obj)
00644 { return Helper(this).retrieve(__cast(par),item,obj); }
00645 virtual StatusCode retrieveObject(Base* par,CSTR item,P2D*& obj)
00646 { return Helper(this).retrieve(__cast(par),item,obj); }
00647 virtual StatusCode retrieveObject(Base* par,CSTR item,H1D*& obj)
00648 { return Helper(this).retrieve(__cast(par),item,obj); }
00649 virtual StatusCode retrieveObject(Base* par,CSTR item,H2D*& obj)
00650 { return Helper(this).retrieve(__cast(par),item,obj); }
00651 virtual StatusCode retrieveObject(Base* par,CSTR item,H3D*& obj)
00652 { return Helper(this).retrieve(__cast(par),item,obj); }
00653
00654
00655
00656
00657
00658
00659
00660
00661 virtual StatusCode findObject(IRegistry* pReg,CSTR path,P1D*& obj)
00662 { return Helper(this).find(pReg,path,obj); }
00663 virtual StatusCode findObject(IRegistry* pReg,CSTR path,P2D*& obj)
00664 { return Helper(this).find(pReg,path,obj); }
00665 virtual StatusCode findObject(IRegistry* pReg,CSTR path,H1D*& obj)
00666 { return Helper(this).find(pReg,path,obj); }
00667 virtual StatusCode findObject(IRegistry* pReg,CSTR path,H2D*& obj)
00668 { return Helper(this).find(pReg,path,obj); }
00669 virtual StatusCode findObject(IRegistry* pReg,CSTR path,H3D*& obj)
00670 { return Helper(this).find(pReg,path,obj); }
00671
00672 virtual StatusCode findObject(CSTR full,P1D*& obj)
00673 { return Helper(this).find(full,obj); }
00674 virtual StatusCode findObject(CSTR full,P2D*& obj)
00675 { return Helper(this).find(full,obj); }
00676 virtual StatusCode findObject(CSTR full,H1D*& obj)
00677 { return Helper(this).find(full,obj); }
00678 virtual StatusCode findObject(CSTR full,H2D*& obj)
00679 { return Helper(this).find(full,obj); }
00680 virtual StatusCode findObject(CSTR full,H3D*& obj)
00681 { return Helper(this).find(full,obj); }
00682
00683 virtual StatusCode findObject(CSTR par,CSTR rel,P1D*& obj)
00684 { return Helper(this).find(par,rel,obj); }
00685 virtual StatusCode findObject(CSTR par,CSTR rel,P2D*& obj)
00686 { return Helper(this).find(par,rel,obj); }
00687 virtual StatusCode findObject(CSTR par,CSTR rel,H1D*& obj)
00688 { return Helper(this).find(par,rel,obj); }
00689 virtual StatusCode findObject(CSTR par,CSTR rel,H2D*& obj)
00690 { return Helper(this).find(par,rel,obj); }
00691 virtual StatusCode findObject(CSTR par,CSTR rel,H3D*& obj)
00692 { return Helper(this).find(par,rel,obj); }
00693
00694 virtual StatusCode findObject(CSTR par,int item,P1D*& obj)
00695 { return Helper(this).find(par,item,obj); }
00696 virtual StatusCode findObject(CSTR par,int item,P2D*& obj)
00697 { return Helper(this).find(par,item,obj); }
00698 virtual StatusCode findObject(CSTR par,int item,H1D*& obj)
00699 { return Helper(this).find(par,item,obj); }
00700 virtual StatusCode findObject(CSTR par,int item,H2D*& obj)
00701 { return Helper(this).find(par,item,obj); }
00702 virtual StatusCode findObject(CSTR par,int item,H3D*& obj)
00703 { return Helper(this).find(par,item,obj); }
00704
00705 virtual StatusCode findObject(DataObject* par,int item,P1D*& obj)
00706 { return Helper(this).find(par,item,obj); }
00707 virtual StatusCode findObject(DataObject* par,int item,P2D*& obj)
00708 { return Helper(this).find(par,item,obj); }
00709 virtual StatusCode findObject(DataObject* par,int item,H1D*& obj)
00710 { return Helper(this).find(par,item,obj); }
00711 virtual StatusCode findObject(DataObject* par,int item,H2D*& obj)
00712 { return Helper(this).find(par,item,obj); }
00713 virtual StatusCode findObject(DataObject* par,int item,H3D*& obj)
00714 { return Helper(this).find(par,item,obj); }
00715
00716 virtual StatusCode findObject(DataObject* par,CSTR item,P1D*& obj)
00717 { return Helper(this).find(par,item,obj); }
00718 virtual StatusCode findObject(DataObject* par,CSTR item,P2D*& obj)
00719 { return Helper(this).find(par,item,obj); }
00720 virtual StatusCode findObject(DataObject* par,CSTR item,H1D*& obj)
00721 { return Helper(this).find(par,item,obj); }
00722 virtual StatusCode findObject(DataObject* par,CSTR item,H2D*& obj)
00723 { return Helper(this).find(par,item,obj); }
00724 virtual StatusCode findObject(DataObject* par,CSTR item,H3D*& obj)
00725 { return Helper(this).find(par,item,obj); }
00726
00727 virtual StatusCode findObject(Base* par,int item,P1D*& obj)
00728 { return Helper(this).find(__cast(par),item,obj); }
00729 virtual StatusCode findObject(Base* par,int item,P2D*& obj)
00730 { return Helper(this).find(__cast(par),item,obj); }
00731 virtual StatusCode findObject(Base* par,int item,H1D*& obj)
00732 { return Helper(this).find(__cast(par),item,obj); }
00733 virtual StatusCode findObject(Base* par,int item,H2D*& obj)
00734 { return Helper(this).find(__cast(par),item,obj); }
00735 virtual StatusCode findObject(Base* par,int item,H3D*& obj)
00736 { return Helper(this).find(__cast(par),item,obj); }
00737
00738 virtual StatusCode findObject(Base* par,CSTR item,P1D*& obj)
00739 { return Helper(this).find(__cast(par),item,obj); }
00740 virtual StatusCode findObject(Base* par,CSTR item,P2D*& obj)
00741 { return Helper(this).find(__cast(par),item,obj); }
00742 virtual StatusCode findObject(Base* par,CSTR item,H1D*& obj)
00743 { return Helper(this).find(__cast(par),item,obj); }
00744 virtual StatusCode findObject(Base* par,CSTR item,H2D*& obj)
00745 { return Helper(this).find(__cast(par),item,obj); }
00746 virtual StatusCode findObject(Base* par,CSTR item,H3D*& obj)
00747 { return Helper(this).find(__cast(par),item,obj); }
00748
00749
00750
00751
00752 virtual H1D* projectionX(CSTR name,const H2D& h)
00753 { return sliceX( name, h, IAxis::UNDERFLOW_BIN, IAxis::OVERFLOW_BIN); }
00754 virtual H1D* projectionY(CSTR name,const H2D& h)
00755 { return sliceY( name, h, IAxis::UNDERFLOW_BIN, IAxis::OVERFLOW_BIN); }
00756 virtual H1D* sliceX(CSTR name,const H2D& h,int indexY)
00757 { return sliceX( name, h, indexY, indexY ); }
00758 virtual H1D* sliceY(CSTR name,const H2D& h,int indexX)
00759 { return sliceY( name, h, indexX, indexX ); }
00760 virtual H1D* sliceX(CSTR name,const H2D& h,int indexY1,int indexY2);
00761 virtual H1D* sliceY(CSTR name,const H2D& h,int indexX1,int indexX2);
00762
00763 bool destroy( IBaseHistogram* hist);
00764
00765 H1D* add(CSTR nameAndTitle, const H1D& a, const H1D& b)
00766 { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Add, 1.); }
00767 H1D* subtract(CSTR nameAndTitle, const H1D& a, const H1D& b)
00768 { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Add,-1.); }
00769 H1D* multiply(CSTR nameAndTitle, const H1D& a, const H1D& b)
00770 { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Multiply); }
00771 H1D* divide(CSTR nameAndTitle, const H1D& a, const H1D& b)
00772 { return Helper::act(createCopy(nameAndTitle,a),b,&TH1::Divide); }
00773
00774 H2D* add(CSTR nameAndTitle, const H2D& a, const H2D& b)
00775 { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Add, 1.); }
00776 H2D* subtract(CSTR nameAndTitle, const H2D& a, const H2D& b)
00777 { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Add,-1.); }
00778 H2D* multiply(CSTR nameAndTitle, const H2D& a, const H2D& b)
00779 { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Multiply); }
00780 H2D* divide(CSTR nameAndTitle, const H2D& a, const H2D& b)
00781 { return Helper::act(createCopy(nameAndTitle,a),b,&TH2D::Divide); }
00782
00783 H3D* add(CSTR nameAndTitle, const H3D& a, const H3D& b)
00784 { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Add, 1.); }
00785 H3D* subtract(CSTR nameAndTitle, const H3D& a, const H3D& b)
00786 { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Add,-1.); }
00787 H3D* multiply(CSTR nameAndTitle, const H3D& a, const H3D& b)
00788 { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Multiply); }
00789 H3D* divide(CSTR nameAndTitle, const H3D& a, const H3D& b)
00790 { return Helper::act(createCopy(nameAndTitle,a),b,&TH3D::Divide); }
00791
00792 H2D* projectionXY(CSTR nameAndTitle,const H3D& h)
00793 { return i_project(nameAndTitle,h,"xy"); }
00794 H2D* projectionXZ(CSTR nameAndTitle,const H3D& h)
00795 { return i_project(nameAndTitle,h,"xz"); }
00796 H2D* projectionYZ(CSTR nameAndTitle,const H3D& h)
00797 { return i_project(nameAndTitle,h,"yz"); }
00798 H2D* sliceXY(CSTR ,const H3D& ,int ,int ) NOT_IMPLEMENTED
00799 H2D* sliceXZ(CSTR ,const H3D& ,int ,int ) NOT_IMPLEMENTED
00800 H2D* sliceYZ(CSTR ,const H3D& ,int ,int ) NOT_IMPLEMENTED
00801
00802
00803 H1D* createHistogram1D(CSTR name,CSTR tit,DBINS(x))
00804 { return book( name, tit, BINS(x)); }
00805 H1D* createHistogram1D(CSTR name,CSTR tit,DBINS(x),CSTR )
00806 { return book( name, tit, BINS(x)); }
00807 H1D* createHistogram1D(CSTR name,CSTR title,const Edges& x,CSTR )
00808 { return book(name, title, x); }
00809 H1D* createHistogram1D(CSTR nameAndTitle, DBINS(x))
00810 { return book(nameAndTitle, nameAndTitle, BINS(x)); }
00811 H1D* createCopy(CSTR full, const H1D& h)
00812 { return createCopy(i_splitPath(full), h); }
00813 H1D* createCopy(CSTR par, CSTR rel, const H1D& h)
00814 { return createCopy(createPath(par), rel, h); }
00815 H1D* createCopy(STRPAIR loc, const H1D& h)
00816 { return createCopy(loc.first, loc.second, h); }
00817 H1D* createCopy(DataObject* pPar, CSTR rel, const H1D& h)
00818 { return i_book(pPar, rel, h.title(), Gaudi::createH1D(h)); }
00819
00820 H2D* createHistogram2D(CSTR name,CSTR tit,DBINS(x),DBINS(y))
00821 { return book( name, tit, BINS(x), BINS(y)); }
00822 H2D* createHistogram2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),CSTR )
00823 { return book( name, tit, BINS(x), BINS(y)); }
00824 H2D* createHistogram2D(CSTR name,CSTR title,const Edges& x,const Edges& y, CSTR )
00825 { return book(name, title, x, y); }
00826 H2D* createHistogram2D(CSTR nameAndTitle, DBINS(x), DBINS(y))
00827 { return book(nameAndTitle, nameAndTitle, BINS(x), BINS(y)); }
00828 H2D* createCopy(CSTR full, const H2D& h)
00829 { return createCopy(i_splitPath(full), h); }
00830 H2D* createCopy(CSTR par, CSTR rel, const H2D& h)
00831 { return createCopy(createPath(par), rel, h); }
00832 H2D* createCopy(STRPAIR loc, const H2D& h)
00833 { return createCopy(loc.first, loc.second, h); }
00834 H2D* createCopy(DataObject* pPar, CSTR rel, const H2D& h)
00835 { return i_book(pPar, rel, h.title(), Gaudi::createH2D(h)); }
00836
00837 H3D* createHistogram3D(CSTR name, CSTR tit, DBINS(x), DBINS(y), DBINS(z))
00838 { return book( name, tit, BINS(x), BINS(y), BINS(z)); }
00839 H3D* createHistogram3D(CSTR name, CSTR tit, DBINS(x), DBINS(y), DBINS(z), CSTR )
00840 { return book( name, tit, BINS(x), BINS(y), BINS(z)); }
00841 H3D* createHistogram3D(CSTR name, CSTR title,const Edges& x,const Edges& y,const Edges& z,CSTR )
00842 { return book(name, title, x, y, z); }
00843 H3D* createHistogram3D(CSTR nameAndTitle, DBINS(x), DBINS(y), DBINS(z))
00844 { return book(nameAndTitle, nameAndTitle, BINS(x), BINS(y), BINS(z)); }
00845 H3D* createCopy(CSTR full, const H3D& h)
00846 { return createCopy(i_splitPath(full), h); }
00847 H3D* createCopy(CSTR par, CSTR rel, const H3D& h)
00848 { return createCopy(createPath(par), rel, h); }
00849 H3D* createCopy(STRPAIR loc, const H3D& h)
00850 { return createCopy(loc.first, loc.second, h); }
00851 H3D* createCopy(DataObject* pPar, CSTR rel, const H3D& h)
00852 { return i_book(pPar, rel, h.title(), Gaudi::createH3D(h)); }
00853
00854
00855
00856 P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x),CSTR opt )
00857 { return bookProf( name, tit, BINS(x) , opt ); }
00858 P1D* createProfile1D(CSTR name,CSTR tit,DBINS(x),double upper, double lower , CSTR opt )
00859 { return bookProf( name, tit, BINS(x), upper, lower , opt ); }
00860 P1D* createProfile1D(CSTR name,CSTR title,const Edges& x,CSTR )
00861 { return bookProf(name, title, x ); }
00862 P1D* createProfile1D(CSTR name,CSTR title,const Edges& x,double upper, double lower, CSTR )
00863 { return bookProf(name, title, x, upper, lower ); }
00864
00865 P1D* createProfile1D(CSTR nametit,DBINS(x))
00866 { return bookProf( nametit, nametit, BINS(x) , "s"); }
00867 P1D* createProfile1D(CSTR nametit,DBINS(x),double upper, double lower )
00868 { return bookProf( nametit, nametit, BINS(x), upper, lower , "s"); }
00869
00870
00871 P1D* createCopy(CSTR full, const P1D& h)
00872 { return createCopy(i_splitPath(full), h); }
00873 P1D* createCopy(CSTR par, CSTR rel, const P1D& h)
00874 { return createCopy(createPath(par), rel, h); }
00875 P1D* createCopy(STRPAIR loc, const P1D& h)
00876 { return createCopy(loc.first, loc.second, h); }
00877 P1D* createCopy(DataObject* pPar, CSTR rel, const P1D& h)
00878 { return i_book(pPar, rel, h.title(), Gaudi::createProf1D(h)); }
00879
00880 P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y))
00881 { return bookProf( name, tit, BINS(x), BINS(y)); }
00882 P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),CSTR )
00883 { return bookProf( name, tit, BINS(x), BINS(y)); }
00884 P2D* createProfile2D(CSTR name,CSTR title,const Edges& x,const Edges& y, CSTR )
00885 { return bookProf(name, title, x, y); }
00886 P2D* createProfile2D(CSTR nameAndTitle, DBINS(x), DBINS(y))
00887 { return bookProf(nameAndTitle, nameAndTitle, BINS(x), BINS(y)); }
00888
00889 P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),double upper, double lower)
00890 { return bookProf( name, tit, BINS(x), BINS(y), upper, lower); }
00891 P2D* createProfile2D(CSTR name,CSTR tit,DBINS(x),DBINS(y),double upper, double lower,CSTR )
00892 { return bookProf( name, tit, BINS(x), BINS(y), upper, lower); }
00893 P2D* createProfile2D(CSTR name,CSTR title,const Edges& x,const Edges& y,double upper, double lower, CSTR )
00894 { return bookProf(name, title, x, y, upper, lower); }
00895 P2D* createProfile2D(CSTR nameAndTitle, DBINS(x), DBINS(y),double upper, double lower)
00896 { return bookProf(nameAndTitle, nameAndTitle, BINS(x), BINS(y), upper, lower);}
00897
00898 P2D* createCopy(CSTR full, const P2D& h)
00899 { return createCopy(i_splitPath(full), h); }
00900 P2D* createCopy(CSTR par, CSTR rel, const P2D& h)
00901 { return createCopy(createPath(par), rel, h); }
00902 P2D* createCopy(STRPAIR loc, const P2D& h)
00903 { return createCopy(loc.first, loc.second, h); }
00904 P2D* createCopy(DataObject* pPar, CSTR rel, const P2D& h)
00905 { return i_book(pPar, rel, h.title(), Gaudi::createProf2D(h)); }
00906
00907 AIDA::ICloud1D* createCloud1D(CSTR, CSTR, int, CSTR) NOT_IMPLEMENTED
00908 AIDA::ICloud1D* createCloud1D(CSTR) NOT_IMPLEMENTED
00909 AIDA::ICloud1D* createCopy(CSTR, const AIDA::ICloud1D&) NOT_IMPLEMENTED
00910 AIDA::ICloud2D* createCloud2D(CSTR, CSTR, int, CSTR) NOT_IMPLEMENTED
00911 AIDA::ICloud2D* createCloud2D(CSTR) NOT_IMPLEMENTED
00912 AIDA::ICloud2D* createCopy(CSTR, const AIDA::ICloud2D&) NOT_IMPLEMENTED
00913 AIDA::ICloud3D* createCloud3D(CSTR, CSTR, int, CSTR) NOT_IMPLEMENTED
00914 AIDA::ICloud3D* createCloud3D(CSTR) NOT_IMPLEMENTED
00915 AIDA::ICloud3D* createCopy(CSTR, const AIDA::ICloud3D&) NOT_IMPLEMENTED
00916
00918 using IDataProviderSvc::registerObject;
00919 using IDataProviderSvc::unregisterObject;
00920 using IDataProviderSvc::retrieveObject;
00921 using IDataProviderSvc::findObject;
00922
00924 virtual std::ostream& print(Base* h, std::ostream& s = std::cout) const;
00925
00927 virtual std::ostream& write(Base* h, std::ostream& s = std::cout) const;
00928
00930 virtual int write(Base* h, const char* file_name ) const;
00931
00933 virtual DataObject* createPath(CSTR newPath );
00934
00939 virtual DataObject* createDirectory (CSTR parentDir, CSTR subDir );
00940
00941 public:
00942
00944 void update1Ddefs ( Property& ) ;
00945
00946 typedef std::map<std::string,Gaudi::Histo1DDef> Histo1DMap ;
00947
00948 private:
00949
00950
00951 Histo1DMap m_defs1D ;
00952
00953
00954 std::set<std::string> m_mods1D ;
00955
00956 };
00957
00958
00959
00960 #endif // GAUDISVC_HISTOGRAMSVC_H
00961