我正在使用 CLHEP 库,但遇到了一些困难。在进行这些更改之前,我一直在生成一组粒子动量作为 CLHEP 对象的向量 (std::vector),然后将它们转换为普通数组的向量 - 仍然包含相同的动量 - 以供另一个程序 (MadGraph) 使用。我想把这个转换例程放到一个新函数中,所以我做了这个:
std::vector<double*> MadGraphConvert(vector<CLHEP::HepLorentzVector> p) {
double ptemp[6][4];
for (int i = 0; i < 6; i++) {
ptemp[i][0] = p.at(i).e();
ptemp[i][1] = p.at(i).x();
ptemp[i][2] = p.at(i).y();
ptemp[i][3] = p.at(i).z();
}
// Give particles to MG in a 'vector of arrays' format
std::vector<double*> p_MG;
p_MG.push_back(ptemp[0]);
p_MG.push_back(ptemp[1]);
p_MG.push_back(ptemp[2]);
p_MG.push_back(ptemp[3]);
p_MG.push_back(ptemp[4]);
p_MG.push_back(ptemp[5]);
return p_MG;
}
现在,当我运行我的代码时,其他代码中的某些内容会引发段错误,但我认为我正在传递以前的内容?我的旧转换集如下所示:
p[0][0] = pa.e();
p[0][1] = pa.x();
p[0][2] = pa.y();
p[0][3] = pa.z();
p[1][0] = pb.e();
p[1][1] = pb.x();
p[1][2] = pb.y();
p[1][3] = pb.z();
.
'
'
std::vector<double*> p_MG;
p_MG.push_back(p[0]);
p_MG.push_back(p[1]);
p_MG.push_back(p[2]);
p_MG.push_back(p[3]);
p_MG.push_back(p[4]);
p_MG.push_back(p[5]);
如果有人能发现这两种方法的区别在哪里,我将不胜感激!干杯杰克