CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Attributes | Private Attributes | Static Private Attributes | Friends
ApvTimingAnalysis Class Reference

Analysis for timing run using APV tick marks. More...

#include <ApvTimingAnalysis.h>

Inheritance diagram for ApvTimingAnalysis:
CommissioningAnalysis

Public Member Functions

void addErrorCode (const std::string &error) override
 
 ApvTimingAnalysis (const uint32_t &key)
 
 ApvTimingAnalysis ()
 
const float & base () const
 
const float & delay () const
 
const float & error () const
 
bool foundTickMark () const
 
uint16_t frameFindingThreshold () const
 
const float & height () const
 
bool isValid () const override
 
const float & optimumSamplingPoint () const
 
const float & peak () const
 
void print (std::stringstream &, uint32_t not_used=0) override
 
const float & refTime () const
 
void refTime (const float &time, const float &targetDelay=-1)
 
void reset () override
 
const float & time () const
 
 ~ApvTimingAnalysis () override
 
- Public Member Functions inherited from CommissioningAnalysis
 CommissioningAnalysis (const uint32_t &key, const std::string &my_name)
 
 CommissioningAnalysis (const std::string &my_name)
 
const uint32_t & dcuId () const
 
void dcuId (const uint32_t &)
 
const uint32_t & detId () const
 
void detId (const uint32_t &)
 
const uint32_t & fecKey () const
 
void fecKey (const uint32_t &)
 
const uint32_t & fedKey () const
 
void fedKey (const uint32_t &)
 
const VStringgetErrorCodes () const
 
virtual void header (std::stringstream &) const
 
const std::string & myName () const
 
void setErrorCodes (const VString &errors)
 
virtual void summary (std::stringstream &) const
 
virtual ~CommissioningAnalysis ()
 

Static Public Attributes

static const float frameFindingThreshold_ = (2. / 3.)
 
static const float optimumSamplingPoint_ = 15.
 
static const float tickMarkHeightThreshold_ = 50.
 

Private Attributes

float base_
 
float delay_
 
float error_
 
float height_
 
float peak_
 
bool synchronized_
 
float time_
 

Static Private Attributes

static float refTime_ = 1. * sistrip::invalid_
 

Friends

class ApvTimingAlgorithm
 

Additional Inherited Members

- Public Types inherited from CommissioningAnalysis
typedef std::vector< bool > VBool
 
typedef std::vector< float > VFloat
 
typedef std::vector< uint16_t > VInt
 
typedef std::vector< std::string > VString
 
typedef std::vector< VBoolVVBool
 
typedef std::vector< VFloatVVFloat
 
typedef std::vector< VIntVVInt
 

Detailed Description

Analysis for timing run using APV tick marks.

Author
M. Wingham, R.Bainbridge

Definition at line 15 of file ApvTimingAnalysis.h.

Constructor & Destructor Documentation

◆ ApvTimingAnalysis() [1/2]

ApvTimingAnalysis::ApvTimingAnalysis ( const uint32_t &  key)

Definition at line 30 of file ApvTimingAnalysis.cc.

38  synchronized_(false) {
39  ;
40 }
key
prepare the HTCondor submission files and eventually submit them
static const char apvTimingAnalysis_[]
static const uint16_t invalid_
Definition: Constants.h:16

◆ ApvTimingAnalysis() [2/2]

ApvTimingAnalysis::ApvTimingAnalysis ( )

◆ ~ApvTimingAnalysis()

ApvTimingAnalysis::~ApvTimingAnalysis ( )
inlineoverride

Definition at line 23 of file ApvTimingAnalysis.h.

23 { ; }

Member Function Documentation

◆ addErrorCode()

void ApvTimingAnalysis::addErrorCode ( const std::string &  error)
inlineoverridevirtual

Adds error codes for analysis (overrides private base).

Reimplemented from CommissioningAnalysis.

Definition at line 125 of file ApvTimingAnalysis.h.

References CommissioningAnalysis::addErrorCode(), and error().

Referenced by refTime().

const float & error() const
virtual void addErrorCode(const std::string &error)

◆ base()

const float & ApvTimingAnalysis::base ( ) const
inline

Baseline level of tick mark [ADC].

Definition at line 123 of file ApvTimingAnalysis.h.

References base_.

123 { return base_; }

◆ delay()

const float & ApvTimingAnalysis::delay ( ) const
inline

Delay required to sync w.r.t. reference tick mark [ns].

