//===================================================================== // PndMdtWaveform.cxx // // Class to hold waveforms created from Mdt Digis // // Software developed for the BaBar Detector at the SLAC B-Factory. // Adapted for the PANDA experiment at GSI // // Jifeng Hu, hu@to.infn.it, Torino University //----------------------- //--------------- // C++ Headers -- //--------------- #include "PndMdtWaveform.h" #include #include #include "assert.h" using std::cout; using std::endl; //---------------- // Constructors -- //---------------- PndMdtWaveform::PndMdtWaveform(): fTrackId(-1) ,fDetectorId(-1) ,fSignal(40,0.) ,FairTimeStamp() { } PndMdtWaveform::PndMdtWaveform(Int_t trackId, Int_t detId, Double_t time, Bool_t isWire) : fTrackId(trackId) ,fDetectorId(detId) ,fSignal(40,0.) ,fIsWireSig(isWire) { SetTimeStamp(time); } PndMdtWaveform::PndMdtWaveform(const PndMdtWaveform& copy): fTrackId(copy.fTrackId) ,fDetectorId ( copy.fDetectorId) ,fSignal(copy.fSignal) ,fIsWireSig(copy.fIsWireSig) { SetTimeStamp(copy.GetTimeStamp()); SetTimeStampError(copy.GetTimeStampError()); } PndMdtWaveform& PndMdtWaveform::operator=(const PndMdtWaveform ©){ if(this != ©){ fTrackId = copy.fTrackId; fDetectorId = copy.fDetectorId; fSignal = copy.fSignal; SetTimeStamp(copy.GetTimeStamp()); SetTimeStampError(copy.GetTimeStampError()); } return *this; } //-------------- // Destructor -- //-------------- PndMdtWaveform::~PndMdtWaveform() { fSignal.clear(); } //------------- // Selectors -- //------------- bool PndMdtWaveform::operator < (const PndMdtWaveform& otherWave) const { if(GetDetectorID() < otherWave.GetDetectorID()) return true; if(GetDetectorID() > otherWave.GetDetectorID()) return false; if(GetTimeStamp() < otherWave.GetTimeStamp()) return GetActiveTime() < otherWave.GetTimeStamp(); return false; } PndMdtWaveform& PndMdtWaveform::operator+=(const PndMdtWaveform& otherWave){ if(this != &otherWave) { Int_t k =0; Int_t IDX = 0; for(; (IDX < GetWaveformLength()) && (k < otherWave.GetWaveformLength()); ++ IDX){ if((GetTimeStamp() + IDX*10.) < otherWave.GetTimeStamp()){ continue; } fSignal[IDX] += otherWave.fSignal[k]; ++k; } if(k < otherWave.GetWaveformLength()){ fSignal.reserve( GetWaveformLength() + otherWave.GetWaveformLength() - (k+1)); for(; IDX < GetWaveformLength(); ++IDX, ++k){ fSignal.push_back(otherWave.fSignal[k]); } } } return *this; } TGraphErrors* PndMdtWaveform::ToTGraph() const { //free this object outside TGraphErrors* g = new TGraphErrors(fSignal.size()); for(Int_t i = 0; i< fSignal.size(); ++i){ g->SetPoint(i, i*10, fSignal[i]);//every 10 nano seconds g->SetPointError(i, 0, 0); } return g; } std::ostream& PndMdtWaveform::Print(std::ostream& out ) const { std::vector::const_iterator it = fSignal.begin(); std::vector::const_iterator it_end = fSignal.end(); cout<<"PndMdtWaveform::"<GetDetectorID()) return true; return false; } bool PndMdtWaveform::equal(FairTimeStamp* data) { PndMdtWaveform* other = (PndMdtWaveform*)(data); if(GetDetectorID() == other->GetDetectorID()) return true; return false; } ClassImp(PndMdtWaveform)