Skip to content

Commit 354cd9d

Browse files
authored
o2-eve: reading root file fix, screenshot size fix, saving data file … (AliceO2Group#9855)
* o2-eve: reading root file fix, screenshot size fix, saving data file together with screenshot * o2-eve: resolution change version 2 * added guard for (old) data files without collision time * clang
1 parent 94e9562 commit 354cd9d

8 files changed

Lines changed: 63 additions & 61 deletions

File tree

EventVisualisation/Base/include/EventVisualisationBase/ConfigurationManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace o2
2424
namespace event_visualisation
2525
{
2626
/// Version of the software
27-
const static std::string o2_eve_version = "1.38";
27+
const static std::string o2_eve_version = "1.40";
2828

2929
/// Configuration Manager allows an easy access to the config file.
3030
///

EventVisualisation/Base/include/EventVisualisationBase/DataSource.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class DataSource
7171
virtual int getRunNumber() const { return 0; }
7272
virtual void setRunNumber(int) {}
7373
virtual std::string getEventName() { return "event"; };
74+
virtual std::string getEventAbsoluteFilePath() { return ""; };
7475
virtual int getFirstTForbit() const { return 0; }
7576
virtual void setFirstTForbit(int) {}
7677
virtual std::string getCollisionTime() const { return "not specified"; }

EventVisualisation/Base/include/EventVisualisationBase/DataSourceOnline.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class DataSourceOnline : public DataSource
6262
int getRunNumber() const override { return this->mRunNumber; }
6363
void setRunNumber(int runNumber) override { this->mRunNumber = runNumber; }
6464
std::string getEventName() override { return mFileWatcher.currentItem(); };
65+
std::string getEventAbsoluteFilePath() override { return mFileWatcher.currentFilePath(); };
6566
int getFirstTForbit() const override { return this->mFirstTForbit; }
6667
void setFirstTForbit(int firstTForbit) override { this->mFirstTForbit = firstTForbit; }
6768
std::string getCollisionTime() const override { return this->mCollisionTime; }

EventVisualisation/DataConverter/src/VisualisationEventROOTSerializer.cxx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,17 @@ bool VisualisationEventROOTSerializer::fromFile(VisualisationEvent& event, std::
207207

208208
// xyz
209209
TNtuple* xyz = (TNtuple*)f.Get("xyz");
210+
if (xyz == nullptr) {
211+
return false;
212+
}
210213

211214
// tracks
212215
TTree* tracks = (TTree*)f.Get("tracks");
216+
if (tracks == nullptr) {
217+
delete xyz;
218+
return false;
219+
}
220+
213221
long track_xyz; // first track point
214222
int track_points; // number of track points
215223
int track_clusters; // number of track clusters
@@ -266,6 +274,12 @@ bool VisualisationEventROOTSerializer::fromFile(VisualisationEvent& event, std::
266274
}
267275

268276
TTree* clusters = (TTree*)f.Get("clusters");
277+
if (clusters == nullptr) {
278+
delete xyz;
279+
delete tracks;
280+
return false;
281+
}
282+
269283
long cluster_xyz;
270284
int cluster_source;
271285
float cluster_time;
@@ -283,6 +297,12 @@ bool VisualisationEventROOTSerializer::fromFile(VisualisationEvent& event, std::
283297

284298
// calorimeters
285299
TTree* calo = (TTree*)f.Get("calo");
300+
if (calo == nullptr) {
301+
delete xyz;
302+
delete tracks;
303+
delete clusters;
304+
return false;
305+
}
286306
int calo_source;
287307
float calo_time;
288308
float calo_energy;
@@ -320,6 +340,7 @@ bool VisualisationEventROOTSerializer::fromFile(VisualisationEvent& event, std::
320340
}
321341
delete calo;
322342
delete tracks;
343+
delete xyz;
323344
delete clusters;
324345
event.afterLoading();
325346
return true;

EventVisualisation/Scripts/.o2eve_config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ screenshot.path: /home/ed/Screenshot
1616
screenshot.logo.o2: /home/ed/alice/O2/EventVisualisation/Scripts/o2.png
1717
screenshot.logo.alice: /home/ed/alice/O2/EventVisualisation/Scripts/alice-white.png
1818
#screenshot.logo.alice: /home/ed/alice/O2/EventVisualisation/Scripts/alice-black.png
19-
screenshot.width: 1000
20-
screenshot.height: 500
19+
screenshot.width: 7680
20+
screenshot.height: 4320
2121
#screenshot.message.line.0: Run number: 520144 <- change/comment it in .o2eve_config
2222
#screenshot.message.line.1: First TF orbit: 1301515 <- change/comment it in .o2eve_config
2323
#screenshot.message.line.2: Date: Tue Jul 5 17:48:51 2022 <- change/comment it in .o2eve_config

EventVisualisation/View/include/EventVisualisationView/Screenshot.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Screenshot
3333
static TASImage* ScaleImage(TASImage* image, UInt_t desiredWidth, UInt_t desiredHeight, const std::string& backgroundColor);
3434

3535
public:
36-
static void perform(std::string fileName, o2::detectors::DetID::mask_t detectorsMask, int runNumber, int firstTFOrbit, std::string collisionTime);
36+
static std::string perform(std::string fileName, o2::detectors::DetID::mask_t detectorsMask, int runNumber, int firstTFOrbit, std::string collisionTime);
3737
};
3838

3939
} // namespace event_visualisation

EventVisualisation/View/src/EventManagerFrame.cxx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,13 @@ void EventManagerFrame::DoScreenshot()
307307
if (!std::filesystem::is_directory(outDirectory)) {
308308
std::filesystem::create_directory(outDirectory);
309309
}
310-
Screenshot::perform(filepath.str(), this->mEventManager->getDataSource()->getDetectorsMask(),
311-
this->mEventManager->getDataSource()->getRunNumber(),
312-
this->mEventManager->getDataSource()->getFirstTForbit(),
313-
this->mEventManager->getDataSource()->getCollisionTime());
314-
310+
std::filesystem::path fileName = Screenshot::perform(filepath.str(), this->mEventManager->getDataSource()->getDetectorsMask(),
311+
this->mEventManager->getDataSource()->getRunNumber(),
312+
this->mEventManager->getDataSource()->getFirstTForbit(),
313+
this->mEventManager->getDataSource()->getCollisionTime());
314+
fileName.replace_extension(std::filesystem::path(mEventManager->getDataSource()->getEventAbsoluteFilePath()).extension());
315+
std::error_code ec;
316+
std::filesystem::copy_file(mEventManager->getDataSource()->getEventAbsoluteFilePath(), fileName, ec);
315317
clearInTick();
316318
}
317319

EventVisualisation/View/src/Screenshot.cxx

Lines changed: 29 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ TASImage* Screenshot::ScaleImage(TASImage* image, UInt_t desiredWidth, UInt_t de
117117
return scaledImage;
118118
}
119119

120-
void Screenshot::perform(std::string fileName, o2::detectors::DetID::mask_t detectorsMask, int runNumber, int firstTFOrbit, std::string collisionTime)
120+
std::string Screenshot::perform(std::string fileName, o2::detectors::DetID::mask_t detectorsMask, int runNumber, int firstTFOrbit, std::string collisionTime)
121121
{
122122
TEnv settings;
123123
ConfigurationManager::getInstance().getConfig(settings);
@@ -159,68 +159,41 @@ void Screenshot::perform(std::string fileName, o2::detectors::DetID::mask_t dete
159159
const auto annotationStateBottom = MultiView::getInstance()->getAnnotationBottom()->GetState();
160160
MultiView::getInstance()->getAnnotationTop()->SetState(TGLOverlayElement::kInvisible);
161161
MultiView::getInstance()->getAnnotationBottom()->SetState(TGLOverlayElement::kInvisible);
162-
163-
TImage* view3dImage = MultiView::getInstance()->getView(MultiView::EViews::View3d)->GetGLViewer()->GetPictureUsingBB();
164-
162+
TImage* view3dImage = MultiView::getInstance()->getView(MultiView::EViews::View3d)->GetGLViewer()->GetPictureUsingFBO(width * 0.65, height * 0.95);
165163
MultiView::getInstance()->getAnnotationTop()->SetState(annotationStateTop);
166164
MultiView::getInstance()->getAnnotationBottom()->SetState(annotationStateBottom);
167-
168-
scaledImage = ScaleImage((TASImage*)view3dImage, width * 0.65, height * 0.95, backgroundColorHex);
165+
CopyImage(image, (TASImage*)view3dImage, width * 0.015, height * 0.025, 0, 0, view3dImage->GetWidth(), view3dImage->GetHeight());
169166
delete view3dImage;
170-
if (scaledImage) {
171-
CopyImage(image, scaledImage, width * 0.015, height * 0.025, 0, 0, scaledImage->GetWidth(), scaledImage->GetHeight());
172-
delete scaledImage;
173-
}
174167

175-
TImage* viewRphiImage = MultiView::getInstance()->getView(MultiView::EViews::ViewRphi)->GetGLViewer()->GetPictureUsingBB();
176-
scaledImage = ScaleImage((TASImage*)viewRphiImage, width * 0.3, height * 0.45, backgroundColorHex);
168+
TImage* viewRphiImage = MultiView::getInstance()->getView(MultiView::EViews::ViewRphi)->GetGLViewer()->GetPictureUsingFBO(width * 0.3, height * 0.45);
169+
CopyImage(image, (TASImage*)viewRphiImage, width * 0.68, height * 0.025, 0, 0, viewRphiImage->GetWidth(), viewRphiImage->GetHeight());
177170
delete viewRphiImage;
178-
if (scaledImage) {
179-
CopyImage(image, scaledImage, width * 0.68, height * 0.025, 0, 0, scaledImage->GetWidth(), scaledImage->GetHeight());
180-
delete scaledImage;
181-
}
182171

183-
TImage* viewZYImage = MultiView::getInstance()->getView(MultiView::EViews::ViewZY)->GetGLViewer()->GetPictureUsingBB();
184-
scaledImage = ScaleImage((TASImage*)viewZYImage, width * 0.3, height * 0.45, backgroundColorHex);
172+
TImage* viewZYImage = MultiView::getInstance()->getView(MultiView::EViews::ViewZY)->GetGLViewer()->GetPictureUsingFBO(width * 0.3, height * 0.45);
173+
CopyImage(image, (TASImage*)viewZYImage, width * 0.68, height * 0.525, 0, 0, viewZYImage->GetWidth(), viewZYImage->GetHeight());
185174
delete viewZYImage;
186-
if (scaledImage) {
187-
CopyImage(image, scaledImage, width * 0.68, height * 0.525, 0, 0, scaledImage->GetWidth(), scaledImage->GetHeight());
188-
delete scaledImage;
189-
}
190175

191-
bool logo = true;
192-
if (logo) {
193-
TASImage* aliceLogo = new TASImage(settings.GetValue("screenshot.logo.alice", "alice-white.png"));
194-
if (aliceLogo->IsValid()) {
195-
double ratio = 1434. / 1939.;
196-
aliceLogo->Scale(0.08 * width, 0.08 * width / ratio);
197-
image->Merge(aliceLogo, "alphablend", 20, 20);
198-
}
199-
delete aliceLogo;
176+
TASImage* aliceLogo = new TASImage(settings.GetValue("screenshot.logo.alice", "alice-white.png"));
177+
if (aliceLogo->IsValid()) {
178+
double ratio = (double)(aliceLogo->GetWidth()) / (double)(aliceLogo->GetHeight());
179+
aliceLogo->Scale(0.08 * width, 0.08 * width / ratio);
180+
image->Merge(aliceLogo, "alphablend", 0.01 * width, 0.01 * width);
200181
}
182+
delete aliceLogo;
201183

202-
int fontSize = 0.015 * height;
203-
int textX;
204-
int textLineHeight = 0.015 * height;
205-
int textY;
206-
207-
if (logo) {
208-
TASImage* o2Logo = new TASImage(settings.GetValue("screenshot.logo.o2", "o2.png"));
209-
if (o2Logo->IsValid()) {
210-
double ratio = (double)(o2Logo->GetWidth()) / (double)(o2Logo->GetHeight());
211-
int o2LogoX = 0.01 * width;
212-
int o2LogoY = 0.01 * width;
213-
int o2LogoSize = 0.04 * width;
214-
o2Logo->Scale(o2LogoSize, o2LogoSize / ratio);
215-
image->Merge(o2Logo, "alphablend", o2LogoX, height - o2LogoSize / ratio - o2LogoY);
216-
textX = o2LogoX + o2LogoSize + o2LogoX;
217-
textY = height - o2LogoSize / ratio - o2LogoY;
218-
} else {
219-
textX = 229;
220-
textY = 1926;
221-
}
222-
delete o2Logo;
184+
TASImage* o2Logo = new TASImage(settings.GetValue("screenshot.logo.o2", "o2.png"));
185+
int o2LogoMarginX = 0.01 * width;
186+
int o2LogoMarginY = 0.01 * width;
187+
int o2LogoSize = 0.04 * width;
188+
189+
if (o2Logo->IsValid()) {
190+
double ratio = (double)(o2Logo->GetWidth()) / (double)(o2Logo->GetHeight());
191+
o2Logo->Scale(o2LogoSize, o2LogoSize / ratio);
192+
image->Merge(o2Logo, "alphablend", o2LogoMarginX, height - o2LogoSize / ratio - o2LogoMarginY);
223193
}
194+
delete o2Logo;
195+
int textX = o2LogoMarginX + o2LogoSize + o2LogoMarginX;
196+
int textY = height - o2LogoSize - o2LogoMarginY;
224197

225198
auto detectorsString = detectors::DetID::getNames(detectorsMask);
226199

@@ -233,14 +206,18 @@ void Screenshot::perform(std::string fileName, o2::detectors::DetID::mask_t dete
233206
}
234207

235208
image->BeginPaint();
209+
int fontSize = 0.015 * height;
210+
int textLineHeight = 0.015 * height;
236211

237212
for (int i = 0; i < 4; i++) {
213+
lines.push_back(""); // guard for empty collision time
238214
image->DrawText(textX, textY + i * textLineHeight, lines[i].c_str(), fontSize, "#BBBBBB", "FreeSansBold.otf");
239215
}
240216
image->EndPaint();
241217

242218
image->WriteImage(fileName.c_str(), TImage::kPng);
243219
delete image;
220+
return fileName; // saved screenshod file name
244221
}
245222

246223
} // namespace event_visualisation

0 commit comments

Comments
 (0)