CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TestHits.cc
Go to the documentation of this file.
2 
11 #include <TDirectory.h>
14 
22 
25 using namespace std;
26 using namespace edm;
27 
29  conf_(iConfig){
30  LogTrace("TestHits") << conf_<< std::endl;
31  propagatorName = conf_.getParameter<std::string>("Propagator");
32  builderName = conf_.getParameter<std::string>("TTRHBuilder");
33  srcName = conf_.getParameter<std::string>("src");
34  fname = conf_.getParameter<std::string>("Fitter");
35  mineta = conf_.getParameter<double>("mineta");
36  maxeta = conf_.getParameter<double>("maxeta");
37 }
38 
40 
42 {
43 
44  iSetup.get<TrackerDigiGeometryRecord>().get(theG);
45  iSetup.get<IdealMagneticFieldRecord>().get(theMF);
48  iSetup.get<TrajectoryFitter::Record>().get(fname, fit);
49 
50  file = new TFile("testhits.root","recreate");
51  for (int i=0; i!=6; i++)
52  for (int j=0; j!=9; j++){
53  if (i==0 && j>2) break;
54  if (i==1 && j>1) break;
55  if (i==2 && j>3) break;
56  if (i==3 && j>2) break;
57  if (i==4 && j>5) break;
58  if (i==5 && j>8) break;
59  title.str("");
60  title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts";
61  hPullGP_X_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
62  title.str("");
63  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts";
64  hPullGP_Y_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
65  title.str("");
66  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts";
67  hPullGP_Z_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
68  title.str("");
69  title << "Chi2Increment_" << i+1 << "-" << j+1;
70  hChi2Increment[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,0,100);
71 
72  title.str("");
73  title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts";
74  hPullGM_X_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
75  title.str("");
76  title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts";
77  hPullGM_Y_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
78  title.str("");
79  title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts";
80  hPullGM_Z_ts[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
81 
82  title.str("");
83  title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr";
84  hPullGP_X_tr[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
85  title.str("");
86  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr";
87  hPullGP_Y_tr[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
88  title.str("");
89  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr";
90  hPullGP_Z_tr[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
91 
92  title.str("");
93  title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs";
94  hPullGP_X_rs[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
95  title.str("");
96  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs";
97  hPullGP_Y_rs[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
98  title.str("");
99  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs";
100  hPullGP_Z_rs[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
101 
102  if ( ((i==2||i==4)&&(j==0||j==1)) || (i==3||i==5) ){
103  //mono
104  title.str("");
105  title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_mono";
106  hPullGP_X_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
107  title.str("");
108  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_mono";
109  hPullGP_Y_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
110  title.str("");
111  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_mono";
112  hPullGP_Z_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
113 
114  title.str("");
115  title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_mono";
116  hPullGM_X_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
117  title.str("");
118  title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_mono";
119  hPullGM_Y_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
120  title.str("");
121  title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_mono";
122  hPullGM_Z_ts_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
123 
124  title.str("");
125  title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_mono";
126  hPullGP_X_tr_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
127  title.str("");
128  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_mono";
129  hPullGP_Y_tr_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
130  title.str("");
131  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_mono";
132  hPullGP_Z_tr_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
133 
134  title.str("");
135  title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_mono";
136  hPullGP_X_rs_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
137  title.str("");
138  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_mono";
139  hPullGP_Y_rs_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
140  title.str("");
141  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_mono";
142  hPullGP_Z_rs_mono[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
143 
144  //stereo
145  title.str("");
146  title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_stereo";
147  hPullGP_X_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
148  title.str("");
149  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
150  hPullGP_Y_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
151  title.str("");
152  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
153  hPullGP_Z_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
154 
155  title.str("");
156  title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_stereo";
157  hPullGM_X_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
158  title.str("");
159  title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
160  hPullGM_Y_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
161  title.str("");
162  title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
163  hPullGM_Z_ts_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
164 
165  title.str("");
166  title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_stereo";
167  hPullGP_X_tr_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
168  title.str("");
169  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_stereo";
170  hPullGP_Y_tr_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
171  title.str("");
172  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_stereo";
173  hPullGP_Z_tr_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
174 
175  title.str("");
176  title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_stereo";
177  hPullGP_X_rs_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
178  title.str("");
179  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_stereo";
180  hPullGP_Y_rs_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
181  title.str("");
182  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_stereo";
183  hPullGP_Z_rs_stereo[title.str()] = new TH1F(title.str().c_str(),title.str().c_str(),1000,-50,50);
184  }
185  }
186  hTotChi2Increment = new TH1F("TotChi2Increment","TotChi2Increment",1000,0,100);
187  hProcess_vs_Chi2 = new TH2F("Process_vs_Chi2","Process_vs_Chi2",1000,0,100,17,-0.5,16.5);
188  hClsize_vs_Chi2 = new TH2F("Clsize_vs_Chi2","Clsize_vs_Chi2",1000,0,100,17,-0.5,16.5);
189 }
190 
191 
193 {
194  LogTrace("TestHits") << "\nnew event";
195 
197  hitAssociator = new TrackerHitAssociator(iEvent);
198 
200 
201  for (TrackCandidateCollection::const_iterator i=theTCCollection->begin(); i!=theTCCollection->end();i++){
202 
203  LogTrace("TestHits") << "\n*****************new candidate*****************" << std::endl;
204 
205  const TrackCandidate * theTC = &(*i);
207  const TrackCandidate::range& recHitVec=theTC->recHits();
208 
209  //convert PTrajectoryStateOnDet to TrajectoryStateOnSurface
210  TrajectoryStateTransform transformer;
211 
212  DetId detId(state.detId());
213  TrajectoryStateOnSurface theTSOS=
214  transformer.transientState(state, &(theG->idToDet(detId)->surface()),theMF.product());
215 
216  if (theTSOS.globalMomentum().eta()>maxeta || theTSOS.globalMomentum().eta()<mineta) continue;
217 
218  //convert the TrackingRecHit vector to a TransientTrackingRecHit vector
220 
222  i!=recHitVec.second; i++){
223  hits.push_back(theBuilder->build(&(*i) ));
224  }
225 
226  //call the fitter
227  std::vector<Trajectory> result = fit->fit(theTC->seed(), hits, theTSOS);
228  if (result.size()==0) continue;
229  std::vector<TrajectoryMeasurement> vtm = result[0].measurements();
230  double tchi2 = 0;
231 
232  TSOS lastState = theTSOS;
233  for (std::vector<TrajectoryMeasurement>::iterator tm=vtm.begin(); tm!=vtm.end();tm++){
234 
236  if ((rhit)->isValid()==0&&rhit->det()!=0) continue;
237  LogTrace("TestHits") << "*****************new hit*****************" ;
238 
239  int subdetId = rhit->det()->geographicalId().subdetId();
240  int layerId = 0;
241  DetId id = rhit->det()->geographicalId();
242  if (id.subdetId()==3) layerId = ((TIBDetId)(id)).layer();
243  if (id.subdetId()==5) layerId = ((TOBDetId)(id)).layer();
244  if (id.subdetId()==1) layerId = ((PXBDetId)(id)).layer();
245  if (id.subdetId()==4) layerId = ((TIDDetId)(id)).wheel();
246  if (id.subdetId()==6) layerId = ((TECDetId)(id)).wheel();
247  if (id.subdetId()==2) layerId = ((PXFDetId)(id)).disk();
248  LogTrace("TestHits") << "subdetId=" << subdetId << " layerId=" << layerId ;
249 
250  double delta = 99999;
251  LocalPoint rhitLPv = rhit->localPosition();
252 
253  std::vector<PSimHit> assSimHits = hitAssociator->associateHit(*(rhit->hit()));
254  if (assSimHits.size()==0) continue;
255  PSimHit shit;
256  for(std::vector<PSimHit>::const_iterator m=assSimHits.begin(); m<assSimHits.end(); m++){
257  if ((m->localPosition()-rhitLPv).mag()<delta) {
258  shit=*m;
259  delta = (m->localPosition()-rhitLPv).mag();
260  }
261  }
262 
263  TSOS currentState = tm->forwardPredictedState();
264  if (tm->backwardPredictedState().isValid())
265  currentState = combiner(tm->backwardPredictedState(), tm->forwardPredictedState());
266  TSOS updatedState = tm->updatedState();
267  tchi2+=tm->estimate();
268 
269  //plot chi2 increment
270  double chi2increment = tm->estimate();
271  LogTrace("TestHits") << "tm->estimate()=" << tm->estimate();
272  title.str("");
273  title << "Chi2Increment_" << subdetId << "-" << layerId;
274  hChi2Increment[title.str()]->Fill( chi2increment );
275  hTotChi2Increment->Fill( chi2increment );
276  hProcess_vs_Chi2->Fill( chi2increment, shit.processType() );
277  if (dynamic_cast<const SiPixelRecHit*>(rhit->hit()))
278  hClsize_vs_Chi2->Fill( chi2increment, ((const SiPixelRecHit*)(rhit->hit()))->cluster()->size() );
279  if (dynamic_cast<const SiStripRecHit2D*>(rhit->hit()))
280  hClsize_vs_Chi2->Fill( chi2increment, ((const SiStripRecHit2D*)(rhit->hit()))->cluster()->amplitudes().size() );
281 
282  //test hits
283  const Surface * surf = &( (rhit)->det()->surface() );
284  LocalVector shitLMom;
285  LocalPoint shitLPos;
286  if (dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())) {
287  double rechitmatchedx = rhit->localPosition().x();
288  double rechitmatchedy = rhit->localPosition().y();
289  double mindist = 999999;
290  double distx, disty;
291  std::pair<LocalPoint,LocalVector> closestPair;
292  const StripGeomDetUnit* stripDet =(StripGeomDetUnit*) ((const GluedGeomDet *)(rhit)->det())->stereoDet();
293  const BoundPlane& plane = (rhit)->det()->surface();
294  for(std::vector<PSimHit>::const_iterator m=assSimHits.begin(); m<assSimHits.end(); m++) {
295  //project simhit;
296  std::pair<LocalPoint,LocalVector> hitPair = projectHit((*m),stripDet,plane);
297  distx = fabs(rechitmatchedx - hitPair.first.x());
298  disty = fabs(rechitmatchedy - hitPair.first.y());
299  double dist = distx*distx+disty*disty;
300  if(sqrt(dist)<mindist){
301  mindist = dist;
302  closestPair = hitPair;
303  }
304  }
305  shitLPos = closestPair.first;
306  shitLMom = closestPair.second;
307  } else {
308  shitLPos = shit.localPosition();
309  shitLMom = shit.momentumAtEntry();
310  }
311  GlobalVector shitGMom = surf->toGlobal(shitLMom);
312  GlobalPoint shitGPos = surf->toGlobal(shitLPos);
313 
314  GlobalVector tsosGMom = currentState.globalMomentum();
315  GlobalError tsosGMEr(currentState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
316  GlobalPoint tsosGPos = currentState.globalPosition();
317  GlobalError tsosGPEr = currentState.cartesianError().position();
318 
319  GlobalPoint rhitGPos = (rhit)->globalPosition();
320  GlobalError rhitGPEr = (rhit)->globalPositionError();
321 
322  double pullGPX_rs = (rhitGPos.x()-shitGPos.x())/sqrt(rhitGPEr.cxx());
323  double pullGPY_rs = (rhitGPos.y()-shitGPos.y())/sqrt(rhitGPEr.cyy());
324  double pullGPZ_rs = (rhitGPos.z()-shitGPos.z())/sqrt(rhitGPEr.czz());
325  //double pullGPX_rs = (rhitGPos.x()-shitGPos.x());
326  //double pullGPY_rs = (rhitGPos.y()-shitGPos.y());
327  //double pullGPZ_rs = (rhitGPos.z()-shitGPos.z());
328 
329  LogTrace("TestHits") << "rs" << std::endl;
330  LogVerbatim("TestHits") << "assSimHits.size()=" << assSimHits.size() ;
331  LogVerbatim("TestHits") << "tsos globalPos =" << tsosGPos ;
332  LogVerbatim("TestHits") << "sim hit globalPos=" << shitGPos ;
333  LogVerbatim("TestHits") << "rec hit globalPos=" << rhitGPos ;
334  LogVerbatim("TestHits") << "geographicalId =" << rhit->det()->geographicalId().rawId() ;
335  LogVerbatim("TestHits") << "surface position =" << surf->position() ;
336 
337  title.str("");
338  title << "PullGP_X_" << subdetId << "-" << layerId << "_rs";
339  hPullGP_X_rs[title.str()]->Fill( pullGPX_rs );
340  title.str("");
341  title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs";
342  hPullGP_Y_rs[title.str()]->Fill( pullGPY_rs );
343  title.str("");
344  title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs";
345  hPullGP_Z_rs[title.str()]->Fill( pullGPZ_rs );
346 
347  double pullGPX_tr = (tsosGPos.x()-rhitGPos.x())/sqrt(tsosGPEr.cxx()+rhitGPEr.cxx());
348  double pullGPY_tr = (tsosGPos.y()-rhitGPos.y())/sqrt(tsosGPEr.cyy()+rhitGPEr.cyy());
349  double pullGPZ_tr = (tsosGPos.z()-rhitGPos.z())/sqrt(tsosGPEr.czz()+rhitGPEr.czz());
350  //double pullGPX_tr = (tsosGPos.x()-rhitGPos.x());
351  //double pullGPY_tr = (tsosGPos.y()-rhitGPos.y());
352  //double pullGPZ_tr = (tsosGPos.z()-rhitGPos.z());
353 
354  LogTrace("TestHits") << "tr" << std::endl;
355 
356  title.str("");
357  title << "PullGP_X_" << subdetId << "-" << layerId << "_tr";
358  hPullGP_X_tr[title.str()]->Fill( pullGPX_tr );
359  title.str("");
360  title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr";
361  hPullGP_Y_tr[title.str()]->Fill( pullGPY_tr );
362  title.str("");
363  title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr";
364  hPullGP_Z_tr[title.str()]->Fill( pullGPZ_tr );
365 
366  double pullGPX_ts = (tsosGPos.x()-shitGPos.x())/sqrt(tsosGPEr.cxx());
367  double pullGPY_ts = (tsosGPos.y()-shitGPos.y())/sqrt(tsosGPEr.cyy());
368  double pullGPZ_ts = (tsosGPos.z()-shitGPos.z())/sqrt(tsosGPEr.czz());
369  //double pullGPX_ts = (tsosGPos.x()-shitGPos.x());
370  //double pullGPY_ts = (tsosGPos.y()-shitGPos.y());
371  //double pullGPZ_ts = (tsosGPos.z()-shitGPos.z());
372 
373  LogTrace("TestHits") << "ts1" << std::endl;
374 
375  title.str("");
376  title << "PullGP_X_" << subdetId << "-" << layerId << "_ts";
377  hPullGP_X_ts[title.str()]->Fill( pullGPX_ts );
378  title.str("");
379  title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts";
380  hPullGP_Y_ts[title.str()]->Fill( pullGPY_ts );
381  title.str("");
382  title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts";
383  hPullGP_Z_ts[title.str()]->Fill( pullGPZ_ts );
384 
385  double pullGMX_ts = (tsosGMom.x()-shitGMom.x())/sqrt(tsosGMEr.cxx());
386  double pullGMY_ts = (tsosGMom.y()-shitGMom.y())/sqrt(tsosGMEr.cyy());
387  double pullGMZ_ts = (tsosGMom.z()-shitGMom.z())/sqrt(tsosGMEr.czz());
388  //double pullGMX_ts = (tsosGMom.x()-shitGMom.x());
389  //double pullGMY_ts = (tsosGMom.y()-shitGMom.y());
390  //double pullGMZ_ts = (tsosGMom.z()-shitGMom.z());
391 
392  LogTrace("TestHits") << "ts2" << std::endl;
393 
394  title.str("");
395  title << "PullGM_X_" << subdetId << "-" << layerId << "_ts";
396  hPullGM_X_ts[title.str()]->Fill( pullGMX_ts );
397  title.str("");
398  title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts";
399  hPullGM_Y_ts[title.str()]->Fill( pullGMY_ts );
400  title.str("");
401  title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts";
402  hPullGM_Z_ts[title.str()]->Fill( pullGMZ_ts );
403 
404  if (dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())) {
405  //mono
406  LogTrace("TestHits") << "MONO HIT" << std::endl;
407  CTTRHp tMonoHit =
408  theBuilder->build(dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())->monoHit());
409  if (tMonoHit==0) continue;
410  vector<PSimHit> assMonoSimHits = hitAssociator->associateHit(*tMonoHit->hit());
411  if (assMonoSimHits.size()==0) continue;
412  const PSimHit sMonoHit = *(assSimHits.begin());
413  const Surface * monoSurf = &( tMonoHit->det()->surface() );
414  if (monoSurf==0) continue;
415  TSOS monoState = thePropagator->propagate(lastState,*monoSurf);
416  if (monoState.isValid()==0) continue;
417 
418  LocalVector monoShitLMom = sMonoHit.momentumAtEntry();
419  GlobalVector monoShitGMom = monoSurf->toGlobal(monoShitLMom);
420  LocalPoint monoShitLPos = sMonoHit.localPosition();
421  GlobalPoint monoShitGPos = monoSurf->toGlobal(monoShitLPos);
422 
423  GlobalVector monoTsosGMom = monoState.globalMomentum();
424  GlobalError monoTsosGMEr(monoState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
425  GlobalPoint monoTsosGPos = monoState.globalPosition();
426  GlobalError monoTsosGPEr = monoState.cartesianError().position();
427 
428  GlobalPoint monoRhitGPos = tMonoHit->globalPosition();
429  GlobalError monoRhitGPEr = tMonoHit->globalPositionError();
430 
431  double pullGPX_rs_mono = (monoRhitGPos.x()-monoShitGPos.x())/sqrt(monoRhitGPEr.cxx());
432  double pullGPY_rs_mono = (monoRhitGPos.y()-monoShitGPos.y())/sqrt(monoRhitGPEr.cyy());
433  double pullGPZ_rs_mono = (monoRhitGPos.z()-monoShitGPos.z())/sqrt(monoRhitGPEr.czz());
434  //double pullGPX_rs_mono = (monoRhitGPos.x()-monoShitGPos.x());
435  //double pullGPY_rs_mono = (monoRhitGPos.y()-monoShitGPos.y());
436  //double pullGPZ_rs_mono = (monoRhitGPos.z()-monoShitGPos.z());
437 
438  title.str("");
439  title << "PullGP_X_" << subdetId << "-" << layerId << "_rs_mono";
440  hPullGP_X_rs_mono[title.str()]->Fill( pullGPX_rs_mono );
441  title.str("");
442  title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs_mono";
443  hPullGP_Y_rs_mono[title.str()]->Fill( pullGPY_rs_mono );
444  title.str("");
445  title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs_mono";
446  hPullGP_Z_rs_mono[title.str()]->Fill( pullGPZ_rs_mono );
447 
448  double pullGPX_tr_mono = (monoTsosGPos.x()-monoRhitGPos.x())/sqrt(monoTsosGPEr.cxx()+monoRhitGPEr.cxx());
449  double pullGPY_tr_mono = (monoTsosGPos.y()-monoRhitGPos.y())/sqrt(monoTsosGPEr.cyy()+monoRhitGPEr.cyy());
450  double pullGPZ_tr_mono = (monoTsosGPos.z()-monoRhitGPos.z())/sqrt(monoTsosGPEr.czz()+monoRhitGPEr.czz());
451  //double pullGPX_tr_mono = (monoTsosGPos.x()-monoRhitGPos.x());
452  //double pullGPY_tr_mono = (monoTsosGPos.y()-monoRhitGPos.y());
453  //double pullGPZ_tr_mono = (monoTsosGPos.z()-monoRhitGPos.z());
454 
455  title.str("");
456  title << "PullGP_X_" << subdetId << "-" << layerId << "_tr_mono";
457  hPullGP_X_tr_mono[title.str()]->Fill( pullGPX_tr_mono );
458  title.str("");
459  title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr_mono";
460  hPullGP_Y_tr_mono[title.str()]->Fill( pullGPY_tr_mono );
461  title.str("");
462  title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr_mono";
463  hPullGP_Z_tr_mono[title.str()]->Fill( pullGPZ_tr_mono );
464 
465  double pullGPX_ts_mono = (monoTsosGPos.x()-monoShitGPos.x())/sqrt(monoTsosGPEr.cxx());
466  double pullGPY_ts_mono = (monoTsosGPos.y()-monoShitGPos.y())/sqrt(monoTsosGPEr.cyy());
467  double pullGPZ_ts_mono = (monoTsosGPos.z()-monoShitGPos.z())/sqrt(monoTsosGPEr.czz());
468  //double pullGPX_ts_mono = (monoTsosGPos.x()-monoShitGPos.x());
469  //double pullGPY_ts_mono = (monoTsosGPos.y()-monoShitGPos.y());
470  //double pullGPZ_ts_mono = (monoTsosGPos.z()-monoShitGPos.z());
471 
472  title.str("");
473  title << "PullGP_X_" << subdetId << "-" << layerId << "_ts_mono";
474  hPullGP_X_ts_mono[title.str()]->Fill( pullGPX_ts_mono );
475  title.str("");
476  title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts_mono";
477  hPullGP_Y_ts_mono[title.str()]->Fill( pullGPY_ts_mono );
478  title.str("");
479  title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts_mono";
480  hPullGP_Z_ts_mono[title.str()]->Fill( pullGPZ_ts_mono );
481 
482  double pullGMX_ts_mono = (monoTsosGMom.x()-monoShitGMom.x())/sqrt(monoTsosGMEr.cxx());
483  double pullGMY_ts_mono = (monoTsosGMom.y()-monoShitGMom.y())/sqrt(monoTsosGMEr.cyy());
484  double pullGMZ_ts_mono = (monoTsosGMom.z()-monoShitGMom.z())/sqrt(monoTsosGMEr.czz());
485  //double pullGMX_ts_mono = (monoTsosGMom.x()-monoShitGMom.x());
486  //double pullGMY_ts_mono = (monoTsosGMom.y()-monoShitGMom.y());
487  //double pullGMZ_ts_mono = (monoTsosGMom.z()-monoShitGMom.z());
488 
489  title.str("");
490  title << "PullGM_X_" << subdetId << "-" << layerId << "_ts_mono";
491  hPullGM_X_ts_mono[title.str()]->Fill( pullGMX_ts_mono );
492  title.str("");
493  title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts_mono";
494  hPullGM_Y_ts_mono[title.str()]->Fill( pullGMY_ts_mono );
495  title.str("");
496  title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts_mono";
497  hPullGM_Z_ts_mono[title.str()]->Fill( pullGMZ_ts_mono );
498 
499  //stereo
500  LogTrace("TestHits") << "STEREO HIT" << std::endl;
501  CTTRHp tStereoHit =
502  theBuilder->build(dynamic_cast<const SiStripMatchedRecHit2D*>((rhit)->hit())->stereoHit());
503  if (tStereoHit==0) continue;
504  vector<PSimHit> assStereoSimHits = hitAssociator->associateHit(*tStereoHit->hit());
505  if (assStereoSimHits.size()==0) continue;
506  const PSimHit sStereoHit = *(assSimHits.begin());
507  const Surface * stereoSurf = &( tStereoHit->det()->surface() );
508  if (stereoSurf==0) continue;
509  TSOS stereoState = thePropagator->propagate(lastState,*stereoSurf);
510  if (stereoState.isValid()==0) continue;
511 
512  LocalVector stereoShitLMom = sStereoHit.momentumAtEntry();
513  GlobalVector stereoShitGMom = stereoSurf->toGlobal(stereoShitLMom);
514  LocalPoint stereoShitLPos = sStereoHit.localPosition();
515  GlobalPoint stereoShitGPos = stereoSurf->toGlobal(stereoShitLPos);
516 
517  GlobalVector stereoTsosGMom = stereoState.globalMomentum();
518  GlobalError stereoTsosGMEr(stereoState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
519  GlobalPoint stereoTsosGPos = stereoState.globalPosition();
520  GlobalError stereoTsosGPEr = stereoState.cartesianError().position();
521 
522  GlobalPoint stereoRhitGPos = tStereoHit->globalPosition();
523  GlobalError stereoRhitGPEr = tStereoHit->globalPositionError();
524 
525  double pullGPX_rs_stereo = (stereoRhitGPos.x()-stereoShitGPos.x())/sqrt(stereoRhitGPEr.cxx());
526  double pullGPY_rs_stereo = (stereoRhitGPos.y()-stereoShitGPos.y())/sqrt(stereoRhitGPEr.cyy());
527  double pullGPZ_rs_stereo = (stereoRhitGPos.z()-stereoShitGPos.z())/sqrt(stereoRhitGPEr.czz());
528  //double pullGPX_rs_stereo = (stereoRhitGPos.x()-stereoShitGPos.x());
529  //double pullGPY_rs_stereo = (stereoRhitGPos.y()-stereoShitGPos.y());
530  //double pullGPZ_rs_stereo = (stereoRhitGPos.z()-stereoShitGPos.z());
531 
532  title.str("");
533  title << "PullGP_X_" << subdetId << "-" << layerId << "_rs_stereo";
534  hPullGP_X_rs_stereo[title.str()]->Fill( pullGPX_rs_stereo );
535  title.str("");
536  title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs_stereo";
537  hPullGP_Y_rs_stereo[title.str()]->Fill( pullGPY_rs_stereo );
538  title.str("");
539  title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs_stereo";
540  hPullGP_Z_rs_stereo[title.str()]->Fill( pullGPZ_rs_stereo );
541 
542  double pullGPX_tr_stereo = (stereoTsosGPos.x()-stereoRhitGPos.x())/sqrt(stereoTsosGPEr.cxx()+stereoRhitGPEr.cxx());
543  double pullGPY_tr_stereo = (stereoTsosGPos.y()-stereoRhitGPos.y())/sqrt(stereoTsosGPEr.cyy()+stereoRhitGPEr.cyy());
544  double pullGPZ_tr_stereo = (stereoTsosGPos.z()-stereoRhitGPos.z())/sqrt(stereoTsosGPEr.czz()+stereoRhitGPEr.czz());
545  //double pullGPX_tr_stereo = (stereoTsosGPos.x()-stereoRhitGPos.x());
546  //double pullGPY_tr_stereo = (stereoTsosGPos.y()-stereoRhitGPos.y());
547  //double pullGPZ_tr_stereo = (stereoTsosGPos.z()-stereoRhitGPos.z());
548 
549  title.str("");
550  title << "PullGP_X_" << subdetId << "-" << layerId << "_tr_stereo";
551  hPullGP_X_tr_stereo[title.str()]->Fill( pullGPX_tr_stereo );
552  title.str("");
553  title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr_stereo";
554  hPullGP_Y_tr_stereo[title.str()]->Fill( pullGPY_tr_stereo );
555  title.str("");
556  title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr_stereo";
557  hPullGP_Z_tr_stereo[title.str()]->Fill( pullGPZ_tr_stereo );
558 
559  double pullGPX_ts_stereo = (stereoTsosGPos.x()-stereoShitGPos.x())/sqrt(stereoTsosGPEr.cxx());
560  double pullGPY_ts_stereo = (stereoTsosGPos.y()-stereoShitGPos.y())/sqrt(stereoTsosGPEr.cyy());
561  double pullGPZ_ts_stereo = (stereoTsosGPos.z()-stereoShitGPos.z())/sqrt(stereoTsosGPEr.czz());
562  //double pullGPX_ts_stereo = (stereoTsosGPos.x()-stereoShitGPos.x());
563  //double pullGPY_ts_stereo = (stereoTsosGPos.y()-stereoShitGPos.y());
564  //double pullGPZ_ts_stereo = (stereoTsosGPos.z()-stereoShitGPos.z());
565 
566  title.str("");
567  title << "PullGP_X_" << subdetId << "-" << layerId << "_ts_stereo";
568  hPullGP_X_ts_stereo[title.str()]->Fill( pullGPX_ts_stereo );
569  title.str("");
570  title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts_stereo";
571  hPullGP_Y_ts_stereo[title.str()]->Fill( pullGPY_ts_stereo );
572  title.str("");
573  title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts_stereo";
574  hPullGP_Z_ts_stereo[title.str()]->Fill( pullGPZ_ts_stereo );
575 
576  double pullGMX_ts_stereo = (stereoTsosGMom.x()-stereoShitGMom.x())/sqrt(stereoTsosGMEr.cxx());
577  double pullGMY_ts_stereo = (stereoTsosGMom.y()-stereoShitGMom.y())/sqrt(stereoTsosGMEr.cyy());
578  double pullGMZ_ts_stereo = (stereoTsosGMom.z()-stereoShitGMom.z())/sqrt(stereoTsosGMEr.czz());
579  //double pullGMX_ts_stereo = (stereoTsosGMom.x()-stereoShitGMom.x());
580  //double pullGMY_ts_stereo = (stereoTsosGMom.y()-stereoShitGMom.y());
581  //double pullGMZ_ts_stereo = (stereoTsosGMom.z()-stereoShitGMom.z());
582 
583  title.str("");
584  title << "PullGM_X_" << subdetId << "-" << layerId << "_ts_stereo";
585  hPullGM_X_ts_stereo[title.str()]->Fill( pullGMX_ts_stereo );
586  title.str("");
587  title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts_stereo";
588  hPullGM_Y_ts_stereo[title.str()]->Fill( pullGMY_ts_stereo );
589  title.str("");
590  title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts_stereo";
591  hPullGM_Z_ts_stereo[title.str()]->Fill( pullGMZ_ts_stereo );
592  }
593  lastState = updatedState;
594  }
595  LogTrace("TestHits") << "traj chi2=" << tchi2 ;
596  LogTrace("TestHits") << "track chi2=" << result[0].chiSquared() ;
597  }
598  delete hitAssociator;
599  LogTrace("TestHits") << "end of event" << std::endl;
600 }
601 // TSOS lastState = theTSOS;
602 // for (std::vector<TrajectoryMeasurement>::iterator tm=vtm.begin(); tm!=vtm.end();tm++){
603 
604 // TransientTrackingRecHit::ConstRecHitPointer rhit = tm->recHit();
605 // if ((rhit)->isValid()==0&&rhit->det()!=0) continue;
606 
607 // // //test hits
608 // // TSOS lastState, currentState, updatedState;
609 // // updatedState=theTSOS;
610 // // for (TransientTrackingRecHit::RecHitContainer::iterator rhit=hits.begin()+1;rhit!=hits.end();++rhit){
611 
612 // lastState=updatedState;
613 
614 // LogTrace("TestHits") << "new hit" << std::endl;
615 
616 // if ((*rhit)->isValid()==0) continue;
617 
618 // int subdetId = (*rhit)->det()->geographicalId().subdetId();
619 // int layerId = 0;
620 // DetId id = (*rhit)->det()->geographicalId();
621 // if (id.subdetId()==3) layerId = ((TIBDetId)(id)).layer();
622 // if (id.subdetId()==5) layerId = ((TOBDetId)(id)).layer();
623 // if (id.subdetId()==1) layerId = ((PXBDetId)(id)).layer();
624 // if (id.subdetId()==4) layerId = ((TIDDetId)(id)).wheel();
625 // if (id.subdetId()==6) layerId = ((TECDetId)(id)).wheel();
626 // if (id.subdetId()==2) layerId = ((PXFDetId)(id)).disk();
627 // const Surface * surf = &( (*rhit)->det()->surface() );
628 // currentState=thePropagator->propagate(lastState,*surf);
629 // if (currentState.isValid()==0) continue;
630 // updatedState=theUpdator->update(currentState,**rhit);
631 
632 // double delta = 99999;
633 // LocalPoint rhitLP = rhit->localPosition();
634 
635 // std::vector<PSimHit> assSimHits = hitAssociator->associateHit(*(*rhit)->hit());
636 // if (assSimHits.size()==0) continue;
637 // PSimHit shit;
638 // for(std::vector<PSimHit>::const_iterator m=assSimHits.begin(); m<assSimHits.end(); m++){
639 // if ((*m-rhitLP).mag()<delta) {
640 // shit=*m;
641 // delta = (*m-rhitLP).mag();
642 // }
643 // }
644 
645 // LocalVector shitLMom = shit.momentumAtEntry();
646 // GlobalVector shitGMom = surf->toGlobal(shitLMom);
647 // LocalPoint shitLPos = shit.localPosition();
648 // GlobalPoint shitGPos = surf->toGlobal(shitLPos);
649 
650 // GlobalVector tsosGMom = currentState.globalMomentum();
651 // GlobalError tsosGMEr(currentState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
652 // GlobalPoint tsosGPos = currentState.globalPosition();
653 // GlobalError tsosGPEr = currentState.cartesianError().position();
654 
655 // GlobalPoint rhitGPos = (*rhit)->globalPosition();
656 // GlobalError rhitGPEr = (*rhit)->globalPositionError();
657 
658 // double pullGPX_rs = (rhitGPos.x()-shitGPos.x())/sqrt(rhitGPEr.cxx());
659 // double pullGPY_rs = (rhitGPos.y()-shitGPos.y())/sqrt(rhitGPEr.cyy());
660 // double pullGPZ_rs = (rhitGPos.z()-shitGPos.z())/sqrt(rhitGPEr.czz());
661 // // double pullGPX_rs = (rhitGPos.x()-shitGPos.x())/*/sqrt(rhitGPEr.cxx())*/;
662 // // double pullGPY_rs = (rhitGPos.y()-shitGPos.y())/*/sqrt(rhitGPEr.cyy())*/;
663 // // double pullGPZ_rs = (rhitGPos.z()-shitGPos.z())/*/sqrt(rhitGPEr.czz())*/;
664 
665 // //plot chi2 increment
666 // MeasurementExtractor me(currentState);
667 // double chi2increment = computeChi2Increment(me,*rhit);
668 // LogTrace("TestHits") << "chi2increment=" << chi2increment << std::endl;
669 // title.str("");
670 // title << "Chi2Increment_" << subdetId << "-" << layerId;
671 // hChi2Increment[title.str()]->Fill( chi2increment );
672 // hTotChi2Increment->Fill( chi2increment );
673 // hChi2_vs_Process->Fill( chi2increment, shit.processType() );
674 // if (dynamic_cast<const SiPixelRecHit*>((*rhit)->hit()))
675 // hChi2_vs_clsize->Fill( chi2increment, ((const SiPixelRecHit*)(*rhit)->hit())->cluster()->size() );
676 // if (dynamic_cast<const SiStripRecHit2D*>((*rhit)->hit()))
677 // hChi2_vs_clsize->Fill( chi2increment, ((const SiStripRecHit2D*)(*rhit)->hit())->cluster()->amplitudes().size() );
678 
679 // LogTrace("TestHits") << "rs" << std::endl;
680 
681 // title.str("");
682 // title << "PullGP_X_" << subdetId << "-" << layerId << "_rs";
683 // hPullGP_X_rs[title.str()]->Fill( pullGPX_rs );
684 // title.str("");
685 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs";
686 // hPullGP_Y_rs[title.str()]->Fill( pullGPY_rs );
687 // title.str("");
688 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs";
689 // hPullGP_Z_rs[title.str()]->Fill( pullGPZ_rs );
690 
691 // double pullGPX_tr = (tsosGPos.x()-rhitGPos.x())/sqrt(tsosGPEr.cxx()+rhitGPEr.cxx());
692 // double pullGPY_tr = (tsosGPos.y()-rhitGPos.y())/sqrt(tsosGPEr.cyy()+rhitGPEr.cyy());
693 // double pullGPZ_tr = (tsosGPos.z()-rhitGPos.z())/sqrt(tsosGPEr.czz()+rhitGPEr.czz());
694 // // double pullGPX_tr = (tsosGPos.x()-rhitGPos.x())/*/sqrt(tsosGPEr.cxx()+rhitGPEr.cxx())*/;
695 // // double pullGPY_tr = (tsosGPos.y()-rhitGPos.y())/*/sqrt(tsosGPEr.cyy()+rhitGPEr.cyy())*/;
696 // // double pullGPZ_tr = (tsosGPos.z()-rhitGPos.z())/*/sqrt(tsosGPEr.czz()+rhitGPEr.czz())*/;
697 
698 // LogTrace("TestHits") << "tr" << std::endl;
699 
700 // title.str("");
701 // title << "PullGP_X_" << subdetId << "-" << layerId << "_tr";
702 // hPullGP_X_tr[title.str()]->Fill( pullGPX_tr );
703 // title.str("");
704 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr";
705 // hPullGP_Y_tr[title.str()]->Fill( pullGPY_tr );
706 // title.str("");
707 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr";
708 // hPullGP_Z_tr[title.str()]->Fill( pullGPZ_tr );
709 
710 // double pullGPX_ts = (tsosGPos.x()-shitGPos.x())/sqrt(tsosGPEr.cxx());
711 // double pullGPY_ts = (tsosGPos.y()-shitGPos.y())/sqrt(tsosGPEr.cyy());
712 // double pullGPZ_ts = (tsosGPos.z()-shitGPos.z())/sqrt(tsosGPEr.czz());
713 // // double pullGPX_ts = (tsosGPos.x()-shitGPos.x())/*/sqrt(tsosGPEr.cxx())*/;
714 // // double pullGPY_ts = (tsosGPos.y()-shitGPos.y())/*/sqrt(tsosGPEr.cyy())*/;
715 // // double pullGPZ_ts = (tsosGPos.z()-shitGPos.z())/*/sqrt(tsosGPEr.czz())*/;
716 
717 // LogTrace("TestHits") << "ts1" << std::endl;
718 
719 // title.str("");
720 // title << "PullGP_X_" << subdetId << "-" << layerId << "_ts";
721 // hPullGP_X_ts[title.str()]->Fill( pullGPX_ts );
722 // title.str("");
723 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts";
724 // hPullGP_Y_ts[title.str()]->Fill( pullGPY_ts );
725 // title.str("");
726 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts";
727 // hPullGP_Z_ts[title.str()]->Fill( pullGPZ_ts );
728 
729 // double pullGMX_ts = (tsosGMom.x()-shitGMom.x())/sqrt(tsosGMEr.cxx());
730 // double pullGMY_ts = (tsosGMom.y()-shitGMom.y())/sqrt(tsosGMEr.cyy());
731 // double pullGMZ_ts = (tsosGMom.z()-shitGMom.z())/sqrt(tsosGMEr.czz());
732 // // double pullGMX_ts = (tsosGMom.x()-shitGMom.x())/*/sqrt(tsosGMEr.cxx())*/;
733 // // double pullGMY_ts = (tsosGMom.y()-shitGMom.y())/*/sqrt(tsosGMEr.cyy())*/;
734 // // double pullGMZ_ts = (tsosGMom.z()-shitGMom.z())/*/sqrt(tsosGMEr.czz())*/;
735 
736 // LogTrace("TestHits") << "ts2" << std::endl;
737 
738 // title.str("");
739 // title << "PullGM_X_" << subdetId << "-" << layerId << "_ts";
740 // hPullGM_X_ts[title.str()]->Fill( pullGMX_ts );
741 // title.str("");
742 // title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts";
743 // hPullGM_Y_ts[title.str()]->Fill( pullGMY_ts );
744 // title.str("");
745 // title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts";
746 // hPullGM_Z_ts[title.str()]->Fill( pullGMZ_ts );
747 
748 // if (dynamic_cast<const SiStripMatchedRecHit2D*>((*rhit)->hit())) {
749 // //mono
750 // LogTrace("TestHits") << "MONO HIT" << std::endl;
751 // CTTRHp tMonoHit =
752 // theBuilder->build(dynamic_cast<const SiStripMatchedRecHit2D*>((*rhit)->hit())->monoHit());
753 // if (tMonoHit==0) continue;
754 // vector<PSimHit> assMonoSimHits = hitAssociator->associateHit(*tMonoHit->hit());
755 // if (assMonoSimHits.size()==0) continue;
756 // const PSimHit sMonoHit = *(assSimHits.begin());
757 // const Surface * monoSurf = &( tMonoHit->det()->surface() );
758 // if (monoSurf==0) continue;
759 // TSOS monoState = thePropagator->propagate(lastState,*monoSurf);
760 // if (monoState.isValid()==0) continue;
761 
762 // LocalVector monoShitLMom = sMonoHit.momentumAtEntry();
763 // GlobalVector monoShitGMom = monoSurf->toGlobal(monoShitLMom);
764 // LocalPoint monoShitLPos = sMonoHit.localPosition();
765 // GlobalPoint monoShitGPos = monoSurf->toGlobal(monoShitLPos);
766 
767 // GlobalVector monoTsosGMom = monoState.globalMomentum();
768 // GlobalError monoTsosGMEr(monoState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
769 // GlobalPoint monoTsosGPos = monoState.globalPosition();
770 // GlobalError monoTsosGPEr = monoState.cartesianError().position();
771 
772 // GlobalPoint monoRhitGPos = tMonoHit->globalPosition();
773 // GlobalError monoRhitGPEr = tMonoHit->globalPositionError();
774 
775 // double pullGPX_rs_mono = (monoRhitGPos.x()-monoShitGPos.x())/sqrt(monoRhitGPEr.cxx());
776 // double pullGPY_rs_mono = (monoRhitGPos.y()-monoShitGPos.y())/sqrt(monoRhitGPEr.cyy());
777 // double pullGPZ_rs_mono = (monoRhitGPos.z()-monoShitGPos.z())/sqrt(monoRhitGPEr.czz());
778 // // double pullGPX_rs_mono = (monoRhitGPos.x()-monoShitGPos.x())/*/sqrt(monoRhitGPEr.cxx())*/;
779 // // double pullGPY_rs_mono = (monoRhitGPos.y()-monoShitGPos.y())/*/sqrt(monoRhitGPEr.cyy())*/;
780 // // double pullGPZ_rs_mono = (monoRhitGPos.z()-monoShitGPos.z())/*/sqrt(monoRhitGPEr.czz())*/;
781 
782 // title.str("");
783 // title << "PullGP_X_" << subdetId << "-" << layerId << "_rs_mono";
784 // hPullGP_X_rs_mono[title.str()]->Fill( pullGPX_rs_mono );
785 // title.str("");
786 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs_mono";
787 // hPullGP_Y_rs_mono[title.str()]->Fill( pullGPY_rs_mono );
788 // title.str("");
789 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs_mono";
790 // hPullGP_Z_rs_mono[title.str()]->Fill( pullGPZ_rs_mono );
791 
792 // double pullGPX_tr_mono = (monoTsosGPos.x()-monoRhitGPos.x())/sqrt(monoTsosGPEr.cxx()+monoRhitGPEr.cxx());
793 // double pullGPY_tr_mono = (monoTsosGPos.y()-monoRhitGPos.y())/sqrt(monoTsosGPEr.cyy()+monoRhitGPEr.cyy());
794 // double pullGPZ_tr_mono = (monoTsosGPos.z()-monoRhitGPos.z())/sqrt(monoTsosGPEr.czz()+monoRhitGPEr.czz());
795 // // double pullGPX_tr_mono = (monoTsosGPos.x()-monoRhitGPos.x())/*/sqrt(monoTsosGPEr.cxx()+monoRhitGPEr.cxx())*/;
796 // // double pullGPY_tr_mono = (monoTsosGPos.y()-monoRhitGPos.y())/*/sqrt(monoTsosGPEr.cyy()+monoRhitGPEr.cyy())*/;
797 // // double pullGPZ_tr_mono = (monoTsosGPos.z()-monoRhitGPos.z())/*/sqrt(monoTsosGPEr.czz()+monoRhitGPEr.czz())*/;
798 
799 // title.str("");
800 // title << "PullGP_X_" << subdetId << "-" << layerId << "_tr_mono";
801 // hPullGP_X_tr_mono[title.str()]->Fill( pullGPX_tr_mono );
802 // title.str("");
803 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr_mono";
804 // hPullGP_Y_tr_mono[title.str()]->Fill( pullGPY_tr_mono );
805 // title.str("");
806 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr_mono";
807 // hPullGP_Z_tr_mono[title.str()]->Fill( pullGPZ_tr_mono );
808 
809 // double pullGPX_ts_mono = (monoTsosGPos.x()-monoShitGPos.x())/sqrt(monoTsosGPEr.cxx());
810 // double pullGPY_ts_mono = (monoTsosGPos.y()-monoShitGPos.y())/sqrt(monoTsosGPEr.cyy());
811 // double pullGPZ_ts_mono = (monoTsosGPos.z()-monoShitGPos.z())/sqrt(monoTsosGPEr.czz());
812 // // double pullGPX_ts_mono = (monoTsosGPos.x()-monoShitGPos.x())/*/sqrt(monoTsosGPEr.cxx())*/;
813 // // double pullGPY_ts_mono = (monoTsosGPos.y()-monoShitGPos.y())/*/sqrt(monoTsosGPEr.cyy())*/;
814 // // double pullGPZ_ts_mono = (monoTsosGPos.z()-monoShitGPos.z())/*/sqrt(monoTsosGPEr.czz())*/;
815 
816 // title.str("");
817 // title << "PullGP_X_" << subdetId << "-" << layerId << "_ts_mono";
818 // hPullGP_X_ts_mono[title.str()]->Fill( pullGPX_ts_mono );
819 // title.str("");
820 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts_mono";
821 // hPullGP_Y_ts_mono[title.str()]->Fill( pullGPY_ts_mono );
822 // title.str("");
823 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts_mono";
824 // hPullGP_Z_ts_mono[title.str()]->Fill( pullGPZ_ts_mono );
825 
826 // double pullGMX_ts_mono = (monoTsosGMom.x()-monoShitGMom.x())/sqrt(monoTsosGMEr.cxx());
827 // double pullGMY_ts_mono = (monoTsosGMom.y()-monoShitGMom.y())/sqrt(monoTsosGMEr.cyy());
828 // double pullGMZ_ts_mono = (monoTsosGMom.z()-monoShitGMom.z())/sqrt(monoTsosGMEr.czz());
829 // // double pullGMX_ts_mono = (monoTsosGMom.x()-monoShitGMom.x())/*/sqrt(monoTsosGMEr.cxx())*/;
830 // // double pullGMY_ts_mono = (monoTsosGMom.y()-monoShitGMom.y())/*/sqrt(monoTsosGMEr.cyy())*/;
831 // // double pullGMZ_ts_mono = (monoTsosGMom.z()-monoShitGMom.z())/*/sqrt(monoTsosGMEr.czz())*/;
832 
833 // title.str("");
834 // title << "PullGM_X_" << subdetId << "-" << layerId << "_ts_mono";
835 // hPullGM_X_ts_mono[title.str()]->Fill( pullGMX_ts_mono );
836 // title.str("");
837 // title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts_mono";
838 // hPullGM_Y_ts_mono[title.str()]->Fill( pullGMY_ts_mono );
839 // title.str("");
840 // title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts_mono";
841 // hPullGM_Z_ts_mono[title.str()]->Fill( pullGMZ_ts_mono );
842 
843 // //stereo
844 // LogTrace("TestHits") << "STEREO HIT" << std::endl;
845 // CTTRHp tStereoHit =
846 // theBuilder->build(dynamic_cast<const SiStripMatchedRecHit2D*>((*rhit)->hit())->stereoHit());
847 // if (tStereoHit==0) continue;
848 // vector<PSimHit> assStereoSimHits = hitAssociator->associateHit(*tStereoHit->hit());
849 // if (assStereoSimHits.size()==0) continue;
850 // const PSimHit sStereoHit = *(assSimHits.begin());
851 // const Surface * stereoSurf = &( tStereoHit->det()->surface() );
852 // if (stereoSurf==0) continue;
853 // TSOS stereoState = thePropagator->propagate(lastState,*stereoSurf);
854 // if (stereoState.isValid()==0) continue;
855 
856 // LocalVector stereoShitLMom = sStereoHit.momentumAtEntry();
857 // GlobalVector stereoShitGMom = stereoSurf->toGlobal(stereoShitLMom);
858 // LocalPoint stereoShitLPos = sStereoHit.localPosition();
859 // GlobalPoint stereoShitGPos = stereoSurf->toGlobal(stereoShitLPos);
860 
861 // GlobalVector stereoTsosGMom = stereoState.globalMomentum();
862 // GlobalError stereoTsosGMEr(stereoState.cartesianError().matrix().Sub<AlgebraicSymMatrix33>(3,3));
863 // GlobalPoint stereoTsosGPos = stereoState.globalPosition();
864 // GlobalError stereoTsosGPEr = stereoState.cartesianError().position();
865 
866 // GlobalPoint stereoRhitGPos = tStereoHit->globalPosition();
867 // GlobalError stereoRhitGPEr = tStereoHit->globalPositionError();
868 
869 // double pullGPX_rs_stereo = (stereoRhitGPos.x()-stereoShitGPos.x())/sqrt(stereoRhitGPEr.cxx());
870 // double pullGPY_rs_stereo = (stereoRhitGPos.y()-stereoShitGPos.y())/sqrt(stereoRhitGPEr.cyy());
871 // double pullGPZ_rs_stereo = (stereoRhitGPos.z()-stereoShitGPos.z())/sqrt(stereoRhitGPEr.czz());
872 // // double pullGPX_rs_stereo = (stereoRhitGPos.x()-stereoShitGPos.x())/*/sqrt(stereoRhitGPEr.cxx())*/;
873 // // double pullGPY_rs_stereo = (stereoRhitGPos.y()-stereoShitGPos.y())/*/sqrt(stereoRhitGPEr.cyy())*/;
874 // // double pullGPZ_rs_stereo = (stereoRhitGPos.z()-stereoShitGPos.z())/*/sqrt(stereoRhitGPEr.czz())*/;
875 
876 // title.str("");
877 // title << "PullGP_X_" << subdetId << "-" << layerId << "_rs_stereo";
878 // hPullGP_X_rs_stereo[title.str()]->Fill( pullGPX_rs_stereo );
879 // title.str("");
880 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_rs_stereo";
881 // hPullGP_Y_rs_stereo[title.str()]->Fill( pullGPY_rs_stereo );
882 // title.str("");
883 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_rs_stereo";
884 // hPullGP_Z_rs_stereo[title.str()]->Fill( pullGPZ_rs_stereo );
885 
886 // double pullGPX_tr_stereo = (stereoTsosGPos.x()-stereoRhitGPos.x())/sqrt(stereoTsosGPEr.cxx()+stereoRhitGPEr.cxx());
887 // double pullGPY_tr_stereo = (stereoTsosGPos.y()-stereoRhitGPos.y())/sqrt(stereoTsosGPEr.cyy()+stereoRhitGPEr.cyy());
888 // double pullGPZ_tr_stereo = (stereoTsosGPos.z()-stereoRhitGPos.z())/sqrt(stereoTsosGPEr.czz()+stereoRhitGPEr.czz());
889 // // double pullGPX_tr_stereo = (stereoTsosGPos.x()-stereoRhitGPos.x())/*/sqrt(stereoTsosGPEr.cxx()+stereoRhitGPEr.cxx())*/;
890 // // double pullGPY_tr_stereo = (stereoTsosGPos.y()-stereoRhitGPos.y())/*/sqrt(stereoTsosGPEr.cyy()+stereoRhitGPEr.cyy())*/;
891 // // double pullGPZ_tr_stereo = (stereoTsosGPos.z()-stereoRhitGPos.z())/*/sqrt(stereoTsosGPEr.czz()+stereoRhitGPEr.czz())*/;
892 
893 // title.str("");
894 // title << "PullGP_X_" << subdetId << "-" << layerId << "_tr_stereo";
895 // hPullGP_X_tr_stereo[title.str()]->Fill( pullGPX_tr_stereo );
896 // title.str("");
897 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_tr_stereo";
898 // hPullGP_Y_tr_stereo[title.str()]->Fill( pullGPY_tr_stereo );
899 // title.str("");
900 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_tr_stereo";
901 // hPullGP_Z_tr_stereo[title.str()]->Fill( pullGPZ_tr_stereo );
902 
903 // double pullGPX_ts_stereo = (stereoTsosGPos.x()-stereoShitGPos.x())/sqrt(stereoTsosGPEr.cxx());
904 // double pullGPY_ts_stereo = (stereoTsosGPos.y()-stereoShitGPos.y())/sqrt(stereoTsosGPEr.cyy());
905 // double pullGPZ_ts_stereo = (stereoTsosGPos.z()-stereoShitGPos.z())/sqrt(stereoTsosGPEr.czz());
906 // // double pullGPX_ts_stereo = (stereoTsosGPos.x()-stereoShitGPos.x())/*/sqrt(stereoTsosGPEr.cxx())*/;
907 // // double pullGPY_ts_stereo = (stereoTsosGPos.y()-stereoShitGPos.y())/*/sqrt(stereoTsosGPEr.cyy())*/;
908 // // double pullGPZ_ts_stereo = (stereoTsosGPos.z()-stereoShitGPos.z())/*/sqrt(stereoTsosGPEr.czz())*/;
909 
910 // title.str("");
911 // title << "PullGP_X_" << subdetId << "-" << layerId << "_ts_stereo";
912 // hPullGP_X_ts_stereo[title.str()]->Fill( pullGPX_ts_stereo );
913 // title.str("");
914 // title << "PullGP_Y_" << subdetId << "-" << layerId << "_ts_stereo";
915 // hPullGP_Y_ts_stereo[title.str()]->Fill( pullGPY_ts_stereo );
916 // title.str("");
917 // title << "PullGP_Z_" << subdetId << "-" << layerId << "_ts_stereo";
918 // hPullGP_Z_ts_stereo[title.str()]->Fill( pullGPZ_ts_stereo );
919 
920 // double pullGMX_ts_stereo = (stereoTsosGMom.x()-stereoShitGMom.x())/sqrt(stereoTsosGMEr.cxx());
921 // double pullGMY_ts_stereo = (stereoTsosGMom.y()-stereoShitGMom.y())/sqrt(stereoTsosGMEr.cyy());
922 // double pullGMZ_ts_stereo = (stereoTsosGMom.z()-stereoShitGMom.z())/sqrt(stereoTsosGMEr.czz());
923 // // double pullGMX_ts_stereo = (stereoTsosGMom.x()-stereoShitGMom.x())/*/sqrt(stereoTsosGMEr.cxx())*/;
924 // // double pullGMY_ts_stereo = (stereoTsosGMom.y()-stereoShitGMom.y())/*/sqrt(stereoTsosGMEr.cyy())*/;
925 // // double pullGMZ_ts_stereo = (stereoTsosGMom.z()-stereoShitGMom.z())/*/sqrt(stereoTsosGMEr.czz())*/;
926 
927 // title.str("");
928 // title << "PullGM_X_" << subdetId << "-" << layerId << "_ts_stereo";
929 // hPullGM_X_ts_stereo[title.str()]->Fill( pullGMX_ts_stereo );
930 // title.str("");
931 // title << "PullGM_Y_" << subdetId << "-" << layerId << "_ts_stereo";
932 // hPullGM_Y_ts_stereo[title.str()]->Fill( pullGMY_ts_stereo );
933 // title.str("");
934 // title << "PullGM_Z_" << subdetId << "-" << layerId << "_ts_stereo";
935 // hPullGM_Z_ts_stereo[title.str()]->Fill( pullGMZ_ts_stereo );
936 // }
937 // }
938 // }
939 // delete hitAssociator;
940 // LogTrace("TestHits") << "end of event" << std::endl;
941 // }
942 
944  //file->Write();
945  TDirectory * chi2i = file->mkdir("Chi2_Increment");
946 
947  TDirectory * gp_ts = file->mkdir("GP_TSOS-SimHit");
948  TDirectory * gm_ts = file->mkdir("GM_TSOS-SimHit");
949  TDirectory * gp_tr = file->mkdir("GP_TSOS-RecHit");
950  TDirectory * gp_rs = file->mkdir("GP_RecHit-SimHit");
951 
952  TDirectory * gp_tsx = gp_ts->mkdir("X");
953  TDirectory * gp_tsy = gp_ts->mkdir("Y");
954  TDirectory * gp_tsz = gp_ts->mkdir("Z");
955  TDirectory * gm_tsx = gm_ts->mkdir("X");
956  TDirectory * gm_tsy = gm_ts->mkdir("Y");
957  TDirectory * gm_tsz = gm_ts->mkdir("Z");
958  TDirectory * gp_trx = gp_tr->mkdir("X");
959  TDirectory * gp_try = gp_tr->mkdir("Y");
960  TDirectory * gp_trz = gp_tr->mkdir("Z");
961  TDirectory * gp_rsx = gp_rs->mkdir("X");
962  TDirectory * gp_rsy = gp_rs->mkdir("Y");
963  TDirectory * gp_rsz = gp_rs->mkdir("Z");
964 
965  TDirectory * gp_tsx_mono = gp_ts->mkdir("MONOX");
966  TDirectory * gp_tsy_mono = gp_ts->mkdir("MONOY");
967  TDirectory * gp_tsz_mono = gp_ts->mkdir("MONOZ");
968  TDirectory * gm_tsx_mono = gm_ts->mkdir("MONOX");
969  TDirectory * gm_tsy_mono = gm_ts->mkdir("MONOY");
970  TDirectory * gm_tsz_mono = gm_ts->mkdir("MONOZ");
971  TDirectory * gp_trx_mono = gp_tr->mkdir("MONOX");
972  TDirectory * gp_try_mono = gp_tr->mkdir("MONOY");
973  TDirectory * gp_trz_mono = gp_tr->mkdir("MONOZ");
974  TDirectory * gp_rsx_mono = gp_rs->mkdir("MONOX");
975  TDirectory * gp_rsy_mono = gp_rs->mkdir("MONOY");
976  TDirectory * gp_rsz_mono = gp_rs->mkdir("MONOZ");
977 
978  TDirectory * gp_tsx_stereo = gp_ts->mkdir("STEREOX");
979  TDirectory * gp_tsy_stereo = gp_ts->mkdir("STEREOY");
980  TDirectory * gp_tsz_stereo = gp_ts->mkdir("STEREOZ");
981  TDirectory * gm_tsx_stereo = gm_ts->mkdir("STEREOX");
982  TDirectory * gm_tsy_stereo = gm_ts->mkdir("STEREOY");
983  TDirectory * gm_tsz_stereo = gm_ts->mkdir("STEREOZ");
984  TDirectory * gp_trx_stereo = gp_tr->mkdir("STEREOX");
985  TDirectory * gp_try_stereo = gp_tr->mkdir("STEREOY");
986  TDirectory * gp_trz_stereo = gp_tr->mkdir("STEREOZ");
987  TDirectory * gp_rsx_stereo = gp_rs->mkdir("STEREOX");
988  TDirectory * gp_rsy_stereo = gp_rs->mkdir("STEREOY");
989  TDirectory * gp_rsz_stereo = gp_rs->mkdir("STEREOZ");
990 
991  chi2i->cd();
992  hTotChi2Increment->Write();
993  hProcess_vs_Chi2->Write();
994  hClsize_vs_Chi2->Write();
995  for (int i=0; i!=6; i++)
996  for (int j=0; j!=9; j++){
997  if (i==0 && j>2) break;
998  if (i==1 && j>1) break;
999  if (i==2 && j>3) break;
1000  if (i==3 && j>2) break;
1001  if (i==4 && j>5) break;
1002  if (i==5 && j>8) break;
1003  chi2i->cd();
1004  title.str("");
1005  title << "Chi2Increment_" << i+1 << "-" << j+1;
1006  hChi2Increment[title.str()]->Write();
1007 
1008  gp_ts->cd();
1009  gp_tsx->cd();
1010  title.str("");
1011  title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts";
1012  hPullGP_X_ts[title.str()]->Write();
1013  gp_tsy->cd();
1014  title.str("");
1015  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts";
1016  hPullGP_Y_ts[title.str()]->Write();
1017  gp_tsz->cd();
1018  title.str("");
1019  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts";
1020  hPullGP_Z_ts[title.str()]->Write();
1021 
1022  gm_ts->cd();
1023  gm_tsx->cd();
1024  title.str("");
1025  title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts";
1026  hPullGM_X_ts[title.str()]->Write();
1027  gm_tsy->cd();
1028  title.str("");
1029  title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts";
1030  hPullGM_Y_ts[title.str()]->Write();
1031  gm_tsz->cd();
1032  title.str("");
1033  title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts";
1034  hPullGM_Z_ts[title.str()]->Write();
1035 
1036  gp_tr->cd();
1037  gp_trx->cd();
1038  title.str("");
1039  title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr";
1040  hPullGP_X_tr[title.str()]->Write();
1041  gp_try->cd();
1042  title.str("");
1043  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr";
1044  hPullGP_Y_tr[title.str()]->Write();
1045  gp_trz->cd();
1046  title.str("");
1047  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr";
1048  hPullGP_Z_tr[title.str()]->Write();
1049 
1050  gp_rs->cd();
1051  gp_rsx->cd();
1052  title.str("");
1053  title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs";
1054  hPullGP_X_rs[title.str()]->Write();
1055  gp_rsy->cd();
1056  title.str("");
1057  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs";
1058  hPullGP_Y_rs[title.str()]->Write();
1059  gp_rsz->cd();
1060  title.str("");
1061  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs";
1062  hPullGP_Z_rs[title.str()]->Write();
1063 
1064  if ( ((i==2||i==4)&&(j==0||j==1)) || (i==3||i==5) ){
1065  //mono
1066  gp_ts->cd();
1067  gp_tsx_mono->cd();
1068  title.str("");
1069  title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_mono";
1070  hPullGP_X_ts_mono[title.str()]->Write();
1071  gp_tsy_mono->cd();
1072  title.str("");
1073  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_mono";
1074  hPullGP_Y_ts_mono[title.str()]->Write();
1075  gp_tsz_mono->cd();
1076  title.str("");
1077  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_mono";
1078  hPullGP_Z_ts_mono[title.str()]->Write();
1079 
1080  gm_ts->cd();
1081  gm_tsx_mono->cd();
1082  title.str("");
1083  title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_mono";
1084  hPullGM_X_ts_mono[title.str()]->Write();
1085  gm_tsy_mono->cd();
1086  title.str("");
1087  title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_mono";
1088  hPullGM_Y_ts_mono[title.str()]->Write();
1089  gm_tsz_mono->cd();
1090  title.str("");
1091  title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_mono";
1092  hPullGM_Z_ts_mono[title.str()]->Write();
1093 
1094  gp_tr->cd();
1095  gp_trx_mono->cd();
1096  title.str("");
1097  title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_mono";
1098  hPullGP_X_tr_mono[title.str()]->Write();
1099  gp_try_mono->cd();
1100  title.str("");
1101  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_mono";
1102  hPullGP_Y_tr_mono[title.str()]->Write();
1103  gp_trz_mono->cd();
1104  title.str("");
1105  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_mono";
1106  hPullGP_Z_tr_mono[title.str()]->Write();
1107 
1108  gp_rs->cd();
1109  gp_rsx_mono->cd();
1110  title.str("");
1111  title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_mono";
1112  hPullGP_X_rs_mono[title.str()]->Write();
1113  gp_rsy_mono->cd();
1114  title.str("");
1115  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_mono";
1116  hPullGP_Y_rs_mono[title.str()]->Write();
1117  gp_rsz_mono->cd();
1118  title.str("");
1119  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_mono";
1120  hPullGP_Z_rs_mono[title.str()]->Write();
1121 
1122  //stereo
1123  gp_ts->cd();
1124  gp_tsx_stereo->cd();
1125  title.str("");
1126  title << "PullGP_X_" << i+1 << "-" << j+1 << "_ts_stereo";
1127  hPullGP_X_ts_stereo[title.str()]->Write();
1128  gp_tsy_stereo->cd();
1129  title.str("");
1130  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
1131  hPullGP_Y_ts_stereo[title.str()]->Write();
1132  gp_tsz_stereo->cd();
1133  title.str("");
1134  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
1135  hPullGP_Z_ts_stereo[title.str()]->Write();
1136 
1137  gm_ts->cd();
1138  gm_tsx_stereo->cd();
1139  title.str("");
1140  title << "PullGM_X_" << i+1 << "-" << j+1 << "_ts_stereo";
1141  hPullGM_X_ts_stereo[title.str()]->Write();
1142  gm_tsy_stereo->cd();
1143  title.str("");
1144  title << "PullGM_Y_" << i+1 << "-" << j+1 << "_ts_stereo";
1145  hPullGM_Y_ts_stereo[title.str()]->Write();
1146  gm_tsz_stereo->cd();
1147  title.str("");
1148  title << "PullGM_Z_" << i+1 << "-" << j+1 << "_ts_stereo";
1149  hPullGM_Z_ts_stereo[title.str()]->Write();
1150 
1151  gp_tr->cd();
1152  gp_trx_stereo->cd();
1153  title.str("");
1154  title << "PullGP_X_" << i+1 << "-" << j+1 << "_tr_stereo";
1155  hPullGP_X_tr_stereo[title.str()]->Write();
1156  gp_try_stereo->cd();
1157  title.str("");
1158  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_tr_stereo";
1159  hPullGP_Y_tr_stereo[title.str()]->Write();
1160  gp_trz_stereo->cd();
1161  title.str("");
1162  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_tr_stereo";
1163  hPullGP_Z_tr_stereo[title.str()]->Write();
1164 
1165  gp_rs->cd();
1166  gp_rsx_stereo->cd();
1167  title.str("");
1168  title << "PullGP_X_" << i+1 << "-" << j+1 << "_rs_stereo";
1169  hPullGP_X_rs_stereo[title.str()]->Write();
1170  gp_rsy_stereo->cd();
1171  title.str("");
1172  title << "PullGP_Y_" << i+1 << "-" << j+1 << "_rs_stereo";
1173  hPullGP_Y_rs_stereo[title.str()]->Write();
1174  gp_rsz_stereo->cd();
1175  title.str("");
1176  title << "PullGP_Z_" << i+1 << "-" << j+1 << "_rs_stereo";
1177  hPullGP_Z_rs_stereo[title.str()]->Write();
1178  }
1179  }
1180 
1181  file->Close();
1182 }
1183 
1184 //needed by to do the residual for matched hits
1185 //taken from SiStripTrackingRecHitsValid.cc
1186 std::pair<LocalPoint,LocalVector>
1187 TestHits::projectHit( const PSimHit& hit, const StripGeomDetUnit* stripDet, const BoundPlane& plane)
1188 {
1189  const StripTopology& topol = stripDet->specificTopology();
1190  GlobalPoint globalpos= stripDet->surface().toGlobal(hit.localPosition());
1191  LocalPoint localHit = plane.toLocal(globalpos);
1192  //track direction
1193  LocalVector locdir=hit.localDirection();
1194  //rotate track in new frame
1195 
1196  GlobalVector globaldir= stripDet->surface().toGlobal(locdir);
1197  LocalVector dir=plane.toLocal(globaldir);
1198  float scale = -localHit.z() / dir.z();
1199 
1200  LocalPoint projectedPos = localHit + scale*dir;
1201 
1202  float selfAngle = topol.stripAngle( topol.strip( hit.localPosition()));
1203 
1204  LocalVector stripDir( sin(selfAngle), cos(selfAngle), 0); // vector along strip in hit frame
1205 
1206  LocalVector localStripDir( plane.toLocal(stripDet->surface().toGlobal( stripDir)));
1207 
1208  return std::pair<LocalPoint,LocalVector>( projectedPos, localStripDir);
1209 }
1210 
1213 
edm::Handle< TrackCandidateCollection > theTCCollection
Definition: TestHits.h:77
dbl * delta
Definition: mlp_gen.cc:36
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:78
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
std::pair< LocalPoint, LocalVector > projectHit(const PSimHit &, const StripGeomDetUnit *, const BoundPlane &)
Definition: TestHits.cc:1187
virtual void beginRun(edm::Run &run, const edm::EventSetup &)
Definition: TestHits.cc:41
std::map< std::string, TH1F * > hPullGP_Y_tr_mono
Definition: TestHits.h:107
std::map< std::string, TH1F * > hPullGP_X_rs_mono
Definition: TestHits.h:103
std::map< std::string, TH1F * > hPullGP_Z_tr_stereo
Definition: TestHits.h:121
TH1F * hTotChi2Increment
Definition: TestHits.h:94
virtual float stripAngle(float strip) const =0
range recHits() const
edm::ESHandle< TransientTrackingRecHitBuilder > theBuilder
Definition: TestHits.h:75
std::map< std::string, TH1F * > hPullGP_Z_ts_mono
Definition: TestHits.h:99
LocalVector momentumAtEntry() const
The momentum of the track that produced the hit, at entry point.
Definition: PSimHit.h:47
std::map< std::string, TH1F * > hPullGM_X_ts_stereo
Definition: TestHits.h:113
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
std::map< std::string, TH1F * > hPullGM_X_ts_mono
Definition: TestHits.h:100
std::string builderName
Definition: TestHits.h:68
double mineta
Definition: TestHits.h:65
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
TrajectorySeed const & seed() const
T y() const
Definition: PV3DBase.h:57
GlobalPoint globalPosition() const
std::map< std::string, TH1F * > hPullGP_Y_ts
Definition: TestHits.h:82
std::map< std::string, TH1F * > hChi2Increment
Definition: TestHits.h:93
std::pair< const_iterator, const_iterator > range
TrajectoryStateOnSurface TSOS
std::map< std::string, TH1F * > hPullGP_Y_ts_stereo
Definition: TestHits.h:111
std::map< std::string, TH1F * > hPullGP_Z_rs
Definition: TestHits.h:89
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
edm::ESHandle< Propagator > thePropagator
Definition: TestHits.h:74
std::map< std::string, TH1F * > hPullGP_Y_rs
Definition: TestHits.h:88
std::vector< ConstRecHitPointer > RecHitContainer
std::map< std::string, TH1F * > hPullGP_X_tr_stereo
Definition: TestHits.h:119
virtual float strip(const LocalPoint &) const =0
std::map< std::string, TH1F * > hPullGP_Z_rs_stereo
Definition: TestHits.h:118
PTrajectoryStateOnDet const & trajectoryStateOnDet() const
TrackerHitAssociator * hitAssociator
Definition: TestHits.h:63
int iEvent
Definition: GenABIO.cc:243
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
std::map< std::string, TH1F * > hPullGP_Y_tr
Definition: TestHits.h:91
Local3DPoint localPosition() const
Definition: PSimHit.h:44
std::string propagatorName
Definition: TestHits.h:67
const CartesianTrajectoryError & cartesianError() const
T sqrt(T t)
Definition: SSEVec.h:28
LocalPoint toLocal(const GlobalPoint &gp) const
std::map< std::string, TH1F * > hPullGP_X_rs_stereo
Definition: TestHits.h:116
T z() const
Definition: PV3DBase.h:58
tuple result
Definition: query.py:137
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
int j
Definition: DBlmapReader.cc:9
virtual void endJob()
Definition: TestHits.cc:943
std::map< std::string, TH1F * > hPullGP_Y_tr_stereo
Definition: TestHits.h:120
TransientTrackingRecHit::ConstRecHitPointer CTTRHp
Definition: CkfDebugger.h:44
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field) const
std::map< std::string, TH1F * > hPullGP_Y_rs_mono
Definition: TestHits.h:104
std::map< std::string, TH1F * > hPullGM_Z_ts
Definition: TestHits.h:86
std::map< std::string, TH1F * > hPullGM_Y_ts_mono
Definition: TestHits.h:101
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
std::map< std::string, TH1F * > hPullGP_Z_rs_mono
Definition: TestHits.h:105
#define LogTrace(id)
std::map< std::string, TH1F * > hPullGP_X_ts_stereo
Definition: TestHits.h:110
std::map< std::string, TH1F * > hPullGP_Y_rs_stereo
Definition: TestHits.h:117
const AlgebraicSymMatrix66 & matrix() const
GlobalError position() const
Position error submatrix.
edm::ESHandle< TrackerGeometry > theG
Definition: TestHits.h:72
edm::ESHandle< TrajectoryFitter > fit
Definition: TestHits.h:76
LocalVector localDirection() const
Obsolete. Same as momentumAtEntry().unit(), for backward compatibility.
Definition: PSimHit.h:52
Definition: DetId.h:20
std::map< std::string, TH1F * > hPullGM_Z_ts_stereo
Definition: TestHits.h:115
~TestHits()
Definition: TestHits.cc:39
TH2F * hProcess_vs_Chi2
Definition: TestHits.h:95
virtual void analyze(const edm::Event &, const edm::EventSetup &)
Definition: TestHits.cc:192
const T & get() const
Definition: EventSetup.h:55
const unsigned int detId() const
T const * product() const
Definition: ESHandle.h:62
std::map< std::string, TH1F * > hPullGP_Z_tr
Definition: TestHits.h:92
std::map< std::string, TH1F * > hPullGP_Y_ts_mono
Definition: TestHits.h:98
unsigned short processType() const
Definition: PSimHit.h:118
char state
Definition: procUtils.cc:75
std::map< std::string, TH1F * > hPullGM_Y_ts_stereo
Definition: TestHits.h:114
edm::ESHandle< MagneticField > theMF
Definition: TestHits.h:73
const edm::ParameterSet conf_
Definition: TestHits.h:62
std::map< std::string, TH1F * > hPullGP_X_tr_mono
Definition: TestHits.h:106
TH2F * hClsize_vs_Chi2
Definition: TestHits.h:95
TFile * file
Definition: TestHits.h:79
GlobalVector globalMomentum() const
std::map< std::string, TH1F * > hPullGM_X_ts
Definition: TestHits.h:84
std::map< std::string, TH1F * > hPullGP_X_ts
Definition: TestHits.h:81
std::vector< PSimHit > associateHit(const TrackingRecHit &thit)
std::string fname
Definition: TestHits.h:70
std::string srcName
Definition: TestHits.h:69
std::map< std::string, TH1F * > hPullGP_Z_ts
Definition: TestHits.h:83
dbl *** dir
Definition: mlp_gen.cc:35
TestHits(const edm::ParameterSet &)
Definition: TestHits.cc:28
std::map< std::string, TH1F * > hPullGP_Z_tr_mono
Definition: TestHits.h:108
std::map< std::string, TH1F * > hPullGP_X_ts_mono
Definition: TestHits.h:97
T x() const
Definition: PV3DBase.h:56
const PositionType & position() const
std::map< std::string, TH1F * > hPullGM_Z_ts_mono
Definition: TestHits.h:102
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
std::map< std::string, TH1F * > hPullGM_Y_ts
Definition: TestHits.h:85
std::map< std::string, TH1F * > hPullGP_X_tr
Definition: TestHits.h:90
Definition: Run.h:31
std::stringstream title
Definition: TestHits.h:80
Our base class.
Definition: SiPixelRecHit.h:27
double maxeta
Definition: TestHits.h:65
std::map< std::string, TH1F * > hPullGP_Z_ts_stereo
Definition: TestHits.h:112
std::map< std::string, TH1F * > hPullGP_X_rs
Definition: TestHits.h:87