(i) added cross-check for Asymmetry view which makes sure that fbg-t0 is equal for forward and backward histo. (ii) extended the command block for the test-nonlocal.msr in order to have an example which shows the more 'advanced' features of minuit.

This commit is contained in:
2014-11-10 15:57:07 +01:00
parent 78fa497de6
commit 89ae45b769
3 changed files with 65 additions and 26 deletions

View File

@ -1216,20 +1216,33 @@ Bool_t PRunAsymmetry::PrepareViewData(PRawRunData* runData, UInt_t histoNo[2])
cerr << endl << ">> NO WARRANTY THAT THIS DOES MAKE ANY SENSE.";
cerr << endl;
} else {
// calculate the max(data range start[i]-t0[i])
Int_t diff = fRunInfo->GetDataRange(0)-static_cast<Int_t>(t0[0]);
if (abs(diff) < abs(fRunInfo->GetDataRange(2)-static_cast<Int_t>(t0[1])))
diff = fRunInfo->GetDataRange(0)-static_cast<Int_t>(t0[0]);
// check if the data ranges and t0's between forward/backward are compatible
Int_t fgb[2];
if (fRunInfo->GetDataRange(0)-t0[0] != fRunInfo->GetDataRange(2)-t0[1]) { // wrong fgb aligning
if (fabs(fRunInfo->GetDataRange(0)-t0[0]) > fabs(fRunInfo->GetDataRange(2)-t0[1])) {
fgb[0] = fRunInfo->GetDataRange(0);
fgb[1] = static_cast<Int_t>(t0[1]) + fRunInfo->GetDataRange(0)-t0[0];
cerr << endl << ">> PRunAsymmetry::PrepareViewData(): **WARNING** needed to shift backward fgb from ";
cerr << fRunInfo->GetDataRange(2) << " to " << fgb[1] << endl;
} else {
fgb[0] = static_cast<Int_t>(t0[0]) + fRunInfo->GetDataRange(2)-t0[1];
fgb[1] = fRunInfo->GetDataRange(2);
cerr << endl << ">> PRunAsymmetry::PrepareViewData(): **WARNING** needed to shift forward fgb from ";
cerr << fRunInfo->GetDataRange(0) << " to " << fgb[0] << endl;
}
} else { // fgb aligning is correct
fgb[0] = fRunInfo->GetDataRange(0);
fgb[1] = fRunInfo->GetDataRange(2);
}
// calculate start position for plotting
Int_t val = static_cast<Int_t>(t0[1])+diff-packing*((static_cast<Int_t>(t0[1])+diff)/packing);
Int_t val = fgb[0]-packing*(fgb[0]/packing);
do {
if (static_cast<Double_t>(val)+t0[1]-t0[0] < 0.0)
if (fgb[1] - fgb[0] < 0)
val += packing;
} while (static_cast<Double_t>(val) + t0[1] - t0[0] < 0.0);
} while (val + fgb[1] - fgb[0] < 0);
start[0] = val;
start[1] = val + static_cast<Int_t>(t0[1] - t0[0]);
start[1] = val + fgb[1] - fgb[0];
}
// make sure that there are equal number of rebinned bins in forward and backward
@ -1468,15 +1481,34 @@ Bool_t PRunAsymmetry::PrepareRRFViewData(PRawRunData* runData, UInt_t histoNo[2]
cerr << endl << ">> PRunAsymmetry::PrepareRRFViewData(): **WARNING** data range (backward) was not provided, will try data range start = " << start[1] << ".";
cerr << endl << ">> NO WARRANTY THAT THIS DOES MAKE ANY SENSE.";
cerr << endl;
} else {
Int_t val = fRunInfo->GetDataRange(0)-packing*(fRunInfo->GetDataRange(0)/packing);
} else { // data range has been provided
// check if the data ranges and t0's between forward/backward are compatible
Int_t fgb[2];
if (fRunInfo->GetDataRange(0)-t0[0] != fRunInfo->GetDataRange(2)-t0[1]) { // wrong fgb aligning
if (fabs(fRunInfo->GetDataRange(0)-t0[0]) > fabs(fRunInfo->GetDataRange(2)-t0[1])) {
fgb[0] = fRunInfo->GetDataRange(0);
fgb[1] = static_cast<Int_t>(t0[1]) + fRunInfo->GetDataRange(0)-t0[0];
cerr << endl << ">> PRunAsymmetry::PrepareRRFViewData(): **WARNING** needed to shift backward fgb from ";
cerr << fRunInfo->GetDataRange(2) << " to " << fgb[1] << endl;
} else {
fgb[0] = static_cast<Int_t>(t0[0]) + fRunInfo->GetDataRange(2)-t0[1];
fgb[1] = fRunInfo->GetDataRange(2);
cerr << endl << ">> PRunAsymmetry::PrepareRRFViewData(): **WARNING** needed to shift forward fgb from ";
cerr << fRunInfo->GetDataRange(0) << " to " << fgb[0] << endl;
}
} else { // fgb aligning is correct
fgb[0] = fRunInfo->GetDataRange(0);
fgb[1] = fRunInfo->GetDataRange(2);
}
Int_t val = fgb[0]-packing*(fgb[0]/packing);
do {
if (fRunInfo->GetDataRange(2) - fRunInfo->GetDataRange(0) < 0)
if (fgb[1] - fgb[0] < 0)
val += packing;
} while (val + fRunInfo->GetDataRange(2) - fRunInfo->GetDataRange(0) < 0);
} while (val + fgb[1] - fgb[0] < 0);
start[0] = val;
start[1] = val + fRunInfo->GetDataRange(2) - fRunInfo->GetDataRange(0);
start[1] = val + fgb[1] - fgb[0];
}
// make sure that there are equal number of rebinned bins in forward and backward