f = TFile::Open("root://eospublic.cern.ch//eos/opendata/cms/derived-data/AOD2NanoAODOutreachTool/Run2012BC_DoubleMuParked_Muons.root") Events->GetEntries() //событий в дереве Double_t InvariantMass(Float_t pt0, Float_t eta0, Float_t phi0, Float_t mass0, Float_t pt1, Float_t eta1, Float_t phi1, Float_t mass1){ ROOT::Math::PtEtaPhiMVector m1(pt0, eta0, phi0, mass0); ROOT::Math::PtEtaPhiMVector m2(pt1, eta1, phi1, mass1); return (m1+m2).mass(); } invMass_hist = new TH1D("hist", "InvMass", 10000, 0, 120) TTreeReader reader("Events", f); TTreeReaderArray pt(reader, "Muon_pt"); TTreeReaderArray eta(reader, "Muon_eta"); TTreeReaderArray phi(reader, "Muon_phi"); TTreeReaderArray m(reader, "Muon_mass"); TTreeReaderArray ch(reader, "Muon_charge"); TTreeReaderValue num(reader, "nMuon"); int i=0; double mass; invMass_hist->Reset(); //на всякий случай чищу гистограмму reader.Restart();//на всякий случай сбрасываю reader i = 0; while(reader.Next()){ if((*num==2)&&(ch[0]==ch[1])&&(phi[0]*phi[1]<0)){ mass = InvariantMass(eta[0], phi[0], m[0], pt[0], pt[1], eta[1], phi[1], m[1]); hist->Fill(mass); i++; if(i%1000==0) cout << i << '\t' << mass << endl; } if(i==10000) //дерево гигантское, поэтому если мы не хотим ждать сутки, то лучше остановиться пораньше break; } TCanvas c1("can1", "Canvas", 600, 600); //код c1.Draw() TCanvas c2("can2", "Canvas", 1000, 600); //код c2.Draw() hist_Z = (TH1D*)(invMass_hist->Clone()) TCanvas c3("can3", "Canvas", 1000, 600); hist_Z->Draw(); //добавьте свой код сюда c3.Draw() data_dist = new TF1("sig_bkg", "", 80, 100); //напишите ваш код data_dist->SetParameters //не забудьте выставить начальные параметры //добавьте код