Belle II Software  release-08-01-10
CDCDedxInjectionTime.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #pragma once
10 
11 #include <framework/logging/Logger.h>
12 
13 #include <cmath>
14 #include <iostream>
15 #include <TObject.h>
16 #include <TCanvas.h>
17 #include <TH1F.h>
18 
19 namespace Belle2 {
29  class CDCDedxInjectionTime: public TObject {
30 
31  public:
32 
37 
41  CDCDedxInjectionTime(const std::vector<std::vector<double>>& vinjcalib): m_injectionvar(vinjcalib) {};
42 
47 
48 
53  void printCorrection(std::string svar, std::string sfx) const;
54 
55 
59  std::vector<std::vector<double>> getConstVector() const
60  {
61  return m_injectionvar;
62  };
63 
67  std::vector<double> getTimeVector(const unsigned int ring) const
68  {
69  if (ring > 1) B2ERROR("wrong index for injection ring ");
70  return m_injectionvar[ring * 3];
71  };
72 
76  std::vector<double> getMeanVector(const int ring) const
77  {
78  if (ring < 0 || ring > 1) B2ERROR("wrong index for injection ring ");
79  return m_injectionvar[ring * 3 + 1];
80  };
81 
85  std::vector<double> getResoVector(const unsigned int ring) const
86  {
87  if (ring > 1) B2ERROR("wrong index for injection ring ");
88  return m_injectionvar[ring * 3 + 2];
89  };
90 
95  unsigned int getTimeBin(const std::vector<unsigned int>& array, unsigned int value) const
96  {
97  int nabove, nbelow, middle;
98  nabove = array.size() + 1;
99  nbelow = 0;
100  while (nabove - nbelow > 1) {
101  middle = (nabove + nbelow) / 2;
102  if (value == array[middle - 1]) return middle - 1;
103  if (value < array[middle - 1]) nabove = middle;
104  else nbelow = middle;
105  }
106  return nbelow - 1;
107  }
108 
114  double getCorrection(std::string svar, unsigned int ring, unsigned int time) const;
115 
116 
117  private:
118 
122  std::vector<std::vector<double>> m_injectionvar;
125  };
127 } // end namespace Belle2
dE/dx injection time calibration constants
std::vector< double > getMeanVector(const int ring) const
Return dedx mean vector.
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 > > getConstVector() const
Return vector of all constant vector of payload.
std::vector< double > getResoVector(const unsigned int ring) const
Return dedx reso vector.
CDCDedxInjectionTime()
Default constructor.
void printCorrection(std::string svar, std::string sfx) const
Return dE/dx mean or norm-reso value for the given time and ring.
std::vector< double > getTimeVector(const unsigned int ring) const
Return time vector.
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.
CDCDedxInjectionTime(const std::vector< std::vector< double >> &vinjcalib)
Constructor.
ClassDef(CDCDedxInjectionTime, 1)
ClassDef.
std::vector< std::vector< double > > m_injectionvar
CDC dE/dx injection time payloads for dEdx mean and reso.
Abstract base class for different kinds of events.