/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus * * MAUS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MAUS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MAUS. If not, see . * */ #include "src/common_cpp/DataStructure/SciFiCluster.hh" namespace MAUS { // Constructors SciFiCluster::SciFiCluster(): _used(false), _spill(-1), _event(-1), _tracker(-1), _station(-1), _plane(-1), _channel_w(-1), _npe(-1), _time(-1) { _digits = new TRefArray(); } SciFiCluster::SciFiCluster(const SciFiCluster &clus): _used(clus.is_used()), _spill(clus.get_spill()), _event(clus.get_event()), _tracker(clus.get_tracker()), _station(clus.get_station()), _plane(clus.get_plane()), _id(clus.get_id()), _channel_w(clus.get_channel()), _npe(clus.get_npe()), _time(clus.get_time()), _alpha(clus.get_alpha()) { _direction = clus.get_direction(); _position = clus.get_position(); _digits = new TRefArray(*(clus.get_digits())); } SciFiCluster::SciFiCluster(SciFiDigit *scifidigit): _used(false), _spill(scifidigit->get_spill()), _event(scifidigit->get_event()), _tracker(scifidigit->get_tracker()), _station(scifidigit->get_station()), _plane(scifidigit->get_plane()), _channel_w(scifidigit->get_channel()), _npe(scifidigit->get_npe()), _time(scifidigit->get_time()) { scifidigit->set_used(true); _digits = new TRefArray(); _digits->Add(scifidigit); } // Destructor SciFiCluster::~SciFiCluster() { delete _digits; } // Assignment operator SciFiCluster& SciFiCluster::operator=(const SciFiCluster &scificluster) { if (this == &scificluster) { return *this; } _used = scificluster.is_used(); _spill = scificluster.get_spill(); _event = scificluster.get_event(); _tracker = scificluster.get_tracker(); _station = scificluster.get_station(); _plane = scificluster.get_plane(); _id = scificluster.get_id(); _channel_w = scificluster.get_channel(); _npe = scificluster.get_npe(); _time = scificluster.get_time(); _alpha = scificluster.get_alpha(); _direction = scificluster.get_direction(); _position = scificluster.get_position(); if (_digits) delete _digits; _digits = new TRefArray(*(scificluster.get_digits())); return *this; } // Merge digits void SciFiCluster::add_digit(SciFiDigit* neigh) { neigh->set_used(true); _digits->Add(neigh); _npe += neigh->get_npe(); _channel_w /= 2.0; _channel_w += (neigh->get_channel())/2.0; _time /= 2.0; _time += (neigh->get_time())/2.0; } SciFiDigitPArray SciFiCluster::get_digits_pointers() const { SciFiDigitPArray dig_pointers; // Check the _spoints container is not initialised if (!_digits) { std::cerr << "Digit TRefArray not initialised" << std::endl; return dig_pointers; } for (int i = 0; i < (_digits->GetLast()+1); ++i) { dig_pointers.push_back(static_cast(_digits->At(i))); } return dig_pointers; } void SciFiCluster::set_digits_pointers(const SciFiDigitPArray &digits) { if (_digits) delete _digits; _digits = new TRefArray(); for ( std::vector::const_iterator dig = digits.begin(); dig != digits.end(); ++dig) { _digits->Add(*dig); } } } // ~namespace MAUS