LCIO  "2.7.4"
 All Classes Namespaces Functions Variables Typedefs Friends Pages
Operators.h
1 #ifndef LCIO_OPERATORS_H
2 #define LCIO_OPERATORS_H 1
3 
5 // Define operators for convenient printing of LCIO objects.
6 //
7 //
8 // @author J Engels, H. Hoelbe
9 // @version $Id: Operators.h,v 1.8.2.1 2011-03-04 14:09:07 engels Exp $
11 
12 
13 #include "EVENT/ReconstructedParticle.h"
14 #include "EVENT/SimCalorimeterHit.h"
15 #include "EVENT/MCParticle.h"
16 #include "EVENT/SimTrackerHit.h"
17 #include "EVENT/TrackerHit.h"
18 #include "EVENT/TrackerHitPlane.h"
19 #include "EVENT/TrackerHitZCylinder.h"
20 #include "EVENT/Track.h"
21 #include "EVENT/TrackState.h"
22 #include "EVENT/Cluster.h"
23 #include "EVENT/CalorimeterHit.h"
24 #include "EVENT/LCFlag.h"
25 #include "EVENT/LCIntVec.h"
26 #include "EVENT/LCRunHeader.h"
27 #include "EVENT/RawCalorimeterHit.h"
28 //#include "EVENT/TPCHit.h"
29 #include "EVENT/TrackerPulse.h"
30 #include "EVENT/LCFloatVec.h"
31 #include "EVENT/LCObject.h"
32 #include "EVENT/TrackerRawData.h"
33 #include "EVENT/LCCollection.h"
34 #include "EVENT/LCGenericObject.h"
35 #include "EVENT/LCParameters.h"
36 #include "EVENT/TrackerData.h"
37 #include "EVENT/LCEvent.h"
38 #include "EVENT/LCIO.h"
39 #include "EVENT/LCRelation.h"
40 #include "EVENT/ParticleID.h"
41 #include "EVENT/Vertex.h"
42 //#include "EVENT/LCStrVec.h"
43 
44 
45 #include <iostream>
46 #include <iomanip>
47 #include <string>
48 #include <sstream>
49 
50 
51 namespace UTIL{
52 
53  //template to enable the use of the operator << for a "one-line" output of an object.
54  //since there are two ostream& << operators for sending an object to the output stream this
55  //template works like a "wrapper class" so that the correct operator can be triggered for the
56  //respective detailed/short output
57 /*
58  template <class T> struct lcio_short{
59  const T* obj;
60  lcio_short(const T* t) : obj(p) {}
61  };
62 */
63  template <class T>
64  class lcio_short{
65  public:
66  const T* obj;
67  const EVENT::LCCollection* col;
68  lcio_short(const T* t, const EVENT::LCCollection* b=NULL) : obj(t), col(b) {}
69  //lcio_short(const T* t) : obj(t) {col = NULL;}
70  };
71 
72 
73  //template to enable a "one-line" output
74  template <class T> lcio_short<T> lcshort( const T* t, const EVENT::LCCollection* b=NULL){ return lcio_short<T>(t,b); }
75 
80  const std::string& header(const EVENT::Vertex *);
81  const std::string& tail(const EVENT::Vertex *);
82  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::Vertex>& sV);
83  std::ostream& operator<<( std::ostream& out, const EVENT::Vertex &v);
84 
85 
86 //hauke 2010 (start)
87  const std::string& header( const EVENT::MCParticle *);
88  const std::string& tail( const EVENT::MCParticle *);
89  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::MCParticle>& sV);
90  std::ostream& operator<<( std::ostream& out, const EVENT::MCParticle &);
91 
92 
93  const std::string& header( const EVENT::TrackerHit *);
94  const std::string& tail( const EVENT::TrackerHit *);
95  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TrackerHit>& sV);
96  std::ostream& operator<<( std::ostream& out, const EVENT::TrackerHit &);
97 
98  const std::string& header( const EVENT::TrackerHitPlane *);
99  const std::string& tail( const EVENT::TrackerHitPlane *);
100  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TrackerHitPlane>& sV);
101  std::ostream& operator<<( std::ostream& out, const EVENT::TrackerHitPlane &);
102 
103  const std::string& header( const EVENT::TrackerHitZCylinder *);
104  const std::string& tail( const EVENT::TrackerHitZCylinder *);
105  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TrackerHitZCylinder>& sV);
106  std::ostream& operator<<( std::ostream& out, const EVENT::TrackerHitZCylinder &);
107 
108  const std::string& header( const EVENT::SimTrackerHit *);
109  const std::string& tail( const EVENT::SimTrackerHit *);
110  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::SimTrackerHit>& sV);
111  std::ostream& operator<<( std::ostream& out, const EVENT::SimTrackerHit &);
112 
113  const std::string& header( const EVENT::CalorimeterHit *);
114  const std::string& tail( const EVENT::CalorimeterHit *);
115  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::CalorimeterHit>& sV);
116  std::ostream& operator<<( std::ostream& out, const EVENT::CalorimeterHit &);
117 
118  const std::string& header( const EVENT::SimCalorimeterHit *);
119  const std::string& tail( const EVENT::SimCalorimeterHit *);
120  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::SimCalorimeterHit>& sV);
121  std::ostream& operator<<( std::ostream& out, const EVENT::SimCalorimeterHit &);
122 
123  const std::string& header( const EVENT::ReconstructedParticle *);
124  const std::string& tail( const EVENT::ReconstructedParticle *);
125  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::ReconstructedParticle> & );
126  std::ostream& operator<<( std::ostream& out, const EVENT::ReconstructedParticle &);
127 
128  const std::string& header( const EVENT::Track *);
129  const std::string& tail( const EVENT::Track *);
130  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::Track> &);
131  std::ostream& operator<<( std::ostream& out, const EVENT::Track &);
132 
133  const std::string& header( const EVENT::TrackState *);
134  const std::string& tail( const EVENT::TrackState *);
135  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TrackState> &);
136  std::ostream& operator<<( std::ostream& out, const EVENT::TrackState &);
137 
138  const std::string& header( const EVENT::Cluster *);
139  const std::string& tail( const EVENT::Cluster *);
140  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::Cluster> &);
141  std::ostream& operator<<( std::ostream& out, const EVENT::Cluster &);
142 
143  const std::string& header( const EVENT::LCRelation *);
144  const std::string& tail( const EVENT::LCRelation *);
145  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCRelation> &);
146  std::ostream& operator<<( std::ostream& out, const EVENT::LCRelation &);
147 
148  const std::string& header( const EVENT::LCFloatVec *);
149  const std::string& tail( const EVENT::LCFloatVec *);
150  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCFloatVec> &);
151  std::ostream& operator<<( std::ostream& out, const EVENT::LCFloatVec &);
152 
153  template <class T>
154  const std::string & header(){return header((T*)(0)); }
155  template <class T>
156  const std::string & tail(){return tail((T)(0)); }
157 
158 
159  template <class T>
160  class LCIO_LONG{
161  public:
162  //lcio_long(const T& o, EVENT::LCCollection* c);
163  LCIO_LONG(const T& o, const EVENT::LCCollection* c){ obj=&o; col=c;};
164  const T *object(void) const {return(obj);};
165  const EVENT::LCCollection *collection(void) const {return(col);};
166  private:
167  const T *obj;
168  const EVENT::LCCollection *col;
169  };
170 
171  //test:
172  template <class T>
173  LCIO_LONG<T> lcio_long(const T& o, const EVENT::LCCollection* c){return(LCIO_LONG<T>(o,c));}
174 
175 
176  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::CalorimeterHit> l);
177  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::Cluster> l);
178  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::Track> l);
179  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::TrackState> l);
180  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::ReconstructedParticle> ll);
181  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::SimCalorimeterHit> ll);
182  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::TrackerHit> ll);
183  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::TrackerHitPlane> ll);
184  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::TrackerHitZCylinder> ll);
185  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::SimTrackerHit> ll);
186  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::MCParticle> ll);
187  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::Vertex> ll);
188  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::LCRelation> ll);
189  std::ostream& operator<<( std::ostream& out, const LCIO_LONG<EVENT::LCFloatVec> ll);
190 
191 
192  const std::string& header( const EVENT::LCCollection *);
193  const std::string& tail( const EVENT::LCCollection *);
194  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCCollection> &);
195  std::ostream& operator<<( std::ostream& out, const EVENT::LCCollection &);
196 
197  const std::string& header( const EVENT::LCEvent *);
198  const std::string& tail( const EVENT::LCEvent *);
199  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCEvent> &);
200  std::ostream& operator<<( std::ostream& out, const EVENT::LCEvent &);
201 
202  const std::string& header( const EVENT::LCFlag *);
203  const std::string& tail( const EVENT::LCFlag *);
204  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCFlag> &);
205  std::ostream& operator<<( std::ostream& out, const EVENT::LCFlag &);
206 
207  const std::string& header( const EVENT::LCGenericObject *, const EVENT::LCCollection *v = NULL);
208  const std::string& tail( const EVENT::LCGenericObject *);
209  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCGenericObject> &);
210  std::ostream& operator<<( std::ostream& out, const EVENT::LCGenericObject &);
211 
212  const std::string& header( const EVENT::LCIntVec *);
213  const std::string& tail( const EVENT::LCIntVec *);
214  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCIntVec> &);
215  std::ostream& operator<<( std::ostream& out, const EVENT::LCIntVec &);
216 
217  const std::string& header( const EVENT::LCObject *);
218  const std::string& tail( const EVENT::LCObject *);
219  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCObject> &);
220  std::ostream& operator<<( std::ostream& out, const EVENT::LCObject &);
221 
222  const std::string& header( const EVENT::LCParameters *);
223  const std::string& tail( const EVENT::LCParameters *);
224  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCParameters> &);
225  std::ostream& operator<<( std::ostream& out, const EVENT::LCParameters &);
226 
227  const std::string& header( const EVENT::LCRunHeader *);
228  const std::string& tail( const EVENT::LCRunHeader *);
229  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCRunHeader> &);
230  std::ostream& operator<<( std::ostream& out, const EVENT::LCRunHeader &);
231 
232 /*
233  const std::string& header( const EVENT::LCStrVec &);
234  const std::string& tail( const EVENT::LCStrVec &);
235  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCStrVec> &);
236  std::ostream& operator<<( std::ostream& out, const EVENT::LCStrVec &);
237 */
238 
239  const std::string& header( const EVENT::ParticleID *);
240  const std::string& tail( const EVENT::ParticleID *);
241  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::ParticleID> &);
242  std::ostream& operator<<( std::ostream& out, const EVENT::ParticleID &);
243 
244  const std::string& header( const EVENT::RawCalorimeterHit *);
245  const std::string& tail( const EVENT::RawCalorimeterHit *);
246  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::RawCalorimeterHit> &);
247  std::ostream& operator<<( std::ostream& out, const EVENT::RawCalorimeterHit &);
248 
249 // const std::string& header( const EVENT::TPCHit &);
250 // const std::string& tail( const EVENT::TPCHit &);
251 // std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TPCHit> &);
252 // std::ostream& operator<<( std::ostream& out, const EVENT::TPCHit &);
253 
254  const std::string& header( const EVENT::TrackerData *);
255  const std::string& tail( const EVENT::TrackerData *);
256  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TrackerData> &);
257  std::ostream& operator<<( std::ostream& out, const EVENT::TrackerData &);
258 
259  const std::string& header( const EVENT::TrackerPulse *);
260  const std::string& tail( const EVENT::TrackerPulse *);
261  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TrackerPulse> &);
262  std::ostream& operator<<( std::ostream& out, const EVENT::TrackerPulse &);
263 
264  const std::string& header( const EVENT::TrackerRawData *);
265  const std::string& tail( const EVENT::TrackerRawData *);
266  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::TrackerRawData> &);
267  std::ostream& operator<<( std::ostream& out, const EVENT::TrackerRawData &);
268 
269  const std::string& header( const EVENT::LCIO *);
270  const std::string& tail( const EVENT::LCIO *);
271  std::ostream& operator<<( std::ostream& out, const UTIL::lcio_short<EVENT::LCIO> &);
272  std::ostream& operator<<( std::ostream& out, const EVENT::LCIO &);
273 
274 
275 
276 /*
277  template <class T>
278  std::ostream& operator<<( std::ostream& out, const T obj) {
279  out << lcio_long<T>( obj , NULL ) ;
280  return out;
281  }
282 */
283 
284 
285  template <class T>
286  std::string toString(const T* obj) {
287  std::stringstream ss ;
288  ss << *obj ;
289  return ss.str() ;
290  }
291 
292 }//namespace
293 
294 #endif /* ifndef LCIO_OPERATORS_H */
The generic object that is held in an LCCollection.
Definition: LCObject.h:30
const std::string & header(const EVENT::Vertex *)
operator for detailed output of a vertex object (e.g.
Definition: Operators.cc:2966
A generic tracker hit to be used by pattern recognition.
Definition: TrackerHit.h:26
The generic simulated calorimeter hit.
Definition: SimCalorimeterHit.h:23
std::ostream & operator<<(std::ostream &os, const BitField64 &b)
Operator for dumping BitField64 to streams.
Definition: BitField64.cc:251
Definition: Operators.h:160
The Vertex class for LCIO.
Definition: Vertex.h:34
Interface for the run header.
Definition: LCRunHeader.h:23
Definition: Operators.h:64
A tracker hit on a planar surface - the hit is stored as: x,y,z, u(theta, phi), v(theta,phi), du, dv where (x,y,z) is the position in global cartesian coordinates, u,v are the the meassurement directions (unit vectors, spanning the plane) and du,dv are the measurement errors along these directions.
Definition: TrackerHitPlane.h:30
A generic simulated tracker hit.
Definition: SimTrackerHit.h:23
The LCIO TrackState class.
Definition: TrackState.h:26
TrackerData contains the corrected (calibrated) raw tracker data.
Definition: TrackerData.h:23
Global constants used in LCIO.
Definition: LCIO.h:28
Tracker pulses as computed from TrackerData objects or as directly measured by a specific subdetector...
Definition: TrackerPulse.h:26
Simple interface to store generic named parameters of type int, float and string. ...
Definition: LCParameters.h:28
The LCIO cluster.
Definition: Cluster.h:30
The LCIO track class.
Definition: Track.h:33
Int vector used for user extensions.
Definition: pre-generated/EVENT/LCIntVec.h:24
Float vector used for user extensions.
Definition: pre-generated/EVENT/LCFloatVec.h:25
Simple interface to store generic user data.
Definition: LCGenericObject.h:27
The LCIO reconstructedParticle.
Definition: ReconstructedParticle.h:35
The LCIO Monte Carlo particle.
Definition: MCParticle.h:27
Persistent interface for LCIO ParticleIDs.
Definition: ParticleID.h:28
A single weighted relationship between two LCObjects.
Definition: LCRelation.h:29
The generic calorimeter hit for real data (or simulation thereof).
Definition: RawCalorimeterHit.h:31
The main event interface.
Definition: LCEvent.h:30
Generic class for raw tracker data.
Definition: TrackerRawData.h:24
The generic collection used in LCIO.
Definition: LCCollection.h:29
A tracker hit on a cylindrical surface that runs parallel to the z-axis - the hit is stored as: x...
Definition: TrackerHitZCylinder.h:28
Helper class to create and interpret the 32-bit flag word in LCCollections.
Definition: LCFlag.h:19
The generic calorimeter hit - created from SimCalorimeterHit or RawCalorimeterHit.
Definition: CalorimeterHit.h:34