FEDRA emulsion software from the OPERA Collaboration
EdbEDAOperationTab Class Reference

#include <EdbEDATabs.h>

Collaboration diagram for EdbEDAOperationTab:

Public Member Functions

void AttachToVertex (EdbVertex *v, TObjArray *tracks)
 
void AttachToVertexButton ()
 
void ConnectTracks (EdbTrackP *t0, EdbTrackP *t1)
 
void ConnectTracksButton (void)
 
void DisconnectTracks (void)
 
void DumpTrack (EdbTrackP *t, FILE *fp=NULL, int run=99, int plate_coordinate=1)
 
void DumpTracksButton (void)
 
 EdbEDAOperationTab (void)
 
void MoveToTrackSetButton ()
 
void Redo (void)
 
void RemoveSegment (void)
 

Private Types

enum  {
  kNone , kConnect , kDisconnect , kRemoveSegment ,
  kAttarchToVertex
}
 

Private Attributes

TEveBrowser * browser
 
int eLastOperation
 
EdbEDATrackSeteSet
 
EdbTrackPeT0org
 
EdbTrackPeT0p
 
EdbTrackPeT1org
 
EdbTrackPeT1p
 store values for Redo More...
 
TGMainFrame * frame
 
TGNumberEntryField * fRun
 

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
kNone 
kConnect 
kDisconnect 
kRemoveSegment 
kAttarchToVertex 
@ kRemoveSegment
Definition: EdbEDATabs.h:168
@ kAttarchToVertex
Definition: EdbEDATabs.h:168
@ kConnect
Definition: EdbEDATabs.h:168
@ kDisconnect
Definition: EdbEDATabs.h:168
@ kNone
Definition: EdbEDATabs.h:168

Constructor & Destructor Documentation

◆ EdbEDAOperationTab()

EdbEDAOperationTab::EdbEDAOperationTab ( void  )
758 browser = gEve->GetBrowser();
759 browser->StartEmbedding(TRootBrowser::kBottom);
760
761 frame = new TGMainFrame(gClient->GetRoot());
762 frame->SetWindowName("XX GUI");
763 frame->SetCleanup(kDeepCleanup);
764
765 TGLabel *fLabel;
766 TGTextButton *fb;
767
768 int posy=10;
769 int posx=10;
770 int dx=0;
771 fLabel = new TGLabel(frame,"For Track :");
772 fLabel->MoveResize(posx,posy,dx=80,20);
773
774 posx+=dx+10;
775 fb = new TGTextButton(frame,"Connect");
776 fb->MoveResize(posx,posy,dx=80,20);
777 fb->Connect("Clicked()","EdbEDAOperationTab",this,"ConnectTracksButton()");
778
779 posx+=dx+10;
780 fb = new TGTextButton(frame,"Disconnect");
781 fb->MoveResize(posx,posy,dx=80,20);
782 fb->Connect("Clicked()","EdbEDAOperationTab",this,"DisconnectTracks()");
783
784 posx+=dx+10;
785 fb = new TGTextButton(frame,"RemoveSegment");
786 fb->MoveResize(posx,posy,dx=100,20);
787 fb->Connect("Clicked()","EdbEDAOperationTab",this,"RemoveSegment()");
788
789 posx+=dx+20;
790 fb = new TGTextButton(frame,"Attach to Vtx");
791 fb->MoveResize(posx,posy,dx=100,20);
792 fb->Connect("Clicked()","EdbEDAOperationTab",this,"AttachToVertexButton()");
793 fb->SetToolTipText( "Attach selected tracks to the selected vertex (red).\n"
794 "the vertex position will not be re-calculated.");
795
796
797 posx+=dx+20;
798 fb = new TGTextButton(frame,"Move to TrackSet");
799 fb->MoveResize(posx,posy,dx=100,20);
800 fb->Connect("Clicked()","EdbEDAOperationTab",this,"MoveToTrackSetButton()");
801 fb->SetToolTipText("Move current selected tracks to a different track set.");
802
803 posx+=dx+30;
804 fb = new TGTextButton(frame,"Dump text");
805 fb->MoveResize(posx,posy,dx=100,20);
806 fb->Connect("Clicked()","EdbEDAOperationTab",this,"DumpTracksButton()");
807 fb->SetToolTipText("Dump all segments of the selected tracks to a text file.\nthis would be usefull when you want to show a volume scan data with another volume scan data.");
808
809/* posx+=dx+10;
810 fLabel = new TGLabel(frame,"Run");
811 fLabel->MoveResize(posx,posy,dx=25,20);
812 posx+=dx+5;
813 fRun = new TGNumberEntryField(frame,-1, 2000);
814 fRun->MoveResize(posx,posy,dx=45,20);
815 fRun->SetToolTipText("Run number.");
816*/
817
818
819 posy+=20;
820 posx=10;
821 fb = new TGTextButton(frame,"Redo");
822 fb->MoveResize(posx,posy,dx=80,20);
823 fb->Connect("Clicked()","EdbEDAOperationTab",this,"Redo()");
824
825 frame->MapSubwindows();
826 frame->Resize();
827 frame->MapWindow();
828
829 browser->StopEmbedding();
830 browser->SetTabTitle("Operation", 2);
831}
TGMainFrame * frame
Definition: EdbEDATabs.h:162
int eLastOperation
Definition: EdbEDATabs.h:167
TEveBrowser * browser
Definition: EdbEDATabs.h:161

