//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlTopLevelAnalysis.h,v 1.69 2017/08/08 11:35:18 kaphle Exp $
// Copyright: 2013 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlTopLevelAnalysis
#define ATLAS_AtlTopLevelAnalysis
#ifndef ROOT_TTask
#include <TTask.h>
#endif
#ifndef ROOT_TList
#include <TList.h>
#endif
#ifndef ATLAS_AtlSample
#include <AtlSample.h>
#endif
#ifndef ATLAS_AtlToolCut
#include <AtlToolCut.h>
#endif
#ifndef ATLAS_AtlCut
#include <AtlCut.h>
#endif
#ifndef ATLAS_AtlAppAnalysisTask
#include <AtlAppAnalysisTask.h>
#endif
#ifndef ATLAS_AtlHforSplittingTask
#include <AtlHforSplittingTask.h>
#endif
#ifndef ATLAS_AtlMergingTask
#include <AtlMergingTask.h>
#endif
#ifndef ATLAS_AtlSelector
#include <AtlSelector.h>
#endif
#ifndef ATLAS_AtlPlotterFolder
#include <AtlPlotterFolder.h>
#endif
#ifndef ATLAS_AtlHistFactoryMeasurement
#include <AtlHistFactoryMeasurement.h>
#endif

class TROOT;
class TBrowser;
class TString;
class TObjString;
class TObjArray;
class AtlAnalysisTool;
class TBits;

class AtlTopLevelAnalysis : public TTask {

  public:
    enum EInputFormat { kInvalidFormat = -1,
			kFilePerSyst,  // one tree/file
			kTreePerSyst   // one file with many trees
    };
    
    enum EBuildMode { kInvalidMode = -1,
		      kHforSplitting,
		      kAnalysis,
		      kMerging,
		      kPlotting,
		      kMemTkAnalysis,
		      kBDTAnalysis
    };

    static const Int_t fgNumSystematics = 169;
    static const char* fgSystematicNames[fgNumSystematics];
	
    enum ESystematic {
	kNOMINAL = 0,
	// default systematics
	kJEFF,
	kJER,
	kJES_DOWN, kJES_UP,
	kJVF_DOWN, kJVF_UP,
	kEER_DOWN, kEER_UP,
	kEES_DOWN, kEES_UP,
	kMUID_RES,
	kMUMS_RES,
	kMUSC_DOWN, kMUSC_UP,
	kRES_SOFT_DOWN, kRES_SOFT_UP,
	kSC_SOFT_DOWN,  kSC_SOFT_UP,
	// JES components
	kBJES_DOWN, kBJES_UP,
	kETAINTERCALIB_MODEL_DOWN, kETAINTERCALIB_MODEL_UP,
	kETAINTERCALIB_TOTALSTAT_DOWN, kETAINTERCALIB_TOTALSTAT_UP,
	kJESEFF_DET1_DOWN,   kJESEFF_DET1_UP,
	kJESEFF_DET2_DOWN,   kJESEFF_DET2_UP,
	kJESEFF_DET3_DOWN,   kJESEFF_DET3_UP,
	kJESEFF_MIX1_DOWN,   kJESEFF_MIX1_UP,
	kJESEFF_MIX2_DOWN,   kJESEFF_MIX2_UP,
	kJESEFF_MIX3_DOWN,   kJESEFF_MIX3_UP,
	kJESEFF_MIX4_DOWN,   kJESEFF_MIX4_UP,
	kJESEFF_MODEL1_DOWN, kJESEFF_MODEL1_UP,
	kJESEFF_MODEL2_DOWN, kJESEFF_MODEL2_UP,
	kJESEFF_MODEL3_DOWN, kJESEFF_MODEL3_UP,
	kJESEFF_MODEL4_DOWN, kJESEFF_MODEL4_UP,
	kJESEFF_STAT1_DOWN,  kJESEFF_STAT1_UP,
	kJESEFF_STAT2_DOWN,  kJESEFF_STAT2_UP,
	kJESEFF_STAT3_DOWN,  kJESEFF_STAT3_UP,
	kJESEFF_STAT4_DOWN,  kJESEFF_STAT4_UP,
	kJESPILEUP_OFFMU_DOWN,  kJESPILEUP_OFFMU_UP,
	kJESPILEUP_OFFNPV_DOWN, kJESPILEUP_OFFNPV_UP,
	kJESPILEUP_PT_DOWN,  kJESPILEUP_PT_UP,
	kJESPILEUP_RHO_DOWN, kJESPILEUP_RHO_UP,
	kSINGLEPART_DOWN,  kSINGLEPART_UP,
	kFLAVOR_COMP_DOWN, kFLAVOR_COMP_UP,
	kFLAVOR_RESP_DOWN, kFLAVOR_RESP_UP,
	kPUNCH_THROUGH_DOWN, kPUNCH_THROUGH_UP,
	// scale factor systematics
	kLEP_RECO_SF_DOWN, kLEP_RECO_SF_UP,
	kLEP_ID_SF_DOWN  , kLEP_ID_SF_UP,
	kLEP_TRIG_SF_DOWN, kLEP_TRIG_SF_UP,
	kBTAGSF_UP, // order is important for btagging systematics!
	kBTAGSF_UP_BREAK0,
	kBTAGSF_UP_BREAK1,
	kBTAGSF_UP_BREAK2,
	kBTAGSF_UP_BREAK3,
	kBTAGSF_UP_BREAK4,
	kBTAGSF_UP_BREAK5,
	kBTAGSF_UP_BREAK6,
	kBTAGSF_UP_BREAK7,
	kBTAGSF_UP_BREAK8,
	kBTAGSF_DOWN,
	kBTAGSF_DOWN_BREAK0,
	kBTAGSF_DOWN_BREAK1,
	kBTAGSF_DOWN_BREAK2,
	kBTAGSF_DOWN_BREAK3,
	kBTAGSF_DOWN_BREAK4,
	kBTAGSF_DOWN_BREAK5,
	kBTAGSF_DOWN_BREAK6,
	kBTAGSF_DOWN_BREAK7,
	kBTAGSF_DOWN_BREAK8,
	kCTAGSF_UP,
	kCTAGSF_UP_BREAK0,
	kCTAGSF_UP_BREAK1,
	kCTAGSF_UP_BREAK2,
	kCTAGSF_UP_BREAK3,
	kCTAGSF_UP_BREAK4,
	kCTAGSF_UP_BREAK5,
	kCTAGSF_UP_BREAK6,
	kCTAGSF_DOWN,
	kCTAGSF_DOWN_BREAK0,
	kCTAGSF_DOWN_BREAK1,
	kCTAGSF_DOWN_BREAK2,
	kCTAGSF_DOWN_BREAK3,
	kCTAGSF_DOWN_BREAK4,
	kCTAGSF_DOWN_BREAK5,
	kCTAGSF_DOWN_BREAK6,
	kMISTAGSF_UP,
	kMISTAGSF_UP_BREAK0,
	kMISTAGSF_UP_BREAK1,
	kMISTAGSF_UP_BREAK2,
	kMISTAGSF_UP_BREAK3,
	kMISTAGSF_UP_BREAK4,
	kMISTAGSF_UP_BREAK5,
	kMISTAGSF_UP_BREAK6,
	kMISTAGSF_UP_BREAK7,
	kMISTAGSF_UP_BREAK8,
	kMISTAGSF_UP_BREAK9,
	kMISTAGSF_UP_BREAK10,
	kMISTAGSF_UP_BREAK11,
	kMISTAGSF_DOWN,
	kMISTAGSF_DOWN_BREAK0,
	kMISTAGSF_DOWN_BREAK1,
	kMISTAGSF_DOWN_BREAK2,
	kMISTAGSF_DOWN_BREAK3,
	kMISTAGSF_DOWN_BREAK4,
	kMISTAGSF_DOWN_BREAK5,
	kMISTAGSF_DOWN_BREAK6,
	kMISTAGSF_DOWN_BREAK7,
	kMISTAGSF_DOWN_BREAK8,
	kMISTAGSF_DOWN_BREAK9,
	kMISTAGSF_DOWN_BREAK10,
	kMISTAGSF_DOWN_BREAK11,
	// Sample systematics
	kWtDS,
	kMCatNLO,
	kMCatNLO_SgTop,
	kMCatNLO_tchan,
	kMCatNLO_schan,
	kMCatNLO_wt,
	kMCatNLO_ttbar,
	kaMCatNLO_tchan,
	kaMCatNLO_schan,
	kISRFSR_ttbar_More,
	kISRFSR_ttbar_Less,
	kRadHi_ttbar,
	kRadLo_ttbar,
	kScaleVar1, // ToDo: Rename kScaleVar1_schan
	kScaleVar2, //
	kScaleVar3, //
	kScaleVar4, //
	kScaleVar5, //
	kScaleVar6, //
	kScaleVar_tchan1,
	kScaleVar_tchan2,
	kScaleVar_tchan3,
	kScaleVar_tchan4,
	kWjetsGen,
	kPowhegPythia_t,      // t-channel syst.
	kPowhegPythia2011C_t, // t-channel syst.
	kPowhegHerwig_t,      // t-channel syst.
	// Pdf Systematic
	kPdf_down,
	kPdf_up,
	kUndefined	
    };
	
