Skip to content

Commit a3b463c

Browse files
jmyrchaJulian Myrcha
andauthored
o2-eve-display track<-> cluster relation (#7418)
* o2-eve-display track<-> cluster relation * fixed addCluster * storing more track parameters in *.json file Co-authored-by: Julian Myrcha <jmyrcha@cern.ch>
1 parent ddb5011 commit a3b463c

File tree

10 files changed

+81
-29
lines changed

10 files changed

+81
-29
lines changed

EventVisualisation/Base/src/DataSourceOnline.cxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ std::vector<std::pair<VisualisationEvent, EVisualisationGroup>> DataSourceOnline
4242
filter = static_cast<EVisualisationGroup>(static_cast<int>(filter) + 1)) {
4343
auto filtered = VisualisationEvent(vEvent, filter);
4444
res.push_back(std::make_pair(filtered, filter)); // we can switch on/off data
45-
}*/
45+
}
46+
*/
4647
res.push_back(std::make_pair(vEvent, EVisualisationGroup::TPC)); // temporary
4748
}
4849
return res;

EventVisualisation/DataConverter/include/EventVisualisationDataConverter/VisualisationCluster.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#ifndef ALICE_O2_DATACONVERTER_VISUALISATIONCLUSTER_H
1818
#define ALICE_O2_DATACONVERTER_VISUALISATIONCLUSTER_H
1919

20-
#include "EventVisualisationDataConverter/VisualisationTrack.h"
20+
#include "ReconstructionDataFormats/GlobalTrackID.h"
2121
#include "rapidjson/document.h"
2222

2323
#include <vector>

EventVisualisation/DataConverter/include/EventVisualisationDataConverter/VisualisationEvent.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,15 @@ class VisualisationEvent
7575
void remove_last_track() { mTracks.pop_back(); } // used to remove track assigned optimistically
7676

7777
// Adds visualisation cluster inside visualisation event
78-
VisualisationCluster& addCluster(float XYZ[], float time)
78+
VisualisationCluster& addCluster(float XYZ[], float trackTime)
7979
{
80-
mClusters.emplace_back(XYZ, time);
81-
return mClusters.back();
80+
return mTracks.back().addCluster(XYZ);
8281
}
8382

84-
VisualisationCluster& addCluster(float X, float Y, float Z, float time)
83+
VisualisationCluster& addCluster(float X, float Y, float Z, float trackTime)
8584
{
8685
float pos[] = {X, Y, Z};
87-
mClusters.emplace_back(pos, time);
88-
return mClusters.back();
86+
return mTracks.back().addCluster(pos);
8987
}
9088

9189
// Multiplicity getter

EventVisualisation/DataConverter/include/EventVisualisationDataConverter/VisualisationTrack.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "ReconstructionDataFormats/GlobalTrackID.h"
2323
#include "ConversionConstants.h"
24+
#include "VisualisationCluster.h"
2425
#include "rapidjson/document.h"
2526

2627
#include <iosfwd>
@@ -61,6 +62,7 @@ class VisualisationTrack
6162
float startXYZ[3];
6263
float phi = 0;
6364
float theta = 0;
65+
float eta = 0;
6466
o2::dataformats::GlobalTrackID::Source source;
6567
};
6668
// Constructor with properties initialisation
@@ -88,6 +90,9 @@ class VisualisationTrack
8890
size_t getPointCount() const { return mPolyX.size(); }
8991
std::array<float, 3> getPoint(size_t i) const { return std::array<float, 3>{mPolyX[i], mPolyY[i], mPolyZ[i]}; }
9092

93+
VisualisationCluster& addCluster(float pos[]);
94+
const VisualisationCluster& getCluster(int i) const { return mClusters[i]; };
95+
size_t getClusterCount() const { return mClusters.size(); } // Returns number of clusters
9196
private:
9297
// Set coordinates of the beginning of the track
9398
void addStartCoordinates(const float xyz[3]);
@@ -101,6 +106,7 @@ class VisualisationTrack
101106

102107
float mTheta; /// An angle from Z-axis to the radius vector pointing to the particle
103108
float mPhi; /// An angle from X-axis to the radius vector pointing to the particle
109+
float mEta;
104110

105111
// std::vector<int> mChildrenIDs; /// Uniqe IDs of children particles
106112
o2::dataformats::GlobalTrackID::Source mSource; /// data source of the track (debug)
@@ -109,6 +115,8 @@ class VisualisationTrack
109115
std::vector<float> mPolyX;
110116
std::vector<float> mPolyY;
111117
std::vector<float> mPolyZ;
118+
119+
std::vector<VisualisationCluster> mClusters; /// an array of visualisation clusters belonging to track
112120
};
113121

114122
} // namespace event_visualisation

