BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnHistECAL.cxx
Go to the documentation of this file.
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6
7/*
8 * File: BmnHistEcal.cxx
9 * Author: ilnur
10 *
11 * Created on March 17, 2017, 2:48 PM
12 */
13
14#include "BmnHistECAL.h"
15
16#include "TGaxis.h"
17
19 : BmnHist()
20{
21 fTitle = title;
22 fName = title + "_cl";
24 TString name;
25 name = fTitle + "_h2d_Grid";
26 h2d_grid = new TH2D(name, fTitle + " Grid", 32, 0, 32, 32, 0, 32);
27 h2d_grid->GetXaxis()->SetTitle("iX");
28 h2d_grid->GetYaxis()->SetTitle("iY");
30 h2d_grid->GetZaxis()->SetNoExponent(kTRUE);
31 name = fTitle + "_h2d_Profile";
32 h2d_profile = new TH2D(name, fTitle + " Profile", 1200, 0, 1200, 1200, 0, 1200);
33 h2d_profile->GetXaxis()->SetTitle("X");
34 h2d_profile->GetYaxis()->SetTitle("Y");
36 name = fTitle + "_X_Amplitude";
37 hx = new TH1D(name, fTitle + " X Amplitude", 1200, 0, 1200);
38 hx->GetYaxis()->SetNoExponent(kTRUE);
39 hx->GetYaxis()->SetMoreLogLabels(kFALSE);
40 name = fTitle + "_Y_Amplitude";
41 hy = new TH1D(name, fTitle + " Y Amplitude", 1200, 0, 1200);
42 hy->GetYaxis()->SetNoExponent(kFALSE);
43 hx->GetYaxis()->SetMoreLogLabels(kTRUE);
44 name = fTitle + "CanvasAmplitudes";
45 canAmps = new TCanvas(name, name, PAD_WIDTH * ECAL_ROWS, PAD_HEIGHT * ECAL_COLS);
46 canAmps->Divide(ECAL_ROWS, ECAL_COLS);
49
50 PadInfo* p = new PadInfo();
51 p->current = hx;
52 canAmpsPads[0] = p;
53 PadInfo* p1 = new PadInfo();
54 p1->current = hy;
55 canAmpsPads[1] = p1;
56
57 for (Int_t rowIndex = 0; rowIndex < ECAL_ROWS; rowIndex++) {
58 for (Int_t colIndex = 0; colIndex < ECAL_COLS; colIndex++) {
59 Int_t iPad = rowIndex * ECAL_COLS + colIndex;
60 canAmps->GetPad(iPad + 1)->SetGrid();
61 NamesAmps[iPad] = canAmpsPads[iPad]->current->GetName();
62 TH1* h = canAmpsPads[iPad]->current;
63 h->GetXaxis()->SetTitle("Coordinate");
64 h->GetYaxis()->SetTitle("Amplitude");
67 }
68 }
69}
70
72{
73 delete canAmps;
74 if (fDir != NULL)
75 return;
76 delete h2d_grid;
77 delete h2d_profile;
78 delete hx;
79 delete hy;
80 for (auto pad : canAmpsPads)
81 delete pad;
82}
83
85{
86 fServer = serv;
87 fServer->Register("/", this);
88 TString path = "/" + fTitle + "/";
89 fServer->Register(path, h2d_grid);
90 fServer->Register(path, h2d_profile);
91 fServer->Register(path, canAmps);
92 TString cmd = "/" + fName + "/->Reset()";
93 fServer->SetItemField(path.Data(), "_monitoring", "2000");
94 fServer->SetItemField(path.Data(), "_layout", "grid3x3");
95 TString cmdTitle = path + "Reset";
96 fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
97 fServer->Restrict(cmdTitle, "visible=shift");
98 fServer->Restrict(cmdTitle, "allow=shift");
99 cmd = "/" + fName + "/->SetRefRun(%arg1%)";
100 cmdTitle = path + "SetRefRun";
101 fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
102}
103
104void BmnHistECAL::SetDir(TFile* outFile = NULL, TTree* recoTree = NULL)
105{
106 frecoTree = recoTree;
107 fDir = NULL;
108 if (outFile != NULL)
109 fDir = outFile->mkdir(fTitle + "_hists");
110 h2d_grid->SetDirectory(fDir);
111 h2d_profile->SetDirectory(fDir);
112 hx->SetDirectory(fDir);
113 hy->SetDirectory(fDir);
114}
115
117{
119 return;
120}
121
123{
124 TClonesArray* digits = fDigiArrays->ecal;
125 if (!digits)
126 return;
127 Double_t xAmp = 0;
128 Double_t yAmp = 0;
129 Double_t Amp = 0;
130 for (Int_t iDig = 0; iDig < digits->GetEntriesFast(); iDig++) {
131 BmnECALDigit* dig = (BmnECALDigit*)digits->At(iDig);
132 Int_t ix = dig->GetIX();
133 Int_t iy = dig->GetIY();
134 Double_t amp = dig->GetAmp();
135 Amp += amp;
136 h2d_grid->Fill(ix, iy, dig->GetAmp());
137 xAmp += amp * dig->GetX();
138 yAmp += amp * dig->GetY();
139 }
140 if (Amp == 0)
141 return;
142 xAmp /= Amp;
143 yAmp /= Amp;
144 h2d_profile->Fill(xAmp, yAmp, Amp);
145 hx->Fill(xAmp, Amp);
146 hy->Fill(yAmp, Amp);
147}
148
150{
151 TString FileName = Form("bmn_run%04d_hist.root", id);
152 printf("SetRefRun: %s\n", FileName.Data());
153 if (refRunName != FileName) {
154 refRunName = FileName;
155 refID = id;
157 DrawBoth();
158 }
159 return kBMNSUCCESS;
160}
161
163{
164 for (auto pad : canAmpsPads) {
165 if (pad->ref)
166 delete pad->ref;
167 pad->ref = NULL;
168 }
169 refID = 0;
170}
171
173{
174 h2d_grid->Reset();
175 h2d_profile->Reset();
176 hx->Reset();
177 hy->Reset();
178}
BmnStatus
Define status code.
Definition BmnEnums.h:93
@ kBMNSUCCESS
Success.
Definition BmnEnums.h:94
#define ECAL_ROWS
Definition BmnHistECAL.h:19
#define ECAL_COLS
Definition BmnHistECAL.h:20
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
char * Form(const char *fmt,...)
Float_t GetX() const
Float_t GetY() const
Float_t GetAmp() const
UChar_t GetIX() const
UChar_t GetIY() const
void ClearRefRun()
void FillFromDigi(DigiArrays *fDigiArrays)
BmnStatus SetRefRun(Int_t id)
vector< PadInfo * > canAmpsPads
Definition BmnHistECAL.h:42
vector< TString > NamesAmps
Definition BmnHistECAL.h:43
BmnHistECAL(TString title, TString path="")
TH2D * h2d_grid
Definition BmnHistECAL.h:37
TCanvas * canAmps
Definition BmnHistECAL.h:41
TH2D * h2d_profile
Definition BmnHistECAL.h:38
void SetDir(TFile *outFile, TTree *recoTree)
virtual ~BmnHistECAL()
void Register(THttpServer *serv)
THttpServer * fServer
Definition BmnHist.h:87
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
TTree * frecoTree
Definition BmnHist.h:88
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
BmnHist(Int_t periodID=7, BmnSetup setup=kBMNSETUP)
Definition BmnHist.cxx:3
TClonesArray * ecal
Definition DigiArrays.h:138
Storage for pad content and it's options.
Definition PadInfo.h:20
TH1 * current
Definition PadInfo.h:78
void SetNoExponent(Bool_t noExponent=kTRUE)
static void SetMaxDigits(Int_t maxd=5)
TAxis * GetXaxis()
TAxis * GetYaxis()
virtual void SetTitle(const char *title="")
TString fTitle
TString fName
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
friend friend class TClonesArray
const char * Data() const