8#include "BmnDchTrack.h"
10#include "BmnGemStripHit.h"
12#include "BmnSiliconHit.h"
14#include "CbmBaseHit.h"
15#include "BmnGlobalTrack.h"
16#include "CbmStsTrack.h"
18#include "FairRunAna.h"
19#include "TClonesArray.h"
23#include "BmnHistManager.h"
24#include "BmnSiBTHit.h"
33 fDstEventHeader(nullptr),
42 printf(
"BmnProfQa::Init()");
49 fTicksLastUpdate = chrono::system_clock::now();
64 printf(
"BmnProfQa::Init() finish");
75 chrono::time_point<chrono::system_clock> now = chrono::system_clock::now();
76 chrono::seconds time = chrono::duration_cast<chrono::seconds>(now - fTicksLastUpdate);
79 if ((time > fTimeToUpdate) || (fNItersSinceUpdate > fNItersToUpdate)) {
82 printf(
"Draw! iters %d\n", fNItersSinceUpdate);
83 fTicksLastUpdate = now;
84 fNItersSinceUpdate = 0;
100void BmnProfQa::ReadDataBranches() {
101 FairRootManager* ioman = FairRootManager::Instance();
102 if (
nullptr == ioman) Fatal(
"Init",
"BmnRootManager is not instantiated");
103 fDstEventHeader =
static_cast<DstEventHeader*
> (ioman->GetObject(
"DstEventHeader."));
105 if (fInnerTrackerSetup[
kSiProf]) {
107 fProfDigits = (TClonesArray*) ioman->GetObject(
"BmnProfDigit");
108 printf(
"fProfDigits %p\n", fProfDigits);
109 fProfDetector = make_unique<BmnSiProfStationSet>(fConfigProf);
111 kSiProf,
static_cast<void*
> (fProfDetector.get()));
114 printf(
"\nBRANCHES READ\n\n");
117void BmnProfQa::CreateHistograms() {
119 const Int_t n_strips(32);
122 for (Short_t iSt = 0; iSt < fProfDetector->GetNStations(); ++iSt) {
123 auto* st = fProfDetector->GetStation(iSt);
124 for (Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
125 auto* mod = st->GetModule(iModule);
126 for (Int_t iLayer = 0; iLayer < mod->GetNStripLayers(); iLayer++) {
130 CreateH1(name,
"Strip #",
"Count", n_strips, 0, n_strips);
132 CreateH1(name +
"_sig",
"Signal",
"Count", MaxSig, -MaxSig, 0);
133 CreateH2(name +
"_pedestals",
"Strip #",
"Signal",
"", n_strips, 0, n_strips, MaxSig, -MaxSig, 0);
135 CreateH1(name +
"_sig",
"Signal",
"Count", MaxSig, 0, MaxSig);
136 CreateH2(name +
"_pedestals",
"Strip #",
"Signal",
"", n_strips, 0, n_strips, MaxSig, 0, MaxSig);
138 CreateH1(name +
"_mean",
"Strip #",
"Count", n_strips, 0, n_strips);
142 CreateH2(name2d,
"Strip X",
"Strip Y",
"", n_strips, 0, n_strips, n_strips, 0, n_strips);
173 printf(
"\nHISTOGRAMS CREATED!\n\n");
177void BmnProfQa::ProcessGlobal() {
188 const Int_t n_strips(32);
191 vector<vector < Int_t >> x_hit(fProfDetector->GetNStations(), vector(n_strips, 0));
192 vector<vector < Int_t >> y_hit(fProfDetector->GetNStations(), vector(n_strips, 0));
194 for (Int_t iDig = 0; iDig < fProfDigits->GetEntriesFast(); ++iDig) {
202 fHM->
H1(name)->Fill(strip, abs(signal));
203 fHM->
H1(name)->SetBinError(strip, 0);
204 fHM->
H1(name +
"_sig")->Fill(signal);
206 fHM->
H2(name +
"_pedestals")->Fill(strip, signal);
210 y_hit[iSt][strip] = -signal;
212 x_hit[iSt][strip] = signal;
214 for (Short_t iSt = 0; iSt < fProfDetector->GetNStations(); ++iSt) {
216 for (
size_t iX = 0;
iX < n_strips;
iX++)
217 for (
size_t iY = 0;
iY < n_strips;
iY++)
218 if (x_hit[iSt][
iX] && y_hit[iSt][
iY])
219 fHM->
H2(name2d)->Fill(
iX,
iY, abs(x_hit[iSt][
iX]) + abs(y_hit[iSt][
iY]));
239 printf(
"Reset Prof QA\n");
246 string path = string(
"/") + fName.Data() +
"_cmd/";
247 string cmd = string(
"/") + fName.Data() +
"/->ResetProf()";
248 string cmdTitle = path +
"ResetProf";
249 fServer->RegisterCommand(cmdTitle.data(), cmd.data(),
"button;");
Global function to define the track acceptance. Used in QA.
static void GetSystemNameCaps(DetectorId det, TString &name)
void ResetHists()
Reset all histograms.
TH2 * H2(const TString &name) const
Return pointer to TH2 histogram.
TH1 * H1(const TString &name) const
Return pointer to TH1 histogram.
static char * HistNameProfDigit(TString &detName, Short_t iSt, Short_t iMod, Short_t iLayer)
static char * HistNameProfHits(TString &detName, Short_t iSt)
virtual void Exec(Option_t *opt)
Derived from FairTask.
virtual ~BmnProfQa()
Destructor.
virtual void Finish()
Derived from FairTask.
virtual InitStatus Init()
Derived from FairTask.
void CreateH1(const string &name, const string &xTitle, const string &yTitle, Int_t nofBins, Double_t minBin, Double_t maxBin)
BmnSimulationReport * fReport
void CreateH2(const string &name, const string &xTitle, const string &yTitle, const string &zTitle, Int_t nofBinsX, Double_t minBinX, Double_t maxBinX, Int_t nofBinsY, Double_t minBinY, Double_t maxBinY)
void SetMonitorMode(const Bool_t mm)
void SetObjServer(THttpServer *s)
void Register(string path)
void SetHM(BmnHistManager *hm)
void Create(BmnHistManager *histManager, const string &outputDir)
Main function which creates report data.
void AddStationSet(DetectorId id, void *ss)
Double_t GetStripSignal()
void SetDefaultDrawStyle()
string FindAndReplace(const string &name, const string &oldSubstr, const string &newSubstr)
vector< string > Split(const string &name, char delimiter)