herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
FastJetFinder.h
00001 // -*- C++ -*-
00002 
00003 // (C) 2007-2009 Simon Plaetzer -- sp@particle.uni-karlsruhe.de
00004 
00005 #ifndef Analysis2_FastJetFinder_H
00006 #define Analysis2_FastJetFinder_H
00007 //
00008 // This is the declaration of the FastJetFinder class.
00009 //
00010 
00011 #include "JetFinder.h"
00012 #include "FastJetFinder.fh"
00013 
00014 #include "fastjet/JetDefinition.hh"
00015 #include "fastjet/PseudoJet.hh"
00016 #include "fastjet/ClusterSequence.hh"
00017 
00018 #include <memory>
00019 
00020 namespace Analysis2 {
00021 
00022 using namespace ThePEG;
00023 
00035 class FastJetFinder: public JetFinder {
00036 
00037 public:
00038 
00044   inline FastJetFinder();
00045 
00049   inline FastJetFinder (const FastJetFinder&);
00050 
00054   virtual ~FastJetFinder();
00056 
00057 public:
00058 
00062   virtual void use (const vector<Lorentz5Momentum>&,bool);
00063 
00066 
00070   virtual inline void findJets ();
00071 
00075   virtual inline  void findJetsN (unsigned int nJets);
00076 
00080   virtual inline void findJetsD ();
00081 
00085   virtual inline void findJetsY (double y = -1.);
00086 
00090   virtual inline Energy getDMerge (unsigned int nJets) const;
00091 
00095   virtual inline double getYMerge (unsigned int nJets) const;
00096 
00098 
00099 public:
00100 
00103 
00107   inline int jetFinder () const;
00108 
00112   inline int recombinationScheme () const;
00113 
00117   inline int strategy () const;
00118 
00122   inline const fastjet::JetDefinition& jetDefintion () const;
00123 
00125 
00126 protected:
00127 
00131   void convert ();
00132 
00136   void convert (const vector<fastjet::PseudoJet>&);
00137 
00141   void cluster ();
00142 
00147   inline const vector<fastjet::PseudoJet>& lastPseudojets () const;
00148 
00152   inline const fastjet::ClusterSequence& lastClusterSequence () const;
00153 
00154 public:
00155 
00162   void persistentOutput(PersistentOStream & os) const;
00163 
00169   void persistentInput(PersistentIStream & is, int version);
00171 
00178   static void Init();
00179 
00180 protected:
00181 
00188   inline virtual IBPtr clone() const;
00189 
00194   inline virtual IBPtr fullclone() const;
00196 
00197 
00198 // If needed, insert declarations of virtual function defined in the
00199 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
00200 
00201 
00202 protected:
00203 
00206 
00211   inline virtual void doinitrun();
00212 
00217   inline virtual void dofinish();
00218 
00220 
00221 private:
00222 
00226   int _jetFinder;
00227 
00231   int _strategy;
00232 
00236   int _recombinationScheme;
00237 
00241   vector<fastjet::PseudoJet> _lastPseudojets;
00242 
00246   std::auto_ptr<fastjet::ClusterSequence> _lastClusterSequence;
00247 
00251   fastjet::JetDefinition _jetDefinition;
00252 
00257   Energy2 _E2vis;
00258 
00263   static ClassDescription<FastJetFinder> initFastJetFinder;
00264 
00269   FastJetFinder & operator=(const FastJetFinder &);
00270 
00271 };
00272 
00273 }
00274 
00275 #include "ThePEG/Utilities/ClassTraits.h"
00276 
00277 namespace ThePEG {
00278 
00283 template <>
00284 struct BaseClassTrait<Analysis2::FastJetFinder,1> {
00286   typedef Analysis2::JetFinder NthBase;
00287 };
00288 
00291 template <>
00292 struct ClassTraits<Analysis2::FastJetFinder>
00293   : public ClassTraitsBase<Analysis2::FastJetFinder> {
00295   static string className() { return "Analysis2::FastJetFinder"; }
00303   static string library() { return "FastJetFinder.so Analysis2.so"; }
00304 };
00305 
00308 }
00309 
00310 #include "FastJetFinder.icc"
00311 #ifndef ThePEG_TEMPLATES_IN_CC_FILE
00312 // #include "FastJetFinder.tcc"
00313 #endif
00314 
00315 #endif /* Analysis2_FastJetFinder_H */