// $Id: SimuRootFileManager.hh,v 1.2 2005/10/26 14:22:51 thea Exp $
// Author: A.Thea   Jun, 29 2004

/*****************************************************************************
 * ESAF: Euso Simulation and Analysis Framework                              *
 *                                                                           *
 *  Id: SimuRootFileManager                                                  *
 *  Package: Gui                                                             *
 *  Coordinator: Alessandro.Thea, Marco.Pallavicini                          *
 *                                                                           *
 *****************************************************************************/

#ifndef __SIMUROOTFILEMANAGER_HH_
#define __SIMUROOTFILEMANAGER_HH_

#include "euso.hh"
#include "TString.h"
#include "TRef.h"
#include "TFile.h"
#include "EsafConfigurable.hh"

class TTree;
class EEvent;
class ERunParameters;

////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//  SimuRootfileManager                                                       //
//                                                                            //
//  Simulation rootfile manager                                               //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

class SimuRootFileManager: public EsafConfigurable, public EsafMsgSource {
public:
    SimuRootFileManager();
    virtual ~SimuRootFileManager();

    virtual Bool_t Build();
    virtual void   Clear();
    virtual Bool_t Open( const char* = 0 );
    virtual Bool_t Open( const string& );
    virtual Bool_t Close();

    inline TFile *GetFile() { return fFile; }
    inline EEvent *GetEvent() { return fEvent; }
    inline ERunParameters *GetRunPars() { return fRunPars; }

    Int_t FillEvent();
    void ResetRunPars();

      void LockEvent();
      void UnlockEvent();
    Bool_t IsEventLocked() {return kFALSE;}
    
private:

    // events to handle
    EEvent *fEvent;
    ERunParameters *fRunPars;

    // trees
    TTree *fTree;

    TRef fRunParsRef;
    TFile *fFile;
    TString fFileName;

    Long64_t fMaxFileSize;
    Int_t fFileNumber;

    UInt_t fEventBranches;
    Bool_t fDetectorPhotonFillable;
    Bool_t fDetectorNightGlowFillable;
    Bool_t fNightGlowFillable;
    
    EsafConfigClass(General,SimuRootFileManager)

    ClassDef(SimuRootFileManager,0)
};

inline Bool_t SimuRootFileManager::Open( const string& name ) {
    return Open(name.c_str());
}
#endif  /* __SIMUROOTFILEMANAGER_HH_ */