308 {
322
323
326 return;
327 }
328
330 TGFileInfo *fi=new TGFileInfo;
331 fi->fIniDir = StrDup(".");
332 const char *filetypes[] = { "Feedback file", "*.feedback", "All files","*",0,0};
333 fi->fFileTypes = filetypes;
334 new TGFileDialog(gClient->GetRoot(), gEve->GetMainWindow(), kFDSave, fi);
336 }
337
338 FILE *fp;
340 return;
341 }
342 else {
345 printf(
"Couldn't open file : %s\n",
filename);
346 return;
347 }
348 }
349
350 printf("--------- Feedback format---------------\n");
351 printf("VID X Y Z 1ry charm tau Ndw Nup OutOfBrick\n");
352 printf("trkid v1 v2 x y z tx ty ip1 ip2 ");
353 printf(" p pmin pmax mn pa sb dk ou ps ");
354 printf(" n RmaxT RmaxL rmsT rmsL pl1 pl2 res\n");
355 printf(" ipl x y z tx ty type irec ngrains\n");
356
358 fprintf(fp,"// --------- Feedback format---------------\n");
359 fprintf(fp,"// VID X Y Z 1ry charm tau Ndw Nup OutOfBrick\n");
360 fprintf(fp,"// OutOfBrick : 1= vertex in dead material, 0= others\n");
361 fprintf(fp,"// \n");
362 fprintf(fp,"// Trkid v1 v2 x y z tx ty ip1 ip2 p pmin pmax mn pa sb dk ou ps n RmaxT RmaxL rmsT rmsL pl1 pl2 res\n");
363 fprintf(fp,"// Manual : 0= auto, 1= manually added\n");
364 fprintf(fp,"// Particle : 1= muon, 2= charm, 3= electron, 4= e+e- pair\n");
365 fprintf(fp,"// Scanback : 1= scanback, 0=not scanback\n");
366 fprintf(fp,"// Darkness : 0= MIP, 1= BLACK, 2= GRAY\n");
367 fprintf(fp,"// OutOfBrick : 1= pass through up, 2= edge out, 0 others\n");
368 fprintf(fp,"// Last plate : 1= pass through down, n= edge out last plate number, 0 others\n");
369 fprintf(fp,"// Out_flag(res): 1= 1ry vertex track, 2= e+e- pair, 3= Low momentum (DTheta_RMS >20 mrad),\n");
370 fprintf(fp,"// 4= Scan Forth to be done, 5= Scan Forth done\n");
371 fprintf(fp,"// \n");
372 fprintf(fp,"// Ipl x y z tx ty type irec ngrains\n");
373 fprintf(fp,"// Type : 0 BT, 1 microtrack top, 2 microtrack bottom\n");
374 fprintf(fp,"// Irec : 0 Automatic, 1 SB, 2 Manual\n");
375 fprintf(fp,"// \n");
376 fprintf(fp,"///////////////////////////////////////////// \n");
377 fprintf(fp,"// ---------- Vertex Data ---------------- // \n");
378 fprintf(fp,"///////////////////////////////////////////// \n");
379 }
380
381
383
384 printf("%d vertices\n", vertices->GetEntries());
386 double z=1e9;
387 for(int i=0;i<vertices->GetEntries();i++){
391 v_1ry=v;
392 }
393 }
395 printf(
"Vertex plate = %d. z=%7.1lf\n", vtxpl,
gEDA->
GetZ(vtxpl));
397
399
400 for(int i=0; i<vertices->GetEntries(); i++){
403 int ISPRIMARY = v==v_1ry ? 1 : 0;
404 int ISCHARM = 0;
405 int ISTAU = 0;
406 int Nup=0, Ndown=0;
407 for(
int j=0;j<v->
N();j++){
409 if(
t->GetSegmentFirst()->Z()>v->
Z()) Ndown++;
410 if(
t->GetSegmentLast()->Z()<v->
Z()) Nup++;
411 }
412 int OutOfBrick = v->
Z()<
gEDA->
GetZ(1)? 1:0;
413
415 fprintf(fp,"%3d %8.1lf %8.1lf %8.1lf %3d %5d %3d %3d %3d %3d\n",
416 v->
ID(), v->
X(), v->
Y(), v->
Z(),ISPRIMARY,ISCHARM,ISTAU, Ndown, Nup, OutOfBrick);
417 } else {
418 fprintf(fp,"%d %8.1lf %8.1lf %8.1lf %3d %5d %3d %3d %3d %3d\n",
419 v->
ID(), v->
X(), v->
Y(), v->
Z(),ISPRIMARY,ISCHARM,ISTAU, Ndown, Nup, OutOfBrick);
420 }
421 }
422
423
424 int itrk=1;
427 if(
set->N()==0)
continue;
428 if(
set->GetDraw()==0)
continue;
429 printf(
"TrackSet %s : %3d tracks\n",
set->GetName(),
set->N());
432 fprintf(fp,"////////////////////////////////////////////////////////// \n");
433 fprintf(fp,
"// ---------- TrackSet : %s %6d 0 %d %4d ----------- //\n",
set->GetName(),
id.eBrick,
id.eMajor,
id.eMinor);
434 fprintf(fp,"////////////////////////////////////////////////////////// \n");
435 }
436 for(
int j=0;j<
set->N();j++){
442 for(int k=0;k<vertices->GetEntries();k++){
444 for(
int l=0;l<v->
N();l++){
448 else {
450 v2 = v1;
451 v1 = v;
452 }
453 else v2 = v;
454 } } } }
455 if(v1==
NULL) v1=v_1ry;
456
457
458
459
460
461
462
463 int ivtx1 = v1 ? v1->
ID() : -1;
464 int ivtx2 = v2 ? v2->
ID() : -1;
465
466 float ip1= v1?
CalcIP(sf,v1) : -1.0;
467 float ip2= v2?
CalcIP(sl,v2) : -1.0;
468
471
472
473 int MAN = 0;
474 int SCANBACK=0, idscanback=-1;
475 int MUON =0;
476 int DARKNESS=0;
477
479
481 if(sbt!=
NULL) idscanback = sbt->
ID();
482 if (idscanback!=-1) SCANBACK = 1;
484
485 int OutOfBrick=0;
486 int LastPlate=0;
487
489
490
491
492
493 double RmaxT=0.0, RmaxL=0.0, Rmax=0.0, dtmaxt=0.0, dtmaxl=0.0, rmstmax=-1.0, rmslmax=-1.0;
494 int iplRmax1=0, iplRmax2=0;
495
499
500 for(
int k=0;k<tt->
N()&&tt->
N()>1;k++){
503 }
504
506
507 if(n<=1) {
508
509 RmaxT=RmaxL=-1.;
510 iplRmax1=iplRmax2=-1;
511 }
512 else if( n<4 ){
513
514 RmaxT=RmaxL=-1.;
515 iplRmax1=iplRmax2=-1;
516 }
517 else {
518
519 for(int k=0; k<n-1;k++){
522
523 int ipl1 = ss1->
Plate();
524 int ipl2 = ss2->
Plate();
525
526
528
529 if(ipl1>vtxpl+2) continue;
530
531 double dtt,dtl;
535
537 int ndata;
539
540 double RT =dtt/rt/sqrt((double)ipl2-ipl1);
541 double RL =dtl/rl/sqrt((double)ipl2-ipl1);
542 double R=sqrt(RT*RT+RL*RL);
543 printf("ipl %2d-%2d dtt=%7.4lf dtl=%7.4lf rmst=%7.4lf rmsl=%7.4lf RT=%5.2lf RL=%5.2lf n=%d\n",
544 ipl1, ipl2, dtt, dtl, rt, rl, RT,RL,ndata);
545 if(Rmax<R){
546 Rmax = R;
547 RmaxT = RT;
548 RmaxL = RL;
549 iplRmax1=ipl1;
550 iplRmax2=ipl2;
551 dtmaxt = dtt;
552 dtmaxl = dtl;
553 rmstmax = rt;
554 rmslmax = rl;
555 }
556 }
557 }
558
559 int nin5pl = 0;
560 for(int k=0;k<n;k++){
562 if(
s->Plate()>=vtxpl &&
s->Plate()<vtxpl+5) nin5pl++;
563 }
564 if( nin5pl<=2 ){
565
566 RmaxT=RmaxL=-1.;
567 iplRmax1=iplRmax2=-1;
568 }
569
570 double rms, rmst, rmsl;
571 if(n<=1) rms=rmst=rmsl=-1.;
572 else DTRMSTL(tt, &rms, &rmst, &rmsl);
573
574 delete tt;
575
576 int result=1;
577
578 const char *comment =
set->GetComment(
t);
580
582 fprintf(fp,"// tid v1 v2 x y z tx ty ip1 ip2 ");
583 fprintf(fp," p pmin pmax mn pa sb dk of ps ");
584 fprintf(fp," n RmaxT RmaxL rmsT rmsL pl1 pl2 res\n");
585 }
586 fprintf(fp, "%6d %2d %2d %8.1f %8.1f %8.1f %7.4f %7.4f %6.1f %6.1f ",
587 t->ID(), ivtx1, ivtx2, sf->
X(), sf->
Y(), sf->
Z(), sf->
TX(), sf->
TY(), ip1, ip2);
588
589 } else {
590
591 fprintf(fp, "%d %2d %2d %8.1f %8.1f %8.1f %7.4f %7.4f %6.1f %6.1f ",
592 itrk++, ivtx1, ivtx2, sf->
X(), sf->
Y(), sf->
Z(), sf->
TX(), sf->
TY(), ip1, ip2);
593 }
594 fprintf(fp, "%5.1lf %5.1lf %5.1lf %2d %2d %2d %2d %2d %2d ",
595 p,pmin,pmax, MAN, MUON, SCANBACK, DARKNESS, OutOfBrick, LastPlate);
596 fprintf(fp, "%2d %5.2lf %5.2lf %7.4lf %7.4lf %3d %3d %3d\n",
597 nseg, RmaxT, RmaxL, rmst, rmsl, iplRmax1, iplRmax2, result);
598
599
600 fprintf(
stdout,
"%5d %2d %2d %8.1f %8.1f %8.1f %7.4f %7.4f %6.1f %6.1f ",
601 t->ID(), ivtx1, ivtx2, sf->
X(), sf->
Y(), sf->
Z(), sf->
TX(), sf->
TY(), ip1, ip2);
602 fprintf(
stdout,
"%5.1lf %5.1lf %5.1lf %2d %2d %2d %2d %2d %2d ",
603 p,pmin,pmax, MAN, MUON, SCANBACK, DARKNESS, OutOfBrick, LastPlate);
604 fprintf(
stdout,
"%2d %5.2lf %5.2lf %7.4lf %7.4lf %3d %3d %3d\n",
605 nseg, RmaxT, RmaxL, rmst, rmsl, iplRmax1, iplRmax2, result);
606
607
608
609
610
611 double angle = sqrt(
t->TX()*
t->TX()+
t->TY()*
t->TY());
612 double resT = 0.0015*sqrt(2.0);
613 double resL = 0.0015*(1+angle*5)*sqrt(2.0);
614 double RresT = RmaxT>0 ? dtmaxt/resT : -1.;
615 double RresL = RmaxL>0 ? dtmaxl/resL : -1.;
616
618 if( ( rmst<resT || rmsl<resL ) && rmst>0)
619 fprintf(fp, "// rms for R = %7.4lf %7.4lf , note : rms is smaller than angular resolution. "
620 "RresT RresL resT resL = %5.2lf %5.2lf %7.4lf %7.4lf\n",
621 rmstmax, rmslmax, RresT, RresL, resT, resL);
622 else fprintf(fp, "// rms for R = %7.4lf %7.4lf "
623 "RresT RresL resT resL = %5.2lf %5.2lf %7.4lf %7.4lf\n",
624 rmstmax, rmslmax, RresT, RresL, resT, resL);
625
626 if( nin5pl<3 ) fprintf(fp, "// nBT = %d. nBT in first five plate = %d.\n", n, nin5pl);
627 fprintf(fp, "// track comment = \"%s\"\n", comment);
628 }
629
630
631
632 int irec = 0;
634 if(
name.BeginsWith(
"TS") ) irec=0;
635 if(
name.BeginsWith(
"SB") ) irec=1;
636 if(
name.BeginsWith(
"SF") ) irec=1;
637 if(
name.BeginsWith(
"MN") ) irec=2;
638
639 for(
int k=0;k<
t->N();k++){
641
642 int type =
s->Side();
645 if(setseg){
646 TString
name = setseg->GetName();
647 if(
name.BeginsWith(
"TS") ) irec=0;
648 if(
name.BeginsWith(
"SB") ) irec=1;
649 if(
name.BeginsWith(
"SF") ) irec=1;
650 if(
name.BeginsWith(
"MN") ) irec=2;
651 }
652
654
655 if(k==0) fprintf(fp,"// ipl x y z tx ty type irec ngrains\n");
656 fprintf(fp,"%12d %8.1f %8.1f %8.1f %7.4f %7.4f %4d %4d %4d\n",
657 s->Plate(),
s->X(),
s->Y(),
s->Z(),
s->TX(),
s->TY(),
type, irec, (
int)
s->W());
658 } else {
659
660 fprintf(fp,"%d %8.1f %8.1f %8.1f %7.4f %7.4f %4d %4d %4d\n",
661 s->Plate(),
s->X(),
s->Y(),
s->Z(),
s->TX(),
s->TY(),
type, irec, (
int)
s->W());
662 }
663 }
664
665 }
666 }
667
668
669
673 fprintf(fp,"//////////////////////////////////////////\n");
674 fprintf(fp,
"// ------ Area information : %s ------- //\n",
set->GetName());
675 fprintf(fp,"//////////////////////////////////////////\n");
676 for(
int i=0;i<aset->
N();i++){
678 fprintf(fp,"// area : TS %2d %lf %lf %lf %lf %lf\n",
679 a->Plate(),
a->Xmin(),
a->Xmax(),
680 a->Ymin(),
a->Ymax(),
a->Z());
681 }
682 }
683
685
686 printf(
"file %s was written.\n",
filename);
687
688}
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
int N()
Definition: EdbEDASets.h:133
EdbEDAArea * GetArea(int i)
Definition: EdbEDASets.h:134
double GetZ(int ipl)
Definition: EdbEDA.h:300
int GetIPLZ(float z)
Definition: EdbEDA.h:267
int GetLastPlate()
Definition: EdbEDA.h:241
int IdMuon(char *filename="../cs_info.txt")
Definition: EdbEDA.C:1045
EdbTrackP * FindTrack(EdbSegP *s, double dx=10, double dt=0.02)
Definition: EdbEDATrackSet.h:369
EdbTrackP * CheckScanback(EdbTrackP *t)
Definition: EdbEDA.h:730
EdbID * GetID(Int_t i)
Definition: EdbScanSet.h:46
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
Int_t ID() const
Definition: EdbSegP.h:147
Float_t X() const
Definition: EdbSegP.h:173
Int_t Plate() const
Definition: EdbSegP.h:159
Float_t Z() const
Definition: EdbSegP.h:153
Float_t Y() const
Definition: EdbSegP.h:174
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176
void RemoveSegment(EdbSegP *s)
Definition: EdbPattern.h:219
Int_t N() const
Definition: EdbPattern.h:177
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:195
void Copy(const EdbTrackP &tr)
Definition: EdbPattern.cxx:473
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
double DTRMSTLGiven1Kink(EdbTrackP *t, int iKink, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *NKinkAngleUsed=NULL)
Definition: EdbEDAUtil.C:790
void CalcDTTransLongi(EdbSegP *s1, EdbSegP *s2, double *dtTransverse, double *dtLongitudinal)
Definition: EdbEDAUtil.C:648
EdbMomentumEstimator * CalcP(EdbTrackP *t, double &p, double &pmin, double &pmax, bool print=kTRUE)
Definition: EdbEDAUtil.C:369
double DTRMSTL(EdbTrackP *t, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *ndata=NULL)
Definition: EdbEDAUtil.C:686
void r(int rid=2)
Definition: test.C:201