Member Function Documentation

◆ AttachToVertex()

void EdbEDAOperationTab::AttachToVertex ( EdbVertex v,
TObjArray *  tracks 
)
834 {
835 ErrorMessage("Under construction.");
836}
void ErrorMessage(char *title, char *message)
Definition: EdbEDAUtil.C:479

◆ AttachToVertexButton()

void EdbEDAOperationTab::AttachToVertexButton ( )
837 {
838 ErrorMessage("Under construction.");
839}

◆ ConnectTracks()

void EdbEDAOperationTab::ConnectTracks ( EdbTrackP t0,
EdbTrackP t1 
)
875 {
876
877 printf("Connect track %d (pl %02d -> %02d) and track %d (pl %02d -> %02d), remove %d\n",
878 t0->ID(), t0->GetSegmentFirst()->Plate(), t0->GetSegmentLast()->Plate(),
879 t1->ID(), t1->GetSegmentFirst()->Plate(), t1->GetSegmentLast()->Plate(), t1->ID());
880 int i,j;
881
882 // store values for redo
883 eT0org=new EdbTrackP;
884 eT0org->Copy(*t0);
885 eT0p = t0;
886 eT1p = t1;
887 eSet = gEDA->GetTrackSet(t1);
889
890 // add segments from t1 into t0.
891 for(i=0;i<t1->N();i++) {
892 EdbSegP *s1 = t1->GetSegment(i);
893 EdbSegP *s0;
894 int flag_double=0;
895 for(j=0;j<t0->N();j++) { // check double entry in a plate.
896 s0 = t0->GetSegment(j);
897 if(s1->Plate()==s0->Plate()) {
898 flag_double=1;
899 break;
900 }
901 }
902 if(flag_double){
903 // doesn't do anything.
904
905 /*
906 // if 2 segment in a plate, put priority on smaller flag. as result, priority SF>SB>MAN>TS.
907 if(t0->Flag()<=t1->Flag()) {}
908 else {
909 t0->RemoveSegment(s0);
910 t0->AddSegment(s1);
911 }
912 */
913 printf("double segment on plate %d. ignore the segments from track %d.\n", s1->Plate(), t1->ID());
914 }
915 else t0->AddSegment(s1);
916 }
917
918 t0->SetNpl();
919 t0->SetSegmentsTrack();
920 t0->SetCounters();
921
922 // set t1->N() = 0
924}
EdbEDA * gEDA
Definition: EdbEDA.C:3
EdbEDATrackSet * eSet
Definition: EdbEDATabs.h:166
EdbTrackP * eT0org
Definition: EdbEDATabs.h:165
EdbTrackP * eT1p
store values for Redo
Definition: EdbEDATabs.h:165
EdbTrackP * eT0p
Definition: EdbEDATabs.h:165
EdbEDATrackSet * GetTrackSet(int i)
Definition: EdbEDA.h:617
void RemoveTrackBase(EdbTrackP *t)
Definition: EdbEDA.h:640
Definition: EdbSegP.h:21
Int_t ID() const
Definition: EdbSegP.h:147
Int_t Plate() const
Definition: EdbSegP.h:159
Definition: EdbPattern.h:113
void AddSegment(EdbSegP *s)
Definition: EdbPattern.h:214
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
EdbSegP * GetSegmentLast() const
Definition: EdbPattern.h:190
void SetNpl(int npl)
Definition: EdbPattern.h:168
int SetSegmentsTrack(int id)
Definition: EdbPattern.h:246
EdbSegP * GetSegmentFirst() const
Definition: EdbPattern.h:189
void SetCounters()
Definition: EdbPattern.h:159
EdbSegP * s1
Definition: tlg2couples.C:29