    enum ESystematicGroup {
	kSystGrpNominal      = BIT(0),
	kSystGrpJES          = BIT(1),
	kSystGrpDefaultSyst  = BIT(2),
	kSystGrpScaleFactors = BIT(3),
	kSystGrpJESCompOnly  = BIT(4),
	kSystGrpBTagEV       = BIT(5),
	kSystGrpSampleSyst   = BIT(6),
	kSystGrpAllDefault   = (kSystGrpNominal      |
				kSystGrpJES          |
				kSystGrpDefaultSyst  |
				kSystGrpScaleFactors ),
	kSystGrpAllJESComp   = (kSystGrpNominal      |
				kSystGrpDefaultSyst  |
				kSystGrpScaleFactors |
				kSystGrpJESCompOnly ),
	kSystGrpAll          = (kSystGrpNominal      |
				kSystGrpJES          |
				kSystGrpDefaultSyst  |
				kSystGrpScaleFactors |
				kSystGrpJESCompOnly  )
    };

  private:
    EBuildMode   fBuildMode;         // Buildmode for BuildUserTasks
    EInputFormat fInputFormat;       // Input format, 1 or many tree(s)/file 

    TList    *fListOfSamples;        // List of all samples
    TList    *fListOfCuts;           // List of cut objects
    TList    *fListOfSubselectionCuts; // List of AtlSubselectionCuts objects
    TList    *fListOfTools;          // List of tools used in the analysis
    TList    *fListOfToolCuts;       // List of cuts and params for analysis tools
    TList    *fListOfUserEnvs;       // List of user environment variables
    
    UInt_t    fLepChannels;          // Lepton channels
    UInt_t    fJetMults;             // Jet multiplicities
    TBits    *fSystematics;          // List of systematics

    Float_t   fDataLuminosity;       // Data luminosity for plotter
    
    TString  *fHostname;             // Name of the cluster (as/ms-machines)
    TString  *fSgTopVersion;         // Version of SgTopD3PDs
    TString  *fDSIDList;             // List for matching DSID with local files

    TString  *fSelector;             // Name of Analysis Selector
    TString  *fInputDir;             // Path to input files (if input is not provided by a sample list)
    TString  *fPlotDir;              // Path to plotter input files (i.e. the output dir w/o 'xJets/lepton/systematic')
    TString  *fHistDir;              // Path to Histogram folder (analysis output)
    TString  *fJobHomeDir;           // Path to Task folder (job submitlog)
    TString  *fTempDir;              // Temporary path (batch output)
    TString  *fTreeName;             // Name of the input tree (default: physics)
    TString  *fOutputFilePrefix;     // Prefix of the output filename (default = "hist")
    TString  *fPlotterScheme;        // Option to set the scheme of the plotter
    TString  *fAtlasLabelStatus;     // Status label for plotter (default: "Work in Progress")
    TString  *fLuminosityLabel;      // Luminosity Label for Plotter
    TString  *fCenterOfMassEnergyLabel; // CenterOfMassEnergyLabel for plotter
    Bool_t    fDrawDataZeroEntryErrors; // Flag for plotter (default = false)
    Bool_t    fUseOverflowUnderflow;    // Flag for plotter (default = false)
    Bool_t    fDrawMCError;             // Flag for plotter (default = ktrue)
    Bool_t    fExportPDF;               // Flag for plotter (default = kfalse)
    Bool_t    fDrawSignalOverlay;       // Flag for drawing the signal MC (assumed to be the least entry in the MC histogram stack) as overlay instead as part of the stack (default = false)
    Float_t   fScaleOverlay;            // Scale factor of the overlay histogram (default = 1.)
    	
