BOSS
7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
ElectronInterface.cc
Go to the documentation of this file.
1
#include "
ElectronInterface.h
"
2
3
ElectronInterface::ElectronInterface
(){
4
5
// if no files are specified, assume sample is MC (1) and not data (0)
6
m_mcFlag = 1;
7
8
// if no files are specified, assume sample is BESIII (0) and not Belle II (1)
9
m_type = 0;
10
11
// initialize various parameters
12
m_filename =
""
;
13
m_constfilename =
""
;
14
m_nevents = 0;
15
16
// default truncation
17
m_removeLowest = 0.05;
18
m_removeHighest = 0.25;
19
20
// specify whether to take truncated means (0) or perform fits (1)
21
m_fits = 0;
22
}
23
24
void
25
ElectronInterface::SetupFromConfigFile
( std::string configfile ){
26
27
cout <<
"ElectronInterface: setting up from "
<< configfile << endl;
28
29
std::ifstream input(configfile.c_str());
30
31
std::string varname, vartype, line;
32
while
( std::getline(input, line) ){
33
34
// skip comment lines
35
line.erase( std::find( line.begin(), line.end(),
'#'
), line.end() );
36
if
( line.empty() )
continue
;
37
38
// parse the lines in the configuration file
39
std::istringstream iss(line);
40
iss >> vartype;
41
42
// check for a mcFlag
43
if
( vartype ==
"mcFlag"
){
44
iss >> m_mcFlag;
45
continue
;
46
}
47
else
if
( vartype ==
"type"
){
48
iss >> m_type;
49
continue
;
50
}
51
else
if
( vartype ==
"fit"
){
52
iss >> m_fits;
53
continue
;
54
}
55
else
if
( vartype ==
"constfile"
){
56
iss >> m_constfilename;
57
continue
;
58
}
59
else
if
( vartype ==
"lowest"
){
60
iss >> m_removeLowest;
61
continue
;
62
}
63
else
if
( vartype ==
"highest"
){
64
iss >> m_removeHighest;
65
continue
;
66
}
67
else
if
( vartype !=
"electron"
){
// the first word in the line should be the particle type
68
std::cout <<
"ElectronInterface: ERROR: unknown particle type "
<< vartype <<
" - this line will not be read"
<< endl;
69
continue
;
70
}
71
72
// the next word should be the variable type
73
iss >> varname;
74
if
( varname ==
"filename"
)
75
iss >> m_filename;
76
else
if
( varname ==
"nevents"
)
77
iss >> m_nevents;
78
else
if
( varname ==
"docabins"
)
79
iss >> m_docabins;
80
else
if
( varname ==
"upperdoca"
)
81
iss >> m_upperdoca;
82
else
if
( varname ==
"lowerdoca"
)
83
iss >> m_lowerdoca;
84
else
if
( varname ==
"bgbins"
)
85
iss >> m_bgbins;
86
else
if
( varname ==
"upperp"
){
87
iss >> m_upperbg;
88
m_upperbg = m_upperbg/Widget::melectron;
89
}
90
else
if
( varname ==
"lowerp"
){
91
iss >> m_lowerbg;
92
m_lowerbg = m_lowerbg/Widget::melectron;
93
}
94
else
if
( varname ==
"entabins"
)
95
iss >> m_entabins;
96
else
if
( varname ==
"upperenta"
)
97
iss >> m_upperenta;
98
else
if
( varname ==
"lowerenta"
)
99
iss >> m_lowerenta;
100
else
if
( varname ==
"costhbins"
)
101
iss >> m_costhbins;
102
else
{
103
std::cout <<
"ElectronInterface: ERROR: unknown variable type "
<< vartype <<
" - this line will not be read"
<< endl;
104
continue
;
105
}
106
}
107
108
std::cout <<
"ElectronInterface: Done parsing configuration file..."
<< endl;
109
}
110
111
112
void
113
ElectronInterface::SetFileName
( TString newfilename ){
114
m_filename = newfilename;
115
}
116
117
118
void
119
ElectronInterface::GenerateSample
( TString outfilename ){
120
121
std::cout <<
"ElectronInterface: generating electron sample..."
<< std::endl;
122
123
TFile* outfile =
new
TFile(outfilename,
"RECREATE"
);
124
125
// bin the data in run numbers and fit for the mean in each bin
126
ElectronGenerator
egen(100000,2.0,0.2);
127
egen.
generateEvents
(outfile);
128
129
// if we are generating a sample, use it for calibration
130
m_filename = outfilename;
131
}
132
133
134
135
// -------------------- ELECTRON CORRECTIONS --------------------
136
137
void
138
ElectronInterface::RunGains
( TString outfilename ) {
139
140
std::cout <<
"ElectronInterface: getting run gains..."
<< std::endl;
141
142
TFile* outfile =
new
TFile(outfilename,
"RECREATE"
);
143
// make sure the samples exist
144
TFile* testfile =
new
TFile(m_filename);
145
if
( testfile->GetListOfKeys()->IsEmpty() ){
146
cout <<
"\t No electron sample"
<< endl;
147
exit;
148
}
149
testfile->Close();
150
151
// bin the data in run numbers and fit for the mean in each bin
152
ElectronCalibration
ecalib(m_filename, m_constfilename, m_mcFlag, m_type, m_fits, m_docabins, m_upperdoca, m_lowerdoca, m_entabins, m_upperenta, m_lowerenta, m_costhbins);
153
ecalib.
fitRunGains
(outfile);
154
155
// plot the run gains
156
ecalib.
plotRunGains
(outfilename);
157
}
158
159
void
160
ElectronInterface::TwoDCorrection
( TString outfilename ) {
161
162
std::cout <<
"WidgetInterface: getting two dimensional correction..."
<< std::endl;
163
164
TFile* outfile =
new
TFile(outfilename,
"RECREATE"
);
165
// make sure the samples exist
166
TFile* testfile =
new
TFile(m_filename);
167
if
( testfile->GetListOfKeys()->IsEmpty() ){
168
cout <<
"\t No electron sample"
<< endl;
169
exit;
170
}
171
testfile->Close();
172
173
// bin the data in doca and entrance angle and fit for the mean in each bin
174
ElectronCalibration
ecalib(m_filename, m_constfilename, m_mcFlag, m_type, m_fits, m_docabins, m_upperdoca, m_lowerdoca, m_entabins, m_upperenta, m_lowerenta, m_costhbins);
175
ecalib.
TwoDCorrection
(outfile);
176
177
outfile->Close();
178
}
179
180
void
181
ElectronInterface::SaturationCorrection
( TString outfilename ) {
182
183
std::cout <<
"WidgetInterface: doing electron saturation correction..."
<< std::endl;
184
185
TFile* outfile =
new
TFile(outfilename,
"RECREATE"
);
186
// make sure the samples exist
187
TFile* testfile =
new
TFile(m_filename);
188
if
( testfile->GetListOfKeys()->IsEmpty() ){
189
cout <<
"\t No electron sample"
<< endl;
190
exit;
191
}
192
testfile->Close();
193
194
// bin the data in doca and entrance angle and fit for the mean in each bin
195
ElectronCalibration
ecalib(m_filename, m_constfilename, m_mcFlag, m_type, m_fits, m_docabins, m_upperdoca, m_lowerdoca, m_entabins, m_upperenta, m_lowerenta, m_costhbins);
196
ecalib.
SaturationCorrection
(outfile);
197
198
outfile->Close();
199
}
200
201
void
202
ElectronInterface::ApplyCorrections
( TString outfilename ) {
203
204
std::cout <<
"WidgetInterface: applying electron corrections..."
<< std::endl;
205
206
TFile* outfile =
new
TFile(outfilename,
"RECREATE"
);
207
// make sure the samples exist
208
TFile* testfile =
new
TFile(m_filename);
209
if
( testfile->GetListOfKeys()->IsEmpty() ){
210
cout <<
"\t No electron sample"
<< endl;
211
exit;
212
}
213
testfile->Close();
214
215
// bin the data in doca and entrance angle and fit for the mean in each bin
216
ElectronCorrection
ecor(m_constfilename,m_filename,m_removeLowest,m_removeHighest);
217
ecor.
process
(outfile);
218
219
outfile->Close();
220
}
ElectronInterface.h
ElectronCalibration
Definition
ElectronCalibration.h:45
ElectronCalibration::fitRunGains
void fitRunGains(TFile *outfile)
Definition
ElectronWidget/ElectronCalibration.cc:34
ElectronCalibration::TwoDCorrection
void TwoDCorrection(TFile *outfile)
Definition
ElectronWidget/ElectronCalibration.cc:201
ElectronCalibration::plotRunGains
void plotRunGains(TString filename)
Definition
ElectronWidget/ElectronCalibration.cc:172
ElectronCalibration::SaturationCorrection
void SaturationCorrection(TFile *oufile)
Definition
ElectronWidget/ElectronCalibration.cc:461
ElectronCorrection
Definition
ElectronCorrection.h:19
ElectronCorrection::process
void process(TFile *outfile)
Definition
ElectronWidget/ElectronCorrection.cc:23
ElectronGenerator
Definition
ElectronGenerator.h:31
ElectronGenerator::generateEvents
void generateEvents(TFile *outfile)
Definition
ElectronGenerator.cc:16
ElectronInterface::SetupFromConfigFile
void SetupFromConfigFile(std::string configfile)
Definition
ElectronInterface.cc:25
ElectronInterface::RunGains
void RunGains(TString outfilename)
Definition
ElectronInterface.cc:138
ElectronInterface::ApplyCorrections
void ApplyCorrections(TString outfile)
Definition
ElectronInterface.cc:202
ElectronInterface::SaturationCorrection
void SaturationCorrection(TString outfilename)
Definition
ElectronInterface.cc:181
ElectronInterface::SetFileName
void SetFileName(TString newfilename)
Definition
ElectronInterface.cc:113
ElectronInterface::ElectronInterface
ElectronInterface()
Definition
ElectronInterface.cc:3
ElectronInterface::TwoDCorrection
void TwoDCorrection(TString outfilename)
Definition
ElectronInterface.cc:160
ElectronInterface::GenerateSample
void GenerateSample(TString outfile)
Definition
ElectronInterface.cc:119
7.1.2
Mdc
DedxCalibAlg
DedxCalibAlg-00-02-01
share
template
HadronCalib
Widget
Widget
ElectronWidget
ElectronInterface.cc
Generated by
1.12.0