#include "Hit.h" #include "Transformation.h" #include pool_tutorial::Hit::Hit(): m_x( 0 ), m_y( 0 ), m_z( 0 ), m_value( 0 ), m_upToDate( false ), m_transformation( 0 ), m_digit() {} pool_tutorial::Hit::Hit( const pool_tutorial::Hit& rhs ): m_x( rhs.m_x ), m_y( rhs.m_y ), m_z( rhs.m_z ), m_value( rhs.m_value ), m_upToDate( rhs.m_upToDate ), m_transformation( rhs.m_transformation ), m_digit( rhs.m_digit ) {} pool_tutorial::Hit::~Hit() {} pool_tutorial::Hit& pool_tutorial::Hit::operator=( const pool_tutorial::Hit& rhs ) { m_x = rhs.m_x; m_y = rhs.m_y; m_z = rhs.m_z; m_value = rhs.m_value; m_upToDate = rhs.m_upToDate; m_transformation = rhs.m_transformation; m_digit = rhs.m_digit; return *this; } double pool_tutorial::Hit::x() const { if ( ! m_upToDate ) { const_cast< pool_tutorial::Hit* >( this )->updateValues(); } return m_x; } double pool_tutorial::Hit::y() const { if ( ! m_upToDate ) { const_cast< pool_tutorial::Hit* >( this )->updateValues(); } return m_y; } double pool_tutorial::Hit::z() const { if ( ! m_upToDate ) { const_cast< pool_tutorial::Hit* >( this )->updateValues(); } return m_z; } double pool_tutorial::Hit::value() const { if ( ! m_upToDate ) { const_cast< pool_tutorial::Hit* >( this )->updateValues(); } return m_value; } pool_tutorial::Digit& pool_tutorial::Hit::digit() { if ( ! m_digit ) { throw std::runtime_error( "digit not set" ); } return *m_digit; } const pool_tutorial::Digit& pool_tutorial::Hit::digit() const { if ( ! m_digit ) { throw std::runtime_error( "digit not set" ); } return *m_digit; } void pool_tutorial::Hit::setDigit( const pool::Ref< pool_tutorial::Digit >& digit ) { m_digit = digit; m_upToDate = false; } void pool_tutorial::Hit::setTransformation( pool_tutorial::Transformation* transformation ) { m_transformation = transformation; } void pool_tutorial::Hit::updateValues() { pool_tutorial::Digit& digit = this->digit(); m_value = m_transformation->value( digit.value() ); const pool_tutorial::Transformation::Point3d& point = m_transformation->position( digit.index() ); m_x = point.x; m_y = point.y; m_z = point.z; m_upToDate = true; }