The initial data are stored in TMultiGraphs. They represent the european countries. The histogram filling is done according to a Mercator projection, therefore the bin contains should be proportional to the real surface of the countries.
The script is shooting npoints (script argument) randomly over the Europe area. The number of points inside the countries should be proportional to the country surface The estimated surface is compared to the surfaces taken from wikipedia.
void th2polyEurope(
Int_t npoints=500000)
{
const char *countries[nx] = {
"france", "spain", "sweden", "germany", "finland",
"norway", "poland", "italy", "yugoslavia", "united_kingdom",
"romania", "belarus","greece", "czechoslovakia","bulgaria",
"iceland", "hungary","portugal","austria", "ireland",
"lithuania", "latvia", "estonia", "denmark", "netherlands",
"switzerland","moldova","belgium", "albania", "cyprus",
"luxembourg", "andorra","malta", "liechtenstein", "san_marino", "monaco" };
547030, 505580, 449964, 357021, 338145,
324220, 312685, 301230, 255438, 244820,
237500, 207600, 131940, 127711, 110910,
103000, 93030, 89242, 83870, 70280,
65200, 64589, 45226, 43094, 41526,
41290, 33843, 30528, 28748, 9250,
2586, 468, 316, 160, 61, 2};
TH1F *
h =
new TH1F(
"h",
"Countries surfaces (in km^{2})",3,0,3);
for (i=0; i<nx; i++)
h->Fill(countries[i],
surfaces[i]);
f =
TFile::Open(
"http://root.cern.ch/files/europe.root",
"cacheread");
printf("Cannot access europe.root. Is internet working ?\n");
return;
}
"Europe",
"Europe (bin contents are normalized to the surfaces in km^{2})",
lon1,lon2,lat1,lat2);
while ((key = (
TKey*)nextkey())) {
}
}
for (i=0; i<npoints; i++) {
longitude =
r.Uniform(lon1,lon2);
latitude =
r.Uniform(lat1,lat2);
}
for (j=0; j<nx; j++) {
for (i=0; i<nbins; i++) {
}
}
}
c1->SetRightMargin(0.047);
h->GetXaxis()->SetLabelFont(42);
h->GetXaxis()->SetLabelSize(0.03);
h->GetYaxis()->SetLabelFont(42);
leg->AddEntry(
h,
"Real countries surfaces from Wikipedia (in km^{2})",
"lp");
leg->AddEntry(h2,
"Countries surfaces from TH2Poly (with errors)",
"lp");
printf("THPoly Europe surface estimation error wrt wikipedia = %f per cent when using %d points\n",100*error,npoints);
}
#define R(a, b, c, d, e, f, g, h, i)
R__EXTERN TBenchmark * gBenchmark
R__EXTERN TStyle * gStyle
virtual void SetNdivisions(Int_t n=510, Bool_t optim=kTRUE)
Set the number of divisions for this axis.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
virtual void Start(const char *name)
Starts Benchmark with the specified name.
virtual void Show(const char *name)
Stops Benchmark name and Prints results.
virtual void ToggleEventStatus()
Toggle event statusbar.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
static Bool_t SetCacheFileDir(ROOT::Internal::TStringView cacheDir, Bool_t operateDisconnected=kTRUE, Bool_t forceCacheread=kFALSE)
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose, Int_t netopt=0)
Create / open a file.
1-D histogram with a float per channel (see TH1 documentation)}
virtual void Reset(Option_t *option="")
Reset.
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const
Return maximum value smaller than maxval of bins in the range, unless the value has been overridden b...
virtual void SetBinError(Int_t bin, Double_t error)
Set the bin Error Note that this resets the bin eror option to be of Normal Type and for the non-empt...
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
virtual void SetContour(Int_t nlevels, const Double_t *levels=0)
Set the number and values of contour levels.
virtual Double_t Integral(Option_t *option="") const
Return integral of bin contents.
virtual void Draw(Option_t *option="")
Draw this histogram with options.
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
2D Histogram with Polygonal Bins
Int_t GetNumberOfBins() const
virtual Int_t Fill(Double_t x, Double_t y)
Increment the bin containing (x,y) by 1.
void ChangePartition(Int_t n, Int_t m)
Changes the number of partition cells in the histogram.
const char * GetBinName(Int_t bin) const
Returns the bin name.
virtual Double_t GetBinContent(Int_t bin) const
Returns the content of the input bin For the overflow/underflow/sea bins:
virtual Int_t AddBin(TObject *poly)
Adds a new bin to the histogram.
virtual Double_t GetBinError(Int_t bin) const
Returns the value of error associated to bin number bin.
virtual void SetBinContent(Int_t bin, Double_t content)
Sets the contents of the input bin to the input content Negative values between -1 and -9 are for the...
Double_t GetMaximum() const
Returns the maximum value of the histogram.
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual TObject * ReadObj()
To read a TObject* from the file.
This class displays a legend box (TPaveText) containing several legend entries.
A TMultiGraph is a collection of TGraph (or derived) objects.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
Mother of all ROOT objects.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void SetGridx(Int_t value=1)
virtual void SetGridy(Int_t value=1)
This is the base class for the ROOT Random number generators.
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
void SetStatX(Float_t x=0)
void SetStatW(Float_t w=0.19)
void SetStatY(Float_t y=0)
static constexpr double mg
Double_t Sqrt(Double_t x)