test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes | Friends
CSCAnalogSignal Class Reference

#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 More...
 
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 More...
 
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 &)
 

Detailed Description

Simple histogram meant to represent the analog signal on a detector element.

Author
Rick Wilkinson

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.

Constructor & Destructor Documentation

CSCAnalogSignal::CSCAnalogSignal ( )
inline

Definition at line 37 of file CSCAnalogSignal.h.

37  : theElement(0), invBinSize(0.), theBinValues(0),
38  theTotal(0), theTimeOffset(0.)
39  {}
std::vector< float > theBinValues
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.

41  :
42  theElement(element), invBinSize(1./binSize),
43  theBinValues(), theTotal(total), theTimeOffset(timeOffset) {
44  theBinValues.swap(binValues);
45  }
std::vector< float > theBinValues

Member Function Documentation

float CSCAnalogSignal::getBinSize ( ) const
inline

Definition at line 76 of file CSCAnalogSignal.h.

References invBinSize.

Referenced by CSCCrosstalkGenerator::getCrosstalk(), and operator<<().

76 {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().

53  {
54  return (i >= static_cast<int>(theBinValues.size()) || i < 0 ) ? 0. : theBinValues[i];
55  }
int i
Definition: DBlmapReader.cc:9
std::vector< float > theBinValues
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().

51 {return theElement;};
int CSCAnalogSignal::getSize ( ) const
inline
float CSCAnalogSignal::getTimeOffset ( ) const
inline

Definition at line 78 of file CSCAnalogSignal.h.

References theTimeOffset.

Referenced by CSCCrosstalkGenerator::getCrosstalk(), CSCStripConditions::noisify(), and operator<<().

78 {return theTimeOffset;};
float CSCAnalogSignal::getTotal ( ) const
inline

Definition at line 77 of file CSCAnalogSignal.h.

References theTotal.

Referenced by SortSignalsByTotal().

77 {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().

58  {
59  // interpolate between bins, if necessary
60  float retval = 0.;
61  float f = (t-theTimeOffset)*invBinSize + 0.000000001;
62  if(f>=0.) {
63  int i = static_cast<int>(f);
64  f -= static_cast<float>(i);
65  retval = (1.-f)*getBinValue(i) + f*getBinValue(i + 1);
66  }
67  return retval;
68  }
int i
Definition: DBlmapReader.cc:9
float getBinValue(int i) const
double f[11][100]
void CSCAnalogSignal::operator*= ( float  scaleFactor)
inline

Definition at line 96 of file CSCAnalogSignal.h.

References getSize(), i, theBinValues, and theTotal.

96  {
97  for(int i = 0; i < getSize(); ++i) {
98  theBinValues[i] *= scaleFactor;
99  }
100  theTotal *= scaleFactor;
101  }
int i
Definition: DBlmapReader.cc:9
std::vector< float > theBinValues
int getSize() const
void CSCAnalogSignal::operator+= ( float  offset)
inline

Definition at line 90 of file CSCAnalogSignal.h.

References getSize(), i, evf::evtn::offset(), and theBinValues.

90  {
91  for(int i = 0; i < getSize(); ++i) {
92  theBinValues[i] += offset;
93  }
94  }
int i
Definition: DBlmapReader.cc:9
std::vector< float > theBinValues
int getSize() const
unsigned int offset(bool)
float& CSCAnalogSignal::operator[] ( int  i)
inline

Definition at line 105 of file CSCAnalogSignal.h.

References getSize(), i, and theBinValues.

105  {
106  assert(i>=0 && i < getSize());
107  return theBinValues[i];
108  }
int i
Definition: DBlmapReader.cc:9
std::vector< float > theBinValues
int getSize() const
const float& CSCAnalogSignal::operator[] ( int  i) const
inline

Definition at line 110 of file CSCAnalogSignal.h.

References getSize(), i, and theBinValues.

110  {
111  assert(i>=0 && i < getSize());
112  return theBinValues[i];
113  }
int i
Definition: DBlmapReader.cc:9
std::vector< float > theBinValues
int getSize() const
float CSCAnalogSignal::peakTime ( ) const

the time when the signal peaks

Definition at line 6 of file CSCAnalogSignal.cc.

References invBinSize, theBinValues, and theTimeOffset.

6  {
7  size_t imax = std::max_element(theBinValues.begin(), theBinValues.end()) - theBinValues.begin();
8  return imax/invBinSize + theTimeOffset;
9 }
std::vector< float > theBinValues
void CSCAnalogSignal::setElement ( int  element)
inline

Definition at line 52 of file CSCAnalogSignal.h.

References theElement.

52 {theElement = element;};
void CSCAnalogSignal::setTimeOffset ( float  offset)
inline

Definition at line 79 of file CSCAnalogSignal.h.

References evf::evtn::offset(), and theTimeOffset.

unsigned int offset(bool)
unsigned CSCAnalogSignal::size ( void  ) const
inline

Definition at line 117 of file CSCAnalogSignal.h.

References theBinValues.

117 {return theBinValues.size();}
std::vector< float > theBinValues
void CSCAnalogSignal::superimpose ( const CSCAnalogSignal signal2)
inline

Definition at line 81 of file CSCAnalogSignal.h.

References getValue(), i, invBinSize, n, edmStreamStallGrapher::t, theBinValues, theTimeOffset, and theTotal.

Referenced by cuy.FindIssue::__init__(), CSCBaseElectronicsSim::add(), CSCStripElectronicsSim::addCrosstalk(), and CSCStripConditions::noisify().

81  {
82  size_t n = theBinValues.size();
83  for(size_t i = 0; i < n; ++i) {
84  float t = i/invBinSize + theTimeOffset;
85  theBinValues[i]+=signal2.getValue(t);
86  }
87  theTotal += signal2.theTotal;
88  }
int i
Definition: DBlmapReader.cc:9
std::vector< float > theBinValues
float getValue(float t) const

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  stream,
const CSCAnalogSignal signal 
)
friend

Definition at line 12 of file CSCAnalogSignal.cc.

12  {
13  stream << "CSCAnalogSignal: Element " << signal.theElement
14  << " Total " << signal.theTotal << std::endl;
15  for ( int i = 0; i < int( signal.theBinValues.size() ); ++i ) {
16 
17  //@@ ptc 26-Feb-02 Don't both with very small amplitudes
18 
19  if ( signal.theBinValues[i] > 1.E-10 ) {
20  stream << i*signal.getBinSize()+signal.getTimeOffset() <<
21  "\t" << signal.theBinValues[i] << std::endl;
22  }
23  }
24  return stream;
25 }
int i
Definition: DBlmapReader.cc:9
float getBinSize() const
std::vector< float > theBinValues
float getTimeOffset() const

Member Data Documentation

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
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().