BmnRoot
Loading...
Searching...
No Matches
BmnHistVsp.cxx
Go to the documentation of this file.
1#include "BmnHistVsp.h"
2
3#include "BmnRawDataDecoder.h"
4#include "BmnVSPDigit.h"
5#include "BmnVSPStationSet.h"
6
7#include <algorithm>
8#include <numeric>
9
10BmnHistVsp::BmnHistVsp(TString title, TString path, Int_t PeriodID, BmnSetup stp)
11 : BmnHist(PeriodID, stp)
12{
13 const double MinTime = -100; // ns
14 const double MaxTime = 2200; // ns
15 const double MaxTimeBins = 200;
16 sumMods = 0;
17 maxLayers = 0;
18 refPath = path;
19 fTitle = title;
20 fName = title + "_cl";
21 TString name;
22 unique_ptr<BmnVSPStationSet> gemStationSet = BmnVSPStationSet::Create(fPeriodID, fSetup);
23 for (Int_t iStation = 0; iStation < 1 /*gemStationSet->GetNStations()*/; iStation++) {
24 vector<vector<TH1I*>> rowGEM;
25 vector<vector<TH1I*>> rowTimes;
26 auto* st = gemStationSet->GetStation(iStation);
27 sumMods += st->GetNModules();
28 for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
29 vector<TH1I*> colGEM;
30 vector<TH1I*> colTimes;
31 auto* mod = st->GetModule(iModule);
32 if ((Int_t)maxLayers < mod->GetNStripLayers())
33 maxLayers = mod->GetNStripLayers();
34 for (Int_t iLayer = 0; iLayer < mod->GetNStripLayers(); iLayer++) {
35 auto& lay = mod->GetStripLayer(iLayer);
36 // Occupancy
37 name = Form(fTitle + "_Station_%d_module_%d_layer_%d", iStation, iModule, iLayer);
38 TH1I* h = new TH1I(name, name, lay.GetNStrips(), 0, lay.GetNStrips());
39 h->GetXaxis()->SetTitle("Strip Number");
40 h->GetYaxis()->SetTitle("Activation Count");
42 colGEM.push_back(h);
43 // Time since start time
44 name = Form(fTitle + "_Time_Station_%d_module_%d_layer_%d", iStation, iModule, iLayer);
45 TH1I* hTime = new TH1I(name, name, MaxTimeBins, MinTime, MaxTime);
46 hTime->GetXaxis()->SetTitle("Time [ns]");
47 hTime->GetYaxis()->SetTitle("Activation Count");
49 colTimes.push_back(hTime);
50 }
51 rowGEM.push_back(colGEM);
52 rowTimes.push_back(colTimes);
53 }
54 histStripOccup.push_back(rowGEM);
55 histTimes.push_back(rowTimes);
56 }
57 // Create canvas for occupancy
58 Int_t modCtr = 0;
59 name = fTitle + "Canvas";
60 canStripOccup = new TCanvas(name, name, PAD_WIDTH * maxLayers, PAD_HEIGHT * sumMods);
61 canStripOccup->Divide(maxLayers, sumMods, 0.01 / maxLayers, 0.01 / sumMods);
62 canStripPads.resize(sumMods * maxLayers);
63 Names.resize(sumMods * maxLayers);
64 // Create canvas for times
65 name = fTitle + "CanvasTimes";
66 canTimes = new TCanvas(name, name, PAD_WIDTH * maxLayers, PAD_HEIGHT * sumMods);
67 canTimes->Divide(maxLayers, sumMods, 0.01 / maxLayers, 0.01 / sumMods);
68 canTimesPads.resize(sumMods * maxLayers);
69 NamesTimes.resize(sumMods * maxLayers);
70 for (Int_t iStation = 0; iStation < gemStationSet->GetNStations(); iStation++) {
71 auto* st = gemStationSet->GetStation(iStation);
72 for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
73 auto* mod = st->GetModule(iModule);
74 for (Int_t iLayer = 0; iLayer < mod->GetNStripLayers(); iLayer++) {
75 {
76 PadInfo* p = new PadInfo();
77 p->opt = "";
78 p->current = histStripOccup[iStation][iModule][iLayer];
79 Int_t iPad = modCtr * maxLayers + iLayer;
80 canStripPads[iPad] = p;
81 canStripOccup->GetPad(iPad + 1)->SetGrid();
82 Names[iPad] = canStripPads[iPad]->current->GetName();
83 }
84 {
85 PadInfo* p = new PadInfo();
86 p->opt = "";
87 p->current = histTimes[iStation][iModule][iLayer];
88 Int_t iPad = modCtr * maxLayers + iLayer;
89 canTimesPads[iPad] = p;
90 canTimes->GetPad(iPad + 1)->SetGrid();
91 NamesTimes[iPad] = canTimesPads[iPad]->current->GetName();
92 }
93 }
94 modCtr++;
95 }
96 }
97}
98
100{
101 delete canStripOccup;
102 delete canTimes;
103 if (fDir)
104 return;
105 for (auto pad : canStripPads)
106 delete pad;
107 for (auto pad : canTimesPads)
108 delete pad;
109 return;
110}
111
112void BmnHistVsp::Register(THttpServer* serv)
113{
114 fServer = serv;
115 fServer->Register("/", this);
116 TString path = "/" + fTitle + "/";
117 fServer->Register(path, canStripOccup);
118 fServer->Register(path, canTimes);
119 fServer->SetItemField(path, "_monitoring", "2000");
120 fServer->SetItemField(path, "_layout", "grid3x3");
121 TString cmd = "/" + fName + "/->Reset()";
122 TString cmdTitle = path + "Reset";
123 // fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
124 fServer->Restrict(cmdTitle.Data(), "visible=shift");
125 fServer->Restrict(cmdTitle.Data(), "allow=shift");
126 fServer->Restrict(cmdTitle.Data(), "deny=guest");
127 cmd = "/" + fName + "/->SetRefRun(%arg1%)";
128 cmdTitle = path + "SetRefRun";
129 fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
130 // fServer->Restrict(cmdTitle.Data(), "deny=guest");
131 cmdTitle = path + TString("Reset");
132 fServer->RegisterCommand(cmdTitle, TString("/") + fName.Data() + "/->Reset()", "button;");
133}
134
135void BmnHistVsp::SetDir(TFile* outFile, TTree* recoTree)
136{
137 frecoTree = recoTree;
138 fDir = NULL;
139 if (outFile != NULL)
140 fDir = outFile->mkdir(fTitle + "_hists");
141 for (auto row : histStripOccup)
142 for (auto col : row)
143 for (auto el : col)
144 el->SetDirectory(fDir);
145 for (auto row : histTimes)
146 for (auto col : row)
147 for (auto el : col)
148 el->SetDirectory(fDir);
149}
150
152{
153 BmnHist::DrawRef(canStripOccup, &canStripPads);
154 BmnHist::DrawRef(canTimes, &canTimesPads);
155}
156
158{
159 TClonesArray* gemDigits = fDigiArrays->vsp;
160 if (!gemDigits)
161 return;
162 for (Int_t digIndex = 0; digIndex < gemDigits->GetEntriesFast(); digIndex++) {
163 BmnVSPDigit* gs = static_cast<BmnVSPDigit*>(gemDigits->At(digIndex));
164 Int_t module = gs->GetModule();
165 Int_t station = gs->GetStation();
166 Int_t layer = gs->GetStripLayer();
167 Int_t gemStrip = gs->GetStripNumber();
168 double time_since_beg = gs->GetTimeSinceBegin_ns();
169 histStripOccup[station][module][layer]->Fill(gemStrip);
170 histTimes[station][module][layer]->Fill(time_since_beg);
171 }
172}
173
175{
176 if (refID != id) {
177 TString FileName = Form("bmn_run%04d_hist.root", id);
178 printf("SetRefRun: %s\n", FileName.Data());
179 refRunName = FileName;
180 refID = id;
181 BmnHist::LoadRefRun(refID, refPath + FileName, fTitle, canStripPads, Names);
182 BmnHist::LoadRefRun(refID, refPath + FileName, fTitle, canTimesPads, NamesTimes);
183 DrawBoth();
184 }
185
186 return kBMNSUCCESS;
187}
188
190{
191 for (auto pad : canStripPads) {
192 if (pad)
193 if (pad->ref) {
194 delete pad->ref;
195 pad->ref = nullptr;
196 }
197 }
198 for (auto pad : canTimesPads) {
199 if (pad)
200 if (pad->ref) {
201 delete pad->ref;
202 pad->ref = nullptr;
203 }
204 }
205 refID = 0;
206}
207
209{
210 for (auto row : histStripOccup)
211 for (auto col : row)
212 for (auto el : col)
213 el->Reset();
214 for (auto row : histTimes)
215 for (auto col : row)
216 for (auto el : col)
217 el->Reset();
218}
#define PAD_WIDTH
Definition BmnAdcQA.cxx:3
#define PAD_HEIGHT
Definition BmnAdcQA.cxx:4
BmnStatus
Definition BmnEnums.h:24
@ kBMNSUCCESS
Definition BmnEnums.h:25
BmnSetup
Definition BmnEnums.h:89
virtual ~BmnHistVsp()
void DrawBoth()
void FillFromDigi(DigiArrays *fDigiArrays)
void ClearRefRun()
BmnStatus SetRefRun(Int_t id)
BmnHistVsp(TString title, TString path="", Int_t periodID=9, BmnSetup setup=kBMNSETUP)
void Register(THttpServer *serv)
void SetDir(TFile *outFile=NULL, TTree *recoTree=NULL)
Int_t fPeriodID
Definition BmnHist.h:94
TTree * frecoTree
Definition BmnHist.h:88
Int_t refID
Definition BmnHist.h:92
TString refPath
Definition BmnHist.h:90
TDirectory * fDir
Definition BmnHist.h:89
static void DrawRef(unique_ptr< TCanvas > &canGemStrip, vector< PadInfo * > *canGemStripPads)
Definition BmnHist.cxx:15
BmnSetup fSetup
Definition BmnHist.h:95
static void SetHistStyleTH1(TH1 *h)
Definition BmnHist.cxx:195
TString refRunName
Definition BmnHist.h:91
static BmnStatus LoadRefRun(Int_t refID, TString FullName, TString fTitle, vector< PadInfo * > canPads, vector< TString > Names)
Definition BmnHist.cxx:100
THttpServer * fServer
Definition BmnHist.h:87
Int_t GetStripNumber()
Int_t GetStripLayer()
Int_t GetStation()
Double_t GetTimeSinceBegin_ns() const
Definition BmnVSPDigit.h:16
static unique_ptr< BmnVSPStationSet > Create(Int_t period, Int_t stp=0)
TClonesArray * vsp
Definition DigiArrays.h:128
Storage for pad content and it's options.
Definition PadInfo.h:20
string opt
Definition PadInfo.h:88
TH1 * current
Definition PadInfo.h:78