CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
SiStripTkMaps Class Reference

#include <SiStripTkMaps.h>

Public Member Functions

void bookMap (const std::string mapTitle, const std::string zAxisTitle)
 
void drawMap (TCanvas &canvas, std::string option="")
 
void fill (long rawid, double val)
 
const std::vector< unsigned int > & getTheFilledIds ()
 
const std::vector< double > & getTheFilledValues ()
 
const TH2Poly * getTheMap ()
 
const std::string & getTheMapTitle ()
 
const std::string & getTheZAxisTitle ()
 
void setZAxisRange (double xmin, double xmax)
 
 SiStripTkMaps (const char *option)
 
 ~SiStripTkMaps ()=default
 

Private Member Functions

void adjustCanvasMargins (TVirtualPad *pad, const float top, const float bottom, const float left, const float right)
 
void drawArrows (const float x_X1, const float x_X2, const float x_Y1, const float y_Y2, const char *x_label, const char *y_label)
 
void dressMap (TCanvas &canv)
 
void readVertices (double &minx, double &maxx, double &miny, double &maxy)
 

Private Attributes

double m_axmax
 
double m_axmin
 
std::map< long, std::shared_ptr< TGraph > > m_bins
 
std::vector< unsigned int > m_detIdVector
 
std::string m_mapTitle = ""
 
Option_t * m_option
 
TH2Poly * m_trackerMap {nullptr}
 
TrackerTopology m_trackerTopo
 
std::vector< double > m_values
 
std::string m_zAxisTitle = ""
 

Detailed Description

Definition at line 40 of file SiStripTkMaps.h.

Constructor & Destructor Documentation

◆ SiStripTkMaps()

SiStripTkMaps::SiStripTkMaps ( const char *  option)
inline

Definition at line 42 of file SiStripTkMaps.h.

References fileinputsource_cfi::option.

43  : m_option{option},
45  edm::FileInPath("Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml").fullPath())} {}
Option_t * m_option
Definition: SiStripTkMaps.h:73
TrackerTopology fromTrackerParametersXMLFile(const std::string &xmlFileName)
TrackerTopology m_trackerTopo
Definition: SiStripTkMaps.h:80

◆ ~SiStripTkMaps()

SiStripTkMaps::~SiStripTkMaps ( )
default

Member Function Documentation

◆ adjustCanvasMargins()

void SiStripTkMaps::adjustCanvasMargins ( TVirtualPad *  pad,
const float  top,
const float  bottom,
const float  left,
const float  right 
)
private

Definition at line 241 of file SiStripTkMaps.cc.

Referenced by drawMap().

242  {
243  if (top > 0) {
244  pad->SetTopMargin(top);
245  }
246  if (bottom > 0) {
247  pad->SetBottomMargin(bottom);
248  }
249  if (left > 0) {
250  pad->SetLeftMargin(left);
251  }
252  if (right > 0) {
253  pad->SetRightMargin(right);
254  }
255 }

◆ bookMap()

void SiStripTkMaps::bookMap ( const std::string  mapTitle,
const std::string  zAxisTitle 
)

Definition at line 36 of file SiStripTkMaps.cc.

References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), m_bins, m_mapTitle, m_option, m_trackerMap, m_zAxisTitle, margin, and readVertices().

Referenced by main().

36  {
37  double minx = 0xFFFFFF, maxx = -0xFFFFFF, miny = 0xFFFFFF, maxy = -0xFFFFFFF;
38  readVertices(minx, maxx, miny, maxy);
39 
40  // set the titles
41  m_zAxisTitle = zAxisTitle;
42  m_mapTitle = mapTitle;
43 
44  TGaxis::SetMaxDigits(2);
45 
46  // margin of the box
47  static constexpr int margin = 5;
48  m_trackerMap =
49  new TH2Poly("Tracker Map", m_mapTitle.c_str(), minx - margin, maxx + margin, miny - margin, maxy + margin);
50  m_trackerMap->SetFloat();
51  m_trackerMap->SetOption(m_option);
52  m_trackerMap->SetStats(false);
53  m_trackerMap->GetZaxis()->SetLabelSize(0.03);
54  m_trackerMap->GetZaxis()->SetTitleOffset(0.5);
55  m_trackerMap->GetZaxis()->SetTitleSize(0.05);
56  m_trackerMap->GetZaxis()->SetTitle(m_zAxisTitle.c_str());
57  m_trackerMap->GetZaxis()->CenterTitle();
58 
59  // Add all bins
60  for (const auto& pair : m_bins) {
61  m_trackerMap->AddBin(pair.second->Clone());
62  }
63 
64  // Initialize all bins with zero values
65  for (const auto& pair : m_bins) {
66  m_trackerMap->Fill(pair.first, 0.0);
67  }
68 }
void readVertices(double &minx, double &maxx, double &miny, double &maxy)
Option_t * m_option
Definition: SiStripTkMaps.h:73
std::string m_zAxisTitle
Definition: SiStripTkMaps.h:75
Double_t margin
std::string m_mapTitle
Definition: SiStripTkMaps.h:74
TH2Poly * m_trackerMap
Definition: SiStripTkMaps.h:81
std::map< long, std::shared_ptr< TGraph > > m_bins
Definition: SiStripTkMaps.h:77