EventVisualisation/DataConverter/src/VisualisationTrack.cxx

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ VisualisationTrack::VisualisationTrack(const VisualisationTrackVO& vo)
3535
this->mPhi = vo.phi;
3636
this->addStartCoordinates(vo.startXYZ);
3737
this->mSource = vo.source;
38+
this->mEta = vo.eta;
3839
}
3940

4041
void VisualisationTrack::addStartCoordinates(const float xyz[3])
@@ -53,14 +54,18 @@ void VisualisationTrack::addPolyPoint(float x, float y, float z)
5354

5455
VisualisationTrack::VisualisationTrack(rapidjson::Value& tree)
5556
{
57+
mClusters.clear();
5658
rapidjson::Value& jsonPolyX = tree["mPolyX"];
5759
rapidjson::Value& jsonPolyY = tree["mPolyY"];
5860
rapidjson::Value& jsonPolyZ = tree["mPolyZ"];
5961
rapidjson::Value& count = tree["count"];
6062
this->mCharge = 0;
6163

62-
this->mSource = (o2::dataformats::GlobalTrackID::Source)tree["source"].GetInt();
63-
this->mSource = o2::dataformats::GlobalTrackID::TPC; // temporary
64+
if (tree.HasMember("source")) {
65+
this->mSource = (o2::dataformats::GlobalTrackID::Source)tree["source"].GetInt();
66+
} else {
67+
this->mSource = o2::dataformats::GlobalTrackID::TPC; // temporary
68+
}
6469
this->mPID = (o2::dataformats::GlobalTrackID::Source)tree["source"].GetInt();
6570
//this->mTime = (o2::dataformats::GlobalTrackID::Source)tree["time"].GetFloat();
6671
this->mPolyX.reserve(count.GetInt());
@@ -75,6 +80,14 @@ VisualisationTrack::VisualisationTrack(rapidjson::Value& tree)
7580
for (auto& v : jsonPolyZ.GetArray()) {
7681
mPolyZ.push_back(v.GetDouble());
7782
}
83+
if (tree.HasMember("mClusters")) {
84+
rapidjson::Value& jsonClusters = tree["mClusters"];
85+
auto jsonArray = jsonClusters.GetArray();
86+
this->mClusters.reserve(jsonArray.Size());
87+
for (auto& v : jsonClusters.GetArray()) {
88+
mClusters.emplace_back(v);
89+
}
90+
}
7891
}
7992

8093
rapidjson::Value VisualisationTrack::jsonTree(rapidjson::Document::AllocatorType& allocator)
@@ -83,12 +96,22 @@ rapidjson::Value VisualisationTrack::jsonTree(rapidjson::Document::AllocatorType
8396
rapidjson::Value jsonPolyX(rapidjson::kArrayType);
8497
rapidjson::Value jsonPolyY(rapidjson::kArrayType);
8598
rapidjson::Value jsonPolyZ(rapidjson::kArrayType);
99+
rapidjson::Value jsonStartCoordinates(rapidjson::kArrayType);
86100

87101
tree.AddMember("count", rapidjson::Value().SetInt(this->getPointCount()), allocator);
88102
tree.AddMember("source", rapidjson::Value().SetInt(this->mSource), allocator);
89-
//tree.AddMember("time", rapidjson::Value().SetFloat(this->mTime), allocator);
103+
tree.AddMember("time", rapidjson::Value().SetFloat(this->mTime), allocator);
104+
tree.AddMember("charge", rapidjson::Value().SetInt(this->mCharge), allocator);
105+
tree.AddMember("theta", rapidjson::Value().SetFloat(this->mTheta), allocator);
106+
tree.AddMember("phi", rapidjson::Value().SetFloat(this->mPhi), allocator);
107+
tree.AddMember("eta", rapidjson::Value().SetFloat(this->mEta), allocator);
90108
tree.AddMember("PID", rapidjson::Value().SetInt(this->mPID), allocator);
91109

110+
jsonStartCoordinates.PushBack((float)mStartCoordinates[0], allocator);
111+
jsonStartCoordinates.PushBack((float)mStartCoordinates[1], allocator);
112+
jsonStartCoordinates.PushBack((float)mStartCoordinates[2], allocator);
113+
tree.AddMember("jsonStartingXYZ", jsonStartCoordinates, allocator);
114+
92115
for (size_t i = 0; i < this->getPointCount(); i++) {
93116
jsonPolyX.PushBack((float)mPolyX[i], allocator);
94117
jsonPolyY.PushBack((float)mPolyY[i], allocator);
@@ -98,8 +121,20 @@ rapidjson::Value VisualisationTrack::jsonTree(rapidjson::Document::AllocatorType
98121
tree.AddMember("mPolyY", jsonPolyY, allocator);
99122
tree.AddMember("mPolyZ", jsonPolyZ, allocator);
100123

124+
rapidjson::Value jsonClusters(rapidjson::kArrayType);
125+
for (size_t i = 0; i < this->mClusters.size(); i++) {
126+
jsonClusters.PushBack(this->mClusters[i].jsonTree(allocator), allocator);
127+
}
128+
tree.AddMember("mClusters", jsonClusters, allocator);
129+
101130
return tree;
102131
}
103132

133+
VisualisationCluster& VisualisationTrack::addCluster(float pos[])
134+
{
135+
mClusters.emplace_back(pos, 0);
136+
return mClusters.back();
137+
}
138+
104139
} // namespace event_visualisation
105140
} // namespace o2

