00001
00009 #ifndef STAR_DcaService
00010 #define STAR_DcaService
00011
00012 #include "StarClassLibrary/StHelixD.hh"
00013 #include "StStrangeMuDstMaker.h"
00014 #include "StStrangeEvMuDst.hh"
00015
00016 class StXiMuDst;
00017 class StV0MuDst;
00018
00019 class DcaService {
00020 public:
00021 DcaService() {}
00022 virtual ~DcaService() {}
00023
00025
00026 static void setBfield(double b);
00027 static void setBfield(StStrangeEvMuDst* ev);
00028 static void setBfield(StStrangeMuDstMaker* mk);
00029
00030 static void setPrimVertex(StThreeVectorD& pv);
00031 static void setPrimVertex(StStrangeEvMuDst* ev);
00032 static void setPrimVertex(StStrangeMuDstMaker* mk);
00033
00034 static void initEvent(StStrangeEvMuDst* ev);
00035 static void initEvent(StStrangeMuDstMaker* mk);
00037
00039
00040 static double dcaXiToPrimVertex(StXiMuDst* xi);
00041
00042
00043
00044
00045 static double dcaBachelorToPrimVertex(StXiMuDst* xi);
00046 static double dcaPosToPrimVertex(StV0MuDst* v0);
00047 static double dcaNegToPrimVertex(StV0MuDst* v0);
00049
00051
00052 static double signedDcaXiToPrimVertex(StXiMuDst* xi);
00053 static double signedDcaBachelorToPrimVertex(StXiMuDst* xi);
00054 static double signedDcaPosToPrimVertex(StV0MuDst* v0);
00055 static double signedDcaNegToPrimVertex(StV0MuDst* v0);
00057
00059
00060 static void replaceDcaXiToPrimVertex(StXiMuDst* xi, Float_t dca);
00061 static void replaceDcaBachelorToPrimVertex(StXiMuDst* xi, Float_t dca);
00062 static void replaceDcaPosToPrimVertex(StV0MuDst* v0, Float_t dca);
00063 static void replaceDcaNegToPrimVertex(StV0MuDst* v0, Float_t dca);
00065
00067
00068 static void fixDcaXiToPrimVertex(StXiMuDst* xi);
00069 static void fixSignedDcaXiToPrimVertex(StXiMuDst* xi);
00070 static void fixSignedDcaBachelorToPrimVertex(StXiMuDst* xi);
00071 static void fixSignedDcaPosToPrimVertex(StV0MuDst* v0);
00072 static void fixSignedDcaNegToPrimVertex(StV0MuDst* v0);
00074
00076
00077 static void fixDcaXiToPrimVertex(StStrangeMuDstMaker* mk);
00078 static void fixSignedDcaXiToPrimVertex(StStrangeMuDstMaker* mk);
00079 static void fixSignedDcaBachelorToPrimVertex(StStrangeMuDstMaker* mk);
00080 static void fixSignedDcaPosToPrimVertex(StStrangeMuDstMaker* mk);
00081 static void fixSignedDcaNegToPrimVertex(StStrangeMuDstMaker* mk);
00082
00083
00085 static void fixSignedDcasXis(StStrangeMuDstMaker* mk);
00087 static void fixSignedDcasV0s(StStrangeMuDstMaker* mk);
00089 static void fixSignedDcas(StStrangeMuDstMaker* mk);
00091
00092
00093 private:
00094 static double B;
00095 static StThreeVectorD PrimVertex;
00096 static StThreeVectorD Origin;
00097 static StHelixD Track;
00098 static Long_t offsetDcaXiToPrimVertex;
00099 static Long_t offsetDcaBachelorToPrimVertex;
00100 static Long_t offsetDcaPosToPrimVertex;
00101 static Long_t offsetDcaNegToPrimVertex;
00102
00103 static void initOffsets();
00104 static double signIt();
00105 static void replaceDca(TObject*, Float_t, Long_t&, TClass*, const char*);
00106 static double dcaToPrimVertex(int, Float_t, Float_t, Float_t, Float_t, Float_t, Float_t);
00107
00108 ClassDef(DcaService,0)
00109 };
00110
00111
00112 inline void DcaService::setBfield(double b)
00113 { B=b; }
00114
00115 inline void DcaService::setBfield(StStrangeEvMuDst* ev)
00116 { B=ev->magneticField(); }
00117
00118 inline void DcaService::setBfield(StStrangeMuDstMaker* mk)
00119 { setBfield(mk->GetEvent()); }
00120
00121 inline void DcaService::setPrimVertex(StThreeVectorD& pv)
00122 { PrimVertex=pv; }
00123
00124 inline void DcaService::setPrimVertex(StStrangeMuDstMaker* mk)
00125 { setPrimVertex(mk->GetEvent()); }
00126
00127 inline void DcaService::initEvent(StStrangeEvMuDst* ev)
00128 { setBfield(ev); setPrimVertex(ev); }
00129
00130 inline void DcaService::initEvent(StStrangeMuDstMaker* mk)
00131 { initEvent(mk->GetEvent()); }
00132
00133 inline double DcaService::signedDcaXiToPrimVertex(StXiMuDst* xi)
00134 { return dcaXiToPrimVertex(xi)*signIt(); }
00135
00136 inline double DcaService::signedDcaBachelorToPrimVertex(StXiMuDst* xi)
00137 { return dcaBachelorToPrimVertex(xi)*signIt(); }
00138
00139 inline double DcaService::signedDcaPosToPrimVertex(StV0MuDst* v0)
00140 { return dcaPosToPrimVertex(v0)*signIt(); }
00141
00142 inline double DcaService::signedDcaNegToPrimVertex(StV0MuDst* v0)
00143 { return dcaNegToPrimVertex(v0)*signIt(); }
00144
00145 inline void DcaService::fixDcaXiToPrimVertex(StXiMuDst* xi)
00146 { replaceDcaXiToPrimVertex(xi,dcaXiToPrimVertex(xi)); }
00147
00148 inline void DcaService::fixSignedDcaXiToPrimVertex(StXiMuDst* xi)
00149 { replaceDcaXiToPrimVertex(xi,signedDcaXiToPrimVertex(xi)); }
00150
00151 inline void DcaService::fixSignedDcaBachelorToPrimVertex(StXiMuDst* xi)
00152 { replaceDcaBachelorToPrimVertex(xi,signedDcaBachelorToPrimVertex(xi)); }
00153
00154 inline void DcaService::fixSignedDcaPosToPrimVertex(StV0MuDst* v0)
00155 { replaceDcaPosToPrimVertex(v0,signedDcaPosToPrimVertex(v0)); }
00156
00157 inline void DcaService::fixSignedDcaNegToPrimVertex(StV0MuDst* v0)
00158 { replaceDcaNegToPrimVertex(v0,signedDcaNegToPrimVertex(v0)); }
00159
00160 inline void DcaService::fixSignedDcas(StStrangeMuDstMaker* mk)
00161 { fixSignedDcasXis(mk); fixSignedDcasV0s(mk); }
00162
00163 #endif
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178