ARTEMISのProcessorでデータをSortするとTTreeFormulaManagerでバグる

本当に備忘録。 ARTEMISのProcessorを書く時に、Multiplicityがあるデータに対してはTClonesArrayによってデータを配列化させます。

そのときに、データを何かの基準でソートが必要な場面があると思います。

TClonesArray* fOutput;
THogehogeData *outData1 = static_cast<THogehogeData*>(fOutput->ConstructedAt(fOutput->GetEntriesFast()));
THogehogeData *outData2 = static_cast<THogehogeData*>(fOutput->ConstructedAt(fOutput->GetEntriesFast()));

// 処理

THogehogeData::SetSortType(THogehogeData::kTiming); // timing sort
THogehogeData::SetSortOrder(THogehogeData::kDESC);
fOutput->Sort();

こんな感じでSortするわけですが、こうして出来たものをTTreeFormulaManagerに食わす(例えば、TTreeFormulaGateProcessor)と

Error in <TTreeFormulaManager::GetNdata>: a dimension is still negative!

という謎エラーが!!! どうやら、Sortするとあかんようです。Sortした後に

fOutput->UnSort();

を付け加えないといけないようです。 一見、これでデータはソートされなくなっちゃうんじゃないの!?と思いますが、UnSortが実行されたときにSortされる前のものをプログラムは知らないので、問題ないようです。

Shoichiro Masuoka

CNS, the Univ. of Tokyo. Dcotoral student

関連項目