11 #include "../TFitBin.h"
20 const double threshold,
21 map<string, double>& maxDeviations)
24 cout <<
"bins have different mass: " << binA.
mass() <<
" vs. " << binB.
mass() << endl;
29 cout <<
"bins have different number of events: " << binA.
rawEvents() <<
" vs. " << binB.
rawEvents() << endl;
34 cout <<
"bins have different number of waves: " << binA.
nwaves() <<
" vs. " << binB.
nwaves() << endl;
37 const int nmbWaves = binA.
nwaves();
38 bool binsAreEqual =
true;
39 for (
int i = 0;
i < nmbWaves; ++
i)
47 const double likelihoodDiff = binA.
logli() - binB.
logli();
48 if (likelihoodDiff > threshold) {
49 cout <<
"likelihood difference " << likelihoodDiff <<
" is above threshold." << endl;
55 cout <<
"bins have different number of amplitudes: " << binA.
namps() <<
" vs. " << binB.
namps() << endl;
75 maxDeviations[
"intensity"] = 0;
76 for (
int i = 0;
i < nmbWaves; ++
i) {
78 if (diff > maxDeviations[
"intensity"])
79 maxDeviations[
"intensity"] = diff;
84 cout <<
"intensity difference " << setw(2) <<
i <<
" is above threshold: " << binA.
intens(
i) <<
" - " << binB.
intens(
i) <<
" = " << diff << endl;
89 maxDeviations[
"intensity error"] = 0;
90 for (
int i = 0;
i < nmbWaves; ++
i) {
92 if (diff > maxDeviations[
"intensity error"])
93 maxDeviations[
"intensity error"] = diff;
94 if (diff > threshold) {
95 cout <<
"difference of intensity error " << setw(2) <<
i <<
" is above threshold: " << binA.
err(
i) <<
" - " << binB.
err(binA.
wavetitle(
i)) <<
" = " << diff << endl;
109 const string& fileNameB =
"result.root",
110 const double threshold = 0.5)
112 const string fileNames[2] = {fileNameA,
114 const string treeName =
"pwa";
115 const string branchName =
"fitbin";
117 cout <<
"comparing TFitBin trees in " << fileNames[0] <<
" and " << fileNames[1] <<
"." << endl;
121 for (
unsigned int i = 0;
i < 2; ++
i) {
122 f[
i] = TFile::Open(fileNames[
i].c_str(),
"READ");
123 if (!f[
i] || f[
i]->IsZombie()) {
124 cerr <<
"cannot open file '" << fileNames[
i] <<
"'." << endl;
132 for (
unsigned int i = 0;
i < 2; ++
i) {
133 f[
i]->GetObject(treeName.c_str(), t[
i]);
135 cerr <<
"cannot find tree '"<< treeName <<
"' in file '" << fileNames[
i] <<
"'." << endl;
139 t[
i]->SetBranchAddress(branchName.c_str(), &b[
i]);
144 map<string, double> maxDeviations;
145 bool treesEqual =
true;
146 const unsigned int nmbEntries[2] = {t[0]->GetEntries(),
148 if (nmbEntries[0] != nmbEntries[1])
149 cerr <<
"warning: trees have not the same number of entries: " << nmbEntries[0] <<
" != " << nmbEntries[1] <<
". comparing up to smaller index." << endl;
150 const unsigned int maxNmbEntries = min(nmbEntries[0], nmbEntries[1]);
151 for (
unsigned int i = 0;
i < maxNmbEntries; ++
i) {
154 map<string, double> deviations;
155 if (!
binsEqual(*b[0], *b[1], threshold, deviations))
157 for (map<string, double>::const_iterator
i = deviations.begin();
i != deviations.end(); ++
i)
158 if ((maxDeviations.find(
i->first) == maxDeviations.end()) || (
i->second > maxDeviations[
i->first]))
159 maxDeviations[
i->first] =
i->second;
162 cout <<
"maximum deviations:" << endl;
163 for (map<string, double>::const_iterator
i = maxDeviations.begin();
i != maxDeviations.end(); ++
i)
164 cout <<
" " <<
i->first <<
" = " <<
i->second <<
"; threshold = " << threshold << endl;
167 for (
unsigned int i = 0;
i < 2; ++
i)