11#include "TFileMerger.h"
12#include "TServerSocket.h"
14#include "TFileCacheWrite.h"
16#include "THashTable.h"
27 if(name.length() == 0) {
33 if(outputFilename.length() == 0) {
34 outputFilename =
"temp.root";
44 fOutputFile(TFile::Open(outputFilename.c_str(),
"recreate")),
49 std::cerr <<
"Failed to open '" << outputFilename <<
"'" << std::endl;
53 fEventTree =
new TTree(
"AnalysisTree",
"AnalysisTree");
72 std::shared_ptr<TUnpackedEvent> event;
79 std::ostringstream str;
81 <<
"??? good events" << std::endl;
92 std::shared_ptr<TUnpackedEvent> event;
96 std::this_thread::sleep_for(std::chrono::milliseconds(100));
102 std::shared_ptr<const TFragment> frag;
104 if(frag !=
nullptr) {
112 if(event !=
nullptr) {
130 GValue::Get()->Write(
"Values", TObject::kOverwrite);
139 if(options->WriteDiagnostics()) {
140 diag->Write(
"SortingDiagnostics", TObject::kOverwrite);
156 auto* det_p =
reinterpret_cast<TDetector*
>(cls->New());
165 TBranch* newBranch =
fEventTree->Branch(cls->GetName(), cls->GetName(), det_pp);
179 for(
int i = 0; i <
fEventTree->GetEntries(); i++) {
183 std::cout <<
"\r" << std::string(30,
' ') <<
"\r" <<
Name() <<
": added \"" << cls->GetName() << R
"(" branch, )" << det_pp << ", " << det_p << std::string(30,
' ') << std::endl;
200 (*elem.second)->Clear();
204 for(
const auto& det : event->GetDetectors()) {
205 TClass* cls = det->IsA();
210 }
catch(std::out_of_range& e) {
214 (*
fDetMap.at(cls))->ClearTransients();
std::mutex ttree_fill_mutex
static GValue * Get(const std::string &name="")
std::atomic_size_t & ItemsPopped()
std::atomic_long & InputSize()
static StoppableThread * Get(const std::string &name)
void IncrementItemsPopped()
bool WriteToFile(const std::string &file)
static TAnalysisWriteLoop * Get(std::string name="", std::string outputFilename="")
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > fOutOfOrderQueue
std::string EndStatus() override
void WriteEvent(std::shared_ptr< TUnpackedEvent > &event)
TFragment * fOutOfOrderFrag
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TUnpackedEvent > > > fInputQueue
std::map< TClass *, TDetector ** > fDetMap
bool Iteration() override
void ClearQueue() override
void AddBranch(TClass *cls)
std::map< TClass *, TDetector * > fDefaultDets
TAnalysisWriteLoop(const TAnalysisWriteLoop &)=delete
static int WriteToRoot(TFile *fileptr=nullptr)
static size_t GetNumberOfChannels()
virtual void ClearTransients() const
static TGRSIOptions * Get(int argc=0, char **argv=nullptr)
Do not use!
static TAnalysisOptions * AnalysisOptions()
static bool WriteToRoot(TFile *fileptr=nullptr)
static TPPG * Get(bool verbose=false)