Belle II Software development
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
19namespace 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
unsigned int getTimeBin(const std::vector< unsigned int > &array, unsigned int value) const
Return time bin for the given time array.
CDCDedxInjectionTime(const std::vector< std::vector< double > > &vinjcalib)
Constructor.
std::vector< std::vector< double > > getConstVector() const
Return vector of all constant vector of payload.
std::vector< double > getMeanVector(const int ring) const
Return dedx mean vector.
std::vector< double > getResoVector(const unsigned int ring) const
Return dedx reso vector.
std::vector< double > getTimeVector(const unsigned int ring) const
Return time 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.
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.
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.