From f26a79a94785a526f35bedb6904f595fec85e2f3 Mon Sep 17 00:00:00 2001
From: Whitney Armstrong <warmstrong@anl.gov>
Date: Mon, 4 Feb 2019 11:10:02 -0600
Subject: [PATCH] Added a bunch of  fixes for root IO

	modified:   Podd/Podd_LinkDef.h
	modified:   Podd/THaExtTarCor.cxx
	modified:   Podd/THaExtTarCor.h
	modified:   Podd/THaRunBase.cxx
	modified:   Podd/THaRunBase.h
	modified:   include/podd2/Logger.h
---
 Podd/Podd_LinkDef.h    | 41 ++++++++++++++++++++++++++++++++++++++++-
 Podd/THaExtTarCor.cxx  |  1 +
 Podd/THaExtTarCor.h    |  3 ++-
 Podd/THaRunBase.cxx    |  4 ++--
 Podd/THaRunBase.h      |  4 ++--
 include/podd2/Logger.h | 42 ++++++++++++++++++++++--------------------
 6 files changed, 69 insertions(+), 26 deletions(-)

diff --git a/Podd/Podd_LinkDef.h b/Podd/Podd_LinkDef.h
index ae90010a..a3ab2ab3 100644
--- a/Podd/Podd_LinkDef.h
+++ b/Podd/Podd_LinkDef.h
@@ -15,10 +15,29 @@
 
 #pragma link C++ nestedclass;
 #pragma link C++ nestedtypedef;
-#pragma link C++ namespace Podd;
 
+#pragma link C++ namespace Podd;
 #pragma link C++ namespace podd2;
 
+#pragma link C++ class podd2::EmptyBase+;
+
+#pragma link C++ class podd2::AnalysisLogging<podd2::EmptyBase>+;
+#pragma link C++ class podd2::CutLogging<podd2::EmptyBase>+;
+#pragma link C++ class podd2::ConfigLogging<podd2::EmptyBase>+;
+#pragma link C++ class podd2::DetectorLogging<podd2::EmptyBase>+;
+#pragma link C++ class podd2::HitLogging<podd2::EmptyBase>+;
+#pragma link C++ class podd2::ParameterLogging<podd2::EmptyBase>+;
+#pragma link C++ class podd2::RunLogging<podd2::EmptyBase>+;
+#pragma link C++ class podd2::SpectrometerLogging<podd2::EmptyBase>+;
+
+#pragma link C++ class podd2::RunLogging<TObject>+;
+
+#pragma link C++ class podd2::ParameterLogging<TNamed>+;
+
+//podd2::ParameterLogging<TNamed>
+//
+// 
+
 #pragma link C++ class THaVar+;
 #pragma link C++ class THaVarList+;
 #pragma link C++ class THaNamedList+;
@@ -34,6 +53,7 @@
 #pragma link C++ class THaCodaRun+;
 #pragma link C++ class THaRunParameters+;
 #pragma link C++ class THaApparatus+;
+#pragma link C++ class podd2::SpectrometerLogging<THaApparatus>+;
 #pragma link C++ class THaSpectrometer+;
 #pragma link C++ class Podd::DecData+;
 #pragma link C++ class BdataLoc+;
@@ -43,6 +63,10 @@
 #pragma link C++ class RoclenLoc+;
 #pragma link C++ class BankData+;
 #pragma link C++ class THaAnalysisObject+;
+//#pragma link C++ class podd2::AnalysisLogging<THaAnalysisObject>+;
+#pragma link C++ class podd2::AnalysisLogging<THaAnalysisObject>+;
+#pragma link C++ class podd2::DetectorLogging<THaAnalysisObject>+;
+
 #pragma link C++ class THaDetectorBase+;
 #pragma link C++ class THaPhysicsModule+;
 #pragma link C++ class THaVertexModule+;
@@ -115,6 +139,19 @@
 #pragma link C++ class Podd::SimDecoder+;
 #pragma link C++ class Podd::CodaRawDecoder+;
 