◆ drawArrows()

void SiStripTkMaps::drawArrows ( const float  x_X1,
const float  x_X2,
const float  x_Y1,
const float  y_Y2,
const char *  x_label,
const char *  y_label 
)
private

Definition at line 211 of file SiStripTkMaps.cc.

Referenced by dressMap().

212  {
213  auto arrow_X = TArrow();
214  arrow_X.SetLineColor(kBlue);
215  arrow_X.SetLineWidth(2);
216  arrow_X.SetOption("|>");
217  arrow_X.SetArrowSize(10);
218  arrow_X.DrawLineNDC(x_X1, x_Y1, x_X2, x_Y1);
219 
220  auto arrow_Y = TArrow();
221  arrow_Y.SetLineColor(kBlue);
222  arrow_Y.SetLineWidth(2);
223  arrow_Y.SetOption("|>");
224  arrow_Y.SetArrowSize(10);
225  arrow_Y.DrawLineNDC(x_X2, x_Y1, x_X2, y_Y2);
226 
227  auto text_X = TLatex();
228  text_X.SetTextSize(0.04);
229  text_X.SetTextAlign(11);
230  text_X.SetTextColor(kBlue);
231  text_X.DrawLatexNDC(x_X1, x_Y1 - 0.03, x_label);
232 
233  auto text_Y = TLatex();
234  text_Y.SetTextSize(0.04);
235  text_Y.SetTextAlign(11);
236  text_Y.SetTextColor(kBlue);
237  text_Y.DrawLatexNDC(x_X2 + 0.005, y_Y2 - 0.01, y_label);
238 }

◆ drawMap()

void SiStripTkMaps::drawMap ( TCanvas &  canvas,
std::string  option = "" 
)

Definition at line 77 of file SiStripTkMaps.cc.

References adjustCanvasMargins(), svgfig::canvas(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), dressMap(), mps_fire::i, m_trackerMap, m_values, seedmultiplicitymonitor_newtracking_cfi::maxValue, OnDemandMonitoring_cfi::minValue, and fileinputsource_cfi::option.

Referenced by main().

