1#ifndef BMNONLINEDECODER_H
2#define BMNONLINEDECODER_H 1
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>
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());
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];
146 canStripPads[iPad] = p;
154 template<
typename DigiType>
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);
#define ClassDef(name, id)
char * Form(const char *fmt,...)
BmnStatus
Define status code.
static void SetHistStyleTH1(TH1 *h)
static void FillHists(vector< vector< vector< TH1F * > > > &hist_vec, TClonesArray *digs, bool set_bin_content=false)
uint32_t GetPeriodID() const
BmnStatus InitDecoder(uint32_t runID)
static TString WatchNext(TString dirname, TString filename, Int_t cycleWait)
void SetProcessNormEvents(bool val=true)
BmnStatus BatchDirectoryToSocket(TString dirname)
BmnStatus ConnectDigiSocket()
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 ProcessFileRun(TString digiName, UInt_t timeLimit=WAIT_LIMIT)
void SetDigiSocket(uint32_t val=RAW_DECODER_SOCKET_PORT)
void SetDetectorSetup(map< DetectorId, bool > setup)
static Int_t GetRunIdFromName(TString name)
void SetProcessStatEvents(bool val=true)
BmnStatus StartNewRun(uint32_t runID)
BmnSetup GetBmnSetup() const
static TString WatchNext(Int_t inotifDir, Int_t cycleWait)
map< DetectorId, bool > fDetectorSetup
virtual ~BmnOnlineDecoder()
BmnDataReceiver * dataReceiver
BmnStatus InitDecoder(TString)
BmnStatus BatchDirectory(TString dirname)
static void InitCanvas(TString DetName, unique_ptr< SST > &stationSet, TCanvas *&canStrip, vector< PadInfo * > &canStripPads, vector< vector< vector< TH1F * > > > *histStrip)
void SetDaqAddress(TString addr)
BmnStatus InitDecoder(string)
BmnRawDataDecoder * rawDataDecoder
BmnStatus ConnectDataSocket()
Storage for pad content and it's options.
virtual void SetLineColor(Color_t lcolor)
virtual void SetTitle(const char *title="")
Int_t GetEntriesFast() const
TObject * UncheckedAt(Int_t i) const
friend friend class TClonesArray
void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0) override
TVirtualPad * GetPad(Int_t subpadnumber) const override
const char * Data() const
virtual void SetGrid(Int_t valuex=1, Int_t valuey=1)=0
#define RAW_DECODER_SOCKET_PORT