    TNamed   *fOutputTreeName;          // Name and title of the output tree (if any)
    
    Bool_t    fUseSubJobsAsInput;       // Analysis runs on subjob output of previous analysis step?
    Bool_t    fForceRetry;              // Flag for forcing retry (useful for testing, default: kFALSE)
    Bool_t    fBuildHforTree;           // Flag for creating HforTree (default: kFALSE)
    Bool_t    fBuildAnalysisTree;       // Flag for creating AnalysisTree (default: kTRUE)
    Bool_t    fBuildMergingTree;        // Flag for creating MergingTree (default: kTRUE)
    Bool_t    fBuildPlottingTree;       // Flag for creating PlottingTree (default: kTRUE)
    Bool_t    fBuildMemTkAnalysisTree;  // Flag for creating MemTk AnalysisTree (default: kFALSE)
    Bool_t    fBuildBDTAnalysisTree;    // Flag for creating BDT AnalysisTree (default: kFALSE)
    Bool_t    fBuildHistFactoryTree;    // Flag for creating HistFactoryTree (default: kFALSE)
    Bool_t    fUseHforSamples;          // Flag for using Hfor Samples (default: kTRUE)
    Bool_t    fTtbarIsSplitted;         // Flag for using ttbar with splitted dataset (default: kTRUE)
    Bool_t    fUsePlotterSchemeDir;     // Flag for using the plotter scheme name as output directory name (default: kFALSE --> "plots_datamc")
    TList    *fNtuplePlotCmds;          // List of ntuple draw commands used by the plotter tasks
    
    TString *fMemTkRunScript;         // Run script to be used for MemTk analysis
    TString *fGridRootVersion;        // Root version for Grid submission
    TString *fGridCmtVersion;         // Cmt version for Grid submission
    TString *fGridUserName;           // Grid user name
    TString *fGridSuffix;             // Suffix for grid dataset names
    Bool_t   fGridJob;                // Switch for selecting grid jobs
    /* Bool_t   fSkipData;               // Skip Data if requested */

    Int_t fNSubJobsData;          // Number of subjobs for Data
    Int_t fNSubJobsQCD;           // Number of subjobs for QCD
    Int_t fNSubJobsTtbar;         // Number of subjobs for ttbar
    Int_t fNSubJobsSgTopSChannel; // Number of subjobs for sgtop s-channel
    Int_t fNSubJobsSgTopTChannel; // Number of subjobs for sgtop t-channel
    Int_t fNSubJobsSgTopWt;       // Number of subjobs for sgtop Wt
    Int_t fNSubJobsWjetsB;        // Number of subjobs for Wjets B
    Int_t fNSubJobsWjetsC;        // Number of subjobs for Wjets C
    Int_t fNSubJobsWjetsLight;    // Number of subjobs for Wjets Light

    AtlHistFactoryMeasurement *fMeasurement; // HistFactory Measurement infos
    
    TCollection * fSelectedVariations;
    Int_t fCampaign;              // 11 = 7TeV, 12 = 8TeV, 14 = DC14, 15 = 13TeV
    TString fCrossSectionFilePath;

    Int_t fDebug;                 // Debug flag to be passed to the analysis
    Int_t fDebugBuild;            // Debug flag used for task building

  public:
    AtlTopLevelAnalysis(const char* name, const char* title);
    virtual ~AtlTopLevelAnalysis();

    AtlSample * AddSample(const char* Name, const char* Title, const char* color,
		   AtlSample::EType Type, Float_t xsec, const char* PathName);
    void AddLeptonChannel(AtlSelector::ELepChannel Channel);
    void AddJetMultiplicity(AtlSelector::EJetMult JetMult);
    void AddSystematic(ESystematic Systematic);
    void AddSystematic2(char const * name);
    void AddSystematicGroup(ESystematicGroup SystematicGrp);
    void AddUserEnv(const char* env); // *MENU*
    void AddNtuplePlotCmd(const char* TreeName, const char* VarExp,
			  const char* Selection, const char* PlotName,
			  const char* PlotTitle, Int_t Nbins,
			  Double_t Xlow, Double_t Xup,
			  const char* XTitle, const char* YTitle);
    
    void BuildTree(Bool_t OpenBrowser = kTRUE);
    void BuildHforSplittingTree(TTask *ParentTask);
    void BuildAnalysisTree(TTask *ParentTask);
    void BuildMemTkAnalysisTree(TTask *ParentTask);
    void BuildBDTAnalysisTree(TTask *ParentTask);
    void BuildHistFactoryTree(TTask *ParentTask);
    void BuildMergingTree(TTask *ParentTask);
    void BuildPlottingTree(TTask *ParentTask);
    
    void BuildJetBinFolders(TTask *ParentTask);
    void BuildLeptonChannelFolders(TTask *ParentTask, Int_t Jetbin);
    void BuildSystematicsFolders(TTask *ParentTask, Int_t Jetbin, Int_t LepChannel);
    void BuildHforSplittingTasks(TTask *ParentTask, Int_t Lepton, Int_t Systematic);
    void BuildAnalysisTasks(TTask *ParentTask, Int_t Jetbin, Int_t LepChannel, Int_t Systematic);
    void BuildMergingTasks(TTask *ParentTask, Int_t Jetbin, Int_t LepChannel, Int_t Systematic);
    void BuildMemTkAnalysisTasks(TTask *ParentTask, Int_t Jetbin, Int_t LepChannel, Int_t Systematic);
    void BuildBDTAnalysisTasks(TTask *ParentTask, Int_t Jetbin, Int_t LepChannel, Int_t Systematic);
    void BuildPlottingTasks(TTask *ParentTask, Int_t Jetbin, Int_t LepChannel, Int_t Systematic);
    void BuildUserTasks(TTask *ParentTask, Int_t Jetbin, Int_t LepChannel, Int_t Systematic);

    TString* BuildOutputFileName(Int_t jetbin, Int_t lepchannel, 
				 Int_t systematic, const char* sample,
				 Bool_t UseSubJobsAsInput = kFALSE);
    TString* BuildOutputPath(TString* dir, const char* ext, 
			     Int_t jetbin, Int_t lepchannel, Int_t systematic,
			     const char* sample );

