Belle II Software development
CDCDedxInjectionTime Class Reference

dE/dx injection time calibration constants More...

#include <CDCDedxInjectionTime.h>

Inheritance 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.
 
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.
 
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.
 
unsigned int getTimeBin (const std::vector< unsigned int > &array, unsigned int value) const
 Return time bin for the given time array.
 
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.
 

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.
 

Detailed Description

dE/dx injection time calibration constants

Definition at line 29 of file CDCDedxInjectionTime.h.

Constructor & Destructor Documentation

◆ CDCDedxInjectionTime() [1/2]

Default constructor.

Definition at line 36 of file CDCDedxInjectionTime.h.

36: m_injectionvar() {};
std::vector< std::vector< double > > m_injectionvar
CDC dE/dx injection time payloads for dEdx mean and reso.

◆ CDCDedxInjectionTime() [2/2]

CDCDedxInjectionTime ( const std::vector< std::vector< double > > &  vinjcalib)
inline

Constructor.

Definition at line 41 of file CDCDedxInjectionTime.h.

41: m_injectionvar(vinjcalib) {};

◆ ~CDCDedxInjectionTime()

~CDCDedxInjectionTime ( )
inline

Destructor.

Definition at line 46 of file CDCDedxInjectionTime.h.

46{};

Member Function Documentation

◆ getConstVector()

std::vector< std::vector< double > > getConstVector ( ) const
inline

Return vector of all constant vector of payload.

Definition at line 59 of file CDCDedxInjectionTime.h.

60 {
61 return m_injectionvar;
62 };

◆ 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.

◆ 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.

86 {
87 if (ring > 1) B2ERROR("wrong index for injection ring ");
88 return m_injectionvar[ring * 3 + 2];
89 };

◆ 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.

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 }

◆ 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.

68 {
69 if (ring > 1) B2ERROR("wrong index for injection ring ");
70 return m_injectionvar[ring * 3];
71 };

◆ 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.

14{
15
16 if (svar != "mean" && svar != "reso") {
17 B2WARNING("wrong variable input, choose mean or reso");
18 return;
19 }
20
21 std::string sring[2] = {"ler", "her"};
22 TCanvas* cdraw = new TCanvas("cdraw", "cdraw", 900, 500);
23 cdraw->cd();
24 cdraw->SetGridy(1);
25
26 for (int ir = 0; ir < 2; ir++) {
27
28 unsigned int iv = ir * 3 + 1 ;
29 if (svar == "reso") iv = ir * 3 + 2 ;
30
31 unsigned int sizev = m_injectionvar[iv].size(); //mean or reso
32 unsigned int sizet = m_injectionvar[ir * 3].size(); //time
33 if (sizev == 0 || sizet == 0) {
34 B2ERROR("empty calibration vector");
35 break;
36 }
37
38 std::vector<unsigned int> tedges(sizet); //time edges array
39 std::copy(m_injectionvar[ir * 3].begin(), m_injectionvar[ir * 3].end(), tedges.begin());
40
41 std::string hname = Form("hconst_%s_%s_%s", svar.data(), sring[ir].data(), sfx.data());
42 std::string title = Form("%s corrections;injection-time (#mu-sec);%s", svar.data(), svar.data());
43 TH1F hconst(hname.data(), title.data(), sizet - 1, 0, sizet - 1);
44
45 for (unsigned int ib = 0; ib < sizev; ib++) {
46
47 double corr = m_injectionvar[iv].at(ib);
48 double ledge = tedges[ib];
49 double uedge = tedges[ib + 1];
50
51 std::string label;
52 if (ledge < 2e4)label = Form("%0.01f-%0.01fK", ledge / 1e3, uedge / 1e3);
53 else if (ledge < 1e5)label = Form("%0.00f-%0.00fK", ledge / 1e3, uedge / 1e3);
54 else label = Form("%0.01f-%0.01fM", ledge / 1e6, uedge / 1e6);
55
56 hconst.SetBinContent(ib + 1, corr);
57 hconst.SetBinError(ib + 1, corr * 0.001);
58 hconst.GetXaxis()->SetBinLabel(ib + 1, Form("%s", label.data()));
59 B2INFO("ring: " << sring[ir] << ", time (" << ledge << "-" << uedge << "), mean: " << corr << "");
60 }
61
62 hconst.SetStats(0);
63 hconst.SetMarkerColor(ir + 1);
64 hconst.SetMarkerSize(1.05);
65 hconst.SetMarkerStyle(24);
66 hconst.GetXaxis()->SetLabelOffset(-0.055);
67 hconst.GetYaxis()->SetRangeUser(0.60, 1.10);
68 if (svar == "reso")hconst.GetYaxis()->SetRangeUser(0.01, 0.20);
69
70 if (ir == 0)hconst.DrawCopy("");
71 else hconst.DrawCopy(" same");
72 }
73
74 cdraw->SaveAs(Form("cdcdedx_timeinject_const_%s_%s.pdf", svar.data(), sfx.data()));
75 delete cdraw;
76
77}

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: