はい、タイトルは奇妙ですが、このstiuationはタイトルとして奇妙です。 私はROOTスクリプトを書いており、このスクリプトの結果は2つのヒストグラムを描く必要があります。スクリプトにはいくつかのROOTヘッダファイルと乱数ジェネレータがあります。端末でこれを実行すると、ROOTの結果がcmake .exeと端末コマンドの間で一致しません
$ root example.cpp
しかし、cmakeを使ってexeファイルにコンパイルすると、正しく動作しません。結果が端末の出力と一致せず、-i think- random generatorが正しく動作しません。この出力は、このヒストグラムに表示されているように、この状況を明確にします。
私は混乱しています。 CMakeコマンドとexeファイルを作成してもエラーは発生せず、正しく作成されました。しかし、同じコード、同じランダムジェネレータと結果はお互いに非常に異なっています。 私の意見はCMakeLists.txtファイルが適切に準備されていないことです。インターネットの例でそれを見つけて編集したので。 さて、これはC++ファイルです:
#include "TRandom3.h"
#include "TH1F.h"
#include "TLorentzVector.h"
#include "TCanvas.h"
void TLV()
{
TCanvas* c1 = new TCanvas("table", "TLVs", 800,800);
TH1F* histoM = new TH1F("masses","Lorentz Vectors' Masses",600,0,20.);
TH1F* histoPt = new TH1F("pts","Lorentz PTs", 600,-0.5 , 7.);
TRandom3* uret = new TRandom3(); // - RANDOM GENERATOR
uret->SetSeed(855); // SEED
TLorentzVector v1; // - DECLARING LORENTZ
TLorentzVector v2; // VECTORS
TPad *pad1 = new TPad("pad1", "pad1", 0, 0.5, 1, 1.0);
TPad *pad2 = new TPad("pad2", "pad2", 0, 0.05, 1, 0.5);
for (int j=0;j<100;j++){
// doing some calculation
histoPt->Fill(tb2); //INSERT VALUES TO HISTOGRAMS
histoM->Fill(tb1);
};
// drawing
}
/*---------- END OF FUNCTION -------------*/
int main() { TLV(); }
とCMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(TLV)
set(CMAKE_CXX_FLAGS "-O3 -fPIC -Wall -Wextra -std=c++11 -m64")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{ROOTSYS}/etc/cmake)
#print conf
message(STATUS "Environmental CMAKE_MODULE_PATH is $ENV{ROOTSYS}")
find_package(ROOT MODULE REQUIRED Cling TreePlayer Tree Rint Postscript Matrix RIO Core Foam RooStats RooFit RooFitCore Gpad Graf3d Graf Hist Net TMVA XMLIO MLP)
include(${ROOT_USE_FILE})
message(STATUS "Environmental ROOTSYS is $ENV{ROOTSYS}")
message(STATUS "found root at: ${ROOT_USE_FILE}")
message(STATUS "ROOT_LIBRARIES=${ROOT_LIBRARIES}")
set(EXECUTABLE_OUTPUT_PATH EXE_CIKTI)
add_executable(TLV TLV.cpp )
target_link_libraries(TLV ${ROOT_LIBRARIES})
ルートライブラリcmakeのもあります。結果でTLorentzVectorコマンドが有効であるためです。しかし、ランダムコマンドには奇妙な動作があります。 CMakeLists.txtが間違っているか、重要なことを忘れましたか?
フルコードを投稿できますか?私。どのようにtb1とtb2を得るか。これは、ルートC++インタプリタと適切にコンパイルされたバージョンとで異なる未定義の動作を引き起こすコードのバグが原因である可能性があります。 –
はこちらですhttps://gist.github.com/agenel/695aa9f678314daf4a484703013c837d – agenel