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