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  :
138  IplPropagateTo(0),
139  pred_use_angle(0),
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->GetEntriesFast();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
TTree * t
Definition: check_shower.C:4
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:18
Float_t TX() const
Definition: EdbSegP.h:172
void PropagateTo(float z)
Definition: EdbSegP.cxx:292
Float_t X() const
Definition: EdbSegP.h:170
Float_t Y() const
Definition: EdbSegP.h:171
Float_t TY() const
Definition: EdbSegP.h:173
virtual void Transform(const EdbAffine2D *a)
Definition: EdbPattern.h:118
strcpy(cmd,"cp Shower.root Shower2.root")
fclose(pFile)
#define NULL
Definition: nidaqmx.h:84
EdbSegP * s
Definition: tlg2pattern.C:32

◆ 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
Int_t ID() const
Definition: EdbSegP.h:144
void SetZ(float z)
Definition: EdbSegP.h:122
Definition: EdbVertex.h:68
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->GetEntriesFast();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
int GetBrick()
Definition: EdbEDA.h:232
Definition: EdbPattern.h:280
void SetErrors()
Definition: EdbSegP.h:89
void SetID(int id)
Definition: EdbSegP.h:125
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:71
string filename
Definition: emthickness.cpp:34
void ErrorMessage(const char *title, const 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->GetEntriesFast()==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->GetEntriesFast();i++){
451  EdbSegP *s = (EdbSegP*) selected->At(i);
452  s->PrintNice();
453  }
454  printf(" under construction\n");
455 
456 }
void PrintNice() const
Definition: EdbSegP.cxx:418

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: