Belle II Software  release-08-01-10
ARICHChannelHist Class Reference

ARICH histogram with HAPD plane 3 options for bin segmentation are available type 0 - one bin per HAPD, type 1 - one bin per channel, type 2 - one bin per APD chip HAPD numbering is 1-420 (software numbering), channel is ASIC channel, APD is ASIC channel / 36. More...

#include <ARICHChannelHist.h>

Inheritance diagram for ARICHChannelHist:
Collaboration diagram for ARICHChannelHist:

Public Member Functions

 ARICHChannelHist ()
 Default constructor.
 
 ARICHChannelHist (const char *name, const char *title, int type=0, const std::vector< unsigned > &moduleIDs=std::vector< unsigned >())
 Constructor with name, title, and type (0 for channel bins (144/HAPD), 1 for HAPD bins (1/HAPD), 2 for APD bins (4/HAPD)) More...
 
void fillBin (unsigned hapdID, unsigned chID, double weight=1.)
 Add entry to bin corresponding to hapd hapdID and channel chID. More...
 
void setBinContent (unsigned hapdID, unsigned chID, double value)
 Set content of bin corresponding to hapd hapdID and channel chID. More...
 
void fillBin (unsigned hapdID, double weight=1.)
 Add entry to bin corresponding to hapd hapdID. More...
 
void setBinContent (unsigned hapdID, double value)
 Set content of bin corresponding to hapd hapdID. More...
 
void Draw (Option_t *option="") override
 Draw the histogram. More...
 
void fillFromTH1 (TH1 *hist)
 Fill the channelHist from the histogram Type 0 channelHist has to be filled with 420*144bin TH1 (each channel) Type 1 channelHist can be filled with 420*144 (channels) or 420*4 (chips), or 420 (HAPDs) bin TH1 Type 2 channelHist can be filled with 420*144 or 420*4 bin TH1 In case histogram has more bins than channelHist bin content is summed up Exampl: histogram with hits/channel can be used to make ChannelHist with hits/hapd. More...
 
void setPoly (TH2Poly *poly)
 Fill pure TH2Poly from ARICHChannelHist, makes bins and fills content.
 

Protected Member Functions

 ClassDefOverride (ARICHChannelHist, 2)
 ClassDef.
 

Protected Attributes

TLine lines [6]
 
TText labels [6]
 
int m_type = 0
 histogram type
 
std::vector< unsigned > m_hapd2binMap
 map of bins
 

Detailed Description

ARICH histogram with HAPD plane 3 options for bin segmentation are available type 0 - one bin per HAPD, type 1 - one bin per channel, type 2 - one bin per APD chip HAPD numbering is 1-420 (software numbering), channel is ASIC channel, APD is ASIC channel / 36.

Definition at line 27 of file ARICHChannelHist.h.

Constructor & Destructor Documentation

◆ ARICHChannelHist()

ARICHChannelHist ( const char *  name,
const char *  title,
int  type = 0,
const std::vector< unsigned > &  moduleIDs = std::vector<unsigned>() 
)

Constructor with name, title, and type (0 for channel bins (144/HAPD), 1 for HAPD bins (1/HAPD), 2 for APD bins (4/HAPD))

Parameters
namename
titletitle
typetype

Definition at line 21 of file ARICHChannelHist.cc.

22  : TH2Poly()
23 {
24 
25  m_type = type;
26  SetName(name);
27  SetTitle(title);
28  m_hapd2binMap.assign(420, 0);
29 
30  // positions of HAPDs and channel mapping (avoid using DB classes...)
31  const double rs[7] = {57.35, 65.81, 74.37, 82.868, 91.305, 99.794, 108.185};
32  const unsigned nhapds[7] = {42, 48, 54, 60, 66, 72, 78};
33  const unsigned chmap[144] = {88, 86, 96, 87, 75, 72, 97, 108, 73, 74, 98, 109, 84, 85, 120, 110, 76, 77, 132, 121, 136, 124, 99, 133, 125, 113, 122, 111, 101, 137, 134, 123, 89, 112, 100, 135, 52, 28, 3, 40, 41, 5, 15, 2, 17, 29, 27, 14, 4, 16, 1, 26, 53, 65, 0, 13, 48, 49, 39, 12, 61, 62, 25, 38, 63, 60, 24, 37, 64, 50, 51, 36, 91, 115, 140, 103, 102, 138, 128, 141, 126, 114, 116, 129, 139, 127, 142, 117, 90, 78, 143, 130, 95, 94, 104, 131, 82, 81, 118, 105, 80, 83, 119, 106, 79, 93, 92, 107, 55, 57, 47, 56, 68, 71, 46, 35, 70, 69, 45, 34, 59, 58, 23, 33, 67, 66, 11, 22, 7, 19, 44, 10, 18, 30, 21, 32, 42, 6, 9, 20, 54, 31, 43, 8};
34  const double chns[12] = { -2.88, -2.37, -1.86, -1.35, -0.84, -0.33, 0.33, 0.84, 1.35, 1.86, 2.37, 2.88};
35 
36  float size = 0.5 / 2. - 0.01;
37  if (m_type == 1) size = 7.0 / 2. - 0.5;
38  if (m_type == 2) size = 3.3 / 2.;
39 
40  float X[5], Y[5], globX[5], globY[5];
41  X[0] = -size; Y[0] = -size;
42  X[1] = size; Y[1] = -size;
43  X[2] = size; Y[2] = size;
44  X[3] = -size; Y[3] = size;
45  X[4] = -size; Y[4] = -size;
46 
47  int nhapd = 1;
48  unsigned iring = 0;
49  unsigned ihapd = 0;
50 
51  std::vector<unsigned> ids;
52  if (moduleIDs.size() > 0) ids = moduleIDs;
53  else {
54  for (int hapdID = 1; hapdID < 421; hapdID++) {
55  ids.push_back(hapdID);
56  }
57  }
58 
59  // HAPD bins
60  if (m_type == 1) {
61  for (int hapdID = 1; hapdID < 421; hapdID++) {
62  //for (unsigned hapdID : ids) {
63  //m_hapd2binMap[hapdID - 1] = nhapd;
64  //nhapd++;
65  float r = rs[iring];
66  float dphi = 2.*M_PI / nhapds[iring];
67  float fi = dphi / 2. + ihapd * dphi;
68  TVector2 centerPos(r * cos(fi), r * sin(fi));
69  for (int i = 0; i < 5; i++) {
70  float rotX = X[i] * cos(fi) - Y[i] * sin(fi);
71  float rotY = X[i] * sin(fi) + Y[i] * cos(fi);
72  globX[i] = rotX + centerPos.X();
73  globY[i] = rotY + centerPos.Y();
74  }
75  if (std::find(ids.begin(), ids.end(), hapdID) != ids.end()) {
76  m_hapd2binMap[hapdID - 1] = nhapd;
77  nhapd++;
78  TGraph* mybox = new TGraph(5, globX, globY);
79  mybox->SetName((to_string(hapdID)).c_str());
80  AddBin(mybox);
81  }
82  ihapd++;
83  if (ihapd == nhapds[iring]) { iring++; ihapd = 0;}
84  }
85 
86  } else if (m_type == 0) {
87  for (int hapdID = 1; hapdID < 421; hapdID++) {
88  //for (unsigned hapdID : ids) {
89  // m_hapd2binMap[hapdID - 1] = nhapd;
90  // nhapd++;
91  float dphi = 2.*M_PI / nhapds[iring];
92  float fi = dphi / 2. + ihapd * dphi;
93  float r = rs[iring];
94  for (int chID = 0; chID < 144; chID++) {
95 
96  unsigned chX = chmap[chID] % 12;
97  unsigned chY = chmap[chID] / 12;
98  TVector2 hapdPos(r * cos(fi), r * sin(fi));
99  TVector2 locPos(chns[chX], chns[chY]);
100  TVector2 centerPos = hapdPos + locPos.Rotate(fi);
101 
102  for (int i = 0; i < 5; i++) {
103  float rotX = X[i] * cos(fi) - Y[i] * sin(fi);
104  float rotY = X[i] * sin(fi) + Y[i] * cos(fi);
105  globX[i] = rotX + centerPos.X();
106  globY[i] = rotY + centerPos.Y();
107  }
108  if (std::find(ids.begin(), ids.end(), hapdID) != ids.end()) {
109  m_hapd2binMap[hapdID - 1] = nhapd;
110  if (chID == 143) nhapd++;
111  TGraph* mybox = new TGraph(5, globX, globY);
112  mybox->SetName((to_string(hapdID)).c_str());
113  AddBin(mybox);
114  }
115  }
116  ihapd++;
117  if (ihapd == nhapds[iring]) { iring++; ihapd = 0;}
118  }
119  } else if (m_type == 2) {
120  size += 0.2;
121  for (int hapdID = 1; hapdID < 421; hapdID++) {
122  float dphi = 2.*M_PI / nhapds[iring];
123  float fi = dphi / 2. + ihapd * dphi;
124  float r = rs[iring];
125  TVector2 hapdPos(r * cos(fi), r * sin(fi));
126  for (int chipID = 0; chipID < 4; chipID++) {
127  TVector2 locPos(-size + (chipID / 2)*size * 2, size - (chipID % 2)*size * 2);
128  TVector2 centerPos = hapdPos + locPos.Rotate(fi);
129 
130  for (int i = 0; i < 5; i++) {
131  float rotX = X[i] * cos(fi) - Y[i] * sin(fi);
132  float rotY = X[i] * sin(fi) + Y[i] * cos(fi);
133  globX[i] = rotX + centerPos.X();
134  globY[i] = rotY + centerPos.Y();
135  }
136 
137  if (std::find(ids.begin(), ids.end(), hapdID) != ids.end()) {
138  m_hapd2binMap[hapdID - 1] = nhapd;
139  if (chipID == 3) nhapd++;
140  TGraph* mybox = new TGraph(5, globX, globY);
141  mybox->SetName((to_string(hapdID)).c_str());
142  AddBin(mybox);
143  }
144  }
145  ihapd++;
146  if (ihapd == nhapds[iring]) { iring++; ihapd = 0;}
147  }
148  } else std::cout << "Invalid histogram type! use 0 for channel bins or 1 for HAPD bins" << std::endl;
149  SetOption("colz");
150  SetStats(0);
151  GetXaxis()->SetLimits(-115., 115.);
152  GetYaxis()->SetLimits(-115., 115.);
153 }
std::vector< unsigned > m_hapd2binMap
map of bins
int m_type
histogram type

Member Function Documentation

◆ Draw()

void Draw ( Option_t *  option = "")
override

Draw the histogram.

Parameters
optionroot draw option

Definition at line 155 of file ARICHChannelHist.cc.

◆ fillBin() [1/2]

void fillBin ( unsigned  hapdID,
double  weight = 1. 
)

Add entry to bin corresponding to hapd hapdID.

Parameters
hapdIDID number of HAPD module

Definition at line 198 of file ARICHChannelHist.cc.

◆ fillBin() [2/2]

void fillBin ( unsigned  hapdID,
unsigned  chID,
double  weight = 1. 
)

Add entry to bin corresponding to hapd hapdID and channel chID.

Parameters
hapdIDID number of HAPD module
chIDchannel ID (asic channel) or APD ID

Definition at line 177 of file ARICHChannelHist.cc.

◆ fillFromTH1()

void fillFromTH1 ( TH1 *  hist)

Fill the channelHist from the histogram Type 0 channelHist has to be filled with 420*144bin TH1 (each channel) Type 1 channelHist can be filled with 420*144 (channels) or 420*4 (chips), or 420 (HAPDs) bin TH1 Type 2 channelHist can be filled with 420*144 or 420*4 bin TH1 In case histogram has more bins than channelHist bin content is summed up Exampl: histogram with hits/channel can be used to make ChannelHist with hits/hapd.

Parameters
histhistoram

Definition at line 203 of file ARICHChannelHist.cc.

◆ setBinContent() [1/2]

void setBinContent ( unsigned  hapdID,
double  value 
)

Set content of bin corresponding to hapd hapdID.

Parameters
hapdIDID number of HAPD module
valuebin content

Definition at line 193 of file ARICHChannelHist.cc.

◆ setBinContent() [2/2]

void setBinContent ( unsigned  hapdID,
unsigned  chID,
double  value 
)

Set content of bin corresponding to hapd hapdID and channel chID.

Parameters
hapdIDID number of HAPD module
chIDchannel ID (asic channel) or APD ID
valuebin content

Definition at line 185 of file ARICHChannelHist.cc.


The documentation for this class was generated from the following files: