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される前のものをプログラムは知らないので、問題ないようです。