Belle II Software  release-08-01-10
CDCDedxInjectionTime Class Reference

dE/dx injection time calibration constants More...

#include <CDCDedxInjectionTime.h>

Inheritance diagram for CDCDedxInjectionTime:
Collaboration diagram for CDCDedxInjectionTime:

Public Member Functions

 CDCDedxInjectionTime ()
 Default constructor.
 
 CDCDedxInjectionTime (const std::vector< std::vector< double >> &vinjcalib)
 Constructor.
 
 ~CDCDedxInjectionTime ()
 Destructor.
 
void printCorrection (std::string svar, std::string sfx) const
 Return dE/dx mean or norm-reso value for the given time and ring. More...
 
std::vector< std::vector< double > > getConstVector () const
 Return vector of all constant vector of payload.
 
std::vector< double > getTimeVector (const unsigned int ring) const
 Return time vector. More...
 
std::vector< double > getMeanVector (const int ring) const
 Return dedx mean vector. More...
 
std::vector< double > getResoVector (const unsigned int ring) const
 Return dedx reso vector. More...
 
unsigned int getTimeBin (const std::vector< unsigned int > &array, unsigned int value) const
 Return time bin for the given time array. More...
 
double getCorrection (std::string svar, unsigned int ring, unsigned int time) const
 Return dE/dx mean or norm-reso value for the given time and ring. More...
 

Private Member Functions

 ClassDef (CDCDedxInjectionTime, 1)
 ClassDef.
 

Private Attributes

std::vector< std::vector< double > > m_injectionvar
 CDC dE/dx injection time payloads for dEdx mean and reso. More...
 

Detailed Description

dE/dx injection time calibration constants

Definition at line 29 of file CDCDedxInjectionTime.h.

Member Function Documentation

◆ getCorrection()

double getCorrection ( std::string  svar,
unsigned int  ring,
unsigned int  time 
) const

Return dE/dx mean or norm-reso value for the given time and ring.

Parameters
svaris option for mean and reso calibration factor
ringis injection ring number (0/1 for LER/HER)
timeis injection time (large 0-20sec range)

Definition at line 80 of file CDCDedxInjectionTime.cc.

81 {
82  if (svar != "mean" && svar != "reso") {
83  B2ERROR("wrong var input, choose mean or reso");
84  return 1.0;
85  }
86 
87  if (std::isnan(ring) || std::isnan(time))return 1.0;
88 
89  if (ring > 1) {
90  B2ERROR("wrong ring input, choose 0 or 1");
91  return 1.0;
92  }
93 
94  unsigned int iv = ring * 3 + 1 ;
95  if (svar == "reso") iv = ring * 3 + 2 ;
96 
97  unsigned int sizev = m_injectionvar[iv].size(); //mean or reso
98  unsigned int sizet = m_injectionvar[ring * 3].size(); //time
99  if (sizet == 0 || sizev == 0) {
100  B2ERROR("calibration vectors are empty");
101  return 1.0;
102  }
103 
104  std::vector<unsigned int> tedges(sizet); //time edges array
105  std::copy(m_injectionvar[ring * 3].begin(), m_injectionvar[ring * 3].end(), tedges.begin());
106 
107  if (time >= 5e6)time = 5e6 - 10;
108 
109  unsigned int it = getTimeBin(tedges, time);
110  double center = 0.5 * (m_injectionvar[ring * 3].at(it) + m_injectionvar[ring * 3].at(it + 1));
111 
112  //no corr before veto bin (usually one or two starting bin)
113  //intrapolation for entire range except
114  //--extrapolation (for first half and last half of intended bin)
115  int thisbin = it, nextbin = it;
116  if (center != time && it > 0) {
117 
118  if (time < center) {
119  thisbin = it - 1;
120  } else {
121  if (it < sizet - 2)nextbin = it + 1;
122  else thisbin = it - 1;
123  }
124 
125  if (it <= 2) {
126  double diff = m_injectionvar[iv].at(2) - m_injectionvar[iv].at(1) ;
127  if (diff < -0.015) { //difference above 1.0%
128  thisbin = it;
129  if (it == 1) nextbin = it;
130  else nextbin = it + 1;
131  } else {
132  if (it == 1) {
133  thisbin = it;
134  nextbin = it + 1;
135  }
136  }
137  }
138  }
139 
140  double thisdedx = m_injectionvar[iv].at(thisbin);
141  double nextdedx = m_injectionvar[iv].at(nextbin);
142 
143  double thistime = 0.5 * (m_injectionvar[ring * 3].at(thisbin) + m_injectionvar[ring * 3].at(thisbin + 1));
144  double nexttime = 0.5 * (m_injectionvar[ring * 3].at(nextbin) + m_injectionvar[ring * 3].at(nextbin + 1));
145 
146  double newdedx = m_injectionvar[iv].at(it);
147  if (thisbin != nextbin)
148  newdedx = thisdedx + ((nextdedx - thisdedx) / (nexttime - thistime)) * (time - thistime);
149 
150  return newdedx;
151 }
unsigned int getTimeBin(const std::vector< unsigned int > &array, unsigned int value) const
Return time bin for the given time array.
std::vector< std::vector< double > > m_injectionvar
CDC dE/dx injection time payloads for dEdx mean and reso.

◆ getMeanVector()

std::vector<double> getMeanVector ( const int  ring) const
inline

Return dedx mean vector.

Parameters
ringis injection ring number (0/1 for LER/HER)

Definition at line 76 of file CDCDedxInjectionTime.h.

77  {
78  if (ring < 0 || ring > 1) B2ERROR("wrong index for injection ring ");
79  return m_injectionvar[ring * 3 + 1];
80  };

◆ getResoVector()

std::vector<double> getResoVector ( const unsigned int  ring) const
inline

Return dedx reso vector.

Parameters
ringis injection ring number (0/1 for LER/HER)

Definition at line 85 of file CDCDedxInjectionTime.h.

◆ getTimeBin()

unsigned int getTimeBin ( const std::vector< unsigned int > &  array,
unsigned int  value 
) const
inline

Return time bin for the given time array.

Parameters
arrayof time
valueof input time

Definition at line 95 of file CDCDedxInjectionTime.h.

◆ getTimeVector()

std::vector<double> getTimeVector ( const unsigned int  ring) const
inline

Return time vector.

Parameters
ringis injection ring number (0/1 for LER/HER)

Definition at line 67 of file CDCDedxInjectionTime.h.

◆ printCorrection()

void printCorrection ( std::string  svar,
std::string  sfx 
) const

Return dE/dx mean or norm-reso value for the given time and ring.

Parameters
svaris option for printing mean and reso calibration
sfxto add suffix in file save

Definition at line 13 of file CDCDedxInjectionTime.cc.

Member Data Documentation

◆ m_injectionvar

std::vector<std::vector<double> > m_injectionvar
private

CDC dE/dx injection time payloads for dEdx mean and reso.

different for LER and HER vector to store payload values

Definition at line 122 of file CDCDedxInjectionTime.h.


The documentation for this class was generated from the following files: