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

と、こんな感じで取得出来ました。

Shoichiro Masuoka

CNS, the Univ. of Tokyo. Dcotoral student

関連項目