0
如果我做的:我做錯了填充這個對的向量?
vector<string> vec_jets;
double values[] = {
transEnergy(map_jets, "jet1"),
transEnergy(map_jets, "jet2"),
transEnergy(map_jets, "jet3"),
transEnergy(map_jets, "jet4"),
transEnergy(map_jets, "jet5"),
transEnergy(map_jets, "jet6"),
transEnergy(map_jets, "jet7") };
for(int j = 1; j <= Njets; j++){
oss << "jet" << j;
vec_jets.push_back(oss.str());
oss.str("");
}
vector<pair<string,double> > jets_pt(vec_jets.size());
// for(int k = 0; k < Njets; k++){
// if(jet_preselection(map_jets,map_leps,vec_jets[k],jets_emfr[k]))
transform(
vec_jets.begin(),
vec_jets.end(),
values,
jets_pt.begin(),
make_pair<string,double>
);
// }
我已經輸出我想,這一點,例如
jet1 32.4717
但是,如果我去掉了for
循環和if
條件,似乎矢量已經沒有了,如果我問一下,我總是隻有0
。
在if
語句中的功能僅僅是一個布爾
bool jet_preselection(
map<string, TLorentzVector> map_jets,
map<string, TLorentzVector> map_leps,
string vec_jets,
double jet_emfr)
{
return (map_jets[vec_jets].E()*sin(map_jets[vec_jets].Theta()) > 15
&& jet_emfr < 0.9
&& fabs(map_jets[vec_jets].PseudoRapidity()) > 2.5
&& (map_jets[vec_jets].DeltaR(map_leps["lep1"]) > 0.4
&& map_jets[vec_jets].DeltaR(map_leps["lep2"]) > 0.4
&& map_jets[vec_jets].DeltaR(map_leps["lep3"]) > 0.4);
}
你的'jet_preselection'有一個for循環,但在第一次迭代時返回。 –
您意識到'jet_preselection()'只查看向量中的第一個噴射流,並且如果向量是空的,會導致未定義的行爲?我猜''for'循環的主體應該更像'if(stuff)return true;',在循環後面帶'return false;'。 –
你是對的!我是一個白癡,修改了這件事,但沒有看到。我嘗試修復。 – drkg4b