2011-12-01 52 views
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); 
} 
+0

你的'jet_preselection'有一個for循環,但在第一次迭代時返回。 –

+1

您意識到'jet_preselection()'只查看向量中的第一個噴射流,並且如果向量是空的,會導致未定義的行爲?我猜''for'循環的主體應該更像'if(stuff)return true;',在循環後面帶'return false;'。 –

+0

你是對的!我是一個白癡,修改了這件事,但沒有看到。我嘗試修復。 – drkg4b

回答

0

有很多在你的代碼複雜interdependancies,使其難以診斷的問題。但我可以告訴你,在:

bool jet_preselection(map<string, TLorentzVector> map_jets, map<string, TLorentzVector> map_leps, string vec_jets, double jet_emfr) 

...你逝去map_jetsmap_leps通過值 rahter比引用(首選)或通過指針,這樣,當你調用這個函數完整構建這些map的副本。

您可能會考慮更改您傳遞這些參數的方式。也許傳遞這些地圖的副本將以這種方式改變它們的狀態,使得jet_preselection將失敗。

+0

感謝您的答案,嘗試了你的建議,但仍然沒有得到我想要的! – drkg4b