Herwig++
2.7.0
|
00001 // -*- C++ -*- 00002 // 00003 // QTildeReconstructor.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator 00004 // Copyright (C) 2002-2011 The Herwig Collaboration 00005 // 00006 // Herwig++ is licenced under version 2 of the GPL, see COPYING for details. 00007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 00008 // 00009 #ifndef HERWIG_QTildeReconstructor_H 00010 #define HERWIG_QTildeReconstructor_H 00011 // 00012 // This is the declaration of the QTildeReconstructor class. 00013 // 00014 00015 #include "Herwig++/Shower/Base/KinematicsReconstructor.h" 00016 00017 namespace Herwig { 00018 00019 using namespace ThePEG; 00020 00025 struct JetKinStruct { 00026 00030 tShowerParticlePtr parent; 00031 00035 Lorentz5Momentum p; 00036 00040 Lorentz5Momentum q; 00041 }; 00042 00046 typedef vector<JetKinStruct> JetKinVect; 00047 00073 class QTildeReconstructor: public KinematicsReconstructor { 00074 00075 public: 00076 00080 QTildeReconstructor() : _reconopt(0), _initialBoost(0), _minQ(MeV) {}; 00081 00094 virtual bool reconstructHardJets(ShowerTreePtr hard, 00095 const map<tShowerProgenitorPtr, 00096 pair<Energy,double> > & pt) const; 00097 00106 virtual bool reconstructDecayJets(ShowerTreePtr decay) const; 00108 00122 virtual bool deconstructDecayJets(HardTreePtr, cEvolverPtr, 00123 ShowerInteraction::Type) const; 00124 00130 virtual bool deconstructHardJets(HardTreePtr, cEvolverPtr, 00131 ShowerInteraction::Type) const; 00133 00134 public: 00135 00142 void persistentOutput(PersistentOStream & os) const; 00143 00149 void persistentInput(PersistentIStream & is, int version); 00151 00158 static void Init(); 00159 00160 protected: 00161 00179 virtual bool reconstructTimeLikeJet(const tShowerParticlePtr particleJetParent, 00180 unsigned int iopt) const; 00181 00190 bool reconstructSpaceLikeJet(const tShowerParticlePtr particleJetParent) const; 00191 00196 bool reconstructDecayJet(const tShowerParticlePtr particleJetParent) const; 00198 00208 void reconstructInitialFinalSystem(vector<ShowerProgenitorPtr>) const; 00209 00214 void reconstructFinalStateSystem(bool applyBoost, 00215 const LorentzRotation & toRest, 00216 const LorentzRotation & fromRest, 00217 vector<ShowerProgenitorPtr>) const; 00218 00222 void reconstructGeneralSystem(vector<ShowerProgenitorPtr> & ShowerHardJets) const; 00223 00228 void reconstructInitialInitialSystem(bool & applyBoost, 00229 LorentzRotation & toRest, 00230 LorentzRotation & fromRest, 00231 vector<ShowerProgenitorPtr>) const; 00233 00243 void deconstructFinalStateSystem(const LorentzRotation & toRest, 00244 const LorentzRotation & fromRest, 00245 HardTreePtr, 00246 vector<HardBranchingPtr>, 00247 cEvolverPtr, 00248 ShowerInteraction::Type) const; 00249 00254 void deconstructInitialInitialSystem(bool & applyBoost, 00255 LorentzRotation & toRest, 00256 LorentzRotation & fromRest, 00257 HardTreePtr, 00258 vector<HardBranchingPtr>, 00259 ShowerInteraction::Type ) const; 00260 00265 void deconstructInitialFinalSystem(HardTreePtr, 00266 vector<HardBranchingPtr>, 00267 cEvolverPtr, 00268 ShowerInteraction::Type ) const; 00269 00270 bool deconstructGeneralSystem(HardTreePtr, cEvolverPtr, 00271 ShowerInteraction::Type) const; 00273 00282 LorentzRotation solveBoost(const double k, 00283 const Lorentz5Momentum & newq, 00284 const Lorentz5Momentum & oldp) const; 00285 00289 LorentzRotation solveBoost(const Lorentz5Momentum & newq, 00290 const Lorentz5Momentum & oldq) const; 00291 00295 LorentzRotation solveBoostZ(const Lorentz5Momentum & newq, 00296 const Lorentz5Momentum & oldq) const; 00297 00304 void boostChain(tPPtr p, const LorentzRotation & bv, tPPtr & parent) const; 00305 00314 Boost solveBoostBeta( const double k, const Lorentz5Momentum & newq, 00315 const Lorentz5Momentum & oldp); 00316 00321 double getBeta(const double E, const double q, 00322 const double Ep, const double qp) const 00323 {return (q*E-qp*Ep)/(sqr(qp)+sqr(E));} 00325 00341 double solveKfactor( const Energy & root_s, const JetKinVect & jets ) const; 00342 00357 bool solveDecayKFactor(Energy mb, 00358 const Lorentz5Momentum & n, 00359 const Lorentz5Momentum & pjet, 00360 const JetKinVect & jetKinematics, 00361 ShowerParticlePtr partner, 00362 Lorentz5Momentum ppartner[2], 00363 double & k1, 00364 double & k2, 00365 Lorentz5Momentum & qt) const; 00366 00373 double inverseRescalingFactor(vector<Lorentz5Momentum> pout, 00374 vector<Energy> mon,Energy roots) const; 00375 00386 bool inverseDecayRescalingFactor(vector<Lorentz5Momentum> pout, 00387 vector<Energy> mon,Energy roots, 00388 Lorentz5Momentum ppartner, Energy mbar, 00389 double & k1, double & k2) const; 00390 00397 Energy momConsEq(const double & k, const Energy & root_s, 00398 const JetKinVect & jets) const; 00400 00405 vector<unsigned int> findPartners(unsigned int ,vector<ShowerProgenitorPtr>) const; 00406 00411 void findPartners(HardBranchingPtr branch,set<HardBranchingPtr> & done, 00412 const set<HardBranchingPtr> & branchings, 00413 vector<HardBranchingPtr> & jets) const; 00414 00418 bool addIntrinsicPt(vector<ShowerProgenitorPtr>) const; 00419 00428 void deepTransform(PPtr particle,const LorentzRotation & r, 00429 bool match=true,PPtr original=PPtr()) const; 00430 00431 protected: 00432 00439 virtual IBPtr clone() const {return new_ptr(*this);} 00440 00445 virtual IBPtr fullclone() const {return new_ptr(*this);} 00447 00448 protected: 00449 00457 virtual void doinit(); 00459 00460 private: 00461 00466 QTildeReconstructor & operator=(const QTildeReconstructor &); 00467 00468 private: 00469 00473 unsigned int _reconopt; 00474 00478 unsigned int _initialBoost; 00479 00484 Energy _minQ; 00485 00489 mutable tShowerParticlePtr _progenitor; 00490 00494 mutable map<tShowerProgenitorPtr,pair<Energy,double> > _intrinsic; 00495 00499 mutable tShowerTreePtr _currentTree; 00500 00505 PDVector _noRescaleVector; 00506 00511 set<cPDPtr> _noRescale; 00512 }; 00513 00514 } 00515 00516 #endif /* HERWIG_QTildeReconstructor_H */