[ROOT] compiling failure with ACLiC

From: Dongwook Jang (dwjang@fnal.gov)
Date: Sat Mar 13 2004 - 13:50:04 MET


Hi,

I couldn't make the attached script compiled with ACLiC. What I did is :
root[0] .L drawGraph.C+

Then I got following message.

/home/dwjang/work/scratch/RtgAnalyzer/filevT8NTe.cxx: In function `int
   G__filevT8NTe__0_26(G__value*, const char*, G__param*, int)':
/home/dwjang/work/scratch/RtgAnalyzer/filevT8NTe.cxx:98: parse error 
before `*'
   token
/home/dwjang/work/scratch/RtgAnalyzer/filevT8NTe.cxx: In function `int
   G__filevT8NTe__1_26(G__value*, const char*, G__param*, int)':
/home/dwjang/work/scratch/RtgAnalyzer/filevT8NTe.cxx:103: parse error 
before `*
   ' token
/home/dwjang/work/scratch/RtgAnalyzer/filevT8NTe.cxx: In function `int
   G__filevT8NTe__2_26(G__value*, const char*, G__param*, int)':
/home/dwjang/work/scratch/RtgAnalyzer/filevT8NTe.cxx:108: parse error 
before `*
   ' token
g++: /home/dwjang/work/scratch/RtgAnalyzer/./filevT8NTe.o: No such file 
or directory
Error in <ACLiC>: Compilation failed!

Thank you in advance.

Dongwook Jang.


//--------------------------------------------------------------------------
// File and Version Information:
//      $Id: drawGraph.C,v 1.12 2004/02/13 19:32:54 dwjang Exp $
//
// Description:
//      root script for making fake rate canvases
//
// Usage:
//      root[0].x drawGraph.C
//
//------------------------------------------------------------------------

#ifndef __CINT__

#include "TFile.h"
#include "TTree.h"
#include "TString.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TF1.h"
#include "TGraphErrors.h"
#include "TCanvas.h"

#include <iostream>
using namespace std;

#endif

#define nEtBin 11
// bin     : 0  1  2  3  4  5  6  7  8  9   10
// lowEdge : 15 20 25 30 35 40 50 60 80 100 150 
const float xLowEdge[3][nEtBin] = {
  {15.0,20.0,25.0,30.0,35.0,40.0,45.0,50.0,55.0,60.0,70.0},   // for JET_20
  {15.0,20.0,25.0,30.0,35.0,40.0,50.0,60.0,80.0,100.0,150.0}, // for JET_50
  {15.0,20.0,25.0,30.0,35.0,40.0,50.0,60.0,80.0,100.0,150.0}  // for JET_70
};

float DivError(float x1, float x2, float e1, float e2);
TGraphErrors* FillGraph(TTree* tree, TString bName, int iJet, int whichJet);
TGraphErrors* AddGraph(TGraphErrors* g1, TGraphErrors* g2);
TGraphErrors* DivideGraph(TGraphErrors* g1, TGraphErrors* g2);



void drawGraph(){

  const int NJET = 3;

  TString jetTrig[NJET] = {"JET_20","JET_50","JET_70"};

  TFile* nf[NJET];
  TTree* nt[NJET][3]; // jet sample, different ntuples in a given sample

  float clusterEt_loose[NJET];
  float clusterWidth_loose[NJET];
  float clusterMass_loose[NJET];
  float emFraction_loose[NJET];
  float calIsoR_loose[NJET];
  float isTrigger_loose[NJET];

  float clusterEt_tight[NJET];
  float clusterWidth_tight[NJET];
  float clusterMass_tight[NJET];
  float emFraction_tight[NJET];
  float calIsoR_tight[NJET];
  float isTrigger_tight[NJET];

  float clusterEt_tight_calIsoR_n1[NJET];
  float calIsoR_tight_calIsoR_n1[NJET];
  float isTrigger_tight_calIsoR_n1[NJET];


  TH1F* n_et = new TH1F("n_et","n_et",200,0,200);
  TH1F* d_et = new TH1F("d_et","d_et",200,0,200);


  TGraphErrors* g_clusterEt = new TGraphErrors(3*nEtBin);
  TGraphErrors* dg[NJET];
  TGraphErrors* ng[NJET];

  for(int i=0; i<NJET; i++){
    nf[i] = new TFile("results/ntuples_FakeRate_"+jetTrig[i]+".root","READ");

    nt[i][0] = (TTree*) nf[i]->Get("ntuple_loose");
//     nt[i][0]->SetBranchAddress("clusterEt",&clusterEt_loose[i]);
//     nt[i][0]->SetBranchAddress("clusterWidth",&clusterWidth_loose[i]);
//     nt[i][0]->SetBranchAddress("clusterMass",&clusterMass_loose[i]);
//     nt[i][0]->SetBranchAddress("emFraction",&emFraction_loose[i]);
//     nt[i][0]->SetBranchAddress("calIsoR",&calIsoR_loose[i]);
//     nt[i][0]->SetBranchAddress("isTrigger",&isTrigger_loose[i]);

    dg[i] = FillGraph(nt[i][0],"clusterEt",i,0);

    Int_t nentries = (int) nt[i][0]->GetEntries();
    for(int ev=0; ev<nentries; ev++){
      nt[i][0]->GetEntry(ev);
      if(i==0) d_et->Fill(clusterEt_loose[0]);
    }

    nt[i][1] = (TTree*) nf[i]->Get("ntuple_tight");
//     nt[i][1]->SetBranchAddress("clusterEt",&clusterEt_tight[i]);
//     nt[i][1]->SetBranchAddress("clusterWidth",&clusterWidth_tight[i]);
//     nt[i][1]->SetBranchAddress("clusterMass",&clusterMass_tight[i]);
//     nt[i][1]->SetBranchAddress("emFraction",&emFraction_tight[i]);
//     nt[i][1]->SetBranchAddress("calIsoR",&calIsoR_tight[i]);
//     nt[i][1]->SetBranchAddress("isTrigger",&isTrigger_tight[i]);

    ng[i] = FillGraph(nt[i][1],"clusterEt",i,0);

    nentries = (int) nt[i][1]->GetEntries();
    for(int ev=0; ev<nentries; ev++){
      nt[i][1]->GetEntry(ev);
      if(i==0) n_et->Fill(clusterEt_tight[0]);
    }

    nt[i][2] = (TTree*) nf[i]->Get("ntuple_tight_calIsoR_n1");
//     nt[i][2]->SetBranchAddress("clusterEt",&clusterEt_tight_calIsoR_n1[i]);
//     nt[i][2]->SetBranchAddress("calIsoR",&calIsoR_tight_calIsoR_n1[i]);
//     nt[i][2]->SetBranchAddress("isTrigger",&isTrigger_tight_calIsoR_n1[i]);

    nentries = (int) nt[i][2]->GetEntries();
    for(int ev=0; ev<nentries; ev++){
      nt[i][2]->GetEntry(ev);
    }

  }// for i


  TGraphErrors* gg[NJET];
  for(int i=0; i<NJET; i++){
    gg[i] = DivideGraph(ng[i],dg[i]);
    gg[i]->SetMarkerStyle(20);
    gg[i]->SetMarkerColor(2+i);
  }

  TGraphErrors* g12 = AddGraph(gg[0],gg[1]);
  TGraphErrors* g = AddGraph(g12,gg[2]);


  TCanvas* can = new TCanvas("can","can",800,800);

  TH2F* back = new TH2F("rate","rate",200,0,200,100,0,0.5);

  can->Divide(2,2);
  can->cd(1);
  back->Draw();
  gg[0]->Draw("P");
  can->cd(2);
  back->Draw();
  gg[1]->Draw("P");
  can->cd(3);
  back->Draw();
  gg[2]->Draw("P");
  can->cd(4);
  back->Draw();
  g->SetMarkerStyle(20);
  g->SetMarkerColor(1);
  g->Draw("P");
/*   g->Fit("pol2","LER","",15.0,200.0); */
/*   g->GetFunction("plo2")->Draw("same"); */

//   Int_t nSection = 3;
//   Int_t *nGroup = new Int_t[nSection];
//   Double_t *splitPoints = new Double_t[nSection+1];
//   nGroup[0] = 5;
//   nGroup[1] = 25;
//   nGroup[2] = 50;
//   splitPoints[0] = 0.0;
//   splitPoints[1] = 50.0;
//   splitPoints[2] = 100.0;
//   splitPoints[3] = 200.0;
//   Rebin(n_et,nGroup,splitPoints,nSection);
//   Rebin(d_et,nGroup,splitPoints,nSection);

//   TH1F* r_et = Divide(n_et,d_et);

//   //r_et->Draw("et");


  /*
   int n = 10;
   float x[10] = {1.0,2.1,3.0,3.9,4.1,2.5,3.0,7.1,8.0,4.1};
   float y[10] = {3.0,4.0,5.0,3.5,3.1,2.0,5.1.4.4,3.7,2.8};
   float xe[10] = {2.1,3.5,0.3,5.2,0.2,0.5,0.7,0.6,1.2,1.3};
   float ye[10] = {1,1,1,1,1,1,1,1,1,1};


   TCanvas* can = new TCanvas("can","can",600,600);
   can->Divide(1,2);
   can->cd(1);
   TGraphErrors* gr = new TGraphErrors(n,x,y,xe,ye);
   gr->SetMarkerStyle(20);
   gr->SetMarkerColor(2);
   gr->Draw("AP");
   can->cd(2);
   TGraphErrors* gr2 = (TGraphErrors*) gr->Clone();
   gr2->InsertPoint();
   gr2->SetPoint(10,0.3,0.3);
   gr2->SetPointError(10,0.3,0.3);
   gr2->Draw("AP");
  */


}



