2010-12-29 7 views
0

これは、言語に組み込まれたものではないことを理解しています(つまり、C++ではeval()メソッドがありません)。また、実行時の文字列入力の内容をプログラムの変数名と関連付けることは非常に困難であると理解しています。それにもかかわらず...プログラム変数を参照するときに文字列を解釈します。 Geant4単位

リサーチグループのユーザーがデータベースファイルにマテリアルとマテリアルのプロパティを追加し、それらのマテリアルを1つのコマンドで呼び出してGeant4でのマテリアル構築が容易になるようにするための小さなクラスを作成しようとしています。残念ながら、Geant4はヘッダファイルを使用してcm3、mm、MeV、kgなどの単位の実際の変数を定義し、ユニットを内部Geant4システムに変換します。私は、これらを対応する文字列にリンクするマップがあるとは思わない。この事実の事実は、Geant4は物理モデリングのためのものであり、ユニットのバットトンがあるということです。 Geant4が拡張可能で、私が知らない新しいユニットを望むいくつかの新しい物理コードが登場するかもしれないので、それらをすべてマッピングできる本当の方法はありません。私がやりたい何

は、テキストファイルからユニットを説明する文字列を取得し、何とか私は、変換を行うことができますので、同じ名前の実際の変数へのものと一致しています。これをハックして消す方法はありますか、それとも全く不可能ですか?

もちろん、データベースのすべてのエントリについて内部のユニットに変換させることができますが、それはすぐに醜くなり、エラーを追跡するための大きな原因になります(小数点が15 )。

おかげ

答えて

1

は、これは私が使用していない(あるいは、今の前のことを聞いた)決してきた一因、答えることは困難でありGeant4を、そして部分的にあなたが何をしようとして完全には明らかではないので:あなたが作っていますあなたの同僚のためのC++ライブラリを直接使用できますか?あるいは、C++に触れることなく、同僚が使用できるツールを作っていますか?

まだ、できる限り最善の方法で回答しようとします。

あなたは、実行時に、テキストの入力を取り、名前のユニットを解釈したい場合は、基本的に、あなたは(それらの定義が取るものは何でも内部形式)ユニット名の定義にマッピングテーブルを必要とします。その周りには本当に方法はありません。

ただし、必ずしも手でそのマッピングテーブルを作成する必要はありません。情報は、ユニットを定義するGeant4ヘッダーファイルに存在する必要があります。そのため、ヘッダーファイルを読み込んでマッピングテーブルのコードを生成するツール(ハックアンドスラッシュ)を記述することができます。将来的には新しいユニットをサポートするためとして

、それは可能かもしれないが、私は実際に特定のアプローチを提案するためにあなたの問題について十分に理解していません。

でも、私は少しここに手足に出て行きます。私が見つけた最初のソースコードを使ってGeant4をすばやくGoogle検索し、非常に簡単な検索をすると、関連する2つのファイル、SystemOfUnits.hG4UnitsTable.hhが表示されます。

私は2はあなたが望むかもしれない正確に名前と定義のマッピングを提供しますが、私はそれが関連するのかどうか、したがって、システムの残りの部分に関連してどのようになどは不明だということに注意してください。

1が関連するヘッダである場合、明確単位の定義は、最も単純な程度である:それは、ベースユニットにスケーリングファクタです。この場合、材料データベースファイルに同様のソートのユニット定義が含まれないようにする特別な理由はありません(つまり、材料定義を読み込む同じ場所からマッピングテーブルを読み込みます)。あなたの同僚は必要に応じて新しいユニットを追加してください。

数値が科学的表記法で表現されるようにすると、問題の多くが消えてしまうので、10進数を数えると非常にエラーが発生する可能性があります。したがって、おそらく最も簡単な解決策は、Geant4の基本単位を使用するように同僚に指示することです.5kmの値を指定する場合は、Geant4の基本単位の長さがミリメートルであるため、5e6として指定する必要があります、1に従って)。

+0

私は基本単位定義をデータベースファイルに入れてユニットテーブルを作成することについては考えていませんでした。それは本当に良い考えです。ありがとう! – user487100

関連する問題