    AtlToolCut* FindToolCut(const char* tool, const char* var);
    AtlCut*     FindCut(const char* var);
    TList * GetListOfSubselectionCuts() { return fListOfSubselectionCuts; }

    const char* GetInputFileName(AtlSample *sample, Int_t lep, Int_t syst);
    const char* GetInputFileName(AtlSample *sample, Int_t lep, Int_t syst, Int_t pathIndex);
    const char* GetInputFileNameFromFile(AtlSample *sample, Int_t lep, Int_t syst);
    static const char* GetSystematicEnum(Int_t syst);
    static char const * GetSystematicName(Int_t syst);
    TList* GetPlottingFolders(Option_t *option, TList *samples);
    TList* GetPlottingFoldersSgTop_t(TList *samples);
    TList* GetPlottingFoldersSgTop_s(TList *samples);
    TList* GetPlottingFoldersSgTop_s_reduced(TList *samples);
    TList* GetPlottingFoldersSgTop_s_wjetsMerged(TList *samples);
    TList* GetPlottingFoldersSgTop_s_wjetsCB(TList *samples);
    TList* GetPlottingFoldersTtbar(TList *samples);
    TList* GetPlottingFolderstZ(TList *samples);
    TList* GetPlottingFoldersDetail(TList *samples);
    Bool_t GetTaskStatus(TString *jobHome, TString *outfileName, TString *outfile);
    
    static Int_t GetSystematicIdByName(char const * name);
    static Bool_t IsScaleFactorSystematic(Int_t Systematic);
    static Bool_t IsBTagEVScaleFactorSystematic(Int_t Systematic);
    static Bool_t IsJESComponentSystematic(Int_t Systematic);
    static Bool_t IsSampleSystematic(Int_t Systematic);
    
    virtual void Print(Option_t *option = "") const;
    void PrintLeptonChannelNames() const;
    void PrintJetMultiplicityNames() const;
    void PrintSystematicNames() const;

    void ReadSampleList(const char* basedir = "");

    void SetToolCut(const char* tool, const char* var, const char* val);
    void SetCut(const char* var, const char* val);
    void SetDSIDList(const char* list);
    void SetInputDir(const char* path );
    void SetPlotDir(const char* path );
    void SetHistDir(const char* path );
    void SetSelector(const char* sel );
    void SetSgTopVersion(const char* ver);
    void SetCampaign(Int_t campaign);
    void SetCrossSectionFilePath(const char* path);
    void SetJobHomeDir(const char* path );
    void SetTempDir(const char* path );
    void SetTreeName(const char* name );
    void SetOutputFilePrefix(const char* prefix);
    void SetOutputTree(const char* name, const char* title);
    void SetPlotterScheme(Option_t *scheme);
    inline void SetDataLuminosity(Double_t luminosity) { fDataLuminosity = luminosity;}
    void SetAtlasLabelStatus(const char* label); 
    void SetCenterOfMassEnergyLabel(const char* label);
    void SetLuminosityLabel(const char* label);
    void SetDrawDataZeroEntryErrors(Bool_t status);
    void SetDrawMCError(Bool_t status);
    void SetExportPDF(Bool_t status);
    void SetUseOverflowUnderflow(Bool_t status);
    void SetDrawSignalOverlay(Bool_t status);
    void SetScaleOverlay(Float_t scale);
    void SetGridRootVersion(const char* RootVersion);
    void SetGridCmtVersion(const char* CmtVersion);
    void SetGridUserName(const char* UserName);
    void SetGridSuffix(const char* suffix);
    void SetBuildHistFactoryTree(Bool_t flag);
    void SetMemTkRunScript(const char* script);
    
    inline Bool_t GetForceRetry() const { return fForceRetry; }
    inline TString* GetDSIDList() const { return fDSIDList; }
    inline TString* GetHistDir() const { return fHistDir; }
    inline TString* GetSelector() const { return fSelector; }
    inline TString* GetSgTopVersion() const { return fSgTopVersion; }
    inline TString* GetJobHomeDir() const { return fJobHomeDir; }
    inline TString* GetTempDir() const { return fTempDir; }
    inline TString* GetTreeName() const { return fTreeName; }    
    
    Int_t GetCampaign() const;

    inline void AddTool(AtlAnalysisTool *tool) {
	// Add analysis tool
	fListOfTools->Add((TObject*)tool);
    }
    inline void SetParameter(const char* var, const char* val) {
	//
	// Set parameter value for analysis selector.
	//
	// The variable name must be a valid data member of the underlying
	// analysis selector class (see AtlSelector). This function can
	// also be used in order to change the value for an already
	// existing parameter
	//
	SetCut(var, val);
    }
    inline void SetToolParameter(const char* tool, const char* var,
				 const char* val) {
	//
	// Set parameter value for an A++ selector tool.
	//
	// The variable name must be a valid data member of the given A++
	// analysis tool class (see AtlAnalysisTool). This function can
	// also be used in order to change the value for an already
	// existing variable
	SetToolCut(tool, var, val);
    }
    inline void SetForceRetry(Bool_t flag) { fForceRetry = flag; }
    inline void SetBuildHforTree(Bool_t flag) { fBuildHforTree = flag; }
    inline void SetBuildAnalysisTree(Bool_t flag) { fBuildAnalysisTree = flag; }
    inline void SetBuildMemTkAnalysisTree(Bool_t flag) { fBuildMemTkAnalysisTree = flag; }
    inline void SetBuildBDTAnalysisTree(Bool_t flag) { fBuildBDTAnalysisTree = flag; }
    inline void SetBuildMergingTree(Bool_t flag) { fBuildMergingTree = flag; }
    inline void SetBuildPlottingTree(Bool_t flag) { fBuildPlottingTree = flag; }
    inline void SetUseHforSamples(Bool_t flag) { fUseHforSamples = flag; }	
    inline void SetGridJob(Bool_t gridjob) { fGridJob = gridjob; }
    inline void SetUseSubJobsAsInput(Bool_t flag) { fUseSubJobsAsInput = flag; }
    inline void SetUsePlotterSchemeDir(Bool_t flag) { fUsePlotterSchemeDir = flag; }
    inline void SetTtbarIsSplitted(Bool_t flag) { fTtbarIsSplitted = flag; } 
    /* inline void SetSkipData(Bool_t flag) { fSkipData = flag; } */

