Main Page | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members | Related Pages

SFH2F.C

Go to the documentation of this file.
00001 
00026 #include "jbltools/sfh/SFH2F.h"
00027 
00028 #include "jbltools/sfh/FloatFunBase.h"
00029 #include "jbltools/sfh/BaseCutBase.h"
00030 #include "jbltools/sfh/FillIterator.h"
00031 
00032 #include <iostream>
00033 
00034 static const char *ident="@(#)$Id: SFH2F.C,v 1.13 2005/08/23 12:05:44 blist Exp $";
00035 
00036 SFH2F::SFH2F (const char* name, const char* title, 
00037               Int_t nbinsx, Axis_t xlow, Axis_t xup,
00038               Int_t nbinsy, Axis_t ylow, Axis_t yup, 
00039               const ROListPoR& hhl, 
00040               const FloatFunPoR& xfun_, 
00041               const FloatFunPoR& yfun_, 
00042               const BaseCutPoR& cut_, 
00043               const FloatFunPoR& wfun_, 
00044               const FillIteratorPoR& iter_) 
00045 : RegH2F (name, title, nbinsx, xlow, xup, nbinsy, ylow, yup, hhl), 
00046   xfun(xfun_.pff), yfun(yfun_.pff), cut(cut_.pbc), wfun(wfun_.pff), iter(iter_.pfi)
00047 {
00048   checkIterators(name);
00049 }
00050   
00051   
00052 SFH2F::SFH2F (const char* name, const char* title, 
00053               Int_t nbinsx, const Double_t* xbins,
00054               Int_t nbinsy, Axis_t ylow, Axis_t yup, 
00055               const ROListPoR& hhl, 
00056               const FloatFunPoR& xfun_, 
00057               const FloatFunPoR& yfun_, 
00058               const BaseCutPoR& cut_, 
00059               const FloatFunPoR& wfun_, 
00060               const FillIteratorPoR& iter_) 
00061 : RegH2F (name, title, nbinsx, xbins, nbinsy, ylow, yup, hhl), 
00062   xfun(xfun_.pff), yfun(yfun_.pff), cut(cut_.pbc), wfun(wfun_.pff), iter(iter_.pfi)
00063 {
00064   checkIterators(name);
00065 }
00066   
00067   
00068 SFH2F::SFH2F (const char* name, const char* title, 
00069               Int_t nbinsx, Axis_t xlow, Axis_t xup,
00070               Int_t nbinsy, const Double_t* ybins, 
00071               const ROListPoR& hhl, 
00072               const FloatFunPoR& xfun_, 
00073               const FloatFunPoR& yfun_, 
00074               const BaseCutPoR& cut_, 
00075               const FloatFunPoR& wfun_, 
00076               const FillIteratorPoR& iter_) 
00077 : RegH2F (name, title, nbinsx, xlow, xup, nbinsy, ybins, hhl), 
00078   xfun(xfun_.pff), yfun(yfun_.pff), cut(cut_.pbc), wfun(wfun_.pff), iter(iter_.pfi)
00079 {
00080   checkIterators(name);
00081 }
00082   
00083   
00084 SFH2F::SFH2F (const char* name, const char* title, 
00085               Int_t nbinsx, const Double_t* xbins,
00086               Int_t nbinsy, const Double_t* ybins, 
00087               const ROListPoR& hhl, 
00088               const FloatFunPoR& xfun_, 
00089               const FloatFunPoR& yfun_, 
00090               const BaseCutPoR& cut_, 
00091               const FloatFunPoR& wfun_, 
00092               const FillIteratorPoR& iter_) 
00093 : RegH2F (name, title, nbinsx, xbins, nbinsy, ybins, hhl), 
00094    xfun(xfun_.pff), yfun(yfun_.pff), cut(cut_.pbc), wfun(wfun_.pff), iter(iter_.pfi)
00095 {
00096   checkIterators(name);
00097 }
00098 
00099 SFH2F::SFH2F (const char* name, const char* title, 
00100               Int_t nbinsx, const Float_t* xbins,
00101               Int_t nbinsy, const Float_t* ybins, 
00102               const ROListPoR& hhl, 
00103               const FloatFunPoR& xfun_, 
00104               const FloatFunPoR& yfun_, 
00105               const BaseCutPoR& cut_, 
00106               const FloatFunPoR& wfun_, 
00107               const FillIteratorPoR& iter_) 
00108 : RegH2F (name, title, nbinsx, xbins, nbinsy, ybins, hhl), 
00109   xfun(xfun_.pff), yfun(yfun_.pff), cut(cut_.pbc), wfun(wfun_.pff), iter(iter_.pfi)
00110 {
00111   checkIterators(name);
00112 }
00113 
00114 SFH2F::SFH2F (const char* name, const char* title, 
00115               const Binning& xbinning,         
00116               const Binning& ybinning,         
00117               const ROListPoR& hhl, 
00118               const FloatFunPoR& xfun_, 
00119               const FloatFunPoR& yfun_, 
00120               const BaseCutPoR& cut_, 
00121               const FloatFunPoR& wfun_, 
00122               const FillIteratorPoR& iter_) 
00123 : RegH2F (name, title, xbinning, ybinning, hhl), 
00124   xfun(xfun_.pff), yfun(yfun_.pff), cut(cut_.pbc), wfun(wfun_.pff), iter(iter_.pfi) 
00125 {
00126   checkIterators(name);
00127 }
00128 
00129 
00130 SFH2F::~SFH2F() 
00131 {}
00132 
00133 void SFH2F::Fill() {
00134   if (!xfun) return;
00135   if (!iter || iter->reset()) {
00136     do {
00137       if (!cut || (*cut)()) {
00138         Float_FF w = wfun ? (*wfun)() : 1.;
00139         this->TH2F::Fill ((*xfun)(), (*yfun)(), w);
00140       } 
00141     } while (iter && iter->next());  
00142   }
00143 }
00144 
00145 template<class Fun1, class Fun2>
00146 void SFH2F::checkTwoIterators(const char *name, 
00147                               const char *fun1name, Fun1 *fun1, 
00148                               const char *fun2name, Fun2 *fun2) {
00149   if (fun1 && fun1->getIterator() && 
00150       fun2  && fun2->getIterator() &&
00151       fun1->getIterator() != fun2->getIterator()) {
00152     std::cerr << "SFH2F: Iterators of " << fun1name
00153               << " and " << fun2name
00154               << " are different for histogram "
00155               << name << "!" << std::endl;
00156   }
00157   assert (!fun1 || !fun1->getIterator() || !fun2  || !fun2->getIterator()  || fun1->getIterator() == fun2->getIterator());
00158 }                       
00159 template<class Fun>
00160 void SFH2F::checkOneIterator (const char *name, 
00161                               const char *funname, 
00162                                     Fun  *fun) {
00163   if (fun && fun->getIterator()) {
00164     if (iter) {
00165       if (fun->getIterator() != iter) {
00166         std::cerr << "SFH2F: Iterator '" 
00167                   << fun->getIterator()->getName() 
00168                   << "' of " << funname 
00169                   << " '" << fun->getName() << "'"
00170                   << " and iter '" << iter->getName() 
00171                   << "'are different for histogram "
00172                   << name << "!\n";
00173       }
00174     }
00175     else {
00176 #if(DEBUG>=2)      
00177       std::cerr << "SFH2F: Iterator '" 
00178                 << fun->getIterator()->getName() << "' of " 
00179                 << funname
00180                 << " '" << fun->getName() << "'"
00181                 << " used as iterator for histogram "
00182                 << name << ".\n";
00183 #endif
00184       iter = const_cast<FillIterator *>(fun->getIterator());
00185     }
00186   }
00187   assert (!fun || !fun->getIterator() || fun->getIterator() == iter);
00188 }                       
00189 
00190 void SFH2F::checkIterators(const char *name) {
00191   checkTwoIterators (name, "xfun", xfun, "yfun",    yfun);
00192   checkTwoIterators (name, "xfun", xfun, "cut",     cut);
00193   checkTwoIterators (name, "xfun", xfun, "wfun",    wfun);
00194   checkTwoIterators (name, "yfun", yfun, "cut",     cut);
00195   checkTwoIterators (name, "yfun", yfun, "wfun",    wfun);
00196   checkTwoIterators (name, "wfun", wfun, "cut",     cut);
00197 
00198   checkOneIterator (name, "xfun",    xfun);
00199   checkOneIterator (name, "yfun",    yfun);
00200   checkOneIterator (name, "wfun",    wfun);
00201   checkOneIterator (name, "cut",     cut);
00202 }
00203 
00204 

Generated on Thu Oct 26 12:52:59 2006 for SFH by doxygen 1.3.2