165 unsigned int nBins,
double xMin,
double xMax)
const
167 TH2D*
h =
new TH2D(Form(
"%s_%d", xip ?
"xip" :
"xi", sample),
"", nBins, xMin, xMax, nBins, xMin, xMax);
170 if (!data1)
continue;
172 if (!data2) {
delete data1;
continue; }
174 unsigned int sample1 = sample + data1->xip().GetLwb();
175 unsigned int sample2 = sample + data2->
xip().GetLwb();
176 if (data1->isInRange(sample1) && data2->
isInRange(sample2))
177 h->Fill(xip ? data1->xip()(sample1) : data1->xi()(sample1),
178 xip ? data2->
xip()(sample2) : data2->
xi()(sample2));
219 auto output = std::make_unique<TreeShapeErrorGetter>(outputFile,
true);
221 for (
unsigned int g = 0; g < 3; g++) {
222 bool gotResult =
false;
226 cout <<
"TreeShapeErrorGetter::merge : input getters have non-zero overlap for cell " << i <<
" -- not supported, exiting." << endl;
230 cout <<
"Adding " << i <<
" " << g <<
" " << getter->cellCalc()->size() << endl;
239 for (
unsigned int g = 0; g < 3; g++) {
240 bool gotResult =
false;
244 cout <<
"TreeShapeErrorGetter::merge : input getters have non-zero overlap for ring " << i <<
" -- not supported, exiting." << endl;
248 cout <<
"Adding ring " << i <<
" " << g << endl;
261 std::unique_ptr<TFile> f(TFile::Open(fileName,
"RECREATE"));
262 auto tree = std::make_unique<TTree>(
"tree",
"");
264 int hash, gain, lwb1, lwb2, nSamples;
265 double xi1[99], xi2[99], xip1[99], xip2[99];
267 int layer, ft, slot, channel;
270 tree->Branch(
"hash", &hash);
273 tree->Branch(
"calo", &calo);
274 tree->Branch(
"layer", &layer);
275 tree->Branch(
"ft", &ft);
276 tree->Branch(
"slot", &slot);
277 tree->Branch(
"channel", &channel);
281 tree->Branch(
"gain", &gain);
282 tree->Branch(
"lwb1", &lwb1);
283 tree->Branch(
"lwb2", &lwb2);
284 tree->Branch(
"nSamples", &nSamples);
285 tree->Branch(
"xi1", xi1,
"xi1[nSamples]/D");
286 tree->Branch(
"xi2", xi2,
"xi2[nSamples]/D");
287 tree->Branch(
"xip1", xip1,
"xip1[nSamples]/D");
288 tree->Branch(
"xip2", xip2,
"xip2[nSamples]/D");
291 if (k % 10000 == 0) cout <<
"Processing entry " << k << endl;
295 calo = (cellInfo ? cellInfo->
calo() : -999 );
296 layer = (cellInfo ? cellInfo->
layer() : -999 );
298 slot = (cellInfo ? cellInfo->
slot() : -999 );
299 channel = (cellInfo ? cellInfo->
channel() : -999 );
300 eta = (cellInfo ? cellInfo->
eta() : -999 );
301 phi = (cellInfo ? cellInfo->
phi() : -999 );
303 for (
unsigned int g = 0; g < 3; g++) {
306 std::unique_ptr<ShapeErrorData> data2(other.shapeErrorData(k, (
CaloGain::CaloGain)g));
308 lwb1 = (data1 ? data1->lwb() : -1);
309 lwb2 = (data2 ? data2->lwb() : -1);
310 nSamples = (data1 ? data1->nSamples() : data2 ? data2->nSamples() : 0);
311 int lwb = (lwb1 >= 0 ? lwb1 : lwb2);
312 if (lwb<0)
throw std::runtime_error(
"TreeShapeErrorGetter::compare() attempt to access arrays with negative index");
313 for (
int j = lwb; j < lwb + nSamples; j++) {
314 xi1[j] = (data1 ? data1->xi()(j) : -999);
315 xip1[j] = (data1 ? data1->xip()(j) : -999);
316 xi2[j] = (data2 && data2->isInRange(j) ? data2->xi()(j) : -999);
317 xip2[j] = (data2 && data2->isInRange(j) ? data2->xip()(j) : -999);
TH2D * correlate(const TreeShapeErrorGetter &other, CaloGain::CaloGain gain, unsigned short sample, bool xip, unsigned int nBins, double xMin, double xMax) const