◆ ConnectTracksButton()

void EdbEDAOperationTab::ConnectTracksButton ( void  )
928 {
929
930 TObjArray *selected_tracks = gEDA->GetSelectedTracks();
931 if(selected_tracks->GetEntries()<=1){
932 printf("Select 2 tracks (segments) to be connected.\n");
933 return;
934 }
935
936 // t0 is the parent
937 EdbTrackP *t0 = (EdbTrackP *) selected_tracks->At(0);
938 EdbTrackP *t1 = (EdbTrackP *) selected_tracks->At(1);
939
940 EdbEDATrackSet *set0 = gEDA->GetTrackSet(t0);
941 EdbEDATrackSet *set1 = gEDA->GetTrackSet(t1);
942
943 // if 2 tracks are from same TrackSet, sort by Z
944 if( set0==set1 ){
945 // soarted by the Z of first segment. (EdbTrackP is sortable)
946 selected_tracks->Sort();
947 // most upstream segment is the parent by default
948 t0 = (EdbTrackP *) selected_tracks->At(0);
949 t1 = (EdbTrackP *) selected_tracks->At(1);
950 }
951
952 // if the t0 is from BT && t1 from TS, set parent as TS.
953 if(set0==gEDA->GetTrackSet("BT")&&set1==gEDA->GetTrackSet("TS")){
954 EdbTrackP *temp=t1;
955 t1=t0; t0=temp;
956 }
957
958 ConnectTracks(t0,t1); // merge t1 into t0.
959
960 gEDA->Redraw();
961}
void ConnectTracks(EdbTrackP *t0, EdbTrackP *t1)
Definition: EdbEDATabs.C:875
TObjArray * GetSelectedTracks(void)
Definition: EdbEDA.h:417
Definition: EdbEDATrackSet.h:178
void Redraw()
Definition: EdbEDA.h:680

◆ DisconnectTracks()

void EdbEDAOperationTab::DisconnectTracks ( void  )
966 {
967 TObjArray *selected_tracks = gEDA->GetSelectedTracks();
968 TObjArray *selected = gEDA->GetSelected();
969 EdbTrackP *t = (EdbTrackP *) selected_tracks->At(0);
970 EdbSegP *ss = (EdbSegP *) selected->At(0);
971
972
973 if(t==NULL||ss==NULL) {
974 ErrorMessage("Select a segment! (most upstream segment of downstream track)");
975 return;
976 }
977 if(!IsSegment(ss)){
978 ErrorMessage("Select a segment! (most upstream segment of downstream track)");
979 return;
980 }
981
982 if(ss==t->GetSegmentFirst()) {
983 ErrorMessage("Select a segment! (most upstream segment of downstream track)");
984 return;
985 }
986
987 printf("Disconnect a track into 2 tracks by a selected segment.\n");
988
989
991
992 EdbTrackP *tnew = new EdbTrackP;
993 set->AddTrack(tnew);
994
995 tnew->Set(set->N()-1, ss->X(),ss->Y(),ss->TX(),ss->TY(),ss->W(),ss->Flag());
996 tnew->SetZ(ss->Z());
997 tnew->SetPID(ss->PID());
998
999 eT0org=new EdbTrackP;
1000 eT0org->Copy(*t); // store values for Redo.
1001 eT0p = t;
1002 eT1p = tnew;
1004
1005 for(int i=0;i<t->N();i++){
1006 EdbSegP *s = t->GetSegment(i);
1007 EdbSegP *sf = t->GetSegmentF(i);
1008 if(s->Compare(ss)>=0) {
1009 t->RemoveSegment(s);
1010 //t->RemoveSegmentF(s);
1011 tnew->AddSegment(s);
1012 tnew->AddSegmentF(sf);
1013 i--;
1014 }
1015 }
1016 tnew->SetSegmentsTrack();
1017 tnew->SetCounters();
1018
1019 gEDA->Redraw();
1020}
TObjArray * GetSelected(void)
Definition: EdbEDA.h:405
void SetPID(int pid)
Definition: EdbSegP.h:129
void SetZ(float z)
Definition: EdbSegP.h:125
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:87
void AddSegmentF(EdbSegP *s)
Definition: EdbPattern.h:233
EdbScanSet * set
Definition: emtraceback.cpp:14
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
ss
Definition: energy.C:62
int IsSegment(TObject *o)
Definition: EdbEDAUtil.C:29
#define NULL
Definition: nidaqmx.h:84