+#pragma link C++ class podd2::AnalysisLogging<THaPostProcess>+;
+
+#pragma link C++ class podd2::ConfigLogging<TObject>+;
+#pragma link C++ class podd2::ConfigLogging<THaVarList>+;
+#pragma link C++ class podd2::ConfigLogging<THaExtTarCor>+;
+#pragma link C++ class podd2::ConfigLogging<THaBeamDet>+;
+#pragma link C++ class podd2::ConfigLogging<THaPhysicsModule>+;
+#pragma link C++ class podd2::ConfigLogging<THaNonTrackingDetector>+;
+#pragma link C++ class podd2::ConfigLogging<THaEvtTypeHandler>+;
+#pragma link C++ class podd2::ConfigLogging<THaSpectrometer>+;
+#pragma link C++ class podd2::ConfigLogging<THaEvtTypeHandler>+;
+#pragma link C++ class podd2::ConfigLogging<THaHelicityDet>+;
+
 
 #ifdef ONLINE_ET
 #pragma link C++ class THaOnlRun+;
@@ -155,4 +192,6 @@
 #pragma link C++ function THaVar::THaVar( const char*, const char*, std::vector<double>&, const Int_t* );
 #pragma link C++ function THaVar::THaVar( const char*, const char*, std::vector<float>&, const Int_t* );
 
+
+
 #endif
diff --git a/Podd/THaExtTarCor.cxx b/Podd/THaExtTarCor.cxx
index fcadde76..8cea78a2 100644
--- a/Podd/THaExtTarCor.cxx
+++ b/Podd/THaExtTarCor.cxx
@@ -49,6 +49,7 @@
 #include "VarDef.h"
 
 //_____________________________________________________________________________
+
 THaExtTarCor::THaExtTarCor( const char* name, const char* description,
 			    const char* spectro, const char* vertex ) :
   THaPhysicsModule(name,description), fThetaCorr(0.0), fDeltaCorr(0.0),
