FEDRA emulsion software from the OPERA Collaboration
EdbEDAPredTab Class Reference

#include <EdbEDATabs.h>

Public Member Functions

 EdbEDAPredTab ()
 
void MakeGUI ()
 
void MakeManChkPred ()
 
void MakeManChkPredGivenAngleFromVertex (int id=-999, double ax=999, double ay=999)
 
void MakePredScanPred ()
 
void RemoveFile ()
 
void SetManChkFile (Long_t ipl)
 
void WritePred ()
 

Private Attributes

TGNumberEntry * fIplFrom
 
TGNumberEntry * fIplPropagateTo
 
TGNumberEntry * fIplTo
 
TGTextEntry * fManChkFile
 
TGNumberEntryField * fPredRun
 
TGNumberEntryField * fTx
 
TGNumberEntryField * fTy
 
TGCheckButton * fUseAngle
 
TGNumberEntryField * fVolumeDX
 
TGNumberEntryField * fVolumeDY
 
TGNumberEntryField * fVolumeRun
 
int IplPropagateTo
 
char manchkfile [50]
 
int pred_dx
 
int pred_dy
 
int pred_ipl_from
 
int pred_ipl_to
 
int pred_run
 
int pred_use_angle
 
TObjArray * preds
 

Constructor & Destructor Documentation

◆ EdbEDAPredTab()

EdbEDAPredTab::EdbEDAPredTab ( )
inline
137 :
140 pred_ipl_from(0),
141 pred_ipl_to(0),
142 pred_run(2000),
143 pred_dx(3000),
144 pred_dy(3000){
145 preds = new TObjArray();
146 MakeGUI();
147 }
int pred_run
Definition: EdbEDATabs.h:120
int pred_ipl_to
Definition: EdbEDATabs.h:119
TObjArray * preds
Definition: EdbEDATabs.h:134
int pred_dx
Definition: EdbEDATabs.h:121
int pred_dy
Definition: EdbEDATabs.h:122
void MakeGUI()
Definition: EdbEDATabs.C:617
int pred_ipl_from
Definition: EdbEDATabs.h:118
int pred_use_angle
Definition: EdbEDATabs.h:117
int IplPropagateTo
Definition: EdbEDATabs.h:114

Member Function Documentation

◆ MakeGUI()

