////////////////////////////////////////////////////////////////////////////////////////////////////////// // // Component: PhysicsTowerView.cc // Purpose: This class is a container for pointers to data // in the PhysicsTowerData object. // // Created: 19/06/99 Pierre Savard // // History: 13/09/99 Pierre Savard // Integrate in new EDM // ////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "CalorObjects/PhysicsTowerView.hh" // // Memory management + assignment // PhysicsTowerView::PhysicsTowerView(){ _keys.clear(); } PhysicsTowerView::PhysicsTowerView(const PhysicsTowerView& rhs){ _keys.clear(); _keys.resize(rhs._keys.size()); _container = rhs._container; _keys = rhs._keys; } PhysicsTowerView& PhysicsTowerView::operator=(const PhysicsTowerView& rhs) { if (this != &rhs) { _keys.clear(); _keys.resize(rhs._keys.size()); _container = rhs._container ; _keys = rhs._keys; } return(*this) ; } PhysicsTowerView::~PhysicsTowerView(){ } //============================================================================= // Manipulation and Access //============================================================================= void PhysicsTowerView::add(const PhysicsTower* tower){ _container.push_back(tower); } void PhysicsTowerView::appendTowers(const PhysicsTowerView& view) { for(Towers::const_iterator iter = view.begin(); iter != view.end(); ++iter){ _container.push_back(*iter); } } //============================================================================= // Iostream //============================================================================= void PhysicsTowerView::print(std::ostream& os) const { Towers::const_iterator end = _container.end(); os << "The view has " << _container.size() << " towers" << std::endl; for(Towers::const_iterator iter = _container.begin(); iter != end; ++iter) { //std::cout << (*(*iter)); std::cout << "iEta = " << (*iter)->iEta() << " IPhi = " <<(*iter)->iPhi() << " Et = " << (*iter)->totEt() << " Eta = " << (*iter)->totEta() << " Phi = " << (*iter)->totPhi() << std::endl; // " px = " << (*iter)->px() << " py = " << (*iter)->py() << " pz = " << (*iter)->pz() << std::endl; } } //============================================================================= // Edm input/output //============================================================================= bool PhysicsTowerView::restorePointers(EventRecord* p_record, PhysicsTowerData_ch& data) const{ int size = _keys.size(); _container.clear(); _container.resize(size); bool status = true; std::vector::const_iterator iter = _keys.begin(); for(int i = 0; iter != _keys.end(); ++iter, ++i){ _container[i] = data->tower(*iter); if(_container[i] == 0) status = false; } return status ; } void PhysicsTowerView::readFromBuffer(TBuffer& iobuffer, Version_t version){ int size; _keys.clear(); iobuffer >> size; _keys.resize(size); UChar_t ieta; UChar_t iphi; for(int i = 0; i < size; ++i){ iobuffer >> ieta; iobuffer >> iphi; _keys[i] = TowerKey(ieta,iphi); } } void PhysicsTowerView::writeToBuffer(TBuffer& iobuffer, Version_t version){ iobuffer << _keys.size(); for(std::vector::iterator iter = _keys.begin(); iter != _keys.end(); ++iter){ iobuffer << iter->iEta(); iobuffer << iter->iPhi(); } } void PhysicsTowerView::makeTowerKeys() { _keys.clear(); _keys.resize(_container.size()); Towers::const_iterator iter = _container.begin(); for(int i = 0; iter != _container.end(); ++iter, ++i) _keys[i] = (*iter)->key(); }