一个前提,我不是程序员,我是物理学家,我使用 c++ 作为分析数据的工具(ROOT 包)。我的知识可能有限!
我有这种情况,我从文件中读取数据并将它们存储在向量中(没问题)
vector<double> data;
有了这个数据,我想绘制一个相关图,所以我需要将它们分成两个不同的子集,其中一个是 2D 直方图的 X 条目,另一个是 Y 条目。
拆分必须如下,我有这张表(我只复制了一小部分只是为了说明问题)
************* LBA - LBC **************
--------------------------------------
Cell Name | Channel | PMT |
D0 | 0 | 1 |
A1-L | 1 | 2 |
BC1-R | 2 | 3 |
BC1-L | 3 | 4 |
A1-R | 4 | 5 |
A2-L | 5 | 6 |
BC2-R | 6 | 7 |
BC2-L | 7 | 8 |
A2-R | 8 | 9 |
A3-L | 9 | 10 |
A3-R | 10 | 11 |
BC3-L | 11 | 12 |
BC3-R | 12 | 13 |
D1-L | 13 | 14 |
D1-R | 14 | 15 |
A4-L | 15 | 16 |
BC4-R | 16 | 17 |
BC4-L | 17 | 18 |
A4-R | 18 | 19 |
A5-L | 19 | 20 |
...
None | 31 | 32 |
如您所见,有类似的条目A1-L
,A1-R
它对应于一个单元格的左侧和右侧,与此左侧和右侧相关联int
,对应于通道,在本例中为 1 和 4。我希望这些左侧和右侧在我的二维直方图的 X 和 Y 轴上。
然后问题是以某种方式关联到该表的数据向量,以便我可以选择属于同一单元格的通道并将它们放在 X 轴上,另一个放在 Y 轴上。更复杂的是,还有一些单元格没有像本例中那样的合作伙伴,D0
以及没有关联单元格的通道,如通道 31。
我尝试的解决方案是创建一个索引向量
vector<int> indexing = (0, 1, 4, ....);
和一个有序的数据向量
vector<double> data_ordered;
并用类似的东西填充有序向量
for( vector<int> iterator it = indexing.begin(); it != indexing.end(); ++it)
data_ordered.push_back(data.at(*it));
然后将偶数索引data_ordered
放在 X 轴上,将奇数值放在 Y 轴上,但我遇到了D0
单元格和空单元格的问题!
我的另一个想法是创建一个struct
赞
struct cell{
string cell_name;
int left_channel;
int right_channel;
double data;
....
other informations
};
然后尝试使用它,但是我缺乏 C++ 知识!有人可以给我一个关于如何解决这个问题的提示吗?我希望我的问题足够清楚,并且尊重本网站的规则!
编辑 - - - - -
为了澄清这个问题,我尝试用一个例子来解释它
vector<double> data = (data0, data1, data2, data3, data4, ...);
dodata0
有索引 0,如果我去表我看到它对应于cell D0
没有其他合作伙伴的,假设现在可以忽略。具有索引 1 并且它对应于( )data1
的左侧部分,因此我需要找到表中索引为 4 的正确伙伴,并且理想情况下引导我从包含数据的向量中进行选择。我希望这至少能澄清一点情况!cell A1
A1-L
data4