31#include "TBufferFile.h"
41 TString option = GetOption();
49 TString option = GetOption();
51 std::cout <<
"input list size = " << fInput->GetEntries() << std::endl;
52 for(
int i = 0; i < fInput->GetEntries(); ++i) {
53 std::cout << fInput->At(i)->GetName() <<
": ";
54 fInput->At(i)->Print();
61 fPpg =
static_cast<TPPG*
>(fInput->FindObject(
"TPPG"));
63 std::cerr <<
"failed to find TPPG!" << std::endl;
69 std::cerr <<
"failed to find TRunInfo!" << std::endl;
73 if(fInput->FindObject(
"ParserLibrary") !=
nullptr) {
74 std::string library(fInput->FindObject(
"ParserLibrary")->GetTitle());
76 if(!library.empty()) {
80 std::cout <<
"no parser library!" << std::endl;
85 const char* workingDirectory =
"";
86 if(fInput->FindObject(
"pwd") !=
nullptr) {
87 workingDirectory = fInput->FindObject(
"pwd")->GetTitle();
90 while(fInput->FindObject(Form(
"calFile%d", index)) !=
nullptr) {
91 const char* fileName =
static_cast<TNamed*
>(fInput->FindObject(Form(
"calFile%d", index)))->GetTitle();
92 if(fileName[0] == 0) {
93 std::cout <<
"Error, empty file name!" << std::endl;
97 if(workingDirectory[0] != 0 && fileName[0] !=
'/') {
105 while(fInput->FindObject(Form(
"valFile%d", index)) !=
nullptr) {
106 const char* fileName =
static_cast<TNamed*
>(fInput->FindObject(Form(
"valFile%d", index)))->GetTitle();
107 if(fileName[0] == 0) {
108 std::cout <<
"Error, empty file name!" << std::endl;
112 if(workingDirectory[0] != 0 && fileName[0] !=
'/') {
120 while(fInput->FindObject(Form(
"cutFile%d", index)) !=
nullptr) {
121 std::cout <<
"trying to open " << Form(
"cutFile%d", index) << std::flush <<
" = " << fInput->FindObject(Form(
"cutFile%d", index)) << std::flush <<
" with title " <<
static_cast<TNamed*
>(fInput->FindObject(Form(
"cutFile%d", index)))->GetTitle() << std::endl;
122 const char* fileName =
static_cast<TNamed*
>(fInput->FindObject(Form(
"cutFile%d", index)))->GetTitle();
123 if(fileName[0] == 0) {
124 std::cout <<
"Error, empty file name!" << std::endl;
128 TFile* file =
nullptr;
129 if(workingDirectory[0] != 0 && fileName[0] !=
'/') {
130 file =
new TFile(Form(
"%s/%s", workingDirectory, fileName));
132 file =
new TFile(fileName);
134 if(file !=
nullptr && file->IsOpen()) {
135 TIter iter(file->GetListOfKeys());
137 while((key =
static_cast<TKey*
>(iter.Next())) !=
nullptr) {
138 if(strcmp(key->GetClassName(),
"TCutG") != 0) {
141 auto* tmpCut =
static_cast<TCutG*
>(key->ReadObj());
142 if(tmpCut !=
nullptr) {
143 fCuts[tmpCut->GetName()] = tmpCut;
147 std::cout <<
"Error, failed to open file " << fileName <<
"!" << std::endl;
152 for(
const auto& cut :
fCuts) {
153 std::cout << cut.first <<
" = " << cut.second << std::endl;
157 std::cout <<
"No g-values!" << std::endl;
159 std::cout <<
GValue::Size() <<
" g-values" << std::endl;
186 static TFile* current_file =
nullptr;
187 if(current_file !=
fChain->GetCurrentFile()) {
188 current_file =
fChain->GetCurrentFile();
189 std::cout <<
"Starting to sort: " << current_file->GetName() << std::endl;
199 std::cout <<
DRED <<
"Exception in " << __PRETTY_FUNCTION__ <<
": " << e.
detail() <<
RESET_COLOR << std::endl;
230 std::cout <<
"replaced null run info with:" << std::endl;
236 if(fOutput->FindObject(
"prefix") !=
nullptr) {
237 fOutputPrefix =
static_cast<TNamed*
>(fOutput->FindObject(
"prefix"))->GetTitle();
240 std::string outputFileName;
241 if(runNumber != 0 && subRunNumber != -1) {
243 outputFileName = Form(
"%s%05d_%03d.root",
fOutputPrefix.c_str(), runNumber, subRunNumber);
244 }
else if(runNumber != 0) {
251 auto* outputFile =
new TFile(outputFileName.c_str(),
"recreate");
252 if(!outputFile->IsOpen()) {
253 std::cerr <<
"Failed to open output file " << outputFileName <<
"!" << std::endl
257 outputFileName = outputFileName.substr(0, outputFileName.find_last_of(
'.')) +
".log";
258 options->
LogFile(outputFileName);
259 std::cout <<
"Opened '" << outputFile->GetName() <<
"' for writing:" << std::endl;
264 if(
fPpg !=
nullptr) {
267 std::cerr <<
"failed to find TPPG, can't write it!" << std::endl;
272 std::cout <<
"Closed '" << outputFile->GetName() <<
"'" << std::endl;
285 if(tree ==
nullptr) {
306 for(
const auto&& obj : *fOutput) {
307 TBufferFile buf(TBuffer::kWrite, 10000);
308 obj->IsA()->WriteBuffer(buf, obj);
310 std::cout <<
DRED << obj->ClassName() <<
" '" << obj->GetName() <<
"' too large to " << usage <<
": " << buf.Length() <<
" bytes = " << buf.Length() / 1024. / 1024. / 1024. <<
" GB, removing it!" <<
RESET_COLOR << std::endl;
313 fOutput->Remove(obj);
static int ReadValFile(const char *filename="", Option_t *opt="replace")
bool WriteToFile(const std::string &file)
void ReadFromFile(const std::string &file)
static int WriteToRoot(TFile *fileptr=nullptr)
static std::unordered_map< unsigned int, TChannel * > * GetChannelMap()
static Int_t ReadCalFile(std::ifstream &infile)
static Int_t ReadCalFromFile(TFile *tempf, Option_t *opt="overwrite")
std::string detail() const noexcept
static TGRSIOptions * Get(int argc=0, char **argv=nullptr)
Do not use!
std::string LogFile() const
static TAnalysisOptions * AnalysisOptions()
void Print(Option_t *opt="") const override
void ParserLibrary(std::string &library)
void SlaveBegin(TTree *tree) override
virtual void FillHistograms()=0
void CheckSizes(const char *usage)
Function to check size of objects in output list.
void SlaveTerminate() override
TTree * fChain
! pointer to the analyzed TTree or TChain
static constexpr int fSizeLimit
! 1 GB size limit for objects in ROOT
virtual void InitializeBranches(TTree *tree)=0
Bool_t Process(Long64_t entry) override
virtual void CreateHistograms()=0
std::string fOutputPrefix
! pre-fix for output files
std::string GetOutputPrefix() const
std::map< std::string, TCutG * > fCuts
void Terminate() override
void Begin(TTree *tree) override
void Init(TTree *tree) override
TAnalysisOptions * fAnalysisOptions
! pointer to analysis options
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override
void Load()
if necessary loads shared object library and sets/initializes all other functions
static int LastRunNumber()
static int SubRunNumber()
static int LastSubRunNumber()
static int FirstSubRunNumber()
void Print(Option_t *opt="") const override
static int FirstRunNumber()
static TParserLibrary * Get(bool verbose=false)