Taking TF2 Eval

Hello all,

My code is crashing when I introduce the following line?
h_logLisum[Q2binning][xBbinning]->Fill(xBj,QSq,flogli[Q2binning][xBbinning]->Eval(xBj,QSq));

flogli[Q2binning][xBbinning]->Eval(xBj,QSq) this is the problem I catched.Could you help me to figure out this?
Here is my snippet.

Double_t LogxBQSq(Double_t *val,Double_t *par){
    
    Float_t x = val[0];
    Float_t y = val[1];
    Double_t result=0;
    Double_t func=0;
    func= TMath::Power(x,par[0]) * TMath::Power((1-x),par[1])* TMath::Power((1+ (y*y)/ par[2]),-par[3]);
    result+=-log(func);
    return result;
    
    
}

void logsum{

TH1F *Q2bins = new TH1F("Q2bins","Q2bins",4,Q2LowBinEdge);
    
 TH1F *xBbins = new TH1F("xBbins","xBbins",3,0,3);
    
    
    int nQ2=4;
    int nx=3;

 TF2  *flogli[nQ2][nx];
TH2F *h_logLisum[nQ2][nx];
for (int iQ2=0; iQ2<nQ2; iQ2++) {
            for (int ixB=0; ixB<nx; ixB++) {
                sprintf(nameTF2,"flogli_Q2%03d_xB%03d",iQ2,ixB);
                flogli[iQ2][ixB] = new TF2(nameTF2,LogxBQSq,0.0,1.0,0.,10.0);
                
                flogli[iQ2][ixB]->SetParameters(0,0.5);
                flogli[iQ2][ixB]->SetParameters(1,3.0);
                flogli[iQ2][ixB]->SetParameters(2,1.0);
                flogli[iQ2][ixB]->SetParameters(3,2.0);
                
                sprintf(histName_1,"h_logLisum_Q2%03d_xB%03d",iQ2,ixB);
                h_logLisum[iQ2][ixB]=new TH2F(histName_1,"Q2 vs xB",300,0.,1.,300,0.,10.0);
            }

}    
                
               QSq=-q4vec.M2();
               xBj=QSq/(2*target.Dot(q4vec));

             int xBbinning = xBbins->GetXaxis()->FindBin(ix)-1;
             int Q2binning = Q2bins->GetXaxis()->FindBin(QSq)-1;

            if(xBbinning>-1 && xBbinning<nx && Q2binning>-1 && Q2binning<nQ2){
                              
           h_logLisum[Q2binning][xBbinning]->Fill(xBj,QSq,flogli[Q2binning][xBbinning]->Eval(xBj,QSq)); //This line cause for crashing 
                                                    
                                }
            
}

Thanks
Dil

I cleaned up you code sample, but it is not working. There is many mistakes. Try to run it, you will see. Here is the cleaned up (intended) version:

Double_t LogxBQSq(Double_t *val,Double_t *par){
   Float_t x = val[0];
   Float_t y = val[1];
   Double_t result=0;
   Double_t func=0;
   func= TMath::Power(x,par[0]) * TMath::Power((1-x),par[1])* TMath::Power((1+ (y*y)/ par[2]),-par[3]);
   result+=-log(func);
   return result;
}

void logsum(){
   TH1F *Q2bins = new TH1F("Q2bins","Q2bins",4,Q2LowBinEdge);
   TH1F *xBbins = new TH1F("xBbins","xBbins",3,0,3);

   int nQ2=4;
   int nx=3;

   TF2  *flogli[nQ2][nx];
   TH2F *h_logLisum[nQ2][nx];
   for (int iQ2=0; iQ2<nQ2; iQ2++) {
      for (int ixB=0; ixB<nx; ixB++) {
         sprintf(nameTF2,"flogli_Q2%03d_xB%03d",iQ2,ixB);
         flogli[iQ2][ixB] = new TF2(nameTF2,LogxBQSq,0.0,1.0,0.,10.0);
         flogli[iQ2][ixB]->SetParameters(0,0.5);
         flogli[iQ2][ixB]->SetParameters(1,3.0);
         flogli[iQ2][ixB]->SetParameters(2,1.0);
         flogli[iQ2][ixB]->SetParameters(3,2.0);
         sprintf(histName_1,"h_logLisum_Q2%03d_xB%03d",iQ2,ixB);
         h_logLisum[iQ2][ixB]=new TH2F(histName_1,"Q2 vs xB",300,0.,1.,300,0.,10.0);
      }
   }

   QSq=-q4vec.M2();
   xBj=QSq/(2*target.Dot(q4vec));

   int xBbinning = xBbins->GetXaxis()->FindBin(ix)-1;
   int Q2binning = Q2bins->GetXaxis()->FindBin(QSq)-1;

   if(xBbinning>-1 && xBbinning<nx && Q2binning>-1 && Q2binning<nQ2){
      h_logLisum[Q2binning][xBbinning]->Fill(xBj,QSq,flogli[Q2binning][xBbinning]->Eval(xBj,QSq)); //This line cause for crashing
   }
}
root [0] 
Processing logsum.C...
In file included from input_line_12:1:
/Users/couet/roottest/logsum.C:12:48: error: use of undeclared identifier 'Q2LowBinEdge'
   TH1F *Q2bins = new TH1F("Q2bins","Q2bins",4,Q2LowBinEdge);
                                               ^
/Users/couet/roottest/logsum.C:22:18: error: use of undeclared identifier 'nameTF2'
         sprintf(nameTF2,"flogli_Q2%03d_xB%03d",iQ2,ixB);
.... etc ....

Hello Oliver,
Appreciate your cleaned up code(Sorry for the ugly code that I uploaded, I just took few lines from my long code to relate this issue)

I am still not sure why my code is crashing.This line is cause for the crashing.

h_logLisum[Q2binning][xBbinning]->Fill(xBj,QSq,flogli[Q2binning][xBbinning]->Eval(xBj,QSq)); //This line cause for crashing

Any idea to get the Value of the function for each bin that weight my 2D histogram with that value?

flogli[Q2binning][xBbinning]->Eval(xBj,QSq)

Thanks
Dil

It is hard to tell why it is crashing as we do not know the values of Q2binning and xBbinning. You also did not tell what kind of crash you get? very likely flogli[Q2binning][xBbinning] is undefined.

The problem was I forgot to declare the number of parameters.

flogli[iQ2][ixB] = new TF2(nameTF2,LogxBQSq,0.0,1.0,0.,10.0,4);

Thanks
Dil