#ifndef __TQNTUPLEDUMPERANALYSISJOB__
#define __TQNTUPLEDUMPERANALYSISJOB__
#include "QFramework/TQAnalysisJob.h"
#include "QFramework/TQMessageStream.h"
class TQObservable;
class TQTaggable;
class TQCut;
class TQToken;
#include "TList.h"
#include "TFile.h"
#include "TTree.h"
#include "TObjString.h"
namespace TQNTupleDumperAnalysisJobHelpers {
class FileHandle;
class TreeHandle;
class BranchHandle;
}
class TQNTupleDumperAnalysisJob : public TQAnalysisJob {
public:
enum VarType { UNKNOWN=0, INT, INT32, INT64, FLOAT, DOUBLE, UI, UL, ULI, ULL, ULLI, UINT32, UINT64,
VECTORINT, VECTORINT32, VECTORINT64, VECTORFLOAT, VECTORDOUBLE, VECTORUI, VECTORUL, VECTORULI, VECTORULL, VECTORULLI, VECTORUINT32, VECTORUINT64};
static TQNTupleDumperAnalysisJob::VarType getVarType (TString typestr);
static TString getTypeString (TQNTupleDumperAnalysisJob::VarType type);
static int importJobsFromTextFiles(const std::vector<TString>& filenames, TQCut* basecut, TQTaggable* aliases = NULL, const TString& channelFilter = "*", bool verbose = false);
static TString getErrorMessage();
static void setErrorMessage(const TString& message);
TQToken* getTreeToken(const TString& filename, const TString& treename);
bool returnTreeToken(const TString& filename, const TString& treename, TQToken* tok);
protected:
static const std::map<VarType,bool> isVectorBranchMap;
static TQMessageStream fErrMsg;
static std::map<TString,TFile*> fFiles;
static std::map<TString,int> nUsers;
static TObjString fTimestamp;
std::vector<TString> fVarNames;
std::vector<TString> fExpressions;
std::vector<VarType> fTypes;
std::vector<TQObservable*> fObservables;
TString fTreeName = "nTuple";
TString fFileName = "data";
TString fActiveTreeName = "";
TString fActiveFileName = "";
bool fWriteWeight = true;
TString fWeightName = "weight";
TQNTupleDumperAnalysisJobHelpers::BranchHandle* fWeightBranch = 0;
TQNTupleDumperAnalysisJobHelpers::TreeHandle * fTreeHandler = NULL;
TQToken* fTreeToken = NULL;
std::vector<TQNTupleDumperAnalysisJobHelpers::BranchHandle*> fBranches;
TQSampleFolder* poolAt = NULL;
bool initializeTree(TQTaggable* tags);
bool finalizeTree();
virtual bool initializeSelf() override;
virtual bool finalizeSelf() override;
int getNentriesToCreate() const;
mutable bool fExpectSingleEntryPerEvent = false;
public:
TQNTupleDumperAnalysisJob(const TString& name);
TQNTupleDumperAnalysisJob(TQNTupleDumperAnalysisJob* other);
bool bookVariable(const TString& type, const TString& name, const TString& definition);
bool bookVariable(VarType type, const TString& name, const TString& definition);
int nVariables();
virtual TQAnalysisJob * getClone() override;
virtual bool initializeSampleFolder(TQSampleFolder* sf) override;
virtual bool finalizeSampleFolder(TQSampleFolder* sf) override;
virtual bool execute(double weight) override;
virtual TObjArray * getBranchNames() override;
void writeWeights(bool write = true, const TString& name = "weight");
TString getTreeName() const ;
void setTreeName (const TString& treename);
TString getFileName() const ;
void setFileName (const TString& filename);
void printBranches();
ClassDefOverride(TQNTupleDumperAnalysisJob,1)
};
#endif
TQNTupleDumperAnalysisJob.h:1 TQNTupleDumperAnalysisJob.h:2 TQNTupleDumperAnalysisJob.h:3 TQNTupleDumperAnalysisJob.h:4 TQNTupleDumperAnalysisJob.h:5 TQNTupleDumperAnalysisJob.h:6 TQNTupleDumperAnalysisJob.h:7 TQNTupleDumperAnalysisJob.h:8 TQNTupleDumperAnalysisJob.h:9 TQNTupleDumperAnalysisJob.h:10 TQNTupleDumperAnalysisJob.h:11 TQNTupleDumperAnalysisJob.h:12 TQNTupleDumperAnalysisJob.h:13 TQNTupleDumperAnalysisJob.h:14 TQNTupleDumperAnalysisJob.h:15 TQNTupleDumperAnalysisJob.h:16 TQNTupleDumperAnalysisJob.h:17 TQNTupleDumperAnalysisJob.h:18 TQNTupleDumperAnalysisJob.h:19 TQNTupleDumperAnalysisJob.h:20 TQNTupleDumperAnalysisJob.h:21 TQNTupleDumperAnalysisJob.h:22 TQNTupleDumperAnalysisJob.h:23 TQNTupleDumperAnalysisJob.h:24 TQNTupleDumperAnalysisJob.h:25 TQNTupleDumperAnalysisJob.h:26 TQNTupleDumperAnalysisJob.h:27 TQNTupleDumperAnalysisJob.h:28 TQNTupleDumperAnalysisJob.h:29 TQNTupleDumperAnalysisJob.h:30 TQNTupleDumperAnalysisJob.h:31 TQNTupleDumperAnalysisJob.h:32 TQNTupleDumperAnalysisJob.h:33 TQNTupleDumperAnalysisJob.h:34 TQNTupleDumperAnalysisJob.h:35 TQNTupleDumperAnalysisJob.h:36 TQNTupleDumperAnalysisJob.h:37 TQNTupleDumperAnalysisJob.h:38 TQNTupleDumperAnalysisJob.h:39 TQNTupleDumperAnalysisJob.h:40 TQNTupleDumperAnalysisJob.h:41 TQNTupleDumperAnalysisJob.h:42 TQNTupleDumperAnalysisJob.h:43 TQNTupleDumperAnalysisJob.h:44 TQNTupleDumperAnalysisJob.h:45 TQNTupleDumperAnalysisJob.h:46 TQNTupleDumperAnalysisJob.h:47 TQNTupleDumperAnalysisJob.h:48 TQNTupleDumperAnalysisJob.h:49 TQNTupleDumperAnalysisJob.h:50 TQNTupleDumperAnalysisJob.h:51 TQNTupleDumperAnalysisJob.h:52 TQNTupleDumperAnalysisJob.h:53 TQNTupleDumperAnalysisJob.h:54 TQNTupleDumperAnalysisJob.h:55 TQNTupleDumperAnalysisJob.h:56 TQNTupleDumperAnalysisJob.h:57 TQNTupleDumperAnalysisJob.h:58 TQNTupleDumperAnalysisJob.h:59 TQNTupleDumperAnalysisJob.h:60 TQNTupleDumperAnalysisJob.h:61 TQNTupleDumperAnalysisJob.h:62 TQNTupleDumperAnalysisJob.h:63 TQNTupleDumperAnalysisJob.h:64 TQNTupleDumperAnalysisJob.h:65 TQNTupleDumperAnalysisJob.h:66 TQNTupleDumperAnalysisJob.h:67 TQNTupleDumperAnalysisJob.h:68 TQNTupleDumperAnalysisJob.h:69 TQNTupleDumperAnalysisJob.h:70 TQNTupleDumperAnalysisJob.h:71 TQNTupleDumperAnalysisJob.h:72 TQNTupleDumperAnalysisJob.h:73 TQNTupleDumperAnalysisJob.h:74 TQNTupleDumperAnalysisJob.h:75 TQNTupleDumperAnalysisJob.h:76 TQNTupleDumperAnalysisJob.h:77 TQNTupleDumperAnalysisJob.h:78 TQNTupleDumperAnalysisJob.h:79 TQNTupleDumperAnalysisJob.h:80 TQNTupleDumperAnalysisJob.h:81 TQNTupleDumperAnalysisJob.h:82 TQNTupleDumperAnalysisJob.h:83 TQNTupleDumperAnalysisJob.h:84 TQNTupleDumperAnalysisJob.h:85 TQNTupleDumperAnalysisJob.h:86 TQNTupleDumperAnalysisJob.h:87 TQNTupleDumperAnalysisJob.h:88 TQNTupleDumperAnalysisJob.h:89 TQNTupleDumperAnalysisJob.h:90 TQNTupleDumperAnalysisJob.h:91 TQNTupleDumperAnalysisJob.h:92 TQNTupleDumperAnalysisJob.h:93 TQNTupleDumperAnalysisJob.h:94 TQNTupleDumperAnalysisJob.h:95 TQNTupleDumperAnalysisJob.h:96 TQNTupleDumperAnalysisJob.h:97 TQNTupleDumperAnalysisJob.h:98 TQNTupleDumperAnalysisJob.h:99 TQNTupleDumperAnalysisJob.h:100 TQNTupleDumperAnalysisJob.h:101 TQNTupleDumperAnalysisJob.h:102 TQNTupleDumperAnalysisJob.h:103 TQNTupleDumperAnalysisJob.h:104 TQNTupleDumperAnalysisJob.h:105 TQNTupleDumperAnalysisJob.h:106 TQNTupleDumperAnalysisJob.h:107 TQNTupleDumperAnalysisJob.h:108 TQNTupleDumperAnalysisJob.h:109