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
00031 #ifndef __PSEUDOJET_PLUS_INFO_HH__
00032 #define __PSEUDOJET_PLUS_INFO_HH__
00033
00034 #include "fastjet/internal/numconsts.hh"
00035 #include "fastjet/PseudoJet.hh"
00036 #include <vector>
00037
00038 FASTJET_BEGIN_NAMESPACE
00039
00040
00055
00056 template<typename TExtraInfo>
00057 class PseudoJetPlusInfo : public PseudoJet{
00058 public:
00062 PseudoJetPlusInfo(const PseudoJet &pj, const TExtraInfo &ei) : PseudoJet(pj){
00063 const ExtraInfo * extra_info_ptr = extra_info();
00064 if (!extra_info_ptr) {
00065 extra_info_shared().reset(new TExtraInfo(ei));
00066 } else if (dynamic_cast<const TExtraInfo*>(extra_info_ptr)) {
00067
00068
00069 } else {
00070
00071 throw ("invalid extra_info for initialising PseudoJetPlusInfo");
00072 }
00073 }
00074
00079 PseudoJetPlusInfo(const PseudoJet &pj) : PseudoJet(pj){
00080 const ExtraInfo * extra_info_ptr = pj.extra_info();
00081 if (extra_info_ptr) {
00082 if (dynamic_cast<const TExtraInfo*>(extra_info_ptr)) {
00083 extra_info_shared().reset(pj.extra_info_shared());
00084 } else {
00085 throw("invalid extra_info in copy constructor for PseudoJetPlusInfo");
00086 }
00087 }
00088 }
00089
00090
00092 const TExtraInfo* extra_info() const{
00093 if (!extra_info_shared()()) return NULL;
00094 return dynamic_cast<TExtraInfo*>(extra_info_shared().get());
00095 }
00096 };
00097
00098
00103 template<typename T, typename U>
00104 std::vector<T> convert_vector_to(const std::vector<U> & in){
00105 std::vector<T> res;
00106 copy(in.begin(), in.end(), back_inserter(res));
00107 return res;
00108 }
00109
00110
00111
00112
00113 FASTJET_END_NAMESPACE
00114
00115 #endif // __PSEUDOJET_PLUS_INFO_HH__