26 #include "StMuDSTMaker/COMMON/StMuDst.h"
27 #include "StMuDSTMaker/COMMON/StMuEvent.h"
28 #include "StMuDSTMaker/COMMON/StMuDstMaker.h"
29 #include "StMuDSTMaker/COMMON/StMuEmcCollection.h"
30 #include "StMuDSTMaker/COMMON/StMuEmcUtil.h"
31 #include "StMuDSTMaker/COMMON/StMuTrack.h"
32 #include "StMuDSTMaker/COMMON/StMuPrimaryVertex.h"
34 #include "StEvent/StTriggerId.h"
35 #include "StEvent/StEvent.h"
36 #include "StEventTypes.h"
38 #include "StDetectorDbMaker/StDetectorDbTriggerID.h"
39 #include "StEvent/StL0Trigger.h"
41 #include "StDaqLib/TRG/trgStructures2005.h"
42 #include "StarClassLibrary/StPhysicalHelixD.hh"
45 #include "StEmcUtil/database/StBemcTables.h"
46 #include "StEmcUtil/geometry/StEmcGeom.h"
47 #include "StEmcUtil/projection/StEmcPosition.h"
48 #include "StEmcADCtoEMaker/StBemcData.h"
49 #include "StEmcADCtoEMaker/StEmcADCtoEMaker.h"
50 #include "StEmcRawMaker/StBemcRaw.h"
51 #include "StEmcRawMaker/defines.h"
52 #include "StEmcRawMaker/StBemcTables.h"
53 #include "StEmcTriggerMaker/StEmcTriggerMaker.h"
54 #include "StTriggerUtilities/StTriggerSimuMaker.h"
55 #include "StTriggerUtilities/Bemc/StBemcTriggerSimu.h"
57 #include "StEvent/StBTofHeader.h"
60 #include "StMessMgr.h"
63 #include "StEmcOfflineCalibrationEvent.h"
64 #include "StEmcOfflineCalibrationMaker.h"
82 preshowerSlopes = NULL;
87 StEmcOfflineCalibrationMaker::~StEmcOfflineCalibrationMaker() { }
89 Int_t StEmcOfflineCalibrationMaker::Init()
91 myFile =
new TFile(filename,
"RECREATE");
92 calibTree =
new TTree(
"calibTree",
"BTOW calibration tree");
94 calibTree->Branch(
"event_branch",
"StEmcOfflineCalibrationEvent",&myEvent);
95 calibTree->SetAutoSave(1000000000);
97 muDstMaker =
dynamic_cast<StMuDstMaker*
>(GetMaker(
"MuDst")); assert(muDstMaker);
98 mADCtoEMaker =
dynamic_cast<StEmcADCtoEMaker*
>(GetMaker(
"Eread")); assert(mADCtoEMaker);
99 emcTrigSimu =
dynamic_cast<StTriggerSimuMaker*
>(GetMaker(
"StarTrigSimu")); assert(emcTrigSimu);
101 mTables = mADCtoEMaker->getBemcData()->getTables();
102 mEmcGeom = StEmcGeom::instance(
"bemc");
103 mSmdEGeom=StEmcGeom::instance(
"bsmde");
104 mSmdPGeom=StEmcGeom::instance(
"bsmdp");
106 return StMaker::Init();
109 Int_t StEmcOfflineCalibrationMaker::InitRun(Int_t run)
111 mHT0threshold = emcTrigSimu->bemc->barrelHighTowerTh(0);
112 mHT1threshold = emcTrigSimu->bemc->barrelHighTowerTh(1);
113 mHT2threshold = emcTrigSimu->bemc->barrelHighTowerTh(2);
114 mHT3threshold = emcTrigSimu->bemc->barrelHighTowerTh(3);
116 LOG_INFO <<
"HT thresholds: " << mHT0threshold <<
" " << mHT1threshold <<
" " << mHT2threshold <<
" " << mHT3threshold << endm;
119 towerSlopes =
new TH2F(
"towerSlopes",
"ADC vs. towerID",4800,0.5,4800.5,250,-49.5,200.5);
120 preshowerSlopes =
new TH2F(
"preshowerSlopes",
"ADC vs. cap vs. towerID",4800,0.5,4800.5,500,-49.5,450.5);
121 smdeSlopes=
new TH2F(
"smdeSlopes",
"ADC vs. stripID",18000,0.5,18000.5,1223,-199.5,1023.5);
122 smdpSlopes=
new TH2F(
"smdpSlopes",
"ADC vs. stripID",18000,0.5,18000.5,1223,-199.5,1023.5);
123 mapcheck =
new TH2F(
"mapcheck",
"Track Projection vs EMC hit",4800,0.5,4800.5,4800,0.5,4800.5);
126 Float_t pedestal, rms;
129 for (Int_t
id=1;
id<=4800;
id++){
130 mTables->getPedestal(BTOW,
id, 0, pedestal, rms);
131 mTables->getStatus(BTOW,
id, pedstatus,
"pedestal");
132 mTables->getStatus(BTOW,
id, status);
133 mPedestal[BTOW-1][
id-1] = pedestal;
134 mPedRMS[BTOW-1][
id-1] = rms;
135 mStatus[BTOW-1][
id-1] = status*pedstatus;
137 mTables->getPedestal(BPRS,
id, 0, pedestal, rms);
138 mTables->getStatus(BPRS,
id, status);
139 mPedestal[BPRS-1][
id-1] = pedestal;
140 mPedRMS[BPRS-1][
id-1] = rms;
141 mStatus[BPRS-1][
id-1] = status;
144 for(Int_t sid=1;sid<=18000;sid++){
145 mTables->getPedestal(BSMDE, sid, 0, pedestal, rms);
146 mTables->getStatus(BSMDE, sid, status);
147 mPedestalSmd[BSMDE-3][sid-1] = pedestal;
148 mPedRMSSmd[BSMDE-3][sid-1] = rms;
149 mStatusSmd[BSMDE-3][sid-1] = status;
151 mTables->getPedestal(BSMDP, sid, 0, pedestal, rms);
152 mTables->getStatus(BSMDP, sid, status);
153 mPedestalSmd[BSMDP-3][sid-1] = pedestal;
154 mPedRMSSmd[BSMDP-3][sid-1] = rms;
155 mStatusSmd[BSMDP-3][sid-1] = status;
158 LOG_INFO <<
"StEmcOfflineCalibrationMaker::Init() == kStOk" << endm;
159 return StMaker::InitRun(run);
164 LOG_DEBUG<<
"StEmcOfflineCalibrationMaker::Make()"<<endm;
168 StRunInfo* runInfo = &(
event->runInfo()); assert(runInfo);
170 LOG_DEBUG <<
"General pointer assertions okay" << endm;
173 Bool_t fillQA = (runInfo->beamFillNumber(blue)==runInfo->beamFillNumber(yellow));
175 myEvent->setFill((Int_t)runInfo->beamFillNumber(blue));
178 myEvent->setRunNum(event->runNumber());
179 myEvent->setEventId(event->eventNumber());
180 myEvent->setDate(GetDate());
181 myEvent->setTime(GetTime());
182 myEvent->setHighTowerTh(0, mHT0threshold);
183 myEvent->setHighTowerTh(1, mHT1threshold);
184 myEvent->setHighTowerTh(2, mHT2threshold);
185 myEvent->setHighTowerTh(3, mHT3threshold);
188 mEmcCollection = mADCtoEMaker->getEmcCollection();
189 for(Int_t p=0;p<2;p++)
190 for(Int_t q=0;q<18000;q++)
197 for(Int_t
id=1;
id<=4800;
id++){
198 if((mADC[BTOW-1][
id-1] != 0))
199 towerSlopes->Fill(
id,mADC[BTOW-1][
id-1]-mPedestal[BTOW-1][
id-1]);
200 if(mADC[BPRS-1][
id-1] != 0 && mCapacitor[
id-1]!= CAP1 && mCapacitor[
id-1]!=CAP2)
201 preshowerSlopes->Fill(
id, mADC[BPRS-1][
id-1]-mPedestal[BPRS-1][
id-1]);
204 for(Int_t
id=1;
id<=18000;
id++){
205 if((mADCSmd[BSMDE-3][
id-1] != 0) && mCapacitorSmd[BSMDE-3][
id-1] != CAP1 && mCapacitorSmd[BSMDE-3][
id-1] != CAP2)
206 smdeSlopes->Fill(
id,mADCSmd[BSMDE-3][
id-1]);
207 if(mADCSmd[BSMDP-3][
id-1] != 0 && mCapacitorSmd[BSMDP-3][
id-1] != CAP1 && mCapacitorSmd[BSMDP-3][
id-1] != CAP2)
208 smdpSlopes->Fill(
id, mADCSmd[BSMDP-3][
id-1]);
211 LOG_DEBUG <<
"Got ADCs" << endm;
214 for(UInt_t htTrig = 0; htTrig < htTriggers.size(); ++htTrig){
215 Int_t trigId = htTriggers.at(htTrig);
218 if (event->triggerIdCollection().nominal().isTrigger(trigId) || emcTrigSimu->isTrigger(trigId) > 0){
220 myTrigger->setTrigId(trigId);
223 if (event->triggerIdCollection().nominal().isTrigger(trigId))
224 myTrigger->setDidFire(
true);
226 myTrigger->setDidFire(
false);
229 if (emcTrigSimu->isTrigger(trigId) > 0)
230 myTrigger->setShouldFire(
true);
232 myTrigger->setShouldFire(
false);
239 Double_t mField = evtSummary.magneticField()/10;
242 vector<Int_t> track_ids;
244 Int_t nPrimVerts = muDst->numberOfPrimaryVertices();
246 for(Int_t iVertex=0; iVertex < nPrimVerts; ++iVertex){
247 if (iVertex > 9)
continue;
251 if (muVertex->ranking() < 0)
continue;
253 myVertex->setRanking(muVertex->ranking());
254 myVertex->setX(muVertex->position().x());
255 myVertex->setY(muVertex->position().y());
256 myVertex->setZ(muVertex->position().z());
261 Int_t nPrimTracks = muDst->numberOfPrimaryTracks();
262 pair<UInt_t, pair<Float_t,Float_t> > smd_eta_center;
263 pair<UInt_t, pair<Float_t,Float_t> > smd_phi_center;
265 for(Int_t iTrack = 0; iTrack < nPrimTracks; ++iTrack){
270 if(!track)track = primarytrack;
274 pair<UInt_t, pair<Float_t,Float_t> > center_tower;
276 p = outerhelix.momentum(mField*tesla).mag();
277 center_tower = getTrackTower(track,
false,1);
278 smd_eta_center=getTrackTower(track,
false,3);
279 smd_phi_center=getTrackTower(track,
false,4);
282 Int_t
id = center_tower.first;
283 Int_t exitid = (getTrackTower(track,
true)).first;
285 if (
id == 0)
continue;
286 if (p < 1.)
continue;
289 myVertex->addTrack(myTrack);
290 myTrack->setFlag(track->
flag());
291 myTrack->setBad(track->bad());
292 myTrack->setCharge(track->
charge());
293 myTrack->setEta(track->
eta());
294 myTrack->setPhi(track->
phi());
295 myTrack->setVertexIndex(vertIndex);
296 myTrack->setMomentum(outerhelix.momentum(mField*tesla));
298 if (
id == exitid)track_ids.push_back(
id);
299 Int_t etaid=smd_eta_center.first;
300 Int_t phiid=smd_phi_center.first;
301 LOG_DEBUG<<
"using track projection to the SMD, we get strips eta: "<<etaid<<
" and phi: "<<phiid<<endm;
305 smdeids[1] = mEmcPosition->getNextId(3,etaid,1,0);
306 smdeids[2] = mEmcPosition->getNextId(3,etaid,2,0);
307 smdeids[3] = mEmcPosition->getNextId(3,etaid,3,0);
308 smdeids[4] = mEmcPosition->getNextId(3,etaid,4,0);
309 smdeids[5] = mEmcPosition->getNextId(3,etaid,5,0);
310 smdeids[6] = mEmcPosition->getNextId(3,etaid,-1,0);
311 smdeids[7] = mEmcPosition->getNextId(3,etaid,-2,0);
312 smdeids[8] = mEmcPosition->getNextId(3,etaid,-3,0);
313 smdeids[9] = mEmcPosition->getNextId(3,etaid,-4,0);
314 smdeids[10] = mEmcPosition->getNextId(3,etaid,-5,0);
316 for(Int_t i = 0; i < 11; i++){
317 myTrack->setSmdeId(i,smdeids[i]);
318 myTrack->setSmdeAdc(i,mADCSmd[0][smdeids[i]-1]);
319 myTrack->setSmdeStatus(i,mStatusSmd[0][smdeids[i]-1]);
320 myTrack->setSmdePedestal(i,mPedestalSmd[0][smdeids[i]-1]);
321 myTrack->setSmdePedestalRms(i,mPedRMSSmd[0][smdeids[i]-1]);
324 for(Int_t i=0;i<11;i++){
325 myTrack->setSmdeId(i,0);
326 myTrack->setSmdeAdc(i,0);
327 myTrack->setSmdeStatus(i,0);
328 myTrack->setSmdePedestal(i,0.);
329 myTrack->setSmdePedestalRms(i,0.);
335 smdpids[1] = mEmcPosition->getNextId(4,phiid,0,1);
336 smdpids[2] = mEmcPosition->getNextId(4,phiid,0,2);
337 smdpids[3] = mEmcPosition->getNextId(4,phiid,0,3);
338 smdpids[4] = mEmcPosition->getNextId(4,phiid,0,4);
339 smdpids[5] = mEmcPosition->getNextId(4,phiid,0,5);
340 smdpids[6] = mEmcPosition->getNextId(4,phiid,0,-1);
341 smdpids[7] = mEmcPosition->getNextId(4,phiid,0,-2);
342 smdpids[8] = mEmcPosition->getNextId(4,phiid,0,-3);
343 smdpids[9] = mEmcPosition->getNextId(4,phiid,0,-4);
344 smdpids[10] = mEmcPosition->getNextId(4,phiid,0,-5);
346 for(Int_t i = 0; i < 11; i++){
347 myTrack->setSmdpId(i,smdpids[i]);
348 myTrack->setSmdpAdc(i,mADCSmd[1][smdpids[i]-1]);
349 myTrack->setSmdpStatus(i,mStatusSmd[1][smdpids[i]-1]);
350 myTrack->setSmdpPedestal(i,mPedestalSmd[1][smdpids[i]-1]);
351 myTrack->setSmdpPedestalRms(i,mPedRMSSmd[1][smdpids[i]-1]);
354 for(Int_t i=0;i<11;i++){
355 myTrack->setSmdpId(i,0);
356 myTrack->setSmdpAdc(i,0);
357 myTrack->setSmdpStatus(i,0);
358 myTrack->setSmdpPedestal(i,0.);
359 myTrack->setSmdpPedestalRms(i,0.);
366 softid[1] = mEmcPosition->getNextTowerId(
id,-1,-1);
367 softid[2] = mEmcPosition->getNextTowerId(
id,0,-1);
368 softid[3] = mEmcPosition->getNextTowerId(
id,1,-1);
369 softid[4] = mEmcPosition->getNextTowerId(
id,-1,0);
370 softid[5] = mEmcPosition->getNextTowerId(
id,1,0);
371 softid[6] = mEmcPosition->getNextTowerId(
id,-1,1);
372 softid[7] = mEmcPosition->getNextTowerId(
id,0,1);
373 softid[8] = mEmcPosition->getNextTowerId(
id,1,1);
376 for(Int_t tower = 0; tower < 9; ++tower){
377 myTrack->setTowerId(tower, softid[tower]);
378 if (tower > 0 && softid[tower] == 0){
379 myTrack->setTowerAdc(tower,0);
380 myTrack->setTowerStatus(tower,0);
381 myTrack->setTowerPedestal(tower,0.);
382 myTrack->setTowerPedestalRms(tower,0.);
383 myTrack->setPreshowerAdc(tower,0);
384 myTrack->setPreshowerStatus(tower,0);
385 myTrack->setPreshowerPedestal(tower,0.);
386 myTrack->setPreshowerPedestalRms(tower,0.);
389 myTrack->setTowerAdc(tower, mADC[BTOW-1][softid[tower]-1]);
390 myTrack->setTowerPedestal(tower, mPedestal[BTOW-1][softid[tower]-1]);
391 myTrack->setTowerPedestalRms(tower, mPedRMS[BTOW-1][softid[tower]-1]);
392 myTrack->setTowerStatus(tower, mStatus[BTOW-1][softid[tower]-1]);
393 myTrack->setPreshowerAdc(tower, mADC[BPRS-1][softid[tower]-1]);
394 myTrack->setPreshowerPedestal(tower, mPedestal[BPRS-1][softid[tower]-1]);
395 myTrack->setPreshowerPedestalRms(tower, mPedRMS[BPRS-1][softid[tower]-1]);
396 myTrack->setPreshowerStatus(tower, mStatus[BPRS-1][softid[tower]-1]);
397 myTrack->setPreshowerCap(tower, mCapacitor[softid[tower]-1]);
401 myTrack->setDeta(center_tower.second.first);
402 myTrack->setDphi(center_tower.second.second);
403 myTrack->setTowerExitId((getTrackTower(track,
true)).first);
404 myTrack->setHighestNeighbor(highestNeighbor(softid[0]));
411 myTrack->setNHits(track->
nHits());
412 myTrack->setNFitPoints(track->
nHitsFit());
413 myTrack->setNDedxPoints(track->
nHitsDedx());
414 myTrack->setNHitsPossible(track->
nHitsPoss());
415 myTrack->setDeDx(track->
dEdx());
436 for(Int_t i = 0; i < 4800; i++){
437 if((mADC[BTOW-1][i]-mPedestal[BTOW-1][i]) < 5 || (mADC[BTOW-1][i]-mPedestal[BTOW-1][i]) > 100)
continue;
438 for(UInt_t j = 0; j < track_ids.size(); j++){
439 mapcheck->Fill(track_ids[j],i+1);
445 LOG_DEBUG <<
"StEmcOfflineCalibrationMaker::Make() == kStOk" << endm;
453 for(Int_t i=0; i<2; i++){
454 for(Int_t j=0; j<4800; j++){
458 for(Int_t i=0; i<2; i++){
459 for(Int_t j=0; j<18000; j++){
474 void StEmcOfflineCalibrationMaker::getADCs(Int_t det)
477 StDetectorId detectorid =
static_cast<StDetectorId
>(kBarrelEmcTowerId + det);
478 StEmcDetector* detector=mEmcCollection->detector(detectorid);
480 for(Int_t m=1;m<=120;m++){
483 StSPtrVecEmcRawHit& rawHit=module->hits();
484 for(UInt_t k=0;k<rawHit.size();k++){
486 Int_t module = rawHit[k]->module();
487 Int_t eta = rawHit[k]->eta();
488 Int_t submodule = TMath::Abs(rawHit[k]->sub());
489 Int_t ADC = rawHit[k]->adc();
492 if(det<2) stat = mEmcGeom->getId(module,eta,submodule,hitid);
493 else if(det==2) stat=mSmdEGeom->getId(module,eta,submodule,hitid);
494 else if(det==3) stat=mSmdPGeom->getId(module,eta,submodule,hitid);
495 if(det == 0 && stat == 0){
496 Int_t adc6 = emcTrigSimu->bemc->barrelHighTowerAdc(hitid);
497 myEvent->setHighTowerAdc(hitid,adc6);
500 if(det<2) mADC[det][hitid-1] = ADC;
502 mADCSmd[det-2][hitid-1]=ADC;
506 UChar_t CAP = rawHit[k]->calibrationType();
507 if(CAP > 127) CAP -= 128;
508 mCapacitor[hitid-1] = CAP;
511 UChar_t CAP=rawHit[k]->calibrationType();
512 if(CAP>127) CAP-=128;
513 mCapacitorSmd[det-2][hitid-1]=CAP;
518 else { LOG_WARN<<
"couldn't find StEmcModule "<<m<<
" for detector "<<det<<endm; }
521 else { LOG_WARN<<
"couldn't find StEmcDetector for detector "<<det<<endm; }
524 pair<Int_t, pair<Float_t,Float_t> > StEmcOfflineCalibrationMaker::getTrackTower(
const StMuTrack*
track, Bool_t useExitRadius, Int_t det){
525 pair<Int_t, pair<Float_t,Float_t> > tower;
527 tower.second.first = 1000.;
528 tower.second.second = 1000.;
532 if(det==1) radius = mEmcGeom->Radius();
533 if(det==2) radius = mEmcGeom->Radius();
534 if(det==3) radius = mSmdEGeom->Radius();
535 if(det==4) radius = mSmdPGeom->Radius();
538 Double_t mField = evtSummary.magneticField()/10;
541 if(useExitRadius) radius += 30.0;
543 bool goodProjection = mEmcPosition->trackOnEmc(&position,&momentum,track,mField,radius);
546 Float_t eta=position.pseudoRapidity();
547 Float_t phi=position.phi();
549 mEmcGeom->getBin(phi,eta,m,e,s);
552 if(mEmcGeom->getId(m,e,s,
id)==0){
554 tower.second = getTrackDetaDphi(eta, phi,
id, det);
558 Int_t check=mSmdEGeom->getBin(phi,eta,m,e,s);
561 if(mSmdEGeom->getId(m,e,s,
id)==0){
563 tower.second = getTrackDetaDphi(eta, phi,
id, det);
568 Int_t check=mSmdPGeom->getBin(phi,eta,m,e,s);
571 if(mSmdPGeom->getId(m,e,s,
id)==0){
573 tower.second = getTrackDetaDphi(eta, phi,
id, det);
582 pair<Float_t,Float_t> StEmcOfflineCalibrationMaker::getTrackDetaDphi(Float_t track_eta, Float_t track_phi, Int_t
id, Int_t det){
583 Float_t eta_tower, phi_tower;
584 eta_tower = phi_tower = -999.;
585 pair<Float_t, Float_t> dtow;
587 mEmcGeom->getEtaPhi(
id,eta_tower,phi_tower);
590 Float_t dphi = phi_tower - track_phi;
591 while(dphi > M_PI) {dphi -= 2.0 * M_PI;}
592 while(dphi < -1.*M_PI) {dphi += 2.0 * M_PI;}
594 dtow.first = eta_tower - track_eta;
598 mSmdEGeom->getEtaPhi(
id,eta_tower,phi_tower);
601 Float_t dphi = phi_tower - track_phi;
602 while(dphi > M_PI) {dphi -= 2.0 * M_PI;}
603 while(dphi < -1.*M_PI) {dphi += 2.0 * M_PI;}
605 dtow.first = eta_tower - track_eta;
609 mSmdPGeom->getEtaPhi(
id,eta_tower,phi_tower);
612 Float_t dphi = phi_tower - track_phi;
613 while(dphi > M_PI) {dphi -= 2.0 * M_PI;}
614 while(dphi < -1.*M_PI) {dphi += 2.0 * M_PI;}
616 dtow.first = eta_tower - track_eta;
622 Double_t StEmcOfflineCalibrationMaker::highestNeighbor(Int_t
id){
625 for(Int_t deta=-1; deta<=1; deta++){
626 for(Int_t dphi=-1; dphi<=1; dphi++){
627 if(deta==0 && dphi==0)
continue;
628 Int_t nextId = mEmcPosition->getNextTowerId(
id,deta,dphi);
629 if(nextId<1 || nextId>4800)
continue;
630 if((mADC[BTOW-1][nextId-1]-mPedestal[BTOW-1][nextId-1]) > nSigma*mPedRMS[BTOW-1][nextId-1]){
631 nSigma = (mADC[BTOW-1][nextId-1] - mPedestal[BTOW-1][nextId-1])/mPedRMS[BTOW-1][nextId-1];
638 void StEmcOfflineCalibrationMaker::addHighTowerTrigger(UInt_t trigId){
639 htTriggers.push_back(trigId);
static StMuPrimaryVertex * primaryVertex()
return pointer to current primary vertex
UShort_t nHitsDedx() const
Return number of hits used for dEdx.
UShort_t nHitsFit() const
Return total number of hits used in fit.
short flag() const
Returns flag, (see StEvent manual for type information)
Short_t charge() const
Returns charge.
Double_t nSigmaPion() const
Returns Craig's distance to the calculated dE/dx band for pions in units of sigma.
Double_t eta() const
Returns pseudo rapidity at point of dca to primary vertex.
virtual void Clear(Option_t *option="")
User defined functions.
static TObjArray * primaryTracks()
returns pointer to a list of tracks belonging to the selected primary vertex
Double_t nSigmaElectron() const
Returns Craig's distance to the calculated dE/dx band for electrons in units of sigma.
UShort_t nHitsPoss() const
Return number of possible hits on track.
static StMuEvent * event()
returns pointer to current StMuEvent (class holding the event wise information, e.g. event number, run number)
UShort_t nHits() const
Bingchu.
Double_t dEdx() const
Returns measured dE/dx value.
Double_t phi() const
Returns phi at point of dca to primary vertex.
Double_t nSigmaProton() const
Returns Craig's distance to the calculated dE/dx band for protons in units of sigma.
const StMuTrack * globalTrack() const
Returns pointer to associated global track. Null pointer if no global track available.
Double_t nSigmaKaon() const
Returns Craig's distance to the calculated dE/dx band for kaons in units of sigma.
StPhysicalHelixD outerHelix() const
Returns outer helix (last measured point)
static void setVertexIndex(Int_t vtx_id)
Set the index number of the current primary vertex (used by both primaryTracks() functions and for St...