CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripTrackingRecHitsValid.cc
Go to the documentation of this file.
1 #include <memory>
2 #include <string>
3 #include <iostream>
4 #include <TMath.h>
6 
8 
13 
21 
24 
32 
33 using namespace std;
34 using namespace edm;
35 
36 // ROOT
37 #include "TROOT.h"
38 #include "TFile.h"
39 #include "TTree.h"
40 #include "TBranch.h"
41 #include "TH1.h"
42 #include "TH2.h"
43 class TFile;
44 
45 //Constructor
47  dbe_(edm::Service<DQMStore>().operator->()),
48  conf_(ps),
49  m_cacheID_(0)
50  // trajectoryInput_( ps.getParameter<edm::InputTag>("trajectoryInput") )
51 {
52  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
53 
54  runStandalone = conf_.getParameter<bool>("runStandalone");
55 
56  outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
57 
59 
60  trajectoryInputToken_ = consumes<std::vector<Trajectory> >( conf_.getParameter<edm::InputTag>("trajectoryInput") );
61 
62  edm::ParameterSet ParametersResolx_LF = conf_.getParameter<edm::ParameterSet>("TH1Resolx_LF");
63  layerswitchResolx_LF = ParametersResolx_LF.getParameter<bool>("layerswitchon");
64 
65  edm::ParameterSet ParametersResolx_MF = conf_.getParameter<edm::ParameterSet>("TH1Resolx_MF");
66  layerswitchResolx_MF = ParametersResolx_MF.getParameter<bool>("layerswitchon");
67 
68  edm::ParameterSet ParametersRes_LF = conf_.getParameter<edm::ParameterSet>("TH1Res_LF");
69  layerswitchRes_LF = ParametersRes_LF.getParameter<bool>("layerswitchon");
70 
71  edm::ParameterSet ParametersRes_MF = conf_.getParameter<edm::ParameterSet>("TH1Res_MF");
72  layerswitchRes_MF = ParametersRes_MF.getParameter<bool>("layerswitchon");
73 
74  edm::ParameterSet ParametersPull_LF = conf_.getParameter<edm::ParameterSet>("TH1Pull_LF");
75  layerswitchPull_LF = ParametersPull_LF.getParameter<bool>("layerswitchon");
76 
77  edm::ParameterSet ParametersPull_MF = conf_.getParameter<edm::ParameterSet>("TH1Pull_MF");
78  layerswitchPull_MF = ParametersPull_MF.getParameter<bool>("layerswitchon");
79 
80  edm::ParameterSet ParametersCategory = conf_.getParameter<edm::ParameterSet>("TH1Category");
81  layerswitchCategory = ParametersCategory.getParameter<bool>("layerswitchon");
82 
83  edm::ParameterSet ParametersTrackwidth = conf_.getParameter<edm::ParameterSet>("TH1Trackwidth");
84  layerswitchTrackwidth = ParametersTrackwidth.getParameter<bool>("layerswitchon");
85 
86  edm::ParameterSet ParametersExpectedwidth = conf_.getParameter<edm::ParameterSet>("TH1Expectedwidth");
87  layerswitchExpectedwidth = ParametersExpectedwidth.getParameter<bool>("layerswitchon");
88 
89  edm::ParameterSet ParametersClusterwidth = conf_.getParameter<edm::ParameterSet>("TH1Clusterwidth");
90  layerswitchClusterwidth = ParametersClusterwidth.getParameter<bool>("layerswitchon");
91 
92  edm::ParameterSet ParametersTrackanglealpha = conf_.getParameter<edm::ParameterSet>("TH1Trackanglealpha");
93  layerswitchTrackanglealpha = ParametersTrackanglealpha.getParameter<bool>("layerswitchon");
94 
95  edm::ParameterSet ParametersTrackanglebeta = conf_.getParameter<edm::ParameterSet>("TH1Trackanglebeta");
96  layerswitchTrackanglebeta = ParametersTrackanglebeta.getParameter<bool>("layerswitchon");
97 
98  edm::ParameterSet ParametersResolxMFTrackwidthProfile_WClus1 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_WClus1");
99  layerswitchResolxMFTrackwidthProfile_WClus1 = ParametersResolxMFTrackwidthProfile_WClus1.getParameter<bool>("layerswitchon");
100 
101  edm::ParameterSet ParametersResolxMFTrackwidthProfile_WClus2 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_WClus2");
102  layerswitchResolxMFTrackwidthProfile_WClus2 = ParametersResolxMFTrackwidthProfile_WClus2.getParameter<bool>("layerswitchon");
103 
104  edm::ParameterSet ParametersResolxMFTrackwidthProfile_WClus3 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_WClus3");
105  layerswitchResolxMFTrackwidthProfile_WClus3 = ParametersResolxMFTrackwidthProfile_WClus3.getParameter<bool>("layerswitchon");
106 
107  edm::ParameterSet ParametersResolxMFTrackwidthProfile_WClus4 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_WClus4");
108  layerswitchResolxMFTrackwidthProfile_WClus4 = ParametersResolxMFTrackwidthProfile_WClus4.getParameter<bool>("layerswitchon");
109 
110  edm::ParameterSet ParametersResMFTrackwidthProfile_WClus1 = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfile_WClus1");
111  layerswitchResMFTrackwidthProfile_WClus1 = ParametersResMFTrackwidthProfile_WClus1.getParameter<bool>("layerswitchon");
112 
113  edm::ParameterSet ParametersResMFTrackwidthProfile_WClus2 = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfile_WClus2");
114  layerswitchResMFTrackwidthProfile_WClus2 = ParametersResMFTrackwidthProfile_WClus2.getParameter<bool>("layerswitchon");
115 
116  edm::ParameterSet ParametersResMFTrackwidthProfile_WClus21 = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfile_WClus21");
117  layerswitchResMFTrackwidthProfile_WClus21 = ParametersResMFTrackwidthProfile_WClus21.getParameter<bool>("layerswitchon");
118 
119  edm::ParameterSet ParametersResMFTrackwidthProfile_WClus22 = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfile_WClus22");
120  layerswitchResMFTrackwidthProfile_WClus22 = ParametersResMFTrackwidthProfile_WClus22.getParameter<bool>("layerswitchon");
121 
122  edm::ParameterSet ParametersResMFTrackwidthProfile_WClus23 = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfile_WClus23");
123  layerswitchResMFTrackwidthProfile_WClus23 = ParametersResMFTrackwidthProfile_WClus23.getParameter<bool>("layerswitchon");
124 
125  edm::ParameterSet ParametersResMFTrackwidthProfile_WClus3 = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfile_WClus3");
126  layerswitchResMFTrackwidthProfile_WClus3 = ParametersResMFTrackwidthProfile_WClus3.getParameter<bool>("layerswitchon");
127 
128  edm::ParameterSet ParametersResMFTrackwidthProfile_WClus4 = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfile_WClus4");
129  layerswitchResMFTrackwidthProfile_WClus4 = ParametersResMFTrackwidthProfile_WClus4.getParameter<bool>("layerswitchon");
130 
131  edm::ParameterSet ParametersResolxMFTrackwidthProfile = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile");
132  layerswitchResolxMFTrackwidthProfile = ParametersResolxMFTrackwidthProfile.getParameter<bool>("layerswitchon");
133 
134  edm::ParameterSet ParametersResolxMFTrackwidthProfile_Category1 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_Category1");
135  layerswitchResolxMFTrackwidthProfile_Category1 = ParametersResolxMFTrackwidthProfile_Category1.getParameter<bool>("layerswitchon");
136 
137  edm::ParameterSet ParametersResolxMFTrackwidthProfile_Category2 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_Category2");
138  layerswitchResolxMFTrackwidthProfile_Category2 = ParametersResolxMFTrackwidthProfile_Category2.getParameter<bool>("layerswitchon");
139 
140  edm::ParameterSet ParametersResolxMFTrackwidthProfile_Category3 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_Category3");
141  layerswitchResolxMFTrackwidthProfile_Category3 = ParametersResolxMFTrackwidthProfile_Category3.getParameter<bool>("layerswitchon");
142 
143  edm::ParameterSet ParametersResolxMFTrackwidthProfile_Category4 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfile_Category4");
144  layerswitchResolxMFTrackwidthProfile_Category4 = ParametersResolxMFTrackwidthProfile_Category4.getParameter<bool>("layerswitchon");
145 
146  edm::ParameterSet ParametersResolxMFClusterwidthProfile_Category1 = conf_.getParameter<edm::ParameterSet>("TProfResolxMFClusterwidthProfile_Category1");
147  layerswitchResolxMFClusterwidthProfile_Category1 = ParametersResolxMFClusterwidthProfile_Category1.getParameter<bool>("layerswitchon");
148 
149  edm::ParameterSet ParametersResolxMFAngleProfile = conf_.getParameter<edm::ParameterSet>("TProfResolxMFAngleProfile");
150  layerswitchResolxMFAngleProfile = ParametersResolxMFAngleProfile.getParameter<bool>("layerswitchon");
151 
152  edm::ParameterSet ParametersWclusRphi = conf_.getParameter<edm::ParameterSet>("TH1WclusRphi");
153  layerswitchWclusRphi = ParametersWclusRphi.getParameter<bool>("layerswitchon");
154 
155  edm::ParameterSet ParametersAdcRphi = conf_.getParameter<edm::ParameterSet>("TH1AdcRphi");
156  layerswitchAdcRphi = ParametersAdcRphi.getParameter<bool>("layerswitchon");
157 
158  edm::ParameterSet ParametersResolxLFRphi = conf_.getParameter<edm::ParameterSet>("TH1ResolxLFRphi");
159  layerswitchResolxLFRphi = ParametersResolxLFRphi.getParameter<bool>("layerswitchon");
160 
161  edm::ParameterSet ParametersResolxMFRphi = conf_.getParameter<edm::ParameterSet>("TH1ResolxMFRphi");
162  layerswitchResolxMFRphi = ParametersResolxMFRphi.getParameter<bool>("layerswitchon");
163 
164  edm::ParameterSet ParametersResolxMFRphiwclus1 = conf_.getParameter<edm::ParameterSet>("TH1ResolxMFRphiwclus1");
165  layerswitchResolxMFRphiwclus1 = ParametersResolxMFRphiwclus1.getParameter<bool>("layerswitchon");
166 
167  edm::ParameterSet ParametersResolxMFRphiwclus2 = conf_.getParameter<edm::ParameterSet>("TH1ResolxMFRphiwclus2");
168  layerswitchResolxMFRphiwclus2 = ParametersResolxMFRphiwclus2.getParameter<bool>("layerswitchon");
169 
170  edm::ParameterSet ParametersResolxMFRphiwclus3 = conf_.getParameter<edm::ParameterSet>("TH1ResolxMFRphiwclus3");
171  layerswitchResolxMFRphiwclus3 = ParametersResolxMFRphiwclus3.getParameter<bool>("layerswitchon");
172 
173  edm::ParameterSet ParametersResolxMFRphiwclus4 = conf_.getParameter<edm::ParameterSet>("TH1ResolxMFRphiwclus4");
174  layerswitchResolxMFRphiwclus4 = ParametersResolxMFRphiwclus4.getParameter<bool>("layerswitchon");
175 
176  edm::ParameterSet ParametersResLFRphi = conf_.getParameter<edm::ParameterSet>("TH1ResLFRphi");
177  layerswitchResLFRphi = ParametersResLFRphi.getParameter<bool>("layerswitchon");
178 
179  edm::ParameterSet ParametersResMFRphi = conf_.getParameter<edm::ParameterSet>("TH1ResMFRphi");
180  layerswitchResMFRphi = ParametersResMFRphi.getParameter<bool>("layerswitchon");
181 
182  edm::ParameterSet ParametersResMFRphiwclus1 = conf_.getParameter<edm::ParameterSet>("TH1ResMFRphiwclus1");
183  layerswitchResMFRphiwclus1 = ParametersResMFRphiwclus1.getParameter<bool>("layerswitchon");
184 
185  edm::ParameterSet ParametersResMFRphiwclus2 = conf_.getParameter<edm::ParameterSet>("TH1ResMFRphiwclus2");
186  layerswitchResMFRphiwclus2 = ParametersResMFRphiwclus2.getParameter<bool>("layerswitchon");
187 
188  edm::ParameterSet ParametersResMFRphiwclus3 = conf_.getParameter<edm::ParameterSet>("TH1ResMFRphiwclus3");
189  layerswitchResMFRphiwclus3 = ParametersResMFRphiwclus3.getParameter<bool>("layerswitchon");
190 
191  edm::ParameterSet ParametersResMFRphiwclus4 = conf_.getParameter<edm::ParameterSet>("TH1ResMFRphiwclus4");
192  layerswitchResMFRphiwclus4 = ParametersResMFRphiwclus4.getParameter<bool>("layerswitchon");
193 
194  edm::ParameterSet ParametersPullLFRphi = conf_.getParameter<edm::ParameterSet>("TH1PullLFRphi");
195  layerswitchPullLFRphi = ParametersPullLFRphi.getParameter<bool>("layerswitchon");
196 
197  edm::ParameterSet ParametersPullMFRphi = conf_.getParameter<edm::ParameterSet>("TH1PullMFRphi");
198  layerswitchPullMFRphi = ParametersPullMFRphi.getParameter<bool>("layerswitchon");
199 
200  edm::ParameterSet ParametersPullMFRphiwclus1 = conf_.getParameter<edm::ParameterSet>("TH1PullMFRphiwclus1");
201  layerswitchPullMFRphiwclus1 = ParametersPullMFRphiwclus1.getParameter<bool>("layerswitchon");
202 
203  edm::ParameterSet ParametersPullMFRphiwclus2 = conf_.getParameter<edm::ParameterSet>("TH1PullMFRphiwclus2");
204  layerswitchPullMFRphiwclus2 = ParametersPullMFRphiwclus2.getParameter<bool>("layerswitchon");
205 
206  edm::ParameterSet ParametersPullMFRphiwclus3 = conf_.getParameter<edm::ParameterSet>("TH1PullMFRphiwclus3");
207  layerswitchPullMFRphiwclus3 = ParametersPullMFRphiwclus3.getParameter<bool>("layerswitchon");
208 
209  edm::ParameterSet ParametersPullMFRphiwclus4 = conf_.getParameter<edm::ParameterSet>("TH1PullMFRphiwclus4");
210  layerswitchPullMFRphiwclus4 = ParametersPullMFRphiwclus4.getParameter<bool>("layerswitchon");
211 
212  edm::ParameterSet ParametersTrackangleRphi = conf_.getParameter<edm::ParameterSet>("TH1TrackangleRphi");
213  layerswitchTrackangleRphi = ParametersTrackangleRphi.getParameter<bool>("layerswitchon");
214 
215  edm::ParameterSet ParametersTrackanglebetaRphi = conf_.getParameter<edm::ParameterSet>("TH1TrackanglebetaRphi");
216  layerswitchTrackanglebetaRphi = ParametersTrackanglebetaRphi.getParameter<bool>("layerswitchon");
217 
218  edm::ParameterSet ParametersTrackangle2Rphi = conf_.getParameter<edm::ParameterSet>("TH1Trackangle2Rphi");
219  layerswitchTrackangle2Rphi = ParametersTrackangle2Rphi.getParameter<bool>("layerswitchon");
220 
221  edm::ParameterSet ParametersPullTrackangleProfileRphi = conf_.getParameter<edm::ParameterSet>("TProfPullTrackangleProfileRphi");
222  layerswitchPullTrackangleProfileRphi = ParametersPullTrackangleProfileRphi.getParameter<bool>("layerswitchon");
223 
224  edm::ParameterSet ParametersPullTrackangle2DRphi = conf_.getParameter<edm::ParameterSet>("TH1PullTrackangle2DRphi");
225  layerswitchPullTrackangle2DRphi = ParametersPullTrackangle2DRphi.getParameter<bool>("layerswitchon");
226 
227  edm::ParameterSet ParametersTrackwidthRphi = conf_.getParameter<edm::ParameterSet>("TH1TrackwidthRphi");
228  layerswitchTrackwidthRphi = ParametersTrackwidthRphi.getParameter<bool>("layerswitchon");
229 
230  edm::ParameterSet ParametersExpectedwidthRphi = conf_.getParameter<edm::ParameterSet>("TH1ExpectedwidthRphi");
231  layerswitchExpectedwidthRphi = ParametersExpectedwidthRphi.getParameter<bool>("layerswitchon");
232 
233  edm::ParameterSet ParametersClusterwidthRphi = conf_.getParameter<edm::ParameterSet>("TH1ClusterwidthRphi");
234  layerswitchClusterwidthRphi = ParametersClusterwidthRphi.getParameter<bool>("layerswitchon");
235 
236  edm::ParameterSet ParametersCategoryRphi = conf_.getParameter<edm::ParameterSet>("TH1CategoryRphi");
237  layerswitchCategoryRphi = ParametersCategoryRphi.getParameter<bool>("layerswitchon");
238 
239  edm::ParameterSet ParametersPullTrackwidthProfileRphi = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileRphi");
240  layerswitchPullTrackwidthProfileRphi = ParametersPullTrackwidthProfileRphi.getParameter<bool>("layerswitchon");
241 
242  edm::ParameterSet ParametersPullTrackwidthProfileRphiwclus1 = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileRphiwclus1");
243  layerswitchPullTrackwidthProfileRphiwclus1 = ParametersPullTrackwidthProfileRphiwclus1.getParameter<bool>("layerswitchon");
244 
245  edm::ParameterSet ParametersPullTrackwidthProfileRphiwclus2 = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileRphiwclus2");
246  layerswitchPullTrackwidthProfileRphiwclus2 = ParametersPullTrackwidthProfileRphiwclus2.getParameter<bool>("layerswitchon");
247 
248  edm::ParameterSet ParametersPullTrackwidthProfileRphiwclus3 = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileRphiwclus3");
249  layerswitchPullTrackwidthProfileRphiwclus3 = ParametersPullTrackwidthProfileRphiwclus3.getParameter<bool>("layerswitchon");
250 
251  edm::ParameterSet ParametersPullTrackwidthProfileRphiwclus4 = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileRphiwclus4");
252  layerswitchPullTrackwidthProfileRphiwclus4 = ParametersPullTrackwidthProfileRphiwclus4.getParameter<bool>("layerswitchon");
253 
254  edm::ParameterSet ParametersPullTrackwidthProfileCategory1Rphi = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory1Rphi");
255  layerswitchPullTrackwidthProfileCategory1Rphi = ParametersPullTrackwidthProfileCategory1Rphi.getParameter<bool>("layerswitchon");
256 
257  edm::ParameterSet ParametersPullTrackwidthProfileCategory2Rphi = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory2Rphi");
258  layerswitchPullTrackwidthProfileCategory2Rphi = ParametersPullTrackwidthProfileCategory2Rphi.getParameter<bool>("layerswitchon");
259 
260  edm::ParameterSet ParametersPullTrackwidthProfileCategory3Rphi = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory3Rphi");
261  layerswitchPullTrackwidthProfileCategory3Rphi = ParametersPullTrackwidthProfileCategory3Rphi.getParameter<bool>("layerswitchon");
262 
263  edm::ParameterSet ParametersPullTrackwidthProfileCategory4Rphi = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory4Rphi");
264  layerswitchPullTrackwidthProfileCategory4Rphi = ParametersPullTrackwidthProfileCategory4Rphi.getParameter<bool>("layerswitchon");
265 
266  edm::ParameterSet ParametersResolxMFTrackwidthProfileRphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileRphi");
267  layerswitchResolxMFTrackwidthProfileRphi = ParametersResolxMFTrackwidthProfileRphi.getParameter<bool>("layerswitchon");
268 
269  edm::ParameterSet ParametersResolxMFTrackwidthProfileWclus1Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileWclus1Rphi");
270  layerswitchResolxMFTrackwidthProfileWclus1Rphi = ParametersResolxMFTrackwidthProfileWclus1Rphi.getParameter<bool>("layerswitchon");
271 
272  edm::ParameterSet ParametersResolxMFTrackwidthProfileWclus2Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileWclus2Rphi");
273  layerswitchResolxMFTrackwidthProfileWclus2Rphi = ParametersResolxMFTrackwidthProfileWclus2Rphi.getParameter<bool>("layerswitchon");
274 
275  edm::ParameterSet ParametersResolxMFTrackwidthProfileWclus3Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileWclus3Rphi");
276  layerswitchResolxMFTrackwidthProfileWclus3Rphi = ParametersResolxMFTrackwidthProfileWclus3Rphi.getParameter<bool>("layerswitchon");
277 
278  edm::ParameterSet ParametersResolxMFTrackwidthProfileWclus4Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileWclus4Rphi");
279  layerswitchResolxMFTrackwidthProfileWclus4Rphi = ParametersResolxMFTrackwidthProfileWclus4Rphi.getParameter<bool>("layerswitchon");
280 
281  edm::ParameterSet ParametersResMFTrackwidthProfileWclus1Rphi = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfileWclus1Rphi");
282  layerswitchResMFTrackwidthProfileWclus1Rphi = ParametersResMFTrackwidthProfileWclus1Rphi.getParameter<bool>("layerswitchon");
283 
284  edm::ParameterSet ParametersResMFTrackwidthProfileWclus2Rphi = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfileWclus2Rphi");
285  layerswitchResMFTrackwidthProfileWclus2Rphi = ParametersResMFTrackwidthProfileWclus2Rphi.getParameter<bool>("layerswitchon");
286 
287  edm::ParameterSet ParametersResMFTrackwidthProfileWclus3Rphi = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfileWclus3Rphi");
288  layerswitchResMFTrackwidthProfileWclus3Rphi = ParametersResMFTrackwidthProfileWclus3Rphi.getParameter<bool>("layerswitchon");
289 
290  edm::ParameterSet ParametersResMFTrackwidthProfileWclus4Rphi = conf_.getParameter<edm::ParameterSet>("TProfResMFTrackwidthProfileWclus4Rphi");
291  layerswitchResMFTrackwidthProfileWclus4Rphi = ParametersResMFTrackwidthProfileWclus4Rphi.getParameter<bool>("layerswitchon");
292 
293  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory1Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory1Rphi");
294  layerswitchResolxMFTrackwidthProfileCategory1Rphi = ParametersResolxMFTrackwidthProfileCategory1Rphi.getParameter<bool>("layerswitchon");
295 
296  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory2Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory2Rphi");
297  layerswitchResolxMFTrackwidthProfileCategory2Rphi = ParametersResolxMFTrackwidthProfileCategory2Rphi.getParameter<bool>("layerswitchon");
298 
299  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory3Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory3Rphi");
300  layerswitchResolxMFTrackwidthProfileCategory3Rphi = ParametersResolxMFTrackwidthProfileCategory3Rphi.getParameter<bool>("layerswitchon");
301 
302  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory4Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory4Rphi");
303  layerswitchResolxMFTrackwidthProfileCategory4Rphi = ParametersResolxMFTrackwidthProfileCategory4Rphi.getParameter<bool>("layerswitchon");
304 
305  edm::ParameterSet ParametersResolxMFAngleProfileRphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFAngleProfileRphi");
306  layerswitchResolxMFAngleProfileRphi = ParametersResolxMFAngleProfileRphi.getParameter<bool>("layerswitchon");
307 
308  edm::ParameterSet ParametersResolxMFClusterwidthProfileCategory1Rphi = conf_.getParameter<edm::ParameterSet>("TProfResolxMFClusterwidthProfileCategory1Rphi");
309  layerswitchResolxMFClusterwidthProfileCategory1Rphi = ParametersResolxMFClusterwidthProfileCategory1Rphi.getParameter<bool>("layerswitchon");
310 
311  edm::ParameterSet ParametersrapidityResProfilewclus1 = conf_.getParameter<edm::ParameterSet>("TProfrapidityResProfilewclus1");
312  layerswitchrapidityResProfilewclus1 = ParametersrapidityResProfilewclus1.getParameter<bool>("layerswitchon");
313 
314  edm::ParameterSet ParametersrapidityResProfilewclus2 = conf_.getParameter<edm::ParameterSet>("TProfrapidityResProfilewclus2");
315  layerswitchrapidityResProfilewclus2 = ParametersrapidityResProfilewclus2.getParameter<bool>("layerswitchon");
316 
317  edm::ParameterSet ParametersrapidityResProfilewclus3 = conf_.getParameter<edm::ParameterSet>("TProfrapidityResProfilewclus3");
318  layerswitchrapidityResProfilewclus3 = ParametersrapidityResProfilewclus3.getParameter<bool>("layerswitchon");
319 
320  edm::ParameterSet ParametersrapidityResProfilewclus4 = conf_.getParameter<edm::ParameterSet>("TProfrapidityResProfilewclus4");
321  layerswitchrapidityResProfilewclus4 = ParametersrapidityResProfilewclus4.getParameter<bool>("layerswitchon");
322 
323  edm::ParameterSet ParametersWclusSas = conf_.getParameter<edm::ParameterSet>("TH1WclusSas");
324  layerswitchWclusSas = ParametersWclusSas.getParameter<bool>("layerswitchon");
325 
326  edm::ParameterSet ParametersAdcSas = conf_.getParameter<edm::ParameterSet>("TH1AdcSas");
327  layerswitchAdcSas = ParametersAdcSas.getParameter<bool>("layerswitchon");
328 
329  edm::ParameterSet ParametersResolxLFSas = conf_.getParameter<edm::ParameterSet>("TH1ResolxLFSas");
330  layerswitchResolxLFSas = ParametersResolxLFSas.getParameter<bool>("layerswitchon");
331 
332  edm::ParameterSet ParametersResolxMFSas = conf_.getParameter<edm::ParameterSet>("TH1ResolxMFSas");
333  layerswitchResolxMFSas = ParametersResolxMFSas.getParameter<bool>("layerswitchon");
334 
335  edm::ParameterSet ParametersResLFSas = conf_.getParameter<edm::ParameterSet>("TH1ResLFSas");
336  layerswitchResLFSas = ParametersResLFSas.getParameter<bool>("layerswitchon");
337 
338  edm::ParameterSet ParametersResMFSas = conf_.getParameter<edm::ParameterSet>("TH1ResMFSas");
339  layerswitchResMFSas = ParametersResMFSas.getParameter<bool>("layerswitchon");
340 
341  edm::ParameterSet ParametersPullLFSas = conf_.getParameter<edm::ParameterSet>("TH1PullLFSas");
342  layerswitchPullLFSas = ParametersPullLFSas.getParameter<bool>("layerswitchon");
343 
344  edm::ParameterSet ParametersPullMFSas = conf_.getParameter<edm::ParameterSet>("TH1PullMFSas");
345  layerswitchPullMFSas = ParametersPullMFSas.getParameter<bool>("layerswitchon");
346 
347  edm::ParameterSet ParametersTrackangleSas = conf_.getParameter<edm::ParameterSet>("TH1TrackangleSas");
348  layerswitchTrackangleSas = ParametersTrackangleSas.getParameter<bool>("layerswitchon");
349 
350  edm::ParameterSet ParametersTrackanglebetaSas = conf_.getParameter<edm::ParameterSet>("TH1TrackanglebetaSas");
351  layerswitchTrackanglebetaSas = ParametersTrackanglebetaSas.getParameter<bool>("layerswitchon");
352 
353  edm::ParameterSet ParametersPullTrackangleProfileSas = conf_.getParameter<edm::ParameterSet>("TProfPullTrackangleProfileSas");
354  layerswitchPullTrackangleProfileSas = ParametersPullTrackangleProfileSas.getParameter<bool>("layerswitchon");
355 
356  edm::ParameterSet ParametersTrackwidthSas = conf_.getParameter<edm::ParameterSet>("TH1TrackwidthSas");
357  layerswitchTrackwidthSas = ParametersTrackwidthSas.getParameter<bool>("layerswitchon");
358 
359  edm::ParameterSet ParametersExpectedwidthSas = conf_.getParameter<edm::ParameterSet>("TH1ExpectedwidthSas");
360  layerswitchExpectedwidthSas = ParametersExpectedwidthSas.getParameter<bool>("layerswitchon");
361 
362  edm::ParameterSet ParametersClusterwidthSas = conf_.getParameter<edm::ParameterSet>("TH1ClusterwidthSas");
363  layerswitchClusterwidthSas = ParametersClusterwidthSas.getParameter<bool>("layerswitchon");
364 
365  edm::ParameterSet ParametersCategorySas = conf_.getParameter<edm::ParameterSet>("TH1CategorySas");
366  layerswitchCategorySas = ParametersCategorySas.getParameter<bool>("layerswitchon");
367 
368  edm::ParameterSet ParametersPullTrackwidthProfileSas = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileSas");
369  layerswitchPullTrackwidthProfileSas = ParametersPullTrackwidthProfileSas.getParameter<bool>("layerswitchon");
370 
371  edm::ParameterSet ParametersPullTrackwidthProfileCategory1Sas = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory1Sas");
372  layerswitchPullTrackwidthProfileCategory1Sas = ParametersPullTrackwidthProfileCategory1Sas.getParameter<bool>("layerswitchon");
373 
374  edm::ParameterSet ParametersPullTrackwidthProfileCategory2Sas = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory2Sas");
375  layerswitchPullTrackwidthProfileCategory2Sas = ParametersPullTrackwidthProfileCategory2Sas.getParameter<bool>("layerswitchon");
376 
377  edm::ParameterSet ParametersPullTrackwidthProfileCategory3Sas = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory3Sas");
378  layerswitchPullTrackwidthProfileCategory3Sas = ParametersPullTrackwidthProfileCategory3Sas.getParameter<bool>("layerswitchon");
379 
380  edm::ParameterSet ParametersPullTrackwidthProfileCategory4Sas = conf_.getParameter<edm::ParameterSet>("TProfPullTrackwidthProfileCategory4Sas");
381  layerswitchPullTrackwidthProfileCategory4Sas = ParametersPullTrackwidthProfileCategory4Sas.getParameter<bool>("layerswitchon");
382 
383  edm::ParameterSet ParametersResolxMFTrackwidthProfileSas = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileSas");
384  layerswitchResolxMFTrackwidthProfileSas = ParametersResolxMFTrackwidthProfileSas.getParameter<bool>("layerswitchon");
385 
386  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory1Sas = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory1Sas");
387  layerswitchResolxMFTrackwidthProfileCategory1Sas = ParametersResolxMFTrackwidthProfileCategory1Sas.getParameter<bool>("layerswitchon");
388 
389  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory2Sas = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory2Sas");
390  layerswitchResolxMFTrackwidthProfileCategory2Sas = ParametersResolxMFTrackwidthProfileCategory2Sas.getParameter<bool>("layerswitchon");
391 
392  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory3Sas = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory3Sas");
393  layerswitchResolxMFTrackwidthProfileCategory3Sas = ParametersResolxMFTrackwidthProfileCategory3Sas.getParameter<bool>("layerswitchon");
394 
395  edm::ParameterSet ParametersResolxMFTrackwidthProfileCategory4Sas = conf_.getParameter<edm::ParameterSet>("TProfResolxMFTrackwidthProfileCategory4Sas");
396  layerswitchResolxMFTrackwidthProfileCategory4Sas = ParametersResolxMFTrackwidthProfileCategory4Sas.getParameter<bool>("layerswitchon");
397 
398  edm::ParameterSet ParametersResolxMFAngleProfileSas = conf_.getParameter<edm::ParameterSet>("TProfResolxMFAngleProfileSas");
399  layerswitchResolxMFAngleProfileSas = ParametersResolxMFAngleProfileSas.getParameter<bool>("layerswitchon");
400 
401  edm::ParameterSet ParametersResolxMFClusterwidthProfileCategory1Sas = conf_.getParameter<edm::ParameterSet>("TProfResolxMFClusterwidthProfileCategory1Sas");
402  layerswitchResolxMFClusterwidthProfileCategory1Sas = ParametersResolxMFClusterwidthProfileCategory1Sas.getParameter<bool>("layerswitchon");
403 
404  edm::ParameterSet ParametersPosxMatched = conf_.getParameter<edm::ParameterSet>("TH1PosxMatched");
405  layerswitchPosxMatched = ParametersPosxMatched.getParameter<bool>("layerswitchon");
406 
407  edm::ParameterSet ParametersPosyMatched = conf_.getParameter<edm::ParameterSet>("TH1PosyMatched");
408  layerswitchPosyMatched = ParametersPosyMatched.getParameter<bool>("layerswitchon");
409 
410  edm::ParameterSet ParametersResolxMatched = conf_.getParameter<edm::ParameterSet>("TH1ResolxMatched");
411  layerswitchResolxMatched = ParametersResolxMatched.getParameter<bool>("layerswitchon");
412 
413  edm::ParameterSet ParametersResolyMatched = conf_.getParameter<edm::ParameterSet>("TH1ResolyMatched");
414  layerswitchResolyMatched = ParametersResolyMatched.getParameter<bool>("layerswitchon");
415 
416  edm::ParameterSet ParametersResxMatched = conf_.getParameter<edm::ParameterSet>("TH1ResxMatched");
417  layerswitchResxMatched = ParametersResxMatched.getParameter<bool>("layerswitchon");
418 
419  edm::ParameterSet ParametersResyMatched = conf_.getParameter<edm::ParameterSet>("TH1ResyMatched");
420  layerswitchResyMatched = ParametersResyMatched.getParameter<bool>("layerswitchon");
421 
422  edm::ParameterSet ParametersPullxMatched = conf_.getParameter<edm::ParameterSet>("TH1PullxMatched");
423  layerswitchPullxMatched = ParametersPullxMatched.getParameter<bool>("layerswitchon");
424 
425  edm::ParameterSet ParametersPullyMatched = conf_.getParameter<edm::ParameterSet>("TH1PullyMatched");
426  layerswitchPullyMatched = ParametersPullyMatched.getParameter<bool>("layerswitchon");
427 
428 }
429 
430 //Destructor
432 }
433 //--------------------------------------------------------------------------------------------
435 
436  unsigned long long cacheID = es.get<SiStripDetCablingRcd>().cacheIdentifier();
437  if (m_cacheID_ != cacheID) {
438  m_cacheID_ = cacheID;
439  edm::LogInfo("SiStripRecHitsValid") <<"SiStripRecHitsValid::beginRun: "
440  << " Creating MEs for new Cabling ";
441 
442  createMEs(ibooker,es);
443  }
444 }
445 
446 
448 
449 }
450 
452 
453  //Only in standalone mode save local root file
455 
456 }
457 
458 // Functions that gets called by framework every event
460 {
461 
462  LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event();
463  //cout << " Run = " << e.id().run() << " Event = " << e.id().event() << endl;
464 
465  int isrechitrphi = 0;
466  int isrechitsas = 0;
467  int isrechitmatched = 0;
468 
469  DetId detid;
470  uint32_t myid;
471 
472  TrackerHitAssociator associate(e, conf_);
473  PSimHit closest;
474 
475  //Retrieve tracker topology from geometry
476  edm::ESHandle<TrackerTopology> tTopoHandle;
477  es.get<IdealGeometryRecord>().get(tTopoHandle);
478  const TrackerTopology* const tTopo = tTopoHandle.product();
479 
481  es.get < TrackerDigiGeometryRecord > ().get(pDD);
482  const TrackerGeometry & tracker(*pDD);
483 
484  const TrackerGeometry *tracker2;
486  es.get < TrackerDigiGeometryRecord > ().get(estracker);
487  tracker2 = &(*estracker);
488 
490  es.get < IdealMagneticFieldRecord > ().get(magfield);
491 
492  const MagneticField & magfield_(*magfield);
493  magfield2_ = &magfield_;
494 
496  es.get < TkStripCPERecord > ().get("SimpleStripCPE", stripcpe);
497 
498  // Mangano's
499 
500  edm::Handle < std::vector<Trajectory> > trajCollectionHandle;
501  e.getByToken(trajectoryInputToken_, trajCollectionHandle);
502 
503  edm::LogVerbatim("TrajectoryAnalyzer") << "trajColl->size(): " << trajCollectionHandle->size();
504 
505  for (vector < Trajectory >::const_iterator it = trajCollectionHandle->begin(); it != trajCollectionHandle->end(); it++) {
506 
507  edm::LogVerbatim("TrajectoryAnalyzer") << "this traj has " << it->foundHits() << " valid hits" << " , " << "isValid: " << it->isValid();
508 
509  vector < TrajectoryMeasurement > tmColl = it->measurements();
510  for (vector < TrajectoryMeasurement >::const_iterator itTraj = tmColl.begin(); itTraj != tmColl.end(); itTraj++) {
511  if (!itTraj->updatedState().isValid()) continue;
512 
513  rechitrphi.clear();
514  rechitstereo.clear();
515  rechitmatched.clear();
516 
517  //edm::LogVerbatim("TrajectoryAnalyzer") << "tm number: " <<
518  // (itTraj - tmColl.begin()) + 1<< " , " << "tm.backwardState.pt: " <<
519  // itTraj->backwardPredictedState().globalMomentum().perp() << " , " <<
520  // "tm.forwardState.pt: " << itTraj->forwardPredictedState().globalMomentum().perp() <<
521  // " , " << "tm.updatedState.pt: " << itTraj->updatedState().globalMomentum().perp() <<
522  // " , " << "tm.globalPos.perp: " << itTraj->updatedState().globalPosition().perp();
523 
524  if (itTraj->updatedState().globalMomentum().perp() < 0.5) continue;
525 
526  TrajectoryStateOnSurface tsos = itTraj->updatedState();
527 
528  DetId detid2 = itTraj->recHit()->geographicalId();
529 
530  const TransientTrackingRecHit::ConstRecHitPointer thit2 = itTraj->recHit();
531  const SiStripMatchedRecHit2D *matchedhit = dynamic_cast < const SiStripMatchedRecHit2D * >((*thit2).hit());
532  const SiStripRecHit2D *hit2d = dynamic_cast < const SiStripRecHit2D * >((*thit2).hit());
533  const SiStripRecHit1D *hit1d = dynamic_cast < const SiStripRecHit1D * >((*thit2).hit());
534  //if(matchedhit) cout<<"manganomatchedhit"<<endl;
535  //if(hit) cout<<"manganosimplehit"<<endl;
536  //if (hit && matchedhit) cout<<"manganosimpleandmatchedhit"<<endl;
537  const TrackingRecHit *thit = (*thit2).hit();
538 
539  detid = (thit)->geographicalId();
540  myid = ((thit)->geographicalId()).rawId();
541  //Here due to the fact that the SiStripHistoId::getSubdetid complains when
542  //a subdet of 1 or 2 appears we add an if statement.
543  if(detid.subdetId()==1 ||detid.subdetId()==2 ){
544  continue;
545  }
546  SiStripHistoId hidmanager;
547  std::string label = hidmanager.getSubdetid(myid,tTopo,true);
548  // std::cout<< "label " << label << " and id " << detid.subdetId() << std::endl;
549 
550  StripSubdetector StripSubdet = (StripSubdetector) detid;
551  //Variable to define the case we are dealing with
552  std::string matchedmonorstereo;
553 
554  isrechitmatched = 0;
555 
556  if (matchedhit) {
557 
558  isrechitmatched = 1;
559  const GluedGeomDet *gluedDet = (const GluedGeomDet *) tracker.idToDet(matchedhit->geographicalId());
560  //Analysis
561  matchedmonorstereo = "matched";
562  rechitanalysis_matched(tsos, thit2, gluedDet, associate, stripcpe, matchedmonorstereo );
563  // rechitmatched.push_back(rechitpro);
564 
565  }
566 
567  std::map<std::string, StereoAndMatchedMEs>::iterator iStereoAndMatchedME = StereoAndMatchedMEsMap.find(label);
568 
569  //Filling Histograms for Matched hits
570 
571  if (isrechitmatched) {
572 
573  if(iStereoAndMatchedME != StereoAndMatchedMEsMap.end()){
574  fillME(iStereoAndMatchedME->second.mePosxMatched,rechitpro.x);
575  fillME(iStereoAndMatchedME->second.mePosyMatched,rechitpro.y);
576  fillME(iStereoAndMatchedME->second.meResolxMatched,sqrt(rechitpro.resolxx));
577  fillME(iStereoAndMatchedME->second.meResolyMatched,sqrt(rechitpro.resolyy));
578  fillME(iStereoAndMatchedME->second.meResxMatched,rechitpro.resx);
579  fillME(iStereoAndMatchedME->second.meResyMatched,rechitpro.resy);
580  fillME(iStereoAndMatchedME->second.mePullxMatched,rechitpro.pullx);
581  fillME(iStereoAndMatchedME->second.mePullyMatched,rechitpro.pully);
582  }
583 
584  }
585 
586  //Reset Variables here for the current event
587  isrechitrphi = 0;
588  isrechitsas = 0;
589 
591  // simple hits from matched hits
593 
594  if (tsos.globalDirection().transverse() != 0) {
596  } else {
597  track_rapidity = -999.0;
598  }
599 
600  GluedGeomDet *gdet;
601  const SiStripRecHit2D *monohit;
602 
603  if (matchedhit) {
604  auto hm = matchedhit->monoHit();
605  monohit = &hm;
606  // const GeomDetUnit * monodet=gdet->monoDet();
607  gdet = (GluedGeomDet *) tracker2->idToDet(matchedhit->geographicalId());
608 
609  if (monohit) {
610 
611  isrechitrphi = 1;
612 
613  //Analysis
614  matchedmonorstereo = "monoHit";
615  rechitanalysis_matched(tsos, thit2, gdet, associate, stripcpe, matchedmonorstereo );
616 
617  }
618 
619  auto s = matchedhit->stereoHit();
620  const SiStripRecHit2D *stereohit = &s;
621 
622  if (stereohit) {
623 
624  isrechitsas = 1;
625 
626  //Analysis
627  matchedmonorstereo = "stereoHit";
628  rechitanalysis_matched(tsos, thit2, gdet, associate, stripcpe, matchedmonorstereo );
629  }
630  }
631 
632  if (hit1d) {
633  // simple hits are mono or stereo
634  // cout<<"simple hit"<<endl;
635  if (StripSubdet.stereo() == 0) {
636  isrechitrphi = 1;
637  // cout<<"simple hit mono"<<endl;
638 
639  const GeomDetUnit *det = tracker.idToDetUnit(detid2);
640  const StripGeomDetUnit *stripdet = (const StripGeomDetUnit *) (det);
641 
642  //Analysis for hit1d mono
643  rechitanalysis(tsos, thit2, stripdet, stripcpe, associate, true);
644 
645  }
646 
647  if (StripSubdet.stereo() == 1) {
648 
649  //cout<<"simple hit stereo"<<endl;
650  isrechitsas = 1;
651 
652  const GeomDetUnit *det = tracker.idToDetUnit(detid2);
653  const StripGeomDetUnit *stripdet = (const StripGeomDetUnit *) (det);
654 
655  //Analysis for hit1d stereo
656  rechitanalysis(tsos, thit2, stripdet, stripcpe, associate, true);
657 
658  }
659  }
660 
661 
662  if (hit2d) {
663  // simple hits are mono or stereo
664  // cout<<"simple hit"<<endl;
665  if (StripSubdet.stereo() == 0) {
666  isrechitrphi = 1;
667  // cout<<"simple hit mono"<<endl;
668 
669  const GeomDetUnit *det = tracker.idToDetUnit(detid2);
670  const StripGeomDetUnit *stripdet = (const StripGeomDetUnit *) (det);
671 
672  //Analysis for hit2d mono
673  rechitanalysis(tsos, thit2, stripdet, stripcpe, associate, false);
674 
675  }
676 
677  if (StripSubdet.stereo() == 1) {
678 
679  //cout<<"simple hit stereo"<<endl;
680  isrechitsas = 1;
681 
682  const GeomDetUnit *det = tracker.idToDetUnit(detid2);
683  const StripGeomDetUnit *stripdet = (const StripGeomDetUnit *) (det);
684 
685  //Analysis for hit2d stereo
686  rechitanalysis(tsos, thit2, stripdet, stripcpe, associate, false);
687 
688  }
689  }
690 
691  //Filling Histograms for simple hits
692  //cout<<"isrechitrphi,isrechitsas = "<<isrechitrphi<<","<<isrechitsas<<endl;
693 
694  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
695 
696  if (isrechitrphi > 0 || isrechitsas > 0) {
697 
698 
699 
700  if (isrechitrphi > 0) {
701 
708 
711 
712  if (rechitpro.clusiz == 1) {
715  }
716  if (rechitpro.clusiz == 2) {
722  }
723  if (rechitpro.clusiz == 3) {
726  }
727  if (rechitpro.clusiz == 4) {
730  }
731 
732  if (rechitpro.category == 1) {
735  }
736  if (rechitpro.category == 2) {
738  }
739  if (rechitpro.category == 3) {
741  }
742  if (rechitpro.category == 4) {
744  }
745 
752 
753  }
754 
755  if (isrechitsas > 0) {
756 
763 
766 
767  if (rechitpro.clusiz == 1) {
770  }
771 
772  if (rechitpro.clusiz == 2) {
775  }
776  if (rechitpro.clusiz == 3) {
779  }
780  if (rechitpro.clusiz == 4) {
783  }
784  if (rechitpro.category == 1) {
787  }
788  if (rechitpro.category == 2) {
790  }
791  if (rechitpro.category == 3) {
793  }
794  if (rechitpro.category == 4) {
796  }
797 
804 
805  }
806 
807 
808 
809  if(iLayerME != LayerMEsMap.end()){
810 
811  if (isrechitrphi > 0) {
812 
813  fillME(iLayerME->second.meWclusRphi,rechitpro.clusiz);
814  fillME(iLayerME->second.meAdcRphi,rechitpro.cluchg);
815  fillME(iLayerME->second.meResolxLFRphi,sqrt(rechitpro.resolxx));
816  fillME(iLayerME->second.meResolxMFRphi,sqrt(rechitpro.resolxxMF));
817 
818  if( (min(rechitpro.clusiz, 4) - 1) == 1 ){fillME(iLayerME->second.meResolxMFRphiwclus1,sqrt(rechitpro.resolxxMF));}
819  if( (min(rechitpro.clusiz, 4) - 1) == 2 ){fillME(iLayerME->second.meResolxMFRphiwclus2,sqrt(rechitpro.resolxxMF));}
820  if( (min(rechitpro.clusiz, 4) - 1) == 3 ){fillME(iLayerME->second.meResolxMFRphiwclus3,sqrt(rechitpro.resolxxMF));}
821  if( (min(rechitpro.clusiz, 4) - 1) == 4 ){fillME(iLayerME->second.meResolxMFRphiwclus4,sqrt(rechitpro.resolxxMF));}
822 
823  fillME(iLayerME->second.meResLFRphi,rechitpro.resx);
824  fillME(iLayerME->second.meResMFRphi,rechitpro.resxMF);
825 
826  if( (min(rechitpro.clusiz, 4) - 1) == 1 ){fillME(iLayerME->second.merapidityResProfilewclus1,track_rapidity, fabs(rechitpro.resxMF));}
827  if( (min(rechitpro.clusiz, 4) - 1) == 2 ){fillME(iLayerME->second.merapidityResProfilewclus2,track_rapidity, fabs(rechitpro.resxMF));}
828  if( (min(rechitpro.clusiz, 4) - 1) == 3 ){fillME(iLayerME->second.merapidityResProfilewclus3,track_rapidity, fabs(rechitpro.resxMF));}
829  if( (min(rechitpro.clusiz, 4) - 1) == 4 ){fillME(iLayerME->second.merapidityResProfilewclus4,track_rapidity, fabs(rechitpro.resxMF));}
830 
831  if( (min(rechitpro.clusiz, 4) - 1) == 1 ){fillME(iLayerME->second.meResMFRphiwclus1,rechitpro.resxMF);}
832  if( (min(rechitpro.clusiz, 4) - 1) == 2 ){fillME(iLayerME->second.meResMFRphiwclus2,rechitpro.resxMF);}
833  if( (min(rechitpro.clusiz, 4) - 1) == 3 ){fillME(iLayerME->second.meResMFRphiwclus3,rechitpro.resxMF);}
834  if( (min(rechitpro.clusiz, 4) - 1) == 4 ){fillME(iLayerME->second.meResMFRphiwclus4,rechitpro.resxMF);}
835 
836  fillME(iLayerME->second.mePullLFRphi,rechitpro.pullx);
837  fillME(iLayerME->second.mePullMFRphi,rechitpro.pullxMF);
838 
839  if( (min(rechitpro.clusiz, 4) - 1) == 1 ){fillME(iLayerME->second.mePullMFRphiwclus1,rechitpro.pullxMF);}
840  if( (min(rechitpro.clusiz, 4) - 1) == 2 ){fillME(iLayerME->second.mePullMFRphiwclus2,rechitpro.pullxMF);}
841  if( (min(rechitpro.clusiz, 4) - 1) == 3 ){fillME(iLayerME->second.mePullMFRphiwclus3,rechitpro.pullxMF);}
842  if( (min(rechitpro.clusiz, 4) - 1) == 4 ){fillME(iLayerME->second.mePullMFRphiwclus4,rechitpro.pullxMF);}
843 
844 
845  fillME(iLayerME->second.meTrackangleRphi,rechitpro.trackangle);
846  fillME(iLayerME->second.mePullTrackangleProfileRphi,rechitpro.trackangle,fabs(rechitpro.pullxMF));
847 
848  if( (min(rechitpro.clusiz, 4) - 1) == 1 ){fillME(iLayerME->second.mePullTrackwidthProfileRphiwclus1,rechitpro.trackwidth, fabs(rechitpro.pullxMF));}
849  if( (min(rechitpro.clusiz, 4) - 1) == 2 ){fillME(iLayerME->second.mePullTrackwidthProfileRphiwclus2,rechitpro.trackwidth, fabs(rechitpro.pullxMF));}
850  if( (min(rechitpro.clusiz, 4) - 1) == 3 ){fillME(iLayerME->second.mePullTrackwidthProfileRphiwclus3,rechitpro.trackwidth, fabs(rechitpro.pullxMF));}
851  if( (min(rechitpro.clusiz, 4) - 1) == 4 ){fillME(iLayerME->second.mePullTrackwidthProfileRphiwclus4,rechitpro.trackwidth, fabs(rechitpro.pullxMF));}
852 
853 
854  if (rechitpro.clusiz == 1) {
855  fillME(iLayerME->second.meResolxMFTrackwidthProfileWclus1Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
856  fillME(iLayerME->second.meResMFTrackwidthProfileWclus1Rphi,rechitpro.trackwidth,fabs(rechitpro.resxMF));
857  }
858  if (rechitpro.clusiz == 2) {
859  fillME(iLayerME->second.meResolxMFTrackwidthProfileWclus2Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
860  fillME(iLayerME->second.meResMFTrackwidthProfileWclus2Rphi,rechitpro.trackwidth,fabs(rechitpro.resxMF));
861  }
862  if (rechitpro.clusiz == 3) {
863  fillME(iLayerME->second.meResolxMFTrackwidthProfileWclus3Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
864  fillME(iLayerME->second.meResMFTrackwidthProfileWclus3Rphi,rechitpro.trackwidth,fabs(rechitpro.resxMF));
865  }
866  if (rechitpro.clusiz == 4) {
867  fillME(iLayerME->second.meResolxMFTrackwidthProfileWclus4Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
868  fillME(iLayerME->second.meResMFTrackwidthProfileWclus4Rphi,rechitpro.trackwidth,fabs(rechitpro.resxMF));
869  }
870 
871 
872  if (rechitpro.category == 1) {
873  fillME(iLayerME->second.mePullTrackwidthProfileCategory1Rphi,rechitpro.trackwidth,fabs(rechitpro.pullxMF));
874  fillME(iLayerME->second.meResolxMFTrackwidthProfileCategory1Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
875  fillME(iLayerME->second.meResolxMFClusterwidthProfileCategory1Rphi,rechitpro.clusiz,sqrt(rechitpro.resolxxMF));
876  }
877  if (rechitpro.category == 2) {
878  fillME(iLayerME->second.mePullTrackwidthProfileCategory2Rphi,rechitpro.trackwidth,fabs(rechitpro.pullxMF));
879  fillME(iLayerME->second.meResolxMFTrackwidthProfileCategory2Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
880  }
881  if (rechitpro.category == 3) {
882  fillME(iLayerME->second.mePullTrackwidthProfileCategory3Rphi,rechitpro.trackwidth,fabs(rechitpro.pullxMF));
883  fillME(iLayerME->second.meResolxMFTrackwidthProfileCategory3Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
884  }
885  if (rechitpro.category == 4) {
886  fillME(iLayerME->second.mePullTrackwidthProfileCategory4Rphi,rechitpro.trackwidth,fabs(rechitpro.pullxMF));
887  fillME(iLayerME->second.meResolxMFTrackwidthProfileCategory4Rphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
888  }
889 
890  fillME(iLayerME->second.meTrackwidthRphi,rechitpro.trackwidth);
891  fillME(iLayerME->second.meExpectedwidthRphi,rechitpro.expectedwidth);
892  fillME(iLayerME->second.meClusterwidthRphi,rechitpro.clusiz);
893  fillME(iLayerME->second.meCategoryRphi,rechitpro.category);
894  fillME(iLayerME->second.meResolxMFTrackwidthProfileRphi,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
895  fillME(iLayerME->second.meResolxMFAngleProfileRphi,rechitpro.trackangle,sqrt(rechitpro.resolxxMF));
896  }
897 
898  }
899 
900  if(iStereoAndMatchedME != StereoAndMatchedMEsMap.end()){
901 
902  if (isrechitsas > 0) {
903 
904  fillME(iStereoAndMatchedME->second.meWclusSas,rechitpro.clusiz);
905  fillME(iStereoAndMatchedME->second.meAdcSas,rechitpro.cluchg);
906  fillME(iStereoAndMatchedME->second.meResolxLFSas,sqrt(rechitpro.resolxx));
907  fillME(iStereoAndMatchedME->second.meResLFSas,rechitpro.resx);
908  fillME(iStereoAndMatchedME->second.mePullLFSas,rechitpro.pullx);
909  fillME(iStereoAndMatchedME->second.meResolxMFSas,sqrt(rechitpro.resolxxMF));
910  fillME(iStereoAndMatchedME->second.meResMFSas,rechitpro.resxMF);
911  fillME(iStereoAndMatchedME->second.mePullMFSas,rechitpro.pullxMF);
912  fillME(iStereoAndMatchedME->second.meTrackangleSas,rechitpro.trackangle);
913  fillME(iStereoAndMatchedME->second.mePullTrackangleProfileSas,rechitpro.trackangle, rechitpro.pullxMF);
914  fillME(iStereoAndMatchedME->second.mePullTrackwidthProfileSas,rechitpro.trackwidth, rechitpro.pullxMF);
915  if (rechitpro.category == 1) {
916  fillME(iStereoAndMatchedME->second.mePullTrackwidthProfileCategory1Sas,rechitpro.trackwidth,rechitpro.pullxMF);
917  fillME(iStereoAndMatchedME->second.meResolxMFTrackwidthProfileCategory1Sas,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
918  fillME(iStereoAndMatchedME->second.meResolxMFClusterwidthProfileCategory1Sas,rechitpro.clusiz,sqrt(rechitpro.resolxxMF));
919  }
920  if (rechitpro.category == 2) {
921  fillME(iStereoAndMatchedME->second.mePullTrackwidthProfileCategory2Sas,rechitpro.trackwidth,rechitpro.pullxMF);
922  fillME(iStereoAndMatchedME->second.meResolxMFTrackwidthProfileCategory2Sas,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
923  }
924  if (rechitpro.category == 3) {
925  fillME(iStereoAndMatchedME->second.mePullTrackwidthProfileCategory3Sas,rechitpro.trackwidth,rechitpro.pullxMF);
926  fillME(iStereoAndMatchedME->second.meResolxMFTrackwidthProfileCategory3Sas,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
927  }
928  if (rechitpro.category == 4) {
929  fillME(iStereoAndMatchedME->second.mePullTrackwidthProfileCategory4Sas,rechitpro.trackwidth,rechitpro.pullxMF);
930  fillME(iStereoAndMatchedME->second.meResolxMFTrackwidthProfileCategory4Sas,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
931  }
932  fillME(iStereoAndMatchedME->second.meTrackwidthSas,rechitpro.trackwidth);
933  fillME(iStereoAndMatchedME->second.meExpectedwidthSas,rechitpro.expectedwidth);
934  fillME(iStereoAndMatchedME->second.meClusterwidthSas,rechitpro.clusiz);
935  fillME(iStereoAndMatchedME->second.meCategorySas,rechitpro.category);
936  fillME(iStereoAndMatchedME->second.meResolxMFTrackwidthProfileSas,rechitpro.trackwidth,sqrt(rechitpro.resolxxMF));
937  fillME(iStereoAndMatchedME->second.meResolxMFAngleProfileSas,rechitpro.trackangle, rechitpro.resolxxMF);
938  }
939 
940  }
941 
942 
943  } //simplehits
944  //cout<<"DebugLine301"<<endl;
945 
946  }
947  //cout<<"DebugLine302"<<endl;
948 
949  }
950  //cout<<"DebugLine303"<<endl;
951 
952 }
953 
954 
955 
956 //needed by to do the residual for matched hits
957 std::pair < LocalPoint, LocalVector > SiStripTrackingRecHitsValid::projectHit(const PSimHit & hit,
958  const StripGeomDetUnit
959  * stripDet,
960  const BoundPlane &
961  plane)
962 {
963  // const StripGeomDetUnit* stripDet = dynamic_cast<const StripGeomDetUnit*>(hit.det());
964  //if (stripDet == 0) throw MeasurementDetException("HitMatcher hit is not on StripGeomDetUnit");
965 
966  const StripTopology & topol = stripDet->specificTopology();
967  GlobalPoint globalpos = stripDet->surface().toGlobal(hit.localPosition());
968  LocalPoint localHit = plane.toLocal(globalpos);
969  //track direction
970  LocalVector locdir = hit.localDirection();
971  //rotate track in new frame
972 
973  GlobalVector globaldir = stripDet->surface().toGlobal(locdir);
974  LocalVector dir = plane.toLocal(globaldir);
975  float scale = -localHit.z() / dir.z();
976 
977  LocalPoint projectedPos = localHit + scale * dir;
978 
979  // std::cout << "projectedPos " << projectedPos << std::endl;
980 
981  float selfAngle = topol.stripAngle(topol.strip(hit.localPosition()));
982 
983  LocalVector stripDir(sin(selfAngle), cos(selfAngle), 0); // vector along strip in hit frame
984 
985  LocalVector localStripDir(plane.toLocal(stripDet->surface().toGlobal(stripDir)));
986 
987  return std::pair < LocalPoint, LocalVector > (projectedPos, localStripDir);
988 }
989 //--------------------------------------------------------------------------------------------
991 
992  rechitpro.x = -999999.; rechitpro.y = -999999.; rechitpro.z = -999999.; rechitpro.resolxx = -999999.; rechitpro.resolxy = -999999.; rechitpro.resolyy = -999999.;
993  rechitpro.resolxxMF = -999999.; rechitpro.phi = -999999.;rechitpro.resx = -999999.; rechitpro.resy = -999999.; rechitpro.resxMF = -999999.;
994  rechitpro.pullx = -999999.; rechitpro.pully = -999999.; rechitpro.pullxMF = -999999.; rechitpro.trackangle = -999999.; rechitpro.trackanglebeta = -999999.;
995  rechitpro.trackangle2 = -999999.; rechitpro.trackwidth = -999999.; rechitpro.expectedwidth = -999999.; rechitpro.category = -999999.; rechitpro.thickness = -999999.;
996  rechitpro.clusiz = -999999.; rechitpro.cluchg = -999999.;
997 
998  const GeomDetUnit *monodet = gluedDet->monoDet();
999  const GeomDetUnit *stereodet = gluedDet->stereoDet();
1000  //We initialized it to monoHit case because it complains that it may be uninitialized
1001  //and it will change value in the stereoHit case. The matched case do not use this
1002  const StripGeomDetUnit *stripdet = (const StripGeomDetUnit *) (monodet) ;
1003 
1004  const SiStripMatchedRecHit2D *matchedhit = dynamic_cast < const SiStripMatchedRecHit2D * >((*thit).hit());
1005  const SiStripRecHit2D *monohit;
1006  const SiStripRecHit2D *stereohit;
1007 
1008  if (matchedmonorstereo == "monoHit"){
1009  auto hm = matchedhit->monoHit();
1010  monohit = &hm;
1011  stripdet = (const StripGeomDetUnit *) (monodet);
1012  }
1013  if (matchedmonorstereo == "stereoHit"){
1014  auto s = matchedhit->stereoHit();
1015  stereohit = &s;
1016  stripdet = (const StripGeomDetUnit *) (stereodet);
1017  }
1018  //if(matchedhit) cout<<"manganomatchedhit"<<endl;
1019  //if(hit) cout<<"manganosimplehit"<<endl;
1020  //if (hit && matchedhit) cout<<"manganosimpleandmatchedhit"<<endl;
1021  const StripTopology & topol = (const StripTopology &) stripdet->topology();
1022  const TrackingRecHit *rechit = (*thit).hit();
1023 
1025  LocalError error;
1026  MeasurementPoint Mposition;
1027  MeasurementError Merror;
1028 
1029  if (matchedmonorstereo == "matched"){
1030  position=rechit->localPosition();
1031  error=rechit->localPositionError();
1032  }
1033  if(matchedmonorstereo == "monoHit"){
1034  position = monohit->localPosition();
1035  error = monohit->localPositionError();
1036  Mposition = topol.measurementPosition(position);
1037  Merror = topol.measurementError(position, error);
1038  }
1039  if (matchedmonorstereo == "stereoHit"){
1040  position = stereohit->localPosition();
1041  error = stereohit->localPositionError();
1042  Mposition = topol.measurementPosition(position);
1043  Merror = topol.measurementError(position, error);
1044  }
1045 
1046  LocalVector trackdirection = tsos.localDirection();
1047 
1048  GlobalVector gtrkdir = gluedDet->toGlobal(trackdirection);
1049  LocalVector monotkdir = monodet->toLocal(gtrkdir);
1050  LocalVector stereotkdir = stereodet->toLocal(gtrkdir);
1051 
1052  if(matchedmonorstereo == "monoHit"){
1053  if (monotkdir.z() != 0) {
1054  rechitpro.trackangle = atan(monotkdir.x() / monotkdir.z()) * TMath::RadToDeg();
1055  rechitpro.trackanglebeta = atan(monotkdir.y() / monotkdir.z()) * TMath::RadToDeg();
1056  }
1057  }
1058  if (matchedmonorstereo == "stereoHit"){
1059  if (stereotkdir.z() != 0) {
1060  rechitpro.trackangle = atan(stereotkdir.x() / stereotkdir.z()) * TMath::RadToDeg();
1061  rechitpro.trackanglebeta = atan(stereotkdir.y() / stereotkdir.z()) * TMath::RadToDeg();
1062  }
1063  }
1064 
1065  LocalVector drift = stripcpe->driftDirection(stripdet);
1066  rechitpro.thickness = stripdet->surface().bounds().thickness();
1067  float pitch = topol.localPitch(position);
1068  float tanalpha = tan(rechitpro.trackangle * TMath::DegToRad());
1069  float tanalphaL = drift.x() / drift.z();
1070  rechitpro.trackwidth = fabs((rechitpro.thickness / pitch) * tanalpha - (rechitpro.thickness / pitch) * tanalphaL);
1071  float SLorentz = 0.5 * (rechitpro.thickness / pitch) * tanalphaL;
1072  int Sp = int (position.x() / pitch + SLorentz + 0.5 * rechitpro.trackwidth);
1073  int Sm = int (position.x() / pitch + SLorentz - 0.5 * rechitpro.trackwidth);
1074  rechitpro.expectedwidth = 1 + Sp - Sm;
1075 
1077  if(matchedmonorstereo == "monoHit"){clust = monohit->cluster();}
1078  if(matchedmonorstereo == "stereoHit"){clust = stereohit->cluster();}
1079 
1080  int clusiz=0;
1081  int totcharge=0;
1082  clusiz = clust->amplitudes().size();
1083  const auto & amplitudes=clust->amplitudes();
1084  for(size_t ia=0; ia<amplitudes.size();ia++){
1085  totcharge+=amplitudes[ia];
1086  }
1087 
1088  rechitpro.x = position.x();
1089  rechitpro.y = position.y();
1090  rechitpro.z = position.z();
1091  rechitpro.resolxx = error.xx();
1092  rechitpro.resolxy = error.xy();
1093  rechitpro.resolyy = error.yy();
1094  rechitpro.resolxxMF = Merror.uu();
1095  rechitpro.clusiz = clusiz;
1096  rechitpro.cluchg = totcharge;
1097 
1098  unsigned int iopt;
1100  iopt = 1;
1101  } else if (rechitpro.expectedwidth == 1) {
1102  iopt = 2;
1103  } else if (rechitpro.clusiz <= rechitpro.expectedwidth) {
1104  iopt = 3;
1105  } else {
1106  iopt = 4;
1107  }
1108  rechitpro.category = iopt;
1109 
1110  if(matchedmonorstereo == "matched"){matched.clear();matched = associate.associateHit(*matchedhit);}
1111  if(matchedmonorstereo == "monoHit"){matched.clear();matched = associate.associateHit(*monohit);}
1112  if(matchedmonorstereo == "stereoHit"){matched.clear();matched = associate.associateHit(*stereohit);}
1113 
1114  double mindist = 999999;
1115  double dist = 999999;
1116  double distx = 999999;
1117  double disty = 999999;
1118  std::pair<LocalPoint,LocalVector> closestPair;
1119  PSimHit closest;
1120 
1121  if(!matched.empty()){
1122 
1123  const StripGeomDetUnit* partnerstripdet =(StripGeomDetUnit*) gluedDet->stereoDet();
1124  std::pair<LocalPoint,LocalVector> hitPair;
1125 
1126  for(vector<PSimHit>::const_iterator m=matched.begin(); m<matched.end(); m++){
1127  //project simhit;
1128  if(matchedmonorstereo == "matched"){
1129  hitPair= projectHit((*m),partnerstripdet,gluedDet->surface());
1130  distx = fabs(rechitpro.x - hitPair.first.x());
1131  disty = fabs(rechitpro.y - hitPair.first.y());
1132  dist = sqrt(distx*distx+disty*disty);
1133  }
1134  if(matchedmonorstereo == "monoHit"){dist = abs((monohit)->localPosition().x() - (*m).localPosition().x());}
1135  if(matchedmonorstereo == "stereoHit"){dist = abs((stereohit)->localPosition().x() - (*m).localPosition().x());}
1136 
1137  // std::cout << " Simhit position x = " << hitPair.first.x()
1138  // << " y = " << hitPair.first.y() << " dist = " << dist << std::endl;
1139  if(dist<mindist){
1140  mindist = dist;
1141  closestPair = hitPair;
1142  closest = (*m);
1143  }
1144  }
1145 
1146  if(matchedmonorstereo == "matched"){
1147  rechitpro.resx = rechitpro.x - closestPair.first.x();
1148  rechitpro.resy = rechitpro.y - closestPair.first.y();
1149  rechitpro.pullx = ((rechit)->localPosition().x() - (closestPair.first.x())) / sqrt(error.xx());
1150  rechitpro.pully = ((rechit)->localPosition().y() - (closestPair.first.y())) / sqrt(error.yy());
1151  }
1152 
1153  if( (matchedmonorstereo == "monoHit") || (matchedmonorstereo == "stereoHit") ){
1154  rechitpro.resx = rechitpro.x - closest.localPosition().x();
1155  rechitpro.resxMF = Mposition.x() - (topol.measurementPosition(closest.localPosition())).x();
1156  rechitpro.pullx = (rechit->localPosition().x() - (closest).localPosition().x()) / sqrt(error.xx());
1157  rechitpro.pullxMF = (rechitpro.resxMF)/sqrt(Merror.uu());
1158  }
1159 
1160  }
1161 }
1162 //--------------------------------------------------------------------------------------------
1164 
1165  rechitpro.x = -999999.; rechitpro.y = -999999.; rechitpro.z = -999999.; rechitpro.resolxx = -999999.; rechitpro.resolxy = -999999.; rechitpro.resolyy = -999999.;
1166  rechitpro.resolxxMF = -999999.; rechitpro.phi = -999999.;rechitpro.resx = -999999.; rechitpro.resy = -999999.; rechitpro.resxMF = -999999.;
1167  rechitpro.pullx = -999999.; rechitpro.pully = -999999.; rechitpro.pullxMF = -999999.; rechitpro.trackangle = -999999.; rechitpro.trackanglebeta = -999999.;
1168  rechitpro.trackangle2 = -999999.; rechitpro.trackwidth = -999999.; rechitpro.expectedwidth = -999999.; rechitpro.category = -999999.; rechitpro.thickness = -999999.;
1169  rechitpro.clusiz = -999999.; rechitpro.cluchg = -999999.;
1170 
1171  //If simplehit1or2D is true we are dealing with hit1d, false is for hit2d
1172  const SiStripRecHit2D *hit2d = dynamic_cast < const SiStripRecHit2D * >((*thit).hit());;
1173  const SiStripRecHit1D *hit1d = dynamic_cast < const SiStripRecHit1D * >((*thit).hit());;
1174 
1175  const StripTopology & topol = (const StripTopology &) stripdet->topology();
1176  const TrackingRecHit *rechit = (*thit).hit();
1177 
1178  LocalPoint position = rechit->localPosition();
1179  LocalError error = rechit->localPositionError();
1180  MeasurementPoint Mposition = topol.measurementPosition(position);
1181  MeasurementError Merror = topol.measurementError(position,error);
1182 
1183  LocalVector trackdirection = tsos.localDirection();
1184  rechitpro.trackangle = atan(trackdirection.x() / trackdirection.z()) * TMath::RadToDeg();
1185  rechitpro.trackanglebeta = atan(trackdirection.y() / trackdirection.z()) * TMath::RadToDeg();
1186 
1187  LocalVector drift = stripcpe->driftDirection(stripdet);
1188  rechitpro.thickness = stripdet->surface().bounds().thickness();
1189  float pitch = topol.localPitch(position);
1190  float tanalpha = tan(rechitpro.trackangle * TMath::DegToRad());
1191  float tanalphaL = drift.x() / drift.z();
1192  rechitpro.trackwidth = fabs((rechitpro.thickness / pitch) * tanalpha - (rechitpro.thickness / pitch) * tanalphaL);
1193  float SLorentz = 0.5 * (rechitpro.thickness / pitch) * tanalphaL;
1194  int Sp = int (position.x() / pitch + SLorentz + 0.5 * rechitpro.trackwidth);
1195  int Sm = int (position.x() / pitch + SLorentz - 0.5 * rechitpro.trackwidth);
1196  rechitpro.expectedwidth = 1 + Sp - Sm;
1197 
1200  int clusiz=0;
1201  int totcharge=0;
1202 
1203  if(!simplehit1or2D){
1204  clust2d = hit2d->cluster();
1205  clusiz = clust2d->amplitudes().size();
1206  const auto & amplitudes2d = clust2d->amplitudes();
1207  for(size_t ia=0; ia<amplitudes2d.size();ia++){
1208  totcharge+=amplitudes2d[ia];
1209  }
1210  } else {
1211  clust1d = hit1d->cluster();
1212  clusiz = clust1d->amplitudes().size();
1213  const auto & amplitudes1d = clust1d->amplitudes();
1214  for(size_t ia=0; ia<amplitudes1d.size();ia++){
1215  totcharge+=amplitudes1d[ia];
1216  }
1217  }
1218 
1219  rechitpro.x = position.x();
1220  rechitpro.y = position.y();
1221  rechitpro.z = position.z();
1222  rechitpro.resolxx = error.xx();
1223  rechitpro.resolxy = error.xy();
1224  rechitpro.resolyy = error.yy();
1225  rechitpro.resolxxMF = Merror.uu();
1226  rechitpro.clusiz = clusiz;
1227  rechitpro.cluchg = totcharge;
1228 
1229  unsigned int iopt;
1231  iopt = 1;
1232  } else if (rechitpro.expectedwidth == 1) {
1233  iopt = 2;
1234  } else if (rechitpro.clusiz <= rechitpro.expectedwidth) {
1235  iopt = 3;
1236  } else {
1237  iopt = 4;
1238  }
1239  rechitpro.category = iopt;
1240 
1241 
1242  matched.clear();
1243  if(!simplehit1or2D){
1244  matched = associate.associateHit(*hit2d);
1245  } else {
1246  matched = associate.associateHit(*hit1d);
1247  }
1248 
1249  double mindist = 999999;
1250  double dist = 999999;
1251  PSimHit closest;
1252 
1253  if(!matched.empty()){
1254 
1255  for(vector<PSimHit>::const_iterator m=matched.begin(); m<matched.end(); m++){
1256  if(!simplehit1or2D){
1257  dist = abs((hit2d)->localPosition().x() - (*m).localPosition().x());
1258  } else {
1259  dist = abs((hit1d)->localPosition().x() - (*m).localPosition().x());
1260  }
1261 
1262  if(dist<mindist){
1263  mindist = dist;
1264  closest = (*m);
1265  }
1266  }
1267  rechitpro.resx = rechitpro.x - closest.localPosition().x();
1268  rechitpro.resxMF = Mposition.x() - (topol.measurementPosition(closest.localPosition())).x();
1269  rechitpro.pullx = (rechit->localPosition().x() - (closest).localPosition().x()) / sqrt(error.xx());
1270  rechitpro.pullxMF = (rechitpro.resxMF)/sqrt(Merror.uu());
1271 
1272  }
1273 
1274 }
1275 //--------------------------------------------------------------------------------------------
1277 
1278  //Retrieve tracker topology from geometry
1279  edm::ESHandle<TrackerTopology> tTopoHandle;
1280  es.get<IdealGeometryRecord>().get(tTopoHandle);
1281  const TrackerTopology* const tTopo = tTopoHandle.product();
1282 
1283  // take from eventSetup the SiStripDetCabling object - here will use SiStripDetControl later on
1285 
1286  // get list of active detectors from SiStripDetCabling
1287  std::vector<uint32_t> activeDets;
1288  SiStripDetCabling_->addActiveDetectorsRawIds(activeDets);
1289 
1290  SiStripSubStructure substructure;
1291 
1292  SiStripFolderOrganizer folder_organizer;
1293  // folder_organizer.setSiStripFolderName(topFolderName_);
1294  std::string curfold = topFolderName_;
1295  folder_organizer.setSiStripFolderName(curfold);
1296  folder_organizer.setSiStripFolder();
1297 
1298  // std::cout << "curfold " << curfold << std::endl;
1299 
1300  createSimpleHitsMEs(ibooker);
1301 
1302  // loop over detectors and book MEs
1303  edm::LogInfo("SiStripTrackingRecHitsValid|SiStripTrackingRecHitsValid")<<"nr. of activeDets: "<<activeDets.size();
1304  for(std::vector<uint32_t>::iterator detid_iterator = activeDets.begin(); detid_iterator!=activeDets.end(); detid_iterator++){
1305  uint32_t detid = (*detid_iterator);
1306  // remove any eventual zero elements - there should be none, but just in case
1307  if(detid == 0) {
1308  activeDets.erase(detid_iterator);
1309  continue;
1310  }
1311 
1312  // Create Layer Level MEs
1313  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detid,tTopo,true);
1314  SiStripHistoId hidmanager;
1315  std::string label = hidmanager.getSubdetid(detid,tTopo,true);
1316  // std::cout << "label " << label << endl;
1317 
1318  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
1319  if(iLayerME==LayerMEsMap.end()) {
1320 
1321  // get detids for the layer
1322  // Keep in mind that when we are on the TID or TEC we deal with rings not wheel
1323  int32_t lnumber = det_layer_pair.second;
1324  std::vector<uint32_t> layerDetIds;
1325  if (det_layer_pair.first == "TIB") {
1326  substructure.getTIBDetectors(activeDets,layerDetIds,lnumber,0,0,0);
1327  } else if (det_layer_pair.first == "TOB") {
1328  substructure.getTOBDetectors(activeDets,layerDetIds,lnumber,0,0);
1329  } else if (det_layer_pair.first == "TID" && lnumber > 0) {
1330  substructure.getTIDDetectors(activeDets,layerDetIds,2,0,abs(lnumber),0);
1331  } else if (det_layer_pair.first == "TID" && lnumber < 0) {
1332  substructure.getTIDDetectors(activeDets,layerDetIds,1,0,abs(lnumber),0);
1333  } else if (det_layer_pair.first == "TEC" && lnumber > 0) {
1334  substructure.getTECDetectors(activeDets,layerDetIds,2,0,0,0,abs(lnumber),0);
1335  } else if (det_layer_pair.first == "TEC" && lnumber < 0) {
1336  substructure.getTECDetectors(activeDets,layerDetIds,1,0,0,0,abs(lnumber),0);
1337  }
1338  LayerDetMap[label] = layerDetIds;
1339 
1340  // book Layer MEs
1341  folder_organizer.setLayerFolder(detid,tTopo,det_layer_pair.second,true);
1342  // std::stringstream ss;
1343  // folder_organizer.getLayerFolderName(ss, detid, tTopo, true);
1344  // std::cout << "Folder Name " << ss.str().c_str() << std::endl;
1345  // folder_organizer.setLayerFolder(detid,det_layer_pair.second,true);
1346  createLayerMEs(ibooker,label);
1347  }
1348  //Create StereoAndMatchedMEs
1349  std::map<std::string, StereoAndMatchedMEs>::iterator iStereoAndMatchedME = StereoAndMatchedMEsMap.find(label);
1350  if(iStereoAndMatchedME==StereoAndMatchedMEsMap.end()) {
1351 
1352  // get detids for the stereo and matched layer. We are going to need a bool for these layers
1353  bool isStereo = false;
1354  // Keep in mind that when we are on the TID or TEC we deal with rings not wheel
1355  int32_t stereolnumber = det_layer_pair.second;
1356  std::vector<uint32_t> stereoandmatchedDetIds;
1357  if ( (det_layer_pair.first == "TIB") && (TIBDetId(detid).stereo()== 1) ) {
1358  substructure.getTIBDetectors(activeDets,stereoandmatchedDetIds,stereolnumber,0,0,0);
1359  isStereo = true;
1360  } else if ( (det_layer_pair.first == "TOB") && (TOBDetId(detid).stereo()== 1) ) {
1361  substructure.getTOBDetectors(activeDets,stereoandmatchedDetIds,stereolnumber,0,0);
1362  isStereo = true;
1363  } else if ( (det_layer_pair.first == "TID") && (stereolnumber > 0) && (TIDDetId(detid).stereo()== 1) ) {
1364  substructure.getTIDDetectors(activeDets,stereoandmatchedDetIds,2,0,abs(stereolnumber),1);
1365  isStereo = true;
1366  } else if ( (det_layer_pair.first == "TID") && (stereolnumber < 0) && (TIDDetId(detid).stereo()== 1) ) {
1367  substructure.getTIDDetectors(activeDets,stereoandmatchedDetIds,1,0,abs(stereolnumber),1);
1368  isStereo = true;
1369  } else if ( (det_layer_pair.first == "TEC") && (stereolnumber > 0) && (TECDetId(detid).stereo()== 1) ) {
1370  substructure.getTECDetectors(activeDets,stereoandmatchedDetIds,2,0,0,0,abs(stereolnumber),1);
1371  isStereo = true;
1372  } else if ( (det_layer_pair.first == "TEC") && (stereolnumber < 0) && (TECDetId(detid).stereo()== 1) ) {
1373  substructure.getTECDetectors(activeDets,stereoandmatchedDetIds,1,0,0,0,abs(stereolnumber),1);
1374  isStereo = true;
1375  }
1376  StereoAndMatchedDetMap[label] = stereoandmatchedDetIds;
1377 
1378  // book StereoAndMatched MEs
1379  if(isStereo){
1380  folder_organizer.setLayerFolder(detid,tTopo,det_layer_pair.second,true);
1381  // std::stringstream ss1;
1382  // folder_organizer.getLayerFolderName(ss1, detid, tTopo, true);
1383  // std::cout << "Folder Name stereo " << ss1.str().c_str() << std::endl;
1384  //Create the Monitor Elements only when we have a stereo module
1385  createStereoAndMatchedMEs(ibooker,label);
1386  }
1387  }
1388 
1389 
1390  }//end of loop over detectors
1391 }
1392 //------------------------------------------------------------------------------------------
1394 {
1407 
1412 
1422  simplehitsMEs.meResLF = 0;
1423  simplehitsMEs.mePullLF = 0;
1425  simplehitsMEs.meResMF = 0;
1426  simplehitsMEs.mePullMF = 0;
1427 
1428 
1429  if(layerswitchResolx_LF) {
1430  simplehitsMEs.meResolxLF = bookME1D(ibooker,"TH1Resolx_LF", "TH1Resolx_LF" ,"RecHit resol(x) coord. (local frame)");
1431  simplehitsMEs.meResolxLF->setAxisTitle("resol(x) RecHit coord. (local frame)");
1432  }
1433  if(layerswitchResolx_MF) {
1434  simplehitsMEs.meResolxMF = bookME1D(ibooker,"TH1Resolx_MF", "TH1Resolx_MF" ,"RecHit resol(x) coord. (measurement frame)");
1435  simplehitsMEs.meResolxMF->setAxisTitle("resol(x) RecHit coord. (measurement frame)");
1436  }
1437  if(layerswitchRes_LF) {
1438  simplehitsMEs.meResLF = bookME1D(ibooker,"TH1Res_LF", "TH1Res_LF" ,"Residual of the hit x coordinate (local frame)");
1439  simplehitsMEs.meResLF->setAxisTitle("Hit Res(x) (local frame)");
1440  }
1441  if(layerswitchRes_MF) {
1442  simplehitsMEs.meResMF = bookME1D(ibooker,"TH1Res_MF", "TH1Res_MF" ,"Residual of the hit x coordinate (measurement frame)");
1443  simplehitsMEs.meResMF->setAxisTitle("Hit Res(x) (measurement frame)");
1444  }
1445  if(layerswitchPull_LF) {
1446  simplehitsMEs.mePullLF = bookME1D(ibooker,"TH1Pull_LF", "TH1Pull_LF" ,"Pull distribution (local frame)");
1447  simplehitsMEs.mePullLF->setAxisTitle("Pull distribution (local frame)");
1448  }
1449  if(layerswitchPull_MF) {
1450  simplehitsMEs.mePullMF = bookME1D(ibooker,"TH1Pull_MF", "TH1Pull_MF" ,"Pull distribution (measurement frame)");
1451  simplehitsMEs.mePullMF->setAxisTitle("Pull distribution (measurement frame)");
1452  }
1453  if(layerswitchCategory) {
1454  simplehitsMEs.meCategory = bookME1D(ibooker,"TH1Category", "TH1Category" ,"Category");
1455  simplehitsMEs.meCategory->setAxisTitle("Category");
1456  }
1457  if(layerswitchTrackwidth) {
1458  simplehitsMEs.meTrackwidth = bookME1D(ibooker,"TH1Trackwidth", "TH1Trackwidth" ,"Track width");
1459  simplehitsMEs.meTrackwidth->setAxisTitle("Track width");
1460  }
1462  simplehitsMEs.meExpectedwidth = bookME1D(ibooker,"TH1Expectedwidth", "TH1Expectedwidth" ,"Expected width");
1463  simplehitsMEs.meExpectedwidth->setAxisTitle("Expected width");
1464  }
1466  simplehitsMEs.meClusterwidth = bookME1D(ibooker,"TH1Clusterwidth", "TH1Clusterwidth" ,"Cluster width");
1467  simplehitsMEs.meClusterwidth->setAxisTitle("Cluster width");
1468  }
1470  simplehitsMEs.meTrackanglealpha = bookME1D(ibooker,"TH1Trackanglealpha", "TH1Trackanglealpha" ,"Track angle alpha");
1471  simplehitsMEs.meTrackanglealpha->setAxisTitle("Track angle alpha");
1472  }
1474  simplehitsMEs.meTrackanglebeta = bookME1D(ibooker,"TH1Trackanglebeta", "TH1Trackanglebeta" ,"Track angle beta");
1475  simplehitsMEs.meTrackanglebeta->setAxisTitle("Track angle beta");
1476  }
1478  simplehitsMEs.meResolxMFTrackwidthProfileWClus1 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_WClus1","TProfResolxMFTrackwidthProfile_WClus1","Profile of Resolution in MF vs track width for w=1");
1480  simplehitsMEs.meResolxMFTrackwidthProfileWClus1->setAxisTitle("Resolution (measurement frame) w=1",2);
1481  }
1483  simplehitsMEs.meResolxMFTrackwidthProfileWClus2 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_WClus2","TProfResolxMFTrackwidthProfile_WClus2","Profile of Resolution in MF vs track width for w=2");
1485  simplehitsMEs.meResolxMFTrackwidthProfileWClus2->setAxisTitle("Resolution (measurement frame) w=2",2);
1486 
1487  }
1489  simplehitsMEs.meResolxMFTrackwidthProfileWClus3 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_WClus3","TProfResolxMFTrackwidthProfile_WClus3","Profile of Resolution in MF vs track width for w=3");
1491  simplehitsMEs.meResolxMFTrackwidthProfileWClus3->setAxisTitle("Resolution (measurement frame) w=3",2);
1492  }
1494  simplehitsMEs.meResolxMFTrackwidthProfileWClus4 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_WClus4","TProfResolxMFTrackwidthProfile_WClus4","Profile of Resolution in MF vs track width for w=4");
1496  simplehitsMEs.meResolxMFTrackwidthProfileWClus4->setAxisTitle("Resolution (measurement frame) w=3",2);
1497  }
1499  simplehitsMEs.meResMFTrackwidthProfileWClus1 = bookMEProfile(ibooker,"TProfResMFTrackwidthProfile_WClus1","TProfResMFTrackwidthProfile_WClus1","Profile of Residuals(x) in MF vs track width for w=1");
1501  simplehitsMEs.meResMFTrackwidthProfileWClus1->setAxisTitle("Residuals(x) (measurement frame) w=1",2);
1502  }
1504  simplehitsMEs.meResMFTrackwidthProfileWClus2 = bookMEProfile(ibooker,"TProfResMFTrackwidthProfile_WClus2","TProfResMFTrackwidthProfile_WClus2","Profile of Residuals(x) in MF vs track width for w=2");
1506  simplehitsMEs.meResMFTrackwidthProfileWClus2->setAxisTitle("Residuals(x) (measurement frame) w=2",2);
1507  }
1509  simplehitsMEs.meResMFTrackwidthProfileWClus21 = bookMEProfile(ibooker,"TProfResMFTrackwidthProfile_WClus21","TProfResMFTrackwidthProfile_WClus21","Profile of Residuals(x) in MF vs track width for w=2");
1511  simplehitsMEs.meResMFTrackwidthProfileWClus21->setAxisTitle("Residuals(x) (measurement frame) w=2",2);
1512  }
1514  simplehitsMEs.meResMFTrackwidthProfileWClus22 = bookMEProfile(ibooker,"TProfResMFTrackwidthProfile_WClus22","TProfResMFTrackwidthProfile_WClus22","Profile of Residuals(x) in MF vs track width for w=2");
1516  simplehitsMEs.meResMFTrackwidthProfileWClus22->setAxisTitle("Residuals(x) (measurement frame) w=2",2);
1517 
1518  }
1520  simplehitsMEs.meResMFTrackwidthProfileWClus23 = bookMEProfile(ibooker,"TProfResMFTrackwidthProfile_WClus23","TProfResMFTrackwidthProfile_WClus23","Profile of Residuals(x) in MF vs track width for w=2");
1522  simplehitsMEs.meResMFTrackwidthProfileWClus23->setAxisTitle("Residuals(x) (measurement frame) w=2",2);
1523  }
1525  simplehitsMEs.meResMFTrackwidthProfileWClus3 = bookMEProfile(ibooker,"TProfResMFTrackwidthProfile_WClus3","TProfResMFTrackwidthProfile_WClus3","Profile of Residuals(x) in MF vs track width for w=3");
1527  simplehitsMEs.meResMFTrackwidthProfileWClus3->setAxisTitle("Residuals(x) (measurement frame) w=3",2);
1528  }
1530  simplehitsMEs.meResMFTrackwidthProfileWClus4 = bookMEProfile(ibooker,"TProfResMFTrackwidthProfile_WClus4","TProfResMFTrackwidthProfile_WClus4","Profile of Residuals(x) in MF vs track width for w=4");
1532  simplehitsMEs.meResMFTrackwidthProfileWClus4->setAxisTitle("Residuals(x) (measurement frame) w=4",2);
1533  }
1535  simplehitsMEs.meResolxMFTrackwidthProfile = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile","TProfResolxMFTrackwidthProfile","Profile of Resolution in MF vs track width");
1537  simplehitsMEs.meResolxMFTrackwidthProfile->setAxisTitle("Resolution (measurement frame)",2);
1538  }
1540  simplehitsMEs.meResolxMFTrackwidthProfileCategory1 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_Category1","TProfResolxMFTrackwidthProfile_Category1","Profile of Resolution in MF vs track width (Category 1)");
1542  simplehitsMEs.meResolxMFTrackwidthProfileCategory1->setAxisTitle("Resolution (measurement frame) Category 1",2);
1543  }
1545  simplehitsMEs.meResolxMFTrackwidthProfileCategory2 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_Category2","TProfResolxMFTrackwidthProfile_Category2","Profile of Resolution in MF vs track width (Category 2)");
1547  simplehitsMEs.meResolxMFTrackwidthProfileCategory2->setAxisTitle("Resolution (measurement frame) Category 2",2);
1548  }
1550  simplehitsMEs.meResolxMFTrackwidthProfileCategory3 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_Category3","TProfResolxMFTrackwidthProfile_Category3","Profile of Resolution in MF vs track width (Category 3)");
1552  simplehitsMEs.meResolxMFTrackwidthProfileCategory3->setAxisTitle("Resolution (measurement frame) Category 3",2);
1553  }
1555  simplehitsMEs.meResolxMFTrackwidthProfileCategory4 = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfile_Category4","TProfResolxMFTrackwidthProfile_Category4","Profile of Resolution in MF vs track width (Category 4)");
1557  simplehitsMEs.meResolxMFTrackwidthProfileCategory4->setAxisTitle("Resolution (measurement frame) Category 4",2);
1558  }
1560  simplehitsMEs.meResolxMFClusterwidthProfileCategory1 = bookMEProfile(ibooker,"TProfResolxMFClusterwidthProfile_Category1","TProfResolxMFClusterwidthProfile_Category1","Profile of Resolution in MF vs cluster width (Category 1)");
1562  simplehitsMEs.meResolxMFClusterwidthProfileCategory1->setAxisTitle("Resolution (measurement frame) Category 1",2);
1563  }
1565  simplehitsMEs.meResolxMFAngleProfile = bookMEProfile(ibooker,"TProfResolxMFAngleProfile","TProfResolxMFAngleProfile","Profile of Resolution in MF vs Track angle alpha");
1566  simplehitsMEs.meResolxMFAngleProfile->setAxisTitle("Track angle alpha",1);
1567  simplehitsMEs.meResolxMFAngleProfile->setAxisTitle("Resolution (measurement frame)",2);
1568  }
1569 
1570 
1571 }
1572 //------------------------------------------------------------------------------------------
1574 {
1575  SiStripHistoId hidmanager;
1576  LayerMEs layerMEs;
1577 
1578  layerMEs.meWclusRphi = 0;
1579  layerMEs.meAdcRphi = 0;
1580  layerMEs.meResolxLFRphi = 0;
1581  layerMEs.meResolxMFRphi = 0;
1582  layerMEs.meResolxMFRphiwclus1 = 0;
1583  layerMEs.meResolxMFRphiwclus2 = 0;
1584  layerMEs.meResolxMFRphiwclus3 = 0;
1585  layerMEs.meResolxMFRphiwclus4 = 0;
1586  layerMEs.meResLFRphi = 0;
1587  layerMEs.meResMFRphi = 0;
1588  layerMEs.meResMFRphiwclus1 = 0;
1589  layerMEs.meResMFRphiwclus2 = 0;
1590  layerMEs.meResMFRphiwclus3 = 0;
1591  layerMEs.meResMFRphiwclus4 = 0;
1592  layerMEs.mePullLFRphi = 0;
1593  layerMEs.mePullMFRphi = 0;
1594  layerMEs.mePullMFRphiwclus1 = 0;
1595  layerMEs.mePullMFRphiwclus2 = 0;
1596  layerMEs.mePullMFRphiwclus3 = 0;
1597  layerMEs.mePullMFRphiwclus4 = 0;
1598  layerMEs.meTrackangleRphi = 0;
1599  layerMEs.meTrackanglebetaRphi = 0;
1600  layerMEs.meTrackangle2Rphi = 0;
1601  layerMEs.mePullTrackangleProfileRphi = 0;
1602  layerMEs.mePullTrackangle2DRphi = 0;
1603  layerMEs.meTrackwidthRphi = 0;
1604  layerMEs.meExpectedwidthRphi = 0;
1605  layerMEs.meClusterwidthRphi = 0;
1606  layerMEs.meCategoryRphi = 0;
1607  layerMEs.mePullTrackwidthProfileRphi = 0;
1608  layerMEs.mePullTrackwidthProfileRphiwclus1 = 0;
1609  layerMEs.mePullTrackwidthProfileRphiwclus2 = 0;
1610  layerMEs.mePullTrackwidthProfileRphiwclus3 = 0;
1611  layerMEs.mePullTrackwidthProfileRphiwclus4 = 0;
1616  layerMEs.meResolxMFTrackwidthProfileRphi = 0;
1617 
1626 
1632  layerMEs.meResolxMFAngleProfileRphi = 0;
1633  layerMEs.merapidityResProfilewclus1 = 0;
1634  layerMEs.merapidityResProfilewclus2 = 0;
1635  layerMEs.merapidityResProfilewclus3 = 0;
1636  layerMEs.merapidityResProfilewclus4 = 0;
1637 
1638 
1639  //WclusRphi
1640  if(layerswitchWclusRphi) {
1641  layerMEs.meWclusRphi = bookME1D(ibooker,"TH1WclusRphi", hidmanager.createHistoLayer("Wclus_rphi","layer",label,"").c_str() ,"Cluster Width - Number of strips that belong to the RecHit cluster");
1642  layerMEs.meWclusRphi->setAxisTitle(("Cluster Width [nr strips] in "+ label).c_str());
1643  }
1644  //AdcRphi
1645  if(layerswitchAdcRphi) {
1646  layerMEs.meAdcRphi = bookME1D(ibooker,"TH1AdcRphi", hidmanager.createHistoLayer("Adc_rphi","layer",label,"").c_str() ,"RecHit Cluster Charge");
1647  layerMEs.meAdcRphi->setAxisTitle(("cluster charge [ADC] in " + label).c_str());
1648  }
1649  //ResolxLFRphi
1651  layerMEs.meResolxLFRphi = bookME1D(ibooker,"TH1ResolxLFRphi", hidmanager.createHistoLayer("Resolx_LF_rphi","layer",label,"").c_str() ,"RecHit resol(x) coord."); //<resolor>~20micron
1652  layerMEs.meResolxLFRphi->setAxisTitle(("resol(x) RecHit coord. (local frame) in " + label).c_str());
1653  }
1654  //ResolxMFRphi
1656  layerMEs.meResolxMFRphi = bookME1D(ibooker,"TH1ResolxMFRphi", hidmanager.createHistoLayer("Resolx_MF_rphi","layer",label,"").c_str() ,"RecHit resol(x) coord."); //<resolor>~20micron
1657  layerMEs.meResolxMFRphi->setAxisTitle(("resol(x) RecHit coord. (measurement frame) in " + label).c_str());
1658  }
1659  //ResolxMFRphiwclus1
1661  layerMEs.meResolxMFRphiwclus1 = bookME1D(ibooker,"TH1ResolxMFRphiwclus1", hidmanager.createHistoLayer("Resolx_MF_wclus1_rphi","layer",label,"").c_str() ,"RecHit resol(x) coord. w=1 "); //<resolor>~20micron
1662  layerMEs.meResolxMFRphiwclus1->setAxisTitle(("resol(x) RecHit coord. (measurement frame) for w=1 in " + label).c_str());
1663  }
1664  //ResolxMFRphiwclus2
1666  layerMEs.meResolxMFRphiwclus2 = bookME1D(ibooker,"TH1ResolxMFRphiwclus2", hidmanager.createHistoLayer("Resolx_MF_wclus2_rphi","layer",label,"").c_str() ,"RecHit resol(x) coord. w=2 "); //<resolor>~20micron
1667  layerMEs.meResolxMFRphiwclus2->setAxisTitle(("resol(x) RecHit coord. (measurement frame) for w=2 in " + label).c_str());
1668  }
1669  //ResolxMFRphiwclus3
1671  layerMEs.meResolxMFRphiwclus3 = bookME1D(ibooker,"TH1ResolxMFRphiwclus3", hidmanager.createHistoLayer("Resolx_MF_wclus3_rphi","layer",label,"").c_str() ,"RecHit resol(x) coord. w=3 "); //<resolor>~20micron
1672  layerMEs.meResolxMFRphiwclus3->setAxisTitle(("resol(x) RecHit coord. (measurement frame) for w=3 in " + label).c_str());
1673  }
1674  //ResolxMFRphiwclus4
1676  layerMEs.meResolxMFRphiwclus4 = bookME1D(ibooker,"TH1ResolxMFRphiwclus4", hidmanager.createHistoLayer("Resolx_MF_wclus4_rphi","layer",label,"").c_str() ,"RecHit resol(x) coord. w=4 "); //<resolor>~20micron
1677  layerMEs.meResolxMFRphiwclus4->setAxisTitle(("resol(x) RecHit coord. (measurement frame) for w=4 in " + label).c_str());
1678  }
1679  //ResLFRphi
1680  if(layerswitchResLFRphi) {
1681  layerMEs.meResLFRphi = bookME1D(ibooker,"TH1ResLFRphi", hidmanager.createHistoLayer("Res_LF_rphi","layer",label,"").c_str() ,"Residual of the hit x coordinate");
1682  layerMEs.meResLFRphi->setAxisTitle(("Hit Residuals(x) (local frame) in " + label).c_str());
1683  }
1684  //ResMFRphi
1685  if(layerswitchResMFRphi) {
1686  layerMEs.meResMFRphi = bookME1D(ibooker,"TH1ResMFRphi",hidmanager.createHistoLayer("Res_MF_Rphi","layer",label,"").c_str() ,"Residual of the hit x coordinate");
1687  layerMEs.meResMFRphi->setAxisTitle(("Hit Residuals(x) (measurement frame) in "+ label).c_str());
1688  }
1689  //ResMFRphiwclus1
1691  layerMEs.meResMFRphiwclus1 = bookME1D(ibooker,"TH1ResMFRphiwclus1",hidmanager.createHistoLayer("Res_MF_wclus1_Rphi","layer",label,"").c_str() ,"Residual of the hit x coordinate w=1");
1692  layerMEs.meResMFRphiwclus1->setAxisTitle(("Hit Residuals(x) (measurement frame) for w=1 in "+ label).c_str());
1693  }
1694  //ResMFRphiwclus2
1696  layerMEs.meResMFRphiwclus2 = bookME1D(ibooker,"TH1ResMFRphiwclus2",hidmanager.createHistoLayer("Res_MF_wclus2_Rphi","layer",label,"").c_str() ,"Residual of the hit x coordinate w=2");
1697  layerMEs.meResMFRphiwclus2->setAxisTitle(("Hit Residuals(x) (measurement frame) for w=2 in "+ label).c_str());
1698  }
1699  //ResMFRphiwclus3
1701  layerMEs.meResMFRphiwclus3 = bookME1D(ibooker,"TH1ResMFRphiwclus3",hidmanager.createHistoLayer("Res_MF_wclus3_Rphi","layer",label,"").c_str() ,"Residual of the hit x coordinate w=3");
1702  layerMEs.meResMFRphiwclus3->setAxisTitle(("Hit Residuals(x) (measurement frame) for w=3 in "+ label).c_str());
1703  }
1704  //ResMFRphiwclus4
1706  layerMEs.meResMFRphiwclus4 = bookME1D(ibooker,"TH1ResMFRphiwclus4",hidmanager.createHistoLayer("Res_MF_wclus4_Rphi","layer",label,"").c_str() ,"Residual of the hit x coordinate w=4");
1707  layerMEs.meResMFRphiwclus4->setAxisTitle(("Hit Residuals(x) (measurement frame) for w=4 in "+ label).c_str());
1708  }
1709  //PullLFRphi
1710  if(layerswitchPullLFRphi) {
1711  layerMEs.mePullLFRphi = bookME1D(ibooker,"TH1PullLFRphi", hidmanager.createHistoLayer("Pull_LF_rphi","layer",label,"").c_str() ,"Pull distribution");
1712  layerMEs.mePullLFRphi->setAxisTitle(("Pull distribution (local frame) in " + label).c_str());
1713  }
1714  //PullMFRphi
1715  if(layerswitchPullMFRphi) {
1716  layerMEs.mePullMFRphi = bookME1D(ibooker,"TH1PullMFRphi", hidmanager.createHistoLayer("Pull_MF_rphi","layer",label,"").c_str() ,"Pull distribution");
1717  layerMEs.mePullMFRphi->setAxisTitle(("Pull distribution (measurement frame) in " + label).c_str());
1718  }
1719  //PullMFRphiwclus1
1721  layerMEs.mePullMFRphiwclus1 = bookME1D(ibooker,"TH1PullMFRphiwclus1", hidmanager.createHistoLayer("Pull_MF_wclus1_rphi","layer",label,"").c_str() ,"Pull distribution w=1");
1722  layerMEs.mePullMFRphiwclus1->setAxisTitle(("Pull distribution (measurement frame) for w=1 in " + label).c_str());
1723  }
1724  //PullMFRphiwclus2
1726  layerMEs.mePullMFRphiwclus2 = bookME1D(ibooker,"TH1PullMFRphiwclus2", hidmanager.createHistoLayer("Pull_MF_wclus2_rphi","layer",label,"").c_str() ,"Pull distribution w=2");
1727  layerMEs.mePullMFRphiwclus2->setAxisTitle(("Pull distribution (measurement frame) for w=2 in " + label).c_str());
1728  }
1729  //PullMFRphiwclus3
1731  layerMEs.mePullMFRphiwclus3 = bookME1D(ibooker,"TH1PullMFRphiwclus3", hidmanager.createHistoLayer("Pull_MF_wclus3_rphi","layer",label,"").c_str() ,"Pull distribution w=3");
1732  layerMEs.mePullMFRphiwclus3->setAxisTitle(("Pull distribution (measurement frame) for w=3 in " + label).c_str());
1733  }
1734  //PullMFRphiwclus4
1736  layerMEs.mePullMFRphiwclus4 = bookME1D(ibooker,"TH1PullMFRphiwclus4", hidmanager.createHistoLayer("Pull_MF_wclus4_rphi","layer",label,"").c_str() ,"Pull distribution w=4");
1737  layerMEs.mePullMFRphiwclus4->setAxisTitle(("Pull distribution (measurement frame) for w=4 in " + label).c_str());
1738  }
1739 
1741  layerMEs.meTrackangleRphi = bookME1D(ibooker,"TH1TrackangleRphi",hidmanager.createHistoLayer("Track_angle_Rphi","layer",label,"").c_str() ,"Track angle alpha");
1742  layerMEs.meTrackangleRphi->setAxisTitle(("Track angle in "+ label).c_str());
1743  }
1745  layerMEs.meTrackanglebetaRphi = bookME1D(ibooker,"TH1TrackanglebetaRphi",hidmanager.createHistoLayer("Track_angle_beta_Rphi","layer",label,"").c_str() ,"Track angle beta");
1746  layerMEs.meTrackanglebetaRphi->setAxisTitle((""+ label).c_str());
1747  }
1749  layerMEs.meTrackangle2Rphi = bookME1D(ibooker,"TH1Trackangle2Rphi",hidmanager.createHistoLayer("Track_angle2_Rphi","layer",label,"").c_str() ,"");
1750  layerMEs.meTrackangle2Rphi->setAxisTitle((""+ label).c_str());
1751  }
1753  layerMEs.mePullTrackangleProfileRphi = bookMEProfile(ibooker,"TProfPullTrackangleProfileRphi",hidmanager.createHistoLayer("Pull_Trackangle_Profile_Rphi","layer",label,"").c_str() ,"Profile of Pull in MF vs track angle alpha");
1754  layerMEs.mePullTrackangleProfileRphi->setAxisTitle(("Track angle alpha in "+ label).c_str(),1);
1755  layerMEs.mePullTrackangleProfileRphi->setAxisTitle(("Pull (MF) in "+ label).c_str(),2);
1756  }
1758  layerMEs.mePullTrackangle2DRphi = bookME1D(ibooker,"TH1PullTrackangle2DRphi",hidmanager.createHistoLayer("Pull_Trackangle_2D_Rphi","layer",label,"").c_str() ,"");
1759  layerMEs.mePullTrackangle2DRphi->setAxisTitle((""+ label).c_str());
1760  }
1762  layerMEs.meTrackwidthRphi = bookME1D(ibooker,"TH1TrackwidthRphi",hidmanager.createHistoLayer("Track_width_Rphi","layer",label,"").c_str() ,"Track width");
1763  layerMEs.meTrackwidthRphi->setAxisTitle(("Track width in "+ label).c_str());
1764  }
1766  layerMEs.meExpectedwidthRphi = bookME1D(ibooker,"TH1ExpectedwidthRphi",hidmanager.createHistoLayer("Expected_width_Rphi","layer",label,"").c_str() ,"Expected width");
1767  layerMEs.meExpectedwidthRphi->setAxisTitle(("Expected width in "+ label).c_str());
1768  }
1770  layerMEs.meClusterwidthRphi = bookME1D(ibooker,"TH1ClusterwidthRphi",hidmanager.createHistoLayer("Cluster_width_Rphi","layer",label,"").c_str() ,"Cluster width");
1771  layerMEs.meClusterwidthRphi->setAxisTitle(("Cluster width in "+ label).c_str());
1772  }
1774  layerMEs.meCategoryRphi = bookME1D(ibooker,"TH1CategoryRphi",hidmanager.createHistoLayer("Category_Rphi","layer",label,"").c_str() ,"Category");
1775  layerMEs.meCategoryRphi->setAxisTitle(("Category in "+ label).c_str());
1776  }
1778  layerMEs.mePullTrackwidthProfileRphi = bookMEProfile(ibooker,"TProfPullTrackwidthProfileRphi",hidmanager.createHistoLayer("Pull_Track_width_Profile_Rphi","layer",label,"").c_str() ,"Profile of Pull in MF vs track width");
1779  layerMEs.mePullTrackwidthProfileRphi->setAxisTitle(("track width in "+ label).c_str(),1);
1780  layerMEs.mePullTrackwidthProfileRphi->setAxisTitle(("Pull (MF) in "+ label).c_str(),2);
1781  }
1783  layerMEs.mePullTrackwidthProfileRphiwclus1 = bookMEProfile(ibooker,"TProfPullTrackwidthProfileRphiwclus1",hidmanager.createHistoLayer("Pull_Track_width_Profile_Rphi_wclus1","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for w=1");
1784  layerMEs.mePullTrackwidthProfileRphiwclus1->setAxisTitle(("track width for w=1 in "+ label).c_str(),1);
1785  layerMEs.mePullTrackwidthProfileRphiwclus1->setAxisTitle(("Pull (MF) for w=1 in "+ label).c_str(),2);
1786  }
1788  layerMEs.mePullTrackwidthProfileRphiwclus2 = bookMEProfile(ibooker,"TProfPullTrackwidthProfileRphiwclus2",hidmanager.createHistoLayer("Pull_Track_width_Profile_Rphi_wclus2","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for w=2");
1789  layerMEs.mePullTrackwidthProfileRphiwclus2->setAxisTitle(("track width for w=2 in "+ label).c_str(),1);
1790  layerMEs.mePullTrackwidthProfileRphiwclus2->setAxisTitle(("Pull (MF) for w=2 in "+ label).c_str(),2);
1791 
1792  }
1794  layerMEs.mePullTrackwidthProfileRphiwclus3 = bookMEProfile(ibooker,"TProfPullTrackwidthProfileRphiwclus3",hidmanager.createHistoLayer("Pull_Track_width_Profile_Rphi_wclus3","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for w=3");
1795  layerMEs.mePullTrackwidthProfileRphiwclus3->setAxisTitle(("track width for w=3 in "+ label).c_str(),1);
1796  layerMEs.mePullTrackwidthProfileRphiwclus3->setAxisTitle(("Pull (MF) for w=3 in "+ label).c_str(),2);
1797  }
1799  layerMEs.mePullTrackwidthProfileRphiwclus4 = bookMEProfile(ibooker,"TProfPullTrackwidthProfileRphiwclus4",hidmanager.createHistoLayer("Pull_Track_width_Profile_Rphi_wclus4","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for w=4");
1800  layerMEs.mePullTrackwidthProfileRphiwclus4->setAxisTitle(("track width for w=4 in "+ label).c_str(),1);
1801  layerMEs.mePullTrackwidthProfileRphiwclus4->setAxisTitle(("Pull (MF) for w=4 in "+ label).c_str(),2);
1802 
1803  }
1805  layerMEs.mePullTrackwidthProfileCategory1Rphi = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory1Rphi",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category1_Rphi","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for Category 1");
1806  layerMEs.mePullTrackwidthProfileCategory1Rphi->setAxisTitle(("track width for Category 1 in "+ label).c_str(),1);
1807  layerMEs.mePullTrackwidthProfileCategory1Rphi->setAxisTitle(("Pull (MF) for Category 1 in "+ label).c_str(),2);
1808  }
1810  layerMEs.mePullTrackwidthProfileCategory2Rphi = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory2Rphi",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category2_Rphi","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for Category 2");
1811  layerMEs.mePullTrackwidthProfileCategory2Rphi->setAxisTitle(("track width for Category 2 in "+ label).c_str(),1);
1812  layerMEs.mePullTrackwidthProfileCategory2Rphi->setAxisTitle(("Pull (MF) for Category 2 in "+ label).c_str(),2);
1813  }
1815  layerMEs.mePullTrackwidthProfileCategory3Rphi = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory3Rphi",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category3_Rphi","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for Category 3");
1816  layerMEs.mePullTrackwidthProfileCategory3Rphi->setAxisTitle(("track width for Category 3 in "+ label).c_str(),1);
1817  layerMEs.mePullTrackwidthProfileCategory3Rphi->setAxisTitle(("Pull (MF) for Category 3 in "+ label).c_str(),2);
1818  }
1820  layerMEs.mePullTrackwidthProfileCategory4Rphi = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory4Rphi",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category4_Rphi","layer",label,"").c_str() ,"Profile of Pull in MF vs track width for Category 4");
1821  layerMEs.mePullTrackwidthProfileCategory4Rphi->setAxisTitle(("track width for Category 4 in "+ label).c_str(),1);
1822  layerMEs.mePullTrackwidthProfileCategory4Rphi->setAxisTitle(("Pull (MF) for Category 4 in "+ label).c_str(),2);
1823  }
1825  layerMEs.meResolxMFTrackwidthProfileRphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileRphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width");
1826  layerMEs.meResolxMFTrackwidthProfileRphi->setAxisTitle(("track width in "+ label).c_str(),1);
1827  layerMEs.meResolxMFTrackwidthProfileRphi->setAxisTitle(("Resolution in MF in "+ label).c_str(),2);
1828  }
1829 
1831  layerMEs.meResolxMFTrackwidthProfileWclus1Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileWclus1Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Wclus1_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for w=1");
1832  layerMEs.meResolxMFTrackwidthProfileWclus1Rphi->setAxisTitle(("track width for w=1 in "+ label).c_str(),1);
1833  layerMEs.meResolxMFTrackwidthProfileWclus1Rphi->setAxisTitle(("Resolution in MF for w=1 in "+ label).c_str(),2);
1834  }
1836  layerMEs.meResolxMFTrackwidthProfileWclus2Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileWclus2Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Wclus2_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for w=2");
1837  layerMEs.meResolxMFTrackwidthProfileWclus2Rphi->setAxisTitle(("track width for w=2 in "+ label).c_str(),1);
1838  layerMEs.meResolxMFTrackwidthProfileWclus2Rphi->setAxisTitle(("Resolution in MF for w=2 in "+ label).c_str(),2);
1839  }
1841  layerMEs.meResolxMFTrackwidthProfileWclus3Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileWclus3Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Wclus3_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for w=3");
1842  layerMEs.meResolxMFTrackwidthProfileWclus3Rphi->setAxisTitle(("track width for w=3 in "+ label).c_str(),1);
1843  layerMEs.meResolxMFTrackwidthProfileWclus3Rphi->setAxisTitle(("Resolution in MF for w=3 in "+ label).c_str(),2);
1844  }
1846  layerMEs.meResolxMFTrackwidthProfileWclus4Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileWclus4Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Wclus4_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for w=4");
1847  layerMEs.meResolxMFTrackwidthProfileWclus4Rphi->setAxisTitle(("track width for w=4 in "+ label).c_str(),1);
1848  layerMEs.meResolxMFTrackwidthProfileWclus4Rphi->setAxisTitle(("Resolution in MF for w=4 in "+ label).c_str(),2);
1849  }
1851  layerMEs.meResMFTrackwidthProfileWclus1Rphi = bookMEProfile(ibooker,"TProfResMFTrackwidthProfileWclus1Rphi",hidmanager.createHistoLayer("ResMF_Track_width_Profile_Wclus1_Rphi","layer",label,"").c_str() ,"Profile of Residuals(x) in MF vs track width for w=1");
1852  layerMEs.meResMFTrackwidthProfileWclus1Rphi->setAxisTitle(("track width for w=1 in "+ label).c_str(),1);
1853  layerMEs.meResMFTrackwidthProfileWclus1Rphi->setAxisTitle(("Residuals(x) in MF for w=1 in "+ label).c_str(),2);
1854  }
1856  layerMEs.meResMFTrackwidthProfileWclus2Rphi = bookMEProfile(ibooker,"TProfResMFTrackwidthProfileWclus2Rphi",hidmanager.createHistoLayer("ResMF_Track_width_Profile_Wclus2_Rphi","layer",label,"").c_str() ,"Profile of Residuals(x) in MF vs track width for w=2");
1857  layerMEs.meResMFTrackwidthProfileWclus2Rphi->setAxisTitle(("track width for w=2 in "+ label).c_str(),1);
1858  layerMEs.meResMFTrackwidthProfileWclus2Rphi->setAxisTitle(("Residuals(x) in MF for w=2 in "+ label).c_str(),2);
1859  }
1861  layerMEs.meResMFTrackwidthProfileWclus3Rphi = bookMEProfile(ibooker,"TProfResMFTrackwidthProfileWclus3Rphi",hidmanager.createHistoLayer("ResMF_Track_width_Profile_Wclus3_Rphi","layer",label,"").c_str() ,"Profile of Residuals(x) in MF vs track width for w=3");
1862  layerMEs.meResMFTrackwidthProfileWclus3Rphi->setAxisTitle(("track width for w=3 in "+ label).c_str(),1);
1863  layerMEs.meResMFTrackwidthProfileWclus3Rphi->setAxisTitle(("Residuals(x) in MF for w=3 in "+ label).c_str(),2);
1864  }
1866  layerMEs.meResMFTrackwidthProfileWclus4Rphi = bookMEProfile(ibooker,"TProfResMFTrackwidthProfileWclus4Rphi",hidmanager.createHistoLayer("ResMF_Track_width_Profile_Wclus4_Rphi","layer",label,"").c_str() ,"Profile of Residuals(x) in MF vs track width for w=4");
1867  layerMEs.meResMFTrackwidthProfileWclus4Rphi->setAxisTitle(("track width for w=4 in "+ label).c_str(),1);
1868  layerMEs.meResMFTrackwidthProfileWclus4Rphi->setAxisTitle(("Residuals(x) in MF for w=4 in "+ label).c_str(),2);
1869  }
1870 
1872  layerMEs.meResolxMFTrackwidthProfileCategory1Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory1Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category1_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for Category 1");
1873  layerMEs.meResolxMFTrackwidthProfileCategory1Rphi->setAxisTitle(("track width for Category 1 in "+ label).c_str(),1);
1874  layerMEs.meResolxMFTrackwidthProfileCategory1Rphi->setAxisTitle(("Resolution in MF for Category 1 in "+ label).c_str(),2);
1875  }
1877  layerMEs.meResolxMFTrackwidthProfileCategory2Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory2Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category2_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for Category 2");
1878  layerMEs.meResolxMFTrackwidthProfileCategory2Rphi->setAxisTitle(("track width for Category 2 in "+ label).c_str(),1);
1879  layerMEs.meResolxMFTrackwidthProfileCategory2Rphi->setAxisTitle(("Resolution in MF for Category 2 in "+ label).c_str(),2);
1880  }
1882  layerMEs.meResolxMFTrackwidthProfileCategory3Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory3Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category3_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for Category 3");
1883  layerMEs.meResolxMFTrackwidthProfileCategory3Rphi->setAxisTitle(("track width for Category 3 in "+ label).c_str(),1);
1884  layerMEs.meResolxMFTrackwidthProfileCategory3Rphi->setAxisTitle(("Resolution in MF for Category 3 in "+ label).c_str(),2);
1885  }
1887  layerMEs.meResolxMFTrackwidthProfileCategory4Rphi = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory4Rphi",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category3_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width for Category 4");
1888  layerMEs.meResolxMFTrackwidthProfileCategory3Rphi->setAxisTitle(("track width for Category 4 in "+ label).c_str(),1);
1889  layerMEs.meResolxMFTrackwidthProfileCategory3Rphi->setAxisTitle(("Resolution in MF for Category 4 in "+ label).c_str(),2);
1890  }
1892  layerMEs.meResolxMFClusterwidthProfileCategory1Rphi = bookMEProfile(ibooker,"TProfResolxMFClusterwidthProfileCategory1Rphi",hidmanager.createHistoLayer("ResolxMF_Cluster_width_Profile_Category1_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs cluster width for Category 1");
1893  layerMEs.meResolxMFClusterwidthProfileCategory1Rphi->setAxisTitle(("cluster width for Category 1 in "+ label).c_str(),1);
1894  layerMEs.meResolxMFClusterwidthProfileCategory1Rphi->setAxisTitle(("Resolution in MF for Category 1 in "+ label).c_str(),2);
1895  }
1897  layerMEs.meResolxMFAngleProfileRphi = bookMEProfile(ibooker,"TProfResolxMFAngleProfileRphi",hidmanager.createHistoLayer("ResolxMF_Angle_Profile_Rphi","layer",label,"").c_str() ,"Profile of Resolution in MF vs track angle alpha");
1898  layerMEs.meResolxMFAngleProfileRphi->setAxisTitle(("track angle alpha in "+ label).c_str(),1);
1899  layerMEs.meResolxMFAngleProfileRphi->setAxisTitle(("Resolution in MF in "+ label).c_str(),2);
1900  }
1902  layerMEs.merapidityResProfilewclus1 = bookMEProfile(ibooker,"TProfrapidityResProfilewclus1",hidmanager.createHistoLayer("rapidity_Res_Profile_wclus1","layer",label,"").c_str() ,"Profile of rapidity vs Res for w=1");
1903  layerMEs.merapidityResProfilewclus1->setAxisTitle(("Res for w=1 in "+ label).c_str(),1);
1904  layerMEs.merapidityResProfilewclus1->setAxisTitle(("rapidity for w=1 in "+ label).c_str(),2);
1905  }
1907  layerMEs.merapidityResProfilewclus2 = bookMEProfile(ibooker,"TProfrapidityResProfilewclus2",hidmanager.createHistoLayer("rapidity_Res_Profile_wclus2","layer",label,"").c_str() ,"Profile of rapidity vs Res for w=2");
1908  layerMEs.merapidityResProfilewclus2->setAxisTitle(("Res for w=2 in "+ label).c_str(),1);
1909  layerMEs.merapidityResProfilewclus2->setAxisTitle(("rapidity for w=2 in "+ label).c_str(),2);
1910  }
1912  layerMEs.merapidityResProfilewclus3 = bookMEProfile(ibooker,"TProfrapidityResProfilewclus3",hidmanager.createHistoLayer("rapidity_Res_Profile_wclus3","layer",label,"").c_str() ,"Profile of rapidity vs Res for w=3");
1913  layerMEs.merapidityResProfilewclus3->setAxisTitle(("Res for w=3 in "+ label).c_str(),1);
1914  layerMEs.merapidityResProfilewclus3->setAxisTitle(("rapidity for w=3 in "+ label).c_str(),2);
1915  }
1917  layerMEs.merapidityResProfilewclus4 = bookMEProfile(ibooker,"TProfrapidityResProfilewclus4",hidmanager.createHistoLayer("rapidity_Res_Profile_wclus4","layer",label,"").c_str() ,"Profile of rapidity vs Res for w=4");
1918  layerMEs.merapidityResProfilewclus4->setAxisTitle(("Res for w=4 in "+ label).c_str(),1);
1919  layerMEs.merapidityResProfilewclus4->setAxisTitle(("rapidity for w=4 in "+ label).c_str(),2);
1920  }
1921 
1922 
1923  LayerMEsMap[label]=layerMEs;
1924 
1925 }
1926 //------------------------------------------------------------------------------------------
1928 {
1929  SiStripHistoId hidmanager;
1930  StereoAndMatchedMEs stereoandmatchedMEs;
1931 
1932  stereoandmatchedMEs.meWclusSas = 0;
1933  stereoandmatchedMEs.meAdcSas = 0;
1934  stereoandmatchedMEs.meResolxLFSas = 0;
1935  stereoandmatchedMEs.meResolxMFSas = 0;
1936  stereoandmatchedMEs.meResLFSas = 0;
1937  stereoandmatchedMEs.meResMFSas = 0;
1938  stereoandmatchedMEs.mePullLFSas = 0;
1939  stereoandmatchedMEs.mePullMFSas = 0;
1940  stereoandmatchedMEs.meTrackangleSas = 0;
1941  stereoandmatchedMEs.meTrackanglebetaSas = 0;
1942  stereoandmatchedMEs.mePullTrackangleProfileSas = 0;
1943  stereoandmatchedMEs.meTrackwidthSas = 0;
1944  stereoandmatchedMEs.meExpectedwidthSas = 0;
1945  stereoandmatchedMEs.meClusterwidthSas = 0;
1946  stereoandmatchedMEs.meCategorySas = 0;
1947  stereoandmatchedMEs.mePullTrackwidthProfileSas = 0;
1948  stereoandmatchedMEs.mePullTrackwidthProfileCategory1Sas = 0;
1949  stereoandmatchedMEs.mePullTrackwidthProfileCategory2Sas = 0;
1950  stereoandmatchedMEs.mePullTrackwidthProfileCategory3Sas = 0;
1951  stereoandmatchedMEs.mePullTrackwidthProfileCategory4Sas = 0;
1952  stereoandmatchedMEs.meResolxMFTrackwidthProfileSas = 0;
1953  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory1Sas = 0;
1954  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory2Sas = 0;
1955  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory3Sas = 0;
1956  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory4Sas = 0;
1957  stereoandmatchedMEs.meResolxMFClusterwidthProfileCategory1Sas = 0;
1958  stereoandmatchedMEs.meResolxMFAngleProfileSas = 0;
1959 
1960  stereoandmatchedMEs.mePosxMatched = 0;
1961  stereoandmatchedMEs.mePosyMatched = 0;
1962  stereoandmatchedMEs.meResolxMatched = 0;
1963  stereoandmatchedMEs.meResolyMatched = 0;
1964  stereoandmatchedMEs.meResxMatched = 0;
1965  stereoandmatchedMEs.meResyMatched = 0;
1966  stereoandmatchedMEs.mePullxMatched = 0;
1967  stereoandmatchedMEs.mePullyMatched = 0;
1968 
1969  //WclusSas
1970  if(layerswitchWclusSas) {
1971  stereoandmatchedMEs.meWclusSas = bookME1D(ibooker,"TH1WclusSas", hidmanager.createHistoLayer("Wclus_sas","layer",label,"").c_str() ,"Cluster Width - Number of strips that belong to the RecHit cluster");
1972  stereoandmatchedMEs.meWclusSas->setAxisTitle(("Cluster Width [nr strips] (stereo) in "+ label).c_str());
1973  }
1974  //AdcSas
1975  if(layerswitchAdcSas) {
1976  stereoandmatchedMEs.meAdcSas = bookME1D(ibooker,"TH1AdcSas", hidmanager.createHistoLayer("Adc_sas","layer",label,"").c_str() ,"RecHit Cluster Charge");
1977  stereoandmatchedMEs.meAdcSas->setAxisTitle(("cluster charge [ADC] (stereo) in " + label).c_str());
1978  }
1979  //ResolxLFSas
1981  stereoandmatchedMEs.meResolxLFSas = bookME1D(ibooker,"TH1ResolxLFSas", hidmanager.createHistoLayer("Resolx_LF_sas","layer",label,"").c_str() ,"RecHit resol(x) coord.");
1982  stereoandmatchedMEs.meResolxLFSas->setAxisTitle(("resol(x) RecHit coord. (local frame) (stereo) in " + label).c_str());
1983  }
1984  //ResolxMFSas
1986  stereoandmatchedMEs.meResolxMFSas = bookME1D(ibooker,"TH1ResolxMFSas", hidmanager.createHistoLayer("Resolx_MF_sas","layer",label,"").c_str() ,"RecHit resol(x) coord.");
1987  stereoandmatchedMEs.meResolxMFSas->setAxisTitle(("resol(x) RecHit coord. (measurement frame) (stereo) in " + label).c_str());
1988  }
1989  //ResLFSas
1990  if(layerswitchResLFSas) {
1991  stereoandmatchedMEs.meResLFSas = bookME1D(ibooker,"TH1ResLFSas", hidmanager.createHistoLayer("Res_LF_sas","layer",label,"").c_str() ,"Residual of the hit x coordinate");
1992  stereoandmatchedMEs.meResLFSas->setAxisTitle(("Hit Residuals(x) (local frame) (stereo) in " + label).c_str());
1993  }
1994  //ResMFSas
1995  if(layerswitchResMFSas) {
1996  stereoandmatchedMEs.meResMFSas = bookME1D(ibooker,"TH1ResMFSas", hidmanager.createHistoLayer("Res_MF_sas","layer",label,"").c_str() ,"Residual of the hit x coordinate");
1997  stereoandmatchedMEs.meResMFSas->setAxisTitle(("Hit Residuals(x) (stereo) in " + label).c_str());
1998  }
1999  //PullLFSas
2000  if(layerswitchPullLFSas) {
2001  stereoandmatchedMEs.mePullLFSas = bookME1D(ibooker,"TH1PullLFSas", hidmanager.createHistoLayer("Pull_LF_sas","layer",label,"").c_str() ,"Pull distribution");
2002  stereoandmatchedMEs.mePullLFSas->setAxisTitle(("Pull distribution (local frame) (stereo) in " + label).c_str());
2003  }
2004  //PullMFSas
2005  if(layerswitchPullMFSas) {
2006  stereoandmatchedMEs.mePullMFSas = bookME1D(ibooker,"TH1PullMFSas", hidmanager.createHistoLayer("Pull_MF_sas","layer",label,"").c_str() ,"Pull distribution");
2007  stereoandmatchedMEs.mePullMFSas->setAxisTitle(("Pull distribution (measurement frame) (stereo) in " + label).c_str());
2008  }
2009 
2011  stereoandmatchedMEs.meTrackangleSas = bookME1D(ibooker,"TH1TrackangleSas",hidmanager.createHistoLayer("Track_angle_Sas","layer",label,"").c_str() ,"Track angle");
2012  stereoandmatchedMEs.meTrackangleSas->setAxisTitle(("Track angle (stereo) in " + label).c_str());
2013  }
2015  stereoandmatchedMEs.meTrackanglebetaSas = bookME1D(ibooker,"TH1TrackanglebetaSas",hidmanager.createHistoLayer("Track_angle_beta_Sas","layer",label,"").c_str() ,"Track angle beta");
2016  stereoandmatchedMEs.meTrackanglebetaSas->setAxisTitle(("Track angle beta (stereo) in " + label).c_str());
2017  }
2019  stereoandmatchedMEs.mePullTrackangleProfileSas = bookMEProfile(ibooker,"TProfPullTrackangleProfileSas",hidmanager.createHistoLayer("Pull_Track_angle_Profile_Sas","layer",label,"").c_str() ,"Profile of Pull in MF vs track angle (stereo)");
2020  stereoandmatchedMEs.mePullTrackangleProfileSas->setAxisTitle(("track angle (stereo) in " + label).c_str(),1);
2021  stereoandmatchedMEs.mePullTrackangleProfileSas->setAxisTitle(("Pull in MF (stereo) in " + label).c_str(),2);
2022  }
2024  stereoandmatchedMEs.meTrackwidthSas = bookME1D(ibooker,"TH1TrackwidthSas",hidmanager.createHistoLayer("Track_width_Sas","layer",label,"").c_str() ,"Track width");
2025  stereoandmatchedMEs.meTrackwidthSas->setAxisTitle(("Track width (stereo) in " + label).c_str());
2026  }
2028  stereoandmatchedMEs.meExpectedwidthSas = bookME1D(ibooker,"TH1ExpectedwidthSas",hidmanager.createHistoLayer("Expected_width_Sas","layer",label,"").c_str() ,"Expected width");
2029  stereoandmatchedMEs.meExpectedwidthSas->setAxisTitle(("Expected width (stereo) in " + label).c_str());
2030  }
2032  stereoandmatchedMEs.meClusterwidthSas = bookME1D(ibooker,"TH1ClusterwidthSas",hidmanager.createHistoLayer("Cluster_width_Sas","layer",label,"").c_str() ,"Cluster width");
2033  stereoandmatchedMEs.meClusterwidthSas->setAxisTitle(("Cluster width (stereo) in " + label).c_str());
2034  }
2036  stereoandmatchedMEs.meCategorySas = bookME1D(ibooker,"TH1CategorySas",hidmanager.createHistoLayer("Category_Sas","layer",label,"").c_str() ,"Category");
2037  stereoandmatchedMEs.meCategorySas->setAxisTitle(("Category (stereo) in " + label).c_str());
2038  }
2040  stereoandmatchedMEs.mePullTrackwidthProfileSas = bookMEProfile(ibooker,"TProfPullTrackwidthProfileSas",hidmanager.createHistoLayer("Pull_Track_width_Profile_Sas","layer",label,"").c_str() ,"Profile of Pull in MF vs track width (stereo)");
2041  stereoandmatchedMEs.mePullTrackwidthProfileSas->setAxisTitle(("track width (stereo) in " + label).c_str(),1);
2042  stereoandmatchedMEs.mePullTrackwidthProfileSas->setAxisTitle(("Pull in MF (stereo) in " + label).c_str(),2);
2043  }
2045  stereoandmatchedMEs.mePullTrackwidthProfileCategory1Sas = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory1Sas",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category1_Sas","layer",label,"").c_str() ,"Profile of Pull in MF vs track width (Category 1) (stereo)");
2046  stereoandmatchedMEs.mePullTrackwidthProfileCategory1Sas->setAxisTitle(("track width (Category 1) (stereo) in " + label).c_str(),1);
2047  stereoandmatchedMEs.mePullTrackwidthProfileCategory1Sas->setAxisTitle(("Pull in MF (Category 1) (stereo) in " + label).c_str(),2);
2048  }
2050  stereoandmatchedMEs.mePullTrackwidthProfileCategory2Sas = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory2Sas",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category2_Sas","layer",label,"").c_str() ,"Profile of Pull in MF vs track width (Category 2) (stereo)");
2051  stereoandmatchedMEs.mePullTrackwidthProfileCategory2Sas->setAxisTitle(("track width (Category 2) (stereo) in " + label).c_str(),1);
2052  stereoandmatchedMEs.mePullTrackwidthProfileCategory2Sas->setAxisTitle(("Pull in MF (Category 2) (stereo) in " + label).c_str(),2);
2053  }
2055  stereoandmatchedMEs.mePullTrackwidthProfileCategory3Sas = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory3Sas",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category3_Sas","layer",label,"").c_str() ,"Profile of Pull in MF vs track width (Category 3) (stereo)");
2056  stereoandmatchedMEs.mePullTrackwidthProfileCategory3Sas->setAxisTitle(("track width (Category 3) (stereo) in " + label).c_str(),1);
2057  stereoandmatchedMEs.mePullTrackwidthProfileCategory3Sas->setAxisTitle(("Pull in MF (Category 3) (stereo) in " + label).c_str(),2);
2058  }
2060  stereoandmatchedMEs.mePullTrackwidthProfileCategory4Sas = bookMEProfile(ibooker,"TProfPullTrackwidthProfileCategory4Sas",hidmanager.createHistoLayer("Pull_Track_width_Profile_Category4_Sas","layer",label,"").c_str() ,"Profile of Pull in MF vs track width (Category 4) (stereo)");
2061  stereoandmatchedMEs.mePullTrackwidthProfileCategory4Sas->setAxisTitle(("track width (Category 4) (stereo) in " + label).c_str(),1);
2062  stereoandmatchedMEs.mePullTrackwidthProfileCategory4Sas->setAxisTitle(("Pull in MF (Category 4) (stereo) in " + label).c_str(),2);
2063  }
2065  stereoandmatchedMEs.meResolxMFTrackwidthProfileSas = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileSas",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Sas","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width (stereo)");
2066  stereoandmatchedMEs.meResolxMFTrackwidthProfileSas->setAxisTitle(("track width (stereo) in " + label).c_str(),1);
2067  stereoandmatchedMEs.meResolxMFTrackwidthProfileSas->setAxisTitle(("Resolution in MF (stereo) in " + label).c_str(),2);
2068  }
2070  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory1Sas = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory1Sas",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category1_Sas","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width (Category 1) (stereo)");
2071  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory1Sas->setAxisTitle((" track width (Category 1) (stereo) in " + label).c_str(),1);
2072  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory1Sas->setAxisTitle((" Resolution in MF (Category 1) (stereo) in " + label).c_str(),2);
2073  }
2075  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory2Sas = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory2Sas",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category2_Sas","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width (Category 2) (stereo)");
2076  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory2Sas->setAxisTitle((" track width (Category 2) (stereo) in " + label).c_str(),1);
2077  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory2Sas->setAxisTitle((" Resolution in MF (Category 2) (stereo) in " + label).c_str(),2);
2078  }
2080  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory3Sas = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory3Sas",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category3_Sas","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width (Category 3) (stereo)");
2081  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory3Sas->setAxisTitle((" track width (Category 3) (stereo) in " + label).c_str(),1);
2082  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory3Sas->setAxisTitle((" Resolution in MF (Category 3) (stereo) in " + label).c_str(),2);
2083  }
2085  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory4Sas = bookMEProfile(ibooker,"TProfResolxMFTrackwidthProfileCategory4Sas",hidmanager.createHistoLayer("ResolxMF_Track_width_Profile_Category4_Sas","layer",label,"").c_str() ,"Profile of Resolution in MF vs track width (Category 4) (stereo)");
2086  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory4Sas->setAxisTitle((" track width (Category 4) (stereo) in " + label).c_str(),1);
2087  stereoandmatchedMEs.meResolxMFTrackwidthProfileCategory4Sas->setAxisTitle((" Resolution in MF (Category 4) (stereo) in " + label).c_str(),2);
2088  }
2090  stereoandmatchedMEs.meResolxMFClusterwidthProfileCategory1Sas = bookMEProfile(ibooker,"TProfResolxMFClusterwidthProfileCategory1Sas",hidmanager.createHistoLayer("ResolxMF_Cluster_width_Profile_Category1_Sas","layer",label,"").c_str() ,"Profile of Resolution in MF vs cluster width (Category 1) (stereo)");
2091  stereoandmatchedMEs.meResolxMFClusterwidthProfileCategory1Sas->setAxisTitle(("cluster width (Category 1) (stereo) in " + label).c_str(),1);
2092  stereoandmatchedMEs.meResolxMFClusterwidthProfileCategory1Sas->setAxisTitle((" Resolution in MF (Category 1) (stereo) in " + label).c_str(),2);
2093  }
2095  stereoandmatchedMEs.meResolxMFAngleProfileSas = bookMEProfile(ibooker,"TProfResolxMFAngleProfileSas",hidmanager.createHistoLayer("ResolxMF_Angle_Profile_Sas","layer",label,"").c_str() ,"Profile of Resolution in MF vs track angle (stereo)");
2096  stereoandmatchedMEs.meResolxMFAngleProfileSas->setAxisTitle(("track angle (stereo) in " + label).c_str(),1);
2097  stereoandmatchedMEs.meResolxMFAngleProfileSas->setAxisTitle(("Resolution in MF (stereo) in " + label).c_str(),2);
2098  }
2099  //PosxMatched
2101  stereoandmatchedMEs.mePosxMatched = bookME1D(ibooker,"TH1PosxMatched", hidmanager.createHistoLayer("Posx_matched","layer",label,"").c_str() ,"RecHit x coord.");
2102  stereoandmatchedMEs.mePosxMatched->setAxisTitle(("x coord. matched RecHit (local frame) in " + label).c_str());
2103  }
2104  //PosyMatched
2106  stereoandmatchedMEs.mePosyMatched = bookME1D(ibooker,"TH1PosyMatched", hidmanager.createHistoLayer("Posy_matched","layer",label,"").c_str() ,"RecHit y coord.");
2107  stereoandmatchedMEs.mePosyMatched->setAxisTitle(("y coord. matched RecHit (local frame) in " + label).c_str());
2108  }
2109  //ResolxMatched
2111  stereoandmatchedMEs.meResolxMatched = bookME1D(ibooker,"TH1ResolxMatched", hidmanager.createHistoLayer("Resolx_matched","layer",label,"").c_str() ,"RecHit resol(x) coord.");
2112  stereoandmatchedMEs.meResolxMatched->setAxisTitle(("resol(x) coord. matched RecHit (local frame) in " + label).c_str());
2113  }
2114  //ResolyMatched
2116  stereoandmatchedMEs.meResolyMatched = bookME1D(ibooker,"TH1ResolyMatched", hidmanager.createHistoLayer("Resoly_matched","layer",label,"").c_str() ,"RecHit resol(y) coord.");
2117  stereoandmatchedMEs.meResolyMatched->setAxisTitle(("resol(y) coord. matched RecHit (local frame) in " + label).c_str());
2118  }
2119  //ResxMatched
2121  stereoandmatchedMEs.meResxMatched = bookME1D(ibooker,"TH1ResxMatched", hidmanager.createHistoLayer("Resx_matched","layer",label,"").c_str() ,"Residual of the hit x coord.");
2122  stereoandmatchedMEs.meResxMatched->setAxisTitle(("Residuals(x) in matched RecHit in " + label).c_str());
2123  }
2124  //ResyMatched
2126  stereoandmatchedMEs.meResyMatched = bookME1D(ibooker,"TH1ResyMatched", hidmanager.createHistoLayer("Resy_matched","layer",label,"").c_str() ,"Residual of the hit x coord.");
2127  stereoandmatchedMEs.meResyMatched->setAxisTitle(("Res(y) in matched RecHit in " + label).c_str());
2128  }
2129 
2130  StereoAndMatchedMEsMap[label]=stereoandmatchedMEs;
2131 
2132 }
2133 //------------------------------------------------------------------------------------------
2134 MonitorElement* SiStripTrackingRecHitsValid::bookME1D(DQMStore::IBooker & ibooker,const char* ParameterSetLabel, const char* HistoName, const char* HistoTitle)
2135 {
2136  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
2137  return ibooker.book1D(HistoName,HistoTitle,
2138  Parameters.getParameter<int32_t>("Nbinx"),
2139  Parameters.getParameter<double>("xmin"),
2140  Parameters.getParameter<double>("xmax")
2141  );
2142 }
2143 //------------------------------------------------------------------------------------------
2144 MonitorElement* SiStripTrackingRecHitsValid::bookMEProfile(DQMStore::IBooker & ibooker,const char* ParameterSetLabel, const char* HistoName, const char* HistoTitle)
2145 {
2146  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
2147  //The number of channels in Y is disregarded in a profile plot.
2148  return ibooker.bookProfile(HistoName,HistoTitle,
2149  Parameters.getParameter<int32_t>("Nbinx"),
2150  Parameters.getParameter<double>("xmin"),
2151  Parameters.getParameter<double>("xmax"),
2152  Parameters.getParameter<double>("ymin"),
2153  Parameters.getParameter<double>("ymax"),
2154  ""
2155  );
2156 }
2157 
2158 // DEFINE_FWK_MODULE(SiStripTrackingRecHitsValid);
RunNumber_t run() const
Definition: EventID.h:39
ClusterRef cluster() const
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:114
T getParameter(std::string const &) const
SiStripTrackingRecHitsValid(const edm::ParameterSet &conf)
EventNumber_t event() const
Definition: EventID.h:41
virtual void beginJob()
Definition: EDAnalyzer.h:72
virtual const TrackerGeomDet * idToDetUnit(DetId) const
Return the pointer to the GeomDetUnit corresponding to a given DetId.
edm::ESHandle< SiStripDetCabling > SiStripDetCabling_
float xx() const
Definition: LocalError.h:24
void rechitanalysis(TrajectoryStateOnSurface tsos, const TransientTrackingRecHit::ConstRecHitPointer thit, const StripGeomDetUnit *stripdet, edm::ESHandle< StripClusterParameterEstimator > stripcpe, TrackerHitAssociator &associate, bool simplehit1or2D)
void setSiStripFolderName(std::string name)
virtual float stripAngle(float strip) const =0
const GeomDetUnit * monoDet() const
Definition: GluedGeomDet.h:20
uint32_t stereo() const
Definition: SiStripDetId.h:162
std::map< std::string, StereoAndMatchedMEs > StereoAndMatchedMEsMap
MonitorElement * bookME1D(DQMStore::IBooker &ibooker, const char *ParameterSetLabel, const char *HistoName, const char *HistoTitle)
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
void fillME(MonitorElement *ME, float value1)
LocalVector localDirection() const
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:52
std::vector< RecHitProperties > rechitstereo
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
edm::EDGetTokenT< std::vector< Trajectory > > trajectoryInputToken_
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
Definition: ShallowTools.cc:39
tuple magfield
Definition: HLT_ES_cff.py:2311
void rechitanalysis_matched(TrajectoryStateOnSurface tsos, const TransientTrackingRecHit::ConstRecHitPointer thit, const GluedGeomDet *gluedDet, TrackerHitAssociator &associate, edm::ESHandle< StripClusterParameterEstimator > stripcpe, std::string matchedmonorstereo)
T y() const
Definition: PV3DBase.h:63
std::map< std::string, LayerMEs > LayerMEsMap
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:67
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=0)
const Bounds & bounds() const
Definition: Surface.h:128
void createLayerMEs(DQMStore::IBooker &ibooker, std::string label)
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:40
virtual float strip(const LocalPoint &) const =0
T transverse() const
Definition: PV3DBase.h:73
virtual float thickness() const =0
virtual float localPitch(const LocalPoint &) const =0
virtual LocalError localPositionError() const
float xy() const
Definition: LocalError.h:25
void createSimpleHitsMEs(DQMStore::IBooker &ibooker)
virtual MeasurementError measurementError(const LocalPoint &, const LocalError &) const =0
std::vector< RecHitProperties > rechitmatched
void getTOBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tobDetRawIds, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t rod=0) const
float yy() const
Definition: LocalError.h:26
Local3DPoint localPosition() const
Definition: PSimHit.h:44
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
T sqrt(T t)
Definition: SSEVec.h:48
T z() const
Definition: PV3DBase.h:64
void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &es)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
float uu() const
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual const Topology & topology() const override
Returns a reference to the strip proxy topology.
std::vector< RecHitProperties > rechitrphi
ClusterRef cluster() const
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
T min(T a, T b)
Definition: MathUtil.h:58
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
std::string getSubdetid(uint32_t id, const TrackerTopology *tTopo, bool flag_ring)
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
void createMEs(DQMStore::IBooker &ibooker, const edm::EventSetup &es)
DQMStore * dbe_
std::pair< LocalPoint, LocalVector > projectHit(const PSimHit &hit, const StripGeomDetUnit *stripDet, const BoundPlane &plane)
MonitorElement * bookMEProfile(DQMStore::IBooker &ibooker, const char *ParameterSetLabel, const char *HistoName, const char *HistoTitle)
LocalVector localDirection() const
Obsolete. Same as momentumAtEntry().unit(), for backward compatibility.
Definition: PSimHit.h:52
Definition: DetId.h:18
unsigned int stereo() const
stereo
virtual TrackingRecHit const * hit() const
void setLayerFolder(uint32_t rawdetid, const TrackerTopology *tTopo, int32_t layer=0, bool ring_flag=0)
SiStripRecHit2D stereoHit() const
virtual LocalError localPositionError() const =0
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
void createStereoAndMatchedMEs(DQMStore::IBooker &ibooker, std::string label)
std::string HistoName
void getTECDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tecDetRawIds, uint32_t side=0, uint32_t wheel=0, uint32_t petal_bkw_frw=0, uint32_t petal=0, uint32_t ring=0, uint32_t ster=0) const
SiStripRecHit2D monoHit() const
T eta() const
Definition: PV3DBase.h:76
edm::EventID id() const
Definition: EventBase.h:56
static int position[264][3]
Definition: ReadPGInfo.cc:509
void getTIBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tibDetRawIds, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t int_ext=0, uint32_t string=0) const
std::vector< PSimHit > associateHit(const TrackingRecHit &thit) const
std::map< std::string, std::vector< uint32_t > > StereoAndMatchedDetMap
void getTIDDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tidDetRawIds, uint32_t side=0, uint32_t wheel=0, uint32_t ring=0, uint32_t ster=0) const
DetId geographicalId() const
dbl *** dir
Definition: mlp_gen.cc:35
Definition: DDAxes.h:10
std::string createHistoLayer(std::string description, std::string id_type, std::string path, std::string flag)
std::map< std::string, std::vector< uint32_t > > LayerDetMap
T x() const
Definition: PV2DBase.h:45
T x() const
Definition: PV3DBase.h:62
virtual LocalPoint localPosition() const =0
virtual LocalPoint localPosition() const
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
const GeomDetUnit * stereoDet() const
Definition: GluedGeomDet.h:21
Definition: Run.h:41
GlobalVector globalDirection() const
virtual const TrackerGeomDet * idToDet(DetId) const