12 #include <tracking/modules/VXDOverlaps/OverlapResidualsModule.h>
13 #include <framework/datastore/StoreArray.h>
14 #include <framework/gearbox/Unit.h>
15 #include <framework/core/Environment.h>
16 #include <svd/dataobjects/SVDCluster.h>
17 #include <svd/dataobjects/SVDTrueHit.h>
18 #include <vxd/dataobjects/VxdID.h>
19 #include <vxd/geometry/GeoCache.h>
20 #include <vxd/geometry/SensorInfoBase.h>
21 #include <tracking/dataobjects/RecoTrack.h>
22 #include <tracking/dataobjects/RecoHitInformation.h>
23 #include <genfit/TrackPoint.h>
25 #include <TDirectory.h>
45 setDescription(
"The module studies consecutive hits in overlapping sensors of a same VXD layer, and the differences of their residuals, to monitor the detector alignment.");
47 addParam(
"recoTracksStoreArrayName", m_recoTracksStoreArrayName,
"StoreArray name of the input and output RecoTracks.",
48 m_recoTracksStoreArrayName);
50 addParam(
"ExpertLevel", m_ExpertLevel,
51 "If set, enables the production of TTrees containing low level information on PXD and SVD overlaps",
false);
57 recoTracks.isOptional();
65 TDirectory* oldDir = gDirectory;
66 TDirectory* ResDir = oldDir->mkdir(
"Monitoring_VXDOverlaps");
69 h_U_DeltaRes =
new TH1F(
"h_U_DeltaRes",
"Histrogram of residual difference #Delta res_{u} for overlapping hits", 100, -1000, 1000);
70 h_U_DeltaRes->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
71 h_U_DeltaRes->GetYaxis()->SetTitle(
"counts");
72 h_V_DeltaRes =
new TH1F(
"h_V_DeltaRes",
"Histrogram of residual difference #Delta res_{v} for overlapping hits", 100, -1000, 1000);
73 h_V_DeltaRes->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
74 h_V_DeltaRes->GetYaxis()->SetTitle(
"counts");
75 h_U_DeltaRes_PXD =
new TH1F(
"h_U_DeltaRes_PXD",
"Histrogram of residual difference #Delta res_{u} for overlapping PXD hits", 100,
77 h_U_DeltaRes_PXD->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
78 h_U_DeltaRes_PXD->GetYaxis()->SetTitle(
"counts");
79 h_U_DeltaRes_PXD_Lyr1 =
new TH1F(
"h_U_DeltaRes_PXD_Lyr1",
80 "Layer1: histrogram of residual difference #Delta res_{u} for overlapping PXD hits", 100, -1000, 1000);
81 h_U_DeltaRes_PXD_Lyr1->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
82 h_U_DeltaRes_PXD_Lyr1->GetYaxis()->SetTitle(
"counts");
83 h_U_DeltaRes_PXD_Lyr2 =
new TH1F(
"h_U_DeltaRes_PXD_Lyr2",
84 "Layer 2: hstrogram of residual difference #Delta res_{u} for overlapping PXD hits", 100, -1000, 1000);
85 h_U_DeltaRes_PXD_Lyr2->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
86 h_U_DeltaRes_PXD_Lyr2->GetYaxis()->SetTitle(
"counts");
87 h_V_DeltaRes_PXD =
new TH1F(
"h_V_DeltaRes_PXD",
"Histrogram of residual difference #Delta res_{v} for overlapping PXD hits", 100,
89 h_V_DeltaRes_PXD->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
90 h_V_DeltaRes_PXD->GetYaxis()->SetTitle(
"counts");
91 h_V_DeltaRes_PXD_Lyr1 =
new TH1F(
"h_V_DeltaRes_PXD_Lyr1",
92 "Layer 1: histrogram of residual difference #Delta res_{v} for overlapping PXD hits", 100, -1000, 1000);
93 h_V_DeltaRes_PXD_Lyr1->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
94 h_V_DeltaRes_PXD_Lyr1->GetYaxis()->SetTitle(
"counts");
95 h_V_DeltaRes_PXD_Lyr2 =
new TH1F(
"h_V_DeltaRes_PXD_Lyr2",
96 "Layer 2: histrogram of residual difference #Delta res_{v} for overlapping PXD hits", 100, -1000, 1000);
97 h_V_DeltaRes_PXD_Lyr2->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
98 h_V_DeltaRes_PXD_Lyr2->GetYaxis()->SetTitle(
"counts");
99 h_U_DeltaRes_SVD =
new TH1F(
"h_U_DeltaRes_SVD",
"Histrogram of residual difference #Delta res_{u} for overlapping SVD hits", 100,
101 h_U_DeltaRes_SVD->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
102 h_U_DeltaRes_SVD->GetYaxis()->SetTitle(
"counts");
103 h_U_DeltaRes_SVD_Lyr3 =
new TH1F(
"h_U_DeltaRes_SVD_Lyr3",
104 "Layer 3: histrogram of residual difference #Delta res_{u} for overlapping SVD hits", 100, -1000, 1000);
105 h_U_DeltaRes_SVD_Lyr3->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
106 h_U_DeltaRes_SVD_Lyr3->GetYaxis()->SetTitle(
"counts");
107 h_U_DeltaRes_SVD_Lyr4 =
new TH1F(
"h_U_DeltaRes_SVD_Lyr4",
108 "Layer 4: histrogram of residual difference #Delta res_{u} for overlapping SVD hits", 100, -1000, 1000);
109 h_U_DeltaRes_SVD_Lyr4->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
110 h_U_DeltaRes_SVD_Lyr4->GetYaxis()->SetTitle(
"counts");
111 h_U_DeltaRes_SVD_Lyr5 =
new TH1F(
"h_U_DeltaRes_SVD_Lyr5",
112 "Layer 5: histrogram of residual difference #Delta res_{u} for overlapping SVD hits", 100, -1000, 1000);
113 h_U_DeltaRes_SVD_Lyr5->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
114 h_U_DeltaRes_SVD_Lyr5->GetYaxis()->SetTitle(
"counts");
115 h_U_DeltaRes_SVD_Lyr6 =
new TH1F(
"h_U_DeltaRes_SVD_Lyr6",
116 "Layer 6: histrogram of residual difference #Delta res_{u} for overlapping SVD hits", 100, -1000, 1000);
117 h_U_DeltaRes_SVD_Lyr6->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
118 h_U_DeltaRes_SVD_Lyr6->GetYaxis()->SetTitle(
"counts");
119 h_V_DeltaRes_SVD =
new TH1F(
"h_V_DeltaRes_SVD",
"Histrogram of residual difference #Delta res_{v} for overlapping SVD hits", 100,
121 h_V_DeltaRes_SVD->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
122 h_V_DeltaRes_SVD->GetYaxis()->SetTitle(
"counts");
123 h_V_DeltaRes_SVD_Lyr3 =
new TH1F(
"h_V_DeltaRes_SVD_Lyr3",
124 "Layer 3: histrogram of residual difference #Delta res_{v} for overlapping SVD hits", 100, -1000, 1000);
125 h_V_DeltaRes_SVD_Lyr3->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
126 h_V_DeltaRes_SVD_Lyr3->GetYaxis()->SetTitle(
"counts");
127 h_V_DeltaRes_SVD_Lyr4 =
new TH1F(
"h_V_DeltaRes_SVD_Lyr4",
128 "Layer 4: histrogram of residual difference #Delta res_{v} for overlapping SVD hits", 100, -1000, 1000);
129 h_V_DeltaRes_SVD_Lyr4->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
130 h_V_DeltaRes_SVD_Lyr4->GetYaxis()->SetTitle(
"counts");
131 h_V_DeltaRes_SVD_Lyr5 =
new TH1F(
"h_V_DeltaRes_SVD_Lyr5",
132 "Layer 5: histrogram of residual difference #Delta res_{v} for overlapping SVD hits", 100, -1000, 1000);
133 h_V_DeltaRes_SVD_Lyr5->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
134 h_V_DeltaRes_SVD_Lyr5->GetYaxis()->SetTitle(
"counts");
135 h_V_DeltaRes_SVD_Lyr6 =
new TH1F(
"h_V_DeltaRes_SVD_Lyr6",
136 "Layer 6: histrogram of residual difference #Delta res_{v} for overlapping SVD hits", 100, -1000, 1000);
137 h_V_DeltaRes_SVD_Lyr6->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
138 h_V_DeltaRes_SVD_Lyr6->GetYaxis()->SetTitle(
"counts");
139 h_SVDstrips_Mult =
new TH1F(
"h_SVDstrips_Mult",
"SVD strips multipicity for SVD clusters in overlapping sensors", 15, 0.5, 15.5);
140 h_SVDstrips_Mult->GetXaxis()->SetTitle(
"N. of SVD strips contributing to the cluster");
141 h_SVDstrips_Mult->GetYaxis()->SetTitle(
"counts");
143 h_DeltaResUPhi_Lyr1 =
new TH2F(
"h_DeltaResUPhi_Lyr1",
"Layer 1: #Delta res_{u} vs #phi", 200, -3.4, 3.4, 100, -200, 200);
144 h_DeltaResUPhi_Lyr1->GetXaxis()->SetTitle(
"#phi(rad)");
145 h_DeltaResUPhi_Lyr1->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
146 h_DeltaResUPhi_Lyr2 =
new TH2F(
"h_DeltaResUPhi_Lyr2",
"Layer 2: #Delta res_{u} vs #phi", 200, -3.4, 3.4, 100, -200, 200);
147 h_DeltaResUPhi_Lyr2->GetXaxis()->SetTitle(
"#phi(rad)");
148 h_DeltaResUPhi_Lyr2->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
149 h_DeltaResUPhi_Lyr3 =
new TH2F(
"h_DeltaResUPhi_Lyr3",
"Layer 3: #Delta res_{u} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
150 h_DeltaResUPhi_Lyr3->GetXaxis()->SetTitle(
"#phi(rad)");
151 h_DeltaResUPhi_Lyr3->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
152 h_DeltaResUPhi_Lyr4 =
new TH2F(
"h_DeltaResUPhi_Lyr4",
"Layer 4: #Delta res_{u} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
153 h_DeltaResUPhi_Lyr4->GetXaxis()->SetTitle(
"#phi(rad)");
154 h_DeltaResUPhi_Lyr4->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
155 h_DeltaResUPhi_Lyr5 =
new TH2F(
"h_DeltaResUPhi_Lyr5",
"Layer 5: #Delta res_{u} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
156 h_DeltaResUPhi_Lyr5->GetXaxis()->SetTitle(
"#phi(rad)");
157 h_DeltaResUPhi_Lyr5->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
158 h_DeltaResUPhi_Lyr6 =
new TH2F(
"h_DeltaResUPhi_Lyr6",
"Layer 6: #Delta res_{u} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
159 h_DeltaResUPhi_Lyr6->GetXaxis()->SetTitle(
"#phi(rad)");
160 h_DeltaResUPhi_Lyr6->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
162 h_DeltaResUz_Lyr1 =
new TH2F(
"h_DeltaResUz_Lyr1",
"Layer 1: #Delta res_{u} vs z", 100, -4, 8, 100, -200, 200);
163 h_DeltaResUz_Lyr1->GetXaxis()->SetTitle(
"z (cm)");
164 h_DeltaResUz_Lyr1->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
165 h_DeltaResUz_Lyr2 =
new TH2F(
"h_DeltaResUz_Lyr2",
"Layer 2: #Delta res_{u} vs z", 100, -10, 15, 100, -200, 200);
166 h_DeltaResUz_Lyr2->GetXaxis()->SetTitle(
"z (cm)");
167 h_DeltaResUz_Lyr2->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
168 h_DeltaResUz_Lyr3 =
new TH2F(
"h_DeltaResUz_Lyr3",
"Layer 3: #Delta res_{u} vs z", 250, -15, 20, 100, -1000, 1000);
169 h_DeltaResUz_Lyr3->GetXaxis()->SetTitle(
"z (cm)");
170 h_DeltaResUz_Lyr3->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
171 h_DeltaResUz_Lyr4 =
new TH2F(
"h_DeltaResUz_Lyr4",
"Layer 4: #Delta res_{u} vs z", 250, -20, 25, 100, -1000, 1000);
172 h_DeltaResUz_Lyr4->GetXaxis()->SetTitle(
"z (cm)");
173 h_DeltaResUz_Lyr4->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
174 h_DeltaResUz_Lyr5 =
new TH2F(
"h_DeltaResUz_Lyr5",
"Layer 5: #Delta res_{u} vs z", 250, -25, 35, 100, -1000, 1000);
175 h_DeltaResUz_Lyr5->GetXaxis()->SetTitle(
"z (cm)");
176 h_DeltaResUz_Lyr5->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
177 h_DeltaResUz_Lyr6 =
new TH2F(
"h_DeltaResUz_Lyr6",
"Layer 6: #Delta res_{u} vs z", 250, -30, 45, 100, -1000, 1000);
178 h_DeltaResUz_Lyr6->GetXaxis()->SetTitle(
"z (cm)");
179 h_DeltaResUz_Lyr6->GetYaxis()->SetTitle(
"#Delta res_{u} (#mum)");
181 h_DeltaResVPhi_Lyr1 =
new TH2F(
"h_DeltaResVPhi_Lyr1",
"Layer 1: #Delta res_{v} vs #phi", 200, -3.4, 3.4, 100, -200, 200);
182 h_DeltaResVPhi_Lyr1->GetXaxis()->SetTitle(
"#phi(rad)");
183 h_DeltaResVPhi_Lyr1->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
184 h_DeltaResVPhi_Lyr2 =
new TH2F(
"h_DeltaResVPhi_Lyr2",
"Layer 2: #Delta res_{v} vs #phi", 200, -3.4, 3.4, 100, -200, 200);
185 h_DeltaResVPhi_Lyr2->GetXaxis()->SetTitle(
"#phi(rad)");
186 h_DeltaResVPhi_Lyr2->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
187 h_DeltaResVPhi_Lyr3 =
new TH2F(
"h_DeltaResVPhi_Lyr3",
"Layer 3: #Delta res_{v} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
188 h_DeltaResVPhi_Lyr3->GetXaxis()->SetTitle(
"#phi(rad)");
189 h_DeltaResVPhi_Lyr3->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
190 h_DeltaResVPhi_Lyr4 =
new TH2F(
"h_DeltaResVPhi_Lyr4",
"Layer 4: #Delta res_{v} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
191 h_DeltaResVPhi_Lyr4->GetXaxis()->SetTitle(
"#phi(rad)");
192 h_DeltaResVPhi_Lyr4->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
193 h_DeltaResVPhi_Lyr5 =
new TH2F(
"h_DeltaResVPhi_Lyr5",
"Layer 5: #Delta res_{v} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
194 h_DeltaResVPhi_Lyr5->GetXaxis()->SetTitle(
"#phi(rad)");
195 h_DeltaResVPhi_Lyr5->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
196 h_DeltaResVPhi_Lyr6 =
new TH2F(
"h_DeltaResVPhi_Lyr6",
"Layer 6: #Delta res_{v} vs #phi", 200, -3.4, 3.4, 100, -1000, 1000);
197 h_DeltaResVPhi_Lyr6->GetXaxis()->SetTitle(
"#phi(rad)");
198 h_DeltaResVPhi_Lyr6->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
200 h_DeltaResVz_Lyr1 =
new TH2F(
"h_DeltaResVz_Lyr1",
"Layer 1: #Delta res_{v} vs z", 100, -4, 8, 100, -200, 200);
201 h_DeltaResVz_Lyr1->GetXaxis()->SetTitle(
"z (cm)");
202 h_DeltaResVz_Lyr1->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
203 h_DeltaResVz_Lyr2 =
new TH2F(
"h_DeltaResVz_Lyr2",
"Layer 2: #Delta res_{v} vs z", 100, -10, 15, 100, -200, 200);
204 h_DeltaResVz_Lyr2->GetXaxis()->SetTitle(
"z (cm)");
205 h_DeltaResVz_Lyr2->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
206 h_DeltaResVz_Lyr3 =
new TH2F(
"h_DeltaResVz_Lyr3",
"Layer 3: #Delta res_{v} vs z", 250, -15, 20, 100, -1000, 1000);
207 h_DeltaResVz_Lyr3->GetXaxis()->SetTitle(
"z (cm)");
208 h_DeltaResVz_Lyr3->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
209 h_DeltaResVz_Lyr4 =
new TH2F(
"h_DeltaResVz_Lyr4",
"Layer 4: #Delta res_{v} vs z", 250, -20, 25, 100, -1000, 1000);
210 h_DeltaResVz_Lyr4->GetXaxis()->SetTitle(
"z (cm)");
211 h_DeltaResVz_Lyr4->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
212 h_DeltaResVz_Lyr5 =
new TH2F(
"h_DeltaResVz_Lyr5",
"Layer 5: #Delta res_{v} vs z", 250, -25, 35, 100, -1000, 1000);
213 h_DeltaResVz_Lyr5->GetXaxis()->SetTitle(
"z (cm)");
214 h_DeltaResVz_Lyr5->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
215 h_DeltaResVz_Lyr6 =
new TH2F(
"h_DeltaResVz_Lyr6",
"Layer 6: #Delta res_{v} vs z", 250, -30, 45, 100, -1000, 1000);
216 h_DeltaResVz_Lyr6->GetXaxis()->SetTitle(
"z (cm)");
217 h_DeltaResVz_Lyr6->GetYaxis()->SetTitle(
"#Delta res_{v} (#mum)");
219 for (
int i = 1; i < 5; i++) {
221 TString h_name_U =
"h_U_Cl1Cl2_" + std::to_string(i);
222 TString h_name_V =
"h_V_Cl1Cl2_" + std::to_string(i);
223 TString title_U =
"#Delta res_{u}: SVDClusterSize_1 x SVDClusterSize_2 = " + std::to_string(i);
224 TString title_V =
"#Delta res_{v}: SVDClusterSize_1 x SVDClusterSize_2 = " + std::to_string(i);
225 h_U_Cl1Cl2_DeltaRes[i] =
new TH1F(h_name_U, title_U, 100, -1000, 1000);
226 h_U_Cl1Cl2_DeltaRes[i]->GetXaxis()->SetTitle(
"#Delta res_{u} (#mum)");
227 h_U_Cl1Cl2_DeltaRes[i]->GetYaxis()->SetTitle(
"counts");
228 h_V_Cl1Cl2_DeltaRes[i] =
new TH1F(h_name_V, title_V, 100, -1000, 1000);
229 h_V_Cl1Cl2_DeltaRes[i]->GetXaxis()->SetTitle(
"#Delta res_{v} (#mum)");
230 h_V_Cl1Cl2_DeltaRes[i]->GetYaxis()->SetTitle(
"counts");
236 TDirectory* HMDir = oldDir->mkdir(
"HitMaps_VXDOverlaps");
239 for (
int i = 1; i <= 5; i++) {
240 for (
int j = 1; j <= 16; j++) {
241 TString h_name =
"h_6" + std::to_string(j) + std::to_string(i);
242 TString title =
"Layer:Ladder:Sensor = 6:" + std::to_string(j) +
":" + std::to_string(i);
243 h_Lyr6[j][i] =
new TH2F(h_name, title, 100, -2.88, 2.88, 100, -6.14, 6.14);
244 h_Lyr6[j][i]->GetXaxis()->SetTitle(
"u (cm)");
245 h_Lyr6[j][i]->GetYaxis()->SetTitle(
"v (cm)");
248 for (
int i = 1; i <= 4; i++) {
249 for (
int j = 1; j <= 12; j++) {
250 TString h_name =
"h_5" + std::to_string(j) + std::to_string(i);
251 TString title =
"Layer:Ladder:Sensor = 5:" + std::to_string(j) +
":" + std::to_string(i);
252 h_Lyr5[j][i] =
new TH2F(h_name, title, 100, -2.88, 2.88, 100, -6.14, 6.14);
253 h_Lyr5[j][i]->GetXaxis()->SetTitle(
"u (cm)");
254 h_Lyr5[j][i]->GetYaxis()->SetTitle(
"v (cm)");
257 for (
int i = 1; i <= 3; i++) {
258 for (
int j = 1; j <= 10; j++) {
259 TString h_name =
"h_4" + std::to_string(j) + std::to_string(i);
260 TString title =
"Layer:Ladder:Sensor = 4:" + std::to_string(j) +
":" + std::to_string(i);
261 h_Lyr4[j][i] =
new TH2F(h_name, title, 100, -2.88, 2.88, 100, -6.14, 6.14);
262 h_Lyr4[j][i]->GetXaxis()->SetTitle(
"u (cm)");
263 h_Lyr4[j][i]->GetYaxis()->SetTitle(
"v (cm)");
266 for (
int i = 1; i <= 2; i++) {
267 for (
int j = 1; j <= 7; j++) {
268 TString h_name =
"h_3" + std::to_string(j) + std::to_string(i);
269 TString title =
"Layer:Ladder:Sensor = 3:" + std::to_string(j) +
":" + std::to_string(i);
270 h_Lyr3[j][i] =
new TH2F(h_name, title, 100, -1.92, 1.92, 100, -6.14, 6.14);
271 h_Lyr3[j][i]->GetXaxis()->SetTitle(
"u (cm)");
272 h_Lyr3[j][i]->GetYaxis()->SetTitle(
"v (cm)");
275 for (
int i = 1; i <= 2; i++) {
276 for (
int j = 1; j <= 12; j++) {
277 TString h_name =
"h_2" + std::to_string(j) + std::to_string(i);
278 TString title =
"Layer:Ladder:Sensor = 2:" + std::to_string(j) +
":" + std::to_string(i);
279 h_Lyr2[j][i] =
new TH2F(h_name, title, 100, -0.625, 0.625, 100, -3.072, 3.072);
280 h_Lyr2[j][i]->GetXaxis()->SetTitle(
"u (cm)");
281 h_Lyr2[j][i]->GetYaxis()->SetTitle(
"v (cm)");
284 for (
int i = 1; i <= 2; i++) {
285 for (
int j = 1; j <= 8; j++) {
286 TString h_name =
"h_1" + std::to_string(j) + std::to_string(i);
287 TString title =
"Layer:Ladder:Sensor = 1:" + std::to_string(j) +
":" + std::to_string(i);
288 h_Lyr1[j][i] =
new TH2F(h_name, title, 100, -0.625, 0.625, 100, -2.24, 2.24);
289 h_Lyr1[j][i]->GetXaxis()->SetTitle(
"u (cm)");
290 h_Lyr1[j][i]->GetYaxis()->SetTitle(
"v (cm)");
294 TDirectory* TreeDir = oldDir->mkdir(
"Trees_VXDOverlaps");
297 t_PXD =
new TTree(
"t_PXD",
"Tree for PXD overlaps");
298 t_PXD->Branch(
"deltaResU_PXD", &deltaResU_PXD,
"deltaResU_PXD/F");
299 t_PXD->Branch(
"intResU_PXD", &intResU_PXD,
"intResU_PXD/F");
300 t_PXD->Branch(
"intResV_PXD", &intResV_PXD,
"intResV_PXD/F");
301 t_PXD->Branch(
"intU_PXD", &intU_PXD,
"intU_PXD/F");
302 t_PXD->Branch(
"intV_PXD", &intV_PXD,
"intV_PXD/F");
303 t_PXD->Branch(
"intPhi_PXD", &intPhi_PXD,
"intPhi_PXD/F");
304 t_PXD->Branch(
"intZ_PXD", &intZ_PXD,
"intZ_PXD/F");
305 t_PXD->Branch(
"intLayer_PXD", &intLayer_PXD,
"intLayer_PXD/i");
306 t_PXD->Branch(
"intLadder_PXD", &intLadder_PXD,
"intLadder_PXD/i");
307 t_PXD->Branch(
"intSensor_PXD", &intSensor_PXD,
"intSensor_PXD/i");
308 t_PXD->Branch(
"extResU_PXD", &extResU_PXD,
"extResU_PXD/F");
309 t_PXD->Branch(
"extResV_PXD", &extResV_PXD,
"extResV_PXD/F");
310 t_PXD->Branch(
"extU_PXD", &extU_PXD,
"extU_PXD/F");
311 t_PXD->Branch(
"extV_PXD", &extV_PXD,
"extV_PXD/F");
312 t_PXD->Branch(
"extPhi_PXD", &extPhi_PXD,
"extPhi_PXD/F");
313 t_PXD->Branch(
"extZ_PXD", &extZ_PXD,
"extZ_PXD/F");
314 t_PXD->Branch(
"extLayer_PXD", &extLayer_PXD,
"extLayer_PXD/i");
315 t_PXD->Branch(
"extLadder_PXD", &extLadder_PXD,
"extLadder_PXD/i");
316 t_PXD->Branch(
"extSensor_PXD", &extSensor_PXD,
"extSensor_PXD/i");
318 t_SVD_U =
new TTree(
"t_SVD_U",
"Tree for SVD u-overlaps");
319 t_SVD_U->Branch(
"deltaRes", &deltaRes_SVD_U,
"deltaResU/F");
320 t_SVD_U->Branch(
"intRes", &intRes_SVD_U,
"intRes/F");
321 t_SVD_U->Branch(
"intClPos", &intClPos_SVD_U,
"intClPos/F");
322 t_SVD_U->Branch(
"intClPosErr", &intClPosErr_SVD_U,
"intClPosErr/F");
323 t_SVD_U->Branch(
"intTruePos", &intTruePos_SVD_U,
"intTruePos/F");
324 t_SVD_U->Branch(
"intClPhi", &intClPhi_SVD_U,
"intClPhi/F");
325 t_SVD_U->Branch(
"intClZ", &intClZ_SVD_U,
"intClZ/F");
326 t_SVD_U->Branch(
"intTrkPos", &intTrkPos_SVD_U,
"intTrkPos/F");
327 t_SVD_U->Branch(
"intTrkPosErr", &intTrkPosErr_SVD_U,
"intTrkPosErr/F");
328 t_SVD_U->Branch(
"intTrkQoP", &intTrkQoP_SVD_U,
"intTrkQoP/F");
329 t_SVD_U->Branch(
"intTrkPrime", &intTrkPrime_SVD_U,
"intTrkPrime/F");
330 t_SVD_U->Branch(
"intLayer", &intLayer_SVD_U,
"intLayer/i");
331 t_SVD_U->Branch(
"intLadder", &intLadder_SVD_U,
"intLadder/i");
332 t_SVD_U->Branch(
"intSensor", &intSensor_SVD_U,
"intSensor/i");
333 t_SVD_U->Branch(
"intSize", &intSize_SVD_U,
"intSize/i");
334 t_SVD_U->Branch(
"deltaRes", &deltaRes_SVD_U,
"deltaResU/F");
335 t_SVD_U->Branch(
"extRes", &extRes_SVD_U,
"extRes/F");
336 t_SVD_U->Branch(
"extClPos", &extClPos_SVD_U,
"extClPos/F");
337 t_SVD_U->Branch(
"extClPosErr", &extClPosErr_SVD_U,
"extClPosErr/F");
338 t_SVD_U->Branch(
"extTruePos", &extTruePos_SVD_U,
"extTruePos/F");
339 t_SVD_U->Branch(
"extClPhi", &extClPhi_SVD_U,
"extClPhi/F");
340 t_SVD_U->Branch(
"extClZ", &extClZ_SVD_U,
"extClZ/F");
341 t_SVD_U->Branch(
"extTrkPos", &extTrkPos_SVD_U,
"extTrkPos/F");
342 t_SVD_U->Branch(
"extTrkPosErr", &extTrkPosErr_SVD_U,
"extTrkPosErr/F");
343 t_SVD_U->Branch(
"extTrkQoP", &extTrkQoP_SVD_U,
"extTrkQoP/F");
344 t_SVD_U->Branch(
"extTrkPrime", &extTrkPrime_SVD_U,
"extTrkPrime/F");
345 t_SVD_U->Branch(
"extLayer", &extLayer_SVD_U,
"extLayer/i");
346 t_SVD_U->Branch(
"extLadder", &extLadder_SVD_U,
"extLadder/i");
347 t_SVD_U->Branch(
"extSensor", &extSensor_SVD_U,
"extSensor/i");
348 t_SVD_U->Branch(
"extSize", &extSize_SVD_U,
"extSize/i");
350 t_SVD_V =
new TTree(
"t_SVD_V",
"Tree for SVD v-overlaps");
351 t_SVD_V->Branch(
"deltaRes", &deltaRes_SVD_V,
"deltaResV/F");
352 t_SVD_V->Branch(
"intRes", &intRes_SVD_V,
"intRes/F");
353 t_SVD_V->Branch(
"intClPos", &intClPos_SVD_V,
"intClPos/F");
354 t_SVD_V->Branch(
"intClPosErr", &intClPosErr_SVD_V,
"intClPosErr/F");
355 t_SVD_V->Branch(
"intTruePos", &intTruePos_SVD_V,
"intTruePos/F");
356 t_SVD_V->Branch(
"intClPhi", &intClPhi_SVD_V,
"intClPhi/F");
357 t_SVD_V->Branch(
"intClZ", &intClZ_SVD_V,
"intClZ/F");
358 t_SVD_V->Branch(
"intTrkPos", &intTrkPos_SVD_V,
"intTrkPos/F");
359 t_SVD_V->Branch(
"intTrkPosErr", &intTrkPosErr_SVD_V,
"intTrkPosErr/F");
360 t_SVD_V->Branch(
"intTrkQoP", &intTrkQoP_SVD_V,
"intTrkQoP/F");
361 t_SVD_V->Branch(
"intTrkPrime", &intTrkPrime_SVD_V,
"intTrkPrime/F");
362 t_SVD_V->Branch(
"intLayer", &intLayer_SVD_V,
"intLayer/i");
363 t_SVD_V->Branch(
"intLadder", &intLadder_SVD_V,
"intLadder/i");
364 t_SVD_V->Branch(
"intSensor", &intSensor_SVD_V,
"intSensor/i");
365 t_SVD_V->Branch(
"intSize", &intSize_SVD_V,
"intSize/i");
366 t_SVD_V->Branch(
"deltaRes", &deltaRes_SVD_V,
"deltaResV/F");
367 t_SVD_V->Branch(
"extRes", &extRes_SVD_V,
"extRes/F");
368 t_SVD_V->Branch(
"extClPos", &extClPos_SVD_V,
"extClPos/F");
369 t_SVD_V->Branch(
"extClPosErr", &extClPosErr_SVD_V,
"extClPosErr/F");
370 t_SVD_V->Branch(
"extTruePos", &extTruePos_SVD_V,
"extTruePos/F");
371 t_SVD_V->Branch(
"extClPhi", &extClPhi_SVD_V,
"extClPhi/F");
372 t_SVD_V->Branch(
"extClZ", &extClZ_SVD_V,
"extClZ/F");
373 t_SVD_V->Branch(
"extTrkPos", &extTrkPos_SVD_V,
"extTrkPos/F");
374 t_SVD_V->Branch(
"extTrkPosErr", &extTrkPosErr_SVD_V,
"extTrkPosErr/F");
375 t_SVD_V->Branch(
"extTrkQoP", &extTrkQoP_SVD_V,
"extTrkQoP/F");
376 t_SVD_V->Branch(
"extTrkPrime", &extTrkPrime_SVD_V,
"extTrkPrime/F");
377 t_SVD_V->Branch(
"extLayer", &extLayer_SVD_V,
"extLayer/i");
378 t_SVD_V->Branch(
"extLadder", &extLadder_SVD_V,
"extLadder/i");
379 t_SVD_V->Branch(
"extSensor", &extSensor_SVD_V,
"extSensor/i");
380 t_SVD_V->Branch(
"extSize", &extSize_SVD_V,
"extSize/i");
392 for (
const auto& trk : recoTracks) {
393 if (! trk.wasFitSuccessful()) {
396 const vector<PXDCluster* > pxdClusters = trk.getPXDHitList();
397 const vector<SVDCluster* > svdClusters = trk.getSVDHitList();
398 B2DEBUG(40,
"FITTED TRACK: NUMBER OF PXD HITS = " << pxdClusters.size() <<
" NUMBER OF SVD HITS = " << svdClusters.size());
400 for (
unsigned int i = 0; i < pxdClusters.size(); i++) {
406 const auto* hitTrackPoint_1 = trk.getCreatedTrackPoint(infoPXD_1);
407 const auto* fittedResult_1 = hitTrackPoint_1->getFitterInfo();
408 if (!fittedResult_1) {
415 for (
unsigned int l = i + 1; l < pxdClusters.size(); l++) {
421 const auto* hitTrackPoint_2 = trk.getCreatedTrackPoint(infoPXD_2);
422 const auto* fittedResult_2 = hitTrackPoint_2->getFitterInfo();
423 if (!fittedResult_2) {
430 if (pxd_Layer_1 == pxd_Layer_2 && ((pxd_Ladder_2 - pxd_Ladder_1) == -1.0 || (pxd_Ladder_2 - pxd_Ladder_1) == 7.0
431 || (pxd_Ladder_2 - pxd_Ladder_1) == 11.0)) {
432 B2DEBUG(40,
" ============= 2 hits in a PXD overlap ============= ");
433 const TVectorD resUnBias_PXD_1 = fittedResult_1->getResidual(0,
false).getState();
434 const TVectorD resUnBias_PXD_2 = fittedResult_2->getResidual(0,
false).getState();
439 const float over_U_PXD = res_U_2 - res_U_1;
440 const float over_V_PXD = res_V_2 - res_V_1;
441 const TVector3 pxdLocal_1(pxd_1->
getU(), pxd_1->
getV(), 0.);
442 const TVector3 pxdLocal_2(pxd_2->
getU(), pxd_2->
getV(), 0.);
445 const TVector3& pxdGlobal_1 = pxdSensor_1.
pointToGlobal(pxdLocal_1);
446 const TVector3& pxdGlobal_2 = pxdSensor_2.
pointToGlobal(pxdLocal_2);
447 double pxdPhi_1 = atan2(pxdGlobal_1(1), pxdGlobal_1(0));
448 double pxdPhi_2 = atan2(pxdGlobal_2(1), pxdGlobal_2(0));
449 double pxdZ_1 = pxdGlobal_1(2);
450 double pxdZ_2 = pxdGlobal_2(2);
451 B2DEBUG(40,
"PXD: difference of residuals " << over_U_PXD <<
" " << over_V_PXD);
454 deltaResU_PXD = over_U_PXD;
455 intResU_PXD = res_U_1;
456 intResV_PXD = res_V_1;
457 intU_PXD = pxd_1->
getU();
458 intV_PXD = pxd_1->
getV();
459 intPhi_PXD = pxdPhi_1;
461 intLayer_PXD = pxd_Layer_1;
462 intLadder_PXD = pxd_Ladder_1;
463 intSensor_PXD = pxd_Sensor_1;
464 extResU_PXD = res_U_2;
465 extResV_PXD = res_V_2;
466 extU_PXD = pxd_2->
getU();
467 extV_PXD = pxd_2->
getV();
468 extPhi_PXD = pxdPhi_2;
470 extLayer_PXD = pxd_Layer_2;
471 extLadder_PXD = pxd_Ladder_2;
472 extSensor_PXD = pxd_Sensor_2;
476 h_U_DeltaRes->Fill(over_U_PXD);
477 h_V_DeltaRes->Fill(over_V_PXD);
478 h_U_DeltaRes_PXD->Fill(over_U_PXD);
479 h_V_DeltaRes_PXD->Fill(over_V_PXD);
481 if (pxd_Layer_1 == 1 && pxd_Layer_2 == 1) {
482 h_Lyr1[pxd_Ladder_1][pxd_Sensor_1]->Fill(pxd_1->
getU(), pxd_1->
getV());
483 h_Lyr1[pxd_Ladder_2][pxd_Sensor_2]->Fill(pxd_2->
getU(), pxd_2->
getV());
484 h_U_DeltaRes_PXD_Lyr1->Fill(over_U_PXD);
485 h_V_DeltaRes_PXD_Lyr1->Fill(over_V_PXD);
486 h_DeltaResUPhi_Lyr1->Fill(pxdPhi_1, over_U_PXD);
487 h_DeltaResUPhi_Lyr1->Fill(pxdPhi_2, over_U_PXD);
488 h_DeltaResVPhi_Lyr1->Fill(pxdPhi_1, over_V_PXD);
489 h_DeltaResVPhi_Lyr1->Fill(pxdPhi_2, over_V_PXD);
490 h_DeltaResVz_Lyr1->Fill(pxdZ_1, over_V_PXD);
491 h_DeltaResVz_Lyr1->Fill(pxdZ_2, over_V_PXD);
492 h_DeltaResUz_Lyr1->Fill(pxdZ_1, over_U_PXD);
493 h_DeltaResUz_Lyr1->Fill(pxdZ_2, over_U_PXD);
495 if (pxd_Layer_1 == 2 && pxd_Layer_2 == 2) {
496 h_Lyr2[pxd_Ladder_1][pxd_Sensor_1]->Fill(pxd_1->
getU(), pxd_1->
getV());
497 h_Lyr2[pxd_Ladder_2][pxd_Sensor_2]->Fill(pxd_2->
getU(), pxd_2->
getV());
498 h_U_DeltaRes_PXD_Lyr2->Fill(over_U_PXD);
499 h_V_DeltaRes_PXD_Lyr2->Fill(over_V_PXD);
500 h_DeltaResUPhi_Lyr2->Fill(pxdPhi_1, over_U_PXD);
501 h_DeltaResUPhi_Lyr2->Fill(pxdPhi_2, over_U_PXD);
502 h_DeltaResVPhi_Lyr2->Fill(pxdPhi_1, over_V_PXD);
503 h_DeltaResVPhi_Lyr2->Fill(pxdPhi_2, over_V_PXD);
504 h_DeltaResVz_Lyr2->Fill(pxdZ_1, over_V_PXD);
505 h_DeltaResVz_Lyr2->Fill(pxdZ_2, over_V_PXD);
506 h_DeltaResUz_Lyr2->Fill(pxdZ_1, over_U_PXD);
507 h_DeltaResUz_Lyr2->Fill(pxdZ_2, over_U_PXD);
515 for (
unsigned int i = 0; i < svdClusters.size(); i++) {
525 const auto* hitTrackPoint_1 = trk.getCreatedTrackPoint(infoSVD_1);
526 const auto* fittedResult_1 = hitTrackPoint_1->getFitterInfo();
527 if (!fittedResult_1) {
534 for (
unsigned int l = i + 1; l < svdClusters.size(); l++) {
544 const auto* hitTrackPoint_2 = trk.getCreatedTrackPoint(infoSVD_2);
545 const auto* fittedResult_2 = hitTrackPoint_2->getFitterInfo();
546 if (!fittedResult_2) {
553 if (svd_Layer_1 == svd_Layer_2 && ((svd_Ladder_2 - svd_Ladder_1) == 1.0 || (svd_Ladder_2 - svd_Ladder_1) == -6.0
554 || (svd_Ladder_2 - svd_Ladder_1) == -9.0 || (svd_Ladder_2 - svd_Ladder_1) == -11.0 || (svd_Ladder_2 - svd_Ladder_1) == -15.0)) {
555 B2DEBUG(40,
" ============= 2 hits in a SVD overlap ============= ");
556 const TVectorD resUnBias_SVD_1 = fittedResult_1->getResidual(0,
false).getState();
557 const TVectorD resUnBias_SVD_2 = fittedResult_2->getResidual(0,
false).getState();
559 const TVectorD& svd_predIntersect_1 = state_1.getState();
560 const TMatrixDSym& covMatrix_1 = state_1.getCov();
562 const TVectorD& svd_predIntersect_2 = state_2.getState();
563 const TMatrixDSym& covMatrix_2 = state_2.getCov();
566 const int strips_1 = svd_1->
getSize();
567 h_SVDstrips_Mult->Fill(strips_1);
568 const int strips_2 = svd_2->
getSize();
569 h_SVDstrips_Mult->Fill(strips_2);
572 const float over_U_SVD = res_U_2 - res_U_1;
573 const TVector3 svdLocal_1(svd_1->
getPosition(), svd_predIntersect_1[4], 0.);
574 const TVector3 svdLocal_2(svd_2->
getPosition(), svd_predIntersect_2[4], 0.);
577 const TVector3& svdGlobal_1 = svdSensor_1.
pointToGlobal(svdLocal_1);
578 const TVector3& svdGlobal_2 = svdSensor_2.
pointToGlobal(svdLocal_2);
579 double svdPhi_1 = atan2(svdGlobal_1(1), svdGlobal_1(0));
580 double svdPhi_2 = atan2(svdGlobal_2(1), svdGlobal_2(0));
581 double svdZ_1 = svdGlobal_1(2);
582 double svdZ_2 = svdGlobal_2(2);
583 B2DEBUG(40,
"SVD: difference of u-residuals =========> " << over_U_SVD);
586 deltaRes_SVD_U = over_U_SVD;
587 intRes_SVD_U = res_U_1;
590 if (isMC && trueHit_1.
size() > 0)
591 intTruePos_SVD_U = trueHit_1[0]->getU();
593 intTruePos_SVD_U = -99;
594 intClPhi_SVD_U = svdPhi_1;
595 intClZ_SVD_U = svdZ_1;
596 intTrkPos_SVD_U = svd_predIntersect_1[3];
597 intTrkPosErr_SVD_U = sqrt(covMatrix_1[3][3]);
598 intTrkQoP_SVD_U = svd_predIntersect_1[0];
599 intTrkPrime_SVD_U = svd_predIntersect_1[1];
600 intLayer_SVD_U = svd_Layer_1;
601 intLadder_SVD_U = svd_Ladder_1;
602 intSensor_SVD_U = svd_Sensor_1;
603 intSize_SVD_U = strips_1;
604 extRes_SVD_U = res_U_2;
607 if (isMC && trueHit_2.
size() > 0)
608 extTruePos_SVD_U = trueHit_2[0]->getU();
610 extTruePos_SVD_U = -99;
611 extClPhi_SVD_U = svdPhi_2;
612 extClZ_SVD_U = svdZ_2;
613 extTrkPos_SVD_U = svd_predIntersect_2[3];
614 extTrkPosErr_SVD_U = sqrt(covMatrix_2[3][3]);
615 extTrkQoP_SVD_U = svd_predIntersect_2[0];
616 extTrkPrime_SVD_U = svd_predIntersect_2[1];
617 extLayer_SVD_U = svd_Layer_2;
618 extLadder_SVD_U = svd_Ladder_2;
619 extSensor_SVD_U = svd_Sensor_2;
620 extSize_SVD_U = strips_2;
624 h_U_DeltaRes->Fill(over_U_SVD);
625 h_U_DeltaRes_SVD->Fill(over_U_SVD);
627 h_U_Cl1Cl2_DeltaRes[svd_1->
getSize() * svd_2->
getSize()]->Fill(over_U_SVD);
630 if (svd_Layer_1 == 3 && svd_Layer_2 == 3) {
631 h_Lyr3[svd_Ladder_1][svd_Sensor_1]->Fill(svd_1->
getPosition(), 0.);
632 h_Lyr3[svd_Ladder_2][svd_Sensor_2]->Fill(svd_2->
getPosition(), 0.);
633 h_U_DeltaRes_SVD_Lyr3->Fill(over_U_SVD);
634 h_DeltaResUPhi_Lyr3->Fill(svdPhi_1, over_U_SVD);
635 h_DeltaResUPhi_Lyr3->Fill(svdPhi_2, over_U_SVD);
636 h_DeltaResUz_Lyr3->Fill(svdZ_1, over_U_SVD);
637 h_DeltaResUz_Lyr3->Fill(svdZ_2, over_U_SVD);
639 if (svd_Layer_1 == 4 && svd_Layer_2 == 4) {
640 h_Lyr4[svd_Ladder_1][svd_Sensor_1]->Fill(svd_1->
getPosition(), 0.);
641 h_Lyr4[svd_Ladder_2][svd_Sensor_2]->Fill(svd_2->
getPosition(), 0.);
642 h_U_DeltaRes_SVD_Lyr4->Fill(over_U_SVD);
643 h_DeltaResUPhi_Lyr4->Fill(svdPhi_1, over_U_SVD);
644 h_DeltaResUPhi_Lyr4->Fill(svdPhi_2, over_U_SVD);
645 h_DeltaResUz_Lyr4->Fill(svdZ_1, over_U_SVD);
646 h_DeltaResUz_Lyr4->Fill(svdZ_2, over_U_SVD);
648 if (svd_Layer_1 == 5 && svd_Layer_2 == 5) {
649 h_Lyr5[svd_Ladder_1][svd_Sensor_1]->Fill(svd_1->
getPosition(), 0.);
650 h_Lyr5[svd_Ladder_2][svd_Sensor_1]->Fill(svd_1->
getPosition(), 0.);
651 h_U_DeltaRes_SVD_Lyr5->Fill(over_U_SVD);
652 h_DeltaResUPhi_Lyr5->Fill(svdPhi_1, over_U_SVD);
653 h_DeltaResUPhi_Lyr5->Fill(svdPhi_2, over_U_SVD);
654 h_DeltaResUz_Lyr5->Fill(svdZ_1, over_U_SVD);
655 h_DeltaResUz_Lyr5->Fill(svdZ_2, over_U_SVD);
657 if (svd_Layer_1 == 6 && svd_Layer_2 == 6) {
658 h_Lyr6[svd_Ladder_1][svd_Sensor_1]->Fill(svd_1->
getPosition(), 0.);
659 h_Lyr6[svd_Ladder_2][svd_Sensor_2]->Fill(svd_2->
getPosition(), 0.);
660 h_U_DeltaRes_SVD_Lyr6->Fill(over_U_SVD);
661 h_DeltaResUPhi_Lyr6->Fill(svdPhi_1, over_U_SVD);
662 h_DeltaResUPhi_Lyr6->Fill(svdPhi_2, over_U_SVD);
663 h_DeltaResUz_Lyr6->Fill(svdZ_1, over_U_SVD);
664 h_DeltaResUz_Lyr6->Fill(svdZ_2, over_U_SVD);
669 const int strips_1 = svd_1->
getSize();
670 h_SVDstrips_Mult->Fill(strips_1);
671 const int strips_2 = svd_2->
getSize();
672 h_SVDstrips_Mult->Fill(strips_2);
675 const float over_V_SVD = res_V_2 - res_V_1;
676 const TVector3 svdLocal_1(svd_predIntersect_1[3], svd_1->
getPosition(), 0.);
677 const TVector3 svdLocal_2(svd_predIntersect_2[3], svd_2->
getPosition(), 0.);
680 const TVector3& svdGlobal_1 = svdSensor_1.
pointToGlobal(svdLocal_1);
681 const TVector3& svdGlobal_2 = svdSensor_2.
pointToGlobal(svdLocal_2);
682 double svdPhi_1 = atan2(svdGlobal_1(1), svdGlobal_1(0));
683 double svdPhi_2 = atan2(svdGlobal_2(1), svdGlobal_2(0));
684 double svdZ_1 = svdGlobal_1(2);
685 double svdZ_2 = svdGlobal_2(2);
686 B2DEBUG(40,
"SVD: difference of v-residuals =========> " << over_V_SVD);
689 deltaRes_SVD_V = over_V_SVD;
690 intRes_SVD_V = res_V_1;
693 if (isMC && trueHit_1.
size() > 0)
694 intTruePos_SVD_V = trueHit_1[0]->getV();
696 intTruePos_SVD_V = -99;
697 intClPhi_SVD_V = svdPhi_1;
698 intClZ_SVD_V = svdZ_1;
699 intTrkPos_SVD_V = svd_predIntersect_1[4];
700 intTrkPosErr_SVD_V = sqrt(covMatrix_1[4][4]);
701 intTrkQoP_SVD_V = svd_predIntersect_1[0];
702 intTrkPrime_SVD_V = svd_predIntersect_1[2];
703 intLayer_SVD_V = svd_Layer_1;
704 intLadder_SVD_V = svd_Ladder_1;
705 intSensor_SVD_V = svd_Sensor_1;
706 intSize_SVD_V = strips_1;
707 extRes_SVD_V = res_V_2;
710 if (isMC && trueHit_2.
size() > 0)
711 extTruePos_SVD_V = trueHit_2[0]->getV();
713 extTruePos_SVD_V = -99;
714 extClPhi_SVD_V = svdPhi_2;
715 extClZ_SVD_V = svdZ_2;
716 extTrkPos_SVD_V = svd_predIntersect_2[4];
717 extTrkPosErr_SVD_V = sqrt(covMatrix_2[4][4]);
718 extTrkQoP_SVD_V = svd_predIntersect_2[0];
719 extTrkPrime_SVD_V = svd_predIntersect_2[2];
720 extLayer_SVD_V = svd_Layer_2;
721 extLadder_SVD_V = svd_Ladder_2;
722 extSensor_SVD_V = svd_Sensor_2;
723 extSize_SVD_V = strips_2;
727 h_V_DeltaRes->Fill(over_V_SVD);
728 h_V_DeltaRes_SVD->Fill(over_V_SVD);
730 h_V_Cl1Cl2_DeltaRes[svd_1->
getSize() * svd_2->
getSize()]->Fill(over_V_SVD);
733 if (svd_Layer_1 == 3 && svd_Layer_2 == 3) {
734 h_Lyr3[svd_Ladder_1][svd_Sensor_1]->Fill(0., svd_1->
getPosition());
735 h_Lyr3[svd_Ladder_2][svd_Sensor_2]->Fill(0., svd_2->
getPosition());
736 h_V_DeltaRes_SVD_Lyr3->Fill(over_V_SVD);
737 h_DeltaResVPhi_Lyr3->Fill(svdPhi_1, over_V_SVD);
738 h_DeltaResVPhi_Lyr3->Fill(svdPhi_2, over_V_SVD);
739 h_DeltaResVz_Lyr3->Fill(svdZ_1, over_V_SVD);
740 h_DeltaResVz_Lyr3->Fill(svdZ_2, over_V_SVD);
742 if (svd_Layer_1 == 4 && svd_Layer_2 == 4) {
743 h_Lyr4[svd_Ladder_1][svd_Sensor_1]->Fill(0., svd_1->
getPosition());
744 h_Lyr4[svd_Ladder_2][svd_Sensor_2]->Fill(0., svd_2->
getPosition());
745 h_V_DeltaRes_SVD_Lyr4->Fill(over_V_SVD);
746 h_DeltaResVPhi_Lyr4->Fill(svdPhi_1, over_V_SVD);
747 h_DeltaResVPhi_Lyr4->Fill(svdPhi_2, over_V_SVD);
748 h_DeltaResVz_Lyr4->Fill(svdZ_1, over_V_SVD);
749 h_DeltaResVz_Lyr4->Fill(svdZ_2, over_V_SVD);
751 if (svd_Layer_1 == 5 && svd_Layer_2 == 5) {
752 h_Lyr5[svd_Ladder_1][svd_Sensor_1]->Fill(0., svd_1->
getPosition());
753 h_Lyr5[svd_Ladder_2][svd_Sensor_2]->Fill(0., svd_2->
getPosition());
754 h_V_DeltaRes_SVD_Lyr5->Fill(over_V_SVD);
755 h_DeltaResVPhi_Lyr5->Fill(svdPhi_1, over_V_SVD);
756 h_DeltaResVPhi_Lyr5->Fill(svdPhi_2, over_V_SVD);
757 h_DeltaResVz_Lyr5->Fill(svdZ_1, over_V_SVD);
758 h_DeltaResVz_Lyr5->Fill(svdZ_2, over_V_SVD);
760 if (svd_Layer_1 == 6 && svd_Layer_2 == 6) {
761 h_Lyr6[svd_Ladder_1][svd_Sensor_1]->Fill(0., svd_1->
getPosition());
762 h_Lyr6[svd_Ladder_2][svd_Sensor_2]->Fill(0., svd_2->
getPosition());
763 h_V_DeltaRes_SVD_Lyr6->Fill(over_V_SVD);
764 h_DeltaResVPhi_Lyr6->Fill(svdPhi_1, over_V_SVD);
765 h_DeltaResVPhi_Lyr6->Fill(svdPhi_2, over_V_SVD);
766 h_DeltaResVz_Lyr6->Fill(svdZ_1, over_V_SVD);
767 h_DeltaResVz_Lyr6->Fill(svdZ_2, over_V_SVD);