首页 > 解决方案 > 我需要帮助确定什么在我自己的过滤方法中改变了我的数据

问题描述

我目前正在使用 C++ / ROOT 进行一些数据分析,并遇到了不可能数据的问题。我已将其缩小到下面的方法,该方法应该对数据施加过滤器,但也会以某种方式对其进行更改。我还插入了一些计数器(带有整数 k 的两个块),它告诉我我的数据实际上发生了变化。但是,据我所见,它仅从输入中复制,并且不应该能够创建新值。

谁能看到我做错了什么?

vector<int> debug_dt_filter(double a, double b, const vector<double> *DT, const vector<int> *input, const vector<int> *ID) {
    int n = DT->size();
    const vector<double> &DTref = *DT;
    const vector<int> &inputref = *input;
    vector<int> result(n);
    int m = 0; // current index in result
    double dt;

    int k = 0;
    const vector<int> &id = *ID;
    for (int i = 0; i < inputref.size(); i++) {
        if (inputref[i] > 24 && (id[i] == 2 || id[i] == 3)) {
            k++;
        }
    }
    cout << "k: " << k << endl; // prints k = 0

    // this is where the data is changed
    for (int i = 0; i < n; i++) {
        dt = DTref[i];
        if (a < dt && dt < b) {
            result[m] = inputref[i];
            m++;
        }
    }

    k = 0;
    for (int i = 0; i < result.size(); i++) {
        if (result[i] > 24 && (id[i] == 2 || id[i] == 3)) {
            k++;
        }
    }
    cout << "k: " << k << endl; // prints k = 9

    result.resize(m);
    return result; 
}

标签: c++data-analysisroot-framework

解决方案


Nathan 在他的评论中指出,我的结果和 id 向量在实际的过滤器循环之后不再对齐。通过在 id 向量中执行相同的更改,两个 k 语句都正确打印出 k = 0。


推荐阅读