54      const TH2* h1 = 
dynamic_cast<const TH2*
>(o1);
 
   55      const TH2* h2 = 
dynamic_cast<const TH2*
>(o2);
 
   57      if (h1 == NULL || h2 == NULL) {
 
   61      const int n1x = h1->GetNbinsX();
 
   62      const int n2x = h2->GetNbinsX();
 
   63      const int n1y = h1->GetNbinsY();
 
   64      const int n2y = h2->GetNbinsY();
 
   66      if(n1x != n2x || n1y != n2y)
 
   67        THROW(
JValueOutOfRange, 
"JTestKolmogorov_2D::test(): Histograms with different bining. The objects: " <<
 
   68              h1->GetName() << 
" and " << h2->GetName() << 
" can not be compared." << endl);
 
   70      if(h1->Integral() == 0 || h2->Integral() == 0) {
 
   72              h1->GetName() << 
" and " << h2->GetName() << 
" can not be compared." << endl);
 
   75      const double s1 = 1./h1->Integral();
 
   76      const double s2 = 1./h2->Integral();
 
   78      TH2* h3 = (TH2*) h1->Clone(h1->GetName() == h2->GetName() ?
 
   82      double ew1, ew2, w1 = 0, w2 = 0;
 
   84      for (
int i = 1; i <= n1x; ++i) {
 
   85        for (
int j = 1; j <= n1y; ++j) {
 
   86          ew1 = h1->GetBinError(i,j);
 
   87          ew2 = h2->GetBinError(i,j);
 
   96      double esum1 = 0, esum2 = 0;
 
  110      if (afunc2 && afunc1) {
 
  114      double c1 = 0, c2 = 0;
 
  118      for (
int i=1 ; i<=n1x ; ++i){
 
  119        for (
int j=1 ; j<=n1y ; ++j){
 
  121          c1 += s1*h1->GetBinContent(i,j);
 
  122          c2 += s2*h2->GetBinContent(i,j);
 
  124          double d = TMath::Abs(
c1-c2)*TMath::Sqrt(esum1*esum2/(esum1+esum2));
 
  126          dmax1 = TMath::Max(dmax1,TMath::Abs(
c1-c2));
 
  136      for (
int j=1 ; j<=n1y ; ++j){
 
  137        for (
int i=1 ; i<=n1x ; ++i){
 
  139          c1 += s1*h1->GetBinContent(i,j);
 
  140          c2 += s2*h2->GetBinContent(i,j);
 
  142          double d = TMath::Abs(
c1-c2)*TMath::Sqrt(esum1*esum2/(esum1+esum2));
 
  144          dmax2 = TMath::Max(dmax2,TMath::Abs(
c1-c2));
 
  150      double dmax = 0.5*(dmax1+dmax2);
 
  155        z = dmax*TMath::Sqrt(esum2);
 
  157        z = dmax*TMath::Sqrt(esum1);
 
  159        z = dmax*TMath::Sqrt(esum1*esum2/(esum1+esum2));
 
  162      const double pValue = TMath::KolmogorovProb(z);
 
  164      for (
int i=1 ; i<=n1x ; ++i) {
 
  165        for (
int j=1 ; j<=n1y ; ++j) {
 
  166          h3->SetBinContent(i,j,TMath::KolmogorovProb(0.5 * h3->GetBinContent(i,j)));
 
  170      const bool passed = (pValue > 
threshold);
 
  174      h3->SetTitle(title.
getTitle().c_str());