00001
00002
00003 #ifndef XAODTAU_VERSIONS_TAUJET_V2_H
00004 #define XAODTAU_VERSIONS_TAUJET_V2_H
00005
00006
00007
00008 #include "AthLinks/ElementLink.h"
00009
00010
00011
00012 #include "xAODBase/IParticle.h"
00013 #include "xAODBase/IParticleContainer.h"
00014 #include "xAODTau/TauDefs.h"
00015 #include "xAODTracking/TrackParticleContainer.h"
00016 #include "xAODTracking/VertexContainer.h"
00017 #include "xAODJet/JetContainer.h"
00018 #include "xAODPFlow/PFOContainer.h"
00019
00020 namespace xAOD {
00021
00022
00023
00030 class TauJet_v2 : public IParticle {
00031
00032 public:
00034 TauJet_v2();
00035
00038
00040 virtual double pt() const;
00042 virtual double eta() const;
00044 virtual double phi() const;
00046 virtual double e() const;
00047
00049 virtual double m() const;
00051 virtual double rapidity() const;
00052
00054 virtual const FourMom_t& p4() const;
00055 virtual const FourMom_t& p4(const TauJetParameters::TauCalibType calib) const;
00056
00057
00059 void setP4(double pt, double eta, double phi, double m);
00060 bool setP4(const TauJetParameters::TauCalibType calib, double pt, double eta, double phi, double m);
00061
00062
00063 double ptJetSeed() const;
00064 double etaJetSeed() const;
00065 double phiJetSeed() const;
00066 double mJetSeed() const;
00067
00068 double ptDetectorAxis() const;
00069 double etaDetectorAxis() const;
00070 double phiDetectorAxis() const;
00071 double mDetectorAxis() const;
00072
00073 double ptIntermediateAxis() const;
00074 double etaIntermediateAxis() const;
00075 double phiIntermediateAxis() const;
00076 double mIntermediateAxis() const;
00077
00078 double ptTauEnergyScale() const;
00079 double etaTauEnergyScale() const;
00080 double phiTauEnergyScale() const;
00081 double mTauEnergyScale() const;
00082
00083 double ptTauEtaCalib() const;
00084 double etaTauEtaCalib() const;
00085 double phiTauEtaCalib() const;
00086 double mTauEtaCalib() const;
00087
00088 double ptPanTauEFlowRecProto() const;
00089 double etaPanTauEFlowRecProto() const;
00090 double phiPanTauEFlowRecProto() const;
00091 double mPanTauEFlowRecProto() const;
00092
00093 double ptPanTauEFlowRec() const;
00094 double etaPanTauEFlowRec() const;
00095 double phiPanTauEFlowRec() const;
00096 double mPanTauEFlowRec() const;
00097
00098 double ptPanTauCellBasedProto() const;
00099 double etaPanTauCellBasedProto() const;
00100 double phiPanTauCellBasedProto() const;
00101 double mPanTauCellBasedProto() const;
00102
00103 double ptPanTauCellBased() const;
00104 double etaPanTauCellBased() const;
00105 double phiPanTauCellBased() const;
00106 double mPanTauCellBased() const;
00107
00108 double ptTrigCaloOnly() const;
00109 double etaTrigCaloOnly() const;
00110 double phiTrigCaloOnly() const;
00111 double mTrigCaloOnly() const;
00112
00114 virtual Type::ObjectType type() const;
00115
00117
00118
00119 float charge() const;
00120
00121
00122 void setCharge(float);
00123
00125 unsigned int ROIWord() const;
00126
00127
00128 void setROIWord(unsigned int);
00129
00132 bool hasDiscriminant( TauJetParameters::TauID discID ) const;
00133
00136 double discriminant( TauJetParameters::TauID discID ) const;
00137
00141 void setDiscriminant( TauJetParameters::TauID discID, double disc );
00142
00145 bool isTau( TauJetParameters::IsTauFlag flag ) const;
00146
00150 void setIsTau( TauJetParameters::IsTauFlag flag, bool value );
00151
00155 void setFlag( TauJetParameters::VetoFlags flag, bool value );
00156
00159 bool flag( TauJetParameters::VetoFlags flag ) const;
00160
00161
00163 bool detail( TauJetParameters::Detail detail, int& value ) const;
00164 bool detail( TauJetParameters::Detail detail, float& value ) const;
00165 void setDetail( TauJetParameters::Detail detail, int value );
00166 void setDetail( TauJetParameters::Detail detail, float value );
00167
00168
00169 template <class T>
00170 typename xAODTAU_return_type<T>::type detail( TauJetParameters::Detail detail ) const
00171 {
00172 T temp;
00173 if (this->detail(detail,temp)) return temp;
00174 else return 0;
00175 }
00176
00178 bool panTauDetail( TauJetParameters::PanTauDetails panTauDetail, int& value ) const;
00179 bool panTauDetail( TauJetParameters::PanTauDetails panTauDetail, float& value ) const;
00180 void setPanTauDetail( TauJetParameters::PanTauDetails panTauDetail, int value );
00181 void setPanTauDetail( TauJetParameters::PanTauDetails panTauDetail, float value );
00182
00183
00184 template <class T>
00185 typename xAODTAU_return_type<T>::type panTauDetail( TauJetParameters::PanTauDetails panTauDetail ) const
00186 {
00187 T temp;
00188 if (this->panTauDetail(panTauDetail,temp)) return temp;
00189 else return 0;
00190 }
00191
00192
00193 typedef ElementLink< xAOD::JetContainer > JetLink_t;
00194
00195 const JetLink_t& jetLink() const;
00196
00197 void setJetLink( const JetLink_t& jetLink );
00198
00199 void setJet( const xAOD::JetContainer *cont, const xAOD::Jet *jet );
00200
00201 const Jet* jet() const;
00202
00203
00204
00205 typedef ElementLink< xAOD::VertexContainer > VertexLink_t;
00206
00207 const VertexLink_t& vertexLink() const;
00208
00209 void setVertexLink( const VertexLink_t& vertexLink );
00210
00211 void setVertex( const xAOD::VertexContainer *cont, const xAOD::Vertex *vertex );
00212
00213 const Vertex* vertex() const;
00214
00215
00216
00217
00218 const VertexLink_t& secondaryVertexLink() const;
00219
00220 void setSecondaryVertexLink( const VertexLink_t& vertexLink );
00221
00222 void setSecondaryVertex( const xAOD::VertexContainer *cont, const xAOD::Vertex *vertex );
00223
00224 const Vertex* secondaryVertex() const;
00225
00226
00227
00228
00229 typedef std::vector< ElementLink< xAOD::TrackParticleContainer > > TrackParticleLinks_t;
00230
00231 const TrackParticleLinks_t& trackLinks() const;
00232
00233 void setTrackLinks( const TrackParticleLinks_t& trackParticles );
00235 const TrackParticle* track( size_t i ) const;
00237 size_t nTracks() const;
00239 void addTrackLink( const ElementLink< TrackParticleContainer >& tr);
00241 void clearTrackLinks();
00242
00243
00244 bool trackFlag(const TrackParticle* track, TauJetParameters::TauTrackFlag flag) const;
00245 void setTrackFlag(const TrackParticle* track, TauJetParameters::TauTrackFlag flag, bool value);
00246
00247
00248 int trackFilterProngs() const;
00249
00250 void setTrackFilterProngs(int);
00251
00252
00253 int trackFilterQuality() const;
00254
00255 void setTrackFilterQuality(int);
00256
00257
00258 float pi0ConeDR() const;
00259
00260 void setPi0ConeDR(float);
00261
00262
00263
00264 float trackEtaStrip(unsigned int numTrack) const;
00265
00266 void setTrackEtaStrip(unsigned int numTrack, float eta);
00267
00268
00269
00270 float trackPhiStrip(unsigned int numTrack) const;
00271
00272 void setTrackPhiStrip(unsigned int numTrack, float phi);
00273
00274
00275
00276 const TrackParticleLinks_t& wideTrackLinks() const;
00277
00278 void setWideTrackLinks( const TrackParticleLinks_t& trackParticles );
00280 const TrackParticle* wideTrack( size_t i ) const;
00282 size_t nWideTracks() const;
00284 void addWideTrackLink( const ElementLink< TrackParticleContainer >& tr);
00286 void clearWideTrackLinks();
00287
00288
00289
00290 const TrackParticleLinks_t& otherTrackLinks() const;
00291
00292 void setOtherTrackLinks( const TrackParticleLinks_t& trackParticles );
00294 const TrackParticle* otherTrack( size_t i ) const;
00296 size_t nOtherTracks() const;
00298 void addOtherTrackLink( const ElementLink< TrackParticleContainer >& tr);
00300 void clearOtherTrackLinks();
00301
00302
00303
00304 typedef std::vector< ElementLink< xAOD::PFOContainer > > PFOLinks_t;
00305
00306
00307
00308 const PFOLinks_t& hadronicPFOLinks() const;
00309
00310 void setHadronicPFOLinks( const PFOLinks_t& hadronicPFOs );
00312 const PFO* hadronicPFO( size_t i ) const;
00314 size_t nHadronicPFOs() const;
00316 void addHadronicPFOLink( const ElementLink< PFOContainer >& pfo);
00318 void clearHadronicPFOLinks();
00319
00320
00321
00322 const PFOLinks_t& shotPFOLinks() const;
00323
00324 void setShotPFOLinks( const PFOLinks_t& shotPFOs );
00326 const PFO* shotPFO( size_t i ) const;
00328 size_t nShotPFOs() const;
00330 void addShotPFOLink( const ElementLink< PFOContainer >& pfo);
00332 void clearShotPFOLinks();
00333
00334
00336
00337
00338 const PFOLinks_t& chargedPFOLinks() const;
00339
00340 void setChargedPFOLinks( const PFOLinks_t& chargedPFOs );
00342 const PFO* chargedPFO( size_t i ) const;
00344 size_t nChargedPFOs() const;
00346 void addChargedPFOLink( const ElementLink< PFOContainer >& pfo);
00348 void clearChargedPFOLinks();
00349
00350
00351
00352 const PFOLinks_t& neutralPFOLinks() const;
00353
00354 void setNeutralPFOLinks( const PFOLinks_t& neutralPFOs );
00356 const PFO* neutralPFO( size_t i ) const;
00358 size_t nNeutralPFOs() const;
00360 void addNeutralPFOLink( const ElementLink< PFOContainer >& pfo);
00362 void clearNeutralPFOLinks();
00363
00364
00365
00366 const PFOLinks_t& pi0PFOLinks() const;
00367
00368 void setPi0PFOLinks( const PFOLinks_t& pi0PFOs );
00370 const PFO* pi0PFO( size_t i ) const;
00372 size_t nPi0PFOs() const;
00374 void addPi0PFOLink( const ElementLink< PFOContainer >& pfo);
00376 void clearPi0PFOLinks();
00377
00378
00379
00380
00382
00383
00384 const PFOLinks_t& protoChargedPFOLinks() const;
00385
00386 void setProtoChargedPFOLinks( const PFOLinks_t& protoChargedPFOs );
00388 const PFO* protoChargedPFO( size_t i ) const;
00390 size_t nProtoChargedPFOs() const;
00392 void addProtoChargedPFOLink( const ElementLink< PFOContainer >& pfo);
00394 void clearProtoChargedPFOLinks();
00395
00396
00397
00398 const PFOLinks_t& protoNeutralPFOLinks() const;
00399
00400 void setProtoNeutralPFOLinks( const PFOLinks_t& protoNeutralPFOs );
00402 const PFO* protoNeutralPFO( size_t i ) const;
00404 size_t nProtoNeutralPFOs() const;
00406 void addProtoNeutralPFOLink( const ElementLink< PFOContainer >& pfo);
00408 void clearProtoNeutralPFOLinks();
00409
00410
00411
00412 const PFOLinks_t& protoPi0PFOLinks() const;
00413
00414 void setProtoPi0PFOLinks( const PFOLinks_t& protoPi0PFOs );
00416 const PFO* protoPi0PFO( size_t i ) const;
00418 size_t nProtoPi0PFOs() const;
00420 void addProtoPi0PFOLink( const ElementLink< PFOContainer >& pfo);
00422 void clearProtoPi0PFOLinks();
00423
00424
00425
00427
00428
00429 void dump();
00430
00431 private:
00432
00434 mutable FourMom_t m_p4;
00436 mutable bool m_p4Cached;
00437
00438
00439
00440 };
00441
00442 }
00443
00444
00445
00446 #include "AthContainers/DataVector.h"
00447 DATAVECTOR_BASE( xAOD::TauJet_v2, xAOD::IParticle );
00448
00449 #endif // XAODTAU_VERSIONS_TAUJET_V2_H
00450
00451