私は 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]);
これら 2 つのアプローチの違いを誰かが見つけられたら、私はとても感謝しています! 乾杯ジャック