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)
124 for (
auto& ladder : layer)
125 for (
auto& sensor : ladder)
126 for (
auto& view : sensor)
143 typedef std::vector< t_SVDLadder >
t_SVDLayer;
146 typedef std::vector< t_SVDLayer >
t_SVD;
160 const H& templateU456,
const H& templateV456)
162 m_defaultHistogram =
new H(templateU3);
166 unsigned int layerNumber = layer.getLayerNumber();
167 if (m_histograms.size() <= layerNumber)
168 m_histograms.resize(layerNumber + 1);
170 for (
auto ladder : geoCache.getLadders(layer)) {
171 unsigned int ladderNumber = ladder.getLadderNumber();
172 if (m_histograms[layerNumber].size() <= ladderNumber)
173 m_histograms[layerNumber].resize(ladderNumber + 1);
176 unsigned int sensorNumber = sensor.getSensorNumber();
177 if (m_histograms[layerNumber][ladderNumber].size() <= sensorNumber)
178 m_histograms[layerNumber][ladderNumber].resize(sensorNumber + 1);
179 m_histograms[layerNumber][ladderNumber][sensorNumber].resize(2);
181 for (
int view = VIndex ; view < UIndex + 1; view++) {
182 H h = layerNumber == 3 && view == UIndex ? templateU3 :
183 layerNumber == 3 && view == VIndex ? templateV3 :
184 view == UIndex ? templateU456 : templateV456 ;
185 customize(h , sensor, view);
186 m_histograms[layerNumber][ladderNumber][sensorNumber][view] =
new H(h);
197 bool isU = view == UIndex;
198 std::string name = histogram.GetName();
199 customizeString(name, vxdID, isU);
200 histogram.SetName(name.c_str());
202 std::string title = histogram.GetTitle();
203 customizeString(title, vxdID, isU);
204 histogram.SetTitle(title.c_str());
206 std::string xAxis = histogram.GetXaxis()->GetTitle();
207 customizeString(xAxis, vxdID, isU);
208 histogram.SetXTitle(xAxis.c_str());
210 std::string yAxis = histogram.GetYaxis()->GetTitle();
211 customizeString(yAxis, vxdID, isU);
212 histogram.SetYTitle(yAxis.c_str());
214 std::string zAxis = histogram.GetZaxis()->GetTitle();
215 customizeString(zAxis, vxdID, isU);
216 histogram.SetZTitle(zAxis.c_str());