Definition at line 121 of file ApvTimingAnalysis.h.

References delay_.

121 { return delay_; }

◆ error()

const float & ApvTimingAnalysis::error ( ) const
inline

Error on time of tick mark rising edge [ns].

Definition at line 118 of file ApvTimingAnalysis.h.

References error_.

Referenced by addErrorCode(), and Page1Parser.Page1Parser::check_for_whole_start_tag().

118 { return error_; }

◆ foundTickMark()

bool ApvTimingAnalysis::foundTickMark ( ) const

Identifies if tick mark is found or not.

Definition at line 133 of file ApvTimingAnalysis.cc.

References base_, relativeConstraints::empty, frameFindingThreshold(), CommissioningAnalysis::getErrorCodes(), height_, peak_, time_, and sistrip::valid_.

Referenced by print().

133  {
134  return ((getErrorCodes().empty() || getErrorCodes()[0] == "TickMarkRecovered") && time_ < sistrip::valid_ &&
137 }
const VString & getErrorCodes() const
static const uint16_t valid_
Definition: Constants.h:17
uint16_t frameFindingThreshold() const

◆ frameFindingThreshold()

uint16_t ApvTimingAnalysis::frameFindingThreshold ( ) const

FED frame-finding threshold [ADC] (returns 65535 if invalid).

Definition at line 121 of file ApvTimingAnalysis.cc.

References base_, relativeConstraints::empty, frameFindingThreshold_, CommissioningAnalysis::getErrorCodes(), height_, sistrip::invalid_, peak_, tickMarkHeightThreshold_, time_, and sistrip::valid_.

Referenced by foundTickMark(), isValid(), and print().

121  {
122  if ((getErrorCodes().empty() || getErrorCodes()[0] == "TickMarkRecovered") && time_ < sistrip::valid_ &&
125  return ((static_cast<uint16_t>(base_ + height_ * ApvTimingAnalysis::frameFindingThreshold_) / 32) * 32);
126  } else {
127  return sistrip::invalid_;
128  }
129 }
const VString & getErrorCodes() const
static const float tickMarkHeightThreshold_
static const uint16_t valid_
Definition: Constants.h:17
static const uint16_t invalid_
Definition: Constants.h:16
static const float frameFindingThreshold_

◆ height()

const float & ApvTimingAnalysis::height ( ) const
inline

Height of tick mark [ADC].

Definition at line 122 of file ApvTimingAnalysis.h.

References height_.

122 { return height_; }

◆ isValid()

bool ApvTimingAnalysis::isValid ( void  ) const
overridevirtual

Identifies if analysis is valid or not.

Reimplemented from CommissioningAnalysis.

Definition at line 141 of file ApvTimingAnalysis.cc.

References base_, delay_, relativeConstraints::empty, frameFindingThreshold(), CommissioningAnalysis::getErrorCodes(), height_, peak_, refTime_, synchronized_, time_, and sistrip::valid_.

Referenced by ntupleDataFormat._Object::_checkIsValid(), print(), and core.AutoHandle.AutoHandle::ReallyLoad().

◆ optimumSamplingPoint()

const float & ApvTimingAnalysis::optimumSamplingPoint ( ) const
inline

Optimum sampling point, defined w.r.t. rising edge [ns].

Definition at line 119 of file ApvTimingAnalysis.h.

References optimumSamplingPoint_.

119 { return optimumSamplingPoint_; }
static const float optimumSamplingPoint_

◆ peak()

const float & ApvTimingAnalysis::peak ( ) const
inline

Level of tick mark top [ADC].

Definition at line 124 of file ApvTimingAnalysis.h.

References peak_.

124 { return peak_; }

◆ print()

void ApvTimingAnalysis::print ( std::stringstream &  ss,
uint32_t  not_used = 0 
)
overridevirtual

Prints analysis results.

Implements CommissioningAnalysis.

Definition at line 150 of file ApvTimingAnalysis.cc.

References base_, delay_, relativeConstraints::empty, alignBH_cfg::fixed, foundTickMark(), frameFindingThreshold(), CommissioningAnalysis::getErrorCodes(), CommissioningAnalysis::header(), height_, sistrip::invalid_, isValid(), optimumSamplingPoint_, peak_, refTime_, contentValuesCheck::ss, time_, and sistrip::valid_.

150  {
151  header(ss);
152 
153  float sampling1 = sistrip::invalid_;
154  if (time_ <= sistrip::valid_) {
155  sampling1 = time_ + optimumSamplingPoint_;
156  }
157 
158  float sampling2 = sistrip::invalid_;
159  if (refTime_ <= sistrip::valid_) {
160  sampling2 = refTime_ + optimumSamplingPoint_;
161  }
162 
163  float adjust = sistrip::invalid_;
164  if (sampling1 <= sistrip::valid_ && delay_ <= sistrip::valid_) {
165  adjust = sampling1 + delay_;
166  }
167 
168  ss << std::fixed << std::setprecision(2) << " Tick mark: time of rising edge [ns] : " << time_
169  << std::endl
170  //<< " Error on time of rising edge [ns] : " << error_ << std::endl
171  << " Tick mark: time of sampling point [ns] : " << sampling1 << std::endl
172  << " Ref tick: time of rising edge [ns] : " << refTime_ << std::endl
173  << " Ref tick: time of sampling point [ns] : " << sampling2 << std::endl
174  << " Ref tick: adjusted sampling point [ns] : " << adjust << std::endl
175  << " Delay required to synchronise [ns] : " << delay_ << std::endl
176  << " Tick mark bottom (baseline) [ADC] : " << base_ << std::endl
177  << " Tick mark top [ADC] : " << peak_ << std::endl
178  << " Tick mark height [ADC] : " << height_ << std::endl
179  << " Frame finding threshold [ADC] : " << frameFindingThreshold() << std::endl
180  << std::boolalpha << " Tick mark found : " << foundTickMark() << std::endl
181  << " isValid : " << isValid() << std::endl
182  << std::noboolalpha << " Error codes (found " << std::setw(3) << std::setfill(' ') << getErrorCodes().size()
183  << ") : ";
184  if (getErrorCodes().empty()) {
185  ss << "(none)";
186  } else {
187  VString::const_iterator istr = getErrorCodes().begin();
188  VString::const_iterator jstr = getErrorCodes().end();
189  for (; istr != jstr; ++istr) {
190  ss << *istr << " ";
191  }
192  }
193  ss << std::endl;
194 }
const VString & getErrorCodes() const
bool foundTickMark() const
static const uint16_t valid_
Definition: Constants.h:17
bool isValid() const override
static const float optimumSamplingPoint_
static const uint16_t invalid_
Definition: Constants.h:16
static float refTime_
virtual void header(std::stringstream &) const
uint16_t frameFindingThreshold() const

◆ refTime() [1/2]

const float & ApvTimingAnalysis::refTime ( ) const
inline

Sampling point of "reference" tick mark [ns].

Definition at line 120 of file ApvTimingAnalysis.h.

References refTime_.

120 { return refTime_; }
static float refTime_

◆ refTime() [2/2]

void ApvTimingAnalysis::refTime ( const float &  time,
const float &  targetDelay = -1 
)

Static method to set global reference time [ns].

Definition at line 70 of file ApvTimingAnalysis.cc.

References addErrorCode(), delay_, sistrip::invalid_, sistrip::invalidDelayTime_, sistrip::invalidRefTime_, sistrip::mlCommissioning_, CommissioningAnalysis::myName(), optimumSamplingPoint_, position, refTime_, synchronized_, time(), time_, and sistrip::valid_.

70  {
71  // Checks synchronization to reference time is done only once
72  if (synchronized_) {
73  edm::LogWarning(mlCommissioning_) << "[" << myName() << "::" << __func__ << "]"
74  << " Attempting to re-synchronize with reference time!"
75  << " Not allowed!";
76  return;
77  }
78  synchronized_ = true;
79 
80  // Set reference time and check if tick mark time is valid
81  refTime_ = time;
82  if (time_ > sistrip::valid_) {
83  return;
84  }
85 
86  // Calculate position of "sampling point" of last tick;
87  int32_t position;
88  if (targetDelay == -1) { // by default use latest tick
89  position = static_cast<int32_t>(rint(refTime_ + optimumSamplingPoint_));
90  } else {
91  position = static_cast<int32_t>(rint(targetDelay + optimumSamplingPoint_));
92  }
93 
94  // Calculate adjustment so that sampling point is multiple of 25 (ie, synched with FED sampling)
95  float adjustment = 25 - position % 25;
96 
97  // Calculate delay required to synchronise with this adjusted sampling position
98  if (targetDelay == -1) { // by default align forward to the latest tick
99  delay_ = (refTime_ + adjustment) - time_;
100  } else { // otherwise use the supplied target delay
101  if (adjustment > 25 / 2)
102  adjustment -= 25; // go as close as possible to desired target
103  delay_ = (targetDelay + adjustment) - time_;
104  }
105 
106  // Check reference time
107  if (refTime_ < 0. || refTime_ > sistrip::valid_) {
110  }
111 
112  // Check delay is valid
113  if (delay_ < -sistrip::valid_ || delay_ > sistrip::valid_) {
116  }
117 }
static const uint16_t valid_
Definition: Constants.h:17
const std::string & myName() const
static const char mlCommissioning_[]
void addErrorCode(const std::string &error) override
const float & time() const
static const char invalidRefTime_[]
static const float optimumSamplingPoint_
static const uint16_t invalid_
Definition: Constants.h:16
static float refTime_
static int position[264][3]
Definition: ReadPGInfo.cc:289
Log< level::Warning, false > LogWarning
static const char invalidDelayTime_[]

◆ reset()

void ApvTimingAnalysis::reset ( void  )
overridevirtual

◆ time()

const float & ApvTimingAnalysis::time ( ) const
inline

Time of tick mark rising edge [ns].

Definition at line 117 of file ApvTimingAnalysis.h.

References time_.

Referenced by refTime().

117 { return time_; }

Friends And Related Function Documentation

◆ ApvTimingAlgorithm

friend class ApvTimingAlgorithm
friend

Definition at line 25 of file ApvTimingAnalysis.h.

Member Data Documentation

◆ base_

float ApvTimingAnalysis::base_
private

Baseline level of tick mark [ADC].

Definition at line 106 of file ApvTimingAnalysis.h.

Referenced by base(), foundTickMark(), frameFindingThreshold(), isValid(), print(), and reset().

◆ delay_

float ApvTimingAnalysis::delay_
private

Delay required to sync w.r.t. reference tick mark [ns].

Definition at line 100 of file ApvTimingAnalysis.h.

Referenced by delay(), isValid(), print(), refTime(), and reset().

◆ error_

float ApvTimingAnalysis::error_
private

Error on time of tick mark rising edge [ns].

Definition at line 94 of file ApvTimingAnalysis.h.

Referenced by error(), and reset().

◆ frameFindingThreshold_

const float ApvTimingAnalysis::frameFindingThreshold_ = (2. / 3.)
static

Threshold for FED frame finding (fraction of tick height).

Definition at line 85 of file ApvTimingAnalysis.h.

Referenced by frameFindingThreshold().

◆ height_

float ApvTimingAnalysis::height_
private

Height of tick mark [ADC].

Definition at line 103 of file ApvTimingAnalysis.h.

Referenced by foundTickMark(), frameFindingThreshold(), height(), isValid(), print(), and reset().

◆ optimumSamplingPoint_

const float ApvTimingAnalysis::optimumSamplingPoint_ = 15.
static

Optimum sampling point, defined w.r.t. rising edge [ns].

Definition at line 79 of file ApvTimingAnalysis.h.

Referenced by optimumSamplingPoint(), print(), and refTime().

◆ peak_

float ApvTimingAnalysis::peak_
private

Level of tick mark top [ADC].

Definition at line 109 of file ApvTimingAnalysis.h.

Referenced by foundTickMark(), frameFindingThreshold(), isValid(), peak(), print(), and reset().

◆ refTime_

float ApvTimingAnalysis::refTime_ = 1. * sistrip::invalid_
staticprivate

Sampling point of "reference" tick mark [ns].

Definition at line 97 of file ApvTimingAnalysis.h.

Referenced by isValid(), print(), and refTime().

◆ synchronized_

bool ApvTimingAnalysis::synchronized_
private

Checks synchronization to ref time is done only once.

Definition at line 112 of file ApvTimingAnalysis.h.

Referenced by isValid(), refTime(), and reset().

◆ tickMarkHeightThreshold_

const float ApvTimingAnalysis::tickMarkHeightThreshold_ = 50.
static

Threshold defining minimum tick mark height [ADC].

Definition at line 82 of file ApvTimingAnalysis.h.

Referenced by ApvTimingAlgorithm::analyse(), ApvTimingHistosUsingDb::create(), and frameFindingThreshold().

◆ time_

float ApvTimingAnalysis::time_
private

Time of tick mark rising edge [ns].

Definition at line 91 of file ApvTimingAnalysis.h.

Referenced by foundTickMark(), frameFindingThreshold(), isValid(), print(), refTime(), reset(), and time().