1 #ifndef READERUPROOTTREE_H 2 #define READERUPROOTTREE_H 3 #include "HepMC3/GenEvent.h" 4 #include "HepMC3/FourVector.h" 5 #include "HepMC3/Print.h" 6 #include "HepMC3/Reader.h" 7 #include "HepMC3/Data/GenEventData.h" 8 #include "HepMC3/Data/GenRunInfoData.h" 9 #include <iostream> 10 #include "HepMC3/Units.h" 11 #include "HepMC3/Version.h" 12 #include "Python.h" 13 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION 14 #include "numpy/arrayobject.h" 15 16 namespace HepMC3 17 { 18 /** @brief ReaderuprootTree */ 19 class ReaderuprootTree : public Reader 20 { 21 public: 22 /** @brief Constructor with tree and branch names*/ 23 ReaderuprootTree(const std::string &filename,const std::string &treename="hepmc3_tree",const std::string &branchname="hepmc3_event"); 24 25 /// @brief skip events 26 bool skip(const int) override; 27 28 /** @brief Read event from file 29 * 30 * @param[out] evt Contains parsed event 31 */ 32 bool read_event(GenEvent &evt) override; 33 34 /** @brief Close file */ 35 void close() override; 36 37 /** @brief Get file error state */ 38 bool failed() override; 39 40 ~ReaderuprootTree(); 41 private: 42 /** @brief init routine */ 43 bool init(const std::string &filename); 44 45 int m_events_count; //!< Events count. Needed to read the tree 46 GenEventData* m_event_data; //!< Pointer to structure that holds event data 47 GenRunInfoData* m_run_info_data; //!< Pointer to structure that holds run info data 48 std::string m_tree_name; //!< Name of TTree 49 std::string m_branch_name; //!< Name of TBranch in TTree 50 51 //PyThreadState* m_thread_state; 52 PyObject* m_file; //!< Python file handler 53 54 PyObject* m_tree; //!< Python tree handler. 55 56 PyObject* m_genruninfo; //!< Python runInfo handler. 57 58 PyObject* m_access_function; //!< Python access function for arrays 59 60 PyObject* m_python_module; //!< Python module 61 62 long int m_tree_getEntries; //!< number of processed events 63 64 PyObject* get_function(PyObject*, const std::string& ); //!< Get python functions 65 66 PyObject* init_python_module(const std::string&); //!< Init python module 67 68 template <class T> std::vector<T> get_vector(PyObject * file_name,const std::string& array_name,std::string desired_type=""); //!< Get arrays 69 }; 70 71 } 72 #endif 73