-
Notifications
You must be signed in to change notification settings - Fork 100
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into ddrec-const-detector
- Loading branch information
Showing
32 changed files
with
965 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
150 changes: 150 additions & 0 deletions
150
DDCore/include/DDSegmentation/CartesianGridXYStaggered.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
//========================================================================== | ||
// AIDA Detector description implementation | ||
//-------------------------------------------------------------------------- | ||
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) | ||
// All rights reserved. | ||
// | ||
// For the licensing terms see $DD4hepINSTALL/LICENSE. | ||
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. | ||
// | ||
//========================================================================== | ||
|
||
|
||
|
||
|
||
/* | ||
* CartesianGridXYStaggered.h | ||
* | ||
* Created on: September 15, 2023 | ||
* Author: Sebouh J. Paul, UCR | ||
*/ | ||
|
||
#ifndef DDSEGMENTATION_CARTESIANGRIDXYSTAGGERED_H | ||
#define DDSEGMENTATION_CARTESIANGRIDXYSTAGGERED_H | ||
|
||
#include "DDSegmentation/CartesianGrid.h" | ||
|
||
namespace dd4hep { | ||
namespace DDSegmentation { | ||
|
||
/// Segmentation base class describing cartesian grid segmentation in the X-Y plane | ||
class CartesianGridXYStaggered: public CartesianGrid { | ||
public: | ||
/// Default constructor passing the encoding string | ||
CartesianGridXYStaggered(const std::string& cellEncoding = ""); | ||
/// Default constructor used by derived classes passing an existing decoder | ||
CartesianGridXYStaggered(const BitFieldCoder* decoder); | ||
/// destructor | ||
virtual ~CartesianGridXYStaggered(); | ||
|
||
/// determine the position based on the cell ID | ||
virtual Vector3D position(const CellID& cellID) const; | ||
/// determine the cell ID based on the position | ||
virtual CellID cellID(const Vector3D& localPosition, const Vector3D& globalPosition, const VolumeID& volumeID) const; | ||
/// access the grid size in X | ||
double gridSizeX() const { | ||
return _gridSizeX; | ||
} | ||
/// access the grid size in Y | ||
double gridSizeY() const { | ||
return _gridSizeY; | ||
} | ||
/// access the coordinate offset in X | ||
double offsetX() const { | ||
return _offsetX; | ||
} | ||
/// access the coordinate offset in Y | ||
double offsetY() const { | ||
return _offsetY; | ||
} | ||
/// access the field name used for X | ||
const std::string& fieldNameX() const { | ||
return _xId; | ||
} | ||
/// access the field name used for Y | ||
const std::string& fieldNameY() const { | ||
return _yId; | ||
} | ||
/// access the staggering option in X | ||
int staggerX() const { | ||
return _staggerX; | ||
} | ||
/// access the staggering option in Y | ||
int staggerY() const { | ||
return _staggerY; | ||
} | ||
/// access the keyword used to determine which volumes to stagger | ||
const std::string& staggerKeyword() const { | ||
return _staggerKeyword; | ||
} | ||
/// set the grid size in X | ||
void setGridSizeX(double cellSize) { | ||
_gridSizeX = cellSize; | ||
} | ||
/// set the grid size in Y | ||
void setGridSizeY(double cellSize) { | ||
_gridSizeY = cellSize; | ||
} | ||
/// set the coordinate offset in X | ||
void setOffsetX(double offset) { | ||
_offsetX = offset; | ||
} | ||
/// set the coordinate offset in Y | ||
void setOffsetY(double offset) { | ||
_offsetY = offset; | ||
} | ||
/// set the field name used for X | ||
void setFieldNameX(const std::string& fieldName) { | ||
_xId = fieldName; | ||
} | ||
/// set the field name used for Y | ||
void setFieldNameY(const std::string& fieldName) { | ||
_yId = fieldName; | ||
} | ||
/// set the staggering option in X | ||
void setStaggerX(int staggerX) { | ||
_staggerX = staggerX; | ||
} | ||
/// set the staggering option in Y | ||
void setStaggerY(int staggerY) { | ||
_staggerY = staggerY; | ||
} | ||
/// set the keyword used to determine which volumes to stagger | ||
void setStaggerKeyword(const std::string& staggerKeyword) { | ||
_staggerKeyword = staggerKeyword; | ||
} | ||
/** \brief Returns a vector<double> of the cellDimensions of the given cell ID | ||
in natural order of dimensions, e.g., dx/dy/dz, or dr/r*dPhi | ||
Returns a vector of the cellDimensions of the given cell ID | ||
\param cellID is ignored as all cells have the same dimension | ||
\return std::vector<double> size 2: | ||
-# size in x | ||
-# size in y | ||
*/ | ||
virtual std::vector<double> cellDimensions(const CellID& cellID) const; | ||
|
||
protected: | ||
/// the grid size in X | ||
double _gridSizeX; | ||
/// the coordinate offset in X | ||
double _offsetX; | ||
/// staggering option in X. 0 = no staggering. 1 = stagger by _gridSizeX/2.0 in odd layers | ||
int _staggerX; | ||
/// the grid size in Y | ||
double _gridSizeY; | ||
/// the coordinate offset in Y | ||
double _offsetY; | ||
/// staggering option in Y. 0 = no staggering. 1 = stagger by _gridSizeY/2.0 in odd layers | ||
int _staggerY; | ||
/// the field name used for X | ||
std::string _xId; | ||
/// the field name used for Y | ||
std::string _yId; | ||
/// the keyword used to determine which volumes to stagger | ||
std::string _staggerKeyword; | ||
}; | ||
|
||
} /* namespace DDSegmentation */ | ||
} /* namespace dd4hep */ | ||
#endif // DDSEGMENTATION_CARTESIANGRIDXYSTAGGERED_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
//========================================================================== | ||
// AIDA Detector description implementation | ||
//-------------------------------------------------------------------------- | ||
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) | ||
// All rights reserved. | ||
// | ||
// For the licensing terms see $DD4hepINSTALL/LICENSE. | ||
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. | ||
// | ||
//========================================================================== | ||
|
||
/* | ||
* HexGrid.h | ||
* | ||
* Created on: August 9, 2023 | ||
* Author: Sebouh J. Paul, UC Riverside | ||
*/ | ||
|
||
#ifndef DDSEGMENTATION_HEXGRID_H | ||
#define DDSEGMENTATION_HEXGRID_H | ||
|
||
#include "DDSegmentation/Segmentation.h" | ||
|
||
namespace dd4hep { | ||
namespace DDSegmentation { | ||
|
||
/// Segmentation base class describing hexagonal grid segmentation, with or without staggering | ||
class HexGrid: public Segmentation { | ||
public: | ||
/// Destructor | ||
virtual ~HexGrid(); | ||
//protected: | ||
/// Default constructor used by derived classes passing the encoding string | ||
HexGrid(const std::string& cellEncoding = ""); | ||
/// Default constructor used by derived classes passing an existing decoder | ||
HexGrid(const BitFieldCoder* decoder); | ||
|
||
/// determine the position based on the cell ID | ||
virtual Vector3D position(const CellID& cellID) const; | ||
/// determine the cell ID based on the position | ||
virtual CellID cellID(const Vector3D& localPosition, const Vector3D& globalPosition, const VolumeID& volumeID) const; | ||
// access the stagger mode: 0=no stagger; 1=stagger cycling through 3 offsets | ||
int stagger() const { | ||
return _stagger; | ||
} | ||
|
||
/// access the grid size | ||
double sideLength() const { | ||
return _sideLength; | ||
} | ||
/// access the coordinate offset in X | ||
double offsetX() const { | ||
return _offsetX; | ||
} | ||
/// access the coordinate offset in Y | ||
double offsetY() const { | ||
return _offsetY; | ||
} | ||
/// access the field name used for X | ||
const std::string& fieldNameX() const { | ||
return _xId; | ||
} | ||
/// access the field name used for Y | ||
const std::string& fieldNameY() const { | ||
return _yId; | ||
} | ||
/// access the keyword for staggering | ||
const std::string& staggerKeyword() const { | ||
return _staggerKeyword; | ||
} | ||
|
||
/// set the stagger mode: 0=no stagger; 1=stagger cycling through 3 offsets | ||
void setStagger(int stagger) { | ||
_stagger= stagger; | ||
} | ||
/// set the grid size in X | ||
void setSideLength(double cellSize) { | ||
_sideLength = cellSize; | ||
} | ||
/// set the coordinate offset in X | ||
void setOffsetX(double offset) { | ||
_offsetX = offset; | ||
} | ||
/// set the coordinate offset in Y | ||
void setOffsetY(double offset) { | ||
_offsetY = offset; | ||
} | ||
/// set the field name used for X | ||
void setFieldNameX(const std::string& fieldName) { | ||
_xId = fieldName; | ||
} | ||
/// set the field name used for Y | ||
void setFieldNameY(const std::string& fieldName) { | ||
_yId = fieldName; | ||
} | ||
/// set the keyword used to determine which volumes to stagger | ||
void setStaggerKeyword(const std::string& staggerKeyword) { | ||
_staggerKeyword = staggerKeyword; | ||
} | ||
/** \brief Returns a vector<double> of the cellDimensions of the given cell ID | ||
in natural order of dimensions, e.g., dx/dy/dz, or dr/r*dPhi | ||
Returns a vector of the cellDimensions of the given cell ID | ||
\param cellID is ignored as all cells have the same dimension | ||
\return std::vector<double> size 2: | ||
-# size in x | ||
-# size in y | ||
*/ | ||
virtual std::vector<double> cellDimensions(const CellID& cellID) const; | ||
|
||
protected: | ||
/// the stagger mode: 0=off ; 1=cycle through 3 different offsets (H3) | ||
// 2=cycle through 4 differnt offsets (H4) | ||
int _stagger; | ||
/// the length of one side of a hexagon | ||
double _sideLength; | ||
/// the coordinate offset in X | ||
double _offsetX; | ||
/// the coordinate offset in Y | ||
double _offsetY; | ||
/// the field name used for X | ||
std::string _xId; | ||
/// the field name used for Y | ||
std::string _yId; | ||
/// the keyword used to determine which volumes to stagger | ||
std::string _staggerKeyword; | ||
}; | ||
|
||
} /* namespace DDSegmentation */ | ||
} /* namespace dd4hep */ | ||
#endif // DDSEGMENTATION_HEXGRID_H |
Oops, something went wrong.