How exactly does ROOT work

I am confused about where I should start with working on ROOT. I have installed it but I don’t understand how to run macros on it or what the general syntax is supposed to be like. The only coding I have done so far is compile C++ codes for my school projects etc. Any help would be appreciated.

ROOT Version: 6.18
Platform: Windows 10


ROOT Primer

So I used this code word for word

root [6] double x=.5
(double) 0.500000
root [7] int N=30
(int) 30
root [8] double geom_series=0
(double) 0.000000
root [9] for (int i=0;i<N;++i)geom_series+=TMath::Power(x,i)
root [10]  cout << TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;

and this was the output I got:

ROOT_prompt_6:1:9: warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]
cout << TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;
        ^~~~~~~~~~
ROOT_prompt_6:1:37: warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]
cout << TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;
                                    ^~~~~~~~~~~~
input_line_200:2:3: error: use of undeclared identifier 'cout'
 (cout << TMath::((*(Double_t (Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Doubl...
  ^
input_line_200:2:18: error: expected unqualified-id
 (cout << TMath::((*(Double_t (Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Doubl...
                 ^
input_line_200:2:40: error: expected '(' for function-style cast or type construction
 (cout << TMath::((*(Double_t (Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Doubl...
                               ~~~~~~~~^
input_line_200:2:42: error: expected expression
 (cout << TMath::((*(Double_t (Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Doubl...
                                         ^
input_line_200:2:94: error: expected unqualified-id
 (cout << TMath::((*(Double_t (Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Doubl...
                                                                                             ^
input_line_200:2:116: error: expected '(' for function-style cast or type construction
  ...TMath::((*(Double_t (Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Double_t, Int_t...
                                                                                                      ~~~~~~~~^
input_line_200:2:118: error: unexpected type name 'Int_t': expected expression
  ...(Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Double_t, Int_t)*)0x155bb0c0))(((*(...
                                                                                            ^
input_line_200:2:125: error: expected expression
  ...(Double_t)*)0x155bb070))(((*(double*)0x1280040)) - (1 - TMath::((*(Double_t (Double_t, Int_t)*)0x155bb0c0))(((*(...
                                                                                                   ^
input_line_200:2:227: error: use of undeclared identifier 'endl'
  ...((*(int*)0x1280038)) - 1)) / (1 - ((*(double*)0x1280030)))) << endl)

I don’t understand what’s wrong

Hi @esh187,
that snippet works fine on linux, so I guess the problem is with windows (@bellenot might have an idea about the precise cause).

How did you install ROOT on windows? There is a number of features that does not work there, as far as I know.

Cheers,
Enrico

It is fine on Mac too:

root [6]  double x=.5
(double) 0.50000000
root [7] int N=30
(int) 30
root [8] double geom_series=0
(double) 0.0000000
root [9] for (int i=0;i<N;++i)geom_series+=TMath::Power(x,i)
root [10]  cout << TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;
1.86265e-09
root [11] 

Weird, it works also for me:

**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.6.0
** Copyright (c) 2020 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'

C:\Users\bellenot>cd temp

C:\Users\bellenot\temp>root\bin\thisroot.bat

C:\Users\bellenot\temp>root -l
root [0] double x=.5
(double) 0.50000000
root [1] int N=30
(int) 30
root [2] double geom_series=0
(double) 0.00000000
root [3] for (int i=0;i<N;++i)geom_series+=TMath::Power(x,i)
root [4] cout << TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;
1.86265e-09
root [5]

But it might still come from an incompatibility of different versions of Visual Studio (I tried with ROOT v6.18/04). I’m checking right now

What did you do before in ROOT (i.e. the first five lines/commands)? Can you try to start again from a clean prompt and type only the lines you posted here?

root [0] double x=.5
(double) 0.50000000
root [1] int N=30
(int) 30
root [2] double geom_series = 0
(double) 0.00000000
root [3] for( int i=0; i<N ; ++i)geom_series+= TMath::Power(x,i)
root [4] cout<< TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;
ROOT_prompt_4:1:8: warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]
cout<< TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;
^~~~~~~~~~
ROOT_prompt_4:1:36: warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]
cout<< TMath::Abs(geom_series - (1-TMath::Power(x,N-1))/(1-x)) <<endl;
^~~~~~~~~~~~
input_line_14:2:3: error: use of undeclared identifier ‘cout’
(cout << TMath::(((Double_t (Double_t))0xade5070))((((double)0xae00030)) - (1 - TMath::(((Double_t (Double…
^
input_line_14:2:18: error: expected unqualified-id
(cout << TMath::((
(Double_t (Double_t))0xade5070))((((double*)0xae00030)) - (1 - TMath::(((Double_t (Double…
^
input_line_14:2:40: error: expected ‘(’ for function-style cast or type construction
(cout << TMath::((
(Double_t (Double_t))0xade5070))((((double*)0xae00030)) - (1 - TMath::((*(Double_t (Double…
~~~~~~~~^
input_line_14:2:42: error: expected expression
(cout << TMath::(((Double_t (Double_t))0xade5070))((((double)0xae00030)) - (1 - TMath::(((Double_t (Double…
^
input_line_14:2:93: error: expected unqualified-id
(cout << TMath::((
(Double_t (Double_t))0xade5070))((((double*)0xae00030)) - (1 - TMath::(((Double_t (Double…
^
input_line_14:2:115: error: expected ‘(’ for function-style cast or type construction
…TMath::((
(Double_t (Double_t))0xade5070))((((double*)0xae00030)) - (1 - TMath::(((Double_t (Double_t, Int_t)…
~~~~~~~~^
input_line_14:2:117: error: unexpected type name ‘Int_t’: expected expression
…(Double_t)
)0xade5070))((((double)0xae00030)) - (1 - TMath::(((Double_t (Double_t, Int_t))0xade50c0))((((do…
^
input_line_14:2:124: error: expected expression
…(Double_t)
)0xade5070))((((double)0xae00030)) - (1 - TMath::(((Double_t (Double_t, Int_t))0xade50c0))((((do…
^
input_line_14:2:225: error: use of undeclared identifier ‘endl’
…((
(int*)0xae00028)) - 1)) / (1 - (((double)0xae00020)))) << endl)


And then it simply exits the ROOT session and I’m back where I started. Maybe I didn’t install it right?

Try with: std::cout << ... << std::endl;

or start with #include <iostream>

Did this and this time the result was:
ROOT_prompt_5:1:35: error: expression is not assignable
cout<< TMath::Abs(geom_series - (1–TMath::Power(x,N-1))/(1-x)) << endl;
~^
ROOT_prompt_5:1:68: error: use of undeclared identifier ‘endl’
cout<< TMath::Abs(geom_series - (1–TMath::Power(x,N-1))/(1-x)) << endl;
^
root [6]

error: expression is not assignable
This is what I got.

I have verison v6.18/04 downloaded on my Windows10 with Visual Studio 2019 at the moment. Maybe I should install an earlier version @bellenot ?

can you try to use another variable name than geom_series?

Nope…

Did that, stills shows errors. Maybe it has something to do with the way I installed or something?

Any particular thing I need to know about the Folders and such in which I have installed the root version v6.18/04?

The only restriction is to install it in a path not containing any white space. Why? where did you install it?

No there is no white space or anything of the sort in the path. It won’t even accept " cout " and “endl” for some reason and I don’t understand why that is

Which version of Visual Studio 2019 do you have?