#include "CalorimeterReconstruction.h" #include "CalorimeterGeometry.h" #include "CalorimeterConstants.h" CalParticle CalorimeterReconstruction::CreateParticle () const { // Cree une particle CalParticle theParticle ; // Assigne a la particule l'energie des cellules double energie( 0. ) ; std::vector< CalCell >::const_iterator iter ; for ( iter = m_data.begin() ; iter != m_data.end() ; ++iter ) energie += (*iter).energy() ; theParticle.setEnergy( energie ) ; // Calcule la position de la particule dans le calorimetre computePosition( theParticle ) ; return theParticle ; } void CalorimeterReconstruction::computePosition( CalParticle & theParticle ) const { double x( 0. ) ; double y( 0. ) ; for ( int i = 1 ; i <= CalConst::NbLayers ; ++i ) { std::vector< CalCell >::const_iterator iter ; for ( iter = m_data.begin() ; iter != m_data.end() ; ++iter ) { if ( i != (*iter).address().layer() ) continue ; // Barycenter en x x += CalorimeterGeometry::xCentre( (*iter).address() ) * (*iter).energy() ; // Barycentre en y y += CalorimeterGeometry::yCentre( (*iter).address() ) * (*iter).energy() ; } } // Assigne pour coordonnees x et y la valeur moyenne de chaque // x et y pour chaque layer, ponderee par l'energie theParticle.setX( x / theParticle.energy() ) ; theParticle.setY( y / theParticle.energy() ) ; }