#include <CSCAnalogSignal.h>
Public Member Functions | |
CSCAnalogSignal () | |
CSCAnalogSignal (int element, float binSize, std::vector< float > &binValues, float total=0., float timeOffset=0.) | |
float | getBinSize () const |
float | getBinValue (int i) const |
int | getElement () const |
constructor from time and amp shape | |
int | getSize () const |
float | getTimeOffset () const |
float | getTotal () const |
float | getValue (float t) const |
void | operator*= (float scaleFactor) |
void | operator+= (float offset) |
float & | operator[] (int i) |
const float & | operator[] (int i) const |
float | peakTime () const |
the time when the signal peaks | |
void | setElement (int element) |
void | setTimeOffset (float offset) |
unsigned | size () const |
void | superimpose (const CSCAnalogSignal &signal2) |
Private Attributes | |
float | invBinSize |
std::vector< float > | theBinValues |
int | theElement |
float | theTimeOffset |
float | theTotal |
Friends | |
std::ostream & | operator<< (std::ostream &, const CSCAnalogSignal &) |
Simple histogram meant to represent the analog signal on a detector element.
Last mod:
30-Jun-00 ptc Add further traps in getBinValue() and setBinValue().
06-Jul-00 ptc In fact the getBinValue trap was an important bug-fix: it trapped on > size() of stl std::vector but should have trapped >= size(). It occasionally does reach size().
Mods (performace improvements) by Vin 31/07/2000
Critical methods (getBinValue, get Value +=) inlined
bin-size stored and used as his inverse (encapulation helped in not changing interface, named changed to use compiler to catch its occurrencies)
swap input std::vector (be careful if const..)
do proper interpolation (not just /2)
Definition at line 33 of file CSCAnalogSignal.h.
CSCAnalogSignal::CSCAnalogSignal | ( | ) | [inline] |
Definition at line 37 of file CSCAnalogSignal.h.
: theElement(0), invBinSize(0.), theBinValues(0), theTotal(0), theTimeOffset(0.) {}
CSCAnalogSignal::CSCAnalogSignal | ( | int | element, |
float | binSize, | ||
std::vector< float > & | binValues, | ||
float | total = 0. , |
||
float | timeOffset = 0. |
||
) | [inline] |
Definition at line 41 of file CSCAnalogSignal.h.
References theBinValues.
: theElement(element), invBinSize(1./binSize), theBinValues(), theTotal(total), theTimeOffset(timeOffset) { theBinValues.swap(binValues); }
float CSCAnalogSignal::getBinSize | ( | ) | const [inline] |
Definition at line 76 of file CSCAnalogSignal.h.
References invBinSize.
Referenced by CSCCrosstalkGenerator::getCrosstalk(), and operator<<().
{return 1./invBinSize;};
float CSCAnalogSignal::getBinValue | ( | int | i | ) | const [inline] |
Definition at line 53 of file CSCAnalogSignal.h.
References i, and theBinValues.
Referenced by CSCWireElectronicsSim::fillDigis(), getValue(), and CSCCrosstalkGenerator::ratio().
{ return (i >= static_cast<int>(theBinValues.size()) || i < 0 ) ? 0. : theBinValues[i]; }
int CSCAnalogSignal::getElement | ( | ) | const [inline] |
constructor from time and amp shape
Definition at line 51 of file CSCAnalogSignal.h.
References theElement.
Referenced by CSCBaseElectronicsSim::add(), and CSCStripConditions::noisify().
{return theElement;};
int CSCAnalogSignal::getSize | ( | ) | const [inline] |
Definition at line 75 of file CSCAnalogSignal.h.
References theBinValues.
Referenced by CSCWireElectronicsSim::fillDigis(), CSCCrosstalkGenerator::getCrosstalk(), operator*=(), operator+=(), operator[](), and CSCCrosstalkGenerator::ratio().
{return theBinValues.size();};
float CSCAnalogSignal::getTimeOffset | ( | ) | const [inline] |
Definition at line 78 of file CSCAnalogSignal.h.
References theTimeOffset.
Referenced by CSCCrosstalkGenerator::getCrosstalk(), CSCStripConditions::noisify(), and operator<<().
{return theTimeOffset;};
float CSCAnalogSignal::getTotal | ( | ) | const [inline] |
Definition at line 77 of file CSCAnalogSignal.h.
References theTotal.
Referenced by SortSignalsByTotal().
{return theTotal;};
float CSCAnalogSignal::getValue | ( | float | t | ) | const [inline] |
Definition at line 58 of file CSCAnalogSignal.h.
References f, getBinValue(), i, invBinSize, and theTimeOffset.
Referenced by CSCStripElectronicsSim::comparatorReading(), CSCStripElectronicsSim::createDigi(), CSCCrosstalkGenerator::getCrosstalk(), CSCStripElectronicsSim::makeNoiseSignal(), CSCStripElectronicsSim::runComparator(), and superimpose().
{ // interpolate between bins, if necessary float retval = 0.; float f = (t-theTimeOffset)*invBinSize + 0.000000001; if(f>=0.) { int i = static_cast<int>(f); f -= static_cast<float>(i); retval = (1.-f)*getBinValue(i) + f*getBinValue(i + 1); } return retval; }
void CSCAnalogSignal::operator*= | ( | float | scaleFactor | ) | [inline] |
Definition at line 96 of file CSCAnalogSignal.h.
References getSize(), i, theBinValues, and theTotal.
void CSCAnalogSignal::operator+= | ( | float | offset | ) | [inline] |
Definition at line 90 of file CSCAnalogSignal.h.
References getSize(), i, evf::evtn::offset(), and theBinValues.
float& CSCAnalogSignal::operator[] | ( | int | i | ) | [inline] |
Definition at line 105 of file CSCAnalogSignal.h.
References getSize(), i, and theBinValues.
{ assert(i>=0 && i < getSize()); return theBinValues[i]; }
const float& CSCAnalogSignal::operator[] | ( | int | i | ) | const [inline] |
Definition at line 110 of file CSCAnalogSignal.h.
References getSize(), i, and theBinValues.
{ assert(i>=0 && i < getSize()); return theBinValues[i]; }
float CSCAnalogSignal::peakTime | ( | ) | const |
the time when the signal peaks
Definition at line 6 of file CSCAnalogSignal.cc.
References invBinSize, theBinValues, and theTimeOffset.
{ size_t imax = std::max_element(theBinValues.begin(), theBinValues.end()) - theBinValues.begin(); return imax/invBinSize + theTimeOffset; }
void CSCAnalogSignal::setElement | ( | int | element | ) | [inline] |
void CSCAnalogSignal::setTimeOffset | ( | float | offset | ) | [inline] |
Definition at line 79 of file CSCAnalogSignal.h.
References evf::evtn::offset(), and theTimeOffset.
{theTimeOffset = offset;};
unsigned CSCAnalogSignal::size | ( | void | ) | const [inline] |
Definition at line 117 of file CSCAnalogSignal.h.
References theBinValues.
{return theBinValues.size();}
void CSCAnalogSignal::superimpose | ( | const CSCAnalogSignal & | signal2 | ) | [inline] |
Definition at line 81 of file CSCAnalogSignal.h.
References getValue(), i, invBinSize, n, matplotRender::t, theBinValues, theTimeOffset, and theTotal.
Referenced by CSCBaseElectronicsSim::add(), CSCStripElectronicsSim::addCrosstalk(), and CSCStripConditions::noisify().
{ size_t n = theBinValues.size(); for(size_t i = 0; i < n; ++i) { float t = i/invBinSize + theTimeOffset; theBinValues[i]+=signal2.getValue(t); } theTotal += signal2.theTotal; }
std::ostream& operator<< | ( | std::ostream & | stream, |
const CSCAnalogSignal & | signal | ||
) | [friend] |
Definition at line 12 of file CSCAnalogSignal.cc.
{ stream << "CSCAnalogSignal: Element " << signal.theElement << " Total " << signal.theTotal << std::endl; for ( int i = 0; i < int( signal.theBinValues.size() ); ++i ) { //@@ ptc 26-Feb-02 Don't both with very small amplitudes if ( signal.theBinValues[i] > 1.E-10 ) { stream << i*signal.getBinSize()+signal.getTimeOffset() << "\t" << signal.theBinValues[i] << std::endl; } } return stream; }
float CSCAnalogSignal::invBinSize [private] |
Definition at line 121 of file CSCAnalogSignal.h.
Referenced by getBinSize(), getValue(), peakTime(), and superimpose().
std::vector<float> CSCAnalogSignal::theBinValues [private] |
Definition at line 122 of file CSCAnalogSignal.h.
Referenced by CSCAnalogSignal(), getBinValue(), getSize(), operator*=(), operator+=(), operator<<(), operator[](), peakTime(), size(), and superimpose().
int CSCAnalogSignal::theElement [private] |
Definition at line 120 of file CSCAnalogSignal.h.
Referenced by getElement(), operator<<(), and setElement().
float CSCAnalogSignal::theTimeOffset [private] |
Definition at line 124 of file CSCAnalogSignal.h.
Referenced by getTimeOffset(), getValue(), peakTime(), setTimeOffset(), and superimpose().
float CSCAnalogSignal::theTotal [private] |
Definition at line 123 of file CSCAnalogSignal.h.
Referenced by getTotal(), operator*=(), operator<<(), and superimpose().