У меня проблема с добавлением четырех векторов с использованием std::transform
. Это звучит как простая проблема, но я не мог сделать это. Предположим, у меня есть следующее:
std::vector<double> No_of_sgn1, No_of_sgn2, No_of_sgn3, No_of_sgn4;
Каждый из этих векторов имеет 4 элемента (двойной). Поэтому я попытался добавить только два вектора как:
std::transform(No_of_sgn1.begin(), No_of_sgn1.end(), No_of_sgn2.begin(), No_of_sgn1.begin(), std::plus<double>());
Я предполагаю, что No_of_sgn2
будет добавлен к No_of_sgn1
, затем я печатаю, чтобы посмотреть, каков результат:
std::cout << No_of_sgn1[0] << std::endl;
Однако код здесь ломается, давая мне:
* Перерыв * нарушение сегментации
TString getlabel(TString fileName, bool nu = false){
TString g = "";
if(fileName.Contains("345060")) g = "ggH";
if(fileName.Contains("344235")) g = "VBF";
if(fileName.Contains("AZNLO_VH")) g = "VH";
if(fileName.Contains("ttH125_ZZ4l")) g = "ttH";
if(fileName.Contains("Zjet")) g = "Z+jets";
if(fileName.Contains("A14_ttbar")) g = "tt";
return g;
}
TString getbinName(int xBin,TString type);
map<TString, std::map<int, double>> val;
int main(){
//this part contains the place where the data imported
TChain *chain = new TChain("tree_relaxIsoD0");
chain->Add("~/cernbox/Lepron_Isolation/samples/Prod_v18/mc16a/Signal/mc16_13TeV.345060.PowhegPythia8EvtGen_NNLOPS_nnlo_30_ggH125_ZZ4l_bkgCR.root"); //ggH
chain->Add("~/cernbox/Lepron_Isolation/samples/Prod_v18/mc16a/Signal/mc16_13TeV.344235.PowhegPy8EG_NNPDF30_AZNLOCTEQ6L1_VBFH125_ZZ4lep_notau_bkgCR.root"); //VBF
chain->Add("~/cernbox/Lepron_Isolation/samples/Prod_v18/mc16a/Signal/mc16a_13TeV.PowhegPythia8EvtGen_NNPDF30_AZNLO_VH_MINLO_bkgCR_merged_3s.root"); //VH
chain->Add("~/cernbox/Lepron_Isolation/samples/Prod_v18/mc16a/Signal/mc16a_13TeV.PowhegPy8EG_A14NNPDF23_NNPDF30ME_ttH125_ZZ4l_allhad_merged_3s.root"); //ttH
chain->Add("~/cernbox/Lepron_Isolation/samples/Prod_v18/mc16a/BkgCR/mc16_13TeV.Sherpa_NNPDF30NNLO_Zjet_bkgCR_merged_4s.root"); //Z+jets
chain->Add("~/cernbox/Lepron_Isolation/samples/Prod_v18/mc16a/BkgCR/mc16_13TeV.410289.PhPy8EG_A14_ttbar_hdamp258p75_4lMFilt_40_8_bkgCR.root"); //ttbar
Histos a(chain);
a.Loop();
return 0;
}
for(int j=2; j<6;j++){
if(groupName=="ggH" ) No_of_sgn1.push_back(val[groupName][j]);
if(groupName=="VBF" ) No_of_sgn2.push_back(val[groupName][j]);
if(groupName=="VH" ) No_of_sgn3.push_back(val[groupName][j]);
if(groupName=="ttH" ) No_of_sgn4.push_back(val[groupName][j]);
if(groupName=="Z+jets") No_of_bkg1.push_back(val[groupName][j]);
if(groupName=="tt" ) No_of_bkg2.push_back(val[groupName][j]);
}
это было что-то вроде выше.
До здесь все хорошо. Я даже распечатал значения всех векторов, и они выглядят совершенно правильно. Вот как я печатаю первый вектор:
"if(groupName=="ggH") cout<<groupName<<":"<<" 4mu: "<<No_of_sgn1[0]<<" 4e: "<<No_of_sgn1[1]<<" 2mu2e: "<<No_of_sgn1[2]<<" 2e2mu: "<<No_of_sgn1[3]<<endl; ".
И вывод:
"ggH: 4mu: 0,869109 4e: 0,452978 2mu2e: 0,485973 2e2mu: 0,605595
Любая помощь будет высоко ценится.