00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include <assert.h>
00046 #include <iostream>
00047
00048 #include "TMath.h"
00049
00050 #include "StMessMgr.h"
00051 #include "StMiniMcEvent/StTinyMcTrack.h"
00052 #include "StMiniMcEvent/StMiniMcPair.h"
00053 #include "StMiniMcEvent/StContamPair.h"
00054 #include "StMuDSTMaker/COMMON/StMuTrack.h"
00055 #include "StParticleDefinition.hh"
00056
00057 #include "StEmbeddingQATrack.h"
00058 #include "StEmbeddingQAUtilities.h"
00059
00060 using namespace std ;
00061
00062 ClassImp(StEmbeddingQATrack)
00063
00064
00065 StEmbeddingQATrack::StEmbeddingQATrack()
00066 : mNCommonHit(-10), mParentParentGeantId(-10), mParentGeantId(-10), mGeantId(-10), mGeantProcess(-10),
00067 mNHit(-10), mNHitPoss(-10), mCharge(-10),
00068 mVectorMc(-9999., -9999., -9999., -9999.),
00069 mVectorRc(-9999., -9999., -9999., -9999.),
00070 mPhi(-9999.), mdEdx(-9999.), mDcaGl(-9999.),
00071 mNSigmaElectron(-9999.), mNSigmaPion(-9999.), mNSigmaKaon(-9999.), mNSigmaProton(-9999.),
00072 mName("MC")
00073 {
00075 }
00076
00077
00078 StEmbeddingQATrack::StEmbeddingQATrack(const TString name, const StTinyMcTrack& track)
00079 : mNCommonHit(-10),
00080 mParentParentGeantId(-10), mParentGeantId(track.parentGeantId()), mGeantId(track.geantId()), mGeantProcess(-10),
00081 mNHit(track.nHitMc()), mNHitPoss(-10), mCharge(track.chargeMc()),
00082 mVectorMc(track.pxMc(), track.pyMc(), track.pzMc(),
00083 TMath::Sqrt(track.pMc()*track.pMc() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(track.geantId())->mass(),2.0))),
00084 mVectorRc(-9999., -9999., -9999., -9999.),
00085 mPhi(track.phiMc()), mdEdx(-9999.), mDcaGl(-9999.),
00086 mNSigmaElectron(-9999.), mNSigmaPion(-9999.), mNSigmaKaon(-9999.), mNSigmaProton(-9999.),
00087 mName(name)
00088 {
00091 }
00092
00093
00094 StEmbeddingQATrack::StEmbeddingQATrack(const TString name, StMiniMcPair* track)
00095 : mNCommonHit(track->commonHits()),
00096 mParentParentGeantId(-10), mParentGeantId(track->parentGeantId()), mGeantId(track->geantId()), mGeantProcess(-10),
00097 mNHit(track->fitPts()), mNHitPoss(track->nPossiblePts()), mCharge(track->charge()),
00098 mVectorMc(track->pxMc(), track->pyMc(), track->pzMc(),
00099 TMath::Sqrt(track->pMc()*track->pMc() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(track->geantId())->mass(),2.0))),
00100 mVectorRc(track->pxPr(), track->pyPr(), track->pzPr(),
00101 TMath::Sqrt(track->pPr()*track->pPr() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(track->geantId())->mass(),2.0))),
00102 mVectorGl(track->pxGl(), track->pyGl(), track->pzGl(),
00103 TMath::Sqrt(track->pGl()*track->pGl() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(track->geantId())->mass(),2.0))),
00104 mPhi(track->phiMc()), mdEdx(track->dedx()), mDcaGl(track->dcaGl()),
00105 mNSigmaElectron(-9999.), mNSigmaPion(-9999.), mNSigmaKaon(-9999.), mNSigmaProton(-9999.),
00106 mName(name)
00107 {
00110 }
00111
00112
00113 StEmbeddingQATrack::StEmbeddingQATrack(const TString name, StContamPair* track)
00114 : mNCommonHit(track->commonHits()),
00115 mParentParentGeantId(track->mParentParentGeantId), mParentGeantId(track->parentGeantId()), mGeantId(track->geantId()),
00116 mGeantProcess(track->mGeantProcess),
00117 mNHit(track->fitPts()), mNHitPoss(track->nPossiblePts()), mCharge(track->charge()),
00118 mVectorMc(track->pxMc(), track->pyMc(), track->pzMc(),
00119 TMath::Sqrt(track->pMc()*track->pMc() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(track->geantId())->mass(),2.0))),
00120 mVectorRc(track->pxPr(), track->pyPr(), track->pzPr(),
00121 TMath::Sqrt(track->pPr()*track->pPr() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(track->geantId())->mass(),2.0))),
00122 mVectorGl(track->pxGl(), track->pyGl(), track->pzGl(),
00123 TMath::Sqrt(track->pGl()*track->pGl() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(track->geantId())->mass(),2.0))),
00124 mPhi(track->phiMc()), mdEdx(track->dedx()), mDcaGl(track->dcaGl()),
00125 mNSigmaElectron(-9999.), mNSigmaPion(-9999.), mNSigmaKaon(-9999.), mNSigmaProton(-9999.),
00126 mName(name)
00127 {
00131 }
00132
00133
00134 StEmbeddingQATrack::StEmbeddingQATrack(const TString name, const StMuTrack& track, const Int_t geantid)
00135 : mNCommonHit(0), mParentParentGeantId(0), mParentGeantId(0), mGeantId(geantid), mGeantProcess(0),
00136 mNHit(track.nHitsFit(kTpcId)), mNHitPoss(track.nHitsPoss(kTpcId)), mCharge(track.charge()),
00137 mVectorMc(-9999., -9999., -9999., -9999.),
00138 mVectorRc(track.p().x(), track.p().y(), track.p().z(),
00139 TMath::Sqrt(track.p().mag2() + TMath::Power(StEmbeddingQAUtilities::instance()->getParticleDefinition(geantid)->mass(),2.0))),
00140 mVectorGl(-9999., -9999., -9999., -9999.),
00141 mPhi(track.phi()), mdEdx(track.dEdx()), mDcaGl(track.dcaGlobal().mag()),
00142 mNSigmaElectron(track.nSigmaElectron()), mNSigmaPion(track.nSigmaPion()), mNSigmaKaon(track.nSigmaKaon()), mNSigmaProton(track.nSigmaProton()),
00143 mName(name)
00144 {
00148
00149
00150
00151
00152 }
00153
00154
00155 StEmbeddingQATrack::~StEmbeddingQATrack()
00156 {
00158 }
00159
00160
00161 Bool_t StEmbeddingQATrack::isPtAndEtaOk() const
00162 {
00165 const StEmbeddingQAUtilities* utility = StEmbeddingQAUtilities::instance() ;
00166 const Float_t pt = (utility->isReal(mName)) ? getPtRc() : getPtMc() ;
00167 const Float_t eta = (utility->isReal(mName)) ? getEtaRc() : getEtaMc() ;
00168
00169 const Bool_t isPtOk = utility->isPtOk(pt) ;
00170 const Bool_t isEtaOk = utility->isEtaOk(eta) ;
00171
00172 return (StEmbeddingQAUtilities::instance()->isMc(mName)) ? isPtOk : (isPtOk && isEtaOk) ;
00173 }
00174
00175
00176 Bool_t StEmbeddingQATrack::isRapidityOk(const Double_t ycut) const
00177 {
00180 const Float_t y = (StEmbeddingQAUtilities::instance()->isReal(mName)) ? getRapidityRc() : getRapidityMc() ;
00181
00182 return (StEmbeddingQAUtilities::instance()->isMc(mName)) ? kTRUE : (TMath::Abs(y)<ycut) ;
00183 }
00184
00185
00186 Bool_t StEmbeddingQATrack::isNHitOk() const
00187 {
00190 const Bool_t isNHitOk = (StEmbeddingQAUtilities::instance()->isMc(mName)) ? kTRUE
00191 : StEmbeddingQAUtilities::instance()->isNHitsFitOk(mNHit)
00192 ;
00193
00194 return isCommonHitOk() && isNHitOk ;
00195 }
00196
00197
00198 Bool_t StEmbeddingQATrack::isNHitToNPossOk() const
00199 {
00201 const Float_t ratio = (mNHitPoss>0) ? (Float_t)mNHit/(Float_t)mNHitPoss : -1.0 ;
00202
00203 return (StEmbeddingQAUtilities::instance()->isMc(mName)) ? kTRUE
00204 : StEmbeddingQAUtilities::instance()->isNHitToNPossOk(ratio) ;
00205 }
00206
00207
00208 Bool_t StEmbeddingQATrack::isDcaOk() const
00209 {
00212
00213 return (StEmbeddingQAUtilities::instance()->isMc(mName)) ? kTRUE
00214 : StEmbeddingQAUtilities::instance()->isDcaOk(mDcaGl) ;
00215 }
00216
00217
00218 Bool_t StEmbeddingQATrack::isCommonHitOk() const
00219 {
00221
00222
00223 return (StEmbeddingQAUtilities::instance()->isEmbedding(mName)) ? StEmbeddingQAUtilities::instance()->isNHitsFitOk(mNCommonHit)
00224 : kTRUE ;
00225 }
00226
00227
00228 Bool_t StEmbeddingQATrack::isNSigmaOk(const Int_t geantid) const
00229 {
00231
00232 StEmbeddingQAUtilities* utility = StEmbeddingQAUtilities::instance() ;
00233
00235 if ( !utility->isReal(mName) ) return kTRUE ;
00236
00238 if ( !utility->isEPiKP(geantid) ) return kTRUE ;
00239
00241 const Bool_t isChargeOk = utility->getParticleDefinition(geantid)->charge() == mCharge ;
00242 if(!isChargeOk) return kFALSE ;
00243
00246 if( mCharge < 0 ){
00247
00248 if ( utility->isElectron(geantid) ) return utility->isNSigmaOk(mNSigmaElectron) ;
00249 else if ( utility->isPiMinus(geantid) ) return utility->isNSigmaOk(mNSigmaPion) ;
00250 else if ( utility->isKMinus(geantid) ) return utility->isNSigmaOk(mNSigmaKaon) ;
00251 else if ( utility->isPBar(geantid) ) return utility->isNSigmaOk(mNSigmaProton) ;
00252 else{
00254 LOG_ERROR << "StEmbeddingQATrack::isNSigmaOk Geant id is not e, pi, K or p, geantid= " << geantid << endm;
00255 LOG_ERROR << "StEmbeddingQATrack::isNSigmaOk Please check geantid, real data QA should only contain e, pi, K and p" << endm;
00256 assert(0);
00257 }
00258 }
00259 else if ( mCharge > 0 ) {
00260
00261 if ( utility->isPositron(geantid) ) return utility->isNSigmaOk(mNSigmaElectron) ;
00262 else if ( utility->isPiPlus(geantid) ) return utility->isNSigmaOk(mNSigmaPion) ;
00263 else if ( utility->isKPlus(geantid) ) return utility->isNSigmaOk(mNSigmaKaon) ;
00264 else if ( utility->isProton(geantid) ) return utility->isNSigmaOk(mNSigmaProton) ;
00265 else{
00267 LOG_ERROR << "StEmbeddingQATrack::isNSigmaOk Geant id is not e, pi, K or p, geantid= " << geantid << endm;
00268 LOG_ERROR << "StEmbeddingQATrack::isNSigmaOk Please check geantid, real data QA should only contain e, pi, K and p" << endm;
00269 assert(0);
00270 }
00271 }
00272 else{
00274 LOG_ERROR << "StEmbeddingQATrack::isNSigmaOk Charge == 0, charge=" << mCharge << ", geantid= " << geantid << endm;
00275 LOG_ERROR << "StEmbeddingQATrack::isNSigmaOk Please check geantid, real data QA should only contain e, pi, K and p" << endm;
00276 assert(0);
00277 }
00278 }
00279
00280
00281 StLorentzVectorD StEmbeddingQATrack::getVectorMc() const
00282 {
00284
00285 return mVectorMc ;
00286 }
00287
00288
00289 StLorentzVectorD StEmbeddingQATrack::getVectorRc() const
00290 {
00292
00293 return mVectorRc ;
00294 }
00295
00296
00297 StLorentzVectorD StEmbeddingQATrack::getVectorPr() const
00298 {
00300
00301 return getVectorRc() ;
00302 }
00303
00304
00305 StLorentzVectorD StEmbeddingQATrack::getVectorGl() const
00306 {
00308
00309 return mVectorGl ;
00310 }
00311
00312
00313 void StEmbeddingQATrack::print() const
00314 {
00316
00317 LOG_INFO << "#----------------------------------------------------------------------------------------------------" << endm;
00318 LOG_INFO << Form("StEmbeddingQATrack::print() : Track informations (%s)", mName.Data()) << endm;
00319 LOG_INFO << " getNCommonHit() " << getNCommonHit() << endm;
00320 LOG_INFO << " getParentParentGeantId() " << getParentParentGeantId() << endm;
00321 LOG_INFO << " getParentGeantId() " << getParentGeantId() << endm;
00322 LOG_INFO << " getGeantId() " << getGeantId() << endm;
00323 LOG_INFO << " getGeantProcess() " << getGeantProcess() << endm;
00324 LOG_INFO << " getNHit() " << getNHit() << endm;
00325 LOG_INFO << " getMass() (MC, RC) (" << getMassMc() << ", " << getMassRc() << ")" << endm;
00326 LOG_INFO << " getPt() (MC, RC) (" << getPtMc() << ", " << getPtRc() << ")" << endm;
00327 LOG_INFO << " getPx() (MC, RC) (" << getPxMc() << ", " << getPxRc() << ")" << endm;
00328 LOG_INFO << " getPy() (MC, RC) (" << getPyMc() << ", " << getPyRc() << ")" << endm;
00329 LOG_INFO << " getPz() (MC, RC) (" << getPzMc() << ", " << getPzRc() << ")" << endm;
00330 LOG_INFO << " getP() (MC, RC) (" << getPMc() << ", " << getPRc() << ")" << endm;
00331 LOG_INFO << " getEta() (MC, RC) (" << getEtaMc() << ", " << getEtaRc() << ")" << endm;
00332 LOG_INFO << " getPhi() " << getPhi() << endm;
00333 LOG_INFO << " getdEdx() " << getdEdx() << endm;
00334 LOG_INFO << " getDcaGl() " << getDcaGl() << endm;
00335 LOG_INFO << "#----------------------------------------------------------------------------------------------------" << endm;
00336 }
00337
00338