ROOTPWA
diffractiveDissVertex.h
Go to the documentation of this file.
1 
2 //
3 // Copyright 2010
4 //
5 // This file is part of rootpwa
6 //
7 // rootpwa is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // rootpwa is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with rootpwa. If not, see <http://www.gnu.org/licenses/>.
19 //
21 //-------------------------------------------------------------------------
22 // File and Version Information:
23 // $Rev:: $: revision of last commit
24 // $Author:: $: author of last commit
25 // $Date:: $: date of last commit
26 //
27 // Description:
28 // class that describes production vertex in diffractive
29 // dissociation the beam-Reggeon-X vertex has exactly one
30 // incoming beam and one outgoing particle (X), which
31 // unambiguously defines the Reggeon kinematics; if the target
32 // momentum is not specified, a fixed target is assumed; if the
33 // recoil particle is not specified, elastic scattering is
34 // assumed
35 //
36 //
37 // Author List:
38 // Boris Grube TUM (original author)
39 //
40 //
41 //-------------------------------------------------------------------------
42 
43 
44 #ifndef DIFFRACTIVEDISSVERTEX_H
45 #define DIFFRACTIVEDISSVERTEX_H
46 
47 
48 #include <boost/shared_ptr.hpp>
49 
50 #include "productionVertex.h"
51 
52 
53 class TClonesArray;
54 
55 
56 namespace rpwa {
57 
58 
60  typedef boost::shared_ptr<diffractiveDissVertex> diffractiveDissVertexPtr;
61 
62 
64 
65  public:
66 
68  const particlePtr& target,
69  const particlePtr& XParticle,
70  const particlePtr& recoil = particlePtr());
72  virtual ~diffractiveDissVertex();
73 
76  const bool cloneOutParticles = false) const
78 
79  virtual bool addInParticle (const particlePtr&);
80  virtual bool addOutParticle(const particlePtr&);
81 
82  // production specific accessors
83  virtual const TLorentzVector& referenceLzVec() const { return beam()->lzVec(); }
84  virtual const particlePtr& XParticle () const { return outParticles()[0]; }
85 
86  virtual std::complex<double> productionAmp() const;
87 
88  virtual void setXFlavorQN();
89 
90  // diffractive dissociation specific accessors
91  inline const particlePtr& beam () const { return inParticles ()[0]; }
92  inline const particlePtr& target() const { return inParticles ()[1]; }
93  inline const particlePtr& recoil() const { return outParticles()[1]; }
94 
95  virtual bool initKinematicsData(const TClonesArray& prodKinPartNames);
96  virtual bool readKinematicsData(const TClonesArray& prodKinMomenta);
97 
98  virtual bool revertMomenta();
99 
100  virtual std::ostream& print (std::ostream& out) const;
101  virtual std::ostream& dump (std::ostream& out) const;
102  virtual std::ostream& printPointers(std::ostream& out) const;
103 
104  virtual std::string name() const { return "diffractiveDissVertex"; }
105 
106  static bool debug() { return _debug; }
107  static void setDebug(const bool debug = true) { _debug = debug; }
108 
109 
110  protected:
111 
112  virtual diffractiveDissVertex* doClone(const bool cloneInParticles,
113  const bool cloneOutParticles) const;
114 
115 
116  private:
117 
119  TVector3 _beamMomCache;
120  TVector3 _recoilMomCache;
121  TVector3 _targetMomCache;
122 
123  static bool _debug;
124 
125  };
126 
127 
128  inline
131  const particlePtr& target,
132  const particlePtr& XParticle,
133  const particlePtr& recoil = particlePtr())
134  {
135  diffractiveDissVertexPtr vert(new diffractiveDissVertex(beam, target, XParticle, recoil));
136  return vert;
137  }
138 
139 
140  inline
141  std::ostream&
142  operator <<(std::ostream& out,
143  const diffractiveDissVertex& vert)
144  {
145  return vert.print(out);
146  }
147 
148 
149 } // namespace rpwa
150 
151 
152 #endif // DIFFRACTIVEDISSVERTEX_H