1#ifndef BMNONLINEDECODER_H
2#define BMNONLINEDECODER_H 1
8#include "TClonesArray.h"
12#include "TObjString.h"
13#include "TServerSocket.h"
19#include "BmnEventHeader.h"
23#include <BmnRawDataDecoder.h>
25#define RAW_DECODER_SOCKET_PORT 5555
26#define RUN_FILE_CHECK_PERIOD 1e5
27#define INOTIF_BUF_LEN (255 * (sizeof(struct inotify_event) + 255))
28#define MIN_REMNANT_LEN 300 * 1024
29#define MPD_EVENT_HEAD_WORDS_OLD 3
30#define MPD_EVENT_HEAD_WORDS 2
32#define STRIP_COMP_COLS 2
33#define PAD_WIDTH_SIL 1120
34#define PAD_HEIGHT_SIL 630
70 uint32_t periodID = 8,
73 bool FillOccupancy =
true);
76 template<
typename SST>
77 static void InitCanvas(TString DetName,
78 unique_ptr<SST>& stationSet,
80 vector<PadInfo*>& canStripPads,
81 vector<vector<vector<TH1F*>>>* histStrip)
87 for (Int_t iStation = 0; iStation < stationSet->GetNStations(); iStation++) {
88 vector<vector<TH1F*>> rowGEM;
89 auto* st = stationSet->GetStation(iStation);
90 sumMods += st->GetNModules();
91 for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
93 auto* mod = st->GetModule(iModule);
97 if (maxLayers < mod->GetNStripLayers())
98 maxLayers = mod->GetNStripLayers();
100 for (Int_t iLayer = 0; iLayer < (isSil ? 2 : mod->GetNStripLayers()); iLayer++) {
101 auto lay = mod->GetStripLayer(iLayer);
102 if (isSil && iStation != 0) {
103 auto& lay1 = mod->GetStripLayer(iLayer * 2);
104 auto& lay2 = mod->GetStripLayer(iLayer * 2 + 1);
105 if (lay1.GetLastStripNumber() > lay2.GetLastStripNumber())
110 TString
name = Form(
"%s_%d_Station_%d_module_%d_layer_%d", DetName.Data(), iCol, iStation,
113 TString title = Form(
"Station_%d_module_%d_layer_%d", iStation, iModule, iLayer);
116 h =
new TH1F(name, title, lay.GetLastStripNumber() + 1, 0, lay.GetLastStripNumber() + 1);
118 h =
new TH1F(name, title, lay.GetNStrips(), 0, lay.GetNStrips());
119 h->GetXaxis()->SetTitle(
"Strip Number");
120 h->GetYaxis()->SetTitle(
"Activation Count");
124 rowGEM.push_back(colGEM);
126 histStrip[iCol].push_back(rowGEM);
130 TString
name = DetName +
"Canvas";
132 canStrip->Divide(maxLayers, sumMods, 0.01 / maxLayers, 0.01 / sumMods);
134 canStripPads.resize(sumMods * maxLayers,
nullptr);
135 for (Int_t iStation = 0; iStation < stationSet->GetNStations(); iStation++) {
136 auto* st = stationSet->GetStation(iStation);
137 for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
138 auto* mod = st->GetModule(iModule);
139 for (Int_t iLayer = 0; iLayer < (isSil ? 2 : mod->GetNStripLayers()); iLayer++) {
140 Int_t iPad = modCtr * maxLayers + iLayer;
142 p->
current = histStrip[0][iStation][iModule][iLayer];
143 p->
ref = histStrip[1][iStation][iModule][iLayer];
144 p->
ref->SetLineColor(kRed);
146 canStripPads[iPad] = p;
147 canStrip->GetPad(iPad + 1)->SetGrid();
154 template<
typename DigiType>
155 static void FillHists(vector<vector<vector<TH1F*>>>& hist_vec, TClonesArray* digs,
bool set_bin_content =
false)
157 for (Int_t iDig = 0; iDig < digs->GetEntriesFast(); iDig++) {
158 DigiType* dig = (DigiType*)digs->UncheckedAt(iDig);
159 if (!(dig->IsGoodDigit()))
161 Int_t
module = dig->GetModule();
162 Int_t station = dig->GetStation();
163 Int_t layer = dig->GetStripLayer();
164 Int_t strip = dig->GetStripNumber();
165 if (set_bin_content) {
166 hist_vec[station][module][layer]->SetBinContent(strip, dig->GetStripNoise());
168 hist_vec[station][module][layer]->Fill(strip);
180 void ProcessFileRun(TString digiName, UInt_t timeLimit =
WAIT_LIMIT);
181 static TString WatchNext(TString dirname, TString filename, Int_t cycleWait);
182 static TString WatchNext(Int_t inotifDir, Int_t cycleWait);
183 static Int_t GetRunIdFromName(TString name);
190 map<DetectorId, bool> fDetectorSetup;
208 bool _do_process_stat_ev;
209 bool _do_process_norm_ev;
211 uint32_t _digi_socket;
static void SetHistStyleTH1(TH1 *h)
uint32_t GetPeriodID() const
void SetProcessNormEvents(bool val=true)
BmnStatus BatchDirectoryToSocket(TString dirname)
void SetPeriodID(uint32_t v)
static void StripView(TString OrigFileName, TString TestFileName, uint32_t periodID=8, uint32_t runID=0, BmnSetup fSetup=kBMNSETUP, bool FillOccupancy=true)
BmnStatus Decode(TString dirname, TString startFile, Bool_t runCurrent)
void SetBmnSetup(BmnSetup v)
void SetDigiSocket(uint32_t val=RAW_DECODER_SOCKET_PORT)
void SetDetectorSetup(map< DetectorId, bool > setup)
void SetProcessStatEvents(bool val=true)
BmnSetup GetBmnSetup() const
virtual ~BmnOnlineDecoder()
BmnStatus BatchDirectory(TString dirname)
void SetDaqAddress(TString addr)
Storage for pad content and it's options.
#define RAW_DECODER_SOCKET_PORT