00001 #ifndef TMB_TREE_TMBEMCLUSTER_HPP__
00002 #define TMB_TREE_TMBEMCLUSTER_HPP__
00003
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00017
00018 #include "tmb_tree/TMBLorentzVector.hpp"
00019 #include "tmb_tree/TMBCellContainer.hpp"
00020
00021 #ifndef ROOT_TRef
00022 #include "TRef.h"
00023 #endif
00024
00025 #ifndef ROOT_TRefArray
00026 #include "TRefArray.h"
00027 #endif
00028
00029 #include "TArrayI.h"
00030 #include "TArrayF.h"
00031 #include "TString.h"
00032
00033 #include <cassert>
00034
00035 class TMBTrack;
00036 class TMBCps;
00037 class TMBFps;
00038 class TMBVertex;
00039
00044 class TMBEMCluster : public TMBLorentzVector {
00045
00046 private:
00048 Float_t _uncorrE;
00050 Float_t _q;
00052 Int_t _id;
00054 Float_t _iso;
00056 Float_t _EisoCore;
00058 Int_t _isol;
00060 Int_t _nb_CPS;
00062 Int_t _nb_FPS;
00064 Float_t _EMScalarEt;
00066 Float_t _floorE[6];
00068 Float_t _floorX[6];
00070 Float_t _floorY[6];
00072 Float_t _floorZ[6];
00074 Float_t _flrS1[6];
00076 Float_t _flrS2[6];
00078 Float_t _flrC[6];
00080 Int_t _flrNch[6];
00082 Float_t _EMfrac;
00084 Float_t _HA;
00086 Float_t _HMx7;
00088 Float_t _HMx8;
00090 Float_t _Excess;
00092 Float_t _rRC[5];
00094 Float_t _rR1[5];
00096 Float_t _rR2[5];
00098 TRef _chptr;
00100 TRef _vtxref;
00102 TRefArray _cpsptr;
00104 TRefArray _fpsptr;
00105 TRef _container;
00106
00107
00108 std::vector<TMBCellContainer::Index_t> _ecells;
00109
00110
00112 Bool_t _is_in_phi_fiducial;
00114 Bool_t _is_in_eta_fiducial;
00116 Float_t _CalE;
00118 Float_t _CalPhi;
00120 Float_t _CalEta;
00122 Float_t _CalDetectorPhi;
00124 Float_t _CalDetectorEta;
00126 Float_t _sigE;
00128 Float_t _Lhood8;
00129
00130 Float_t _LhoodCps;
00131 Float_t _Lhood3;
00132 Float_t _Lhood4Iso;
00133 Float_t _Lhood4EOP;
00134
00136 Float_t _TrMatchChi2ProbBest;
00138 Float_t _SpatialTrMatchChi2ProbBest;
00139
00140 TRef _chptrBest;
00141 TRef _chptrBestSpatial;
00143 Int_t _nChPart;
00145 TRefArray _ChPart;
00147 TArrayF _TrMatchChi2Prob;
00149 TArrayF _SpatialTrMatchChi2Prob;
00150
00153 TRef _CpsBest;
00155 Float_t _CPSFitZVtxBest;
00157 Float_t _CPSFitZVtxErrBest;
00159 Float_t _CPSFitDCABest;
00161 Float_t _CPSFitDCAErrBest;
00163 Float_t _CPSChi2MatchBest;
00165 TArrayF _CPSFitChi2Match;
00167 TArrayF _CPSFitZVtx;
00169 TArrayF _CPSFitZVtxErr;
00171 TArrayF _CPSFitDCA;
00173 TArrayF _CPSFitDCAErr;
00174
00175
00176 Float_t _bestPSz;
00177 TArrayF _PSz;
00179 Int_t _has_cps_match;
00180 TArrayI _cps_match;
00182 Float_t _bestcps_match_chi2;
00183 TArrayF _cps_match_chi2;
00185 Int_t _nEMLikeCPSClusters;
00187 Float_t _diphoton_p4v[4];
00188
00195 Int_t _emhits_cpsUsed;
00197 Int_t _emhits_cftA[2];
00199 Int_t _emhits_cftS[2];
00201 Int_t _emhits_smtA[2];
00203 Int_t _emhits_smtS[2];
00205 Float_t _emhits_cftA_chi2[2];
00207 Float_t _emhits_cftS_chi2[2];
00209 Float_t _emhits_smtA_chi2[2];
00211 Float_t _emhits_smtS_chi2[2];
00213 Float_t _emhits_e_f_discriminant;
00214
00216 Float_t _clusterpx;
00218 Float_t _clusterpy;
00220 Float_t _clusterpz;
00221
00222 public:
00223 TMBEMCluster() {}
00224
00225 TMBEMCluster(Float_t E, Float_t pT, Float_t eta, Float_t phi,
00226 Float_t uncorrE, Float_t q,
00227 Int_t id, Float_t iso, Float_t EisoCore, Int_t isol,
00228 Int_t nb_CPS, Int_t nb_FPS, Float_t EMScalarEt,
00229 Float_t* floorE, Float_t* floorX, Float_t* floorY, Float_t* floorZ,
00230 Float_t* flrS1, Float_t* flrS2, Float_t* flrC, Int_t* flrNch,
00231 Float_t EMfrac, Float_t HA, Float_t HMx7, Float_t HMx8,
00232 Float_t Excess,
00233 Float_t* rRC, Float_t* rR1, Float_t* rR2,
00234 TRef chptr, TRef vtxref,
00235 TRefArray* cpsptr, TRefArray* fpsptr,
00236 const std::vector<TMBCellContainer::Index_t>& ecells,
00237 TMBCellContainer *cont);
00238
00239 void Set(Float_t E, Float_t pT, Float_t eta, Float_t phi,
00240 Float_t uncorrE, Float_t q,
00241 Int_t id, Float_t iso, Float_t EisoCore, Int_t isol,
00242 Int_t nb_CPS, Int_t nb_FPS, Float_t EMScalarEt,
00243 Float_t* floorE, Float_t* floorX, Float_t* floorY, Float_t* floorZ,
00244 Float_t* flrS1, Float_t* flrS2, Float_t* flrC, Int_t* flrNch,
00245 Float_t EMfrac, Float_t HA, Float_t HMx7, Float_t HMx8,
00246 Float_t Excess,
00247 Float_t* rRC, Float_t* rR1, Float_t* rR2,
00248 TRef chptr, TRef vtxref,
00249 TRefArray* cpsptr, TRefArray* fpsptr,
00250 const std::vector<TMBCellContainer::Index_t>& ecells,
00251 TMBCellContainer *cont);
00252
00253 void Set1(Bool_t is_in_phi_fiducial,
00254 Bool_t is_in_eta_fiducial, Float_t CalE,
00255 Float_t CalPhi, Float_t CalEta, Float_t CalDetectorPhi,
00256 Float_t CalDetectorEta, Float_t sigE, TRef CpsBest,
00257 Float_t CPSFitZVtxBest, Float_t CPSFitZVtxErrBest,
00258 Float_t CPSFitDCABest, Float_t CPSFitDCAErrBest,
00259 Float_t CPSChi2MatchBest,
00260 Float_t Lhood8, Float_t LhoodCps, Float_t Lhood3,
00261 Float_t Lhood4Iso, Float_t Lhood4EOP, Float_t clusterpx, Float_t clusterpy, Float_t clusterpz,
00262 Float_t TrMatchChi2ProbBest, TRef chptrBest,
00263 Float_t SpatialTrMatchChi2ProbBest, TRef chptrBestSpatial,
00264 Int_t nChPart, TRefArray* ChPart,
00265 TArrayF* TrMatchChi2Prob, TArrayF* SpatialTrMatchChi2Prob,
00266 TArrayF* CPSFitChi2Match, TArrayF* CPSFitZVtx, TArrayF* CPSFitZVtxErr,
00267 TArrayF* CPSFitDCA, TArrayF* CPSFitDCAErr);
00268
00269 void Set2(Float_t bestPSz, TArrayF* PSz, Int_t has_cps_match, TArrayI* cps_match,
00270 Float_t bestcps_match_chi2, TArrayF* cps_match_chi2,
00271 Int_t nEMLikeCPSClusters, Float_t* diphoton_p4v,
00272 Int_t emhits_cpsUsed,
00273 Int_t* emhits_cftA, Int_t* emhits_cftS,
00274 Int_t* emhits_smtA, Int_t* emhits_smtS,
00275 Float_t* emhits_cftA_chi2, Float_t* emhits_cftS_chi2,
00276 Float_t* emhits_smtA_chi2, Float_t* emhits_smtS_chi2,
00277 Float_t emhits_e_f_discriminant);
00278
00279 Float_t uncorrE() const {return _uncorrE;}
00280 Float_t charge() const {return _q;}
00281 Int_t id() const {return _id;}
00282 Int_t typeID() const {return _id;}
00283 Float_t iso() const {return _iso;}
00284 Float_t EisoCore() const {return _EisoCore;}
00285 Int_t isol() const {return _isol;}
00286 Int_t nb_CPS() const {return _nb_CPS;}
00287 Int_t nb_FPS() const {return _nb_FPS;}
00288 Float_t EMScalarEt() const {return _EMScalarEt;}
00289 Float_t floorE(Int_t nfloor) const {return _floorE[nfloor];}
00290 Float_t floorX(Int_t nfloor) const {return _floorX[nfloor];}
00291 Float_t floorY(Int_t nfloor) const {return _floorY[nfloor];}
00292 Float_t floorZ(Int_t nfloor) const {return _floorZ[nfloor];}
00293 Float_t flrS1(Int_t nfloor) const {return _flrS1[nfloor];}
00294 Float_t flrS2(Int_t nfloor) const {return _flrS2[nfloor];}
00295 Float_t flrC(Int_t nfloor) const {return _flrC[nfloor];}
00296 Int_t flrNch(Int_t nfloor) const {return _flrNch[nfloor];}
00297 Float_t emfrac() const {return _EMfrac;}
00298 Float_t HA() const {return _HA;}
00299 Float_t HMx7() const {return _HMx7;}
00300 Float_t HMx8() const {return _HMx8;}
00301 Float_t Excess() const {return _Excess;}
00302 Float_t rRC(Int_t i) const {return _rRC[i];}
00303 Float_t rR1(Int_t i) const {return _rR1[i];}
00304 Float_t rR2(Int_t i) const {return _rR2[i];}
00305 const TMBTrack* GetChargedTrack() const {return _chptr.IsValid() ? (TMBTrack*)_chptr.GetObject() : 0;}
00306 const TRef& GetChargedTrackRef() const {return _chptr;}
00307 const TMBVertex* GetVertex() const {return _vtxref.IsValid() ? (TMBVertex*)_vtxref.GetObject() : 0;}
00308 const TRef& GetVertexRef() const {return _vtxref;}
00309 const TMBCps* GetCps(Int_t icps)const {return (TMBCps*)_cpsptr.At(icps);}
00310 Int_t ncps() const {return _cpsptr.GetLast()+1;}
00311 const TMBFps* GetFps(Int_t ifps)const {return (TMBFps*)_fpsptr.At(ifps);}
00312 Int_t nfps() const {return _fpsptr.GetLast()+1;}
00313 Float_t clusterPx() const {return _clusterpx;}
00314 Float_t clusterPy() const {return _clusterpy;}
00315 Float_t clusterPz() const {return _clusterpz;}
00316
00317 const TMBCaloCell* GetCaloCell(UInt_t icell) const {
00318
00319 assert(icell < (UInt_t)_ecells.size());
00320 if(TMBCellContainer *c = _container.IsValid() ? (TMBCellContainer *)_container.GetObject() : 0) {
00321 assert(_ecells[icell] < c->NumCells());
00322 return c->GetCell(_ecells[icell]);
00323 } else {
00324 return 0;
00325 }
00326 }
00327
00328 UInt_t ncells() const { return (UInt_t)_ecells.size();}
00329
00330
00331
00332 Bool_t is_in_phi_fiducial() const {return _is_in_phi_fiducial;}
00333 Bool_t is_in_eta_fiducial() const {return _is_in_eta_fiducial;}
00334 Bool_t is_in_fiducial() const {return _is_in_eta_fiducial && _is_in_phi_fiducial;}
00335 Float_t CalE() const {return _CalE;}
00336 Float_t CalPhi() const {return _CalPhi;}
00337 Float_t CalEta() const {return _CalEta;}
00338 Float_t CalDetectorPhi() const {return _CalDetectorPhi;}
00339 Float_t CalDetectorEta() const {return _CalDetectorEta;}
00340 Float_t sigE() const {return _sigE;}
00341 TMBCps* getPtrCPS() const {return _CpsBest.IsValid() ? (TMBCps*)_CpsBest.GetObject() : 0;}
00342 const TRef& getPtrCPSRef() const {return _CpsBest;}
00343 Float_t CPSFitZVtxBest() const {return _CPSFitZVtxBest;}
00344 Float_t CPSFitZVtxErrBest() const {return _CPSFitZVtxErrBest;}
00345 Float_t CPSFitDCABest() const {return _CPSFitDCABest;}
00346 Float_t CPSFitDCAErrBest() const {return _CPSFitDCAErrBest;}
00347 Float_t CPSChi2MatchBest() const {return _CPSChi2MatchBest;}
00348 Float_t Lhood8() const {return _Lhood8;}
00349
00350 Float_t LhoodCps() const { return _LhoodCps; }
00351 Float_t Lhood3() const { return _Lhood3; }
00352 Float_t Lhood4Iso() const { return _Lhood4Iso; }
00353 Float_t Lhood4EOP() const { return _Lhood4EOP; }
00354
00355 Float_t track_match_chi2prob() const {return _TrMatchChi2ProbBest;}
00356 Float_t track_match_spatialchi2prob() const {return _SpatialTrMatchChi2ProbBest;}
00357 Bool_t has_track_match(Float_t Chi2Cut=0.01) const {return (_TrMatchChi2ProbBest>Chi2Cut);}
00358 Bool_t has_spatial_track_match(Float_t Chi2Cut=0.01) const {return (_SpatialTrMatchChi2ProbBest>Chi2Cut);}
00359 const TMBTrack* getPtrChp() const {return _chptrBest.IsValid() ? (TMBTrack*)_chptrBest.GetObject() : 0;}
00360 const TMBTrack* getPtrChpSpatial() const {return _chptrBestSpatial.IsValid() ? (TMBTrack*)_chptrBestSpatial.GetObject() : 0;}
00361 const TRef& getPtrChpRef() const {return _chptrBest;}
00362 const TRef& getPtrChpSpatialRef() const {return _chptrBestSpatial;}
00363 Int_t nChPart() const {return _ChPart.GetLast()+1;}
00364 const TMBTrack* GetChPart(Int_t itr) const {return (TMBTrack*)_ChPart.At(itr);}
00365 Float_t track_match_chi2prob(Int_t itr) const {return (Float_t)_TrMatchChi2Prob.At(itr);}
00366 Float_t track_match_spatialchi2prob(Int_t itr) const {return (Float_t)_SpatialTrMatchChi2Prob.At(itr);}
00367 Float_t CPSFitChi2Match(Int_t icps) const {return (Float_t)_CPSFitChi2Match.At(icps);}
00368 Float_t CPSFitZvtx(Int_t icps) const {return (Float_t)_CPSFitZVtx.At(icps);}
00369 Float_t CPSFitZvtxErr(Int_t icps)const {return (Float_t)_CPSFitZVtxErr.At(icps);}
00370 Float_t CPSFitDCA(Int_t icps) const {return (Float_t)_CPSFitDCA.At(icps);}
00371 Float_t CPSFitDCAErr(Int_t icps) const {return (Float_t)_CPSFitDCAErr.At(icps);}
00372
00373 Float_t bestPSz() const {return (Float_t) _bestPSz;}
00374 Float_t PSz(Int_t icps) const {return (Float_t) _PSz.At(icps);}
00375 Int_t has_cps_match() const {return (Int_t) _has_cps_match;}
00376 Int_t cps_match(Int_t icps) const {return (Int_t) _cps_match.At(icps);}
00377 Float_t bestcps_match_chi2() const {return (Float_t) _bestcps_match_chi2;}
00378 Float_t cps_match_chi2(Int_t icps) const {return (Float_t) _cps_match_chi2.At(icps);}
00379 Int_t nEMLikeCPSClusters() const {return (Int_t) _nEMLikeCPSClusters;}
00380 const Float_t* diphoton_p4v() const {return _diphoton_p4v;}
00381
00382
00383 Int_t emhits_cpsUsed() const {return (Int_t) _emhits_cpsUsed;}
00384 const Int_t* emhits_cftA() const {return _emhits_cftA;}
00385 const Int_t* emhits_cftS() const {return _emhits_cftS;}
00386 const Int_t* emhits_smtA() const {return _emhits_smtA;}
00387 const Int_t* emhits_smtS() const {return _emhits_smtS;}
00388 const Float_t* emhits_cftA_chi2() const {return _emhits_cftA_chi2;}
00389 const Float_t* emhits_cftS_chi2() const {return _emhits_cftS_chi2;}
00390 const Float_t* emhits_smtA_chi2() const {return _emhits_smtA_chi2;}
00391 const Float_t* emhits_smtS_chi2() const {return _emhits_smtS_chi2;}
00392 Float_t emhits_e_f_discriminant() const {return (Float_t) _emhits_e_f_discriminant;}
00393
00394 ~TMBEMCluster() {;}
00395
00396 ClassDef(TMBEMCluster, 3);
00397 };
00398
00399 #endif // TMB_TREE_TMBEMCLUSTER_HPP__
00400