    inline void SetInputFormat(EInputFormat format) { fInputFormat = format; }
    inline void SetNSubJobsData(Int_t jobs) { fNSubJobsData = jobs; }
    inline void SetNSubJobsQCD(Int_t jobs) { fNSubJobsQCD = jobs; }
    inline void SetNSubJobsTtbar(Int_t jobs) { fNSubJobsTtbar = jobs; }
    inline void SetNSubJobsSgTopSChannel(Int_t jobs) { fNSubJobsSgTopSChannel = jobs; }
    inline void SetNSubJobsSgTopTChannel(Int_t jobs) { fNSubJobsSgTopTChannel = jobs; }
    inline void SetNSubJobsSgTopWt(Int_t jobs) { fNSubJobsSgTopWt = jobs; }
    inline void SetNSubJobsWjetsB(Int_t jobs) { fNSubJobsWjetsB = jobs; }
    inline void SetNSubJobsWjetsC(Int_t jobs) { fNSubJobsWjetsC = jobs; }
    inline void SetNSubJobsWjetsLight(Int_t jobs) { fNSubJobsWjetsLight = jobs; }

    inline void SetMeasurement(AtlHistFactoryMeasurement *meas) { fMeasurement = meas; }

    inline void SetDebug(Int_t level = 1) { fDebug = level; }
    inline void SetDebugBuild(Int_t level = 1) { fDebugBuild = level; }

private:
    Bool_t IsIgnored(AtlSample * sample);

