209 TDirectory *curdir = gDirectory;
210 histodir = gDirectory->mkdir(
"StsFitPerformance");
213 gDirectory->mkdir(
"TrackFit");
214 gDirectory->cd(
"TrackFit");
216 fhChi2 =
new TH1D(
"hChi2",
"hChi2",100,0,10);
217 fhProb =
new TH1D(
"hProb",
"hProb",100,0,1.0);
219 fhDP =
new TH1D(
"hDP",
"hDP",1000,-.005,.005);
220 fhDP2 =
new TH2D(
"hDP2",
"hDP2",100,0.,5.0,1000,-.005,.005);
222 fhDsP =
new TH1D(
"hDsP",
"hDsP",100,-1,1);
223 fhDsP2 =
new TH2D(
"hDsP2",
"hDsP2",100,0.,5.0,100,-1,1);
225 fhZMCf =
new TH1D(
"hZMCf",
"h Z MC first",102,-1.0,101.0);
226 fhZRecof =
new TH1D(
"hZRecof",
"h Z Reco first",102,-1.0,101.0);
227 fhZMCl =
new TH1D(
"hZMCl",
"h Z MC last",102,-1.0,101.0);
228 fhZRecol =
new TH1D(
"hZRecol",
"h Z Reco last",102,-1.0,101.0);
230 fhRes_vs_Mom_f =
new TH2D(
"hRes_vs_Mom_f",
"TX Resolusion vs Momentum (first hit)",100, 0.0, 5.0, 100, -50.0, 50.0);
231 fhRes_vs_Mom_l =
new TH2D(
"hRes_vs_Mom_l",
"TX Resolusion vs Momentum (last hit)",100, 0.0, 5.0, 100, -10.0, 10.0);
233 fhExtraTracks2ndMVD =
new TH2D(
"hExtraTracks2ndMVD",
"ExtraTracks in the 2nd MVD",200, -10.0, 10.0, 200, -10.0, 10.0);
235 gDirectory->mkdir(
"AtFirstHit");
236 gDirectory->cd(
"AtFirstHit");
238 gDirectory->cd(
"..");
239 gDirectory->mkdir(
"AtLastHit");
240 gDirectory->cd(
"AtLastHit");
242 gDirectory->cd(
"..");
243 gDirectory->mkdir(
"AtImpactPoint");
244 gDirectory->cd(
"AtImpactPoint");
246 gDirectory->cd(
"..");
247 gDirectory->mkdir(
"AtImpactPointPion");
248 gDirectory->cd(
"AtImpactPointPion");
250 gDirectory->cd(
"..");
251 gDirectory->mkdir(
"InTheMiddle");
252 gDirectory->cd(
"InTheMiddle");
254 gDirectory->cd(
"..");
255 gDirectory->mkdir(
"FittedToVertex");
256 gDirectory->cd(
"FittedToVertex");
258 gDirectory->cd(
"..");
260 gDirectory->mkdir(
"PSlidesOnP");
261 gDirectory->cd(
"PSlidesOnP");
262 fhPq =
new TH2D(
"Pq",
"Resolution P/Q at impact point vs P", 100, 0, 10, 100, -.1 , .1 );
263 gDirectory->cd(
"..");
265 gDirectory->cd(
"..");
267 for(
int i=0;
i<10;
i++ ){
269 sprintf(n,
"hHitDens%i",
i);
270 sprintf(t,
"Hit Density, Sts station %i",
i);
273 fhTrackDensity[0] =
new TH1D(
"hTrackDensity0",
"Track Density 0cm",300,0,300);
274 fhTrackDensity0L =
new TH1D(
"hTrackDensity0L",
"Track Density Line 0cm",300,0,300);
275 fhTrackDensity[1] =
new TH1D(
"hTrackDensity1",
"Track Density 1cm",300,0,300);
276 fhTrackDensity[2] =
new TH1D(
"hTrackDensity2",
"Track Density 2cm",300,0,300);
277 fhTrackDensity[3] =
new TH1D(
"hTrackDensity3",
"Track Density 3cm",300,0,300);
278 fhTrackDensity[4] =
new TH1D(
"hTrackDensity4",
"Track Density 4cm",300,0,300);
279 fhTrackDensity[5] =
new TH1D(
"hTrackDensity5",
"Track Density 5cm",300,0,300);
280 fhTrackDensity[6] =
new TH1D(
"hTrackDensity10",
"Track Density 10cm",300,0,300);
281 fhTrackDensity[7] =
new TH1D(
"hTrackDensity100",
"Track Density 1m",300,0,300);
283 gDirectory->mkdir(
"VertexFit");
284 gDirectory->cd(
"VertexFit");
287 gDirectory->mkdir(
"VertexOnNTracks");
288 gDirectory->cd(
"VertexOnNTracks");
289 for(
int i=0;
i<13;
i++){
290 char name[225], namedir[225], title[225];
292 sprintf(namedir,
"AllTracks");
293 sprintf(name,
"Vall");
294 sprintf(title,
"for Primary Vertex on all tracks");
296 sprintf(namedir,
"%iTracks",
i*50);
297 sprintf(name,
"V%i",
i*50);
298 sprintf(title,
"for Primary Vertex on %i tracks",
i*50);
300 gDirectory->mkdir(namedir);
301 gDirectory->cd(namedir);
303 gDirectory->cd(
"..");
305 gDirectory->cd(
"..");
307 gDirectory->cd(
"..");
309 gDirectory->mkdir(
"D0Fit");
310 gDirectory->cd(
"D0Fit");
312 gDirectory->mkdir(
"No constraints");
313 gDirectory->cd(
"No constraints");
315 gDirectory->cd(
"..");
316 gDirectory->mkdir(
"Topological constraint");
317 gDirectory->cd(
"Topological constraint");
319 gDirectory->cd(
"..");
320 gDirectory->mkdir(
"Mass constraint");
321 gDirectory->cd(
"Mass constraint");
323 gDirectory->cd(
"..");
324 gDirectory->mkdir(
"Mass+Topological constraint");
325 gDirectory->cd(
"Mass+Topological constraint");
327 gDirectory->cd(
"..");
329 gDirectory->cd(
"..");
357 cout <<
"Event: " << ++
fEvent <<
" ";
360 cout <<
" nTracks: " << nTracks << endl;
366 Int_t Quality[nTracks];
368 for (Int_t iTrack=0; iTrack<nTracks; iTrack++ ){
371 if( !track )
continue;
374 if(
m->GetNofTrueHits() <
375 0.7*(
m->GetNofTrueHits()+
m->GetNofWrongHits()+
m->GetNofFakeHits())
378 if (mcTrackID<0)
continue;
379 if (!
IsLong(track))
continue;
382 if( !mcTrack )
continue;
393 cout<<
"Mvd hit density..."<<endl;
394 for(
int ih=0; ih<nMvdHits; ih++){
395 if( ih%100 ==0 ) cout<<ih<<endl;
398 double V[3] = { 2*h1->GetDx()*h1->GetDx(), 2*0, 2*h1->GetDy()*h1->GetDy()};
399 Double_t
v = 1./(V[0]*V[2] - V[1]*V[1]) ;
404 for(
int jh=0; jh<nMvdHits; jh++){
405 if( ih==jh )
continue;
409 Double_t dx = h1->GetX() - h2->GetX();
410 Double_t dy = h1->GetY() - h2->GetY();
411 Double_t d2 =
fabs(dx*dx*V[0]-2*dx*dy*V[1]+dy*dy*V[2]);
416 cout<<
"Sts hit density..."<<endl;
417 for(
int ih=0; ih<nStsHits; ih++){
418 if( ih%1000 ==0 ) cout<<ih<<endl;
421 double V[3] = { 2*h1->GetDx()*h1->GetDx(), 2*h1->
GetCovXY(), 2*h1->GetDy()*h1->GetDy()};
422 Double_t
v = 1./(V[0]*V[2] - V[1]*V[1]) ;
427 for(
int jh=0; jh<nStsHits; jh++){
428 if( ih==jh )
continue;
436 Double_t dx = h1->GetX() - h2->GetX();
437 Double_t dy = h1->GetY() - h2->GetY();
438 Double_t d2 =
fabs(dx*dx*V[0]-2*dx*dy*V[1]+dy*dy*V[2]);
446 cout<<
"Track density..."<<endl;
448 double sC[nTracks][8][15];
449 double sT[nTracks][8][5];
450 for (Int_t iTrack=0;iTrack<nTracks;iTrack++){
454 if( !
IsLong(trackI) )
continue;
456 double z[8] = {0.2,1,2,3,4,5,10,100};
457 for(
int iz=0; iz<8; iz++ ){
458 FairTrackParam paramI;
461 if( !finite(sC[iTrack][iz][0]) || sC[iTrack][iz][0]<0 || sC[iTrack][iz][0]>10. ){
467 for (Int_t iTrack=0;iTrack<nTracks;iTrack++){
469 if( iTrack%10==0 ) cout<<iTrack<<endl;
470 if (!flag[iTrack])
continue;
472 for(
int iz=0; iz<8; iz++ ) Chi2[iz] = 1.e10;
475 for (Int_t jTrack=0;jTrack<nTracks;jTrack++){
476 if( jTrack==iTrack )
continue;
477 if (!flag[jTrack])
continue;
479 for(
int iz=0; iz<8; iz++ ){
480 Double_t C[15],
d[5];
481 for(
int i=0;
i<15;
i++ ) C[
i] = sC[iTrack][iz][
i] + sC[jTrack][iz][
i];
482 for(
int i=0;
i<5;
i++ )
d[
i] = sT[iTrack][iz][
i] - sT[jTrack][iz][
i];
486 for(
int i=0;
i<5;
i++ ){
492 if( chi2<Chi2[iz] ) Chi2[iz] = chi2;
496 for(
int i=0;
i<4;
i++ ){
502 if( chi2<Chi2L ) Chi2L = chi2;
506 for(
int iz=0; iz<8; iz++ ){
513 for (Int_t iTrack=0;iTrack<nTracks;iTrack++){
514 if( Quality[iTrack]<1 )
continue;
522 vector<CbmStsPoint*> vPoints;
525 if( hitID<0 )
continue;
528 Int_t pointID = hit->GetRefIndex();
529 if( pointID<0 )
continue;
531 if( !point )
continue;
532 vPoints.push_back(point);
534 vector<CbmMvdPoint*> vMPoints;
537 if( hitID<0 )
continue;
540 Int_t pointID = hit->GetRefIndex();
541 if( pointID<0 )
continue;
543 if( !point )
continue;
544 vMPoints.push_back(point);
548 Double_t pzi = mcTrack->
GetPz();
549 if(
fabs( pzi )>1.e-4 ) pzi = 1./pzi;
552 mci[2] = mcTrack->
GetPx() * pzi;
553 mci[3] = mcTrack->
GetPy() * pzi;
556 if( !vPoints.empty() )
559 Double_t p1 = mcTrack->
GetP();
561 vPoints.back()->MomentumOut(mom);
562 Double_t p2 = mom.Mag();
563 Double_t s = p1*p1*TMath::Sqrt(TMath::Abs(track->
GetParamFirst()->GetCovariance(4,4)));
564 Double_t dp = (p1-p2)*TMath::Sqrt(1+mci[2]*mci[2]+mci[3]*mci[3]);
571 if( !vMPoints.empty() )
592 for( vector<CbmStsPoint*>::iterator
i=vPoints.begin();
i!=vPoints.end();
i++){
593 int id = (*i)->GetDetectorID();
614 FairTrackParam param;
616 if(
fabs(mci[4])>1.e-4 &&
fabs( param.GetQp() )>1.e-4 )
617 fhPq->Fill(
fabs(1./mci[4]), (mci[4]/param.GetQp() - 1.) );
631 TVector3 MC_V(0,0,0);
634 TVector3 MC_Vcurr(0,0,0);
635 Int_t nvtracks=0, nvtrackscurr=0;
637 for (Int_t iTrack=0;iTrack<nMCTracks;iTrack++){
641 if ( !Is_MC_V ||
fabs(z-MC_Vcurr.Z())>1.e-7 ){
643 if( nvtrackscurr > nvtracks ){
645 nvtracks = nvtrackscurr;
649 }
else nvtrackscurr++;
651 if( nvtrackscurr > nvtracks ) MC_V = MC_Vcurr;
664 TClonesArray TracksToFit(
"CbmStsTrack");
666 for (Int_t iTrack=0;iTrack<nTracks;iTrack++){
667 if( Quality[iTrack]<1 )
continue;
671 if( N%50!=0 )
continue;
673 if(
i>=13 )
continue;
687 for (Int_t iK=0;iK<nTracks;iK++){
688 if( Quality[iK]<1 )
continue;
694 double zK = mcK->
GetPz();
695 if( zK-MC_V.Z()<1.e-5 )
continue;
696 double MCPK = mcK->
GetP();
699 for (Int_t iP=0;iP<nTracks;iP++){
700 if( Quality[iP]<1 )
continue;
708 if(
fabs(zP-zK)>1.e-8 )
continue;
709 double MCPP = mcP->
GetP();
711 const double D0 = 1.8645 ;
720 for(
int iconst=0; iconst<4; iconst++){
745 Double_t mass, mass_err;
749 SVFinder.
GetMass(&mass, &mass_err);
750 if( sv.
GetNDF()<=0)
continue;
751 Double_t dx = sv.
GetX() - mc_.X();
752 Double_t dy = sv.
GetY() - mc_.Y();
753 Double_t dz = sv.
GetZ() - mc_.Z();
757 fhD0[iconst][0]->Fill( 1.E4*dx );
758 fhD0[iconst][1]->Fill( 1.E4*dy );
759 fhD0[iconst][2]->Fill( 1.E4*dz );
760 if ( sx >1.e-10 )
fhD0[iconst][3]->Fill( dx/
sqrt(sx) );
761 if ( sy >1.e-10 )
fhD0[iconst][4]->Fill( dy/
sqrt(sy) );
762 if ( sz >1.e-10 )
fhD0[iconst][5]->Fill( dz/
sqrt(sz) );
767 fhD0[iconst][8]->Fill( (mass-D0) );
768 if( mass_err>1.e-10 )
fhD0[iconst][9]->Fill( (mass-D0)/mass_err );
797 if ((mc[5] > 31.0) ||(mc[5] < 29.0)){
803 FairTrackParam param;
811 for(
int i=0;
i<6;
i++ ) ok = ok && finite(t[
i]);
812 for(
int i=0;
i<15;
i++ ) ok = ok && finite(c[
i]);
816 hist[0]->Fill(1.E4*(t[0] - mc[0]));
817 hist[1]->Fill(1.E4*(t[1] - mc[1]));
818 hist[2]->Fill( 1.E3*(t[2] - mc[2]) );
819 hist[3]->Fill( 1.E3*(t[3] - mc[3]) );
820 if (
fabs( t[4] )>1.e-10 ) hist[4]->Fill( (mc[4]/t[4] - 1.) );
826 if ( c[ 0] >1.e-10 ) hist[5]->Fill( ( t[0] - mc[0] )/
sqrt(c[ 0]) );
827 if ( c[ 2] >1.e-10 ) hist[6]->Fill( ( t[1] - mc[1] )/
sqrt(c[ 2]) );
828 if ( c[ 5] >1.e-10 ) hist[7]->Fill( ( t[2] - mc[2] )/
sqrt(c[ 5]) );
829 if ( c[ 9] >1.e-10 ) hist[8]->Fill( ( t[3] - mc[3] )/
sqrt(c[ 9]) );
830 if ( c[14] >1.e-10 ) hist[9]->Fill( ( t[4] - mc[4] )/
sqrt(c[14]) );