前提是,我不是程序員,我是物理學家,我使用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和我的2D直方圖的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, ...);
做data0
具有指數0,如果我去表我看到它對應於沒有其他合作伙伴的cell D0
,我們假設現在可以忽略它。data1
具有索引1,它對應於cell A1
(A1-L
)的左邊部分,因此我需要找到表中索引爲4的正確夥伴,並理想地使我從包含數據的向量中選擇data4
。 我希望這至少能澄清一點情況!
'PMT'與這個問題有什麼關係?在你的原始'矢量''數據'中,元素的順序與你發佈的表格有什麼關係?對於給定的字段,「Channel」是原始「矢量數據」的索引嗎?在你的* final *輸出中(不要介意中間的東西),你想用'D0'的數據做什麼?沒有顯示?你想要還是需要最終輸出的單元名稱?除了您的表由「Channel」排序的事實之外,該表的順序是否用於顯示目的?你用什麼程序來編譯,什麼版本? –
Yakk
將很高興看到向量中的原始數據以及它與您所擁有的表格的對應關係。 I.e是向量[0] = D001中的第一條記錄?你必須分裂他們等? – SD1990
那麼,應該對那些不成對的空單元做些什麼? –