BmnRoot
Loading...
Searching...
No Matches
BmnHistGem.cxx
Go to the documentation of this file.
1#include "BmnHistGem.h"
2
3#include "BmnGemStripDigit.h"
4#include "BmnGemStripStationSet.h"
5#include "BmnRawDataDecoder.h"
6
7#include <algorithm>
8#include <numeric>
9
10BmnHistGem::BmnHistGem(TString title, TString path, Int_t PeriodID, BmnSetup stp)
11 : BmnHist(PeriodID, stp)
12{
13 sumMods = 0;
14 maxLayers = 0;
15 refPath = path;
16 fTitle = title;
17 fName = title + "_cl";
18 TString name;
19 unique_ptr<BmnGemStripStationSet> gemStationSet = BmnGemStripStationSet::Create(fPeriodID, fSetup);
20 for (Int_t iStation = 0; iStation < gemStationSet->GetNStations(); iStation++) {
21 vector<vector<TH1I*>> rowGEM;
22 BmnGemStripStation* st = gemStationSet->GetGemStation(iStation);
23 sumMods += st->GetNModules();
24 for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
25 vector<TH1I*> colGEM;
26 BmnGemStripModule* mod = st->GetModule(iModule);
27 if ((Int_t)maxLayers < mod->GetNStripLayers())
28 maxLayers = mod->GetNStripLayers();
29 for (Int_t iLayer = 0; iLayer < mod->GetNStripLayers(); iLayer++) {
30 BmnGemStripLayer lay = mod->GetStripLayer(iLayer);
31 name = Form(fTitle + "_Station_%d_module_%d_layer_%d", iStation, iModule, iLayer);
32 TH1I* h = new TH1I(name, name, lay.GetNStrips(), 0, lay.GetNStrips());
33 h->GetXaxis()->SetTitle("Strip Number");
34 h->GetYaxis()->SetTitle("Activation Count");
36 colGEM.push_back(h);
37 }
38 rowGEM.push_back(colGEM);
39 }
40 histGemStrip.push_back(rowGEM);
41 }
42 // Create canvas
43 name = fTitle + "Canvas";
44 canGemStrip = new TCanvas(name, name, PAD_WIDTH * maxLayers, PAD_HEIGHT * sumMods);
45 canGemStrip->Divide(maxLayers, sumMods, 0.01 / maxLayers, 0.01 / sumMods);
46 Int_t modCtr = 0; // filling GEM Canvas' pads
47 canStripPads.resize(sumMods * maxLayers);
48 Names.resize(sumMods * maxLayers);
49 for (Int_t iStation = 0; iStation < gemStationSet->GetNStations(); iStation++) {
50 BmnGemStripStation* st = gemStationSet->GetGemStation(iStation);
51 for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
52 BmnGemStripModule* mod = st->GetModule(iModule);
53 for (Int_t iLayer = 0; iLayer < mod->GetNStripLayers(); iLayer++) {
54 PadInfo* p = new PadInfo();
55 p->opt = "";
56 p->current = histGemStrip[iStation][iModule][iLayer];
57 Int_t iPad = modCtr * maxLayers + iLayer;
58 canStripPads[iPad] = p;
59 canGemStrip->GetPad(iPad + 1)->SetGrid();
60 Names[iPad] = canStripPads[iPad]->current->GetName();
61 }
62 modCtr++;
63 }
64 }
65}
66
68{
69 delete canGemStrip;
70 if (fDir)
71 return;
72 for (auto pad : canStripPads)
73 delete pad;
74}
75
76void BmnHistGem::Register(THttpServer* serv)
77{
78 fServer = serv;
79 fServer->Register("/", this);
80 TString path = "/" + fTitle + "/";
81 fServer->Register(path, canGemStrip);
82 // for (auto row : histGemStrip)
83 // for (auto col : row)
84 // for (auto el : col)
85 // fServer->Register(path, el);
86 fServer->SetItemField(path, "_monitoring", "2000");
87 fServer->SetItemField(path, "_layout", "grid3x3");
88 TString cmd = "/" + fName + "/->Reset()";
89 TString cmdTitle = path + "Reset";
90 // fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
91 fServer->Restrict(cmdTitle.Data(), "visible=shift");
92 fServer->Restrict(cmdTitle.Data(), "allow=shift");
93 fServer->Restrict(cmdTitle.Data(), "deny=guest");
94 cmd = "/" + fName + "/->SetRefRun(%arg1%)";
95 cmdTitle = path + "SetRefRun";
96 fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
97 // fServer->Restrict(cmdTitle.Data(), "deny=guest");
98}
99
100void BmnHistGem::SetDir(TFile* outFile, TTree* recoTree)
101{
102 frecoTree = recoTree;
103 fDir = NULL;
104 if (outFile != NULL)
105 fDir = outFile->mkdir(fTitle + "_hists");
106 for (auto row : histGemStrip)
107 for (auto col : row)
108 for (auto el : col)
109 el->SetDirectory(fDir);
110}
111
113{
114 BmnHist::DrawRef(canGemStrip, &canStripPads);
115}
116
118{
119 TClonesArray* gemDigits = fDigiArrays->gem;
120 if (!gemDigits)
121 return;
122 for (Int_t digIndex = 0; digIndex < gemDigits->GetEntriesFast(); digIndex++) {
123 BmnGemStripDigit* gs = static_cast<BmnGemStripDigit*>(gemDigits->At(digIndex));
124 Int_t module = gs->GetModule();
125 Int_t station = gs->GetStation();
126 Int_t layer = gs->GetStripLayer();
127 Int_t gemStrip = gs->GetStripNumber();
128 histGemStrip[station][module][layer]->Fill(gemStrip);
129 }
130}
131
133{
134 if (refID != id) {
135 TString FileName = Form("bmn_run%04d_hist.root", id);
136 printf("SetRefRun: %s\n", FileName.Data());
137 refRunName = FileName;
138 refID = id;
139 BmnHist::LoadRefRun(refID, refPath + FileName, fTitle, canStripPads, Names);
140 DrawBoth();
141 }
142
143 return kBMNSUCCESS;
144}
145
147{
148 for (auto pad : canStripPads) {
149 if (pad)
150 if (pad->ref) {
151 delete pad->ref;
152 pad->ref = nullptr;
153 }
154 }
155 refID = 0;
156}
157
159{
160 for (auto row : histGemStrip)
161 for (auto col : row)
162 for (auto el : col)
163 el->Reset();
164}
#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
BmnGemStripLayer & GetStripLayer(Int_t num)
static unique_ptr< BmnGemStripStationSet > Create(Int_t period, Int_t stp=0)
BmnGemStripModule * GetModule(Int_t module_num)
void Register(THttpServer *serv)
void SetDir(TFile *outFile=NULL, TTree *recoTree=NULL)
void FillFromDigi(DigiArrays *fDigiArrays)
virtual ~BmnHistGem()
void ClearRefRun()
void DrawBoth()
BmnHistGem(TString title, TString path="", Int_t periodID=7, BmnSetup setup=kBMNSETUP)
BmnStatus SetRefRun(Int_t id)
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()
TClonesArray * gem
Definition DigiArrays.h:126
Storage for pad content and it's options.
Definition PadInfo.h:20
string opt
Definition PadInfo.h:88
TH1 * current
Definition PadInfo.h:78