347{
348 int ntr =
tracks.GetEntries();
349 Log(3,
"vtxComb",
"ntr=%d",ntr);
350 TObjArray vertices1, vertices2;
351
352 int ic=0;
353 for( int nitems=ntr; nitems >= ntr/2; nitems-- )
354 {
356 TObjArray selected, other;
357 while( comber.NextCombination(selected,other) ) {
359 vertices1.Add(v1);
361 vertices2.Add(v2);
362 ic++;
363 }
364 }
365
366 TArrayF probarr(ic);
367 TArrayI ind(ic);
368 for(int i=0; i<ic; i++) {
371 float prob = v1->
V()->
prob();
372 if( v2 ) prob *= v2->
V()->
prob();
373 probarr[i]= prob;
374 }
375 Sort(ic,probarr.GetArray(),ind.GetArray(),1);
376
377
378 for(int i=0; i<ic-1; i++)
379 {
380 int i1 = ind[i];
381 int i2 = ind[i+1];
382 if(i1<0) continue;
383 if(i2<0) continue;
384 if( Abs( probarr[i1]-probarr[i2] ) < 0.00000001 ) ind[i+1]=-1;
385 }
386
387
388 printf("\n # prob1 X1 Y1 Z1 prob2 X2 Y2 Z2 set1 set2\n");
389 printf("-----------------------------------------------------------------------------------------------------------------------------------------------\n");
390 float prob_pred=1;
391 float prob_lim = env.GetValue("emvtx.fbt.ProbLim", 0.001 );
392 for(int i=0; i<ic; i++)
393 {
394 if(ind[i]<0) continue;
395 if(prob_pred>prob_lim && probarr[ind[i]] < prob_lim)
396 printf(" ----- below the probability product is less then %f ------\n",prob_lim );
397 prob_pred=probarr[ind[i]];
401 if(!vv2) v1 = vv1;
402 else {
403 if( vv1->
VZ() < vv2->
VZ() ) {v1 = vv1; v2 = vv2; }
404 else {v2 = vv1; v1 = vv2; }
405 }
406 printf("%5d",i);
407 printf(
" %9.7f %9.1f %9.1f %9.1f", v1->
V()->
prob(), v1->
VX(), v1->
VY(), v1->
VZ());
408 if(v2) printf(
" %9.7f %9.1f %9.1f %9.1f",v2->
V()->
prob(), v2->
VX(), v2->
VY(), v2->
VZ());
409 else printf(" ");
410 printf("\t(");
411 for(
int i=0; i<v1->
N(); i++) printf(
"%6d", v1->
GetTrack(i)->
ID() );
412 for(
int i=0; i<ntr-v1->
N(); i++) printf(
" " );
413 printf(") & (");
414 if(v2)
for(
int i=0; i<v2->
N(); i++) printf(
"%6d", v2->
GetTrack(i)->
ID() );
415 printf(")\n");
416 }
417
418 printf("\n---------------- The most probable combinations --------------------\n" );
419 for(int i=0; i<ic; i++)
420 {
421 if(ind[i]<0) continue;
422 if(probarr[ind[i]] < prob_lim) continue;
423
424 printf("\n----------- the probability product is %f :----------\n", probarr[ind[i]]);
425
428
429 int naux = aux_tr.GetEntries();
430 for(int j=0; j<naux; j++)
431 {
435 }
436 }
437
439 printf("\n The measurements errors assigned to tracks at last measured point:\n");
440 printf(" sigmaX0 sigmaY0 sigmaTX0 sigmaTY0 Degrad\n");
441 printf("%8.3f %8.3f %8.4f %8.4f %8.2f\n",
443 printf(
"The errors extrapolated to the vertex point taking into account CMS with Rad length of the media X0 = %10.2f [microns]\n",cond->
RadX0());
444}
objects combinations generator
Definition: EdbCombGen.h:15
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
float SigmaTX(float ax) const
Definition: EdbScanCond.h:106
float Degrad() const
Definition: EdbScanCond.h:100
float SigmaTY(float ay) const
Definition: EdbScanCond.h:107
float SigmaX(float ax) const
Definition: EdbScanCond.h:102
float SigmaY(float ay) const
Definition: EdbScanCond.h:103
float RadX0() const
Definition: EdbScanCond.h:58
Int_t ID() const
Definition: EdbSegP.h:147
EdbPVRec * ePVR
patterns volume (optional)
Definition: EdbVertex.h:206
void Print()
Definition: EdbVertex.cxx:328
Float_t VX() const
Definition: EdbVertex.h:133
float CheckImp(const EdbTrackP *tr)
Definition: EdbVertex.cxx:441
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
Float_t VY() const
Definition: EdbVertex.h:134
float CheckImpGeom(const EdbTrackP *tr)
Definition: EdbVertex.cxx:430
Float_t VZ() const
Definition: EdbVertex.h:135
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237