13 #include <vxd/dataobjects/VxdID.h>
14 #include <vxd/geometry/GeoCache.h>
15 #include <vxd/geometry/SensorInfoBase.h>
27 class SVDAPVHistograms:
public TObject {
42 enum E_side { VIndex = 0 , UIndex = 1 };
54 auto theView = sensor.at(view);
55 returnValue = theView.at(apv);
57 B2WARNING(
"Unexpected VxdID/view/apv. VxdID: " << (std::string)(vxdID)
69 template<
class ... Types>
70 void fill(
const VxdID& vxdID,
int view,
int apv, Types ... args)
77 template<
class ... Types>
78 void fill(
const VxdID& vxdID,
bool isU,
int apv, Types ... args)
80 int view = isU ? UIndex : VIndex;
90 std::string apv = std::to_string(user_apv);
91 std::string view = isU ?
"U" :
"V" ;
92 base = std::regex_replace(base, std::regex(
"[@]layer") , layer);
93 base = std::regex_replace(base, std::regex(
"[@]ladder"), ladder);
94 base = std::regex_replace(base, std::regex(
"[@]sensor"), sensor);
95 base = std::regex_replace(base, std::regex(
"[@]view") , view);
96 std::string side = isU ?
"P" :
"N" ;
97 base = std::regex_replace(base, std::regex(
"[@]side") , side);
98 base = std::regex_replace(base, std::regex(
"[@]apv") , apv);
106 for (
auto ladder : layer)
107 for (
auto sensor : ladder)
108 for (
auto view : sensor)
109 for (
auto apv : view)
123 typedef std::vector< H* >
t_Views;
131 typedef std::vector< t_SVDLadder >
t_SVDLayer;
134 typedef std::vector< t_SVDLayer >
t_SVD;
148 m_defaultHistogram =
new H(templateAPV);
152 unsigned int layerNumber = layer.getLayerNumber();
153 if (m_histograms.size() <= layerNumber)
154 m_histograms.resize(layerNumber + 1);
156 for (
auto ladder : geoCache.getLadders(layer)) {
157 unsigned int ladderNumber = ladder.getLadderNumber();
158 if (m_histograms[layerNumber].size() <= ladderNumber)
159 m_histograms[layerNumber].resize(ladderNumber + 1);
162 unsigned int sensorNumber = sensor.getSensorNumber();
163 if (m_histograms[layerNumber][ladderNumber].size() <= sensorNumber)
164 m_histograms[layerNumber][ladderNumber].resize(sensorNumber + 1);
165 m_histograms[layerNumber][ladderNumber][sensorNumber].resize(2);
167 for (
int view = VIndex ; view < UIndex + 1; view++) {
169 unsigned int viewNumber = 3;
171 if (m_histograms[layerNumber][ladderNumber][view].size() < viewNumber)
172 m_histograms[layerNumber][ladderNumber][sensorNumber].resize(viewNumber);
173 m_histograms[layerNumber][ladderNumber][sensorNumber][view].resize(nAPV);
174 for (
int apv = 0; apv < nAPV; apv ++) {
177 customize(h , sensor, view, apv);
178 m_histograms[layerNumber][ladderNumber][sensorNumber][view][apv] =
new H(h);
190 bool isU = view == UIndex;
191 std::string name = histogram.GetName();
192 customizeString(name, vxdID, isU, apv);
193 histogram.SetName(name.c_str());
195 std::string title = histogram.GetTitle();
196 customizeString(title, vxdID, isU, apv);
197 histogram.SetTitle(title.c_str());
199 std::string xAxis = histogram.GetXaxis()->GetTitle();
200 customizeString(xAxis, vxdID, isU, apv);
201 histogram.SetXTitle(xAxis.c_str());
203 std::string yAxis = histogram.GetYaxis()->GetTitle();
204 customizeString(yAxis, vxdID, isU, apv);
205 histogram.SetYTitle(yAxis.c_str());
207 std::string zAxis = histogram.GetZaxis()->GetTitle();
208 customizeString(zAxis, vxdID, isU, apv);
209 histogram.SetZTitle(zAxis.c_str());