1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#include "CalibTracker/SiStripLorentzAngle/interface/LA_Filler_Fitter.h"
#include "CalibTracker/SiStripCommon/interface/TTREE_FOREACH_ENTRY.hh"
#include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
#include <cmath>
void LA_Filler_Fitter::fill(TTree* tree, Book& book) const {
TTREE_FOREACH_ENTRY(tree) {
TFE_MAX(maxEvents_);
TFE_PRINTSTATUS;
std::vector<unsigned> PLEAF(tsostrackmulti, tree);
std::vector<unsigned> PLEAF(clusterdetid, tree);
std::vector<unsigned> PLEAF(clusterwidth, tree);
std::vector<float> PLEAF(clustervariance, tree);
std::vector<float> PLEAF(tsosdriftx, tree);
std::vector<float> PLEAF(tsosdriftz, tree);
std::vector<float> PLEAF(tsoslocaltheta, tree);
std::vector<float> PLEAF(tsoslocalphi, tree);
std::vector<float> PLEAF(tsosglobalZofunitlocalY, tree);
const unsigned N(clusterdetid.size());
std::vector<float> BdotY(N, 0);
if (!ensembleBins_) {
std::vector<float> PLEAF(tsosBdotY, tree);
swap(BdotY, tsosBdotY);
}
std::vector<float> localy(N, 0);
if (localYbin_) {
std::vector<float> PLEAF(tsoslocaly, tree);
swap(localy, tsoslocaly);
}
std::vector<unsigned> seedstrip(N, 0);
if (stripsPerBin_) {
std::vector<unsigned> PLEAF(clusterseedstrip, tree);
swap(seedstrip, clusterseedstrip);
}
for (unsigned i = 0; i < N; i++) {
const SiStripDetId detid(clusterdetid[i]);
if (tsostrackmulti[i] != 1 ||
(detid.subDetector() != SiStripDetId::TIB && detid.subDetector() != SiStripDetId::TOB))
continue;
const int sign = tsosglobalZofunitlocalY[i] < 0 ? -1 : 1;
const float tthetaL = sign * tsosdriftx[i] / tsosdriftz[i];
const float tthetaT = sign * tan(tsoslocaltheta[i]) * cos(tsoslocalphi[i]);
fill_one_cluster(book,
granularity(detid, tthetaL, TFE_index, localy[i], seedstrip[i] % 128),
clusterwidth[i],
clustervariance[i],
tthetaL,
tthetaT,
fabs(BdotY[i]));
}
}
}
void LA_Filler_Fitter::fill_one_cluster(Book& book,
const poly<std::string>& gran,
const unsigned width,
const float variance,
const float tthetaL,
const float tthetaT,
const float BdotY) const {
book.fill(tthetaL, gran + "_reconstruction", 360, -1.0, 1.0);
book.fill(tthetaT - tthetaL, gran + allAndOne(width), 360, -1.0, 1.0);
book.fill(tthetaT - tthetaL, variance, gran + varWidth(width), 360, -1.0, 1.0);
if (methods_ & WIDTH)
book.fill(tthetaT, width, gran + method(WIDTH), 81, -0.6, 0.6);
if (!ensembleBins_) {
book.fill(BdotY, gran + "_field", 101, 1, 5);
book.fill(width, gran + "_width", 10, 0, 10);
}
}
poly<std::string> LA_Filler_Fitter::allAndOne(const unsigned width) const {
poly<std::string> a1("_all");
if (width == 1)
a1 *= "_w1";
return a1;
}
poly<std::string> LA_Filler_Fitter::varWidth(const unsigned width) const {
poly<std::string> vw;
vw++;
if (width == 2 && methods_ & (AVGV2 | RMSV2))
vw *= method(AVGV2, false);
if (width == 3 && methods_ & (AVGV3 | RMSV3))
vw *= method(AVGV3, false);
return vw;
}
poly<std::string> LA_Filler_Fitter::granularity(const SiStripDetId detid,
const float tthetaL,
const Long64_t TFE_index,
const float localy,
const unsigned apvstrip) const {
poly<std::string> gran;
gran += subdetLabel(detid);
if (byLayer_)
gran *= layerLabel(detid);
if (byModule_)
gran *= moduleLabel(detid);
if (localYbin_)
gran += (localy < 0 ? "_yM" : "_yP") + std::to_string(abs((int)(localy / localYbin_ + (localy < 0 ? -1 : 0))));
if (stripsPerBin_)
gran += "_strip" +
std::to_string(
(unsigned)((0.5 + ((apvstrip / 64) ? (127 - apvstrip) : apvstrip) / stripsPerBin_) * stripsPerBin_));
if (ensembleBins_) {
gran +=
"_ensembleBin" + std::to_string((int)(ensembleBins_ * (tthetaL - ensembleLow_) / (ensembleUp_ - ensembleLow_)));
gran += "";
if (ensembleSize_)
gran *= "_sample" + std::to_string(TFE_index % ensembleSize_);
}
return gran;
}
std::string LA_Filler_Fitter::subdetLabel(const SiStripDetId detid) {
return detid.subDetector() == SiStripDetId::TOB ? "TOB" : "TIB";
}
std::string LA_Filler_Fitter::moduleLabel(const SiStripDetId detid) {
return subdetLabel(detid) + "_module" + std::to_string(detid());
}
std::string LA_Filler_Fitter::layerLabel(const SiStripDetId detid) const {
const bool isTIB = detid.subdetId() == StripSubdetector::TIB;
unsigned layer = isTIB ? tTopo_->tibLayer(detid) : tTopo_->tobLayer(detid);
bool stereo = isTIB ? tTopo_->tibStereo(detid) : tTopo_->tobStereo(detid);
return subdetLabel(detid) + "_layer" + std::to_string(layer) + (stereo ? "s" : "a");
}
|