//--------------- // C++ Headers -- //--------------- #include "CalorObjects/Cp2Cluster.hh" #include #include "TBuffer.h" /****************************************************************************** Description: Cp2Cluster class header file Author List: 04/30/2000 Tania Moulik : created Revision History : 08/30/2000 Tania Moulik Remove ifndef _CINT_ around constructor 10/05/2000 Bob Wagner Fix syntax error in virtual destructor definition 02/03/2001 Tania Moulik Writing out TrackId & Cp2Pad info to buffer 02/05/2001 Tania Moulik changing version to 2..due to change in streamer. 09/09/2002 Bob Wagner Move reading of track id value from Streamer to postread(). In Streamer, the track collection is not guaranteed to have been read in yet, so links to it may not be restored causing crashes. *******************************************************************************/ const Version_t Cp2Cluster::_VERSION = 3; void Cp2Cluster::print(std::ostream& os) const { int trackid=0; if (class_version()==3 || version ==3) { if (_theTrack.is_nonnull()) trackid = _theTrack->id().value(); } if (version == 2) trackid = _track_id; os << "**************************************************" << "\n"; os << "CP2 Cluster " << "\n"; os << "************" << "\n"; os << "Module " << _module << "\n"; os << "Side " << _barrel << "\n"; os << "Position " << _padPosition << "\n" ; os << "Position Error " << _errorPadPosition << "\n" ; os << "Charge " << _padEnergy << "\n" ; os << "Matching Track Id " << trackid << "\n"; if (_copyPads.size()) { os << "Associated Pads :" << "\n"; for (vector ::const_iterator iw=_copyPads.begin(); iw!=_copyPads.end(); iw++){ std::cout.setf(std::ios::left); os << "pad number " << std::setw(3) << iw->getPadNo() << " pad energy " << iw->getPulseHeight() << "\n"; } std::cout.unsetf(std::ios::left); } os << "*************************************************" << "\n"; } /*===========================================================================*\ * Cp2Cluster accessors * \*===========================================================================*/ float Cp2Cluster::clusterWidth( void ) const { return _errorPadPosition; } /************************************************************************** * Cp2Cluster::region * * Return the detector identification number which should be 0 * * for the CP2 * **************************************************************************/ Detector Cp2Cluster::region( void ) const { return CEM; } /************************************************************************** * Cp2Cluster::energy * * Return energy of CP2 Cluster * **************************************************************************/ float Cp2Cluster::energy( void ) const { return _padEnergy; } /************************************************************************** * Cp2Cluster::localCoord * * Return double giving value of shower centroid * * in local coordinate system * **************************************************************************/ float Cp2Cluster::localCoord( void ) const { return _padPosition; } /************************************************************************** * Cp2Cluster::globalCoord * * Return double giving value of shower centroid * * in local coordinate system * **************************************************************************/ float Cp2Cluster::globalCoord( void ) const { return 0.; } /************************************************************************** * Cp2Cluster::module * * Return wedge number containing CP2 Cluster * **************************************************************************/ int Cp2Cluster::module( void ) const { return _module; } /***************************************************************************** * Cp2Cluster::side * * Return integer indicating East or West detector contains CP2 Cluster * *****************************************************************************/ int Cp2Cluster::side( void ) const { return _barrel; } int Cp2Cluster::view( void ) const { return 0; } //=========================================================================== // Required by StorableObject //=========================================================================== void Cp2Cluster::Streamer(TBuffer& iobuffer) { //--------------------------------------------------------------------------- // Read object from buffer //--------------------------------------------------------------------------- int size; float charge; int pad; if (iobuffer.IsReading()) { iobuffer >> version; iobuffer >> _barrel >> _module >> _padPosition >> _errorPadPosition >> _padEnergy; if (version > 1 ) { if (version == 2) { iobuffer >> _track_id; } else if (version == 3) { _theTrack.readStreamer(iobuffer); // Zero track id. We set it in postread if we have valid track link. _track_id = 0; } iobuffer >> size; Cp2Pad cp2pad; if (size !=0) { for (int iw=0; iw < size; iw++) { iobuffer >> pad >> charge; unsigned int newpad = pad; double newcharge = charge; cp2pad.setPadNo(newpad); cp2pad.setPulseHeight(newcharge); cp2pad.setModule(_module); cp2pad.setSide(_barrel); _copyPads.push_back(cp2pad); } } } } //--------------------------------------------------------------------------- // Write object to buffer //--------------------------------------------------------------------------- else if (iobuffer.IsWriting()) { version = class_version(); iobuffer << version; iobuffer << _barrel << _module << _padPosition << _errorPadPosition << _padEnergy; _theTrack.writeStreamer(iobuffer); size = _copyPads.size(); iobuffer << size; if (_copyPads.size()!=0) { for (vector ::const_iterator iw=_copyPads.begin(); iw!=_copyPads.end(); iw++){ pad = iw->getPadNo(); charge = iw->getPulseHeight(); iobuffer << pad << charge; } } } //--------------------------------------------------------------------------- // Unanticipated action //--------------------------------------------------------------------------- else { std::cerr << "Cp2Cluster::Streamer(): " "NOTHING DONE.\n"; } } bool Cp2Cluster::postread(EventRecord* p) { // Fill in the track id is we have a valid link. if (_theTrack.is_nonnull()) _track_id = _theTrack->id().value(); else _track_id = 0; return ShowerMaxCluster::postread(p); } bool Cp2Cluster::prewrite(EventRecord* p) {return ShowerMaxCluster::prewrite(p);}