//---------------------------------------------------------------
// function's implementation
//---------------------------------------------------------------

float DivError(float x1, float x2, float e1, float e2){
  // err(x1/x2) = (x1/x2) * sqrt(e1^2/x1^2 + e2^2/x2^2)
  float error = 0.0;
  if(x1 < 1.0e-6 || x2 < 1.0e-6) return error;

  error = x1/x2 * sqrt(e1*e1/x1/x1 + e2*e2/x2/x2);
  return error;
}


TGraphErrors* AddGraph(TGraphErrors* g1, TGraphErrors* g2){

  // This is adding points to a new graph not computing addition

  Int_t n1 = g1->GetN();
  Int_t n2 = g2->GetN();
  Double_t* x1s = g1->GetX();
  Double_t* x2s = g2->GetX();
  Double_t* y1s = g1->GetY();
  Double_t* y2s = g2->GetY();
  Double_t* ex1s = g1->GetEX();
  Double_t* ex2s = g2->GetEX();
  Double_t* ey1s = g1->GetEY();
  Double_t* ey2s = g2->GetEY();

  const int nbins = n1 + n2;
  Double_t x[nbins], y[nbins], ex[nbins], ey[nbins];
  for(int i=0; i<n1; i++){
    x[i] = x1s[i];
    y[i] = y1s[i];
    ex[i] = ex1s[i];
    ey[i] = ey1s[i];
  }
  for(int i=0; i<n2; i++){
    x[n1+i] = x2s[i];
    y[n1+i] = y2s[i];
    ex[n1+i] = ex2s[i];
    ey[n1+i] = ey2s[i];
  }

  return new TGraphErrors(nbins,x,y,ex,ey);

}


