CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripMonitorTrack.cc
Go to the documentation of this file.
2 
5 
17 
19 
21 #include "TMath.h"
22 
24  dbe(edm::Service<DQMStore>().operator->()),
25  conf_(conf),
26  tracksCollection_in_EventTree(true),
27  firstEvent(-1),
28  genTriggerEventFlag_(new GenericTriggerEventFlag(conf, consumesCollector()))
29 {
30  Cluster_src_ = conf.getParameter<edm::InputTag>("Cluster_src");
31  Mod_On_ = conf.getParameter<bool>("Mod_On");
32  Trend_On_ = conf.getParameter<bool>("Trend_On");
33  flag_ring = conf.getParameter<bool>("RingFlag_On");
34  TkHistoMap_On_ = conf.getParameter<bool>("TkHistoMap_On");
35 
36  TrackProducer_ = conf_.getParameter<std::string>("TrackProducer");
37  TrackLabel_ = conf_.getParameter<std::string>("TrackLabel");
38 
39  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
40 
41  clusterToken_ = consumes<edmNew::DetSetVector<SiStripCluster> >(Cluster_src_);
42  trackToken_ = consumes<reco::TrackCollection>(edm::InputTag(TrackProducer_,TrackLabel_) );
43  trackTrajToken_ = consumes<TrajTrackAssociationCollection>(edm::InputTag(TrackProducer_,TrackLabel_) );
44 
45  // cluster quality conditions
46  edm::ParameterSet cluster_condition = conf_.getParameter<edm::ParameterSet>("ClusterConditions");
47  applyClusterQuality_ = cluster_condition.getParameter<bool>("On");
48  sToNLowerLimit_ = cluster_condition.getParameter<double>("minStoN");
49  sToNUpperLimit_ = cluster_condition.getParameter<double>("maxStoN");
50  widthLowerLimit_ = cluster_condition.getParameter<double>("minWidth");
51  widthUpperLimit_ = cluster_condition.getParameter<double>("maxWidth");
52 
53 
54  // Create DCS Status
55  bool checkDCS = conf_.getParameter<bool>("UseDCSFiltering");
56  if (checkDCS) dcsStatus_ = new SiStripDCSStatus(consumesCollector());
57  else dcsStatus_ = 0;
58 }
59 
60 //------------------------------------------------------------------------
62  if (dcsStatus_) delete dcsStatus_;
64 }
65 
66 //------------------------------------------------------------------------
68 {
69  //get geom
71  LogDebug("SiStripMonitorTrack") << "[SiStripMonitorTrack::beginRun] There are "<<tkgeom->detUnits().size() <<" detectors instantiated in the geometry" << std::endl;
73 
74 
75  // Initialize the GenericTriggerEventFlag
77 }
78 
80 {
81  //Retrieve tracker topology from geometry
83  es.get<IdealGeometryRecord>().get(tTopoHandle);
84  const TrackerTopology* const tTopo = tTopoHandle.product();
85  book(ibooker , tTopo);
86 }
87 
88 //------------------------------------------------------------------------
90 {
91  if(conf_.getParameter<bool>("OutputMEsInRootFile")){
92  //dbe->showDirStructure();
93  dbe->save(conf_.getParameter<std::string>("OutputFileName"));
94  }
95 }
96 
97 // ------------ method called to produce the data ------------
99 {
100  // Filter out events if DCS checking is requested
101  if (dcsStatus_ && !dcsStatus_->getStatus(e,es)) return;
102 
103  // Filter out events if Trigger Filtering is requested
104  if (genTriggerEventFlag_->on()&& ! genTriggerEventFlag_->accept( e, es) ) return;
105 
106  //initialization of global quantities
107  LogDebug("SiStripMonitorTrack") << "[SiStripMonitorTrack::analyse] " << "Run " << e.id().run() << " Event " << e.id().event() << std::endl;
108  runNb = e.id().run();
109  eventNb = e.id().event();
110  vPSiStripCluster.clear();
111 
112  iOrbitSec = e.orbitNumber()/11223.0;
113 
114  // initialise # of clusters
115  for (std::map<std::string, SubDetMEs>::iterator iSubDet = SubDetMEsMap.begin();
116  iSubDet != SubDetMEsMap.end(); iSubDet++) {
117  iSubDet->second.totNClustersOnTrack = 0;
118  iSubDet->second.totNClustersOffTrack = 0;
119  }
120 
121  //Perform track study
122  trackStudy(e, es);
123 
124  //Perform Cluster Study (irrespectively to tracks)
125 
126  AllClusters(e, es); //analyzes the off Track Clusters
127 
128  //Summary Counts of clusters
129  std::map<std::string, MonitorElement*>::iterator iME;
130  std::map<std::string, LayerMEs>::iterator iLayerME;
131 
132  for (std::map<std::string, SubDetMEs>::iterator iSubDet = SubDetMEsMap.begin();
133  iSubDet != SubDetMEsMap.end(); iSubDet++) {
134  SubDetMEs subdet_mes = iSubDet->second;
135  if (subdet_mes.totNClustersOnTrack > 0) {
136  fillME(subdet_mes.nClustersOnTrack, subdet_mes.totNClustersOnTrack);
137  }
138  fillME(subdet_mes.nClustersOffTrack, subdet_mes.totNClustersOffTrack);
139  if (Trend_On_) {
142  }
143  }
144 }
145 
146 //------------------------------------------------------------------------
148 {
149 
150  SiStripFolderOrganizer folder_organizer;
151  folder_organizer.setSiStripFolderName(topFolderName_);
152  //******** TkHistoMaps
153  if (TkHistoMap_On_) {
154  tkhisto_StoNCorrOnTrack = new TkHistoMap(ibooker , topFolderName_ ,"TkHMap_StoNCorrOnTrack", 0.0,true);
155  tkhisto_NumOnTrack = new TkHistoMap(ibooker , topFolderName_, "TkHMap_NumberOfOnTrackCluster", 0.0,true);
156  tkhisto_NumOffTrack = new TkHistoMap(ibooker , topFolderName_, "TkHMap_NumberOfOfffTrackCluster",0.0,true);
157  }
158  //******** TkHistoMaps
159 
160  std::vector<uint32_t> vdetId_;
161  SiStripDetCabling_->addActiveDetectorsRawIds(vdetId_);
162  //Histos for each detector, layer and module
163  for (std::vector<uint32_t>::const_iterator detid_iter=vdetId_.begin();detid_iter!=vdetId_.end();detid_iter++){ //loop on all the active detid
164  uint32_t detid = *detid_iter;
165 
166  if (detid < 1){
167  edm::LogError("SiStripMonitorTrack")<< "[" <<__PRETTY_FUNCTION__ << "] invalid detid " << detid<< std::endl;
168  continue;
169  }
170 
171 
173 
174  // book Layer and RING plots
175  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detid,tTopo,flag_ring);
176 
177  SiStripHistoId hidmanager;
178  std::string layer_id = hidmanager.getSubdetid(detid, tTopo, flag_ring);
179  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(layer_id);
180  if(iLayerME==LayerMEsMap.end()){
181  folder_organizer.setLayerFolder(detid, tTopo, det_layer_pair.second, flag_ring);
182  bookLayerMEs(ibooker , detid, layer_id);
183  }
184  // book sub-detector plots
185  std::pair<std::string,std::string> sdet_pair = folder_organizer.getSubDetFolderAndTag(detid, tTopo);
186  if (SubDetMEsMap.find(sdet_pair.second) == SubDetMEsMap.end()){
187  ibooker.setCurrentFolder(sdet_pair.first);
188  bookSubDetMEs(ibooker , sdet_pair.second);
189  }
190  // book module plots
191  if(Mod_On_) {
192  folder_organizer.setDetectorFolder(detid,tTopo);
193  bookModMEs(ibooker , *detid_iter);
194  }
195  }//end loop on detectors detid
196 }
197 
198 //--------------------------------------------------------------------------------
199 void SiStripMonitorTrack::bookModMEs(DQMStore::IBooker & ibooker , const uint32_t & id)//Histograms at MODULE level
200 {
201  std::string name = "det";
202  SiStripHistoId hidmanager;
203  std::string hid = hidmanager.createHistoId("",name,id);
204  std::map<std::string, ModMEs>::iterator iModME = ModMEsMap.find(hid);
205  if(iModME==ModMEsMap.end()){
206  ModMEs theModMEs;
207  theModMEs.ClusterStoNCorr = 0;
208  theModMEs.ClusterCharge = 0;
209  theModMEs.ClusterChargeCorr = 0;
210  theModMEs.ClusterWidth = 0;
211  theModMEs.ClusterPos = 0;
212  theModMEs.ClusterPGV = 0;
213 
214  // Cluster Width
215  theModMEs.ClusterWidth=bookME1D(ibooker , "TH1ClusterWidth", hidmanager.createHistoId("ClusterWidth_OnTrack",name,id).c_str());
216  ibooker.tag(theModMEs.ClusterWidth,id);
217  // Cluster Charge
218  theModMEs.ClusterCharge=bookME1D(ibooker , "TH1ClusterCharge", hidmanager.createHistoId("ClusterCharge_OnTrack",name,id).c_str());
219  ibooker.tag(theModMEs.ClusterCharge,id);
220  // Cluster Charge Corrected
221  theModMEs.ClusterChargeCorr=bookME1D(ibooker , "TH1ClusterChargeCorr", hidmanager.createHistoId("ClusterChargeCorr_OnTrack",name,id).c_str());
222  ibooker.tag(theModMEs.ClusterChargeCorr,id);
223  // Cluster StoN Corrected
224  theModMEs.ClusterStoNCorr=bookME1D(ibooker , "TH1ClusterStoNCorrMod", hidmanager.createHistoId("ClusterStoNCorr_OnTrack",name,id).c_str());
225  ibooker.tag(theModMEs.ClusterStoNCorr,id);
226  // Cluster Position
227  short total_nr_strips = SiStripDetCabling_->nApvPairs(id) * 2 * 128;
228  theModMEs.ClusterPos=ibooker.book1D(hidmanager.createHistoId("ClusterPosition_OnTrack",name,id).c_str(),hidmanager.createHistoId("ClusterPosition_OnTrack",name,id).c_str(),total_nr_strips,0.5,total_nr_strips+0.5);
229  ibooker.tag(theModMEs.ClusterPos,id);
230  // Cluster PGV
231  theModMEs.ClusterPGV=bookMEProfile(ibooker , "TProfileClusterPGV", hidmanager.createHistoId("PGV_OnTrack",name,id).c_str());
232  ibooker.tag(theModMEs.ClusterPGV,id);
233 
234  ModMEsMap[hid]=theModMEs;
235  }
236 }
237 //
238 // -- Book Layer Level Histograms and Trend plots
239 //
240 void SiStripMonitorTrack::bookLayerMEs(DQMStore::IBooker & ibooker , const uint32_t& mod_id, std::string& layer_id)
241 {
242  std::string name = "layer";
243  std::string hname;
244  SiStripHistoId hidmanager;
245 
246  LayerMEs theLayerMEs;
247  theLayerMEs.ClusterStoNCorrOnTrack = 0;
248  theLayerMEs.ClusterChargeCorrOnTrack = 0;
249  theLayerMEs.ClusterChargeOnTrack = 0;
250  theLayerMEs.ClusterChargeOffTrack = 0;
251  theLayerMEs.ClusterNoiseOnTrack = 0;
252  theLayerMEs.ClusterNoiseOffTrack = 0;
253  theLayerMEs.ClusterWidthOnTrack = 0;
254  theLayerMEs.ClusterWidthOffTrack = 0;
255  theLayerMEs.ClusterPosOnTrack = 0;
256  theLayerMEs.ClusterPosOffTrack = 0;
257 
258  // Cluster StoN Corrected
259  hname = hidmanager.createHistoLayer("Summary_ClusterStoNCorr",name,layer_id,"OnTrack");
260  theLayerMEs.ClusterStoNCorrOnTrack = bookME1D(ibooker , "TH1ClusterStoNCorr", hname.c_str());
261 
262  // Cluster Charge Corrected
263  hname = hidmanager.createHistoLayer("Summary_ClusterChargeCorr",name,layer_id,"OnTrack");
264  theLayerMEs.ClusterChargeCorrOnTrack = bookME1D(ibooker , "TH1ClusterChargeCorr", hname.c_str());
265 
266  // Cluster Charge (On and Off Track)
267  hname = hidmanager.createHistoLayer("Summary_ClusterCharge",name,layer_id,"OnTrack");
268  theLayerMEs.ClusterChargeOnTrack = bookME1D(ibooker , "TH1ClusterCharge", hname.c_str());
269 
270  hname = hidmanager.createHistoLayer("Summary_ClusterCharge",name,layer_id,"OffTrack");
271  theLayerMEs.ClusterChargeOffTrack = bookME1D(ibooker , "TH1ClusterCharge", hname.c_str());
272 
273  // Cluster Noise (On and Off Track)
274  hname = hidmanager.createHistoLayer("Summary_ClusterNoise",name,layer_id,"OnTrack");
275  theLayerMEs.ClusterNoiseOnTrack = bookME1D(ibooker , "TH1ClusterNoise", hname.c_str());
276 
277  hname = hidmanager.createHistoLayer("Summary_ClusterNoise",name,layer_id,"OffTrack");
278  theLayerMEs.ClusterNoiseOffTrack = bookME1D(ibooker , "TH1ClusterNoise", hname.c_str());
279 
280  // Cluster Width (On and Off Track)
281  hname = hidmanager.createHistoLayer("Summary_ClusterWidth",name,layer_id,"OnTrack");
282  theLayerMEs.ClusterWidthOnTrack = bookME1D(ibooker , "TH1ClusterWidth", hname.c_str());
283 
284  hname = hidmanager.createHistoLayer("Summary_ClusterWidth",name,layer_id,"OffTrack");
285  theLayerMEs.ClusterWidthOffTrack = bookME1D(ibooker , "TH1ClusterWidth", hname.c_str());
286 
287  //Cluster Position
288  short total_nr_strips = SiStripDetCabling_->nApvPairs(mod_id) * 2 * 128;
289  if (layer_id.find("TEC") != std::string::npos && !flag_ring) total_nr_strips = 3 * 2 * 128;
290 
291  hname = hidmanager.createHistoLayer("Summary_ClusterPosition",name,layer_id,"OnTrack");
292  theLayerMEs.ClusterPosOnTrack = ibooker.book1D(hname, hname, total_nr_strips, 0.5,total_nr_strips+0.5);
293 
294  hname = hidmanager.createHistoLayer("Summary_ClusterPosition",name,layer_id,"OffTrack");
295  theLayerMEs.ClusterPosOffTrack = ibooker.book1D(hname, hname, total_nr_strips, 0.5,total_nr_strips+0.5);
296 
297  //bookeeping
298  LayerMEsMap[layer_id]=theLayerMEs;
299 }
300 //
301 // -- Book Histograms at Sub-Detector Level
302 //
304 
306  subdet_tag = "__" + name;
307  std::string completeName;
308 
309  SubDetMEs theSubDetMEs;
310  theSubDetMEs.totNClustersOnTrack = 0;
311  theSubDetMEs.totNClustersOffTrack = 0;
312  theSubDetMEs.nClustersOnTrack = 0;
313  theSubDetMEs.nClustersTrendOnTrack = 0;
314  theSubDetMEs.nClustersOffTrack = 0;
315  theSubDetMEs.nClustersTrendOffTrack = 0;
316  theSubDetMEs.ClusterStoNCorrOnTrack = 0;
317  theSubDetMEs.ClusterChargeOffTrack = 0;
318  theSubDetMEs.ClusterStoNOffTrack = 0;
319 
320  // TotalNumber of Cluster OnTrack
321  completeName = "Summary_TotalNumberOfClusters_OnTrack" + subdet_tag;
322  theSubDetMEs.nClustersOnTrack = bookME1D(ibooker , "TH1nClustersOn", completeName.c_str());
323  theSubDetMEs.nClustersOnTrack->getTH1()->StatOverflows(kTRUE);
324 
325  // TotalNumber of Cluster OffTrack
326  completeName = "Summary_TotalNumberOfClusters_OffTrack" + subdet_tag;
327  theSubDetMEs.nClustersOffTrack = bookME1D(ibooker , "TH1nClustersOff", completeName.c_str());
328  theSubDetMEs.nClustersOffTrack->getTH1()->StatOverflows(kTRUE);
329 
330  // Cluster StoN On Track
331  completeName = "Summary_ClusterStoNCorr_OnTrack" + subdet_tag;
332  theSubDetMEs.ClusterStoNCorrOnTrack = bookME1D(ibooker , "TH1ClusterStoNCorr", completeName.c_str());
333 
334  // Cluster Charge Off Track
335  completeName = "Summary_ClusterCharge_OffTrack" + subdet_tag;
336  theSubDetMEs.ClusterChargeOffTrack=bookME1D(ibooker , "TH1ClusterCharge", completeName.c_str());
337 
338  // Cluster Charge StoN Off Track
339  completeName = "Summary_ClusterStoN_OffTrack" + subdet_tag;
340  theSubDetMEs.ClusterStoNOffTrack = bookME1D(ibooker , "TH1ClusterStoN", completeName.c_str());
341 
342  if(Trend_On_){
343  // TotalNumber of Cluster
344  completeName = "Trend_TotalNumberOfClusters_OnTrack" + subdet_tag;
345  theSubDetMEs.nClustersTrendOnTrack = bookMETrend(ibooker , "TH1nClustersOn", completeName.c_str());
346  completeName = "Trend_TotalNumberOfClusters_OffTrack" + subdet_tag;
347  theSubDetMEs.nClustersTrendOffTrack = bookMETrend(ibooker , "TH1nClustersOff", completeName.c_str());
348  }
349  //bookeeping
350  SubDetMEsMap[name]=theSubDetMEs;
351 }
352 //--------------------------------------------------------------------------------
353 
354 MonitorElement* SiStripMonitorTrack::bookME1D(DQMStore::IBooker & ibooker , const char* ParameterSetLabel, const char* HistoName)
355 {
356  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
357  // std::cout << "[SiStripMonitorTrack::bookME1D] pwd: " << dbe->pwd() << std::endl;
358  // std::cout << "[SiStripMonitorTrack::bookME1D] HistoName: " << HistoName << std::endl;
359  return ibooker.book1D(HistoName,HistoName,
360  Parameters.getParameter<int32_t>("Nbinx"),
361  Parameters.getParameter<double>("xmin"),
362  Parameters.getParameter<double>("xmax")
363  );
364 }
365 
366 //--------------------------------------------------------------------------------
367 MonitorElement* SiStripMonitorTrack::bookME2D(DQMStore::IBooker & ibooker , const char* ParameterSetLabel, const char* HistoName)
368 {
369  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
370  return ibooker.book2D(HistoName,HistoName,
371  Parameters.getParameter<int32_t>("Nbinx"),
372  Parameters.getParameter<double>("xmin"),
373  Parameters.getParameter<double>("xmax"),
374  Parameters.getParameter<int32_t>("Nbiny"),
375  Parameters.getParameter<double>("ymin"),
376  Parameters.getParameter<double>("ymax")
377  );
378 }
379 
380 //--------------------------------------------------------------------------------
381 MonitorElement* SiStripMonitorTrack::bookME3D(DQMStore::IBooker & ibooker , const char* ParameterSetLabel, const char* HistoName)
382 {
383  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
384  return ibooker.book3D(HistoName,HistoName,
385  Parameters.getParameter<int32_t>("Nbinx"),
386  Parameters.getParameter<double>("xmin"),
387  Parameters.getParameter<double>("xmax"),
388  Parameters.getParameter<int32_t>("Nbiny"),
389  Parameters.getParameter<double>("ymin"),
390  Parameters.getParameter<double>("ymax"),
391  Parameters.getParameter<int32_t>("Nbinz"),
392  Parameters.getParameter<double>("zmin"),
393  Parameters.getParameter<double>("zmax")
394  );
395 }
396 
397 //--------------------------------------------------------------------------------
398 MonitorElement* SiStripMonitorTrack::bookMEProfile(DQMStore::IBooker & ibooker , const char* ParameterSetLabel, const char* HistoName)
399 {
400  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
401  return ibooker.bookProfile(HistoName,HistoName,
402  Parameters.getParameter<int32_t>("Nbinx"),
403  Parameters.getParameter<double>("xmin"),
404  Parameters.getParameter<double>("xmax"),
405  Parameters.getParameter<int32_t>("Nbiny"),
406  Parameters.getParameter<double>("ymin"),
407  Parameters.getParameter<double>("ymax"),
408  "" );
409 }
410 
411 //--------------------------------------------------------------------------------
412 MonitorElement* SiStripMonitorTrack::bookMETrend(DQMStore::IBooker & ibooker , const char* ParameterSetLabel, const char* HistoName)
413 {
414  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
415  edm::ParameterSet ParametersTrend = conf_.getParameter<edm::ParameterSet>("Trending");
416  MonitorElement* me = ibooker.bookProfile(HistoName,HistoName,
417  ParametersTrend.getParameter<int32_t>("Nbins"),
418  0,
419  ParametersTrend.getParameter<int32_t>("Nbins"),
420  100, //that parameter should not be there !?
421  Parameters.getParameter<double>("xmin"),
422  Parameters.getParameter<double>("xmax"),
423  "" );
424  if (me->kind() == MonitorElement::DQM_KIND_TPROFILE) me->getTH1()->SetBit(TH1::kCanRebin);
425 
426  if(!me) return me;
427  me->setAxisTitle("Event Time in Seconds",1);
428  return me;
429 }
430 
431 //------------------------------------------------------------------------------------------
432 void SiStripMonitorTrack::trajectoryStudy(const edm::Ref<std::vector<Trajectory> > traj, reco::TrackRef trackref, const edm::EventSetup& es) {
433 
434 
435  const std::vector<TrajectoryMeasurement> & measurements = traj->measurements();
436  std::vector<TrajectoryMeasurement>::const_iterator traj_mes_iterator;
437  for(std::vector<TrajectoryMeasurement>::const_iterator traj_mes_iterator= measurements.begin();traj_mes_iterator!=measurements.end();traj_mes_iterator++){//loop on measurements
438  //trajectory local direction and position on detector
439  LocalPoint stateposition;
440  LocalVector statedirection;
441 
442  TrajectoryStateOnSurface updatedtsos=traj_mes_iterator->updatedState();
443  ConstRecHitPointer ttrh=traj_mes_iterator->recHit();
444 
445  if (!ttrh->isValid()) continue;
446 
447  const ProjectedSiStripRecHit2D* phit = dynamic_cast<const ProjectedSiStripRecHit2D*>( ttrh->hit() );
448  const SiStripMatchedRecHit2D* matchedhit = dynamic_cast<const SiStripMatchedRecHit2D*>( ttrh->hit() );
449  const SiStripRecHit2D* hit2D = dynamic_cast<const SiStripRecHit2D*>( ttrh->hit() );
450  const SiStripRecHit1D* hit1D = dynamic_cast<const SiStripRecHit1D*>( ttrh->hit() );
451  // std::cout << "[SiStripMonitorTrack::trajectoryStudy] RecHit DONE" << std::endl;
452 
453  // RecHitType type=Single;
454 
455  if(matchedhit){
456  LogTrace("SiStripMonitorTrack")<<"\nMatched recHit found"<< std::endl;
457  // type=Matched;
458 
459  GluedGeomDet * gdet=(GluedGeomDet *)tkgeom->idToDet(matchedhit->geographicalId());
460  GlobalVector gtrkdirup=gdet->toGlobal(updatedtsos.localMomentum());
461  //mono side
462  const GeomDetUnit * monodet=gdet->monoDet();
463  statedirection=monodet->toLocal(gtrkdirup);
464  SiStripRecHit2D m = matchedhit->monoHit();
465  if(statedirection.mag() != 0) RecHitInfo<SiStripRecHit2D>(&m,statedirection,trackref,es);
466  //stereo side
467  const GeomDetUnit * stereodet=gdet->stereoDet();
468  statedirection=stereodet->toLocal(gtrkdirup);
469  SiStripRecHit2D s = matchedhit->stereoHit();
470  if(statedirection.mag() != 0) RecHitInfo<SiStripRecHit2D>(&s,statedirection,trackref,es);
471  }
472  else if(phit){
473  LogTrace("SiStripMonitorTrack")<<"\nProjected recHit found"<< std::endl;
474  // type=Projected;
475  GluedGeomDet * gdet=(GluedGeomDet *)tkgeom->idToDet(phit->geographicalId());
476 
477  GlobalVector gtrkdirup=gdet->toGlobal(updatedtsos.localMomentum());
478  const SiStripRecHit2D originalhit=phit->originalHit();
479  const GeomDetUnit * det;
480  if(!StripSubdetector(originalhit.geographicalId().rawId()).stereo()){
481  //mono side
482  LogTrace("SiStripMonitorTrack")<<"\nProjected recHit found MONO"<< std::endl;
483  det=gdet->monoDet();
484  statedirection=det->toLocal(gtrkdirup);
485  if(statedirection.mag() != 0) RecHitInfo<SiStripRecHit2D>(&(originalhit),statedirection,trackref,es);
486  }
487  else{
488  LogTrace("SiStripMonitorTrack")<<"\nProjected recHit found STEREO"<< std::endl;
489  //stereo side
490  det=gdet->stereoDet();
491  statedirection=det->toLocal(gtrkdirup);
492  if(statedirection.mag() != 0) RecHitInfo<SiStripRecHit2D>(&(originalhit),statedirection,trackref,es);
493  }
494  }else if (hit2D){
495  statedirection=updatedtsos.localMomentum();
496  if(statedirection.mag() != 0) RecHitInfo<SiStripRecHit2D>(hit2D,statedirection,trackref,es);
497  } else if (hit1D) {
498  statedirection=updatedtsos.localMomentum();
499  if(statedirection.mag() != 0) RecHitInfo<SiStripRecHit1D>(hit1D,statedirection,trackref,es);
500  } else {
501  LogDebug ("SiStrioMonitorTrack")
502  << " LocalMomentum: "<<statedirection
503  << "\nLocal x-z plane angle: "<<atan2(statedirection.x(),statedirection.z());
504  }
505 
506  }
507 
508 }
509 
511 
512  // trajectory input
513  edm::Handle<TrajTrackAssociationCollection> TItkAssociatorCollection;
514  ev.getByToken(trackTrajToken_, TItkAssociatorCollection);
515  if( TItkAssociatorCollection.isValid()){
516  trackStudyFromTrajectory(TItkAssociatorCollection,es);
517  } else {
518  edm::LogError("SiStripMonitorTrack")<<"Association not found ... try w/ track collection"<<std::endl;
519 
520  // track input
521  edm::Handle<reco::TrackCollection > trackCollectionHandle;
522  ev.getByToken(trackToken_, trackCollectionHandle);//takes the track collection
523  if (!trackCollectionHandle.isValid()){
524  edm::LogError("SiStripMonitorTrack")<<"also Track Collection is not valid !! " << TrackLabel_<<std::endl;
525  return;
526  } else {
527  trackStudyFromTrack(trackCollectionHandle,es);
528  }
529  }
530 
531 }
532 
534 
535  reco::TrackCollection trackCollection = *trackCollectionHandle;
536  for (reco::TrackCollection::const_iterator track = trackCollection.begin(); track!=trackCollection.end(); ++track) {
537  }
538 
539 }
540 
542  //Perform track study
543  int i=0;
544  for(TrajTrackAssociationCollection::const_iterator it = TItkAssociatorCollection->begin();it != TItkAssociatorCollection->end(); ++it){
545  const edm::Ref<std::vector<Trajectory> > traj_iterator = it->key;
546 
547  // Trajectory Map, extract Trajectory for this track
548  reco::TrackRef trackref = it->val;
549  LogDebug("SiStripMonitorTrack")
550  << "Track number "<< i+1
551  << "\n\tmomentum: " << trackref->momentum()
552  << "\n\tPT: " << trackref->pt()
553  << "\n\tvertex: " << trackref->vertex()
554  << "\n\timpact parameter: " << trackref->d0()
555  << "\n\tcharge: " << trackref->charge()
556  << "\n\tnormalizedChi2: " << trackref->normalizedChi2()
557  <<"\n\tFrom EXTRA : "
558  <<"\n\t\touter PT "<< trackref->outerPt()<<std::endl;
559  i++;
560 
561  trajectoryStudy(traj_iterator,trackref,es);
562 
563  }
564 }
565 
566 template <class T> void SiStripMonitorTrack::RecHitInfo(const T* tkrecHit, LocalVector LV,reco::TrackRef track_ref, const edm::EventSetup& es){
567 
568  // std::cout << "[SiStripMonitorTrack::RecHitInfo] starting" << std::endl;
569 
570  if(!tkrecHit->isValid()){
571  LogTrace("SiStripMonitorTrack") <<"\t\t Invalid Hit " << std::endl;
572  return;
573  }
574 
575  const uint32_t& detid = tkrecHit->geographicalId().rawId();
577  LogTrace("SiStripMonitorTrack") << "Modules Excluded" << std::endl;
578  return;
579  }
580 
581  LogTrace("SiStripMonitorTrack")
582  <<"\n\t\tRecHit on det "<<tkrecHit->geographicalId().rawId()
583  <<"\n\t\tRecHit in LP "<<tkrecHit->localPosition()
584  <<"\n\t\tRecHit in GP "<<tkgeom->idToDet(tkrecHit->geographicalId())->surface().toGlobal(tkrecHit->localPosition())
585  <<"\n\t\tRecHit trackLocal vector "<<LV.x() << " " << LV.y() << " " << LV.z() <<std::endl;
586 
587 
588  //Retrieve tracker topology from geometry
589  edm::ESHandle<TrackerTopology> tTopoHandle;
590  es.get<IdealGeometryRecord>().get(tTopoHandle);
591  const TrackerTopology* const tTopo = tTopoHandle.product();
592 
593  //Get SiStripCluster from SiStripRecHit
594  if ( tkrecHit != NULL ){
595  const SiStripCluster* SiStripCluster_ = &*(tkrecHit->cluster());
596  SiStripClusterInfo SiStripClusterInfo_(*SiStripCluster_,es,detid);
597 
598  // std::cout << "[SiStripMonitorTrack::RecHitInfo] SiStripClusterInfo DONE" << std::endl;
599 
600  if ( clusterInfos(&SiStripClusterInfo_,detid, tTopo, OnTrack, LV ) ) {
601  vPSiStripCluster.push_back(SiStripCluster_);
602  }
603  }else{
604  edm::LogError("SiStripMonitorTrack") << "NULL hit" << std::endl;
605  }
606  }
607 
608 //------------------------------------------------------------------------
609 
611 {
612 
613  // std::cout << "[SiStripMonitorTrack::AllClusters] starting .. " << std::endl;
614  //Retrieve tracker topology from geometry
615  edm::ESHandle<TrackerTopology> tTopoHandle;
616  es.get<IdealGeometryRecord>().get(tTopoHandle);
617  const TrackerTopology* const tTopo = tTopoHandle.product();
618 
620  ev.getByToken( clusterToken_, siStripClusterHandle);
621  if (!siStripClusterHandle.isValid()){
622  edm::LogError("SiStripMonitorTrack")<< "ClusterCollection is not valid!!" << std::endl;
623  return;
624  } else {
625  // std::cout << "[SiStripMonitorTrack::AllClusters] OK cluster collection: " << siStripClusterHandle->size() << std::endl;
626 
627  //Loop on Dets
628  for ( edmNew::DetSetVector<SiStripCluster>::const_iterator DSViter=siStripClusterHandle->begin(); DSViter!=siStripClusterHandle->end();DSViter++){
629  uint32_t detid=DSViter->id();
630  if (find(ModulesToBeExcluded_.begin(),ModulesToBeExcluded_.end(),detid)!=ModulesToBeExcluded_.end()) continue;
631  //Loop on Clusters
632  LogDebug("SiStripMonitorTrack") << "on detid "<< detid << " N Cluster= " << DSViter->size();
634  for(; ClusIter!=DSViter->end(); ClusIter++) {
636  SiStripClusterInfo SiStripClusterInfo_(*ClusIter,es,detid);
637  clusterInfos(&SiStripClusterInfo_,detid,tTopo,OffTrack,LV);
638  }
639  }
640  }
641  }
642 }
643 
644 //------------------------------------------------------------------------
646 {
647 
648  // std::cout << "[SiStripMonitorTrack::clusterInfos] input collection: " << Cluster_src_ << std::endl;
649  // std::cout << "[SiStripMonitorTrack::clusterInfos] starting flag " << flag << std::endl;
650  if (cluster==NULL) return false;
651  // if one imposes a cut on the clusters, apply it
652  if( (applyClusterQuality_) &&
653  (cluster->signalOverNoise() < sToNLowerLimit_ ||
654  cluster->signalOverNoise() > sToNUpperLimit_ ||
655  cluster->width() < widthLowerLimit_ ||
656  cluster->width() > widthUpperLimit_) ) return false;
657  // std::cout << "[SiStripMonitorTrack::clusterInfos] pass clusterQuality detID: " << detid;
658  // start of the analysis
659 
660  std::pair<std::string,std::string> sdet_pair = folderOrganizer_.getSubDetFolderAndTag(detid,tTopo);
661  // std::cout << " --> " << sdet_pair.second << " " << sdet_pair.first << std::endl;
662  // std::cout << "[SiStripMonitorTrack::clusterInfos] SubDetMEsMap: " << SubDetMEsMap.size() << std::endl;
663  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(sdet_pair.second);
664  // std::cout << "[SiStripMonitorTrack::clusterInfos] iSubdet: " << iSubdet->first << std::endl;
665  if(iSubdet != SubDetMEsMap.end()){
666  // std::cout << "[SiStripMonitorTrack::clusterInfos] adding cluster" << std::endl;
667  if (flag == OnTrack) iSubdet->second.totNClustersOnTrack++;
668  else if (flag == OffTrack) iSubdet->second.totNClustersOffTrack++;
669  }
670 
671  // std::cout << "[SiStripMonitorTrack::clusterInfos] iSubdet->second.totNClustersOnTrack: " << iSubdet->second.totNClustersOnTrack << std::endl;
672  // std::cout << "[SiStripMonitorTrack::clusterInfos] iSubdet->second.totNClustersOffTrack: " << iSubdet->second.totNClustersOffTrack << std::endl;
673 
674  float cosRZ = -2;
675  LogDebug("SiStripMonitorTrack")<< "\n\tLV " << LV.x() << " " << LV.y() << " " << LV.z() << " " << LV.mag() << std::endl;
676  if (LV.mag()!=0){
677  cosRZ= fabs(LV.z())/LV.mag();
678  LogDebug("SiStripMonitorTrack")<< "\n\t cosRZ " << cosRZ << std::endl;
679  }
681 
682  // Filling SubDet/Layer Plots (on Track + off Track)
683  fillMEs(cluster,detid,tTopo,cosRZ,flag);
684 
685 
686  //******** TkHistoMaps
687  if (TkHistoMap_On_) {
688  uint32_t adet=cluster->detId();
689  float noise = cluster->noiseRescaledByGain();
690  if(flag==OnTrack){
691  tkhisto_NumOnTrack->add(adet,1.);
692  if(noise > 0.0) tkhisto_StoNCorrOnTrack->fill(adet,cluster->signalOverNoise()*cosRZ);
693  if(noise == 0.0)
694  LogDebug("SiStripMonitorTrack") << "Module " << detid << " in Event " << eventNb << " noise " << noise << std::endl;
695  }
696  else if(flag==OffTrack){
697  tkhisto_NumOffTrack->add(adet,1.);
698  if(cluster->charge() > 250){
699  LogDebug("SiStripMonitorTrack") << "Module firing " << detid << " in Event " << eventNb << std::endl;
700  }
701  }
702  }
703 
704  // Module plots filled only for onTrack Clusters
705  if(Mod_On_){
706  if(flag==OnTrack){
707  SiStripHistoId hidmanager2;
708  name =hidmanager2.createHistoId("","det",detid);
709  fillModMEs(cluster,name,cosRZ);
710  }
711  }
712  return true;
713 }
714 
715 //--------------------------------------------------------------------------------
717 {
718  std::map<std::string, ModMEs>::iterator iModME = ModMEsMap.find(name);
719  if(iModME!=ModMEsMap.end()){
720 
721  float StoN = cluster->signalOverNoise();
722  uint16_t charge = cluster->charge();
723  uint16_t width = cluster->width();
724  float position = cluster->baryStrip();
725 
726  float noise = cluster->noiseRescaledByGain();
727  if(noise > 0.0) fillME(iModME->second.ClusterStoNCorr ,StoN*cos);
728  if(noise == 0.0) LogDebug("SiStripMonitorTrack") << "Module " << name << " in Event " << eventNb << " noise " << noise << std::endl;
729  fillME(iModME->second.ClusterCharge,charge);
730 
731  fillME(iModME->second.ClusterChargeCorr,charge*cos);
732 
733  fillME(iModME->second.ClusterWidth ,width);
734  fillME(iModME->second.ClusterPos ,position);
735 
736  //fill the PGV histo
737  float PGVmax = cluster->maxCharge();
738  int PGVposCounter = cluster->maxIndex();
739  for (int i= int(conf_.getParameter<edm::ParameterSet>("TProfileClusterPGV").getParameter<double>("xmin"));i<PGVposCounter;++i)
740  fillME(iModME->second.ClusterPGV, i,0.);
741  for (std::vector<uint8_t>::const_iterator it=cluster->stripCharges().begin();it<cluster->stripCharges().end();++it) {
742  fillME(iModME->second.ClusterPGV, PGVposCounter++,(*it)/PGVmax);
743  }
744  for (int i= PGVposCounter;i<int(conf_.getParameter<edm::ParameterSet>("TProfileClusterPGV").getParameter<double>("xmax"));++i)
745  fillME(iModME->second.ClusterPGV, i,0.);
746  //end fill the PGV histo
747  }
748 }
749 
750 //------------------------------------------------------------------------
752 {
753  std::pair<std::string,int32_t> SubDetAndLayer = folderOrganizer_.GetSubDetAndLayer(detid,tTopo,flag_ring);
754  SiStripHistoId hidmanager1;
755  std::string layer_id = hidmanager1.getSubdetid(detid,tTopo,flag_ring);
756 
757  std::pair<std::string,std::string> sdet_pair = folderOrganizer_.getSubDetFolderAndTag(detid,tTopo);
758  float StoN = cluster->signalOverNoise();
759  float noise = cluster->noiseRescaledByGain();
760  uint16_t charge = cluster->charge();
761  uint16_t width = cluster->width();
762  float position = cluster->baryStrip();
763 
764  std::map<std::string, LayerMEs>::iterator iLayer = LayerMEsMap.find(layer_id);
765  if (iLayer != LayerMEsMap.end()) {
766  if(flag==OnTrack){
767  // std::cout << "[SiStripMonitorTrack::fillMEs] filling OnTrack" << std::endl;
768  if(noise > 0.0) fillME(iLayer->second.ClusterStoNCorrOnTrack, StoN*cos);
769  if(noise == 0.0) LogDebug("SiStripMonitorTrack") << "Module " << detid << " in Event " << eventNb << " noise " << cluster->noiseRescaledByGain() << std::endl;
770  fillME(iLayer->second.ClusterChargeCorrOnTrack, charge*cos);
771  fillME(iLayer->second.ClusterChargeOnTrack, charge);
772  fillME(iLayer->second.ClusterNoiseOnTrack, noise);
773  fillME(iLayer->second.ClusterWidthOnTrack, width);
774  fillME(iLayer->second.ClusterPosOnTrack, position);
775  } else {
776  // std::cout << "[SiStripMonitorTrack::fillMEs] filling OffTrack" << std::endl;
777  fillME(iLayer->second.ClusterChargeOffTrack, charge);
778  fillME(iLayer->second.ClusterNoiseOffTrack, noise);
779  fillME(iLayer->second.ClusterWidthOffTrack, width);
780  fillME(iLayer->second.ClusterPosOffTrack, position);
781  }
782  }
783  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(sdet_pair.second);
784  if(iSubdet != SubDetMEsMap.end() ){
785  if(flag==OnTrack){
786  if(noise > 0.0) fillME(iSubdet->second.ClusterStoNCorrOnTrack,StoN*cos);
787  } else {
788  fillME(iSubdet->second.ClusterChargeOffTrack,charge);
789  if(noise > 0.0) fillME(iSubdet->second.ClusterStoNOffTrack,StoN);
790  }
791  }
792 }
793 //
794 // -- Get Subdetector Tag from the Folder name
795 //
796 /* mia: what am I supposed to do w/ thi function ? */
798 
799  tag = folder_name.substr(folder_name.find("MechanicalView")+15);
800  if (tag.find("side_") != std::string::npos) {
801  tag.replace(tag.find_last_of("/"),1,"_");
802  }
803 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:42
MonitorElement * bookMETrend(DQMStore::IBooker &, const char *, const char *)
uint8_t maxCharge() const
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:44
int i
Definition: DBlmapReader.cc:9
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
TkHistoMap * tkhisto_NumOffTrack
SiStripMonitorTrack(const edm::ParameterSet &)
void setSiStripFolderName(std::string name)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
void trackStudy(const edm::Event &ev, const edm::EventSetup &es)
void trackStudyFromTrack(edm::Handle< reco::TrackCollection > trackCollectionHandle, const edm::EventSetup &es)
edm::EDGetTokenT< reco::TrackCollection > trackToken_
void trackStudyFromTrajectory(edm::Handle< TrajTrackAssociationCollection > TItkAssociatorCollection, const edm::EventSetup &es)
const GeomDetUnit * monoDet() const
Definition: GluedGeomDet.h:20
void fillME(MonitorElement *ME, float value1)
SiStripDCSStatus * dcsStatus_
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:155
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
float noiseRescaledByGain() const
void book(DQMStore::IBooker &, const TrackerTopology *tTopo)
void AllClusters(const edm::Event &ev, const edm::EventSetup &es)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:47
float baryStrip() const
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:10
edm::ParameterSet conf_
T y() const
Definition: PV3DBase.h:63
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:62
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=0)
MonitorElement * bookME1D(DQMStore::IBooker &, const char *, const char *)
#define NULL
Definition: scimark2.h:8
void bookLayerMEs(DQMStore::IBooker &, const uint32_t &, std::string &)
bool ev
Provides a code based selection for trigger and DCS information in order to have no failing filters i...
data_type const * const_iterator
Definition: DetSetNew.h:30
edm::ESHandle< SiStripDetCabling > SiStripDetCabling_
uint16_t maxIndex() const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
double charge(const std::vector< uint8_t > &Ampls)
void setDetectorFolder(uint32_t rawdetid, const TrackerTopology *tTopo)
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
LocalVector localMomentum() const
bool getStatus(edm::Event const &e, edm::EventSetup const &eSetup)
edmNew::DetSet< SiStripCluster >::const_iterator ClusIter
math::XYZTLorentzVectorD LV
float signalOverNoise() const
void fillMEs(SiStripClusterInfo *, uint32_t detid, const TrackerTopology *tTopo, float, enum ClusterFlags)
T mag() const
Definition: PV3DBase.h:67
vector< ParameterSet > Parameters
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
uint16_t charge() const
std::map< std::string, SubDetMEs > SubDetMEsMap
void fillModMEs(SiStripClusterInfo *, std::string, float)
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
void fill(uint32_t &detid, float value)
Definition: TkHistoMap.cc:180
bool accept(const edm::Event &event, const edm::EventSetup &setup)
To be called from analyze/filter() methods.
const std::string subdet_tag("SubDet")
T z() const
Definition: PV3DBase.h:64
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
MonitorElement * bookME2D(DQMStore::IBooker &, const char *, const char *)
uint16_t width() const
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:113
void tag(MonitorElement *, unsigned int)
Definition: DQMStore.cc:286
TH1 * getTH1(void) const
void bookSubDetMEs(DQMStore::IBooker &, std::string &name)
MonitorElement * bookME3D(DQMStore::IBooker &, const char *, const char *)
std::vector< const SiStripCluster * > vPSiStripCluster
edm::ESHandle< TrackerGeometry > tkgeom
int orbitNumber() const
Definition: EventBase.h:63
SiStripFolderOrganizer folderOrganizer_
std::string getSubdetid(uint32_t id, const TrackerTopology *tTopo, bool flag_ring)
bool isValid() const
Definition: HandleBase.h:76
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
#define LogTrace(id)
tuple conf
Definition: dbtoconf.py:185
SiStripRecHit2D originalHit() const
void getSubDetTag(std::string &folder_name, std::string &tag)
edm::EDGetTokenT< TrajTrackAssociationCollection > trackTrajToken_
void setLayerFolder(uint32_t rawdetid, const TrackerTopology *tTopo, int32_t layer=0, bool ring_flag=0)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
SiStripRecHit2D stereoHit() const
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:131
std::string createHistoId(std::string description, std::string id_type, uint32_t component_id)
void bookModMEs(DQMStore::IBooker &, const uint32_t &)
const T & get() const
Definition: EventSetup.h:55
key_type key() const
Accessor for product key.
Definition: Ref.h:266
T const * product() const
Definition: ESHandle.h:62
void dqmBeginRun(const edm::Run &run, const edm::EventSetup &es)
std::map< std::string, ModMEs > ModMEsMap
std::pair< std::string, std::string > getSubDetFolderAndTag(const uint32_t &detid, const TrackerTopology *tTopo)
std::string HistoName
TkHistoMap * tkhisto_NumOnTrack
SiStripRecHit2D monoHit() const
bool clusterInfos(SiStripClusterInfo *cluster, const uint32_t &detid, const TrackerTopology *tTopo, enum ClusterFlags flags, LocalVector LV)
uint32_t detId() const
GenericTriggerEventFlag * genTriggerEventFlag_
const std::vector< uint8_t > & stripCharges() const
edm::EventID id() const
Definition: EventBase.h:56
iterator end()
Definition: DetSetNew.h:70
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, const uint32_t lumi=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE", const bool resetMEsAfterWriting=false)
Definition: DQMStore.cc:2540
static int position[264][3]
Definition: ReadPGInfo.cc:509
MonitorElement * bookMEProfile(DQMStore::IBooker &, const char *, const char *)
TkHistoMap * tkhisto_StoNCorrOnTrack
DetId geographicalId() const
std::vector< uint32_t > ModulesToBeExcluded_
virtual void endJob(void)
void initRun(const edm::Run &run, const edm::EventSetup &setup)
To be called from beginRun() methods.
std::string createHistoLayer(std::string description, std::string id_type, std::string path, std::string flag)
MonitorElement * book3D(Args &&...args)
Definition: DQMStore.h:149
long double T
T x() const
Definition: PV3DBase.h:62
void add(uint32_t &detid, float value)
Definition: TkHistoMap.cc:213
const GeomDetUnit * stereoDet() const
Definition: GluedGeomDet.h:21
Definition: Run.h:41
void trajectoryStudy(const edm::Ref< std::vector< Trajectory > > traj, reco::TrackRef trackref, const edm::EventSetup &es)
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusterToken_
std::map< std::string, LayerMEs > LayerMEsMap
void RecHitInfo(const T *tkrecHit, LocalVector LV, reco::TrackRef track_ref, const edm::EventSetup &)