void EdbEDAPredTab::MakeGUI ( )
617 {
618 TEveBrowser* browser = gEve->GetBrowser();
619 browser->StartEmbedding(TRootBrowser::kBottom);
620
621 TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot());
622 frmMain->SetWindowName("XX GUI");
623 frmMain->SetCleanup(kDeepCleanup);
624
625 TGLabel *fLabel;
626 int posy=5;
627 int posx=10;
628 int dx=50;
629
630 fLabel = new TGLabel(frmMain,"ManChk pred");
631 fLabel->MoveResize(posx,posy,dx=90,20);
632
633 posx+=dx+5;
634 fLabel = new TGLabel(frmMain,"Propagate to PL =");
635 fLabel->MoveResize(posx,posy,dx=100,20);
636 posx+=dx+5;
637 fIplPropagateTo = new TGNumberEntry(frmMain,IplPropagateTo,11,-1,(TGNumberFormat::EStyle) 5);
638 fIplPropagateTo->MoveResize(posx,posy,dx=40,20);
639 fIplPropagateTo->Connect("ValueSet(Long_t)", "EdbEDAPredTab", this, "SetManChkFile(Long_t)");
640
641 posx+=dx+5;
642 fLabel = new TGLabel(frmMain,"Output >>");
643 fLabel->MoveResize(posx,posy,dx=60,20);
644 posx+=dx+5;
645 fManChkFile = new TGTextEntry(frmMain, Form("manchkpred_pl%02d.txt", IplPropagateTo));
646 fManChkFile->MoveResize(posx,posy,dx=140,20);
647
648
649 posx+=dx+5;
650 TGTextButton *fb = new TGTextButton(frmMain,"Add");
651 fb->MoveResize(posx,posy,dx=50,18);
652 fb->Connect("Clicked()","EdbEDAPredTab",this,"MakeManChkPred()");
653
654 posx+=dx+5;
655 fb = new TGTextButton(frmMain,"rm file");
656 fb->MoveResize(posx,posy,dx=50,18);
657 fb->Connect("Clicked()","EdbEDAPredTab",this,"RemoveFile()");
658
659 posx+=dx+10;
660 fLabel = new TGLabel(frmMain,"Run");
661 fLabel->MoveResize(posx,posy,dx=25,20);
662 posx+=dx+5;
663 fPredRun = new TGNumberEntryField(frmMain,-1, 200);
664 fPredRun->MoveResize(posx,posy,dx=35,20);
665 fPredRun->SetToolTipText("For ScanForth, 200, 300 is recommended.");
666
667 posx+=dx+5;
668 fb = new TGTextButton(frmMain,"Pred Scan");
669 fb->MoveResize(posx,posy,dx=70,18);
670 fb->Connect("Clicked()","EdbEDAPredTab",this,"MakePredScanPred()");
671 fb->SetToolTipText("Make Prediction-Scan prediction\nin ../plnum/ibrick.ipl.1.run.root");
672
673
674 posy+=22;
675 posx=150;
676
677 fLabel = new TGLabel(frmMain,"Tx, Ty =");
678 fLabel->MoveResize(posx,posy,dx=50,20);
679
680 posx+=dx+10;
681 fTx = new TGNumberEntryField(frmMain,-1, 0.0);
682 fTx->SetFormat(TGNumberFormat::kNESRealThree);
683 fTx->MoveResize(posx,posy,dx=45,18);
684 posx+=dx+10;
685 fTy = new TGNumberEntryField(frmMain,-1, 0.0);
686 fTy->SetFormat(TGNumberFormat::kNESRealThree);
687 fTy->MoveResize(posx,posy,dx=45,18);
688
689 posx+=dx+20;
690 fb = new TGTextButton(frmMain,"Pred with given angle from vertex");
691 fb->MoveResize(posx,posy,dx=200,18);
692 fb->Connect("Clicked()","EdbEDAPredTab",this,"MakeManChkPredGivenAngleFromVertex()");
693
694
695 posy+=22;
696 posx=10;
697 fLabel = new TGLabel(frmMain,"Volume Scan");
698 fLabel->MoveResize(posx,posy,dx=90,20);
699
700 posx+=dx+5;
701 fLabel = new TGLabel(frmMain,"Run");
702 fLabel->MoveResize(posx,posy,dx=30,20);
703 posx+=dx+5;
704 fVolumeRun = new TGNumberEntryField(frmMain,-1, pred_run);
705 fVolumeRun->MoveResize(posx,posy,dx=45,20);
706
707 posx+=dx+5;
708 fLabel = new TGLabel(frmMain,"from PL ");
709 fLabel->MoveResize(posx,posy,dx=50,20);
710 posx+=dx+5;
711 fIplFrom = new TGNumberEntry(frmMain,pred_ipl_from,11,-1,(TGNumberFormat::EStyle) 5);
712 fIplFrom->MoveResize(posx,posy,dx=40,20);
713
714 posx+=dx+5;
715 fLabel = new TGLabel(frmMain,"to PL");
716 fLabel->MoveResize(posx,posy,dx=30,20);
717 posx+=dx+5;
718 fIplTo = new TGNumberEntry(frmMain,pred_ipl_to,11,-1,(TGNumberFormat::EStyle) 5);
719 fIplTo->MoveResize(posx,posy,dx=40,20);
720
721 posx+=dx+5;
722 fLabel = new TGLabel(frmMain,"DX=");
723 fLabel->MoveResize(posx,posy,dx=30,20);
724 posx+=dx+5;
725 fVolumeDX = new TGNumberEntryField(frmMain,-1, pred_dx);
726 fVolumeDX->MoveResize(posx,posy,dx=45,20);
727
728 posx+=dx+5;
729 fLabel = new TGLabel(frmMain,"DY=");
730 fLabel->MoveResize(posx,posy,dx=30,20);
731 posx+=dx+5;
732 fVolumeDY = new TGNumberEntryField(frmMain,-1, pred_dy);
733 fVolumeDY->MoveResize(posx,posy,dx=45,20);
734
735
736 posx+=dx+5;
737 fUseAngle = new TGCheckButton(frmMain,"Use angle");
738 fUseAngle->MoveResize(posx,posy,dx=90,20);
739 fUseAngle->SetState(pred_use_angle ? kButtonDown : kButtonUp);
740
741 posx+=dx+5;
742 fb = new TGTextButton(frmMain,"Write");
743 fb->MoveResize(posx,posy,dx=80,20);
744 fb->Connect("Clicked()", "EdbEDAPredTab", this, "WritePred()");
745
746
747// posx+=dx+10;
748
749 frmMain->MapSubwindows();
750 frmMain->Resize();
751 frmMain->MapWindow();
752
753 browser->StopEmbedding();
754 browser->SetTabTitle("Prediction", 2);
755}
TGNumberEntry * fIplTo
Definition: EdbEDATabs.h:126
TGNumberEntryField * fTx
Definition: EdbEDATabs.h:131
TGTextEntry * fManChkFile
Definition: EdbEDATabs.h:113
TGNumberEntryField * fPredRun
Definition: EdbEDATabs.h:127
TGNumberEntry * fIplFrom
Definition: EdbEDATabs.h:125
TGNumberEntryField * fVolumeDY
Definition: EdbEDATabs.h:130
TGNumberEntry * fIplPropagateTo
Definition: EdbEDATabs.h:112
TGCheckButton * fUseAngle
Definition: EdbEDATabs.h:124
TGNumberEntryField * fVolumeDX
Definition: EdbEDATabs.h:129
TGNumberEntryField * fTy
Definition: EdbEDATabs.h:132
TGNumberEntryField * fVolumeRun
Definition: EdbEDATabs.h:128