◆ DumpTrack()

void EdbEDAOperationTab::DumpTrack ( EdbTrackP t,
FILE *  fp = NULL,
int  run = 99,
int  plate_coordinate = 1 
)
1075 {
1076
1077 for(int i=0; i<t->N(); i++){
1078 EdbSegP *s0 = t->GetSegment(i);
1079 EdbSegP *s = new EdbSegP(*s0);
1080 int ipl = s->Plate();
1081 if(plate_coordinate){
1082 EdbAffine2D *aff0 = gEDA->GetAffine(ipl);
1083 EdbAffine2D *aff = new EdbAffine2D(*aff0);
1084 aff->Invert();
1085 s->Transform(aff);
1086 delete aff;
1087 }
1088 fprintf(fp,"%5d %2d %2d %8.1f %8.1f %7.4f %7.4f %d %4d\n",
1089 t->ID(), ipl, (int)s->W(), s->X(), s->Y(), s->TX(), s->TY(), plate_coordinate, run);
1090 delete s;
1091 }
1092
1093}
Definition: EdbAffine.h:17
void Invert()
Definition: EdbAffine.cxx:103
EdbAffine2D * GetAffine(int ipl)
Definition: EdbEDA.C:197
EdbRun * run
Definition: check_raw.C:38

◆ DumpTracksButton()

void EdbEDAOperationTab::DumpTracksButton ( void  )
1095 {
1096 FILE *fp;
1097
1098 char defaultname[256];
1099 if(gEDA->NSelectedTracks()==1) sprintf(defaultname,"track%d.txt", gEDA->GetSelectedTrack()->ID());
1100 else sprintf(defaultname,"track.txt");
1101
1102 TGFileInfo *fi=new TGFileInfo;
1103 fi->fIniDir = StrDup(".");
1104 const char *filetypes[] = { "track text", "*.txt", "All files","*",0,0};
1105 fi->fFileTypes = filetypes;
1106 fi->fFilename = defaultname;
1107 new TGFileDialog(gClient->GetRoot(), gEve->GetMainWindow(), kFDSave, fi);
1108
1109 if(fi->fFilename==NULL) return;
1110 if(strlen(fi->fFilename)==0) return;
1111
1112 int plate_coordinate = EdbEDAUtil::AskYesNo("Save in plate codinate?");
1113
1114
1115 fp=fopen(fi->fFilename,"wt");
1116
1117 if(fp==NULL) {
1118 ErrorMessage(Form("File open error : %s\n", fi->fFilename));
1119 return;
1120 }
1121
1122 for(int i=0; i<gEDA->NSelectedTracks();i++){
1123 DumpTrack(gEDA->GetSelectedTrack(i), fp, 99, plate_coordinate);
1124 //DumpTrack(gEDA->GetSelectedTrack(i), fRun->GetIntNumber(), fp);
1125 }
1126
1127 fclose(fp);
1128
1129 printf("%d tracks was writen in %s\n", gEDA->NSelectedTracks(), fi->fFilename);
1130 delete fi;
1131}
void DumpTrack(EdbTrackP *t, FILE *fp=NULL, int run=99, int plate_coordinate=1)
Definition: EdbEDATabs.C:1075
EdbTrackP * GetSelectedTrack(int i=-1)
Definition: EdbEDA.h:421
int NSelectedTracks()
Definition: EdbEDA.h:419
fclose(pFile)
bool AskYesNo(char *message)
Definition: EdbEDAUtil.C:484

