ROOT야 말로 진짜 빅 데이터를 다루는 프로그래밍 툴입니다. 저도 기억은 잘 안나는데 천공카드 시절부터 코딩을 하신 저희과 물리학 교수님께 들은바에 의하면 유럽입자물리연구소(CERN) 에서 수십년전에 개발한 과학용 툴로, 실험 한번에 수십 페타바이트 이상 생기는 데이터를 처리하고, 이를 정리하는 그래프 등을 시각화하는데 쓰이고 있다고 하네요. 아직도 CERN에서 발표하는 자료의 표나 그래프들은 ROOT를 이용하여 그린다고 합니다.
각설하고 이를 CMake를 이용해서 사용하는법을 소개하겠습니다.
1. github
https://github.com/root-project/root
ROOT의 github 에 들어가서 README에 적힌대로 따라하면 됩니다. 참 쉽죠? 그러나 저에게는 복병이 있었으니..
2. Download Sourcefile
여기 들어가서 해당하는 운영체제/버전에 맞는 파일을 찾으면 됩니다. 저같은 경우는 맥북을 사용하고 있어서
root_v6.19.02.macosx64-10.15-clang110.pkg
이었습니다.
설치 후 Window 유저는 root/bin/root.exe 로 실행하면 되고, .sh쉘 OS는 source root/bin/thisroot.sh 를 입력하면 root 입력시 root가 켜집니다.
.profile 이나 .bashrc파일에 미리 입력해놓는게 편합니다.
.csh쉘 OS는 source root/bin/thisroot.csh 입니다.
3. CMakeLists.txt 로 빌드하기
root 6.15 버전부터 최신 CMakeLists 변수들을 지원해준다는군요. 아래처럼 해주기만 하면 끝입니다.
CMakeLists.txt
cmake_minimum_required(VERSION 3.15) // 설치된 버전으로 맞춰주시면 됩니다
project(cern_root)
set(CMAKE_CXX_STANDARD 14) // 사용하실 C++ 버전
find_package(ROOT 6.19 REQUIRED)
add_executable(cern_root main.cpp)
target_link_libraries(cern_root PUBLIC
ROOT::Core
ROOT::Imt
ROOT::RIO
ROOT::Net
ROOT::Hist
ROOT::Graf
ROOT::Graf3d
ROOT::Gpad
ROOT::ROOTVecOps
ROOT::Tree
ROOT::TreePlayer
ROOT::Rint
ROOT::Postscript
ROOT::Matrix
ROOT::Physics
ROOT::MathCore
ROOT::Thread
ROOT::MultiProc
ROOT::ROOTDataFrame)
이제 실행되는지 한번 봅시다
main.cpp
#include <iostream>
#include "TRandom3.h"
#include "TCanvas.h"
#include "TApplication.h"
#include "TH2.h"
int main(int argc, char** argv) {
TApplication *app = new TApplication("app", &argc, argv);
TCanvas* c1 = new TCanvas("c1","c1");
TRandom3* random3 = new TRandom3(0);
TH2D* hist2d = new TH2D(
"Hist", "Gaus Distribution",
100, -100, 100,
100, -100, 100);
for(int i=0; i<10000; ++i) {
double x = random3->Gaus(0, 20);
double y = random3->Gaus(0, 40);
hist2d->Fill(x, y);
}
c1->cd();
hist2d->Draw("LEGO");
// Mac OS 에서는 아래 2개 명령어를 무조건 추가해줘야 그래프가 표시됩니다
c1->Update();
app->Run();
return 0;
}
잘 나오는군요. 완성입니다.