Если я сделаю:
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
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 );
}