77  {
78  // margins
79  static constexpr float tmargin_ = 0.08;
80  static constexpr float bmargin_ = 0.02;
81  static constexpr float lmargin_ = 0.02;
82  static constexpr float rmargin_ = 0.08;
83 
84  // window size
85  static constexpr int wH_ = 3000;
86  static constexpr int hH_ = 700;
87 
88  // Define a special value for "empty" bins
89  static constexpr double emptyBinValue = -9999;
90 
91  // Ensure all bins are drawn, including empty ones
92  for (int i = 1; i <= m_trackerMap->GetNumberOfBins(); ++i) {
93  if (m_trackerMap->GetBinContent(i) == 0) {
94  m_trackerMap->SetBinContent(i, emptyBinValue);
95  }
96  }
97 
98  // Adjust the color palette
99  if (!m_values.empty()) {
100  double minValue = *std::min_element(m_values.begin(), m_values.end());
101  double maxValue = *std::max_element(m_values.begin(), m_values.end());
102 
103  // Setting a palette that skips the color for the emptyBinValue
104  m_trackerMap->SetMinimum(minValue); // Set min to the smallest valid value
105  m_trackerMap->SetMaximum(maxValue); // Set max to the largest valid value
106  }
107 
108  canvas.cd();
109  adjustCanvasMargins(canvas.cd(), tmargin_, bmargin_, lmargin_, rmargin_);
110  canvas.Update();
111 
112  m_trackerMap->SetTitle("");
113  if (!option.empty()) {
114  m_trackerMap->Draw(option.c_str());
115  } else {
116  m_trackerMap->Draw();
117  }
118 
119  // Set the "empty" bins color to white
120  for (int i = 1; i <= m_trackerMap->GetNumberOfBins(); ++i) {
121  if (m_trackerMap->GetBinContent(i) == emptyBinValue) {
122  m_trackerMap->SetBinContent(i, emptyBinValue);
123  m_trackerMap->SetMarkerColor(kWhite);
124  }
125  }
126 
127  canvas.SetFrameLineColor(0);
128  gPad->Update();
129  TPaletteAxis* palette = (TPaletteAxis*)m_trackerMap->GetListOfFunctions()->FindObject("palette");
130  if (palette != nullptr) {
131  palette->SetLabelSize(0.02);
132  palette->SetX1NDC(1 - rmargin_);
133  palette->SetX2NDC(1 - rmargin_ + lmargin_);
134  }
135 
136  // if not right size, and not drawn in same mode
137  if (canvas.GetWindowHeight() != hH_ && canvas.GetWindowWidth() != wH_ && option.find("same") == std::string::npos) {
138  canvas.SetWindowSize(wH_, hH_);
139  }
140 
141  // call the map dressing
142  dressMap(canvas);
143 }
void dressMap(TCanvas &canv)
void adjustCanvasMargins(TVirtualPad *pad, const float top, const float bottom, const float left, const float right)
std::vector< double > m_values
Definition: SiStripTkMaps.h:79
def canvas(sub, attr)
Definition: svgfig.py:482
TH2Poly * m_trackerMap
Definition: SiStripTkMaps.h:81

◆ dressMap()

void SiStripTkMaps::dressMap ( TCanvas &  canv)
private

Definition at line 146 of file SiStripTkMaps.cc.

References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), drawArrows(), m_mapTitle, and mergeVDriftHistosByStation::name.

Referenced by drawMap().

146  {
147  std::array<std::string, 12> barrelNames = {
148  {"TIB L2", "TIB L1", "TIB L4", "TIB L3", "TOB L2", "TOB L1", "TOB L4", " TOB L3", "TOB L6", "TOB L5"}};
149  std::array<std::string, 4> endcapNames = {{"TID", "TEC", "TID", "TEC"}};
150  std::array<std::string, 24> disknumbering = {{"+1", "+2", "+3", "+1", "+2", "+3", "+4", "+5",
151  "+6", "+7", "+8", "+9", "-1", "-2", "-3", "-1",
152  "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9"}};
153 
154  static constexpr std::array<float, 12> b_coordx = {
155  {0.1, 0.1, 0.26, 0.26, 0.41, 0.41, 0.56, 0.56, 0.725, 0.725, 0.05, 0.17}};
156  static constexpr std::array<float, 12> b_coordy = {
157  {0.70, 0.45, 0.70, 0.45, 0.70, 0.46, 0.70, 0.46, 0.70, 0.46, 0.85, 0.85}};
158 
159  static constexpr std::array<float, 4> e_coordx = {{0.01, 0.21, 0.01, 0.21}};
160  static constexpr std::array<float, 4> e_coordy = {{0.89, 0.89, 0.17, 0.17}};
161 
162  static constexpr std::array<float, 24> n_coordx = {{0.01, 0.087, 0.165, 0.227, 0.305, 0.383, 0.461, 0.539,
163  0.616, 0.694, 0.772, 0.850, 0.01, 0.087, 0.165, 0.227,
164  0.305, 0.383, 0.461, 0.539, 0.617, 0.695, 0.773, 0.851}};
165 
166  static constexpr std::array<float, 24> n_coordy = {{0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85,
167  0.85, 0.85, 0.85, 0.85, 0.13, 0.13, 0.13, 0.13,
168  0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13}};
169 
170  canv.cd();
171  for (const auto& name : barrelNames | boost::adaptors::indexed(0)) {
172  auto ltx = TLatex();
173  ltx.SetTextFont(62);
174  ltx.SetTextSize(0.035);
175  ltx.SetTextAlign(11);
176  ltx.DrawLatexNDC(b_coordx[name.index()], b_coordy[name.index()], name.value().c_str());
177  }
178 
179  for (const auto& name : endcapNames | boost::adaptors::indexed(0)) {
180  auto ltx = TLatex();
181  ltx.SetTextFont(62);
182  ltx.SetTextSize(0.05);
183  ltx.SetTextAlign(11);
184  ltx.DrawLatexNDC(e_coordx[name.index()], e_coordy[name.index()], name.value().c_str());
185  }
186 
187  for (const auto& name : disknumbering | boost::adaptors::indexed(0)) {
188  auto ltx = TLatex();
189  ltx.SetTextFont(62);
190  ltx.SetTextSize(0.035);
191  ltx.SetTextAlign(11);
192  ltx.DrawLatexNDC(n_coordx[name.index()], n_coordy[name.index()], name.value().c_str());
193  }
194 
195  auto ltx = TLatex();
196  ltx.SetTextFont(62);
197  ltx.SetTextSize(0.045);
198  ltx.SetTextAlign(11);
199  ltx.DrawLatexNDC(gPad->GetLeftMargin(), 1 - gPad->GetTopMargin() + 0.03, m_mapTitle.c_str());
200 
201  // barrel axes
202  drawArrows(0.09, 0.23, 0.24, 0.45, "#phi", "z");
203  // endcap axes
204  drawArrows(0.85, 0.89, 0.83, 0.95, "x", "y");
205 
206  canv.Modified();
207  canv.Update(); // make sure it's really (re)drawn
208 }
void drawArrows(const float x_X1, const float x_X2, const float x_Y1, const float y_Y2, const char *x_label, const char *y_label)
std::string m_mapTitle
Definition: SiStripTkMaps.h:74

