StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
BarrelMipCalib.cxx
1 #ifdef __APPLE__
2 #include <sys/types.h>
3 #endif
4 #include <TH1F.h>
5 #include <TH2F.h>
6 #include <TObjArray.h>
7 #include <TGraph.h>
8 #include <TVector2.h>
9 
10 #include "BarrelMipCalib.h"
11 #include "StJanBarrelDbMaker.h"
12 #include "JanBarrelEvent.h"
13 
14 #include "StEmcUtil/geometry/StEmcGeom.h"
15 
16 #include "StMuDSTMaker/COMMON/StMuEvent.h"
17 #include "StMuDSTMaker/COMMON/StMuDst.h"
18 #include "StMuDSTMaker/COMMON/StMuDstMaker.h"
19 #include "StMuDSTMaker/COMMON/StMuPrimaryVertex.h"
20 #include "StMuDSTMaker/COMMON/StMuTrack.h"
21 #include "StThreeVectorF.hh"
22 #include "StThreeVectorD.hh"
23 
24 
25 //________________________________________________
26 //________________________________________________
27 BarrelMipCalib::BarrelMipCalib( TObjArray *HList, StJanBarrelDbMaker* jdb, StMuDstMaker *mumk){
28  mJanDbMaker=jdb; assert(mJanDbMaker);
29  muMaker=mumk; assert(muMaker);
30 
31  assert(HList);
32  memset(hA,0,sizeof(hA));
33 
34 
35  hA[0]=new TH1F("mipStat","Mip calib statistics; case",30,-0.5,29.5);
36  hA[1]=new TH1F("mipZver","primary (smalest) vertez Z ; vertx Z (cm)",200,-200,200);
37  hA[2]=new TH1F("mipTrPt","primTr pT; pT (GeV/c)",100,0,20);
38  hA[3]=new TH1F("mipTrEta","primTr Eta ; pseudorapidity",100,-2,2);
39  hA[4]=new TH1F("mipTrNff","primTr nFit/nPos ; nFit/nPos",20,0,1.1);
40 
41  int nx=600, ny=720;
42  hA[5]=new TH2F("mipTrRZ1","primTr punch BPRS ; Z @ BPRS (cm); phi @ BPRS (rad)",nx,-300,300,ny,0,2*C_PI);
43  hA[6]=new TH2F("mipTrRZ21","primTr punch BTOW L=21, input; Z @ BTOW layer=21 (cm); phi @ BPRS (rad)",nx,-300,300,ny,0,2*C_PI);
44  hA[7]=new TH2F("mipTrRZf","primTr in BPRS fiducial ; Z @ BPRS (cm); phi @ BPRS (rad)",nx,-300,300,ny,0,2*C_PI);
45 
46  hA[8]=new TH2F("mipDeDx","primTr TPC deDx; track momentum (GeV); TPC dEdX (keV)", 100,0,5,100,0, 20);
47 
48  hA[9]=new TH1F("rankZver","highest rank primary vertez Z ; vertx Z (cm)",200,-200,200);
49 
50  hA[10]=new TH1F("mipRxyTr","primTr Rxy of last point on the track; Rxy (cm)",220,0,220);
51  int nb=200;
52  float adc1=-50;
53  float adc2=adc1+nb;
54 
55  //free 11
56  hA[12]=new TH1F("mipTrTw","tower pointed by accepted prim track; BPRS softID",mxBtow,0.5, mxBtow+0.5);
57  // accepted events plots
58  hA[13]=new TH1F("mipZverAc","primary vertez Z , accepted; vertx Z (cm)",200,-200,200);
59  hA[14]=new TH1F("mipTrPtAc","primTr pT, accepted; pT (GeV/c)",100,0,20);
60  hA[15]=new TH1F("mipTrPAc","primTr p, accepted; momentum (GeV)",100,0,20);
61 
62  // disable to de-activate swapSkan
63  // hA[16]=new TH2F("swapScan","BTOW tile pointed by MIP vs. tiles with MIP-like ADC ; softID if ADC=MIP; ID of track-tower",mxBtow,0.5, mxBtow+0.5,mxBtow,0.5, mxBtow+0.5);
64  // 19 free
65  hA[17]=new TH1F("mipTrZf","primTr in BPRS fiducial ; Z @ BPRS (cm)",1800,-300,300);
66  hA[18]=new TH1F("mipTrRf","primTr in BPRS fiducial , z>0; phi @ BPRS (rad)",3600,0,2*C_PI);
67 
68  hA[20]=new TH1F("mipMaZ1","Z distance of track from both tower Z-edges; delZ (cm)", 250,-5,20);
69  hA[21]=new TH1F("mipMaP1","R*phi distance of track from tower edge; delR*phi (cm)", 200,-10,10);
70 
71  hA[22]=new TH2F("mipBprsTr","ADC for BPRS pointed by TPC MIP track; BPRS softID; rawADC-ped",mxBtow,0.5,mxBtow+0.5, nb,adc1,adc2);
72  hA[23]=new TH2F("mipBprsTrBt","ADC for BPRS pointed by TPC MIP track + BTOW=MIP; BPRS softID; rawADC-ped",mxBtow,0.5,mxBtow+0.5, nb,adc1,adc2);
73 
74  hA[24]=new TH2F("mipBtowTr","ADC for BTOW pointed by TPC track; BTOW softID; rawADC-ped",mxBtow,0.5,mxBtow+0.5, nb,adc1,adc2);
75  hA[25]=new TH2F("mipBtowTrPr","ADC for BTOW pointed by TPC track+BPRS=MIP; BTOW softID; rawADC-ped",mxBtow,0.5,mxBtow+0.5, nb,adc1,adc2);
76 
77 
78 
79  for(int i=0;i<mxH;i++)
80  if(hA[i]) HList->Add(hA[i]);
81 }
82 
83 
84 
85 
86 //________________________________________________
87 //________________________________________________
88 void BarrelMipCalib::search( JanBarrelEvent &fullEve){
89 
90  // Access to muDst .......................
91  StMuEvent* muEve = muMaker->muDst()->event();
92  int nPrimV=muMaker->muDst()->numberOfPrimaryVertices();
93  hA[0]->Fill(0);
94 
95 #if 0
96  StMuTriggerIdCollection &tic=muEve->triggerIdCollection();
97  int trigID=96211;
98  bool fired=tic.nominal().isTrigger(trigID);
99 #endif
100 
101  printf("\nmipCalib eventID %d nPrimV=%d =============\n", muEve->eventId(),nPrimV);
102  if(nPrimV<=0) return;
103  hA[0]->Fill(1);
104 
105 
106  int nPrimTr =0;
107 
108  // find vertex with smalest Z - to compensate for PPV error in FMS-production
109 
110  int iVert=-1;
111  float zVert=99999;
112 
113  for(int iv=0;iv<nPrimV;iv++) {
114  StMuPrimaryVertex* V= muMaker->muDst()->primaryVertex(iv);
115  assert(V);
116  if(V->ranking()<0.) continue; //drop vertices with too few matched tracks
117  muMaker->muDst()->setVertexIndex(iv);
118  const StThreeVectorF &r=V->position();
119  const StThreeVectorF &er=V->posError();
120  if(iv==0) hA[9]->Fill(r.z()); // histo only highe rank vertex
121 #if 0
122  cout << "\nPrimary track " << nPrimTr << " momentum " << pr_track->p() << endl; cout << "\t flag=" << pr_track->flag() << " nHits=" << pr_track->nHits()<< " vertID="<< pr_track->vertexIndex()<< endl;
123  cout << "\t primV("<<iv<<") primDCA=" << pr_track->dca(iv) << ", pT="<< pr_track->pt()<< endl;
124  if(pr_track->dca(iv).mag()>5) cout << "^^^^^ 3D DCA magnitude="<<pr_track->dca(iv).mag()<<endl;
125  cout << "\t first point " << pr_track->firstPoint() << endl;
126  cout << "\t last point " << pr_track->lastPoint() << endl;
127 #endif
128 
129 
130  printf("iv=%d Vz=%.2f +/-%.2f bestZ=%f\n",iv,r.z(),er.z() ,zVert );
131 
132  if( fabs(zVert)< fabs(r.z())) continue;
133  zVert=r.z();
134  iVert=iv;
135  }
136 
137  // printf("iVert=%d\n",iVert);
138  if(iVert<0) return; // non of vertices has positive rank
139 
140  hA[1]->Fill(zVert);
141  if(fabs(zVert) > cut_zVertex) return; // drop if too large Z
142  hA[0]->Fill(2);
143 
144  printf("pick zVert=%f iV=%d\n", zVert,iVert);
145 
146  muMaker->muDst()->setVertexIndex(iVert);
147  Int_t nPrimTrAll=muMaker->muDst()->GetNPrimaryTrack();
148  for(int itr=0;itr<nPrimTrAll;itr++) {
149  StMuTrack *pr_track=muMaker->muDst()->primaryTracks(itr);
150  assert(pr_track->vertexIndex()==iVert);
151  if(pr_track->flag()<=0) continue;
152  if(pr_track->flag() != 301) continue; // use TPC-only tracks
153 
154  hA[0]->Fill(10);
155  hA[2]->Fill(pr_track->pt());
156  if(pr_track->pt()< cut_primPt) continue;
157 
158  hA[0]->Fill(11);
159  hA[3]->Fill(pr_track->eta());
160  if(fabs(pr_track->eta())> cut_primEta) continue;
161 
162  hA[0]->Fill(12);
163  float dedx=pr_track->dEdx()*1e6;
164  float mom= pr_track->p().mag();
165  // printf("xxx %f %f\n", dedx,mom);
166  hA[8]->Fill(mom,dedx);
167 
168  if(dedx<1.5) continue;
169  if(dedx>cut_dedx) continue;
170 
171  hA[0]->Fill(13);
172 
173  const StMuTrack* globTr= pr_track->globalTrack();
174 
175  assert(globTr);
176  assert(globTr->flag()>0);
177  float nFF=(1.*globTr->nHitsFit())/ globTr->nHitsPoss();
178  hA[4]->Fill(nFF);
179  if(nFF< cut_nFitFrac) continue;
180  hA[0]->Fill(14);
181 
182  float Rxy=globTr->lastPoint().perp();
183  hA[10]->Fill(Rxy);
184  if(Rxy<cut_primRxy) continue;
185  hA[0]->Fill(15);
186 
187  StPhysicalHelixD TrkHlx=globTr->outerHelix();
188 
189  const int mxPL=2; // # of Radii to be tested
190  float RxyA[mxPL]={225.4, 248.4};// cm
191 
192  int softID=-888;
193  StThreeVectorD pos3D;
194  float posPhi=888;
195  for(int ipl=0;ipl<mxPL;ipl++) { //..... top & botom of the Barrel tile
196  float Rbprs= RxyA[ipl];
197  pairD d2;
198  d2 = TrkHlx.pathLength(Rbprs);
199  printf(" path ipl=%d =%f, 2=%f, period=%f, trR=%f\n",ipl, d2.first ,d2.second,TrkHlx.period(),1./TrkHlx.curvature());
200  if(d2.first>=0 || d2.second<=0) {
201  LOG_WARN<< Form("extrapolateTrk , unexpected solution for track crossing BPRS\n d2.firts=%f, second=%f, track ignored", d2.first, d2.second)<<endm;
202  continue;
203  }
204 
205  pos3D = TrkHlx.at(d2.second);
206  double xmagn = ::sqrt( pos3D.x()*pos3D.x() + pos3D.y()*pos3D.y() );
207  printf(" punchBPRS x,y,z=%.1f, %.1f, %.1f, Rxy=%.1f eta=%.2f\n",pos3D.x(),pos3D.y(),pos3D.z(),xmagn, globTr->eta());
208 
209  int softIDx;
210  int ierr= mJanDbMaker->mBprsGeom->getId(pos3D.phi(),pos3D.pseudoRapidity(),softIDx);
211  printf("hit tower id=%d, ierr=%d ipl=%d\n",softIDx, ierr,ipl);
212 
213  posPhi=atan2(pos3D.y(),pos3D.x());
214  if(posPhi<0) posPhi+=2*C_PI;
215  hA[5+ipl]->Fill(pos3D.z(),posPhi);
216  if(ierr) break; // do not try another depth for this track
217  assert(softIDx>0 && softIDx<=mxBtow);
218 
219  if(ipl==0) { // BPRS layer
220  hA[0]->Fill(16);
221  if(!checkFiducial(pos3D.z(),posPhi,softIDx, Rbprs)) break; // to close to the edge
222  softID=softIDx;
223  hA[0]->Fill(17);
224  } else {
225  hA[0]->Fill(18);
226  if(softID!=softIDx) softID=-999;
227  hA[0]->Fill(19);
228  if(!checkFiducial(pos3D.z(),posPhi,softIDx, Rbprs)) softID=-999; // to close to the edge
229  // abort this track, it passes through 2 tiles
230  }
231  }
232 
233  if(softID<1) continue;
234  nPrimTr++;
235  hA[0]->Fill(20);
236 
237  hA[14]->Fill(pr_track->pt());
238  hA[15]->Fill(mom);
239  hA[7]->Fill(pos3D.z(),posPhi);
240  hA[12]->Fill(softID);
241 
242 #if 1
243  // ..................try any possible BPRS mapping, if activated
244  if(hA[16])
245  for(int j=0; j<mxBtow; j++) {
246  int ibp=kBPrs; // switch: BTOW or BPRS - only one!
247  if(fullEve.statTile[ibp][j]) continue; // skip masked tiles
248  float adc=fullEve.adcTile[ibp][j];
249  if(adc<7 ) continue;
250  if(adc>35 ) continue;
251  hA[16]->Fill(j+1,softID);
252  }
253 #endif
254 
255  int id0=softID-1;
256  uint isMip[mxBTile];
257  uint badPed[mxBTile];
258  float adc[mxBTile];
259  for(int ibp=0;ibp<mxBTile;ibp++) {
260  isMip[ibp]=0; // default =NO
261  adc[ibp] =fullEve.adcTile [ibp][id0];
262  badPed[ibp]=fullEve.statTile[ibp][id0];
263  if( badPed[ibp]) continue;
264  float adcL, adcH; // default, to use also tiles w/o gains
265  mJanDbMaker->cut_mipAdcLH(ibp,softID,adcL,adcH);
266  if(adc[ibp]<adcL) continue;
267  if(adc[ibp]>adcH) continue;
268  isMip[ibp]=1;
269  }
270 
271  if(!badPed[kBPrs]) {
272  hA[0]->Fill(21);
273  hA[22]->Fill(softID,adc[kBPrs]);
274  if(isMip[kBTow]) {
275  hA[0]->Fill(22);
276  hA[23]->Fill(softID,adc[kBPrs]);
277  }
278  }
279 
280  if(!badPed[kBTow]) {
281  hA[0]->Fill(23);
282  hA[24]->Fill(softID,adc[kBTow]);
283  if(isMip[kBPrs]) {
284  hA[0]->Fill(24);
285  hA[25]->Fill(softID,adc[kBTow]);
286  }
287  }
288 
289  if(isMip[kBPrs] && isMip[kBTow]) hA[0]->Fill(25);
290 
291 
292  } // end of loop over tracks
293 
294  if(nPrimTr<=0) return;
295 
296  hA[0]->Fill(3);
297  hA[13]->Fill(zVert);
298  if(nPrimTr>1) hA[0]->Fill(4);
299 }
300 
301 //________________________________________________
302 //________________________________________________
303 int BarrelMipCalib::checkFiducial(float zTr, float phiTr, int softID, float Rxy){
304 
305  float etaHalfWidth=0.05/2.;
306  const float con_phiHalfWidth=(11.1/225.4)/2.; // radians
307  float cut_eps=cut_zMargin; // same for all except etaBin=20
308  if((softID-1)%20==19) cut_eps=cut_zMargin/2.; // be more forgiving
309 
310  float etaTw;
311  assert( mJanDbMaker->mBprsGeom->getEta(softID,etaTw)==0);
312 
313  if(fabs(etaTw)<0.050) etaHalfWidth=(0.05-0.0035)/2.;
314  if(fabs(etaTw)>0.95) etaHalfWidth=(0.9835-0.95)/2.;
315 
316  // those are edges of the tower in theta
317  float thetaL=2.*atan(exp(-etaTw+etaHalfWidth));
318  float thetaH=2.*atan(exp(-etaTw-etaHalfWidth));
319 
320  float zL=Rxy/tan(thetaL);
321  float zH=Rxy/tan(thetaH);
322 
323  float delZ1=zTr-zL;
324  float delZ2=zH-zTr;
325  bool isInZ= (delZ1>cut_eps) && (delZ2>cut_eps);
326  printf("checkFiducial(zTr=%f phiTr=%f, id=%d Rxy=%f\n",zTr,phiTr,softID,Rxy);
327  printf(" theta range (deg)=%.1f %.1f\n",thetaL/3.1416*180,thetaH/3.1416*180);
328  printf(" etaTw=%f w2=%f zL=%f zH=%f delZ1=%f delZ2=%f isInZ=%d\n",etaTw,etaHalfWidth,zL,zH,delZ1, delZ2,isInZ);
329 
330  if( isInZ) {
331  hA[20]->Fill(delZ1);
332  hA[20]->Fill(delZ2);
333  }
334 
335  float phiTw;
336  assert( mJanDbMaker->mBprsGeom->getPhi(softID,phiTw)==0);
337  TVector2 uniTw; uniTw.SetMagPhi(1.,phiTw);
338  TVector2 uniTr; uniTr.SetMagPhi(1.,phiTr);
339  float delPhi=uniTw.DeltaPhi(uniTr);
340 
341  bool isInPhi=(con_phiHalfWidth- fabs(delPhi)) *Rxy> cut_eps;
342 
343  printf(" phiTr=%f phiTw=%f delPhi=%f delRphi=%f isInPhi=%d\n", phiTr, phiTw,delPhi, delPhi*Rxy, isInPhi);
344  if(isInPhi) hA[21]->Fill(delPhi *Rxy);
345 
346  return isInZ && isInPhi ;
347 
348 }
349 
350 
351 // test code to find where in eta are towers at eat=1.0
352 //________________________________________________
353 //________________________________________________
354 void BarrelMipCalib::searchEtaBin20( JanBarrelEvent &fullEve){
355 
356  // Access to muDst .......................
357  StMuEvent* muEve = muMaker->muDst()->event();
358  int nPrimV=muMaker->muDst()->numberOfPrimaryVertices();
359  hA[0]->Fill(0);
360 
361  printf("\nWARN-ALTERNATIVE CODE: mipCalib eventID %d nPrimV=%d =============\n", muEve->eventId(),nPrimV);
362 
363  // ..............filter events , keep only those with MIP tower at eta=1.0
364 
365  int pickBin=17;
366  int myId0=-1;
367  for(int j=0; j<mxBtow; j++) {
368  if((j%20)!=pickBin-1) continue; // fixed eta-bin
369  if((j/20)%3) continue; // every 3rd phi- row
370 
371  int ibp=kBTow; // switch: BTOW or BPRS - only one!
372  if(fullEve.statTile[ibp][j]) continue; // skip masked tiles
373  float adc=fullEve.adcTile[ibp][j];
374  if(adc<10 ) continue;
375  if(adc>30 ) continue;
376  myId0=j;
377  break;
378  }
379  if(myId0<0) return;
380  hA[0]->Fill(1);
381  float phiTw;
382  assert( mJanDbMaker->mBprsGeom->getPhi(myId0+1,phiTw)==0);
383  TVector2 uniTw; uniTw.SetMagPhi(1.,phiTw);
384 
385  if(nPrimV<=0) return;
386  hA[0]->Fill(2);
387 
388 
389  int nPrimTr =0;
390 
391  // find vertex with smalest Z - to compensate for PPV error in FMS-production
392 
393  int iVert=-1;
394  float zVert=99999;
395 
396  for(int iv=0;iv<nPrimV;iv++) {
397  StMuPrimaryVertex* V= muMaker->muDst()->primaryVertex(iv);
398  assert(V);
399  if(V->ranking()<0.) continue; //drop vertices with too few matched tracks
400  muMaker->muDst()->setVertexIndex(iv);
401  const StThreeVectorF &r=V->position();
402  const StThreeVectorF &er=V->posError();
403  if(iv==0) hA[9]->Fill(r.z()); // histo only highe rank vertex
404 
405  printf("iv=%d Vz=%.2f +/-%.2f bestZ=%f\n",iv,r.z(),er.z() ,zVert );
406 
407  if( fabs(zVert)< fabs(r.z())) continue;
408  zVert=r.z();
409  iVert=iv;
410  }
411 
412  // printf("iVert=%d\n",iVert);
413  if(iVert<0) return; // non of vertices has positive rank
414 
415  hA[1]->Fill(zVert);
416  if(fabs(zVert) > cut_zVertex) return; // drop if too large Z
417  hA[0]->Fill(3);
418 
419  printf("pick zVert=%f iV=%d\n", zVert,iVert);
420 
421  muMaker->muDst()->setVertexIndex(iVert);
422  Int_t nPrimTrAll=muMaker->muDst()->GetNPrimaryTrack();
423  for(int itr=0;itr<nPrimTrAll;itr++) {
424  StMuTrack *pr_track=muMaker->muDst()->primaryTracks(itr);
425  assert(pr_track->vertexIndex()==iVert);
426  if(pr_track->flag()<=0) continue;
427 
428  hA[0]->Fill(10);
429  hA[2]->Fill(pr_track->pt());
430  if(pr_track->pt()< cut_primPt) continue;
431 
432  hA[0]->Fill(11);
433  hA[3]->Fill(pr_track->eta());
434  if(fabs(pr_track->eta())> cut_primEta) continue;
435 
436  hA[0]->Fill(12);
437  float dedx=pr_track->dEdx()*1e6;
438  float mom= pr_track->p().mag();
439  // printf("xxx %f %f\n", dedx,mom);
440  hA[8]->Fill(mom,dedx);
441 
442  if(dedx<1.5) continue;
443  if(dedx>cut_dedx) continue;
444 
445  hA[0]->Fill(13);
446 
447  const StMuTrack* globTr= pr_track->globalTrack();
448 
449  assert(globTr);
450  assert(globTr->flag()>0);
451  float nFF=(1.*globTr->nHitsFit())/ globTr->nHitsPoss();
452  hA[4]->Fill(nFF);
453  if(nFF< cut_nFitFrac) continue;
454 
455  hA[0]->Fill(14);
456  StPhysicalHelixD TrkHlx=globTr->outerHelix();
457 
458  const int mxPL=2; // # of Radii to be tested
459  float RxyA[mxPL]={225.4, 248.4};// cm
460 
461  int softID=-888;
462  StThreeVectorD pos3D;
463  float posPhi=888;
464  for(int ipl=0;ipl<1;ipl++) { //..... top & botom of the Barrel tile
465  float Rbprs= RxyA[ipl];
466  pairD d2;
467  d2 = TrkHlx.pathLength(Rbprs);
468  printf(" path ipl=%d =%f, 2=%f, period=%f, trR=%f\n",ipl, d2.first ,d2.second,TrkHlx.period(),1./TrkHlx.curvature());
469  if(d2.first>=0 || d2.second<=0) {
470  LOG_WARN<< Form("extrapolateTrk , unexpected solution for track crossing BPRS\n d2.firts=%f, second=%f, track ignored", d2.first, d2.second)<<endm;
471  continue;
472  }
473 
474  pos3D = TrkHlx.at(d2.second);
475  double xmagn = ::sqrt( pos3D.x()*pos3D.x() + pos3D.y()*pos3D.y() );
476  printf(" punchBPRS x,y,z=%.1f, %.1f, %.1f, Rxy=%.1f eta=%.2f\n",pos3D.x(),pos3D.y(),pos3D.z(),xmagn, globTr->eta());
477 
478  posPhi=atan2(pos3D.y(),pos3D.x());
479  if(posPhi<0) posPhi+=2*C_PI;
480  hA[5+ipl]->Fill(pos3D.z(),posPhi);
481 
482  TVector2 uniTr; uniTr.SetMagPhi(1.,posPhi);
483  float delPhi=uniTw.DeltaPhi(uniTr);
484 
485  if(fabs(delPhi)>0.15) continue;
486  softID=111; // take every track
487  }
488 
489  if(softID<1) continue;
490  nPrimTr++;
491  hA[0]->Fill(19);
492 
493  hA[14]->Fill(pr_track->pt());
494  hA[15]->Fill(mom);
495  hA[7]->Fill(pos3D.z(),posPhi);
496  hA[17]->Fill(pos3D.z());
497  if(pos3D.z()>0) hA[18]->Fill(posPhi);
498  // hA[12]->Fill(softID);
499 
500  } // end of loop over tracks
501 
502  if(nPrimTr<=0) return;
503 
504  hA[0]->Fill(4);
505  hA[13]->Fill(zVert);
506  if(nPrimTr>1) hA[0]->Fill(5);
507 }
508 
509 
510 
static StMuPrimaryVertex * primaryVertex()
return pointer to current primary vertex
Definition: StMuDst.h:322
Int_t vertexIndex() const
Returns index of associated primary vertex.
Definition: StMuTrack.cxx:600
StMuDst * muDst()
Definition: StMuDstMaker.h:425
Double_t pt() const
Returns pT at point of dca to primary vertex.
Definition: StMuTrack.h:256
pair< double, double > pathLength(double r) const
path length at given r (cylindrical r)
Definition: StHelix.cc:351
UShort_t nHitsFit() const
Return total number of hits used in fit.
Definition: StMuTrack.h:239
short flag() const
Returns flag, (see StEvent manual for type information)
Definition: StMuTrack.h:230
const StThreeVectorF & p() const
Returns 3-momentum at dca to primary vertex.
Definition: StMuTrack.h:259
Double_t eta() const
Returns pseudo rapidity at point of dca to primary vertex.
Definition: StMuTrack.h:257
static TObjArray * primaryTracks()
returns pointer to a list of tracks belonging to the selected primary vertex
Definition: StMuDst.h:301
UShort_t nHitsPoss() const
Return number of possible hits on track.
Definition: StMuTrack.cxx:242
static StMuEvent * event()
returns pointer to current StMuEvent (class holding the event wise information, e.g. event number, run number)
Definition: StMuDst.h:320
const StThreeVectorF & lastPoint() const
Returns positions of last measured point.
Definition: StMuTrack.h:262
Double_t dEdx() const
Returns measured dE/dx value.
Definition: StMuTrack.h:248
const StMuTrack * globalTrack() const
Returns pointer to associated global track. Null pointer if no global track available.
Definition: StMuTrack.h:272
double period() const
returns period length of helix
Definition: StHelix.cc:339
StPhysicalHelixD outerHelix() const
Returns outer helix (last measured point)
Definition: StMuTrack.cxx:412
static void setVertexIndex(Int_t vtx_id)
Set the index number of the current primary vertex (used by both primaryTracks() functions and for St...
Definition: StMuDst.cxx:273
Collection of trigger ids as stored in MuDst.