// By ROOT version 5.17/02 on 2008-03-13 06:46:41 #ifndef ROOT_TGDockableFrame #include "TGDockableFrame.h" #endif #ifndef ROOT_TGMenu #include "TGMenu.h" #endif #ifndef ROOT_TGMdiDecorFrame #include "TGMdiDecorFrame.h" #endif #ifndef ROOT_TG3DLine #include "TG3DLine.h" #endif #ifndef ROOT_TGMdiFrame #include "TGMdiFrame.h" #endif #ifndef ROOT_TGMdiMainFrame #include "TGMdiMainFrame.h" #endif #ifndef ROOT_TGuiBldHintsButton #include "TGuiBldHintsButton.h" #endif #ifndef ROOT_TGMdiMenu #include "TGMdiMenu.h" #endif #ifndef ROOT_TGListBox #include "TGListBox.h" #endif #ifndef ROOT_TGNumberEntry #include "TGNumberEntry.h" #endif #ifndef ROOT_TGScrollBar #include "TGScrollBar.h" #endif #ifndef ROOT_TGuiBldHintsEditor #include "TGuiBldHintsEditor.h" #endif #ifndef ROOT_TRootBrowser #include "TRootBrowser.h" #endif #ifndef ROOT_TGFrame #include "TGFrame.h" #endif #ifndef ROOT_TGFileDialog #include "TGFileDialog.h" #endif #ifndef ROOT_TGShutter #include "TGShutter.h" #endif #ifndef ROOT_TGButtonGroup #include "TGButtonGroup.h" #endif #ifndef ROOT_TGCanvas #include "TGCanvas.h" #endif #ifndef ROOT_TGFSContainer #include "TGFSContainer.h" #endif #ifndef ROOT_TGButton #include "TGButton.h" #endif #ifndef ROOT_TGuiBldEditor #include "TGuiBldEditor.h" #endif #ifndef ROOT_TGTextEdit #include "TGTextEdit.h" #endif #ifndef ROOT_TGFSComboBox #include "TGFSComboBox.h" #endif #ifndef ROOT_TGLabel #include "TGLabel.h" #endif #ifndef ROOT_TGView #include "TGView.h" #endif #ifndef ROOT_TRootGuiBuilder #include "TRootGuiBuilder.h" #endif #ifndef ROOT_TGTab #include "TGTab.h" #endif #ifndef ROOT_TGListView #include "TGListView.h" #endif #ifndef ROOT_TGSplitter #include "TGSplitter.h" #endif #ifndef ROOT_TGStatusBar #include "TGStatusBar.h" #endif #ifndef ROOT_TGListTree #include "TGListTree.h" #endif #ifndef ROOT_TGToolTip #include "TGToolTip.h" #endif #ifndef ROOT_TGToolBar #include "TGToolBar.h" #endif #ifndef ROOT_TRootEmbeddedCanvas #include "TRootEmbeddedCanvas.h" #endif #ifndef ROOT_TCanvas #include "TCanvas.h" #endif #ifndef ROOT_TGuiBldDragManager #include "TGuiBldDragManager.h" #endif #include "Riostream.h" #include "TThread.h" #include "TApplication.h" #include "TROOT.h" #include "TGraph.h" #include "TH1F.h" #include "hvmon.h" #include TGTextEntry *gTimeDisplay; TGObject* gMyList[50][50] ; TGObject* gMyParList[50][50] ; TGObject* gN470List[50][50]; int gDebug; int gConnected; TGCheckButton *gCheckButton; TGTextButton *gTextButton[10]; TCanvas *fCanvas; TGMainFrame *fMain; hvmon * gHvMon; int UIRDimming(int state){ switch (state) { case 0: gTextButton[0]->SetEnabled(1); gTextButton[1]->SetEnabled(0); gTextButton[2]->SetEnabled(0); gTextButton[3]->SetEnabled(0); gTextButton[4]->SetEnabled(1); break; case 1: gTextButton[0]->SetEnabled(0); gTextButton[1]->SetEnabled(1); gTextButton[2]->SetEnabled(0); gTextButton[3]->SetEnabled(1); gTextButton[4]->SetEnabled(1); break; case 2: gTextButton[0]->SetEnabled(0); gTextButton[1]->SetEnabled(0); gTextButton[2]->SetEnabled(1); gTextButton[3]->SetEnabled(0); gTextButton[4]->SetEnabled(0); break; case 3: gTextButton[0]->SetEnabled(0); gTextButton[1]->SetEnabled(1); gTextButton[2]->SetEnabled(0); gTextButton[3]->SetEnabled(1); gTextButton[4]->SetEnabled(1); break; case 4: gTextButton[0]->SetEnabled(1); gTextButton[1]->SetEnabled(0); gTextButton[2]->SetEnabled(0); gTextButton[3]->SetEnabled(0); gTextButton[4]->SetEnabled(1); break; default: break; } return 0; } void GetDebug(){ if (gCheckButton->IsOn()) gDebug=1; else gDebug=0; } class MStack { public: int fId; int fN; int fData[100]; MStack(){}; MStack(int id, int n, int *x){ for (int i=0;i gStack; //---------------------------------------------------- //TCanvas *c4 = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(cname); int FrameDisplay(int frame, int i, int j, int x){ TGObject *o=NULL; switch (frame) { case 0: o=gMyList[i][j]; break; case 1: o=gMyParList[i][j]; break; case 2: o=gN470List[i][j]; break; } if (!o) return 0; if (o->InheritsFrom("TGNumberEntry")) ((TGNumberEntry *) o)->SetNumber(x); if (o->InheritsFrom("TGNumberEntryField")) ((TGNumberEntryField *) o)->SetNumber(x); if (o->InheritsFrom("TGCheckButton")){ if (x) ((TGCheckButton *) o)->SetState(kButtonDown); else ((TGCheckButton *) o)->SetState(kButtonUp); } return 0; } int fHistoryX[1000]; int fHistoryY[40][1000]; void MyTimer(){ static int tcounter=-1; printf("Timer %d\n",tcounter++); const int nval=1000; if (tcounter%20==0) if (gHvMon) gHvMon->DumpData("hvmon.data"); // draw a frame to define the range static int ncount=0; //TH1F *hr; //static TGraph * gr=NULL; //fCanvas->cd(); //hr = fCanvas->DrawFrame(0,0,1000,600); //hr->SetXTitle("X title"); //hr->SetYTitle("Y title"); if (gHvMon){ HvMap *map=gHvMon->GetHvMap(); for (unsigned int i=0;i< map->hvch.size();i++){ hvstatus *s=&(map->hvch[i].status); hvpar *p=&(map->hvch[i].par); hvdb *d=&(map->hvch[i].db); FrameDisplay(0,i,0,d->V0set/100); FrameDisplay(0,i,1,p->v0set); FrameDisplay(0,i,2,s->vread); FrameDisplay(0,i,3,p->i0set); FrameDisplay(0,i,4,s->iread); FrameDisplay(0,i,5,s->status); for (int j=0;jGetNVal();j++){ int value=p->GetValue(j); FrameDisplay(1,i,j,value); } fHistoryX[tcounter%nval]=tcounter%nval; fHistoryY[i][tcounter%nval]=s->vread; // gr = new TGraph(nval,fHistoryX,fHistoryY[i]); // gr->SetMarkerStyle(20+i%6); // gr->Draw("LP"); } for (unsigned int i=0;i< 8;i++){ caenn470* s=&(gHvMon->fMon[i]); FrameDisplay(2,i,0,s->vmon); FrameDisplay(2,i,1,s->imon); FrameDisplay(2,i,2,s->vmax); FrameDisplay(2,i,3,s->status); fHistoryX[tcounter%nval]=tcounter%nval; fHistoryY[30+i][tcounter%nval]=s->vmon; } time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); char cmd[100]; sprintf(cmd,"%s",asctime (timeinfo)); int len=strlen(cmd); if (len) cmd[len-1]=0; gTimeDisplay->SetText(cmd); } //fCanvas->Modified(); //fCanvas->Update(); } #define M_HVGROUP_ON 0 #define M_RELOAD_DB 1 #define M_HVGROUP_PAR 2 #define M_SETGROUP 3 void ProcessGStack(){ HvMap *map; const int nch=6; int group,state,parameter,value; TGObject * o; while (gStack.size()){ int id = gStack[0].fId; int n = gStack[0].fN; int *x = gStack[0].fData; o=NULL; switch (id){ case M_HVGROUP_ON: // SetHvGroupOn group= x[0]; state= x[1]; if (gHvMon){ map=gHvMon->GetHvMap(); for ( int i=0;i< nch;i++){ if (((TGCheckButton *) gMyList[i+group*6][6])->IsOn()){ TThread::Printf("Setting ch:%d to state %d\n",i,state); map->hvch[i+group*6].SetHvOn( state ); } } } break; case M_RELOAD_DB: TThread::Printf("Reloading db with hv inti %d\n",x[0]); if (gHvMon) gHvMon->ReloadDB(x[0]); break; case M_HVGROUP_PAR: group = x[0]; parameter= x[1]; o=gMyParList[30+group][parameter]; if (!o) return ; value=0; if (o->InheritsFrom("TGNumberEntry")) value = (int) ((TGNumberEntry *) o)->GetNumber(); if (o->InheritsFrom("TGNumberEntryField")) value = (int) ((TGNumberEntryField *) o)->GetNumber(); if (o->InheritsFrom("TGCheckButton")) if (((TGCheckButton *) o)->IsOn()) value=1; else value=1; if (gHvMon){ map=gHvMon->GetHvMap(); const int nch=6; for (int k=0;khvch[k].WriteValue( group , value ); } } break; case M_SETGROUP: parameter =x[1]; group =x[0]; TThread::Printf("SetGroup group=%d parameter=%d\n",group,parameter); if (gHvMon){ map=gHvMon->GetHvMap(); for (int k=0;kIsOn()){ switch (parameter) { case 1: value = (int) ((TGNumberEntry *)(gMyList[30+group][0]))->GetNumber(); break; case 2: value = (int) ((TGNumberEntry *)(gMyList[k+group*nch][0]))->GetNumber(); break; } TThread::Printf("SetGroup group=%d parameter=%d of ch%d to value %d\n",group,parameter,k+group*nch,value); map->hvch[k+group*nch].SetHvValue( value ); } } } break; } TThread::Lock(); gStack.pop_front(); TThread::UnLock(); } } //---------------------------------------------------- // thread function (filling histogram main and drawing total0 on pad1) int gStop=0; void *MyThread(void *ptr) { TThread::Printf("Start of MyThread %x \n" ,(int)ptr); // creating a histogram is explicitely locked by a global mutex // TThread::Lock(); // TH1F *main = new TH1F("main","Main contributor",100,-4,4); // TThread::UnLock(); FILE *fp; FILE *fNull= fopen ("/dev/null", "w"); while (1){ sleep(1); if (!gHvMon) break; if (gDebug) fp=stdout; else fp=fNull; if (gHvMon) gHvMon->Monitor(fp); ProcessGStack(); if (gStop) break; } TThread::Printf("End of MyThread\n"); return 0; } //---------------------------------------------------- void MyEventHandler(int i){ static TThread *th1=0; //Create timer that times out in ms milliseconds. If mode == kTRUE then //the timer is synchronous else a-synchronous. The default is synchronous. static TTimer * tmr = new TTimer(2000, kFALSE); switch (i) { case 0: if (!gHvMon){ gHvMon= new hvmon(); gHvMon->Connect(); gHvMon->Init(); } break; case 1: tmr->SetCommand("MyTimer()"); tmr->TurnOn(); tmr->Start(2000, kFALSE); // 2 seconds single-shot gStop=0; th1 = new TThread(MyThread,(void*)0); th1->Run(); break; case 2: gStop=1; tmr->Stop(); tmr->TurnOff(); break; case 3: if (gHvMon){ gStop=1; gHvMon->Disconnect(); sleep(1); delete gHvMon; gHvMon=NULL; } break; case 4: gApplication->Terminate(0); break; } UIRDimming(i+1); printf("GotSignal From %d\n",i); } //---------------------------------------------------- void SetHvGroupOn(int group, int state){ int data[2]={group,state}; gStack.push_back(MStack(M_HVGROUP_ON,2,data)); } void MySetValue(int i){ printf("SetValue %d\n",i); TGNumberEntry *nw=0; if (nw) nw->SetNumber(nw->GetNumber()+1); } void ReloadFromDB(int i){ gStack.push_back(MStack(M_RELOAD_DB,1,&i)); } void SetGroupParameter(int group,int parameter){ int data[2]={group,parameter}; gStack.push_back(MStack(M_HVGROUP_PAR,2,data)); } void SetGroup(int group ,int parameter){ int data[2]={group,parameter}; gStack.push_back(MStack(M_SETGROUP,2,data)); } //---------------------------------------------------- TCanvas * MyEmbeddedCanvas(TGCompositeFrame *f, int tx, int ty, char *name){ TRootEmbeddedCanvas *ec = new TRootEmbeddedCanvas(0,f,tx, ty); TCanvas *c = new TCanvas( name, tx, ty, ec->GetCanvasWindowId() ); ec->AdoptCanvas(c); f->AddFrame(ec); ec->Resize(); return c; } TGCompositeFrame * HvParameters(TGCompositeFrame *f1,char *txt,int offset){ // TGNumberEntryField *fNumberEntryField; TGNumberEntry *fNumberEntry; TGHorizontalFrame *fHorizontal; TGVerticalFrame *fVertical; TGTextButton *fTextButton; TGLabel *fLabel; TGCheckButton *fCheck; const char *fLabels1[13]={"V0set" ,"V1set" ,"I0set", "I1set", "Vmax" ,"RUp" ,"RDown", "Trip", "HV" ,"PWD" , "PDWN", "On" ,"PWON"}; TGGroupFrame *groupFrame = new TGGroupFrame(f1,txt,kVerticalFrame); fHorizontal=new TGHorizontalFrame(groupFrame,50,200); int maxi=13; for (int i=0;iResize(50,22); fVertical->AddFrame(fLabel, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); int nch=6; for (int j=0;jAddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,0,0)); gMyParList[j+offset*nch][i]=fNumberEntry; } else { fCheck= new TGCheckButton(fVertical,""); fVertical->AddFrame(fCheck, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); gMyParList[j+offset*nch][i]=fCheck; } } char cmd[50]; fTextButton= new TGTextButton(fVertical, "Set"); fVertical->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); sprintf(cmd,"SetGroupParameter(=%d,%d)",offset,i); TQObject::Connect(fTextButton,"Clicked()",0,0,cmd); if (i<8) { fNumberEntry = new TGNumberEntry(fVertical, (Double_t) 0,4,-1,(TGNumberFormat::EStyle) 5); fVertical->AddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,0,0)); gMyParList[30+offset][i]=fNumberEntry; } else { fCheck= new TGCheckButton(fVertical,""); fVertical->AddFrame(fCheck, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); gMyParList[30+offset][i]=fCheck; } fHorizontal->AddFrame(fVertical, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); } groupFrame->AddFrame(fHorizontal, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); return groupFrame; } TGCompositeFrame * HvGroup(TGCompositeFrame *f1,char *txt,int offset){ TGNumberEntryField *fNumberEntryField; TGNumberEntry *fNumberEntry; TGHorizontalFrame *fHorizontal; TGVerticalFrame *fVertical; TGTextButton *fTextButton; TGLabel *fLabel; TGCheckButton *fCheck; const char *fLabels1[7]={ "User","Vset","VMon","Iset","Imon","Status" ,"Enable"}; TGGroupFrame *groupFrame = new TGGroupFrame(f1,txt,kVerticalFrame); fHorizontal=new TGHorizontalFrame(groupFrame,50,200); for (int i=0;i<7;i++){ fVertical=new TGVerticalFrame(fHorizontal,50,200); fLabel= new TGLabel(fVertical, fLabels1[i]); fLabel->Resize(50,22); fVertical->AddFrame(fLabel, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); int nch=6; for (int j=0;jAddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,0,0)); gMyList[j+offset*nch][i]=fNumberEntry; } else { if (i%7==6){ fCheck= new TGCheckButton(fVertical,""); fVertical->AddFrame(fCheck, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); gMyList[j+offset*nch][i]=fCheck; } else { fNumberEntryField = new TGNumberEntryField(fVertical,-1); fNumberEntryField->SetWidth(40); fNumberEntryField->SetState(kFALSE); fVertical->AddFrame(fNumberEntryField, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,0,0)); gMyList[j+offset*nch][i]=fNumberEntryField; } } } fHorizontal->AddFrame(fVertical, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); } groupFrame->AddFrame(fHorizontal, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); fHorizontal=new TGHorizontalFrame(groupFrame,50,50); char cmd[50]; fTextButton= new TGTextButton(fHorizontal, "Set Nominal"); fHorizontal->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); sprintf(cmd,"SetGroup(=%d,%d)",offset,2); TQObject::Connect(fTextButton,"Clicked()",0,0,cmd); fTextButton= new TGTextButton(fHorizontal, "Set All"); fHorizontal->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); sprintf(cmd,"SetGroup(=%d,%d)",offset,1); TQObject::Connect(fTextButton,"Clicked()",0,0,cmd); fNumberEntry = new TGNumberEntry(fHorizontal, (Double_t) 0,4,-1,(TGNumberFormat::EStyle) 5); fHorizontal->AddFrame(fNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,0,0)); gMyList[30+offset][0]=fNumberEntry; fTextButton= new TGTextButton(fHorizontal, "Set On"); fHorizontal->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); sprintf(cmd,"SetHvGroupOn(=%d,%d)",offset,1); TQObject::Connect(fTextButton,"Clicked()",0,0,cmd); fTextButton= new TGTextButton(fHorizontal, "Set Off"); fHorizontal->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); sprintf(cmd,"SetHvGroupOn(=%d,%d)",offset,0); TQObject::Connect(fTextButton,"Clicked()",0,0,cmd); groupFrame->AddFrame(fHorizontal, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); return groupFrame; } TGCompositeFrame * HvN470(TGCompositeFrame *f1,char *txt,int offset,int nch){ TGNumberEntryField *fNumberEntryField; TGNumberEntry *fNumberEntry; TGHorizontalFrame *fHorizontal; TGVerticalFrame *fVertical; TGTextButton *fTextButton; TGLabel *fLabel; TGCheckButton *fCheck; const char *fLabels1[7]={ "VMon","Imon","Vmax","Status"}; TGGroupFrame *groupFrame = new TGGroupFrame(f1,txt,kVerticalFrame); fHorizontal=new TGHorizontalFrame(groupFrame,50,200); for (int i=0;i<4;i++){ fVertical=new TGVerticalFrame(fHorizontal,50,200); fLabel= new TGLabel(fVertical, fLabels1[i]); fLabel->Resize(50,22); fVertical->AddFrame(fLabel, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); for (int j=0;jSetWidth(40); fNumberEntryField->SetState(kFALSE); fVertical->AddFrame(fNumberEntryField, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,0,0)); gN470List[j+offset][i]=fNumberEntryField; } fHorizontal->AddFrame(fVertical, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); } groupFrame->AddFrame(fHorizontal, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); return groupFrame; } void display(){ gDebug=0; // main frame fMain = new TGMainFrame(0,800,800); // fMain->SetLayoutBroken(kTRUE); //------------------------------------------------------------ TGHorizontalFrame *fHorizontalUp=new TGHorizontalFrame(fMain,800,200); TGTextButton *fTextButton; int nbut=5; const char *names[10]={"Connect","Start","Stop","Disconnect","Exit"}; for (int i=0;iSetTextJustify(36); gTextButton[i]->SetMargins(0,0,0,0); gTextButton[i]->SetWrapLength(-1); gTextButton[i]->Resize(50,22); fHorizontalUp->AddFrame(gTextButton[i], new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); // gTextButton[i]->MoveResize(2,28,71,22); char cmd[50]; sprintf(cmd,"MyEventHandler(=%d)",i); TQObject::Connect(gTextButton[i],"Clicked()",0,0,cmd); } // check buttons gCheckButton = new TGCheckButton(fHorizontalUp,"Debug"); gCheckButton->SetTextJustify(36); gCheckButton->SetMargins(0,0,0,0); gCheckButton->SetWrapLength(-1); TQObject::Connect(gCheckButton,"Clicked()", 0, 0 , "GetDebug()"); fHorizontalUp->AddFrame(gCheckButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); // fCheckButton->MoveResize(168,0,62,17); gTimeDisplay = new TGTextEntry( fHorizontalUp,""); gTimeDisplay->Resize(200,30); fHorizontalUp->AddFrame(gTimeDisplay, new TGLayoutHints(kLHintsRight | kLHintsTop,2,2,2,2)); //------------------------------------------------------------ TGHorizontalFrame *fHorizontalMiddle=new TGHorizontalFrame(fMain,800,400); TGHorizontalFrame *fCentral= new TGHorizontalFrame(fMain); TGTab *fLeftTab = new TGTab(fCentral, 700, 350); TGCompositeFrame *fTab0=fLeftTab->AddTab("Bias and Guard"); fTab0->ChangeOptions((fTab0->GetOptions()& ~kHorizontalFrame)| kVerticalFrame); fCanvas=MyEmbeddedCanvas(fLeftTab->AddTab("Guard"),900,700,"fGuard"); MyEmbeddedCanvas(fLeftTab->AddTab("Bias"),900,700,"fBias"); fCentral->AddFrame(fLeftTab, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2)); //--------------------------------------------------------- TGCompositeFrame *f0 =fLeftTab->AddTab("Settings Guard+A+B"); f0->ChangeOptions((f0->GetOptions()& ~kHorizontalFrame)| kVerticalFrame); TGVerticalFrame *fV=new TGVerticalFrame(f0); fV->AddFrame(HvParameters(fV,"Guard",0), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); fV->AddFrame(HvParameters(fV,"Chip A",1), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); fV->AddFrame(HvParameters(fV,"Chip B",2), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); f0->AddFrame(fV, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); //--------------------------------------------------------- f0 =fLeftTab->AddTab("Settings C+D"); f0->ChangeOptions((f0->GetOptions()& ~kHorizontalFrame)| kVerticalFrame); fV=new TGVerticalFrame(f0); fV->AddFrame(HvParameters(fV,"Chip C",3), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); fV->AddFrame(HvParameters(fV,"Chip D",4), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); f0->AddFrame(fV, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); //--------------------------------------------------------- f0 =fLeftTab->AddTab("HAPD and MWPC HV"); f0->ChangeOptions((f0->GetOptions()& ~kHorizontalFrame)| kVerticalFrame); fV=new TGVerticalFrame(f0); fV->AddFrame(HvN470(fV,"HAPD",0,6), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); fV->AddFrame(HvN470(fV,"MWPC",6,2), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); f0->AddFrame(fV, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); //--------------------------------------------------------- TGHorizontalFrame *f1= new TGHorizontalFrame(fTab0); f1->AddFrame(HvGroup(f1,"Chip A",1), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); f1->AddFrame(HvGroup(f1,"Chip B",2), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); f1->AddFrame(HvGroup(f1,"Guard",0), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); fTab0->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsTop |kVerticalFrame,2,2,2,2)); f1= new TGHorizontalFrame(fTab0); f1->AddFrame(HvGroup(f1,"Chip C",3), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); f1->AddFrame(HvGroup(f1,"Chip D",4), new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); TGGroupFrame *fGroupFrame= new TGGroupFrame(f1,"General Commands",kVerticalFrame); fTextButton= new TGTextButton(fGroupFrame, "Reload nominal from DB"); fGroupFrame->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); TQObject::Connect(fTextButton,"Clicked()",0,0,"ReloadFromDB(=1)"); f1->AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); fTab0->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsTop ,2,2,2,2)); //--------------------------------------------------------- TRootEmbeddedCanvas *fEcanvas = new TRootEmbeddedCanvas ("Ecanvas",fHorizontalMiddle,200,100); fHorizontalMiddle->AddFrame(fEcanvas, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1)); fMain->AddFrame(fHorizontalUp , new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2)); fMain->AddFrame(fCentral, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2)); fMain->AddFrame(fHorizontalMiddle, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2)); // status bar TGStatusBar *fStatusBar = new TGStatusBar(fMain,800,22); Int_t parts[] = {20, 10, 20, 10,20,10}; fStatusBar->SetParts(parts,6); fMain->AddFrame(fStatusBar , new TGLayoutHints(kLHintsBottom | kLHintsExpandX)); // fill status bar fields with information; selected is the object // below the cursor; atext contains pixel coordinates info fStatusBar->SetText("Number Of Events",0); fStatusBar->SetText("DAQ Time",2); fStatusBar->SetText("DAQ Efficiency",4); // // Set a name to the main frame fMain->SetWindowName("ARICH Slow HV monitor"); // Map all subwindows of main frame fMain->MapSubwindows(); // fMain->MoveResize(0,0,800,800); fMain->Resize(fMain->GetDefaultSize()); // Map main frame fMain->MapWindow(); // for (int i=0;i<24;i++){ // for (int j=0;j<7;j++){ // printf("%s\n",gMyList[i][j]->GetName()); //} //} UIRDimming(0); }