56 const string& inFileNameB =
"testLikelihood.root",
57 const string& outFileName =
"testLikelihoodDiff.root",
58 const string& inTreeName =
"testLikelihoodTree")
61 const string inFileNames[2] = {inFileNameA, inFileNameB};
62 TFile* inFiles[2] = {0, 0};
63 TTree* inTrees[2] = {0, 0};
66 map<string, double>* derivatives [2] = {0, 0};
67 for (
unsigned int i = 0;
i < 2; ++
i) {
68 inFiles[
i] = TFile::Open(inFileNames[
i].c_str(),
"READ");
69 if (!inFiles[
i] || inFiles[
i]->IsZombie()) {
70 cout <<
"cannot open file '" << inFileNames[
i] <<
"'. aborting." << endl;
73 inFiles[
i]->GetObject(inTreeName.c_str(), inTrees[
i]);
75 cout <<
"cannot find tree '" << inTreeName <<
"'. aborting." << endl;
79 inTrees[
i]->SetBranchAddress(
"logLikelihood", &logLikelihood[i]);
80 inTrees[
i]->SetBranchAddress(
"derivatives", &derivatives [i]);
81 inTrees[
i]->GetEntry(0);
83 if (derivatives[0]->size() != derivatives[1]->size()) {
84 cout <<
"derivative arrays have different size: "
85 << derivatives[0]->size() <<
" vs. " << derivatives[1]->size() <<
". aborting." << endl;
90 TFile* outFile = TFile::Open(outFileName.c_str(),
"RECREATE");
91 if (!outFile || outFile->IsZombie()) {
92 cout <<
"cannot open file '" << outFileName <<
"'. aborting." << endl;
97 TH1D* hLikelihoodDiffAbs =
new TH1D
98 (
"hLikelihoodDiffAbs",
"hLikelihoodDiffAbs;L_{CPU} - L_{GPU};Count", 10000, -1e-7, 1e-7);
99 TH1D* hLikelihoodDiffRel =
new TH1D
100 (
"hLikelihoodDiffRel",
"hLikelihoodDiffRel;1 - L_{GPU} / L_{CPU};Count", 10000, -1e-11, 1e-11);
101 TH1D* hDerivDiffTotAbs =
new TH1D
102 (
"hDerivDiffTotAbs",
"hDerivDiffTotAbs;#nabla_{CPU} - #nabla_{GPU};Count",
103 10000, -1e-10, 1e-10);
104 TH1D* hDerivDiffTotRel =
new TH1D
105 (
"hDerivDiffTotRel",
"hDerivDiffTotRel;1 - #nabla_{GPU} / #nabla_{CPU};Count",
106 10000, -1e-10, 1e-10);
107 map<string, TH1D*> hDerivDiffAbs;
108 map<string, TH1D*> hDerivDiffRel;
109 for (map<string, double>::const_iterator
i = derivatives[0]->begin();
110 i != derivatives[0]->end(); ++
i) {
112 suf <<
"_" <<
i->first;
113 hDerivDiffAbs[
i->first] =
114 new TH1D((
"hDerivDiffAbs" + suf.str()).c_str(),
115 (
"hDerivDiffAbs" + suf.str() +
";#nabla_{CPU} - #nabla_{GPU};Count").c_str(),
116 10000, -1e-11, 1e-11);
117 hDerivDiffRel[
i->first] =
118 new TH1D((
"hDerivDiffRel" + suf.str()).c_str(),
119 (
"hDerivDiffRel" + suf.str() +
";1 - #nabla_{GPU} / #nabla_{CPU};Count").c_str(),
120 10000, -1e-11, 1e-11);
125 long int nmbEntries = 100;
126 for (
long int entry = 0; entry < nmbEntries; ++entry) {
127 Long64_t treeEntries[2] = {inTrees[0]->LoadTree(entry), inTrees[1]->LoadTree(entry)};
128 inTrees[0]->GetEntry(treeEntries[0]);
129 inTrees[1]->GetEntry(treeEntries[1]);
131 hLikelihoodDiffAbs->Fill(logLikelihood[0] - logLikelihood[1]);
132 hLikelihoodDiffRel->Fill(1 - logLikelihood[1] / logLikelihood[0]);
134 for (map<string, double>::const_iterator
i = derivatives[0]->begin();
135 i != derivatives[0]->end(); ++
i) {
136 map<string, double>::const_iterator j = derivatives[1]->find(
i->first);
137 if (j == derivatives[1]->end()) {
138 cout <<
"cannot find derivative for '" <<
i->first <<
"' in second tree. skipping." << endl;
141 double diffAbs =
i->second - j->second;
142 double diffRel = 1 - j->second /
i->second;
143 hDerivDiffAbs[
i->first]->Fill(diffAbs);
144 hDerivDiffRel[
i->first]->Fill(diffRel);
145 hDerivDiffTotAbs->Fill(diffAbs);
146 hDerivDiffTotRel->Fill(diffRel);
152 string maxMeanParName;
154 string maxRmsParName;
155 for (map<string, TH1D*>::const_iterator
i = hDerivDiffRel.begin();
i != hDerivDiffRel.end(); ++
i) {
156 const double mean = abs((
double)
i->second->GetMean());
157 if (mean > maxMean) {
159 maxMeanParName =
i->first;
161 const double rms =
i->second->GetRMS();
164 maxRmsParName =
i->first;
167 cout <<
"max. mean of relative diff. = " << maxMean <<
" @ [" << maxMeanParName <<
"]" << endl;
168 cout <<
"max. RMS of relative diff. = " << maxRms <<
" @ [" << maxRmsParName <<
"]" << endl;