EventVisualisation/View/src/EventManager.cxx

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ void EventManager::Open()
6363

6464
void EventManager::displayCurrentEvent()
6565
{
66-
MultiView::getInstance()->destroyAllEvents();
6766
if (getDataSource()->getEventCount() > 0) {
67+
MultiView::getInstance()->destroyAllEvents();
6868
int no = getDataSource()->getCurrentEvent();
6969

7070
for (int i = 0; i < EVisualisationDataType::NdataTypes; ++i) {
@@ -74,9 +74,9 @@ void EventManager::displayCurrentEvent()
7474
auto displayList = getDataSource()->getVisualisationList(no);
7575
for (auto it = displayList.begin(); it != displayList.end(); ++it) {
7676

77-
if (it->second == EVisualisationGroup::TPC) { // temporary
78-
displayVisualisationEvent(it->first, gVisualisationGroupName[it->second]);
79-
}
77+
//if (it->second == EVisualisationGroup::TPC) { // temporary
78+
displayVisualisationEvent(it->first, gVisualisationGroupName[it->second]);
79+
//}
8080
}
8181

8282
for (int i = 0; i < EVisualisationDataType::NdataTypes; ++i) {
@@ -156,8 +156,14 @@ void EventManager::displayVisualisationEvent(VisualisationEvent& event, const st
156156
{
157157
size_t trackCount = event.getTrackCount();
158158
LOG(INFO) << "displayVisualisationEvent: " << trackCount << " detector: " << detectorName;
159+
// tracks
159160
auto* list = new TEveTrackList(detectorName.c_str());
160161
list->IncDenyDestroy();
162+
// clusters
163+
size_t clusterCount = 0;
164+
auto* point_list = new TEvePointSet(detectorName.c_str());
165+
point_list->IncDenyDestroy();
166+
point_list->SetMarkerColor(kBlue);
161167

162168
for (size_t i = 0; i < trackCount; ++i) {
163169
VisualisationTrack track = event.getTrack(i);
@@ -175,25 +181,31 @@ void EventManager::displayVisualisationEvent(VisualisationEvent& event, const st
175181
vistrack->SetNextPoint(point[0], point[1], point[2]);
176182
}
177183
list->AddElement(vistrack);
184+
185+
// clusters connected with track
186+
for (size_t i = 0; i < track.getClusterCount(); ++i) {
187+
VisualisationCluster cluster = track.getCluster(i);
188+
point_list->SetNextPoint(cluster.X(), cluster.Y(), cluster.Z());
189+
clusterCount++;
190+
}
178191
}
179192

180193
if (trackCount != 0) {
181194
dataTypeLists[EVisualisationDataType::Tracks]->AddElement(list);
182195
}
183196

184-
size_t clusterCount = event.getClusterCount();
185-
auto* point_list = new TEvePointSet(detectorName.c_str());
186-
point_list->IncDenyDestroy();
187-
point_list->SetMarkerColor(kBlue);
188-
189-
for (size_t i = 0; i < clusterCount; ++i) {
197+
// global clusters (with no connection information)
198+
for (size_t i = 0; i < event.getClusterCount(); ++i) {
190199
VisualisationCluster cluster = event.getCluster(i);
191200
point_list->SetNextPoint(cluster.X(), cluster.Y(), cluster.Z());
201+
clusterCount++;
192202
}
193203

194204
if (clusterCount != 0) {
195205
dataTypeLists[EVisualisationDataType::Clusters]->AddElement(point_list);
196206
}
207+
LOG(INFO) << "tracks: " << trackCount << " detector: " << detectorName << ":" << dataTypeLists[EVisualisationDataType::Tracks]->NumChildren();
208+
LOG(INFO) << "clusters: " << clusterCount << " detector: " << detectorName << ":" << dataTypeLists[EVisualisationDataType::Clusters]->NumChildren();
197209
}
198210

199211
} // namespace event_visualisation

EventVisualisation/View/src/main.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ using namespace o2::event_visualisation;
3333

3434
int main(int argc, char** argv)
3535
{
36-
LOG(INFO) << "Welcome in O2 event visualisation tool";
36+
LOG(INFO) << "Welcome in O2 event visualisation tool (v1.02)";
3737

3838
if (!Options::Instance()->processCommandLine(argc, argv)) {
3939
exit(-1);

EventVisualisation/Workflow/include/EveWorkflow/EveWorkflowHelper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class EveWorkflowHelper
9696
void drawMIDClusters(GID gid, float trackTime);
9797
void drawTRDClusters(const o2::trd::TrackTRD& trc, float trackTime);
9898
void drawTOFClusters(GID gid, float trackTime);
99-
void drawPoint(float x, float y, float z, float time) { mEvent.addCluster(x, y, z, time); }
99+
void drawPoint(float x, float y, float z, float trackTime) { mEvent.addCluster(x, y, z, trackTime); }
100100
void prepareITSClusters(const o2::itsmft::TopologyDictionary& dict); // fills mITSClustersArray
101101
void prepareMFTClusters(const o2::itsmft::TopologyDictionary& dict); // fills mMFTClustersArray
102102

EventVisualisation/Workflow/include/EveWorkflow/O2DPLDisplay.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class TPCFastTransform;
4646
class O2DPLDisplaySpec : public o2::framework::Task
4747
{
4848
public:
49-
static constexpr float mWorkflowVersion = 1.01; // helps recognizing version of workflow which produce data
49+
static constexpr float mWorkflowVersion = 1.02; // helps recognizing version of workflow which produce data
5050
O2DPLDisplaySpec(bool useMC, o2::dataformats::GlobalTrackID::mask_t trkMask,
5151
o2::dataformats::GlobalTrackID::mask_t clMask,
5252
std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, std::string jsonPath,

EventVisualisation/Workflow/src/EveWorkflowHelper.cxx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ void EveWorkflowHelper::addTrackToEvent(const o2::track::TrackParCov& tr, GID gi
162162
.startXYZ = {tr.getX(), tr.getY(), tr.getZ()},
163163
.phi = tr.getPhi(),
164164
.theta = tr.getTheta(),
165+
.eta = tr.getEta(),
165166
.source = (o2::dataformats::GlobalTrackID::Source)gid.getSource()});
166167
auto pnts = getTrackPoints(tr, minmaxR[gid.getSource()].first, minmaxR[gid.getSource()].second, 4);
167168

@@ -349,6 +350,7 @@ void EveWorkflowHelper::drawTPC(GID gid, float trackTime)
349350
.startXYZ = {tr.getX(), tr.getY(), tr.getZ()},
350351
.phi = tr.getPhi(),
351352
.theta = tr.getTheta(),
353+
.eta = tr.getEta(),
352354
.source = GID::TPC});
353355
auto pnts = getTrackPoints(tr, minmaxR[gid.getSource()].first, minmaxR[gid.getSource()].second, 4, -250, 250);
354356
float dz = 0.0;
@@ -367,6 +369,7 @@ void EveWorkflowHelper::drawITS(GID gid, float trackTime)
367369
.startXYZ = {tr.getX(), tr.getY(), tr.getZ()},
368370
.phi = tr.getPhi(),
369371
.theta = tr.getTheta(),
372+
.eta = tr.getEta(),
370373
.source = GID::ITS});
371374
auto pnts = getTrackPoints(tr, minmaxR[gid.getSource()].first, minmaxR[gid.getSource()].second, 0.1, -250, 250);
372375
float dz = 0.0;
@@ -408,11 +411,8 @@ void EveWorkflowHelper::drawMCH(GID gid, float trackTime)
408411
const auto& mchClusters = mRecoCont.getMCHTrackClusters(); // list of references to clusters, offset:offset+no
409412

410413
auto vTrack = mEvent.addTrack({.time = static_cast<float>(trackTime),
411-
.charge = (int)0,
412414
.PID = o2::track::PID::Muon,
413415
.startXYZ = {(float)track.getX(), (float)track.getY(), (float)track.getZ()},
414-
.phi = (float)0,
415-
.theta = (float)0,
416416
.source = GID::MCH});
417417

418418
for (int icl = noOfClusters - 1; icl > -1; --icl) {
@@ -444,8 +444,6 @@ void EveWorkflowHelper::drawMID(GID gid, float trackTime)
444444
.charge = (int)0,
445445
.PID = o2::track::PID::Muon,
446446
.startXYZ = {(float)midTrack.getPositionX(), (float)midTrack.getPositionY(), (float)midTrack.getPositionZ()},
447-
.phi = (float)0,
448-
.theta = (float)0,
449447
.source = GID::MID});
450448

451449
for (int ich = 0; ich < 4; ++ich) {

0 commit comments

Comments
 (0)