00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #include <Stiostream.h>
00014 #include <stdlib.h>
00015 #include "StEvent.h"
00016 #include "StTrackTopologyMap.h"
00017 #include "StFlowPicoEvent.h"
00018 #include "StEventTypes.h"
00019 #include "StFlowCutTrack.h"
00020 #include "StFlowMaker.h"
00021 #include "PhysicalConstants.h"
00022 #include "StEnumerations.h"
00023 #include "SystemOfUnits.h"
00024 #include "StThreeVectorD.hh"
00025 #include "StMuDSTMaker/COMMON/StMuTrack.h"
00026 #define PR(x) cout << "##### FlowCutTrack: " << (#x) << " = " << (x) << endl;
00027
00028 ClassImp(StFlowCutTrack)
00029
00030
00031
00032 Bool_t StFlowCutTrack::mTpcTrackCut = kFALSE;
00033 Int_t StFlowCutTrack::mFitPtsTpcCuts[2] = {15, 50};
00034 Float_t StFlowCutTrack::mFitOverMaxCuts[2] = {0.52, 1.05};
00035 Float_t StFlowCutTrack::mChiSqTpcCuts[2] = {0., 0.};
00036 Float_t StFlowCutTrack::mPtTpcCuts[2] = {0.15, 12.};
00037 Float_t StFlowCutTrack::mEtaTpcCuts[2] = {-1.3, 1.3};
00038 Int_t StFlowCutTrack::mChgTpcCuts[2] = {0, 0};
00039
00040 Bool_t StFlowCutTrack::mFtpcTrackCut = kFALSE;
00041 Int_t StFlowCutTrack::mFitPtsFtpcCuts[2] = {5, 11};
00042 Float_t StFlowCutTrack::mChiSqFtpcCuts[2] = {0., 0.};
00043 Float_t StFlowCutTrack::mDcaFtpcCuts[2] = {0., 0.};
00044 Float_t StFlowCutTrack::mDcaGlobalFtpcCuts[2] = {0., 2.};
00045 Float_t StFlowCutTrack::mPtFtpcCuts[2] = {0.15, 6.};
00046 Float_t StFlowCutTrack::mEtaFtpcCuts[4] = {-4.0, -2.5, 2.5, 4.0};
00047 Int_t StFlowCutTrack::mChgFtpcCuts[2] = {0, 0};
00048
00049 UInt_t StFlowCutTrack::mTrackN = 0;
00050 UInt_t StFlowCutTrack::mTpcTrackN = 0;
00051 UInt_t StFlowCutTrack::mFtpcTrackN = 0;
00052 UInt_t StFlowCutTrack::mFtpcWestTrackN = 0;
00053 UInt_t StFlowCutTrack::mFtpcEastTrackN = 0;
00054 UInt_t StFlowCutTrack::mGoodTrackN = 0;
00055 UInt_t StFlowCutTrack::mGoodTpcTrackN = 0;
00056 UInt_t StFlowCutTrack::mGoodFtpcTrackN = 0;
00057 UInt_t StFlowCutTrack::mEtaSymPosTpcN = 0;
00058 UInt_t StFlowCutTrack::mEtaSymNegTpcN = 0;
00059 UInt_t StFlowCutTrack::mEtaSymPosFtpcN = 0;
00060 UInt_t StFlowCutTrack::mEtaSymNegFtpcN = 0;
00061 UInt_t StFlowCutTrack::mFitPtsTpcCutN = 0;
00062 UInt_t StFlowCutTrack::mFitPtsFtpcCutN = 0;
00063 UInt_t StFlowCutTrack::mFitOverMaxCutN = 0;
00064 UInt_t StFlowCutTrack::mFitOverMaxTpcCutN = 0;
00065 UInt_t StFlowCutTrack::mFitOverMaxFtpcCutN = 0;
00066 UInt_t StFlowCutTrack::mChiSqTpcCutN = 0;
00067 UInt_t StFlowCutTrack::mChiSqFtpcCutN = 0;
00068 UInt_t StFlowCutTrack::mDcaFtpcCutN = 0;
00069 UInt_t StFlowCutTrack::mDcaGlobalFtpcCutN = 0;
00070 UInt_t StFlowCutTrack::mPtTpcCutN = 0;
00071 UInt_t StFlowCutTrack::mPtFtpcCutN = 0;
00072 UInt_t StFlowCutTrack::mEtaTpcCutN = 0;
00073 UInt_t StFlowCutTrack::mChgTpcCutN = 0;
00074 UInt_t StFlowCutTrack::mEtaFtpcCutN = 0;
00075 UInt_t StFlowCutTrack::mTpcTrackCutN = 0;
00076 UInt_t StFlowCutTrack::mFtpcTrackCutN = 0;
00077 UInt_t StFlowCutTrack::mChgFtpcCutN = 0;
00078
00079
00080
00081
00082 StFlowCutTrack::StFlowCutTrack() {
00083
00084 }
00085
00086
00087
00088 StFlowCutTrack::~StFlowCutTrack() {
00089 }
00090
00091
00092
00093 Int_t StFlowCutTrack::CheckTrack(StTrack* pTrack) {
00094
00095
00096 StThreeVectorD p = pTrack->geometry()->momentum();
00097
00098 float charge = pTrack->geometry()->charge();
00099 float eta = p.pseudoRapidity();
00100 float dca = pTrack->impactParameter();
00101 float dcaGlobal = pTrack->node()->track(global)->impactParameter();
00102 float pt = p.perp();
00103 float chiSq = (float)(pTrack->fitTraits().chi2());
00104 StTrackTopologyMap map = pTrack->topologyMap();
00105 Int_t nFitPoints = pTrack->fitTraits().numberOfFitPoints() -
00106 pTrack->fitTraits().numberOfFitPoints(kSvtId) -
00107 pTrack->fitTraits().numberOfFitPoints(kSsdId) - 1;
00108 Int_t nMaxPoints = pTrack->numberOfPossiblePoints() -
00109 pTrack->numberOfPossiblePoints(kSvtId) -
00110 pTrack->numberOfPossiblePoints(kSsdId) - 1;
00111 float fitOverMax = (nMaxPoints) ? (float)nFitPoints/(float)nMaxPoints : 0.0;
00112
00113 if (map.hasHitInDetector(kTpcId) || (map.data(0) == 0 && map.data(1) == 0)) {
00114
00115 mTpcTrackN++;
00116 } else if (map.trackFtpcEast()) {
00117 mFtpcTrackN++;
00118 mFtpcEastTrackN++;
00119 } else if (map.trackFtpcWest()) {
00120 mFtpcTrackN++;
00121 mFtpcWestTrackN++;
00122 }
00123
00124 mTrackN++;
00125
00126 if (map.hasHitInDetector(kTpcId) || (map.data(0) == 0 && map.data(1) == 0)) {
00127
00128
00129
00130 if (mTpcTrackCut) {
00131 mTpcTrackCut++;
00132 return kFALSE;
00133 }
00134
00135
00136 if (mPtTpcCuts[1] > mPtTpcCuts[0] &&
00137 (pt < mPtTpcCuts[0] || pt >= mPtTpcCuts[1])) {
00138 mPtTpcCutN++;
00139 return kFALSE;
00140 }
00141
00142
00143 if (mChiSqTpcCuts[1] > mChiSqTpcCuts[0] &&
00144 (chiSq < mChiSqTpcCuts[0] || chiSq >= mChiSqTpcCuts[1])) {
00145 mChiSqTpcCutN++;
00146 return kFALSE;
00147 }
00148
00149
00150 if (mFitPtsTpcCuts[1] > mFitPtsTpcCuts[0] &&
00151 (nFitPoints < mFitPtsTpcCuts[0] || nFitPoints >= mFitPtsTpcCuts[1])) {
00152 mFitPtsTpcCutN++;
00153 return kFALSE;
00154 }
00155
00156
00157 if (mFitOverMaxCuts[1] > mFitOverMaxCuts[0] &&
00158 (fitOverMax < mFitOverMaxCuts[0] || fitOverMax >= mFitOverMaxCuts[1])) {
00159 mFitOverMaxTpcCutN++;
00160 mFitOverMaxCutN++;
00161 return kFALSE;
00162 }
00163
00164
00165 if (mEtaTpcCuts[1] > mEtaTpcCuts[0] &&
00166 (eta < mEtaTpcCuts[0] || eta >= mEtaTpcCuts[1])) {
00167 mEtaTpcCutN++;
00168 return kFALSE;
00169 }
00170
00171
00172 if (mChgTpcCuts[1] > mChgTpcCuts[0] &&
00173 (charge < mChgTpcCuts[0] || charge > mChgTpcCuts[1])) {
00174 mChgTpcCutN++;
00175 return kFALSE;
00176 }
00177
00178
00179 if (eta > 0.) {
00180 mEtaSymPosTpcN++;
00181 } else {
00182 mEtaSymNegTpcN++;
00183 }
00184
00185 mGoodTpcTrackN++;
00186 }
00187
00188 else if (map.trackFtpcEast() || map.trackFtpcWest()) {
00189
00190
00191
00192 if (mFtpcTrackCut) {
00193 mFtpcTrackCutN++;
00194 return kFALSE;
00195 }
00196
00197
00198 if (mDcaFtpcCuts[1] > mDcaFtpcCuts[0] &&
00199 (dca < mDcaFtpcCuts[0] || dca >= mDcaFtpcCuts[1])) {
00200 mDcaFtpcCutN++;
00201 return kFALSE;
00202 }
00203
00204
00205 if (mDcaGlobalFtpcCuts[1] > mDcaGlobalFtpcCuts[0] &&
00206 (dcaGlobal < mDcaGlobalFtpcCuts[0] || dcaGlobal >= mDcaGlobalFtpcCuts[1])) {
00207 mDcaGlobalFtpcCutN++;
00208 return kFALSE;
00209 }
00210
00211
00212 if (mPtFtpcCuts[1] > mPtFtpcCuts[0] &&
00213 (pt < mPtFtpcCuts[0] || pt >= mPtFtpcCuts[1])) {
00214 mPtFtpcCutN++;
00215 return kFALSE;
00216 }
00217
00218
00219 if (mChiSqFtpcCuts[1] > mChiSqFtpcCuts[0] &&
00220 (chiSq < mChiSqFtpcCuts[0] || chiSq >= mChiSqFtpcCuts[1])) {
00221 mChiSqFtpcCutN++;
00222 return kFALSE;
00223 }
00224
00225
00226 if (mFitPtsFtpcCuts[1] > mFitPtsFtpcCuts[0] &&
00227 (nFitPoints < mFitPtsFtpcCuts[0] || nFitPoints >= mFitPtsFtpcCuts[1])) {
00228 mFitPtsFtpcCutN++;
00229 return kFALSE;
00230 }
00231
00232
00233 if (mFitOverMaxCuts[1] > mFitOverMaxCuts[0] &&
00234 (fitOverMax < mFitOverMaxCuts[0] || fitOverMax >= mFitOverMaxCuts[1])) {
00235 mFitOverMaxFtpcCutN++;
00236 mFitOverMaxCutN++;
00237 return kFALSE;
00238 }
00239
00240
00241 if ((eta < 0 && mEtaFtpcCuts[1] > mEtaFtpcCuts[0] &&
00242 (eta < mEtaFtpcCuts[0] || eta >= mEtaFtpcCuts[1])) ||
00243 (eta > 0 && mEtaFtpcCuts[3] > mEtaFtpcCuts[2] &&
00244 (eta < mEtaFtpcCuts[2] || eta >= mEtaFtpcCuts[3]))) {
00245 mEtaFtpcCutN++;
00246 return kFALSE;
00247 }
00248
00249
00250 if (mChgFtpcCuts[1] > mChgFtpcCuts[0] &&
00251 (charge < mChgFtpcCuts[0] || charge > mChgFtpcCuts[1])) {
00252 mChgFtpcCutN++;
00253 return kFALSE;
00254 }
00255
00256
00257 if (eta > 0.) {
00258 mEtaSymPosFtpcN++;
00259 } else {
00260 mEtaSymNegFtpcN++;
00261 }
00262
00263 mGoodFtpcTrackN++;
00264 } else {
00265 return kFALSE;
00266 }
00267
00268 mGoodTrackN++;
00269 return kTRUE;
00270 }
00271
00272
00273
00274 Int_t StFlowCutTrack::CheckTrack(StFlowPicoTrack* pPicoTrack) {
00275
00276
00277 float charge = (float) (pPicoTrack->Charge());
00278 float eta = pPicoTrack->Eta();
00279 float dca = pPicoTrack->Dca();
00280 float dcaGlobal = pPicoTrack->DcaGlobal();
00281 float pt = pPicoTrack->Pt();
00282 float chiSq = pPicoTrack->Chi2();
00283 Int_t nFitPoints = pPicoTrack->FitPts() - 1;
00284 Int_t nMaxPoints = pPicoTrack->MaxPts();
00285 float fitOverMax = (nMaxPoints) ? (float)nFitPoints/(float)nMaxPoints : 0.0;
00286 StTrackTopologyMap map(pPicoTrack->TopologyMap0(), pPicoTrack->TopologyMap1());
00287
00288 if (map.hasHitInDetector(kTpcId) || (map.data(0) == 0 && map.data(1) == 0)) {
00289
00290 mTpcTrackN++;
00291 } else if (map.trackFtpcEast()) {
00292 mFtpcTrackN++;
00293 mFtpcEastTrackN++;
00294 } else if (map.trackFtpcWest()) {
00295 mFtpcTrackN++;
00296 mFtpcWestTrackN++;
00297 }
00298
00299 mTrackN++;
00300
00301 if (map.hasHitInDetector(kTpcId) || (map.data(0) == 0 && map.data(1) == 0)) {
00302
00303
00304
00305 if (mTpcTrackCut) {
00306 mTpcTrackCutN++;
00307 return kFALSE;
00308 }
00309
00310
00311 if (mPtTpcCuts[1] > mPtTpcCuts[0] &&
00312 (pt < mPtTpcCuts[0] || pt >= mPtTpcCuts[1])) {
00313 mPtTpcCutN++;
00314 return kFALSE;
00315 }
00316
00317
00318 if (mChiSqTpcCuts[1] > mChiSqTpcCuts[0] &&
00319 (chiSq < mChiSqTpcCuts[0] || chiSq >= mChiSqTpcCuts[1])) {
00320 mChiSqTpcCutN++;
00321 return kFALSE;
00322 }
00323
00324
00325 if (mFitPtsTpcCuts[1] > mFitPtsTpcCuts[0] &&
00326 (nFitPoints < mFitPtsTpcCuts[0] || nFitPoints >= mFitPtsTpcCuts[1])) {
00327 mFitPtsTpcCutN++;
00328 return kFALSE;
00329 }
00330
00331
00332 if (mFitOverMaxCuts[1] > mFitOverMaxCuts[0] &&
00333 (fitOverMax < mFitOverMaxCuts[0] || fitOverMax >= mFitOverMaxCuts[1])) {
00334 mFitOverMaxTpcCutN++;
00335 mFitOverMaxCutN++;
00336 return kFALSE;
00337 }
00338
00339
00340 if (mEtaTpcCuts[1] > mEtaTpcCuts[0] &&
00341 (eta < mEtaTpcCuts[0] || eta >= mEtaTpcCuts[1])) {
00342 mEtaTpcCutN++;
00343 return kFALSE;
00344 }
00345
00346
00347 if (mChgTpcCuts[1] > mChgTpcCuts[0] &&
00348 (charge < mChgTpcCuts[0] || charge > mChgTpcCuts[1])) {
00349 mChgTpcCutN++;
00350 return kFALSE;
00351 }
00352
00353
00354 if (eta > 0.) {
00355 mEtaSymPosTpcN++;
00356 } else {
00357 mEtaSymNegTpcN++;
00358 }
00359
00360 mGoodTpcTrackN++;
00361 }
00362
00363 else if (map.trackFtpcEast() || map.trackFtpcWest()) {
00364
00365
00366
00367 if (mFtpcTrackCut) {
00368 mFtpcTrackCutN++;
00369 return kFALSE;
00370 }
00371
00372
00373 if (mDcaFtpcCuts[1] > mDcaFtpcCuts[0] &&
00374 (dca < mDcaFtpcCuts[0] || dca >= mDcaFtpcCuts[1])) {
00375 mDcaFtpcCutN++;
00376 return kFALSE;
00377 }
00378
00379
00380 if (mDcaGlobalFtpcCuts[1] > mDcaGlobalFtpcCuts[0] &&
00381 (dcaGlobal < mDcaGlobalFtpcCuts[0] || dcaGlobal >= mDcaGlobalFtpcCuts[1])) {
00382 mDcaGlobalFtpcCutN++;
00383 return kFALSE;
00384 }
00385
00386
00387 if (mPtFtpcCuts[1] > mPtFtpcCuts[0] &&
00388 (pt < mPtFtpcCuts[0] || pt >= mPtFtpcCuts[1])) {
00389 mPtFtpcCutN++;
00390 return kFALSE;
00391 }
00392
00393
00394 if (mChiSqFtpcCuts[1] > mChiSqFtpcCuts[0] &&
00395 (chiSq < mChiSqFtpcCuts[0] || chiSq >= mChiSqFtpcCuts[1])) {
00396 mChiSqFtpcCutN++;
00397 return kFALSE;
00398 }
00399
00400
00401 if (mFitPtsFtpcCuts[1] > mFitPtsFtpcCuts[0] &&
00402 (nFitPoints < mFitPtsFtpcCuts[0] || nFitPoints >= mFitPtsFtpcCuts[1])) {
00403 mFitPtsFtpcCutN++;
00404 return kFALSE;
00405 }
00406
00407
00408 if (mFitOverMaxCuts[1] > mFitOverMaxCuts[0] &&
00409 (fitOverMax < mFitOverMaxCuts[0] || fitOverMax >= mFitOverMaxCuts[1])) {
00410 mFitOverMaxFtpcCutN++;
00411 mFitOverMaxCutN++;
00412 return kFALSE;
00413 }
00414
00415
00416 if ((eta < 0 && mEtaFtpcCuts[1] > mEtaFtpcCuts[0] &&
00417 (eta < mEtaFtpcCuts[0] || eta >= mEtaFtpcCuts[1])) ||
00418 (eta > 0 && mEtaFtpcCuts[3] > mEtaFtpcCuts[2] &&
00419 (eta < mEtaFtpcCuts[2] || eta >= mEtaFtpcCuts[3]))) {
00420 mEtaFtpcCutN++;
00421 return kFALSE;
00422 }
00423
00424
00425 if (mChgFtpcCuts[1] > mChgFtpcCuts[0] &&
00426 (charge < mChgFtpcCuts[0] || charge > mChgFtpcCuts[1])) {
00427 mChgFtpcCutN++;
00428 return kFALSE;
00429 }
00430
00431
00432 if (eta > 0.) {
00433 mEtaSymPosFtpcN++;
00434 } else {
00435 mEtaSymNegFtpcN++;
00436 }
00437
00438 mGoodFtpcTrackN++;
00439 } else {
00440 return kFALSE;
00441 }
00442
00443 mGoodTrackN++;
00444 return kTRUE;
00445 }
00446
00447
00448
00449 Int_t StFlowCutTrack::CheckTrack(StMuTrack* pMuTrack) {
00450
00451
00452 float charge = (float) (pMuTrack->charge());
00453 float eta = pMuTrack->eta();
00454 float dca = pMuTrack->dca().mag();
00455 float dcaGlobal = pMuTrack->dcaGlobal().mag();
00456 float pt = pMuTrack->pt();
00457 float chiSq = pMuTrack->chi2xy();
00458 StTrackTopologyMap map(pMuTrack->topologyMap());
00459 Int_t nFitPoints = pMuTrack->nHitsFit() -
00460 pMuTrack->nHitsFit(kSvtId) -
00461 pMuTrack->nHitsFit(kSsdId) - 1;
00462 Int_t nMaxPoints = pMuTrack->nHitsPoss() -
00463 pMuTrack->nHitsPoss(kSvtId) -
00464 pMuTrack->nHitsPoss(kSsdId) - 1;
00465 float fitOverMax = (nMaxPoints) ? (float)nFitPoints/(float)nMaxPoints : 0.0;
00466
00467 if (map.hasHitInDetector(kTpcId) || (map.data(0) == 0 && map.data(1) == 0)) {
00468
00469 mTpcTrackN++;
00470 } else if (map.trackFtpcEast()) {
00471 mFtpcTrackN++;
00472 mFtpcEastTrackN++;
00473 } else if (map.trackFtpcWest()) {
00474 mFtpcTrackN++;
00475 mFtpcWestTrackN++;
00476 }
00477
00478 mTrackN++;
00479
00480 if (map.hasHitInDetector(kTpcId) || (map.data(0) == 0 && map.data(1) == 0)) {
00481
00482
00483
00484 if (mTpcTrackCut) {
00485 mTpcTrackCutN++;
00486 return kFALSE;
00487 }
00488
00489
00490 if (mPtTpcCuts[1] > mPtTpcCuts[0] &&
00491 (pt < mPtTpcCuts[0] || pt >= mPtTpcCuts[1])) {
00492 mPtTpcCutN++;
00493 return kFALSE;
00494 }
00495
00496
00497 if (mChiSqTpcCuts[1] > mChiSqTpcCuts[0] &&
00498 (chiSq < mChiSqTpcCuts[0] || chiSq >= mChiSqTpcCuts[1])) {
00499 mChiSqTpcCutN++;
00500 return kFALSE;
00501 }
00502
00503
00504 if (mFitPtsTpcCuts[1] > mFitPtsTpcCuts[0] &&
00505 (nFitPoints < mFitPtsTpcCuts[0] || nFitPoints >= mFitPtsTpcCuts[1])) {
00506 mFitPtsTpcCutN++;
00507 return kFALSE;
00508 }
00509
00510
00511 if (mFitOverMaxCuts[1] > mFitOverMaxCuts[0] &&
00512 (fitOverMax < mFitOverMaxCuts[0] || fitOverMax >= mFitOverMaxCuts[1])) {
00513 mFitOverMaxTpcCutN++;
00514 mFitOverMaxCutN++;
00515 return kFALSE;
00516 }
00517
00518
00519 if (mEtaTpcCuts[1] > mEtaTpcCuts[0] &&
00520 (eta < mEtaTpcCuts[0] || eta >= mEtaTpcCuts[1])) {
00521 mEtaTpcCutN++;
00522 return kFALSE;
00523 }
00524
00525
00526 if (mChgTpcCuts[1] > mChgTpcCuts[0] &&
00527 (charge < mChgTpcCuts[0] || charge > mChgTpcCuts[1])) {
00528 mChgTpcCutN++;
00529 return kFALSE;
00530 }
00531
00532
00533 if (eta > 0.) {
00534 mEtaSymPosTpcN++;
00535 } else {
00536 mEtaSymNegTpcN++;
00537 }
00538
00539 mGoodTpcTrackN++;
00540 }
00541
00542 else if (map.trackFtpcEast() || map.trackFtpcWest()) {
00543
00544
00545
00546 if (mFtpcTrackCut) {
00547 mFtpcTrackCutN++;
00548 return kFALSE;
00549 }
00550
00551
00552 if (mDcaFtpcCuts[1] > mDcaFtpcCuts[0] &&
00553 (dca < mDcaFtpcCuts[0] || dca >= mDcaFtpcCuts[1])) {
00554 mDcaFtpcCutN++;
00555 return kFALSE;
00556 }
00557
00558
00559 if (mDcaGlobalFtpcCuts[1] > mDcaGlobalFtpcCuts[0] &&
00560 (dcaGlobal < mDcaGlobalFtpcCuts[0] || dcaGlobal >= mDcaGlobalFtpcCuts[1])) {
00561 mDcaGlobalFtpcCutN++;
00562 return kFALSE;
00563 }
00564
00565
00566 if (mPtFtpcCuts[1] > mPtFtpcCuts[0] &&
00567 (pt < mPtFtpcCuts[0] || pt >= mPtFtpcCuts[1])) {
00568 mPtFtpcCutN++;
00569 return kFALSE;
00570 }
00571
00572
00573 if (mChiSqFtpcCuts[1] > mChiSqFtpcCuts[0] &&
00574 (chiSq < mChiSqFtpcCuts[0] || chiSq >= mChiSqFtpcCuts[1])) {
00575 mChiSqFtpcCutN++;
00576 return kFALSE;
00577 }
00578
00579
00580 if (mFitPtsFtpcCuts[1] > mFitPtsFtpcCuts[0] &&
00581 (nFitPoints < mFitPtsFtpcCuts[0] || nFitPoints >= mFitPtsFtpcCuts[1])) {
00582 mFitPtsFtpcCutN++;
00583 return kFALSE;
00584 }
00585
00586
00587 if (mFitOverMaxCuts[1] > mFitOverMaxCuts[0] &&
00588 (fitOverMax < mFitOverMaxCuts[0] || fitOverMax >= mFitOverMaxCuts[1])) {
00589 mFitOverMaxFtpcCutN++;
00590 mFitOverMaxCutN++;
00591 return kFALSE;
00592 }
00593
00594
00595 if ((eta < 0 && mEtaFtpcCuts[1] > mEtaFtpcCuts[0] &&
00596 (eta < mEtaFtpcCuts[0] || eta >= mEtaFtpcCuts[1])) ||
00597 (eta > 0 && mEtaFtpcCuts[3] > mEtaFtpcCuts[2] &&
00598 (eta < mEtaFtpcCuts[2] || eta >= mEtaFtpcCuts[3]))) {
00599 mEtaFtpcCutN++;
00600 return kFALSE;
00601 }
00602
00603
00604 if (mChgFtpcCuts[1] > mChgFtpcCuts[0] &&
00605 (charge < mChgFtpcCuts[0] || charge > mChgFtpcCuts[1])) {
00606 mChgFtpcCutN++;
00607 return kFALSE;
00608 }
00609
00610
00611 if (eta > 0.) {
00612 mEtaSymPosFtpcN++;
00613 } else {
00614 mEtaSymNegFtpcN++;
00615 }
00616
00617 mGoodFtpcTrackN++;
00618 } else {
00619 return kFALSE;
00620 }
00621
00622 mGoodTrackN++;
00623 return kTRUE;
00624 }
00625
00626
00627
00628 void StFlowCutTrack::PrintCutList() {
00629
00630
00631
00632 cout << "#######################################################" << endl;
00633 cout << "# Track Cut List:" << endl;
00634
00635 if (mTpcTrackCut) {
00636 cout << "# Include Tpc tracks= FALSE :\t\t ";
00637 }
00638 else {
00639 cout << "# Include Tpc tracks= TRUE :\t\t ";
00640 }
00641 cout << setprecision(3) << (float)mTpcTrackCutN/(float)mTrackN/perCent << "%\t ("
00642 << setprecision(3) << (float)mTpcTrackCutN/(float)mTpcTrackN/perCent << "% Tpc) cut" << endl;
00643 cout << "# FitPts (Tpc) cuts= " << mFitPtsTpcCuts[0] << ", " << mFitPtsTpcCuts[1]
00644 << " :\t\t " << setprecision(3) << (float)mFitPtsTpcCutN/(float)mTrackN/perCent
00645 << "%\t (" << setprecision(3) << (float)mFitPtsTpcCutN/(float)mTpcTrackN/perCent << "% Tpc) cut" << endl;
00646 cout << "# FitOverMax cuts= " << mFitOverMaxCuts[0] << ", " << mFitOverMaxCuts[1]
00647 << " :\t " << setprecision(3) << (float)mFitOverMaxCutN/(float)mTrackN/perCent
00648 << "%\t (" << setprecision(3) << (float)mFitOverMaxTpcCutN/(float)mTpcTrackN/perCent << "% Tpc, "
00649 << setprecision(3) << ((mFtpcTrackN == 0)?0.:(float)mFitOverMaxFtpcCutN/(float)mFtpcTrackN/perCent)
00650 << "% Ftpc) cut" << endl;
00651 cout << "# ChiSq (Tpc) cuts= " << mChiSqTpcCuts[0] << ", " << mChiSqTpcCuts[1]
00652 << " :\t\t " << setprecision(3) << (float)mChiSqTpcCutN/(float)mTrackN/perCent
00653 << "%\t (" << setprecision(3) << (float)mChiSqTpcCutN/(float)mTpcTrackN/perCent <<"% Tpc) cut" << endl;
00654 cout << "# Pt (Tpc) cuts= " << mPtTpcCuts[0] << ", " << mPtTpcCuts[1]
00655 << " :\t\t " << setprecision(3) << (float)mPtTpcCutN/(float)mTrackN/perCent
00656 << "%\t (" << setprecision(3) << (float)mPtTpcCutN/(float)mTpcTrackN/perCent <<"% Tpc) cut" << endl;
00657 cout << "# Eta (Tpc) cuts= " << mEtaTpcCuts[0] << ", " << mEtaTpcCuts[1]
00658 << " :\t\t " << setprecision(3) << (float)mEtaTpcCutN/(float)mTrackN/perCent
00659 << "%\t (" << setprecision(3) << (float)mEtaTpcCutN/(float)mTpcTrackN/perCent << "% Tpc) cut" << endl;
00660 cout << "# Chg (Tpc) cuts= " << mChgTpcCuts[0] << ", " << mChgTpcCuts[1]
00661 << " :\t\t " << setprecision(3) << (float)mChgTpcCutN/(float)mTrackN/perCent
00662 << "%\t (" << setprecision(3) << (float)mChgTpcCutN/(float)mTpcTrackN/perCent << "% Tpc) cut" << endl;
00663
00664 if (mFtpcTrackCut) {
00665 cout << "# Include Ftpc tracks= FALSE :\t\t ";
00666 }
00667 else {
00668 cout << "# Include Ftpc tracks= TRUE :\t\t ";
00669 }
00670 cout << setprecision(3) << (float)mFtpcTrackCutN/(float)mTrackN/perCent << "%\t ("
00671 << setprecision(3) << (float)mFtpcTrackCutN/(float)mFtpcTrackN/perCent << "% Ftpc) cut" << endl;
00672 cout << "# FitPts (Ftpc) cuts= " << mFitPtsFtpcCuts[0] << ", " << mFitPtsFtpcCuts[1]
00673 << " :\t\t " << setprecision(3) << (float)mFitPtsFtpcCutN/(float)mTrackN/perCent
00674 << "%\t (" << setprecision(3) << ((mFtpcTrackN == 0)?0.:(float)mFitPtsFtpcCutN/(float)mFtpcTrackN/perCent)
00675 << "% Ftpc) cut" << endl;
00676 cout << "# ChiSq (Ftpc) cuts= " << mChiSqFtpcCuts[0] << ", " << mChiSqFtpcCuts[1]
00677 << " :\t\t " << setprecision(3) << (float)mChiSqFtpcCutN/(float)mTrackN/perCent
00678 << "%\t (" << setprecision(3) << ((mFtpcTrackN == 0)?0.:(float)mChiSqFtpcCutN/(float)mFtpcTrackN/perCent)
00679 << "% Ftpc) cut" << endl;
00680 cout << "# Dca (Ftpc) cuts= " << mDcaFtpcCuts[0] << ", " << mDcaFtpcCuts[1]
00681 << " :\t\t " << setprecision(3) << (float)mDcaFtpcCutN/(float)mTrackN/perCent
00682 << "%\t (" << setprecision(3) << ((mFtpcTrackN == 0)?0.:(float)mDcaFtpcCutN/(float)mFtpcTrackN/perCent)
00683 <<"% Ftpc) cut" << endl;
00684 cout << "# Dca global (Ftpc) cuts= " << mDcaGlobalFtpcCuts[0] << ", " << mDcaGlobalFtpcCuts[1]
00685 << " :\t " << setprecision(3) << (float)mDcaGlobalFtpcCutN/(float)mTrackN/perCent
00686 << "%\t (" << setprecision(3) << ((mFtpcTrackN == 0)?0.:(float)mDcaGlobalFtpcCutN/(float)mFtpcTrackN/perCent)
00687 <<"% Ftpc) cut" << endl;
00688 cout << "# Pt (Ftpc) cuts= " << mPtFtpcCuts[0] << ", " << mPtFtpcCuts[1]
00689 << " :\t\t " << setprecision(3) << (float)mPtFtpcCutN/(float)mTrackN/perCent
00690 << "%\t (" << setprecision(3) << ((mFtpcTrackN == 0)?0.:(float)mPtFtpcCutN/(float)mFtpcTrackN/perCent)
00691 << "% Ftpc) cut" << endl;
00692 cout << "# Eta (Ftpc) cuts= " << mEtaFtpcCuts[0] << ", " << mEtaFtpcCuts[1]
00693 << "; " << mEtaFtpcCuts[2] << ", " << mEtaFtpcCuts[3]
00694 << " :\t " << setprecision(3) << (float)mEtaFtpcCutN/(float)mTrackN/perCent
00695 << "%\t (" << setprecision(3) << ((mFtpcTrackN == 0)?0.:(float)mEtaFtpcCutN/(float)mFtpcTrackN/perCent)
00696 << "% Ftpc) cut" << endl;
00697 cout << "# Chg (Ftpc) cuts= " << mChgFtpcCuts[0] << ", " << mChgFtpcCuts[1]
00698 << " :\t\t " << setprecision(3) << (float)mChgFtpcCutN/(float)mTrackN/perCent
00699 << "%\t (" << setprecision(3) << (float)mChgFtpcCutN/(float)mFtpcTrackN/perCent << "% Ftpc) cut" << endl;
00700 cout << "# Good Tpc Tracks =\t " << (float)mGoodTpcTrackN/(float)mTpcTrackN/perCent
00701 << "%" << endl;
00702 cout << "# Good Ftpc Tracks =\t " << ((mFtpcTrackN == 0)?0.:(float)mGoodFtpcTrackN/(float)mFtpcTrackN/perCent)
00703 << "%" << endl;
00704 cout << "# Good Tracks =\t\t " << (float)mGoodTrackN/(float)mTrackN/perCent
00705 << "%" << endl;
00706 cout << "#######################################################" << endl;
00707
00708 }
00709
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870