CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MonitorTrackResiduals.cc
Go to the documentation of this file.
23 
25  : dqmStore_( edm::Service<DQMStore>().operator->() )
26  , conf_(iConfig), m_cacheID_(0)
27  , genTriggerEventFlag_(new GenericTriggerEventFlag(iConfig)) {
28 }
29 
32 }
33 
34 
36  ModOn = conf_.getParameter<bool>("Mod_On");
37  reset_me_after_each_run = conf_.getParameter<bool>("ResetAfterRun");
38 }
39 
41 
42  //Retrieve tracker topology from geometry
44  iSetup.get<IdealGeometryRecord>().get(tTopoHandle);
45  const TrackerTopology* const tTopo = tTopoHandle.product();
46 
47  unsigned long long cacheID = iSetup.get<SiStripDetCablingRcd>().cacheIdentifier();
48  if (m_cacheID_ != cacheID) {
49  m_cacheID_ = cacheID;
50  this->createMEs(iSetup);
51  }
53  if(ModOn) {
54  for(std::map<int32_t, MonitorElement*>::const_iterator it = HitResidual.begin(),
55  itEnd = HitResidual.end(); it!= itEnd;++it) {
56  this->resetModuleMEs(it->first);
57  this->resetLayerMEs(folder_organizer.GetSubDetAndLayer(it->first, tTopo));
58  }
59  } else {
60  for(std::map< std::pair<std::string,int32_t>, MonitorElement*>::const_iterator it = m_SubdetLayerResiduals.begin(),
61  itEnd = m_SubdetLayerResiduals.end(); it!= itEnd;++it) {
62  this->resetLayerMEs(it->first);
63  }
64  } // end if-else Module level on
65  } // end reset after run
66 
67  // Initialize the GenericTriggerEventFlag
68  if ( genTriggerEventFlag_->on() ) genTriggerEventFlag_->initRun( run, iSetup );
69 }
70 
72 
73  //Retrieve tracker topology from geometry
75  iSetup.get<IdealGeometryRecord>().get(tTopoHandle);
76  const TrackerTopology* const tTopo = tTopoHandle.product();
77 
78  Parameters = conf_.getParameter<edm::ParameterSet>("TH1ResModules");
79  int32_t i_residuals_Nbins = Parameters.getParameter<int32_t>("Nbinx");
80  double d_residual_xmin = Parameters.getParameter<double>("xmin");
81  double d_residual_xmax = Parameters.getParameter<double>("xmax");
82  Parameters = conf_.getParameter<edm::ParameterSet>("TH1NormResModules");
83  int32_t i_normres_Nbins = Parameters.getParameter<int32_t>("Nbinx");
84  double d_normres_xmin = Parameters.getParameter<double>("xmin");
85  double d_normres_xmax = Parameters.getParameter<double>("xmax");
86 
87 
88  // use SistripHistoId for producing histogram id (and title)
89  SiStripHistoId hidmanager;
90  folder_organizer.setSiStripFolder(); // top SiStrip folder
91 
92  // take from eventSetup the SiStripDetCabling object
94  iSetup.get<SiStripDetCablingRcd>().get(tkmechstruct);
95 
96  // get list of active detectors from SiStripDetCabling
97  std::vector<uint32_t> activeDets;
98  activeDets.clear(); // just in case
99  tkmechstruct->addActiveDetectorsRawIds(activeDets);
100 
101  // use SiStripSubStructure for selecting certain regions
102  SiStripSubStructure substructure;
103  std::vector<uint32_t> DetIds = activeDets;
104 
105  // book histo per each detector module
106  for (std::vector<uint32_t>::const_iterator DetItr=activeDets.begin(),
107  DetItrEnd = activeDets.end(); DetItr!=DetItrEnd; ++DetItr)
108  {
109  uint ModuleID = (*DetItr);
110 
111  // is this a StripModule?
112  if( SiStripDetId(ModuleID).subDetector() != 0 ) {
113 
114  folder_organizer.setDetectorFolder(ModuleID, tTopo); // detid sets appropriate detector folder
115  // Book module histogramms?
116  if (ModOn) {
117  std::string hid = hidmanager.createHistoId("HitResiduals","det",ModuleID);
118  std::string normhid = hidmanager.createHistoId("NormalizedHitResiduals","det",ModuleID);
119  HitResidual[ModuleID] = dqmStore_->book1D(hid, hid,
120  i_residuals_Nbins,d_residual_xmin,d_residual_xmax);
121  HitResidual[ModuleID]->setAxisTitle("(x_{pred} - x_{rec})' [cm]");
122  NormedHitResiduals[ModuleID] = dqmStore_->book1D(normhid, normhid,
123  i_normres_Nbins,d_normres_xmin,d_normres_xmax);
124  NormedHitResiduals[ModuleID]->setAxisTitle("(x_{pred} - x_{rec})'/#sigma");
125  }
126  // book layer level histogramms
127  std::pair<std::string,int32_t> subdetandlayer = folder_organizer.GetSubDetAndLayer(ModuleID, tTopo);
128  folder_organizer.setLayerFolder(ModuleID,tTopo,subdetandlayer.second);
129  if(! m_SubdetLayerResiduals[subdetandlayer ] ) {
130  // book histogramms on layer level, check for barrel for correct labeling
131  std::string histoname = Form(subdetandlayer.first.find("B") != std::string::npos ?
132  "HitResiduals_%s__Layer__%d" : "HitResiduals_%s__wheel__%d" ,
133  subdetandlayer.first.c_str(),std::abs(subdetandlayer.second));
134  std::string normhistoname =
135  Form(subdetandlayer.first.find("B") != std::string::npos ?
136  "NormalizedHitResidual_%s__Layer__%d" : "NormalizedHitResidual_%s__wheel__%d" ,
137  subdetandlayer.first.c_str(),std::abs(subdetandlayer.second));
138  m_SubdetLayerResiduals[subdetandlayer] =
139  dqmStore_->book1D(histoname.c_str(),histoname.c_str(),
140  i_residuals_Nbins,d_residual_xmin,d_residual_xmax);
141  m_SubdetLayerResiduals[subdetandlayer]->setAxisTitle("(x_{pred} - x_{rec})' [cm]");
142  m_SubdetLayerNormedResiduals[subdetandlayer] =
143  dqmStore_->book1D(normhistoname.c_str(),normhistoname.c_str(),
144  i_normres_Nbins,d_normres_xmin,d_normres_xmax);
145  m_SubdetLayerNormedResiduals[subdetandlayer]->setAxisTitle("(x_{pred} - x_{rec})'/#sigma");
146  }
147  } // end 'is strip module'
148  } // end loop over activeDets
149 }
150 
151 
153  HitResidual[modid]->Reset();
154  NormedHitResiduals[modid]->Reset();
155 }
156 
157 void MonitorTrackResiduals::resetLayerMEs(const std::pair<std::string, int32_t> &subdetandlayer) {
158  m_SubdetLayerResiduals [subdetandlayer]->Reset();
159  m_SubdetLayerNormedResiduals[subdetandlayer]->Reset();
160 }
161 
162 
163 
165 }
166 
167 
169 
170  //dqmStore_->showDirStructure();
171  bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
173  if(outputMEsInRootFile){
174  dqmStore_->save(outputFileName);
175  }
176 }
177 
178 
180 
181  // Filter out events if Trigger Filtering is requested
182  if (genTriggerEventFlag_->on()&& ! genTriggerEventFlag_->accept( iEvent, iSetup) ) return;
183 
184  //Retrieve tracker topology from geometry
185  edm::ESHandle<TrackerTopology> tTopoHandle;
186  iSetup.get<IdealGeometryRecord>().get(tTopoHandle);
187  const TrackerTopology* const tTopo = tTopoHandle.product();
188 
189  TrackerValidationVariables avalidator_(iSetup,conf_);
190  std::vector<TrackerValidationVariables::AVHitStruct> v_hitstruct;
191  avalidator_.fillHitQuantities(iEvent,v_hitstruct);
192  for (std::vector<TrackerValidationVariables::AVHitStruct>::const_iterator it = v_hitstruct.begin(),
193  itEnd = v_hitstruct.end(); it != itEnd; ++it) {
194  uint RawId = it->rawDetId;
195 
196  // fill if hit belongs to StripDetector and its error is not zero
197  if( it->resXprimeErr != 0 && SiStripDetId(RawId).subDetector() != 0 ) {
198  if (ModOn && HitResidual[RawId]) {
199  HitResidual[RawId]->Fill(it->resXprime);
200  NormedHitResiduals[RawId]->Fill(it->resXprime/it->resXprimeErr);
201  }
202  std::pair<std::string, int32_t> subdetandlayer = folder_organizer.GetSubDetAndLayer(RawId, tTopo);
203  if(m_SubdetLayerResiduals[subdetandlayer]) {
204  m_SubdetLayerResiduals[subdetandlayer]->Fill(it->resXprime);
205  m_SubdetLayerNormedResiduals[subdetandlayer]->Fill(it->resXprime/it->resXprimeErr);
206  }
207  }
208  }
209 
210 }
211 
212 
213 
215 
virtual void beginRun(edm::Run const &run, edm::EventSetup const &iSetup)
T getParameter(std::string const &) const
void createMEs(const edm::EventSetup &)
void resetModuleMEs(int32_t modid)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:722
unsigned long long m_cacheID_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:2118
#define abs(x)
Definition: mlp_lapack.h:159
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=0)
void fillHitQuantities(const Trajectory *trajectory, std::vector< AVHitStruct > &v_avhitout)
Provides a code based selection for trigger and DCS information in order to have no failing filters i...
SiStripFolderOrganizer folder_organizer
dictionary map
Definition: Association.py:205
void setDetectorFolder(uint32_t rawdetid, const TrackerTopology *tTopo)
int iEvent
Definition: GenABIO.cc:243
vector< ParameterSet > Parameters
bool accept(const edm::Event &event, const edm::EventSetup &setup)
To be called from analyze/filter() methods.
virtual void endRun(const edm::Run &, const edm::EventSetup &)
virtual void beginJob(void)
void resetLayerMEs(const std::pair< std::string, int32_t > &)
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
SubDetector subDetector() const
Definition: SiStripDetId.h:114
void setLayerFolder(uint32_t rawdetid, const TrackerTopology *tTopo, int32_t layer=0, bool ring_flag=0)
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
std::map< std::pair< std::string, int32_t >, MonitorElement * > m_SubdetLayerNormedResiduals
GenericTriggerEventFlag * genTriggerEventFlag_
std::map< std::pair< std::string, int32_t >, MonitorElement * > m_SubdetLayerResiduals
MonitorTrackResiduals(const edm::ParameterSet &)
void initRun(const edm::Run &run, const edm::EventSetup &setup)
To be called from beginRun() methods.
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: Run.h:36