    ClassDef(AtlTopLevelAnalysis,0) // Top-level A++ analysis task
};
#endif

 AtlTopLevelAnalysis.h:1
 AtlTopLevelAnalysis.h:2
 AtlTopLevelAnalysis.h:3
 AtlTopLevelAnalysis.h:4
 AtlTopLevelAnalysis.h:5
 AtlTopLevelAnalysis.h:6
 AtlTopLevelAnalysis.h:7
 AtlTopLevelAnalysis.h:8
 AtlTopLevelAnalysis.h:9
 AtlTopLevelAnalysis.h:10
 AtlTopLevelAnalysis.h:11
 AtlTopLevelAnalysis.h:12
 AtlTopLevelAnalysis.h:13
 AtlTopLevelAnalysis.h:14
 AtlTopLevelAnalysis.h:15
 AtlTopLevelAnalysis.h:16
 AtlTopLevelAnalysis.h:17
 AtlTopLevelAnalysis.h:18
 AtlTopLevelAnalysis.h:19
 AtlTopLevelAnalysis.h:20
 AtlTopLevelAnalysis.h:21
 AtlTopLevelAnalysis.h:22
 AtlTopLevelAnalysis.h:23
 AtlTopLevelAnalysis.h:24
 AtlTopLevelAnalysis.h:25
 AtlTopLevelAnalysis.h:26
 AtlTopLevelAnalysis.h:27
 AtlTopLevelAnalysis.h:28
 AtlTopLevelAnalysis.h:29
 AtlTopLevelAnalysis.h:30
 AtlTopLevelAnalysis.h:31
 AtlTopLevelAnalysis.h:32
 AtlTopLevelAnalysis.h:33
 AtlTopLevelAnalysis.h:34
 AtlTopLevelAnalysis.h:35
 AtlTopLevelAnalysis.h:36
 AtlTopLevelAnalysis.h:37
 AtlTopLevelAnalysis.h:38
 AtlTopLevelAnalysis.h:39
 AtlTopLevelAnalysis.h:40
 AtlTopLevelAnalysis.h:41
 AtlTopLevelAnalysis.h:42
 AtlTopLevelAnalysis.h:43
 AtlTopLevelAnalysis.h:44
 AtlTopLevelAnalysis.h:45
 AtlTopLevelAnalysis.h:46
 AtlTopLevelAnalysis.h:47
 AtlTopLevelAnalysis.h:48
 AtlTopLevelAnalysis.h:49
 AtlTopLevelAnalysis.h:50
 AtlTopLevelAnalysis.h:51
 AtlTopLevelAnalysis.h:52
 AtlTopLevelAnalysis.h:53
 AtlTopLevelAnalysis.h:54
 AtlTopLevelAnalysis.h:55
 AtlTopLevelAnalysis.h:56
 AtlTopLevelAnalysis.h:57
 AtlTopLevelAnalysis.h:58
 AtlTopLevelAnalysis.h:59
 AtlTopLevelAnalysis.h:60
 AtlTopLevelAnalysis.h:61
 AtlTopLevelAnalysis.h:62
 AtlTopLevelAnalysis.h:63
 AtlTopLevelAnalysis.h:64
 AtlTopLevelAnalysis.h:65
 AtlTopLevelAnalysis.h:66
 AtlTopLevelAnalysis.h:67
 AtlTopLevelAnalysis.h:68
 AtlTopLevelAnalysis.h:69
 AtlTopLevelAnalysis.h:70
 AtlTopLevelAnalysis.h:71
 AtlTopLevelAnalysis.h:72
 AtlTopLevelAnalysis.h:73
 AtlTopLevelAnalysis.h:74
 AtlTopLevelAnalysis.h:75
 AtlTopLevelAnalysis.h:76
 AtlTopLevelAnalysis.h:77
 AtlTopLevelAnalysis.h:78
 AtlTopLevelAnalysis.h:79
 AtlTopLevelAnalysis.h:80
 AtlTopLevelAnalysis.h:81
 AtlTopLevelAnalysis.h:82
 AtlTopLevelAnalysis.h:83
 AtlTopLevelAnalysis.h:84
 AtlTopLevelAnalysis.h:85
 AtlTopLevelAnalysis.h:86
 AtlTopLevelAnalysis.h:87
 AtlTopLevelAnalysis.h:88
 AtlTopLevelAnalysis.h:89
 AtlTopLevelAnalysis.h:90
 AtlTopLevelAnalysis.h:91
 AtlTopLevelAnalysis.h:92
 AtlTopLevelAnalysis.h:93
 AtlTopLevelAnalysis.h:94
 AtlTopLevelAnalysis.h:95
 AtlTopLevelAnalysis.h:96
 AtlTopLevelAnalysis.h:97
 AtlTopLevelAnalysis.h:98
 AtlTopLevelAnalysis.h:99
 AtlTopLevelAnalysis.h:100
 AtlTopLevelAnalysis.h:101
 AtlTopLevelAnalysis.h:102
 AtlTopLevelAnalysis.h:103
 AtlTopLevelAnalysis.h:104
 AtlTopLevelAnalysis.h:105
 AtlTopLevelAnalysis.h:106
 AtlTopLevelAnalysis.h:107
 AtlTopLevelAnalysis.h:108
 AtlTopLevelAnalysis.h:109
 AtlTopLevelAnalysis.h:110
 AtlTopLevelAnalysis.h:111
 AtlTopLevelAnalysis.h:112
 AtlTopLevelAnalysis.h:113
 AtlTopLevelAnalysis.h:114
 AtlTopLevelAnalysis.h:115
 AtlTopLevelAnalysis.h:116
 AtlTopLevelAnalysis.h:117
 AtlTopLevelAnalysis.h:118
 AtlTopLevelAnalysis.h:119
 AtlTopLevelAnalysis.h:120
 AtlTopLevelAnalysis.h:121
 AtlTopLevelAnalysis.h:122
 AtlTopLevelAnalysis.h:123
 AtlTopLevelAnalysis.h:124
 AtlTopLevelAnalysis.h:125
 AtlTopLevelAnalysis.h:126
 AtlTopLevelAnalysis.h:127
 AtlTopLevelAnalysis.h:128
 AtlTopLevelAnalysis.h:129
 AtlTopLevelAnalysis.h:130
 AtlTopLevelAnalysis.h:131
 AtlTopLevelAnalysis.h:132
 AtlTopLevelAnalysis.h:133
 AtlTopLevelAnalysis.h:134
 AtlTopLevelAnalysis.h:135
 AtlTopLevelAnalysis.h:136
 AtlTopLevelAnalysis.h:137
 AtlTopLevelAnalysis.h:138
 AtlTopLevelAnalysis.h:139
 AtlTopLevelAnalysis.h:140
 AtlTopLevelAnalysis.h:141
 AtlTopLevelAnalysis.h:142
 AtlTopLevelAnalysis.h:143
 AtlTopLevelAnalysis.h:144
 AtlTopLevelAnalysis.h:145
 AtlTopLevelAnalysis.h:146
 AtlTopLevelAnalysis.h:147
 AtlTopLevelAnalysis.h:148
 AtlTopLevelAnalysis.h:149
 AtlTopLevelAnalysis.h:150
 AtlTopLevelAnalysis.h:151
 AtlTopLevelAnalysis.h:152
 AtlTopLevelAnalysis.h:153
 AtlTopLevelAnalysis.h:154
 AtlTopLevelAnalysis.h:155
 AtlTopLevelAnalysis.h:156
 AtlTopLevelAnalysis.h:157
 AtlTopLevelAnalysis.h:158
 AtlTopLevelAnalysis.h:159
 AtlTopLevelAnalysis.h:160
 AtlTopLevelAnalysis.h:161
 AtlTopLevelAnalysis.h:162
 AtlTopLevelAnalysis.h:163
 AtlTopLevelAnalysis.h:164
 AtlTopLevelAnalysis.h:165
 AtlTopLevelAnalysis.h:166
 AtlTopLevelAnalysis.h:167
 AtlTopLevelAnalysis.h:168
 AtlTopLevelAnalysis.h:169
 AtlTopLevelAnalysis.h:170
 AtlTopLevelAnalysis.h:171
 AtlTopLevelAnalysis.h:172
 AtlTopLevelAnalysis.h:173
 AtlTopLevelAnalysis.h:174
 AtlTopLevelAnalysis.h:175
 AtlTopLevelAnalysis.h:176
 AtlTopLevelAnalysis.h:177
 AtlTopLevelAnalysis.h:178
 AtlTopLevelAnalysis.h:179
 AtlTopLevelAnalysis.h:180
 AtlTopLevelAnalysis.h:181
 AtlTopLevelAnalysis.h:182
 AtlTopLevelAnalysis.h:183
 AtlTopLevelAnalysis.h:184
 AtlTopLevelAnalysis.h:185
 AtlTopLevelAnalysis.h:186
 AtlTopLevelAnalysis.h:187
 AtlTopLevelAnalysis.h:188
 AtlTopLevelAnalysis.h:189
 AtlTopLevelAnalysis.h:190
 AtlTopLevelAnalysis.h:191
 AtlTopLevelAnalysis.h:192
 AtlTopLevelAnalysis.h:193
 AtlTopLevelAnalysis.h:194
 AtlTopLevelAnalysis.h:195
 AtlTopLevelAnalysis.h:196
 AtlTopLevelAnalysis.h:197
 AtlTopLevelAnalysis.h:198
 AtlTopLevelAnalysis.h:199
 AtlTopLevelAnalysis.h:200
 AtlTopLevelAnalysis.h:201
 AtlTopLevelAnalysis.h:202
 AtlTopLevelAnalysis.h:203
 AtlTopLevelAnalysis.h:204
 AtlTopLevelAnalysis.h:205
 AtlTopLevelAnalysis.h:206
 AtlTopLevelAnalysis.h:207
 AtlTopLevelAnalysis.h:208
 AtlTopLevelAnalysis.h:209
 AtlTopLevelAnalysis.h:210
 AtlTopLevelAnalysis.h:211
 AtlTopLevelAnalysis.h:212
 AtlTopLevelAnalysis.h:213
 AtlTopLevelAnalysis.h:214
 AtlTopLevelAnalysis.h:215
 AtlTopLevelAnalysis.h:216
 AtlTopLevelAnalysis.h:217
 AtlTopLevelAnalysis.h:218
 AtlTopLevelAnalysis.h:219
 AtlTopLevelAnalysis.h:220
 AtlTopLevelAnalysis.h:221
 AtlTopLevelAnalysis.h:222
 AtlTopLevelAnalysis.h:223
 AtlTopLevelAnalysis.h:224
 AtlTopLevelAnalysis.h:225
 AtlTopLevelAnalysis.h:226
 AtlTopLevelAnalysis.h:227
 AtlTopLevelAnalysis.h:228
 AtlTopLevelAnalysis.h:229
 AtlTopLevelAnalysis.h:230
 AtlTopLevelAnalysis.h:231
 AtlTopLevelAnalysis.h:232
 AtlTopLevelAnalysis.h:233
 AtlTopLevelAnalysis.h:234
 AtlTopLevelAnalysis.h:235
 AtlTopLevelAnalysis.h:236
 AtlTopLevelAnalysis.h:237
 AtlTopLevelAnalysis.h:238
 AtlTopLevelAnalysis.h:239
 AtlTopLevelAnalysis.h:240
 AtlTopLevelAnalysis.h:241
 AtlTopLevelAnalysis.h:242
 AtlTopLevelAnalysis.h:243
 AtlTopLevelAnalysis.h:244
 AtlTopLevelAnalysis.h:245
 AtlTopLevelAnalysis.h:246
 AtlTopLevelAnalysis.h:247
 AtlTopLevelAnalysis.h:248
 AtlTopLevelAnalysis.h:249
 AtlTopLevelAnalysis.h:250
 AtlTopLevelAnalysis.h:251
 AtlTopLevelAnalysis.h:252
 AtlTopLevelAnalysis.h:253
 AtlTopLevelAnalysis.h:254
 AtlTopLevelAnalysis.h:255
 AtlTopLevelAnalysis.h:256
 AtlTopLevelAnalysis.h:257
 AtlTopLevelAnalysis.h:258
 AtlTopLevelAnalysis.h:259
 AtlTopLevelAnalysis.h:260
 AtlTopLevelAnalysis.h:261
 AtlTopLevelAnalysis.h:262
 AtlTopLevelAnalysis.h:263
 AtlTopLevelAnalysis.h:264
 AtlTopLevelAnalysis.h:265
 AtlTopLevelAnalysis.h:266
 AtlTopLevelAnalysis.h:267
 AtlTopLevelAnalysis.h:268
 AtlTopLevelAnalysis.h:269
 AtlTopLevelAnalysis.h:270
 AtlTopLevelAnalysis.h:271
 AtlTopLevelAnalysis.h:272
 AtlTopLevelAnalysis.h:273
 AtlTopLevelAnalysis.h:274
 AtlTopLevelAnalysis.h:275
 AtlTopLevelAnalysis.h:276
 AtlTopLevelAnalysis.h:277
 AtlTopLevelAnalysis.h:278
 AtlTopLevelAnalysis.h:279
 AtlTopLevelAnalysis.h:280
 AtlTopLevelAnalysis.h:281
 AtlTopLevelAnalysis.h:282
 AtlTopLevelAnalysis.h:283
 AtlTopLevelAnalysis.h:284
 AtlTopLevelAnalysis.h:285
 AtlTopLevelAnalysis.h:286
 AtlTopLevelAnalysis.h:287
 AtlTopLevelAnalysis.h:288
 AtlTopLevelAnalysis.h:289
 AtlTopLevelAnalysis.h:290
 AtlTopLevelAnalysis.h:291
 AtlTopLevelAnalysis.h:292
 AtlTopLevelAnalysis.h:293
 AtlTopLevelAnalysis.h:294
 AtlTopLevelAnalysis.h:295
 AtlTopLevelAnalysis.h:296
 AtlTopLevelAnalysis.h:297
 AtlTopLevelAnalysis.h:298
 AtlTopLevelAnalysis.h:299
 AtlTopLevelAnalysis.h:300
 AtlTopLevelAnalysis.h:301
 AtlTopLevelAnalysis.h:302
 AtlTopLevelAnalysis.h:303
 AtlTopLevelAnalysis.h:304
 AtlTopLevelAnalysis.h:305
 AtlTopLevelAnalysis.h:306
 AtlTopLevelAnalysis.h:307
 AtlTopLevelAnalysis.h:308
 AtlTopLevelAnalysis.h:309
 AtlTopLevelAnalysis.h:310
 AtlTopLevelAnalysis.h:311
 AtlTopLevelAnalysis.h:312
 AtlTopLevelAnalysis.h:313
 AtlTopLevelAnalysis.h:314
 AtlTopLevelAnalysis.h:315
 AtlTopLevelAnalysis.h:316
 AtlTopLevelAnalysis.h:317
 AtlTopLevelAnalysis.h:318
 AtlTopLevelAnalysis.h:319
 AtlTopLevelAnalysis.h:320
 AtlTopLevelAnalysis.h:321
 AtlTopLevelAnalysis.h:322
 AtlTopLevelAnalysis.h:323
 AtlTopLevelAnalysis.h:324
 AtlTopLevelAnalysis.h:325
 AtlTopLevelAnalysis.h:326
 AtlTopLevelAnalysis.h:327
 AtlTopLevelAnalysis.h:328
 AtlTopLevelAnalysis.h:329
 AtlTopLevelAnalysis.h:330
 AtlTopLevelAnalysis.h:331
 AtlTopLevelAnalysis.h:332
 AtlTopLevelAnalysis.h:333
 AtlTopLevelAnalysis.h:334
 AtlTopLevelAnalysis.h:335
 AtlTopLevelAnalysis.h:336
 AtlTopLevelAnalysis.h:337
 AtlTopLevelAnalysis.h:338
 AtlTopLevelAnalysis.h:339
 AtlTopLevelAnalysis.h:340
 AtlTopLevelAnalysis.h:341
 AtlTopLevelAnalysis.h:342
 AtlTopLevelAnalysis.h:343
 AtlTopLevelAnalysis.h:344
 AtlTopLevelAnalysis.h:345
 AtlTopLevelAnalysis.h:346
 AtlTopLevelAnalysis.h:347
 AtlTopLevelAnalysis.h:348
 AtlTopLevelAnalysis.h:349
 AtlTopLevelAnalysis.h:350
 AtlTopLevelAnalysis.h:351
 AtlTopLevelAnalysis.h:352
 AtlTopLevelAnalysis.h:353
 AtlTopLevelAnalysis.h:354
 AtlTopLevelAnalysis.h:355
 AtlTopLevelAnalysis.h:356
 AtlTopLevelAnalysis.h:357
 AtlTopLevelAnalysis.h:358
 AtlTopLevelAnalysis.h:359
 AtlTopLevelAnalysis.h:360
 AtlTopLevelAnalysis.h:361
 AtlTopLevelAnalysis.h:362
 AtlTopLevelAnalysis.h:363
 AtlTopLevelAnalysis.h:364
 AtlTopLevelAnalysis.h:365
 AtlTopLevelAnalysis.h:366
 AtlTopLevelAnalysis.h:367
 AtlTopLevelAnalysis.h:368
 AtlTopLevelAnalysis.h:369
 AtlTopLevelAnalysis.h:370
 AtlTopLevelAnalysis.h:371
 AtlTopLevelAnalysis.h:372
 AtlTopLevelAnalysis.h:373
 AtlTopLevelAnalysis.h:374
 AtlTopLevelAnalysis.h:375
 AtlTopLevelAnalysis.h:376
 AtlTopLevelAnalysis.h:377
 AtlTopLevelAnalysis.h:378
 AtlTopLevelAnalysis.h:379
 AtlTopLevelAnalysis.h:380
 AtlTopLevelAnalysis.h:381
 AtlTopLevelAnalysis.h:382
 AtlTopLevelAnalysis.h:383
 AtlTopLevelAnalysis.h:384
 AtlTopLevelAnalysis.h:385
 AtlTopLevelAnalysis.h:386
 AtlTopLevelAnalysis.h:387
 AtlTopLevelAnalysis.h:388
 AtlTopLevelAnalysis.h:389
 AtlTopLevelAnalysis.h:390
 AtlTopLevelAnalysis.h:391
 AtlTopLevelAnalysis.h:392
 AtlTopLevelAnalysis.h:393
 AtlTopLevelAnalysis.h:394
 AtlTopLevelAnalysis.h:395
 AtlTopLevelAnalysis.h:396
 AtlTopLevelAnalysis.h:397
 AtlTopLevelAnalysis.h:398
 AtlTopLevelAnalysis.h:399
 AtlTopLevelAnalysis.h:400
 AtlTopLevelAnalysis.h:401
 AtlTopLevelAnalysis.h:402
 AtlTopLevelAnalysis.h:403
 AtlTopLevelAnalysis.h:404
 AtlTopLevelAnalysis.h:405
 AtlTopLevelAnalysis.h:406
 AtlTopLevelAnalysis.h:407
 AtlTopLevelAnalysis.h:408
 AtlTopLevelAnalysis.h:409
 AtlTopLevelAnalysis.h:410
 AtlTopLevelAnalysis.h:411
 AtlTopLevelAnalysis.h:412
 AtlTopLevelAnalysis.h:413
 AtlTopLevelAnalysis.h:414
 AtlTopLevelAnalysis.h:415
 AtlTopLevelAnalysis.h:416
 AtlTopLevelAnalysis.h:417
 AtlTopLevelAnalysis.h:418
 AtlTopLevelAnalysis.h:419
 AtlTopLevelAnalysis.h:420
 AtlTopLevelAnalysis.h:421
 AtlTopLevelAnalysis.h:422
 AtlTopLevelAnalysis.h:423
 AtlTopLevelAnalysis.h:424
 AtlTopLevelAnalysis.h:425
 AtlTopLevelAnalysis.h:426
 AtlTopLevelAnalysis.h:427
 AtlTopLevelAnalysis.h:428
 AtlTopLevelAnalysis.h:429
 AtlTopLevelAnalysis.h:430
 AtlTopLevelAnalysis.h:431
 AtlTopLevelAnalysis.h:432
 AtlTopLevelAnalysis.h:433
 AtlTopLevelAnalysis.h:434
 AtlTopLevelAnalysis.h:435
 AtlTopLevelAnalysis.h:436
 AtlTopLevelAnalysis.h:437
 AtlTopLevelAnalysis.h:438
 AtlTopLevelAnalysis.h:439
 AtlTopLevelAnalysis.h:440
 AtlTopLevelAnalysis.h:441
 AtlTopLevelAnalysis.h:442
 AtlTopLevelAnalysis.h:443
 AtlTopLevelAnalysis.h:444
 AtlTopLevelAnalysis.h:445
 AtlTopLevelAnalysis.h:446
 AtlTopLevelAnalysis.h:447
 AtlTopLevelAnalysis.h:448
 AtlTopLevelAnalysis.h:449
 AtlTopLevelAnalysis.h:450
 AtlTopLevelAnalysis.h:451
 AtlTopLevelAnalysis.h:452
 AtlTopLevelAnalysis.h:453
 AtlTopLevelAnalysis.h:454
 AtlTopLevelAnalysis.h:455
 AtlTopLevelAnalysis.h:456
 AtlTopLevelAnalysis.h:457
 AtlTopLevelAnalysis.h:458
 AtlTopLevelAnalysis.h:459
 AtlTopLevelAnalysis.h:460
 AtlTopLevelAnalysis.h:461
 AtlTopLevelAnalysis.h:462
 AtlTopLevelAnalysis.h:463
 AtlTopLevelAnalysis.h:464
 AtlTopLevelAnalysis.h:465
 AtlTopLevelAnalysis.h:466
 AtlTopLevelAnalysis.h:467
 AtlTopLevelAnalysis.h:468
 AtlTopLevelAnalysis.h:469
 AtlTopLevelAnalysis.h:470
 AtlTopLevelAnalysis.h:471
 AtlTopLevelAnalysis.h:472
 AtlTopLevelAnalysis.h:473
 AtlTopLevelAnalysis.h:474
 AtlTopLevelAnalysis.h:475
 AtlTopLevelAnalysis.h:476
 AtlTopLevelAnalysis.h:477
 AtlTopLevelAnalysis.h:478
 AtlTopLevelAnalysis.h:479
 AtlTopLevelAnalysis.h:480
 AtlTopLevelAnalysis.h:481
 AtlTopLevelAnalysis.h:482
 AtlTopLevelAnalysis.h:483
 AtlTopLevelAnalysis.h:484
 AtlTopLevelAnalysis.h:485
 AtlTopLevelAnalysis.h:486
 AtlTopLevelAnalysis.h:487
 AtlTopLevelAnalysis.h:488
 AtlTopLevelAnalysis.h:489
 AtlTopLevelAnalysis.h:490
 AtlTopLevelAnalysis.h:491
 AtlTopLevelAnalysis.h:492
 AtlTopLevelAnalysis.h:493
 AtlTopLevelAnalysis.h:494
 AtlTopLevelAnalysis.h:495
 AtlTopLevelAnalysis.h:496
 AtlTopLevelAnalysis.h:497
 AtlTopLevelAnalysis.h:498
 AtlTopLevelAnalysis.h:499
 AtlTopLevelAnalysis.h:500
 AtlTopLevelAnalysis.h:501