#include "CalorimeterGeometry.h" #include "CellAddress.h" #include "CalorimeterConstants.h" #include #include bool CalorimeterGeometry::IsInside(double xyz[3], CellAddress& cellAddress) { using namespace std; // initialize with invalid address cellAddress = CellAddress(); if ( xyz[0] < CalConst::XYMin || xyz[0] > CalConst::XYMax ) return false; if ( xyz[1] < CalConst::XYMin || xyz[1] > CalConst::XYMax ) return false; if ( xyz[2] < CalConst::ZMin || xyz[2] > CalConst::ZMax ) return false; int ix = static_cast((xyz[0]-CalConst::XYMin)/(CalConst::XYMax-CalConst::XYMin)*static_cast(CalConst::NbCellsInXY))+1; int iy = static_cast((xyz[1]-CalConst::XYMin)/(CalConst::XYMax-CalConst::XYMin)*static_cast(CalConst::NbCellsInXY))+1; int layer = static_cast((xyz[2]-CalConst::ZMin)/(CalConst::ZMax-CalConst::ZMin)*static_cast(CalConst::NbLayers))+1; cellAddress = CellAddress(ix,iy,layer); return true; } double CalorimeterGeometry::xCentre( const CellAddress& add ) { return CalConst::XYMin + ( ( add.ix() - 1. ) + 0.5 ) * CalConst::XYSize ; } double CalorimeterGeometry::yCentre( const CellAddress& add ) { return CalConst::XYMin + ( ( add.iy() - 1. ) + 0.5 ) * CalConst::XYSize ; }