◆ MakeManChkPred()

void EdbEDAPredTab::MakeManChkPred ( )
459 {
460 TObjArray *selected = gEDA->GetSelected(); // set TObjArray *selected with EdbSegP
461 int i;
462
463 IplPropagateTo = fIplPropagateTo->GetIntNumber();
464 strcpy(manchkfile,fManChkFile->GetText());
465 FILE *fp = fopen(manchkfile,"at");
466
467 printf("-----Calc Segment propagation (for Manual Check) -----\n");
468 printf(" propagate to PL %d ", IplPropagateTo);
469 EdbAffine2D *aff=new EdbAffine2D();
470 printf("on Plate coordinate\n");
472 printf(" error! no affine parameter for PL%d\n",IplPropagateTo);
473 return;
474 }
475 *aff = *gEDA->GetAffine(IplPropagateTo);
476
477 aff->Invert();
478 printf(" affine from global to plate\n");
479 aff->Print();
480 double z=gEDA->GetZ(IplPropagateTo);
481
482 for(i=0;i<selected->GetEntries();i++){
483 EdbSegP *s0 = (EdbSegP *)selected->At(i);
484 EdbTrackP *t = gEDA->GetTrack(s0);
485 EdbSegP *s = new EdbSegP(*s0);
486 s->PropagateTo(z);
487 s->Transform(aff);
488 printf(" %8d %8.1lf %8.1lf %7.4lf %7.4lf 0\n", t->ID(),s->X(),s->Y(),s->TX(),s->TY());
489 if(NULL!=fp) fprintf(fp,"%8d %8.1lf %8.1lf %7.4lf %7.4lf 0\n", t->ID(),s->X(),s->Y(),s->TX(),s->TY());
490 delete s;
491 }
492 if(fp!=NULL) {
493 printf(" values are written in %s\n",manchkfile);
494 fclose(fp);
495 }
496
497}
EdbEDA * gEDA
Definition: EdbEDA.C:3
Definition: EdbAffine.h:17
void Invert()
Definition: EdbAffine.cxx:103
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
double GetZ(int ipl)
Definition: EdbEDA.h:300
EdbAffine2D * GetAffine(int ipl)
Definition: EdbEDA.C:197
char manchkfile[50]
Definition: EdbEDATabs.h:115
TObjArray * GetSelected(void)
Definition: EdbEDA.h:405
EdbTrackP * GetTrack(EdbSegP *s)
Definition: EdbEDA.h:598
Definition: EdbSegP.h:21
Definition: EdbPattern.h:113
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
strcpy(cmd,"cp Shower.root Shower2.root")
fclose(pFile)
#define NULL
Definition: nidaqmx.h:84

◆ MakeManChkPredGivenAngleFromVertex()

