From 2ef97dd360aad8447866856eaf5ec9fc61f9da65 Mon Sep 17 00:00:00 2001 From: Sebouh Paul Date: Thu, 31 Aug 2023 08:28:47 -0400 Subject: [PATCH] Update CartesianGridXY.cpp --- DDCore/src/segmentations/CartesianGridXY.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/DDCore/src/segmentations/CartesianGridXY.cpp b/DDCore/src/segmentations/CartesianGridXY.cpp index f6cd2087f..8e597fd45 100644 --- a/DDCore/src/segmentations/CartesianGridXY.cpp +++ b/DDCore/src/segmentations/CartesianGridXY.cpp @@ -22,6 +22,8 @@ CartesianGridXY::CartesianGridXY(const std::string& cellEncoding) : registerParameter("grid_size_y", "Cell size in Y", _gridSizeY, 1., SegmentationParameter::LengthUnit); registerParameter("offset_x", "Cell offset in X", _offsetX, 0., SegmentationParameter::LengthUnit, true); registerParameter("offset_y", "Cell offset in Y", _offsetY, 0., SegmentationParameter::LengthUnit, true); + registerParameter("stagger_x", "Option to stagger the layers in x (ie, add grid_size_x/2 to offset_x for odd layers)", _staggerX, 0); + registerParameter("stagger_y", "Option to stagger the layers in y (ie, add grid_size_y/2 to offset_y for odd layers)", _staggerY, 0); registerIdentifier("identifier_x", "Cell ID identifier for X", _xId, "x"); registerIdentifier("identifier_y", "Cell ID identifier for Y", _yId, "y"); } @@ -51,16 +53,17 @@ CartesianGridXY::~CartesianGridXY() { /// determine the position based on the cell ID Vector3D CartesianGridXY::position(const CellID& cID) const { Vector3D cellPosition; - cellPosition.X = binToPosition( _decoder->get(cID,_xId ), _gridSizeX, _offsetX); - cellPosition.Y = binToPosition( _decoder->get(cID,_yId ), _gridSizeY, _offsetY); + int layer= _decoder->get(cID,"layer"); + cellPosition.X = binToPosition( _decoder->get(cID,_xId ), _gridSizeX, _offsetX+_staggerX*_gridSizeX*(layer%2)/2.); + cellPosition.Y = binToPosition( _decoder->get(cID,_yId ), _gridSizeY, _offsetY+_staggerY*_gridSizeY*(layer%2)/2.); return cellPosition; } /// determine the cell ID based on the position CellID CartesianGridXY::cellID(const Vector3D& localPosition, const Vector3D& /* globalPosition */, const VolumeID& vID) const { CellID cID = vID ; - _decoder->set( cID,_xId, positionToBin(localPosition.X, _gridSizeX, _offsetX) ); - _decoder->set( cID,_yId, positionToBin(localPosition.Y, _gridSizeY, _offsetY) ); + _decoder->set( cID,_xId, positionToBin(localPosition.X, _gridSizeX, _offsetX+_staggerX*_gridSizeX*(layer%2)/2) ); + _decoder->set( cID,_yId, positionToBin(localPosition.Y, _gridSizeY, _offsetY+_staggerY*_gridSizeY*(layer%2)/2) ); return cID ; }