8 #include <utl/String.h>
9 #include <utl/UTCDateTime.h>
10 #include <evt/Event.h>
11 #include <sevt/SEvent.h>
12 #include <sevt/Header.h>
13 #include <sevt/PMTCalibData.h>
14 #include <sevt/Station.h>
16 #include <det/Detector.h>
17 #include <sdet/SDetector.h>
18 #include <sdet/Station.h>
24 #include <TPaveText.h>
27 #include <boost/format.hpp>
33 using namespace boost;
35 using namespace SdCalibPlotterOG;
38 namespace SdCalibPlotterOG {
53 pt.SetFillColor(kWhite);
57 pt.AddText(os.str().c_str());
59 os <<
"Station: " << station.
GetId();
60 pt.AddText(os.str().c_str());
63 TText*
const rt = pt.AddText(os.str().c_str());
65 rt->SetTextColor(kRed);
68 pt.AddText(os.str().c_str());
77 fDrawHistograms =
true;
78 fDrawBaselines =
true;
79 fDrawFADCTraces =
true;
80 fDrawVEMTraces =
true;
82 fROOTFile =
new TFile((fFilename +
".root").c_str(),
"recreate", fFilename.c_str(), 9);
85 const double scale = 2.5;
86 gROOT->SetStyle(
"Plain");
87 gROOT->SetBatch(
true);
88 gStyle->SetPalette(1, 0);
90 gStyle->SetNumberContours(99);
91 gStyle->SetLabelFont(12,
"XYZ");
92 gStyle->SetLabelSize(0.03*scale,
"XYZ");
93 gStyle->SetTitleFont(12,
"XYZ");
94 gStyle->SetTitleSize(0.03*scale,
"XYZ");
95 gStyle->SetStripDecimals(
false);
96 TGaxis::SetMaxDigits(5);
97 gStyle->SetLineStyleString(11,
"3 8");
99 gStyle->SetPaperSize(TStyle::kA4);
100 gStyle->SetTitlePS(
"Offline SdCalibrator");
115 const auto& sEvent =
event.GetSEvent();
119 const auto eventId = sEvent.GetHeader().GetId();
121 bool inEventDir =
false;
123 const auto eventDirName = (format(
"Event_%04d") % eventId).str();
125 for (
const auto& station : sEvent.StationsRange()) {
126 if (!station.HasCalibData())
131 inEventDir = fROOTFile->mkdir(eventDirName.c_str());
132 fROOTFile->cd(eventDirName.c_str());
134 const int sId = station.GetId();
135 const auto& dStation = det::Detector::GetInstance().GetSDetector().GetStation(sId);
138 if (fDrawHistograms) {
139 const auto canvasName = (format(
"Station_%04d_Histograms") % sId).str();
140 TCanvas canvas(canvasName.c_str(), canvasName.c_str(), 720, 1000);
141 HistoView::DividePage(canvas);
148 for (
int p = 0;
p < 3; ++
p) {
149 const int pmtId =
p + firstPMT;
150 const auto& pmt = station.GetPMT(pmtId);
154 muPeakView[
p].
Draw(dStation, station, pmt,
p+1);
158 muChargeView[
p].
Draw(dStation, station, pmt,
p+1);
162 muShapeView[
p].
Draw(dStation, pmt,
p+1, calibVersion);
166 baselineView[
p].
Draw(dStation, pmt,
p+1);
171 TPaveText pt(0,0.1,0.5,0.9,
"br");
172 pt.SetTextSize(0.13);
177 canvas.Write(canvasName.c_str());
179 canvas.Print((fFilename +
"_Histograms.pdf" + fMultipage).c_str(),
"pdf");
183 if (fDrawBaselines) {
184 const auto canvasName = (format(
"Station_%04d_Baselines") % sId).str();
185 TCanvas canvas(canvasName.c_str(), canvasName.c_str(), 1500, 1060);
186 BaselineView::DividePage(canvas);
191 for (
int p = 0;
p < 3; ++
p) {
192 const int pmtId =
p + firstPMT;
193 const auto& pmt = station.GetPMT(pmtId);
207 TPaveText pt(0,0.86,1,1,
"br");
208 pt.SetTextSize(0.055);
213 canvas.Write(canvasName.c_str());
215 canvas.Print((fFilename +
"_Baselines.pdf" + fMultipage).c_str(),
"pdf");
219 if (fDrawFADCTraces) {
220 const auto canvasName = (format(
"Station_%04d_FADCTraces") % sId).str();
221 TCanvas canvas(canvasName.c_str(), canvasName.c_str(), 1500, 1060);
222 FADCTraceView::DividePage(canvas);
227 for (
int p = 0;
p < 3; ++
p) {
228 const int pmtId =
p + firstPMT;
229 const auto& pmt = station.GetPMT(pmtId);
243 TPaveText pt(0,0.86,1,1,
"br");
244 pt.SetTextSize(0.055);
249 canvas.Write(canvasName.c_str());
251 canvas.Print((fFilename +
"_FADCTraces.pdf" + fMultipage).c_str(),
"pdf");
255 if (fDrawVEMTraces) {
256 const auto canvasName = (format(
"Station_%04d_VEMTraces") % sId).str();
257 TCanvas canvas(canvasName.c_str(), canvasName.c_str(), 1500, 1060);
258 VEMTraceView::DividePage(canvas);
263 int stationStart = -1;
264 int stationStop = -1;
265 if (station.HasRecData()) {
266 const auto& stRec = station.GetRecData();
267 stationStart = stRec.GetSignalStartSlot();
268 stationStop = stRec.GetSignalEndSlot();
271 for (
int p = 0;
p < 3; ++
p) {
272 const int pmtId =
p + firstPMT;
273 const auto& pmt = station.GetPMT(pmtId);
276 pmtView[
p].
Draw(pmt, stationStart, stationStop);
280 stationView.
Draw(station);
284 TPaveText pt(0,0.86,1,1,
"br");
285 pt.SetTextSize(0.055);
290 canvas.Write(canvasName.c_str());
292 canvas.Print((fFilename +
"_VEMTraces.pdf" + fMultipage).c_str(),
"pdf");
301 if (!(fRunCounter % 10)) {
311 SdCalibPlotter::Finish()
319 c.Print((fFilename +
"_Histograms.pdf" + fMultipage).c_str(),
"pdf");
321 c.Print((fFilename +
"_Baselines.pdf" + fMultipage).c_str(),
"pdf");
323 c.Print((fFilename +
"_FADCTraces.pdf" + fMultipage).c_str(),
"pdf");
325 c.Print((fFilename +
"_VEMTraces.pdf" + fMultipage).c_str(),
"pdf");
int GetId() const
Get the station Id.
void Draw(const sevt::PMT &pmt)
evt::Header & GetHeader()
void Draw(const sdet::Station &dStation, const sevt::Station &sStation, const sevt::PMT &pmt, const int pmtId)
~SaveCurrentTErrorIgnoreLevel()
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
class to hold data at Station level
std::string AsBinary(const T &number, const int maxBits=8 *sizeof(T), const char separator= ' ', const int stride=4)
converts integer-type numbers into a string of binary representation
void Draw(const sdet::Station &dStation, const sevt::PMT &pmt, const int pmtId, const int calibrationVersion)
sevt::StationCalibData & GetCalibData()
Get calibration data for the station.
void Draw(const sevt::Station &station)
void Draw(const sevt::PMT &pmt, const int stationStart, const int stationStop)
void Draw(const sdet::Station &dStation, const sevt::PMT &pmt, const int pmtId)
ResultFlag
Flag returned by module methods to the RunController.
int GetRejectionStatus() const
static unsigned int GetFirstPMTId()
Id of first pmt in station.
SaveCurrentTErrorIgnoreLevel(const int newLevel)
int GetVersion() const
version of the onboard calibration
void Draw(const sdet::Station &dStation, const sevt::Station &sStation, const sevt::PMT &pmt, const int pmtId)
void Draw(const sevt::PMT &pmt)
void AddHeader(TPaveText &pt, const Event &event, const Station &station, bool addLine=true)