void EdbEDAPredTab::MakeManChkPredGivenAngleFromVertex ( int  id = -999,
double  ax = 999,
double  ay = 999 
)
561 {
563 if(NULL==v) {
564 printf("select a vertex!\n");
565 return;
566 }
567 if(ax>100){
568 ax = fTx->GetNumber();
569 ay = fTy->GetNumber();
570 }
571
572 IplPropagateTo = fIplPropagateTo->GetIntNumber();
573 strcpy(manchkfile,fManChkFile->GetText());
574 FILE *fp = fopen(manchkfile,"at");
575
576 printf("-----Make Manual Check Prediction for given angle track -----\n");
577 printf(" propagate to PL %d ", IplPropagateTo);
578 EdbAffine2D *aff=new EdbAffine2D();
579 printf("on Plate coordinate\n");
580 if(aff==NULL) {
581 printf(" error! no affine parameter for PL%d\n",IplPropagateTo);
582 return;
583 }
584 *aff = *gEDA->GetAffine(IplPropagateTo);
585 aff->Invert();
586 printf(" affine from global to plate\n");
587 aff->Print();
588
589 double z=gEDA->GetZ(IplPropagateTo);
590
591 EdbSegP *s = new EdbSegP(id, v->X(), v->Y(), ax,ay);
592 s->SetZ(v->Z());
593 s->PropagateTo(z);
594 s->Transform(aff);
595 printf(" %8d %8.1lf %8.1lf %7.4lf %7.4lf 0\n", s->ID(),s->X(),s->Y(),s->TX(),s->TY());
596 if(NULL!=fp) fprintf(fp,"%8d %8.1lf %8.1lf %7.4lf %7.4lf 0\n", s->ID(),s->X(),s->Y(),s->TX(),s->TY());
597
598 if(fp!=NULL) {
599 printf(" values are written in %s\n",manchkfile);
600 fclose(fp);
601 }
602
603}
EdbVertex * GetSelectedVertex(void)
Definition: EdbEDA.h:439
Definition: EdbVertex.h:69
Float_t X() const
Definition: EdbVertex.h:130
Float_t Z() const
Definition: EdbVertex.h:132
Float_t Y() const
Definition: EdbVertex.h:131

◆ MakePredScanPred()

void EdbEDAPredTab::MakePredScanPred ( )
499 {
500 TObjArray *selected = gEDA->GetSelected(); // set TObjArray *selected with EdbSegP
501 int i;
502
503 IplPropagateTo = fIplPropagateTo->GetIntNumber();
504
505 printf("-----Calc Segment propagation (for Manual Check) -----\n");
506 printf(" propagate to PL %d ", IplPropagateTo);
507 EdbAffine2D *aff=new EdbAffine2D();
508 printf("on Plate coordinate\n");
510 ErrorMessage(Form(" error! no affine parameter for PL%d\nStop.",IplPropagateTo));
511 return;
512 }
513 *aff = *gEDA->GetAffine(IplPropagateTo);
514
515 aff->Invert();
516 printf(" affine from global to plate\n");
517 aff->Print();
518
519 double z=gEDA->GetZ(IplPropagateTo);
520
521 char filename[200];
522 int ver=1;
523 if(gSystem->AccessPathName(Form("../p%03d", IplPropagateTo))){
524 ErrorMessage(Form("There is no directory : ../p%03d\nCheck the directory structure.\n Stop", IplPropagateTo));
525 return;
526 }
527
528
529 sprintf(filename, "../p%03d/%d.%d.%d.%d.pred.root", IplPropagateTo, gEDA->GetBrick(), IplPropagateTo, ver, (int)fPredRun->GetIntNumber());
530 if(!gSystem->AccessPathName(filename)){
531 int ret;
532 new TGMsgBox(gClient->GetRoot(),gEve->GetMainWindow(),"Confirmation",
533 Form("%s already exist.\nDo you want to overwrite?",filename), kMBIconAsterisk, kMBYes|kMBNo,&ret);
534 if(ret==kMBNo) return;
535 }
536
537 TFile f(filename,"recreate");
538 EdbPattern pat;
539 for(i=0;i<selected->GetEntries();i++){
540 EdbSegP *s0 = (EdbSegP *) selected->At(i);
541 EdbTrackP *t = gEDA->GetTrack(s0);
542 EdbSegP *s = new EdbSegP(*s0);
543 s->SetID(t->ID());
544 s->PropagateTo(z);
545 s->Transform(aff);
546 s->SetErrors(50.,50.,0.,0.6,0.6);
547
548 pat.AddSegment(*s);
549
550 delete s;
551 }
552
553 pat.Write("pat");
554 f.Close();
555
556 gEve->SetStatusLine(Form("%s is written.",filename));
557 printf("%s is written.",filename);
558
559}
FILE * f
Definition: RecDispMC.C:150
const char filename[256]
Definition: RecDispNU.C:83
int GetBrick()
Definition: EdbEDA.h:232
Definition: EdbPattern.h:273
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:72
void ErrorMessage(char *title, char *message)
Definition: EdbEDAUtil.C:479