diff --git a/Podd/THaExtTarCor.h b/Podd/THaExtTarCor.h
index 6d3bf671..4f7a2a07 100644
--- a/Podd/THaExtTarCor.h
+++ b/Podd/THaExtTarCor.h
@@ -16,7 +16,8 @@ class THaVertexModule;
 class THaExtTarCor : public THaPhysicsModule, public THaTrackingModule {
   
 public:
-  THaExtTarCor( const char* name, const char* description,
+
+  THaExtTarCor( const char* name = "derp", const char* description = "" ,
 		const char* spectro="", const char* vertex="" );
   virtual ~THaExtTarCor();
   
diff --git a/Podd/THaRunBase.cxx b/Podd/THaRunBase.cxx
index c6e38fca..54d5cf20 100644
--- a/Podd/THaRunBase.cxx
+++ b/Podd/THaRunBase.cxx
@@ -26,7 +26,7 @@ static const char* DEFRUNPARAM = "THaRunParameters";
 
 //_____________________________________________________________________________
 THaRunBase::THaRunBase( const char* description ) :
-  podd2::RunLogging<TNamed>(NOTINIT, description ),
+  TNamed(NOTINIT, description ), podd2::RunLogging<podd2::EmptyBase>(),
   fNumber(-1), fType(0), fDate(UNDEFDATE,0), fNumAnalyzed(0),
   fDBRead(kFALSE), fIsInit(kFALSE), fOpened(kFALSE), fAssumeDate(kFALSE),
   fDataSet(0), fDataRead(0), fDataRequired(kDate), fParam(0),
@@ -39,7 +39,7 @@ THaRunBase::THaRunBase( const char* description ) :
 
 //_____________________________________________________________________________
 THaRunBase::THaRunBase( const THaRunBase& rhs ) :
-  podd2::RunLogging<TNamed>( rhs ), fNumber(rhs.fNumber), fType(rhs.fType),
+  TNamed( rhs ),podd2::RunLogging<podd2::EmptyBase>(), fNumber(rhs.fNumber), fType(rhs.fType),
   fDate(rhs.fDate), fNumAnalyzed(rhs.fNumAnalyzed), fDBRead(rhs.fDBRead),
   fIsInit(rhs.fIsInit), fOpened(kFALSE), fAssumeDate(rhs.fAssumeDate),
   fDataSet(rhs.fDataSet), fDataRead(rhs.fDataRead),
diff --git a/Podd/THaRunBase.h b/Podd/THaRunBase.h
index 1b8345f0..4d853ddb 100644
--- a/Podd/THaRunBase.h
+++ b/Podd/THaRunBase.h
@@ -16,7 +16,7 @@ class THaEvData;
 
 #include "podd2/Logger.h"
 
-class THaRunBase : public podd2::RunLogging<TNamed> {
+class THaRunBase : public TNamed, public podd2::RunLogging<podd2::EmptyBase> {
   
 public:
   THaRunBase( const char* description="" );
@@ -36,7 +36,7 @@ public:
 
   // Main functions
   virtual const UInt_t* GetEvBuffer() const = 0;
-  virtual Int_t        Init();
+  virtual Int_t         Init();
   virtual Int_t        Open() = 0;
   virtual Int_t        ReadEvent() = 0;
   virtual Int_t        SkipToEndOfFile(Int_t skip_max = -1){ return 0;}
diff --git a/include/podd2/Logger.h b/include/podd2/Logger.h
index 96fa7ec5..0750e6b9 100644
--- a/include/podd2/Logger.h
+++ b/include/podd2/Logger.h
@@ -1,6 +1,8 @@
 #ifndef podd2_Logger_hh
 #define podd2_Logger_hh
 
+#include "TObject.h"
+
 #include "spdlog/spdlog.h"
 #include "spdlog/sinks/stdout_color_sinks.h" //support for stdout logging
 #include "spdlog/sinks/basic_file_sink.h" // support for basic file logging
@@ -11,7 +13,10 @@ namespace podd2 {
     std::shared_ptr<spdlog::logger> make_logger(std::string name, std::string file);
   }
 
-  struct EmptyBase {};
+  struct EmptyBase {
+    virtual ~EmptyBase(){}
+    ClassDef(EmptyBase,1)
+  };
 
   template <typename Base>
   class RunLogging : public Base {
@@ -27,6 +32,8 @@ namespace podd2 {
       }
       //_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
     }
+    virtual ~RunLogging(){}
+    ClassDef(RunLogging,1)
   };
 
   template <typename Base>
@@ -40,27 +47,10 @@ namespace podd2 {
       _logger = spdlog::get("config");
       if(!_logger) {
         _logger = log::make_logger("config","logs/config.txt");
-        //std::vector<spdlog::sink_ptr> sinks;
-        //sinks.push_back(std::make_shared<spdlog::sinks::stdout_color_sink_mt>());
-        ////auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
-        //sinks[0]->set_level(spdlog::level::info);
-        ////console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");
-        //sinks[0]->set_pattern("[%t] [%n] %^[%l]%$ %v");
-
-        //sinks.push_back(
-        //    std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/multisink.txt", true));
-        ////auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/multisink.txt", true);
-        //sinks[1]->set_level(spdlog::level::trace);
-
-        //_logger = std::make_shared<spdlog::logger>("config", std::begin(sinks), std::end(sinks));
-        //_logger->set_level(spdlog::level::debug);
-        //_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
-        //_logger->warn("this should appear in both console and file");
-        //_logger->info("this message should not appear in the console, only in the file");
-        ////_logger = spdlog::stdout_color_mt("config");
-        //spdlog::register_logger(_logger);
       }
     }
+    virtual ~ConfigLogging(){}
+    ClassDef(ConfigLogging,1)
   };
 
   template <typename Base>
@@ -77,6 +67,8 @@ namespace podd2 {
       }
       //_param_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
     }
+    virtual ~ParameterLogging(){}
+    ClassDef(ParameterLogging,1)
   };
 
   template <typename Base>
@@ -93,6 +85,8 @@ namespace podd2 {
       }
       //_ana_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
     }
+    virtual ~AnalysisLogging(){}
+    ClassDef(AnalysisLogging,1)
   };
 
   template <typename Base>
@@ -109,6 +103,8 @@ namespace podd2 {
       }
       //_hit_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
     }
+    virtual ~HitLogging(){}
+    ClassDef(HitLogging,1)
   };
 
   template <typename Base>
@@ -125,6 +121,8 @@ namespace podd2 {
       }
       //_cut_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
     }
+    virtual ~CutLogging(){}
+    ClassDef(CutLogging,1)
   };
 
 
@@ -142,6 +140,8 @@ namespace podd2 {
       }
       //_det_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
     }
+    virtual ~DetectorLogging(){}
+    ClassDef(DetectorLogging,1)
   };
 
   template <typename Base>
@@ -158,6 +158,8 @@ namespace podd2 {
       }
       //_spec_logger->set_pattern("[%t] [%n] %^[%l]%$ %v");
     }
+    virtual ~SpectrometerLogging(){}
+    ClassDef(SpectrometerLogging,1)
   };
 
 
-- 
GitLab