問題タブ [root-framework]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 多くのメンバー変数を持つクラスのベスト プラクティス
簡単な質問: 多くの (200 を超える) メンバー変数が必要な場合 (それぞれが、分析で関心のある物理量のプロットになります)。これらの変数を宣言するのに最適な場所はどこですか?
長い説明: 私が分析に使用するフレームワークは、イベントをループするクラスを作成します。
ヘッダーでは、次のようなポインターを宣言します (これは明らかに、ROOT
使用する必要があるパッケージの要件です)。
およびヒストグラム クラスへのポインター:
次にconstructor
、ポインターを特定のメモリアドレスに初期化する必要があります(これは後でファイルからデータを読み取るためであると理解している限り)
次に、initialize
関数で、以前に保存されたデータを含むファイルを開き、ファイルに含まれるオブジェクトを指すようにクラスのメンバーのアドレスを設定します (これがどのように機能するか、または私のステートメントが正確かどうかはわかりません)。
次に、execute
関数内でイベントごとに 1 回、ループで呼び出され、必要な物理演算の選択を行います。
そして最後に、finalize
関数では、選択が行われた後に各イベントで行う必要があるすべてのことを行います。たとえば、ヒストグラムを別のファイルに保存するなどです。
ここで、 に対して 20 個、jets
に対して 30 個、 に対して 30electrons
個などの数量があると想像しmuons
てください。メンバー変数の数がどのように膨大になるかがわかります。すぐにコードがごちゃごちゃになってしまいましたが、専門のプログラマーはこのような状況にどのように対処しますか? これが十分に明確であることを願っています!
root-framework - TTreeCache を TChain フレンドと一緒に使用する
私は分析コードで 3 つの TChain を使用しており、アドレスは各チェーンの一部のブランチにのみ設定されています。このシナリオで TTreeCache を使用する最良の方法は何ですか? キャッシュするブランチを手動で指定する必要がありますか? アドレスが設定されているすべてのブランチをキャッシュしたいのですが、それらだけです。
別のメモとして、最初のツリーからのみエントリを取得し、イベントをさらに分析することにした場合にのみ、他のフレンドツリーからエントリを取得したいと思います。
c++ - ROOT での ASCII ファイルのプロット
4 列の ASCII ファイルからデータを読み取る小さなマクロを作成しようとしています。しかし、2 番目の 3 番目の列のみを (x, y) としてグラフ化したい。
java - ROOT の Java ラッパー。OutputStreamReader がブロックされています
TLDR; Java に ROOT stdout から読み取らせるフレンドリーな方法はありますか? およびその逆?
ROOT プロセスを起動する Java 関数があります。Java と ROOT は、stdin と stdout を介して通信します。まあ、それはとにかく計画です。cin
何らかの理由で、Java プロセス経由でアクセスできる (ROOT)による情報出力を取得できません。
ここで同時にいくつかの落とし穴に出くわしたと確信しています。長い質問で申し訳ありません。含まれているコードは可能な限り単純です
ルートコード:
次のコマンドでこのコードを実行します。
出力は次のようになります。
キーボードでテキストを入力すると、明らかに機能します。
関連するJavaコードは次のとおりです。
start
次に呼び出すcommunicate
と、次の出力が得られます。
そして、それはブロックします。Java は「ROOT:: loop iteration」という行さえ受け取りません。
どんな助けや指示もいただければ幸いです。私のグーグル検索と実験はすべて空白になりました。
編集
cout
ステートメントを次のように変更しcout << "stuff" << endl;
ます。物事が少し良くなります。私のJavaプログラムの出力は次のようになります。
次にブロックします。
ROOT コードから行を削除するcin >> in_str;
と、Java は次の無限のものを生成します。
だから問題は今cin
...
shell - シェル コマンド出力を ROOT の変数に割り当てる
ここgSystem->Exec()gSystem
に見られるように、を返すを使用してROOTコードでシェルコマンドを実行しています。しかし、出力をコード変数に割り当てようとすると、割り当ては行われません。int
私も試しgSystem->Exec("ls ./folder | egrep -o '[0-9]{3,3}' | head -1") >> low_edge
ましたが、うまくいきませんでした。
明らかな何かが欠けていますか?
c++ - コンパイル済み ROOT (CERN) アプリケーションで TCanvas を画面にペイントする
画面に描画するためのルールは何ですか?
私の最終的な目標は、TCanvas をクラスに入れ、そこから描画することですが、今のところ、あまり複雑でない例を見ると役立つかもしれないと思います。以下は、私のコンピューターでコンパイルして画面に描画するコードです。
コメントアウトされた行があることに気付くかもしれません。これらの の定義のいずれかを使用すると、後で呼び出されるメソッドとメソッドでcanvas
適切なメンバー アクセス演算子を使用すると、空白の TCanvas ウィンドウを画面に出力した後にアプリケーションがクラッシュします。また、ポインターを変更するとクラッシュします。Update
Draw
app
h
なんらかの ROOT オブジェクトを使用してクラスをインスタンス化しようとすると、アプリケーションがクラッシュします。
現在、MSVC++ でコンパイルしcl.exe
、link.exe
. 私は64ビットのWindows 7 Enterprise Nで作業しています.Unixで構築したアプリケーションを移植しようとしていnew TApplication("name",0,0);
ますmain
.
繰り返しになりますが、この OS やその他の OS でヒストグラムを画面に表示するにはどうすればよいでしょうか? 「なぜ」を理解できるかどうかは疑問ですが、これを読んで理解できる他の人のために、それについて何か書くといいかもしれません. それ以外の場合は、これらのオブジェクトを使用してペイントする方法を段階的に説明するだけでも素晴らしいでしょう.
これについて助けてくれてありがとう。それが有用であることが判明した場合、私は喜んでより多くの情報/例を提供します.
更新:次のようなものでコンパイルすると、私の特定のケースで機能します
理由がわからない。
https://root.cern.ch/phpBB3/viewtopic.php?f=3&t=3402&p=85329&hilit=Vector+stl+of+TH1F *+Objects#p85329を参照してください。
c++ - オブジェクトを C++ の関数に引数として渡すときに、ROOT オブジェクトからメソッドにアクセスできますか?
無知で申し訳ありませんが、私は C++ と ROOT に不慣れで、何が間違っているのか正確にはわかりません。
私がやろうとしているのは、ヒストグラムの n ピークのビンの位置を返す関数を作成することです。以下は私のコードです:
このコードを ROOT で実行すると、次のようになります。
これは、関数内のオブジェクト メソッドにアクセスする際の問題だと思います。なぜなら、testing() 関数で histo->GetNBinsX() メソッドを呼び出しても問題がないからです。しかし、私は知りません。
ありがとうございます。他の悲惨なコーディング方法を行っている場合は、お知らせください。