TGraphErrors* DivideGraph(TGraphErrors* g1, TGraphErrors* g2){

  Int_t n1 = g1->GetN();
  Int_t n2 = g2->GetN();

  if(n1 != n2){
    cout << "You are dividing graphs with different bins" << endl;
    return new TGraphErrors(1);
  }
  if(n1 != nEtBin){
    cout << "Check graph binning" << endl;
    return new TGraphErrors(1);
  }

//   cout << "n1, n2 : " << n1 << ", " << n2 << endl;
//   cout << "g1, g2 address : " << g1 << ", " << g2 << endl;


  Double_t* x1s = g1->GetX();
  Double_t* x2s = g2->GetX();
  Double_t* y1s = g1->GetY();
  Double_t* y2s = g2->GetY();
  Double_t* ex1s = g1->GetEX();
  Double_t* ex2s = g2->GetEX();
  Double_t* ey1s = g1->GetEY();
  Double_t* ey2s = g2->GetEY();


  const int nbins = nEtBin;
  Double_t x[nbins], y[nbins], ex[nbins], ey[nbins];
  for(int i=0; i<nbins; i++){
    x[i] = y[i] = ex[i] = ey[i] = 0.0;

//     cout << i << "th x1s,x2s,y1s,y2s,ex1s,ex2s,ey1s,ey2s : "
// 	 << x1s[i] << ", " << x2s[i] << ", " << y1s[i] << ", " << y2s[i] << ", "
// 	 << ex1s[i] << ", " << ex2s[i] << ", " << ey1s[i] << ", " << ey2s[i] << endl;


    // error weighted average and gaussian error for x
//     x[i] = ex1s[i]*x1s[i] + ex2s[i]*x2s[i];
//     if(ex1s[i] + ex2s[i] < 1.0e-6) x[i] = -1.0;
//     x[i] = x[i]/(ex1s[i] + ex2s[i]);
    x[i] = x2s[i];
    ex[i] = sqrt(ex1s[i]*ex1s[i] + ex2s[i]*ex2s[i]);

    if(y2s[i] < 1.0e-6) y[i] = -1.0;
    y[i] = y1s[i]/y2s[i];
    ey[i] = DivError(y1s[i],y2s[i],ey1s[i],ey2s[i]);

//     cout << i << "th x,y,ex,ey : "
// 	 << x[i] << ", " << y[i] << ", " << ex[i] << ", " << ey[i] << endl;
  }

//   cout << "nbins, x, y, ex, ey : " 
//        << nbins << ", " << x[0] << ", " << y[0] << ", " << ex[0] << ", " << ey[0] << endl; 

  return new TGraphErrors(nbins,x,y,ex,ey);

}


TGraphErrors* FillGraph(TTree* tree, TString bName, int iJet, int whichJet){

  // input  : tree, branchName
  // output : graph

  float xx = 0.0;
  float isTrigger = 0.0;
  tree->SetBranchAddress(bName,&xx);
  tree->SetBranchAddress("isTrigger",&isTrigger);

  float x[nEtBin],y[nEtBin],ex[nEtBin],ey[nEtBin];
  for(int i=0; i<nEtBin; i++) x[i] = y[i] = ex[i] = ey[i] = 0.0;

  Int_t nentries = (int) tree->GetEntries();
  for(int ev=0; ev<nentries; ev++){
    tree->GetEntry(ev);
    if(TMath::Abs(isTrigger - whichJet) > 0.5) continue;
    if(xx < xLowEdge[iJet][0]) continue;
    else if(xx >= xLowEdge[iJet][nEtBin-1]){
      x[nEtBin-1] += xx;
      y[nEtBin-1] += 1.0;
      continue;
    }
    
    for(int i=0; i<nEtBin-1; i++){
      if(xx >= xLowEdge[iJet][i] && xx < xLowEdge[iJet][i+1]){
	x[i] += xx;
	y[i] += 1.0;
	continue;
      }
    }
  }

  // put actual mean value to x
  // assign possion errors to ey
  for(int i=0; i<nEtBin; i++){
    if(y[i] < 1.0e-6) x[i] = -1.0;
    else x[i] = x[i]/y[i];
    ey[i] = sqrt(y[i]);
  }

  for(int ev=0; ev<nentries; ev++){
    tree->GetEntry(ev);
    if(TMath::Abs(isTrigger - whichJet) > 0.5) continue;
    if(xx < xLowEdge[iJet][0]) continue;
    else if(xx >= xLowEdge[iJet][nEtBin-1]){
      ex[nEtBin-1] += (xx-x[nEtBin-1])*(xx-x[nEtBin-1]);
      continue;
    }
    
    for(int i=0; i<nEtBin-1; i++){
      if(xx >= xLowEdge[iJet][i] && xx < xLowEdge[iJet][i+1]){
	ex[i] += (xx-x[i])*(xx-x[i]);
      }
    }
  }

  for(int i=0; i<nEtBin; i++){
    if(y[i] < 1.0e-6) ex[i] = 0.0;
    else ex[i] = sqrt(ex[i])/y[i];
  }
  
  return new TGraphErrors(nEtBin,x,y,ex,ey);
}



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:06 MET