◆ MoveToTrackSetButton()

void EdbEDAOperationTab::MoveToTrackSetButton ( )
841 {
842
843 if( gEDA->NSelectedTracks()==0) {
844 ErrorMessage("Please select one or more tracks.");
845 return;
846 }
847
848 int isel;
849 new EdbEDATrackSetList(gEDA->GetTrackSets(), &isel, "Select Track set");
850 EdbEDATrackSet *set = isel!=-1 ? gEDA->GetTrackSet(isel) : NULL;
851
852
853 if(set==NULL){
854 ErrorMessage("TrackSet is not selected. stop.");
855 return;
856 }
857
858 printf("Selected = %s\n", set->GetName());
859 for(int i=0;i<gEDA->NSelectedTracks(); i++){
862 if(set==set0) continue;
863 set->AddTrack(t);
864 set0->RemoveTrack(t);
865 set0->RemoveTrackBase(t);
866 printf("track %5d move from TrackSet %s to %s.\n", t->ID(), set0->GetName(), set->GetName());
867 }
868 gEDA->Redraw();
869
870}
Definition: EdbEDATabs.h:188
void RemoveTrack(EdbTrackP *t)
Definition: EdbEDATrackSet.h:324
void RemoveTrackBase(EdbTrackP *t)
Definition: EdbEDATrackSet.h:323
TObjArray * GetTrackSets()
Definition: EdbEDA.h:638

◆ Redo()

void EdbEDAOperationTab::Redo ( void  )
1057 {
1058 if(eLastOperation==kNone) return;
1060 *eT0p=*eT0org;
1061 eSet->AddTrack(eT1p); //
1062 }
1064 *eT0p=*eT0org; //
1066 }
1068 *eT0p=*eT0org;
1069 }
1070
1072 gEDA->Redraw();
1073}
void AddTrack(EdbTrackP *t)
Definition: EdbEDATrackSet.h:277

◆ RemoveSegment()

void EdbEDAOperationTab::RemoveSegment ( void  )
1022 {
1023 TObjArray *selected_tracks = gEDA->GetSelectedTracks();
1024 TObjArray *selected = gEDA->GetSelected();
1025 EdbTrackP *t = (EdbTrackP *) selected_tracks->At(0);
1026 EdbSegP *ss = (EdbSegP *) selected->At(0);
1027
1028 if(t->N()==1){
1029 ErrorMessage("There is only one segment. Cannot remove.");
1030 return;
1031 }
1032
1033 if(t==NULL||ss==NULL) {
1034 ErrorMessage("Select a segment! \n");
1035 return;
1036 }
1037 if(!IsSegment(ss)){
1038 ErrorMessage("Select a segment! \n");
1039 return;
1040 }
1041
1042 printf("Remove Segment Disconnect a track into 2 tracks by a selected segment.\n");
1043
1044 eT0org=new EdbTrackP;
1045 eT0org->Copy(*t); // store values for Redo.
1046 eT0p=t;
1047
1048 t->RemoveSegment(ss);
1050
1051 t->SetSegmentsTrack();
1052 t->SetCounters();
1053
1054 gEDA->Redraw();
1055}

Member Data Documentation

◆ browser

TEveBrowser* EdbEDAOperationTab::browser
private

◆ eLastOperation

int EdbEDAOperationTab::eLastOperation
private

◆ eSet

EdbEDATrackSet* EdbEDAOperationTab::eSet
private

◆ eT0org

EdbTrackP* EdbEDAOperationTab::eT0org
private

◆ eT0p

EdbTrackP * EdbEDAOperationTab::eT0p
private

◆ eT1org

EdbTrackP * EdbEDAOperationTab::eT1org
private

◆ eT1p

EdbTrackP * EdbEDAOperationTab::eT1p
private

store values for Redo

◆ frame

TGMainFrame* EdbEDAOperationTab::frame
private

◆ fRun

TGNumberEntryField* EdbEDAOperationTab::fRun
private

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