ARTEMISを回した時に食わせていたParameterを取得する
ARTEMISを回した時に「あれ、このときのParameterって何使ってたっけ?」となることがありました。そこで、実はそのParameterがtreeに入っているんだよと教わったので、その取り出し方をメモ。
Parameterクラスについて
とあるこんなParameterクラスがあります。
#include "THogeParameter.h"
using art::THogeParameter;
ClassImp(THogeParameter)
THogeParameter::THogeParameter()
{
FloatVec_t def;
def.resize(3,0,0);
RegisterParameter("offset","geometry offset", fOffset, def, 3)
}
THogeParameter::~THogeParameter() {}
Bool_t THogeParameter::LoadYAMLNode(const YAML::Node &node)
{
return TParameterObject::LoadYAMLNode(node);
}
#ifndef THOGEPARAMETER_H
#define THOGEPARAMETER_H
#include "TParameterObject.h"
namespace art {
class THogeParameter;
}
class art::THogeParameter : public TParameterObject {
public:
THogeParameter();
virtual ~THogeParameter();
virtual Bool_t LoadYAMLNode(const YAML::Node &node);
Float_t GetOffsetX() const { return fOffset[0]; }
Float_t GetOffsetY() const { return fOffset[1]; }
Float_t GetOffsetZ() const { return fOffset[2]; }
protected:
FloatVec_t fOffset;
private:
ClassDef(THogeParameter, 1)
};
#endif
取り出し方
ARTEMISで作られたtreeにはUserInfo
にParameterが入っています。それはこんな感じで確認出来ます。
tree->GetUserInfo()->ls();
OBJ: TClonesArray prm:hoge An array of clone objects : 0
OBJ: art::THogeParameter param1 : 0 at: 0x4812d80
OBJ: art::THogeParameter param2 : 0 at: 0x4813580
OBJ: art::THogeParameter param3 : 0 at: 0x4813e40
OBJ: art::THogeParameter param4 : 0 at: 0x4814700
この場合、ParameterがTClonesArray
に入っていることが分かります。そこで、まずはTClonesArray
を取得しましょう。
TClonesArray *arr = (TClonesArray*)tree->GetUserInfo()->FindObject("prm:hoge");
これでParameter Arrayのオブジェクトが取得できました。次に、単体のParameter objectを取得しましょう。
art::THogeParameter *prm1 = (art::THogeParameter*)arr->At(0);
これで名前でいうparam1
が取得出来ました。中身を見てみましょう。
prm1->GetX()
(const Float_t) 3.14159e0
と、こんな感じで取得出来ました。