13 #include <vxd/dataobjects/VxdID.h>
14 #include <vxd/geometry/GeoCache.h>
15 #include <vxd/geometry/SensorInfoBase.h>
27 class SVDHistograms:
public TObject {
37 templateHisto, templateHisto)
47 const H& templateU456,
const H& templateV456);
54 enum E_side { VIndex = 0 , UIndex = 1 };
66 returnValue = sensor.at(view);
68 B2WARNING(
"Unexpected VxdID /view. VxdID: " << (std::string)(vxdID)
69 <<
" view : " << view);
79 template<
class ... Types>
80 void fill(
const VxdID& vxdID,
int view, Types ... args)
87 template<
class ... Types>
88 void fill(
const VxdID& vxdID,
bool isU, Types ... args)
90 int view = isU ? UIndex : VIndex;
100 std::string view = isU ?
"U" :
"V" ;
101 base = std::regex_replace(base, std::regex(
"[@]layer") , layer);
102 base = std::regex_replace(base, std::regex(
"[@]ladder"), ladder);
103 base = std::regex_replace(base, std::regex(
"[@]sensor"), sensor);
104 base = std::regex_replace(base, std::regex(
"[@]view") , view);
105 std::string side = isU ?
"P" :
"N" ;
106 base = std::regex_replace(base, std::regex(
"[@]side") , side);
114 for (
auto ladder : layer)
115 for (
auto sensor : ladder)
116 for (
auto view : sensor)
135 typedef std::vector< t_SVDLadder >
t_SVDLayer;
138 typedef std::vector< t_SVDLayer >
t_SVD;
152 const H& templateU456,
const H& templateV456)
154 m_defaultHistogram =
new H(templateU3);
158 unsigned int layerNumber = layer.getLayerNumber();
159 if (m_histograms.size() <= layerNumber)
160 m_histograms.resize(layerNumber + 1);
162 for (
auto ladder : geoCache.getLadders(layer)) {
163 unsigned int ladderNumber = ladder.getLadderNumber();
164 if (m_histograms[layerNumber].size() <= ladderNumber)
165 m_histograms[layerNumber].resize(ladderNumber + 1);
168 unsigned int sensorNumber = sensor.getSensorNumber();
169 if (m_histograms[layerNumber][ladderNumber].size() <= sensorNumber)
170 m_histograms[layerNumber][ladderNumber].resize(sensorNumber + 1);
171 m_histograms[layerNumber][ladderNumber][sensorNumber].resize(2);
173 for (
int view = VIndex ; view < UIndex + 1; view++) {
174 H h = layerNumber == 3 && view == UIndex ? templateU3 :
175 layerNumber == 3 && view == VIndex ? templateV3 :
176 view == UIndex ? templateU456 : templateV456 ;
177 customize(h , sensor, view);
178 m_histograms[layerNumber][ladderNumber][sensorNumber][view] =
new H(h);
189 bool isU = view == UIndex;
190 std::string name = histogram.GetName();
191 customizeString(name, vxdID, isU);
192 histogram.SetName(name.c_str());
194 std::string title = histogram.GetTitle();
195 customizeString(title, vxdID, isU);
196 histogram.SetTitle(title.c_str());
198 std::string xAxis = histogram.GetXaxis()->GetTitle();
199 customizeString(xAxis, vxdID, isU);
200 histogram.SetXTitle(xAxis.c_str());
202 std::string yAxis = histogram.GetYaxis()->GetTitle();
203 customizeString(yAxis, vxdID, isU);
204 histogram.SetYTitle(yAxis.c_str());
206 std::string zAxis = histogram.GetZaxis()->GetTitle();
207 customizeString(zAxis, vxdID, isU);
208 histogram.SetZTitle(zAxis.c_str());