Hello experts,
I am not sure if this error related to root or C program.
Don’t understand my error.
What I wanted to do is,I have two txt files and need to create the following function and fit the plot.
rhoPiPi = |A * zOmnes00 + B * zOmnes11 |^2
//
//
//
#include "Omnes_fitting.hpp"
#include <TComplex.h>
#include <TRandom3.h>
#include <TH2D.h>
#include <TFile.h>
#include <TNtuple.h>
#include <TMath.h>
#include <TGraph.h>
#include <TCanvas.h>
#include <TH1D.h>
Double_t Omnes_fit(Double_t *par);
int main(){
TLegend * legend=new TLegend();
// rhoPiPi = |A * zOmnes00 + B * zOmnes11 |^2
TFile *hFile=TFile::Open("plots_1.root");
hFile->ls();
TH1D * h_pion_invariant_mass_weight;
TH1D * h_pion_invariant_mass_Stat_Syst;
hFile->GetObject("h_pion_invariant_mass_weight", h_pion_invariant_mass_weight);
hFile->GetObject("h_pion_invariant_mass_Stat_Syst", h_pion_invariant_mass_Stat_Syst);
h_pion_invariant_mass_weight->SetLineColor(2);
h_pion_invariant_mass_weight->SetMarkerColor(2);
h_pion_invariant_mass_weight->SetMarkerStyle(kFullSquare);
h_pion_invariant_mass_weight->Draw("E1");
h_pion_invariant_mass_Stat_Syst->Draw("same E1");
legend->AddEntry(h_pion_invariant_mass_weight,"Stat","EP");
legend->AddEntry(h_pion_invariant_mass_Stat_Syst,"Stat+Sys","EP");
legend->Draw();
TF1 *omnes= new TF1("omnes", Omnes_fit,0.0,1.0,2);
omnes->SetParameter(0,0.707);
omnes->SetParameter(1,0.707);
omnes->SetLineColor(4);
omnes->Draw("sames");
}
Double_t Omnes_fit(Double_t *par){
Double_t result=0.0;
int mPts;
const Int_t nPts = mPts;
mPts=0;
float mass,re, im;
TComplex zOmnes00[nPts],zOmnes11[nPts];
Double_t zOmnes11M[nPts],zOmnes00M[nPts],xOmnes11[nPts],xOmnes00[nPts],yOmnes11[nPts],yOmnes00[nPts];
Double_t MassPiPi[nPts];
char rhomeson[32] = "Omnes11.txt";
FILE * fOmnes;
fOmnes=fopen(rhomeson,"r");
char line[charLine],chars[80];
// Read Header lines
fgets(line,charLine,fOmnes);
// How many data lines?
fgets(line,charLine,fOmnes);
sscanf(line,"%d", &mPts);
// fgets(line,charLine,fOmnes);
char Sigmameson[32] = "Omnes00KM.txt";
FILE * fOmnes1;
fOmnes1=fopen(Sigmameson,"r");
// Read Header lines
fgets(line,charLine,fOmnes1);
// How many data lines?
fgets(line,charLine,fOmnes1);
sscanf(line,"%d", &mPts);
for (Int_t iPt=0; iPt< nPts; iPt++) {
if(fgets(line,charLine,fOmnes)==NULL){
printf("Error reading File %s line %d\n",
rhomeson, iPt+iHeader);
continue;
} else {
sscanf(line,"%f %f %f", &mass,&re, &im);
MassPiPi[iPt] = mass;
xOmnes11[iPt]=re;
yOmnes11[iPt]=im;
zOmnes11[iPt] = TComplex(re,im);
zOmnes11M[iPt]=sqrt(re*re+im*im);
}
mPts=0;
if(fgets(line,charLine,fOmnes1)==NULL){
printf("Error reading File %s line %d\n",
Sigmameson, iPt+iHeader);
continue;
} else {
sscanf(line,"%f %f %f", &mass,&re, &im);
xOmnes00[iPt]=re;
yOmnes00[iPt]=im;
zOmnes00[iPt] = TComplex(re,im);
zOmnes00M[iPt]=sqrt(re*re+im*im);
printf("xOmenes= %f \n", xOmnes00[iPt]);
mPts++;
}
result = par[0]*zOmnes00M[iPt];
result += par[1]*zOmnes11M[iPt];
result=result* result;
}
fclose(fOmnes);
fclose(fOmnes1);
return mPts;
return result;
}
this my error
root [0] .L Omnes_fitting.cpp
In file included from /Users/D/root-6-12-04-02/input_line_12:24:
In file included from /Users/D/root-6-12-04-02/etc/dictpch/allHeaders.h:774:
In file included from /Users/D/root-6-12-04-02/include/TMVA/CrossValidation.h:9:
In file included from /Users/D/root-6-12-04-02/include/TMultiGraph.h:26:
/Users/D/root-6-12-04-02/include/TF1.h:716:104: error: type ‘double (double )’ cannot be used prior to ‘::’ because it has no members
using Fnc_t = typename ROOT::Internal::GetFunctorType<decltype(ROOT::Internal::GetTheRightOp(&Func::operator()))>::type;
^
/Users/D/root-6-12-04-02/include/TF1.h:361:41: note: in instantiation of member function 'ROOT::Internal::TF1Builder<double ()(double )>::Build’ requested here
ROOT::Internal::TF1Builder::Build(this, f);
^
/Users/D/Documents/cross_section/pipi_fitting/Omnes_fitting.cpp:43:21: note: in instantiation of function template specialization 'TF1::TF1<double ()(double )>’ requested here
TF1 omnes= new TF1(“omnes”, Omnes_fit,0.0,1.0,2);
^
In file included from /Users/D/root-6-12-04-02/input_line_12:24:
In file included from /Users/D/root-6-12-04-02/etc/dictpch/allHeaders.h:774:
In file included from /Users/D/root-6-12-04-02/include/TMVA/CrossValidation.h:9:
In file included from /Users/D/root-6-12-04-02/include/TMultiGraph.h:26:
In file included from /Users/D/root-6-12-04-02/include/TF1.h:35:
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:125:29: error: too many arguments to function call, expected 1, have 2
return (f)((T)x, (double)p);
~~~~ ^~~~~~~~~~
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:95:45: note: in instantiation of member function 'ROOT::Math::ParamFunctorHandler<ROOT::Math::ParamFunctorTempl, double ()(double )>::FuncEvaluator<double
()(double ), int>::EvalConst’ requested here
return FuncEvaluator<Func, EvalType>::EvalConst(fFunc,x,p);
^
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:73:4: note: in instantiation of member function 'ROOT::Math::ParamFunctorHandler<ROOT::Math::ParamFunctorTempl, double ()(double )>::operator()’ requested here
ParamFunctorHandler(const Func & fun) : fFunc(fun) {}
^
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:304:17: note: in instantiation of member function 'ROOT::Math::ParamFunctorHandler<ROOT::Math::ParamFunctorTempl, double ()(double )>::ParamFunctorHandler’ requested
here
fImpl(new ParamFunctorHandler<ParamFunctorTempl,Func>(f) )
^
/Users/D/root-6-12-04-02/include/TF1.h:718:62: note: in instantiation of function template specialization 'ROOT::Math::ParamFunctorTempl::ParamFunctorTempl<double ()(double )>’ requested here
f->fFunctor = new TF1::TF1FunctorPointerImpl<Fnc_t>(ROOT::Math::ParamFunctorTempl<Fnc_t>(func));
^
/Users/D/root-6-12-04-02/include/TF1.h:361:41: note: in instantiation of member function 'ROOT::Internal::TF1Builder<double ()(double )>::Build’ requested here
ROOT::Internal::TF1Builder::Build(this, f);
^
/Users/D/Documents/cross_section/pipi_fitting/Omnes_fitting.cpp:43:21: note: in instantiation of function template specialization 'TF1::TF1<double ()(double *)>’ requested here
TF1 omnes= new TF1(“omnes”, Omnes_fit,0.0,1.0,2);
^
In file included from /Users/D/root-6-12-04-02/input_line_12:24:
In file included from /Users/D/root-6-12-04-02/etc/dictpch/allHeaders.h:774:
In file included from /Users/D/root-6-12-04-02/include/TMVA/CrossValidation.h:9:
In file included from /Users/D/root-6-12-04-02/include/TMultiGraph.h:26:
In file included from /Users/D/root-6-12-04-02/include/TF1.h:35:
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:121:25: error: too many arguments to function call, expected 1, have 2
return (*f)(x, p);
~~~~ ^
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:91:45: note: in instantiation of member function 'ROOT::Math::ParamFunctorHandler<ROOT::Math::ParamFunctorTempl, double ()(double )>::FuncEvaluator<double
()(double ), int>::Eval’ requested here
return FuncEvaluator<Func, EvalType>::Eval(fFunc,x,p);
^
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:73:4: note: in instantiation of member function 'ROOT::Math::ParamFunctorHandler<ROOT::Math::ParamFunctorTempl, double ()(double )>::operator()’ requested here
ParamFunctorHandler(const Func & fun) : fFunc(fun) {}
^
/Users/D/root-6-12-04-02/include/Math/ParamFunctor.h:304:17: note: in instantiation of member function 'ROOT::Math::ParamFunctorHandler<ROOT::Math::ParamFunctorTempl, double ()(double )>::ParamFunctorHandler’ requested
here
fImpl(new ParamFunctorHandler<ParamFunctorTempl,Func>(f) )
^
/Users/D/root-6-12-04-02/include/TF1.h:718:62: note: in instantiation of function template specialization 'ROOT::Math::ParamFunctorTempl::ParamFunctorTempl<double ()(double )>’ requested here
f->fFunctor = new TF1::TF1FunctorPointerImpl<Fnc_t>(ROOT::Math::ParamFunctorTempl<Fnc_t>(func));
^
/Users/D/root-6-12-04-02/include/TF1.h:361:41: note: in instantiation of member function 'ROOT::Internal::TF1Builder<double ()(double )>::Build’ requested here
ROOT::Internal::TF1Builder::Build(this, f);
^
/Users/D/Documents/cross_section/pipi_fitting/Omnes_fitting.cpp:43:21: note: in instantiation of function template specialization 'TF1::TF1<double ()(double *)>’ requested here
TF1 *omnes= new TF1(“omnes”, Omnes_fit,0.0,1.0,2);
^
root [1]
Any help would be greatly appreciated.
Thanks
Dil
Omnes_fitting.cpp (3.5 KB)
Omnes_fitting.hpp (236 Bytes)
Omnes00KM.txt (9.4 KB)
plots_1.root (695.2 KB)
Omnes11.txt (9.4 KB)