#ifndef _PDISTRIBUTIONMANAGER_H_
#define _PDISTRIBUTIONMANAGER_H_
#include "TObjArray.h"
#include "TF1.h"
#include "TF2.h"
#include "PParticle.h"
#include "PDistribution.h"
#include "PDistributionCollection.h"
#include "PStdModels.h"
#include "PDistributionManagerUtil.h"
#include "PBatch.h"
#include "PProjector.h"
#include "PCommandList.h"
#define PDISTRIBUTIONMANAGER_MAX_COLLECT 100
class PDistributionManager;
PDistributionManager &fDistributionManager();
PDistributionManager *makeDistributionManager();
class PDistributionManager : public TObject {
    
 public:
    
    PDistributionManager();
    
    int Add(PDistribution *dist) {
	
	return pdmutil->Add(dist);
    };
    int Add(PDistribution *dist, const Char_t *gr) {
	
	return pdmutil->Add(dist, gr);
    };
    void AlternativeTo(const char *a, const char *b) {
	pdmutil->AlternativeTo(a, b);
    };
    void Print(const Option_t *delme= "root") const {
	pdmutil->Print(delme);
    };
    int Attach(PChannel *ch);
    
    void Disable(const Char_t *id) {
	
	pdmutil->Disable(id);
    };
    void Enable(const Char_t *id) {
	
	pdmutil->Enable(id);
    };
    PDistribution *GetDistribution(const Char_t *id) {
	return pdmutil->GetDistribution(id);
    };
    void SetVerbose(Int_t v) {
	pdmutil->SetVerbose(v);
    };
    void DisableAddWarning(void) {
	makeDistributionManagerUtil()->no_warning = kTRUE;
    }
    void LinkDB(void) {
	
	pdmutil->LinkDB();
    };
    void ActivateStdModels(void);
    void ExpandGroup(const char *gr, Int_t ex=1) {
	pdmutil->ExpandGroup(gr, ex);
    };
    int from_pdecaymanager;
    Int_t AddGroup(const Char_t *id, const Char_t *de) {
	return pdmutil->AddGroup(id, de);
    };
    void SetGroup(const Char_t *id) {
	
	pdmutil->SetGroup(id);
    };
    Int_t AddSubGroup(const Char_t *id, const Char_t *de, const Char_t *sub) {
	return pdmutil->AddSubGroup(id, de, sub);
    };
    Bool_t AddPlugin(PDistributionCollection *plugin);
    Bool_t Exec(const char *command); 
    Bool_t ExecAll(const char *command = "init");
    Bool_t Activate(const char *name);
    Bool_t Startup(void); 
    Bool_t Startup(const char *command); 
    Bool_t Unpack(const char *filename);  
    PProjector *GetLoopFilter(void) {
	return loop_start;
    };
 private:
  
    PDistributionManagerUtil *pdmutil;
    PStdModels *std_models;
    PDistributionCollection *collect[PDISTRIBUTIONMANAGER_MAX_COLLECT];
    Int_t collect_pointer;
    void PluginInfo(const char *info);
    PBatch *batch;
    PProjector *loop_start;
    ClassDef(PDistributionManager,0)  
};
#endif
 PDistributionManager.h:10  PDistributionManager.h:11  PDistributionManager.h:12  PDistributionManager.h:13  PDistributionManager.h:14  PDistributionManager.h:15  PDistributionManager.h:16  PDistributionManager.h:17  PDistributionManager.h:18  PDistributionManager.h:19  PDistributionManager.h:20  PDistributionManager.h:21  PDistributionManager.h:22  PDistributionManager.h:23  PDistributionManager.h:24  PDistributionManager.h:25  PDistributionManager.h:26  PDistributionManager.h:27  PDistributionManager.h:28  PDistributionManager.h:29  PDistributionManager.h:30  PDistributionManager.h:31  PDistributionManager.h:32  PDistributionManager.h:33  PDistributionManager.h:34  PDistributionManager.h:35  PDistributionManager.h:36  PDistributionManager.h:37  PDistributionManager.h:38  PDistributionManager.h:39  PDistributionManager.h:40  PDistributionManager.h:41  PDistributionManager.h:42  PDistributionManager.h:43  PDistributionManager.h:44  PDistributionManager.h:45  PDistributionManager.h:46  PDistributionManager.h:47  PDistributionManager.h:48  PDistributionManager.h:49  PDistributionManager.h:50  PDistributionManager.h:51  PDistributionManager.h:52  PDistributionManager.h:53  PDistributionManager.h:54  PDistributionManager.h:55  PDistributionManager.h:56  PDistributionManager.h:57  PDistributionManager.h:58  PDistributionManager.h:59  PDistributionManager.h:60  PDistributionManager.h:61  PDistributionManager.h:62  PDistributionManager.h:63  PDistributionManager.h:64  PDistributionManager.h:65  PDistributionManager.h:66  PDistributionManager.h:67  PDistributionManager.h:68  PDistributionManager.h:69  PDistributionManager.h:70  PDistributionManager.h:71  PDistributionManager.h:72  PDistributionManager.h:73  PDistributionManager.h:74  PDistributionManager.h:75  PDistributionManager.h:76  PDistributionManager.h:77  PDistributionManager.h:78  PDistributionManager.h:79  PDistributionManager.h:80  PDistributionManager.h:81  PDistributionManager.h:82  PDistributionManager.h:83  PDistributionManager.h:84  PDistributionManager.h:85  PDistributionManager.h:86  PDistributionManager.h:87  PDistributionManager.h:88  PDistributionManager.h:89  PDistributionManager.h:90  PDistributionManager.h:91  PDistributionManager.h:92  PDistributionManager.h:93  PDistributionManager.h:94  PDistributionManager.h:95  PDistributionManager.h:96  PDistributionManager.h:97  PDistributionManager.h:98  PDistributionManager.h:99  PDistributionManager.h:100  PDistributionManager.h:101  PDistributionManager.h:102  PDistributionManager.h:103  PDistributionManager.h:104  PDistributionManager.h:105  PDistributionManager.h:106  PDistributionManager.h:107  PDistributionManager.h:108  PDistributionManager.h:109  PDistributionManager.h:110  PDistributionManager.h:111  PDistributionManager.h:112  PDistributionManager.h:113  PDistributionManager.h:114  PDistributionManager.h:115  PDistributionManager.h:116  PDistributionManager.h:117  PDistributionManager.h:118  PDistributionManager.h:119  PDistributionManager.h:120  PDistributionManager.h:121  PDistributionManager.h:122  PDistributionManager.h:123  PDistributionManager.h:124  PDistributionManager.h:125  PDistributionManager.h:126  PDistributionManager.h:127  PDistributionManager.h:128  PDistributionManager.h:129  PDistributionManager.h:130  PDistributionManager.h:131  PDistributionManager.h:132  PDistributionManager.h:133  PDistributionManager.h:134  PDistributionManager.h:135  PDistributionManager.h:136