00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef G4CsvAnalysisManager_h
00031 #define G4CsvAnalysisManager_h 1
00032 
00033 
00034 #include "G4VAnalysisManager.hh"
00035 #include "globals.hh"
00036 
00037 #include "tools/wcsv_ntuple"
00038 
00039 #include <fstream>
00040 #include <vector>
00041 #include <map>
00042 
00043 class G4CsvAnalysisManager : public G4VAnalysisManager
00044 {
00045   public:
00046     G4CsvAnalysisManager();
00047     ~G4CsvAnalysisManager();
00048     
00049     
00050     static G4CsvAnalysisManager* Instance();
00051 
00052     
00053     using G4VAnalysisManager::OpenFile;
00054     virtual G4bool OpenFile(const G4String& fileName);
00055     virtual G4bool Write();
00056     virtual G4bool CloseFile(); 
00057 
00058     
00059     virtual G4int CreateH1(const G4String& name, const G4String& title,
00060                            G4int nbins, G4double xmin, G4double xmax,
00061                            const G4String& unitName = "none",
00062                            const G4String& fcnName = "none");
00063     virtual G4int CreateH2(const G4String& name, const G4String& title,
00064                            G4int nxbins, G4double xmin, G4double xmax, 
00065                            G4int nybins, G4double ymin, G4double ymax,
00066                            const G4String& xunitName = "none", 
00067                            const G4String& yunitName = "none",
00068                            const G4String& xfcnName = "none", 
00069                            const G4String& yfcnName = "none");
00070                            
00071     virtual G4bool SetH1(G4int id,
00072                            G4int nbins, G4double xmin, G4double xmax,
00073                            const G4String& unitName = "none",
00074                            const G4String& fcnName = "none");
00075     virtual G4bool SetH2(G4int id,
00076                            G4int nxbins, G4double xmin, G4double xmax, 
00077                            G4int nybins, G4double ymin, G4double ymax,
00078                            const G4String& xunitName = "none", 
00079                            const G4String& yunitName = "none",
00080                            const G4String& xfcnName = "none", 
00081                            const G4String& yfcnName = "none");
00082  
00083     virtual G4bool ScaleH1(G4int id, G4double factor);
00084     virtual G4bool ScaleH2(G4int id, G4double factor);
00085                            
00086     virtual void  CreateNtuple(const G4String& name, const G4String& title);
00087     virtual G4int CreateNtupleIColumn(const G4String& name);
00088     virtual G4int CreateNtupleFColumn(const G4String& name);
00089     virtual G4int CreateNtupleDColumn(const G4String& name);   
00090     virtual void  FinishNtuple();   
00091     
00092     
00093     virtual G4bool FillH1(G4int id, G4double value, G4double weight = 1.0);
00094     virtual G4bool FillH2(G4int id, G4double xvalue, G4double yvalue,
00095                           G4double weight = 1.0);
00096     virtual G4bool FillNtupleIColumn(G4int id, G4int value);
00097     virtual G4bool FillNtupleFColumn(G4int id, G4float value);
00098     virtual G4bool FillNtupleDColumn(G4int id, G4double value);
00099     virtual G4bool AddNtupleRow();
00100     
00101     
00102     virtual G4int    GetH1Nbins(G4int id) const;
00103     virtual G4double GetH1Xmin(G4int id) const;
00104     virtual G4double GetH1Xmax(G4int id) const;
00105     virtual G4double GetH1Width(G4int id) const;
00106 
00107     
00108     virtual G4int    GetH2Nxbins(G4int id) const;
00109     virtual G4double GetH2Xmin(G4int id) const;
00110     virtual G4double GetH2Xmax(G4int id) const;
00111     virtual G4double GetH2XWidth(G4int id) const;
00112     virtual G4int    GetH2Nybins(G4int id) const;
00113     virtual G4double GetH2Ymin(G4int id) const;
00114     virtual G4double GetH2Ymax(G4int id) const;
00115     virtual G4double GetH2YWidth(G4int id) const;
00116 
00117     
00118     virtual G4bool SetH1Title(G4int id, const G4String& title);
00119     virtual G4bool SetH1XAxisTitle(G4int id, const G4String& title);
00120     virtual G4bool SetH1YAxisTitle(G4int id, const G4String& title);
00121     virtual G4bool SetH2Title(G4int id, const G4String& title);
00122     virtual G4bool SetH2XAxisTitle(G4int id, const G4String& title);
00123     virtual G4bool SetH2YAxisTitle(G4int id, const G4String& title);
00124     virtual G4bool SetH2ZAxisTitle(G4int id, const G4String& title);
00125 
00126     
00127     virtual G4String GetH1Title(G4int id) const;
00128     virtual G4String GetH1XAxisTitle(G4int id) const;
00129     virtual G4String GetH1YAxisTitle(G4int id) const;
00130     virtual G4String GetH2Title(G4int id) const;
00131     virtual G4String GetH2XAxisTitle(G4int id) const;
00132     virtual G4String GetH2YAxisTitle(G4int id) const;
00133     virtual G4String GetH2ZAxisTitle(G4int id) const;
00134         
00135     
00136     virtual tools::wcsv::ntuple* GetNtuple() const;
00137         
00138   protected:
00139     virtual G4bool WriteOnAscii(std::ofstream& output);
00140 
00141   private:
00142     
00143     
00144     static G4CsvAnalysisManager* fgInstance;
00145 
00146     
00147     
00148     tools::wcsv::ntuple::column<int>*    GetNtupleIColumn(G4int id) const;
00149     tools::wcsv::ntuple::column<float>*  GetNtupleFColumn(G4int id) const;
00150     tools::wcsv::ntuple::column<double>* GetNtupleDColumn(G4int id) const;
00151     virtual G4bool Reset();
00152     void  ExceptionForHistograms(const G4String& inFunction) const;
00153  
00154     
00155     
00156     std::ofstream* fFile;
00157 
00158     
00159     
00160     
00161     tools::wcsv::ntuple*  fNtuple; 
00162     tools::ntuple_booking*  fNtupleBooking; 
00163     std::map<G4int, tools::wcsv::ntuple::column<int>* >    fNtupleIColumnMap;           
00164     std::map<G4int, tools::wcsv::ntuple::column<float>* >  fNtupleFColumnMap;           
00165     std::map<G4int, tools::wcsv::ntuple::column<double>* > fNtupleDColumnMap;           
00166 };
00167 
00168 #endif
00169