It ingests climate data and creates a model with fields like AverageTemperature. Then it uses RDataframe to process and filter the climate data for average temperature per city by season. Then it does the same for average temperature per city for the years between 1993-2002, and 2003-2013. Finally, the tutorial visualizes this processed data through histograms.
#include <algorithm>
#include <cassert>
#include <cstdio>
#include <fstream>
#include <iostream>
#include <memory>
#include <string>
#include <sstream>
#include <stdexcept>
#include <utility>
#include <chrono>
using Clock = std::chrono::high_resolution_clock;
{
auto result = std::shared_ptr<TH1D>(
static_cast<TH1D *
>(
h.GetPtr()->Clone()));
result->SetDirectory(
nullptr);
}
constexpr const char *
kRawDataUrl =
"http://root.cern./files/tutorials/GlobalLandTemperaturesByCity.csv";
constexpr const char *
kNTupleFileName =
"GlobalLandTemperaturesByCity.root";
{
auto model = RNTupleModel::Create();
auto fieldYear = model->MakeField<std::uint32_t>(
"Year");
auto fieldMonth = model->MakeField<std::uint32_t>(
"Month");
auto fieldDay = model->MakeField<std::uint32_t>(
"Day");
auto fieldAvgTemp = model->MakeField<
float>(
"AverageTemperature");
auto fieldTempUncrty = model->MakeField<
float>(
"AverageTemperatureUncertainty");
auto fieldCity = model->MakeField<std::string>(
"City");
auto fieldCountry = model->MakeField<std::string>(
"Country");
auto fieldLat = model->MakeField<
float>(
"Latitude");
auto fieldLong = model->MakeField<
float>(
"Longitude");
while (file->Readln(
record)) {
throw std::runtime_error(
"record too long: " +
record);
continue;
}
std::cout <<
" ... converted " <<
nRecords <<
" records" << std::endl;
}
std::cout <<
nSkipped <<
" records skipped" << std::endl;
std::cout <<
nRecords <<
" records processed" << std::endl;
std::cout << std::endl
<<
"Processing Time: " << std::chrono::duration_cast<std::chrono::seconds>(
t2 -
t1).count() <<
" seconds\n"
<< std::endl;
}
void Analyze()
{
df.Display()->Print();
auto min_value = df.Min(
"AverageTemperature");
auto max_value = df.Max(
"AverageTemperature");
dfFall.Histo1D({
"Fall Average Temp",
"Average Temperature by Season", 100, -40, 40},
"AverageTemperature");
dfWinter.Histo1D({
"Winter Average Temp",
"Average Temperature by Season", 100, -40, 40},
"AverageTemperature");
dfSpring.Histo1D({
"Spring Average Temp",
"Average Temperature by Season", 100, -40, 40},
"AverageTemperature");
dfSummer.Histo1D({
"Summer Average Temp",
"Average Temperature by Season", 100, -40, 40},
"AverageTemperature");
{"1993_to_2002 Average Temp", "Average Temperature: 1993_to_2002 vs. 2003_to_2013", 100, -40, 40},
"AverageTemperature");
{"2003_to_2013 Average Temp", "Average Temperature: 1993_to_2002 vs. 2003_to_2013", 100, -40, 40},
"AverageTemperature");
std::cout << std::endl <<
"The Minimum temperature is: " << *
min_value << std::endl;
std::cout <<
"The Maximum temperature is: " << *
max_value << std::endl;
std::cout << std::endl <<
"The count for Winter: " << *
winterCount << std::endl;
std::cout <<
"The count for Spring: " << *
springCount << std::endl;
std::cout <<
"The count for Summer: " << *
summerCount << std::endl;
std::cout <<
"The count for Fall: " << *
fallCount << std::endl;
auto canvas = RCanvas::Create("Average Temperature by Season");
auto legend = std::make_shared<TLegend>(0.15, 0.65, 0.53, 0.85);
canvas->Show();
auto canvas2 = RCanvas::Create(
"Average Temperature: 1993_to_2002 vs. 2003_to_2013");
auto legend2 = std::make_shared<TLegend>(0.1, 0.7, 0.48, 0.9);
}
{
}
Analyze();
}
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
R__EXTERN TSystem * gSystem
Provides v7 drawing facilities for TObject types (TGraph, TH1, TH2, etc).
The RRawFile provides read-only access to local and remote files.
Smart pointer for the return type of actions.
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...
const_iterator begin() const
const_iterator end() const
1-D histogram with a double per channel (see TH1 documentation)
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
On construction, an ROptions parameter can customize the RRawFile behavior.
size_t fBlockSize
Read at least fBlockSize bytes at a time. A value of zero turns off I/O buffering.