◆ RemoveFile()

void EdbEDAPredTab::RemoveFile ( )
607 {
608 gSystem->Exec(Form("rm %s",fManChkFile->GetText()));
609 printf(Form("rm %s\n",fManChkFile->GetText()));
610}

◆ SetManChkFile()

void EdbEDAPredTab::SetManChkFile ( Long_t  ipl)
612 {
613 fManChkFile->SetText( Form("manchkpred_pl%02d.txt", fIplPropagateTo->GetIntNumber()) );
614}

◆ WritePred()

void EdbEDAPredTab::WritePred ( )
428 {
429 int i;
430 TObjArray *selected = gEDA->GetSelected(); // set TObjArray *selected with EdbSegP
431
432 pred_use_angle = fUseAngle->IsOn();
433 pred_ipl_from = fIplFrom->GetIntNumber();
434 pred_ipl_to = fIplTo->GetIntNumber();
435 pred_run = fVolumeRun->GetIntNumber();
436 pred_dx = fVolumeDX->GetIntNumber();
437 pred_dy = fVolumeDY->GetIntNumber();
438
439 printf("-----Make prediction------------------\n");
440 printf(" run=%d from PL%02d to PL%02d for DX=%d DY=%d, %s\n",
442 pred_use_angle? "using track angle" : "not using track angle");
443
444 if(selected->GetEntries()==0){
445 printf("Please select segments\n");
446 gEve->SetStatusLine(" Error. Please select segments. stop.");
447 return;
448 }
449
450 for(i=0;i<selected->GetEntries();i++){
451 EdbSegP *s = (EdbSegP*) selected->At(i);
452 s->PrintNice();
453 }
454 printf(" under construction\n");
455
456}

Member Data Documentation

◆ fIplFrom

TGNumberEntry* EdbEDAPredTab::fIplFrom
private

◆ fIplPropagateTo

TGNumberEntry* EdbEDAPredTab::fIplPropagateTo
private

◆ fIplTo

TGNumberEntry* EdbEDAPredTab::fIplTo
private

◆ fManChkFile

TGTextEntry* EdbEDAPredTab::fManChkFile
private

◆ fPredRun

TGNumberEntryField* EdbEDAPredTab::fPredRun
private

◆ fTx

TGNumberEntryField* EdbEDAPredTab::fTx
private

◆ fTy

TGNumberEntryField* EdbEDAPredTab::fTy
private

◆ fUseAngle

TGCheckButton* EdbEDAPredTab::fUseAngle
private

◆ fVolumeDX

TGNumberEntryField* EdbEDAPredTab::fVolumeDX
private

◆ fVolumeDY

TGNumberEntryField* EdbEDAPredTab::fVolumeDY
private

◆ fVolumeRun

TGNumberEntryField* EdbEDAPredTab::fVolumeRun
private

◆ IplPropagateTo

int EdbEDAPredTab::IplPropagateTo
private

◆ manchkfile

char EdbEDAPredTab::manchkfile[50]
private

◆ pred_dx

int EdbEDAPredTab::pred_dx
private

◆ pred_dy

int EdbEDAPredTab::pred_dy
private

◆ pred_ipl_from

int EdbEDAPredTab::pred_ipl_from
private

◆ pred_ipl_to

int EdbEDAPredTab::pred_ipl_to
private

◆ pred_run

int EdbEDAPredTab::pred_run
private

◆ pred_use_angle

int EdbEDAPredTab::pred_use_angle
private

◆ preds

TObjArray* EdbEDAPredTab::preds
private

The documentation for this class was generated from the following files: