CMS 3D CMS Logo

SiStripLorentzAngleDQM.cc
Go to the documentation of this file.
5 #include "TCanvas.h"
6 
7 // -----
9  edm::RunNumber_t iRun,
10  edm::ParameterSet const& hPSet,
11  edm::ParameterSet const& fPSet):SiStripBaseCondObjDQM(eSetup, iRun, hPSet, fPSet){
12 
13  // Build the Histo_TkMap:
14  if ( HistoMaps_On_ ) {
15  edm::ESHandle<TkDetMap> tkDetMapHandle;
16  eSetup.get<TrackerTopologyRcd>().get(tkDetMapHandle);
17  Tk_HM_ = std::make_unique<TkHistoMap>(tkDetMapHandle.product(), "SiStrip/Histo_Map","LA_TkMap",0.);
18  }
19 }
20 // -----
21 
22 
23 
24 // -----
26 // -----
27 
28 
29 // -----
31 
32  getConditionObject(eSetup);
33 
34  std::map<uint32_t,float>::const_iterator LAMapIter_;
35  std::map<uint32_t,float> LAMap_ = lorentzangleHandle_->getLorentzAngles();
36 
37  for( LAMapIter_ = LAMap_.begin();
38  LAMapIter_!= LAMap_.end(); LAMapIter_++){
39 
40  activeDetIds.push_back((*LAMapIter_).first);
41  }
42 
43 }
44 // -----
45 
46 
47 // -----
48 void SiStripLorentzAngleDQM::fillSummaryMEs(const std::vector<uint32_t> & selectedDetIds, const edm::EventSetup& es){
49 
50  //Retrieve tracker topology from geometry
52  es.get<TrackerTopologyRcd>().get(tTopoHandle);
53  const TrackerTopology* const tTopo = tTopoHandle.product();
54 
55  // -----
56  // LA on layer-level : fill at once all detIds belonging to same layer when encountering first detID in the layer
57 
58  bool fillNext = true;
59  for(unsigned int i=0;i<selectedDetIds.size();i++){
60  int subDetId_ = DetId(selectedDetIds[i]).subdetId();
61  if( subDetId_<3 ||subDetId_>6 ){
62  edm::LogError("SiStripLorentzAngle")
63  << "[SiStripLorentzAngle::fillSummaryMEs] WRONG INPUT : no such subdetector type : "
64  << subDetId_ << " and detId " << selectedDetIds[i] << " therefore no filling!"
65  << std::endl;
66  }
67  else if (SummaryOnLayerLevel_On_) {
68  if( fillNext) { fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i],tTopo);}
69  if( getLayerNameAndId(selectedDetIds[i+1],tTopo)==getLayerNameAndId(selectedDetIds[i],tTopo)){ fillNext=false;}
70  else { fillNext=true;}
71  }
72  else if (SummaryOnStringLevel_On_) {
73  if( fillNext) { fillMEsForLayer(/*SummaryMEsMap_,*/ selectedDetIds[i],tTopo);}
74  if( getStringNameAndId(selectedDetIds[i+1],tTopo)==getStringNameAndId(selectedDetIds[i],tTopo)){ fillNext=false;}
75  else { fillNext=true;}
76  }
77  }
78 
79  for (std::map<uint32_t, ModMEs>::iterator iter=SummaryMEsMap_.begin(); iter!=SummaryMEsMap_.end(); iter++){
80 
81  ModMEs selME;
82  selME = iter->second;
83 
85 
86  if (fPSet_.getParameter<bool>("OutputSummaryProfileAtLayerLevelAsImage")){
87 
88  TCanvas c1("c1");
89  selME.SummaryOfProfileDistr->getTProfile()->Draw();
90  std::string name (selME.SummaryOfProfileDistr->getTProfile()->GetTitle());
91  name+=".png";
92  c1.Print(name.c_str());
93  }
94 
95  if (fPSet_.getParameter<bool>("OutputCumulativeSummaryAtLayerLevelAsImage")){
96 
97  TCanvas c2("c2");
98  selME.SummaryOfCumulDistr->getTH1()->Draw();
99  std::string name2 (selME.SummaryOfCumulDistr->getTH1()->GetTitle());
100  name2+=".png";
101  c2.Print(name2.c_str());
102  }
103 
104  }
105  else{
106  if(hPSet_.getParameter<bool>("FillSummaryProfileAtLayerLevel") && fPSet_.getParameter<bool>("OutputSummaryProfileAtLayerLevelAsImage")){
107 
108  TCanvas c1("c1");
109  selME.SummaryOfProfileDistr->getTProfile()->Draw();
110  std::string name (selME.SummaryOfProfileDistr->getTProfile()->GetTitle());
111  name+=".png";
112  c1.Print(name.c_str());
113  }
114 
115  if(hPSet_.getParameter<bool>("FillCumulativeSummaryAtLayerLevel") && fPSet_.getParameter<bool>("OutputCumulativeSummaryAtLayerLevelAsImage")){
116 
117  TCanvas c1("c1");
118  selME.SummaryOfCumulDistr->getTH1()->Draw();
119  std::string name (selME.SummaryOfCumulDistr->getTH1()->GetTitle());
120  name+=".png";
121  c1.Print(name.c_str());
122  }
123  }
124 
125  }
126 
127 }
128 // -----
129 
130 
131 
132 // -----
133 void SiStripLorentzAngleDQM::fillMEsForLayer( /*std::map<uint32_t, ModMEs> selMEsMap_,*/ uint32_t selDetId_, const TrackerTopology* tTopo){
134 
136 
137 
138  std::string hSummaryOfProfile_description;
139  hSummaryOfProfile_description = hPSet_.getParameter<std::string>("SummaryOfProfile_description");
140 
141  std::string hSummary_name;
142 
143  int subDetId_ = DetId(selDetId_).subdetId();
144 
145  if( subDetId_<3 || subDetId_>6 ){
146  edm::LogError("SiStripLorentzAngleDQM")
147  << "[SiStripLorentzAngleDQM::fillMEsForLayer] WRONG INPUT : no such subdetector type : "
148  << subDetId_ << " no folder set!"
149  << std::endl;
150  return;
151  }
152 
153  std::vector<uint32_t> sameLayerDetIds_;
154  sameLayerDetIds_.clear();
155 
156  if (SummaryOnStringLevel_On_) { //FILLING FOR STRING LEVEL
157 
158  hSummary_name = hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getStringNameAndId(selDetId_,tTopo).first, "") ;
159  std::map<uint32_t, ModMEs>::iterator selMEsMapIter_ = SummaryMEsMap_.find(getStringNameAndId(selDetId_,tTopo).second);
160 
161  ModMEs selME_;
162  if ( selMEsMapIter_ != SummaryMEsMap_.end())
163  selME_ =selMEsMapIter_->second;
164 
165  getSummaryMEs(selME_,selDetId_,tTopo);
166 
167  // -----
168  sameLayerDetIds_.clear();
169 
170  switch ( DetId(selDetId_).subdetId() ) {
172  if(tTopo->tibIsInternalString(selDetId_)){
173  SiStripSubStructure::getTIBDetectors(activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(selDetId_),0,1,tTopo->tibString(selDetId_));
174  }
175  if(tTopo->tibIsExternalString(selDetId_)){
176  SiStripSubStructure::getTIBDetectors(activeDetIds, sameLayerDetIds_, tTopo, tTopo->tibLayer(selDetId_),0,2,tTopo->tibString(selDetId_));
177  }
178  break;
180  SiStripSubStructure::getTIDDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0,0,0,0);
181  break;
183  SiStripSubStructure::getTOBDetectors(activeDetIds, sameLayerDetIds_, tTopo, tTopo->tobLayer(selDetId_),0,tTopo->tobRod(selDetId_));
184  break;
186  SiStripSubStructure::getTECDetectors(activeDetIds, sameLayerDetIds_, tTopo, 0,0,0,0,0,0);
187  break;
188  }
189 
190  // -----
191 
192  for(unsigned int i=0;i< sameLayerDetIds_.size(); i++){
193  selME_.SummaryOfProfileDistr->Fill(i+1,lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
194 
195  // Fill the Histo_TkMap+TkMap with the LA:
196  if(HistoMaps_On_ ) Tk_HM_->fill(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
197 
198  std::cout<<sameLayerDetIds_[i]<<"\t"<<lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i])<<std::endl;
199 
200  if(fPSet_.getParameter<bool>("TkMap_On") || hPSet_.getParameter<bool>("TkMap_On")){
201  fillTkMap(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
202  }
203 
204  }
205 
206  std::string hSummaryOfCumul_description;
207  hSummaryOfCumul_description = hPSet_.getParameter<std::string>("SummaryOfCumul_description");
208 
209  std::string hSummaryOfCumul_name;
210 
211  if( subDetId_<3 || subDetId_>6 ){
212  edm::LogError("SiStripLorentzAngleDQM")
213  << "[SiStripLorentzAngleDQM::fillMEsForLayer] WRONG INPUT : no such subdetector type : "
214  << subDetId_ << " no folder set!"
215  << std::endl;
216  return;
217  }
218 
219  hSummaryOfCumul_name = hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getStringNameAndId(selDetId_,tTopo).first, "") ;
220 
221  for(unsigned int i=0;i< sameLayerDetIds_.size(); i++){
222  selME_.SummaryOfCumulDistr->Fill(lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
223  }
224  } //FILLING FOR STRING LEVEL
225 
226 
227  else { //FILLING FOR LAYER LEVEL
228 
229  std::map<uint32_t, ModMEs>::iterator selMEsMapIter_ = SummaryMEsMap_.find(getLayerNameAndId(selDetId_,tTopo).second);
230 
231  ModMEs selME_;
232  if ( selMEsMapIter_ != SummaryMEsMap_.end())
233  selME_ =selMEsMapIter_->second;
234 
235  getSummaryMEs(selME_,selDetId_,tTopo);
236 
237  if(hPSet_.getParameter<bool>("FillSummaryProfileAtLayerLevel")){
238 
239  hSummary_name = hidmanager.createHistoLayer(hSummaryOfProfile_description, "layer", getLayerNameAndId(selDetId_,tTopo).first, "") ;
240 
241  // -----
242  sameLayerDetIds_.clear();
243 
244  sameLayerDetIds_=GetSameLayerDetId(activeDetIds,selDetId_,tTopo);
245 
246  for(unsigned int i=0;i< sameLayerDetIds_.size(); i++){
247  selME_.SummaryOfProfileDistr->Fill(i+1,lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
248 
249  // Fill the Histo_TkMap with LA:
250  if(HistoMaps_On_ ) Tk_HM_->fill(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
251 
252  if(fPSet_.getParameter<bool>("TkMap_On") || hPSet_.getParameter<bool>("TkMap_On")){
253  fillTkMap(sameLayerDetIds_[i], lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
254 
255  }
256 
257  }
258  }//if Fill ...
259 
260  if(hPSet_.getParameter<bool>("FillCumulativeSummaryAtLayerLevel")){
261 
262  std::string hSummaryOfCumul_description;
263  hSummaryOfCumul_description = hPSet_.getParameter<std::string>("SummaryOfCumul_description");
264 
265  std::string hSummaryOfCumul_name;
266 
267  if( subDetId_<3 || subDetId_>6 ){
268  edm::LogError("SiStripLorentzAngleDQM")
269  << "[SiStripLorentzAngleDQM::fillMEsForLayer] WRONG INPUT : no such subdetector type : "
270  << subDetId_ << " no folder set!"
271  << std::endl;
272  return;
273  }
274 
275  hSummaryOfCumul_name = hidmanager.createHistoLayer(hSummaryOfCumul_description, "layer", getLayerNameAndId(selDetId_,tTopo).first, "") ;
276 
277  for(unsigned int i=0;i< sameLayerDetIds_.size(); i++){
278  selME_.SummaryOfCumulDistr->Fill(lorentzangleHandle_->getLorentzAngle(sameLayerDetIds_[i]));
279  }
280  }//if Fill ...
281  } //FILLING FOR LAYER LEVEL
282 
283 }
284 // -----
285 
TProfile * getTProfile() const
T getParameter(std::string const &) const
void getTIBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tibDetRawIds, const TrackerTopology *trackerTopology, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t int_ext=0, uint32_t string=0)
unsigned int tibLayer(const DetId &id) const
unsigned int tibString(const DetId &id) const
void fillSummaryMEs(const std::vector< uint32_t > &selectedDetIds, const edm::EventSetup &es) override
edm::ESHandle< SiStripLorentzAngle > lorentzangleHandle_
TH1 * getTH1() const
void getTIDDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tidDetRawIds, const TrackerTopology *trackerTopology, uint32_t side=0, uint32_t wheel=0, uint32_t ring=0, uint32_t ster=0)
void getTECDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tecDetRawIds, const TrackerTopology *trackerTopology, uint32_t side=0, uint32_t wheel=0, uint32_t petal_bkw_frw=0, uint32_t petal=0, uint32_t ring=0, uint32_t ster=0)
void getSummaryMEs(ModMEs &CondObj_ME, const uint32_t &detId_, const TrackerTopology *tTopo)
SiStripLorentzAngleDQM(const edm::EventSetup &eSetup, edm::RunNumber_t iRun, edm::ParameterSet const &hPSet, edm::ParameterSet const &fPSet)
void fillTkMap(const uint32_t &detid, const float &value)
void Fill(long long x)
U second(std::pair< T, U > const &p)
const std::map< unsigned int, float > & getLorentzAngles() const
std::map< uint32_t, ModMEs > SummaryMEsMap_
bool tibIsExternalString(const DetId &id) const
float getLorentzAngle(const uint32_t &) const
void getActiveDetIds(const edm::EventSetup &eSetup) override
std::vector< uint32_t > GetSameLayerDetId(const std::vector< uint32_t > &activeDetIds, uint32_t selDetId, const TrackerTopology *tTopo)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
std::pair< std::string, uint32_t > getStringNameAndId(const uint32_t &detId_, const TrackerTopology *tTopo)
Definition: DetId.h:18
void fillMEsForLayer(uint32_t selDetId_, const TrackerTopology *tTopo) override
void getConditionObject(const edm::EventSetup &eSetup) override
std::pair< std::string, uint32_t > getLayerNameAndId(const uint32_t &detId_, const TrackerTopology *tTopo)
T get() const
Definition: EventSetup.h:62
std::vector< uint32_t > activeDetIds
unsigned int RunNumber_t
void getTOBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tobDetRawIds, const TrackerTopology *trackerTopology, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t rod=0)
std::string createHistoLayer(std::string description, std::string id_type, std::string path, std::string flag)
unsigned int tobRod(const DetId &id) const
bool tibIsInternalString(const DetId &id) const
T const * product() const
Definition: ESHandle.h:86
std::unique_ptr< TkHistoMap > Tk_HM_
unsigned int tobLayer(const DetId &id) const