00001 00012 #ifdef _MSC_VER 00013 // nonstandard extension used 'extern' before... 00014 # pragma warning(disable:4231) 00015 00016 // needs to have dll-interface used by client 00017 # pragma warning(disable:4251) 00018 00019 // non dll-interface struct 00020 # pragma warning(disable:4275) 00021 00022 // 'int' : forcing value to bool 'true' or 'false' (performance warning) 00023 # pragma warning(disable:4800) 00024 #endif 00025 00026 #include "PyNTupleController.h" 00027 00028 #include "PyApp.h" 00029 #include "PyDataSource.h" 00030 #include "PyNTuple.h" 00031 00032 #include "datasrcs/DataSourceController.h" 00033 #include "datasrcs/NTupleController.h" 00034 00035 #include <stdexcept> 00036 00037 using namespace hippodraw; 00038 00039 NTupleController * PyNTupleController::m_instance = 0; 00040 PyNTupleController * PyNTupleController::s_instance = 0; 00041 00042 00043 PyNTupleController:: 00044 PyNTupleController() 00045 { 00046 } 00047 00048 PyNTupleController * 00049 PyNTupleController:: 00050 instance () 00051 { 00052 if ( s_instance == 0 ) { 00053 s_instance = new PyNTupleController (); 00054 m_instance = NTupleController::instance (); 00055 } 00056 00057 return s_instance; 00058 } 00059 00060 NTuple * 00061 PyNTupleController:: 00062 createNTuple ( ) 00063 { 00064 PyNTuple * ntuple = new PyNTuple (); 00065 DataSourceController * controller = DataSourceController::instance (); 00066 controller -> registerNTuple ( ntuple ); 00067 00068 return ntuple; 00069 } 00070 00071 DataSource * 00072 PyNTupleController:: 00073 createNTuple ( const std::string & filename ) 00074 { 00075 PyApp::lock (); 00076 unsigned int columns = 0; 00077 PyNTuple * ntuple = new PyNTuple ( columns ); 00078 00079 try { 00080 m_instance -> fillFromFile ( filename, ntuple ); 00081 } 00082 catch ( const std::runtime_error & e ) { 00083 PyApp::unlock (); 00084 delete ntuple; 00085 throw e; 00086 } 00087 PyApp::unlock (); 00088 00089 return ntuple; 00090 } 00091 00092 CircularBuffer * 00093 PyNTupleController:: 00094 createCircularBuffer ( unsigned int columns ) 00095 { 00096 return m_instance -> createCircularBuffer ( columns ); 00097 } 00098 00099 PyDataSource * 00100 PyNTupleController:: 00101 createDataArray ( const std::string & filename ) 00102 { 00103 #ifdef HAVE_NUMARRAY 00104 DataSource * tuple = createNTuple ( filename ); 00105 PyDataSource * ds = new PyDataSource ( "NTuple", tuple ); 00106 00107 return ds; 00108 #else 00109 std::runtime_error e ( "HippoDraw was not built with " 00110 "numeric Python support" ); 00111 throw e; 00112 #endif 00113 } 00114 00115 DataSource * 00116 PyNTupleController:: 00117 findDataSource ( const std::string & name ) const 00118 { 00119 DataSourceController * dsc = DataSourceController::instance (); 00120 00121 return dsc -> findDataSource ( name ); 00122 } 00123 00124 std::string 00125 PyNTupleController:: 00126 registerNTuple ( DataSource * source ) 00127 { 00128 PyApp::lock (); 00129 DataSourceController * dsc = DataSourceController::instance (); 00130 00131 std::string name = dsc -> registerNTuple ( source ); 00132 PyApp::unlock (); 00133 00134 return name; 00135 } 00136 00137 void 00138 PyNTupleController:: 00139 registerNTuple ( const std::string & name, DataSource * source ) 00140 { 00141 DataSourceController * dsc = DataSourceController::instance (); 00142 00143 dsc -> registerNTuple ( name, source ); 00144 } 00145 00146 int 00147 PyNTupleController:: 00148 writeNTupleToFile ( DataSource * source, 00149 const std::string & filename ) 00150 { 00151 return m_instance -> writeNTupleToFile ( source, filename ); 00152 } 00153 00154 void 00155 PyNTupleController:: 00156 changeName ( DataSource * source, const std::string & new_name ) 00157 { 00158 source -> setName ( new_name ); 00159 }