◆ fill()

void SiStripTkMaps::fill ( long  rawid,
double  val 
)

Definition at line 71 of file SiStripTkMaps.cc.

References m_trackerMap, m_values, and heppy_batch::val.

Referenced by main().

71  {
72  m_trackerMap->Fill(TString::Format("%ld", rawid), val);
73  m_values.push_back(val);
74 }
std::vector< double > m_values
Definition: SiStripTkMaps.h:79
TH2Poly * m_trackerMap
Definition: SiStripTkMaps.h:81

◆ getTheFilledIds()

const std::vector<unsigned int>& SiStripTkMaps::getTheFilledIds ( )
inline

Definition at line 63 of file SiStripTkMaps.h.

References m_detIdVector.

63 { return m_detIdVector; }
std::vector< unsigned int > m_detIdVector
Definition: SiStripTkMaps.h:78

◆ getTheFilledValues()

const std::vector<double>& SiStripTkMaps::getTheFilledValues ( )
inline

Definition at line 66 of file SiStripTkMaps.h.

References m_values.

66 { return m_values; }
std::vector< double > m_values
Definition: SiStripTkMaps.h:79

◆ getTheMap()

const TH2Poly* SiStripTkMaps::getTheMap ( )
inline

Definition at line 54 of file SiStripTkMaps.h.

References m_trackerMap.

54 { return m_trackerMap; }
TH2Poly * m_trackerMap
Definition: SiStripTkMaps.h:81

◆ getTheMapTitle()

const std::string& SiStripTkMaps::getTheMapTitle ( )
inline

Definition at line 57 of file SiStripTkMaps.h.

References m_mapTitle.

57 { return m_mapTitle; }
std::string m_mapTitle
Definition: SiStripTkMaps.h:74

◆ getTheZAxisTitle()

const std::string& SiStripTkMaps::getTheZAxisTitle ( )
inline

Definition at line 60 of file SiStripTkMaps.h.

References m_zAxisTitle.

60 { return m_zAxisTitle; }
std::string m_zAxisTitle
Definition: SiStripTkMaps.h:75

◆ readVertices()

void SiStripTkMaps::readVertices ( double &  minx,
double &  maxx,
double &  miny,
double &  maxy 
)
private

Definition at line 258 of file SiStripTkMaps.cc.

References hcalRecHitTable_cff::detId, ALCARECOPPSCalTrackBasedSel_cff::detid, Exception, contentValuesFiles::fullPath, mps_fire::i, recoMuon::in, fastTrackerRecHitType::isPixel(), ALPAKA_ACCELERATOR_NAMESPACE::ecal::reconstruction::internal::endcap::ix(), ALPAKA_ACCELERATOR_NAMESPACE::ecal::reconstruction::internal::endcap::iy(), mps_splice::line, m_bins, m_detIdVector, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, AlCaHLTBitMon_QueryRunRegistry::string, submitPVValidationJobs::t, x, and y.

Referenced by bookMap().

