Commit 16645f0a authored by Simon Spannagel's avatar Simon Spannagel
Browse files

Detector: use 2D int vector for nPixels

parent 7ca1ac76
Pipeline #625417 passed with stages
in 22 minutes and 26 seconds
......@@ -123,13 +123,13 @@ void Detector::processMaskFile() {
while(inputMaskFile >> id >> col >> row) {
if(id == "c") {
LOG(TRACE) << "Masking column " << col;
int nRows = nPixelsY();
int nRows = nPixels().Y();
for(int r = 0; r < nRows; r++) {
maskChannel(col, r);
}
} else if(id == "r") {
LOG(TRACE) << "Masking row " << row;
int nColumns = nPixelsX();
int nColumns = nPixels().X();
for(int c = 0; c < nColumns; c++) {
maskChannel(c, row);
}
......
......@@ -120,8 +120,7 @@ namespace corryvreckan {
*/
XYVector resolution() const { return m_resolution; }
int nPixelsX() const { return m_nPixels.X(); }
int nPixelsY() const { return m_nPixels.Y(); }
ROOT::Math::DisplacementVector2D<ROOT::Math::Cartesian2D<int>> nPixels() const { return m_nPixels; }
double timingOffset() const { return m_timingOffset; }
/**
......
......@@ -31,22 +31,22 @@ void AnalysisCLICpix::initialise() {
// Cluster/pixel histograms
hHitPixels = new TH2F("hHitPixels",
"hHitPixels",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
hColumnHits = new TH1F("hColumnHits", "hColumnHits", m_detector->nPixelsX(), 0, m_detector->nPixelsX());
hRowHits = new TH1F("hRowHits", "hRowHits", m_detector->nPixelsY(), 0, m_detector->nPixelsY());
m_detector->nPixels().Y());
hColumnHits = new TH1F("hColumnHits", "hColumnHits", m_detector->nPixels().X(), 0, m_detector->nPixels().X());
hRowHits = new TH1F("hRowHits", "hRowHits", m_detector->nPixels().Y(), 0, m_detector->nPixels().Y());
hPixelToTMap = new TProfile2D("pixelToTMap",
"pixelToTMap",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
maxcounter - 1);
hClusterSizeAll = new TH1F("hClusterSizeAll", "hClusterSizeAll", 20, 0, 20);
......@@ -97,9 +97,9 @@ void AnalysisCLICpix::initialise() {
hAssociatedClustersVersusTriggerNo =
new TH1F("hAssociatedClustersVersusTriggerNo", "hAssociatedClustersVersusTriggerNo", 50, 0, 50);
hAssociatedClusterRow =
new TH1F("hAssociatedClusterRow", "hAssociatedClusterRow", m_detector->nPixelsY(), 0, m_detector->nPixelsY());
hAssociatedClusterColumn =
new TH1F("hAssociatedClusterColumn", "hAssociatedClusterColumn", m_detector->nPixelsX(), 0, m_detector->nPixelsX());
new TH1F("hAssociatedClusterRow", "hAssociatedClusterRow", m_detector->nPixels().Y(), 0, m_detector->nPixels().Y());
hAssociatedClusterColumn = new TH1F(
"hAssociatedClusterColumn", "hAssociatedClusterColumn", m_detector->nPixels().X(), 0, m_detector->nPixels().X());
hFrameEfficiency = new TH1F("hFrameEfficiency", "hFrameEfficiency", 6000, 0, 6000);
hFrameTracks = new TH1F("hFrameTracks", "hFrameTracks", 6000, 0, 6000);
hFrameTracksAssociated = new TH1F("hFrameTracksAssociated", "hFrameTracksAssociated", 6000, 0, 6000);
......@@ -148,46 +148,46 @@ void AnalysisCLICpix::initialise() {
new TH2F("hTrackInterceptsPixelAssociated", "hTrackInterceptsPixelAssociated", 50, 0, 50, 25, 0, 25);
hTrackInterceptsChip = new TH2F("hTrackInterceptsChip",
"hTrackInterceptsChip",
m_detector->nPixelsX() + 1,
m_detector->nPixels().X() + 1,
-0.5,
m_detector->nPixelsX() + 0.5,
m_detector->nPixelsY() + 1,
m_detector->nPixels().X() + 0.5,
m_detector->nPixels().Y() + 1,
-0.5,
m_detector->nPixelsY() + 0.5);
m_detector->nPixels().Y() + 0.5);
hTrackInterceptsChipAssociated = new TH2F("hTrackInterceptsChipAssociated",
"hTrackInterceptsChipAssociated",
m_detector->nPixelsX() + 1,
m_detector->nPixels().X() + 1,
-0.5,
m_detector->nPixelsX() + 0.5,
m_detector->nPixelsY() + 1,
m_detector->nPixels().X() + 0.5,
m_detector->nPixels().Y() + 1,
-0.5,
m_detector->nPixelsY() + 0.5);
m_detector->nPixels().Y() + 0.5);
hTrackInterceptsChipUnassociated = new TH2F("hTrackInterceptsChipUnassociated",
"hTrackInterceptsChipUnassociated",
m_detector->nPixelsX() + 1,
m_detector->nPixels().X() + 1,
-0.5,
m_detector->nPixelsX() + 0.5,
m_detector->nPixelsY() + 1,
m_detector->nPixels().X() + 0.5,
m_detector->nPixels().Y() + 1,
-0.5,
m_detector->nPixelsY() + 0.5);
m_detector->nPixels().Y() + 0.5);
hTrackInterceptsChipLost = new TH2F("hTrackInterceptsChipLost",
"hTrackInterceptsChipLost",
m_detector->nPixelsX() + 1,
m_detector->nPixels().X() + 1,
-0.5,
m_detector->nPixelsX() + 0.5,
m_detector->nPixelsY() + 1,
m_detector->nPixels().X() + 0.5,
m_detector->nPixels().Y() + 1,
-0.5,
m_detector->nPixelsY() + 0.5);
m_detector->nPixels().Y() + 0.5);
hPixelEfficiencyMap = new TH2F("hPixelEfficiencyMap", "hPixelEfficiencyMap", 50, 0, 50, 25, 0, 25);
hChipEfficiencyMap = new TH2F("hChipEfficiencyMap",
"hChipEfficiencyMap",
m_detector->nPixelsX() + 1,
m_detector->nPixels().X() + 1,
-0.5,
m_detector->nPixelsX() + 0.5,
m_detector->nPixelsY() + 1,
m_detector->nPixels().X() + 0.5,
m_detector->nPixels().Y() + 1,
-0.5,
m_detector->nPixelsY() + 0.5);
m_detector->nPixels().Y() + 0.5);
hGlobalEfficiencyMap = new TH2F("hGlobalEfficiencyMap", "hGlobalEfficiencyMap", 200, -2.0, 2.0, 300, -1., 2);
hInterceptClusterSize1 = new TH2F("hInterceptClusterSize1", "hInterceptClusterSize1", 25, 0, 25, 25, 0, 25);
......@@ -201,10 +201,10 @@ void AnalysisCLICpix::initialise() {
"hMapClusterSizeAssociated",
m_nBinsX,
0,
m_detector->nPixelsX(),
m_detector->nPixels().X(),
m_nBinsY,
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
for(int x = 0; x < m_nBinsX; x++) {
for(int y = 0; y < m_nBinsY; y++) {
......@@ -309,8 +309,8 @@ StatusCode AnalysisCLICpix::run(std::shared_ptr<Clipboard> clipboard) {
// Cut on the track intercept - this makes sure that it actually went
// through the chip
if(chipInterceptCol < 0.5 || chipInterceptRow < 0.5 || chipInterceptCol > (m_detector->nPixelsX() - 0.5) ||
chipInterceptRow > (m_detector->nPixelsY() - 0.5))
if(chipInterceptCol < 0.5 || chipInterceptRow < 0.5 || chipInterceptCol > (m_detector->nPixels().X() - 0.5) ||
chipInterceptRow > (m_detector->nPixels().Y() - 0.5))
continue;
// Check if the hit is near a masked pixel
......@@ -372,8 +372,8 @@ StatusCode AnalysisCLICpix::run(std::shared_ptr<Clipboard> clipboard) {
if((bestCluster)->size() == 1) {
hClusterTOTAssociated1pix->Fill((bestCluster)->tot());
hInterceptClusterSize1->Fill(pixelInterceptX, pixelInterceptY);
int id = static_cast<int>(floor(chipInterceptCol * m_nBinsX / m_detector->nPixelsX()) +
floor(chipInterceptRow * m_nBinsY / m_detector->nPixelsY()) * m_nBinsX);
int id = static_cast<int>(floor(chipInterceptCol * m_nBinsX / m_detector->nPixels().X()) +
floor(chipInterceptRow * m_nBinsY / m_detector->nPixels().Y()) * m_nBinsX);
hMapClusterTOTAssociated1pix[id]->Fill((bestCluster)->tot());
}
if((bestCluster)->size() == 2) {
......@@ -531,7 +531,7 @@ bool AnalysisCLICpix::checkProximity(Track* track, Tracks* tracks) {
void AnalysisCLICpix::fillClusterHistos(Clusters* clusters) {
// Pick up column to generate unique pixel id
int nCols = m_detector->nPixelsX();
int nCols = m_detector->nPixels().X();
Clusters::iterator itc;
// Check if this is a new clicpix frame (each frame may be in several events)
......
......@@ -18,60 +18,60 @@ void AnalysisDUT::initialise() {
hClusterMapAssoc = new TH2F("clusterMapAssoc",
"clusterMapAssoc",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
hClusterSizeMapAssoc = new TProfile2D("clusterSizeMapAssoc",
"clusterSizeMapAssoc",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
100);
hClusterToTMapAssoc = new TProfile2D("clusterSizeToTAssoc",
"clusterToTMapAssoc",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
1000);
// Per-pixel histograms
hHitMapAssoc = new TH2F("hitMapAssoc",
"hitMapAssoc",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
hHitMapROI = new TH2F("hitMapROI",
"hitMapROI",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
hPixelToTAssoc = new TH1F("pixelToTAssoc", "pixelToTAssoc", 32, 0, 31);
hPixelToTMapAssoc = new TProfile2D("pixelToTMapAssoc",
"pixelToTMapAssoc",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
255);
......@@ -150,12 +150,12 @@ void AnalysisDUT::initialise() {
1);
hChipEfficiencyMap = new TProfile2D("hChipEfficiencyMap",
"hChipEfficiencyMap",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
1);
hGlobalEfficiencyMap = new TProfile2D("hGlobalEfficiencyMap",
......
......@@ -43,12 +43,12 @@ void AnalysisEfficiency::initialise() {
title = m_detector->name() + " Chip efficiency map;x [px];y [px];efficiency";
hChipEfficiencyMap = new TProfile2D("chipEfficiencyMap",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
1);
title = m_detector->name() + " Global efficiency map;x [mm];y [mm];efficiency";
......
......@@ -194,8 +194,8 @@ void Clustering4D::calculateClusterCentre(Cluster* cluster) {
}
// Create object with local cluster position
PositionVector3D<Cartesian3D<double>> positionLocal(m_detector->pitch().X() * (column - m_detector->nPixelsX() / 2),
m_detector->pitch().Y() * (row - m_detector->nPixelsY() / 2),
PositionVector3D<Cartesian3D<double>> positionLocal(m_detector->pitch().X() * (column - m_detector->nPixels().X() / 2),
m_detector->pitch().Y() * (row - m_detector->nPixels().Y() / 2),
0);
// Calculate global cluster position
PositionVector3D<Cartesian3D<double>> positionGlobal = m_detector->localToGlobal(positionLocal);
......
......@@ -55,8 +55,8 @@ StatusCode ClusteringSpatial::run(std::shared_ptr<Clipboard> clipboard) {
bool addedPixel;
// Get the device dimensions
int nRows = m_detector->nPixelsY();
int nCols = m_detector->nPixelsX();
int nRows = m_detector->nPixels().Y();
int nCols = m_detector->nPixels().X();
// Pre-fill the hitmap with pixels
for(auto pixel : (*pixels)) {
......@@ -169,8 +169,8 @@ void ClusteringSpatial::calculateClusterCentre(Cluster* cluster) {
LOG(DEBUG) << "- cluster row, col: " << row << "," << column;
// Create object with local cluster position
PositionVector3D<Cartesian3D<double>> positionLocal(m_detector->pitch().X() * (column - m_detector->nPixelsX() / 2.),
m_detector->pitch().Y() * (row - m_detector->nPixelsY() / 2.),
PositionVector3D<Cartesian3D<double>> positionLocal(m_detector->pitch().X() * (column - m_detector->nPixels().X() / 2.),
m_detector->pitch().Y() * (row - m_detector->nPixels().Y() / 2.),
0);
// Calculate global cluster position
PositionVector3D<Cartesian3D<double>> positionGlobal = m_detector->localToGlobal(positionLocal);
......
......@@ -116,12 +116,12 @@ void EventLoaderATLASpix::initialise() {
// Make histograms for debugging
hHitMap = new TH2F("hitMap",
"hitMap",
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
// hPixelToT = new TH1F("pixelToT", "pixelToT", 100, 0, 100);
// std::string totTitle = "pixelToT;x ToT in " + string(m_clockCycle) + " ns units";
// hPixelToT = new TH1F("pixelToT", "pixelToT", 64, 0, ts2Range*m_clockCycle);
......@@ -133,7 +133,7 @@ void EventLoaderATLASpix::initialise() {
hPixelsOverTime = new TH1F("pixelsOverTime", "pixelsOverTime", 2e6, 0, 2e6);
// Read calibration:
m_calibrationFactors.resize(static_cast<size_t>(m_detector->nPixelsX() * m_detector->nPixelsY()), 1.0);
m_calibrationFactors.resize(static_cast<size_t>(m_detector->nPixels().X() * m_detector->nPixels().Y()), 1.0);
if(!m_calibrationFile.empty()) {
std::ifstream calibration(m_calibrationFile);
std::string line;
......
......@@ -107,32 +107,32 @@ void EventLoaderCLICpix2::initialise() {
std::string title = m_detector->name() + " Hit map;x [px];y [px];pixels";
hHitMap = new TH2F("hitMap",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
title = m_detector->name() + " Map of discarded hits;x [px];y [px];pixels";
hHitMapDiscarded = new TH2F("hitMapDiscarded",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
title = m_detector->name() + " TOT spectrum;TOT;pixels";
hPixelToT = new TH1F("pixelToT", title.c_str(), 32, 0, 31);
title = m_detector->name() + " TOT map;x [px];y [px];TOT";
hPixelToTMap = new TProfile2D("pixelToTMap",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
maxcounter - 1);
title = m_detector->name() + " TOA spectrum;TOA;pixels";
......@@ -148,14 +148,14 @@ void EventLoaderCLICpix2::initialise() {
title = m_detector->name() + " Map of masked pixels;x [px];y [px];mask code";
hMaskMap = new TH2F("maskMap",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
for(int column = 0; column < m_detector->nPixelsX(); column++) {
for(int row = 0; row < m_detector->nPixelsY(); row++) {
m_detector->nPixels().Y());
for(int column = 0; column < m_detector->nPixels().X(); column++) {
for(int row = 0; row < m_detector->nPixels().Y(); row++) {
if(m_detector->masked(column, row)) {
hMaskMap->Fill(column, row, 2);
}
......
......@@ -28,22 +28,22 @@ void MaskCreator::initialise() {
std::string title = m_detector->name() + " Mask Map;x [px];y [px];mask";
maskmap = new TH2F("maskmap",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
title = m_detector->name() + " Occupancy;x [px];y [px];entries";
m_occupancy = new TH2D("occupancy",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
title = m_detector->name() + " Occupancy distance;x [px];y [px]";
m_occupancyDist = new TH1D("occupancy_dist", title.c_str(), binsOccupancy, 0, 1);
......@@ -51,22 +51,22 @@ void MaskCreator::initialise() {
title = m_detector->name() + " Density;x [px]; y [px]";
m_density = new TH2D("density",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
title = m_detector->name() + " Local significance;x [px];y [px]";
m_significance = new TH2D("local_significance",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
title = m_detector->name() + " Local significance distance;x [px];y [px]";
m_significanceDist = new TH1D("local_significance_dist", title.c_str(), binsOccupancy, 0, 1);
......@@ -162,12 +162,12 @@ void MaskCreator::globalFrequencyFilter() {
meanHits += m_occupancy->GetBinContent(col, row);
}
}
meanHits /= (m_detector->nPixelsX() * m_detector->nPixelsY());
meanHits /= (m_detector->nPixels().X() * m_detector->nPixels().Y());
// Loop again and mask any pixels which are noisy
int masked = 0, new_masked = 0;
for(int col = 0; col < m_detector->nPixelsX(); col++) {
for(int row = 0; row < m_detector->nPixelsY(); row++) {
for(int col = 0; col < m_detector->nPixels().X(); col++) {
for(int row = 0; row < m_detector->nPixels().Y(); row++) {
if(m_detector->masked(col, row)) {
LOG(DEBUG) << "Found existing mask for pixel " << col << "," << row << ", keeping.";
maskmap->Fill(col, row);
......
......@@ -28,21 +28,21 @@ void Prealignment::initialise() {
title = m_detector->name() + ": 2D correlation X (local);x [px];x_{ref} [px];events";
correlationX2Dlocal = new TH2F("correlationX_2Dlocal",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
reference->nPixelsX(),
m_detector->nPixels().X(),
reference->nPixels().X(),
0,
reference->nPixelsX());
reference->nPixels().X());
title = m_detector->name() + ": 2D correlation Y (local);y [px];y_{ref} [px];events";
correlationY2Dlocal = new TH2F("correlationY_2Dlocal",
title.c_str(),
m_detector->nPixelsY(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY(),
reference->nPixelsY(),
m_detector->nPixels().Y(),
reference->nPixels().Y(),
0,
reference->nPixelsY());
reference->nPixels().Y());
title = m_detector->name() + ": 2D correlation X (global);x [mm];x_{ref} [mm];events";
correlationX2D = new TH2F("correlationX_2D", title.c_str(), 100, -10., 10., 100, -10., 10.);
title = m_detector->name() + ": 2D correlation Y (global);y [mm];y_{ref} [mm];events";
......
......@@ -22,12 +22,12 @@ void TestAlgorithm::initialise() {
std::string title = m_detector->name() + ": hitmap;x [px];y [px];events";
hitmap = new TH2F("hitmap",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
m_detector->nPixelsY(),
m_detector->nPixels().X(),
m_detector->nPixels().Y(),
0,
m_detector->nPixelsY());
m_detector->nPixels().Y());
if(makeCorrelations) {
// Correlation plots
......@@ -47,21 +47,21 @@ void TestAlgorithm::initialise() {
title = m_detector->name() + ": 2D correlation X (local);x [px];x_{ref} [px];events";
correlationX2Dlocal = new TH2F("correlationX_2Dlocal",
title.c_str(),
m_detector->nPixelsX(),
m_detector->nPixels().X(),
0,
m_detector->nPixelsX(),
reference->nPixelsX(),
m_detector->nPixels().X(),
reference->nPixels().X(),
0,
reference->nPixelsX());
reference->nPixels().X());
title = m_detector->name() + ": 2D correlation Y (local);y [px];y_{ref} [px];events";
correlationY2Dlocal = new TH2F("correlationY_2Dlocal",
title.c_str(),
m_detector->nPixelsY(),