258  {
259  std::ifstream in;
260 
261  // TPolyline vertices stored at https://github.com/cms-data/DQM-SiStripMonitorClient
262  in.open(edm::FileInPath("DQM/SiStripMonitorClient/data/Geometry/tracker_map_bare").fullPath().c_str());
263 
264  if (!in.good()) {
265  throw cms::Exception("FileError") << "SiStripTkMaps: problem opening vertices file!!" << std::endl;
266  return;
267  }
268 
269  while (in.good()) {
270  long detid = 0;
271  double x[5], y[5];
272 
274  std::getline(in, line);
275  typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
276  boost::char_separator<char> sep{" "};
277  tokenizer tok{line, sep};
278 
279  int ix{0}, iy{0};
280  bool isPixel{false};
281  for (const auto& t : tok | boost::adaptors::indexed(0)) {
282  int i = t.index();
283  if (i == 0) {
284  detid = atoll((t.value()).c_str());
285 
286  // Drop Pixel Data
287  DetId detId(detid);
288  if (detId.subdetId() == PixelSubdetector::PixelBarrel || detId.subdetId() == PixelSubdetector::PixelEndcap) {
289  isPixel = true;
290  break;
291  }
292  } else {
293  if (i % 2 == 0) {
294  x[ix] = atof((t.value()).c_str());
295  if (x[ix] < minx) {
296  minx = x[ix];
297  }
298  if (x[ix] > maxx) {
299  maxx = x[ix];
300  }
301  ++ix;
302  } else {
303  y[iy] = atof((t.value()).c_str());
304  if (y[iy] < miny) {
305  miny = y[iy];
306  }
307  if (y[iy] > maxy) {
308  maxy = y[iy];
309  }
310  ++iy;
311  } // else
312  } // else
313  } // loop on entries
314 
315  if (isPixel) {
316  continue;
317  }
318 
319  m_bins[detid] = std::make_shared<TGraph>(ix, x, y);
320  m_bins[detid]->SetName(TString::Format("%ld", detid));
321  m_bins[detid]->SetTitle(TString::Format("Module ID=%ld", detid));
322  m_detIdVector.push_back(detid);
323  }
324 }
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t ix(uint32_t id)
Definition: DetId.h:17
std::vector< unsigned int > m_detIdVector
Definition: SiStripTkMaps.h:78
bool isPixel(HitType hitType)
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t iy(uint32_t id)
std::map< long, std::shared_ptr< TGraph > > m_bins
Definition: SiStripTkMaps.h:77

◆ setZAxisRange()

void SiStripTkMaps::setZAxisRange ( double  xmin,
double  xmax 
)
inline

Member Data Documentation

◆ m_axmax

double SiStripTkMaps::m_axmax
private

Definition at line 76 of file SiStripTkMaps.h.

◆ m_axmin

double SiStripTkMaps::m_axmin
private

Definition at line 76 of file SiStripTkMaps.h.

◆ m_bins

std::map<long, std::shared_ptr<TGraph> > SiStripTkMaps::m_bins
private

Definition at line 77 of file SiStripTkMaps.h.

Referenced by bookMap(), and readVertices().

◆ m_detIdVector

std::vector<unsigned int> SiStripTkMaps::m_detIdVector
private

Definition at line 78 of file SiStripTkMaps.h.

Referenced by getTheFilledIds(), and readVertices().

◆ m_mapTitle

std::string SiStripTkMaps::m_mapTitle = ""
private

Definition at line 74 of file SiStripTkMaps.h.

Referenced by bookMap(), dressMap(), and getTheMapTitle().

◆ m_option

Option_t* SiStripTkMaps::m_option
private

Definition at line 73 of file SiStripTkMaps.h.

Referenced by bookMap().

◆ m_trackerMap

TH2Poly* SiStripTkMaps::m_trackerMap {nullptr}
private

Definition at line 81 of file SiStripTkMaps.h.

Referenced by bookMap(), drawMap(), fill(), getTheMap(), and setZAxisRange().

◆ m_trackerTopo

TrackerTopology SiStripTkMaps::m_trackerTopo
private

Definition at line 80 of file SiStripTkMaps.h.

◆ m_values

std::vector<double> SiStripTkMaps::m_values
private

Definition at line 79 of file SiStripTkMaps.h.

Referenced by drawMap(), fill(), and getTheFilledValues().

◆ m_zAxisTitle

std::string SiStripTkMaps::m_zAxisTitle = ""
private

Definition at line 75 of file SiStripTkMaps.h.

Referenced by bookMap(), and getTheZAxisTitle().