Пример #1
0
Int_t THaScalerGui::InitPlots() {
// Initialize plots (xscaler style)
  if (!scaler) {
    cout << "THaScalerGui::ERROR: no scaler defined... cannot init."<<endl;
    return -1;
  }
 
  InitPages();
  yboxsize = new Int_t[SCAL_NUMBANK];
  occupied = new Int_t[SCAL_NUMBANK];
  memset(occupied, 0, SCAL_NUMBANK*sizeof(Int_t));
  fDataBuff  = new TGTextBuffer[SCAL_NUMBANK*SCAL_NUMCHAN];
  pair<Int_t, TGTextEntry *> txtpair;
  pair<Int_t, TNtuple *> ntupair;
  char string_ntup[]="UpdateNum:Count:Rate:RateI";
  iloop = 0;  lastsize = YBOXSMALL;
  showselect = SHOWRATE;
  TGTab *fTab = new TGTab(this, 600, 800);
  TGLayoutHints *fLayout = new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 10, 10, 10);
  TGLayoutHints *fLayout2 = new TGLayoutHints(kLHintsNormal ,10, 10, 10, 10);
  if (!scaler->GetDataBase()) {
    cout << "THaScalerGui::WARNING: no database.  Will use defaults..."<<endl;
  }
  Int_t crate = scaler->GetCrate();
  std::string sdirect;
  for (Int_t ipage = 0; ipage < npages; ipage++) {
    Int_t slot = slotmap[ipage];
    char cpage[100]; sprintf(cpage,"%d",ipage);
    std::string spage = cpage;
    sdirect = "none";
    if (scaler->GetDataBase()) 
      sdirect = scaler->GetDataBase()->GetStringDirectives(crate, "xscaler-tabs", spage.c_str());
    if (sdirect != "none") spage = sdirect;
    TGCompositeFrame *tgcf = fTab->AddTab(spage.c_str());
    std::string slayout = "none";
    if (scaler->GetDataBase()) 
      slayout = scaler->GetDataBase()->GetStringDirectives(crate, "xscaler-layout", (std::string)cpage);
    UInt_t pos = slayout.find("x");
    int nrow = 8;  int ncol = 4;  // defaults
    if (pos != std::string::npos) {
      nrow = atoi(slayout.substr(0,pos).c_str());
      ncol = atoi(slayout.substr(pos+1,slayout.length()).c_str());
    }
    yboxsize[ipage] = YBOXSMALL;
    if (nrow * ncol > 16) yboxsize[ipage] = YBOXBIG;
    GCValues_t gval;
    gval.fMask = kGCForeground;
    gClient->GetColorByName("black", gval.fForeground);
    GContext_t labelgc = gVirtualX->CreateGC(gClient->GetRoot()->GetId(), &gval);
    TGLabel *fLpage;
    std::string pagename = "none";
    if (scaler->GetDataBase()) 
      pagename = scaler->GetDataBase()->GetStringDirectives(crate, "xscaler-pagename", (std::string)cpage);
    if (pagename == "none") pagename = spage;
    fLpage = new TGLabel(tgcf, new TGString(pagename.c_str()),labelgc);
    tgcf->AddFrame(fLpage,fLayout);
    occupied[ipage] = nrow;
    Int_t chan = 0;
    for (int row = 0; row < nrow; row++) { // rows 
       TGCompositeFrame *fr; 
       fr = new TGCompositeFrame(tgcf, 50, 0, kHorizontalFrame);
       TGHorizontalLayout *fLhorz;
       fLhorz =  new TGHorizontalLayout(fr);
       fr->SetLayoutManager(fLhorz);
       for (int col = 0; col < ncol; col++) {  // columns
          int index = ipage*SCAL_NUMCHAN + ncol*row+col;
          ntupair.first = index;
          char nname[10];  sprintf(nname,"%d",index);
          ntupair.second = new TNtuple(nname,"scaler",string_ntup); 
          fDataHistory.insert(ntupair);
          TGTextButton *fButton1;
          char cbutton[100];
	  std::string buttonname = "none";
          if (scaler->GetDataBase()) { 
            std::vector<std::string> strb = 
               scaler->GetDataBase()->GetShortNames(crate,slot,chan);
  	    buttonname = strb[0];
	  }
          if (buttonname == "none") {
            sprintf(cbutton,"%d ==>",ncol*row+col+1);
          } else {
            sprintf(cbutton,buttonname.c_str());
	  }
          fButton1 = new TGTextButton(fr,new TGHotString(cbutton),
                   SCAL_NUMBANK*SCAL_NUMCHAN + OFFSET_HIST + index);
          fr->AddFrame(fButton1, fLayout);
          fButton1->Associate(this);
          txtpair.first = index;
          txtpair.second = new TGTextEntry(fr,&fDataBuff[index]);
          fDataEntry.insert(txtpair);
	  fr->AddFrame(fDataEntry[index],fLayout);             
 	  chan++;
       }
       tgcf->AddFrame(fr,fLayout);
     }       
  }

  AddFrame(fTab,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,0,0,0,0));
  TGGroupFrame *fGb = 
     new TGGroupFrame(this, new TGString("Click channel button for history plot.  Click ``Show Rates'' or ``Show Counts, etc''"));
  TGCompositeFrame *fGCb = new TGCompositeFrame(fGb, 10, 0, kHorizontalFrame);
  TGHorizontalLayout *fLhorzb =  new TGHorizontalLayout(fGCb);
  fGCb->SetLayoutManager(fLhorzb);
  TGHotString *fLabel = new TGHotString("HELP");
  TGTextButton *fHelp = new TGTextButton(fGCb,fLabel,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_HELP);
  fGCb->AddFrame(fHelp, fLayout2);
  fHelp->Associate(this);
  fLabel = new TGHotString("QUIT");
  TGTextButton *fQuit = new TGTextButton(fGCb,fLabel,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_QUIT);
  fGCb->AddFrame(fQuit, fLayout2);
  fQuit->Associate(this);
  TGLabel *fGlabel2 = new TGLabel(fGCb, new TGString("                                                    "));
  fGCb->AddFrame(fGlabel2, fLayout);
  TGHotString *fHString1 = new TGHotString("Show Rates"); 
  fRateSelect = new TGCheckButton(fGCb,fHString1,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_RATE);
  fGCb->AddFrame(fRateSelect, fLayout);
  fRateSelect->Associate(this);
  fRateSelect->SetState(kButtonDown);
  TGHotString *fHString2 = new TGHotString("Show Counts"); 
  fCountSelect = new TGCheckButton(fGCb, fHString2,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_COUNT);
  fGCb->AddFrame(fCountSelect, fLayout);
  fCountSelect->Associate(this);
  fCountSelect->SetState(kButtonUp);
  TGHotString *fHString3 = new TGHotString("Norm-by-Current"); 
  fNormISelect = new TGCheckButton(fGCb,fHString3,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_NORMI);
  fGCb->AddFrame(fNormISelect, fLayout);
  fNormISelect->Associate(this);
  fNormISelect->SetState(kButtonUp);
  fGb->AddFrame(fGCb,fLayout2);
  TGLayoutHints *fL1 = new TGLayoutHints(kLHintsNormal | kLHintsExpandX , 10, 10, 10, 10);
  AddFrame(fGb, fL1);
  MapSubwindows();
  Layout();
  SetWindowName("HALL  A   SCALER   DATA");
  SetIconName("Scalers");
  MapWindow(); 
  Resize(900,yboxsize[0]);
  lastsize = yboxsize[0];
  return 0;
};
Пример #2
0
//______________________________________________________________________________
Bool_t ArgusWindow::CreateTabs()
{
   ArgusTab         *tab;
   Int_t             iTab;
   const Int_t       nTabs = fTabObjects->GetEntriesFast();
   TGCompositeFrame *tabFrame;
   Int_t             newID;
   TGTab            *parentTab;
   TGTab            *newTab;
   TGListTreeItem   *item;
   ROMEString        command = "";
   Int_t             iParent;
//   Bool_t            isSwitch;   

   for (iTab = 0; iTab < nTabs; iTab++) {
      tab = GetTabObjectAt(iTab);
//      isSwitch = tab->IsSwitch();

      // switch off the tab if its ancestor is off
      iParent = fParentIndex[iTab];
      while (iParent != -1) {
         if (! GetTabObjectAt(iParent)->IsSwitch()) {
            tab->SetSwitch(kFALSE);
            break;
         }
         iParent = fParentIndex[iParent];
      }
//      cout << "CreateTabs : " << iTab << " " << tab->IsSwitch() << " " << isSwitch << " " << tab->GetName() << endl;

      if (!tab->IsSwitch()) {
         continue;
      }

      if (!fListTreeView) {
         parentTab = (fParentIndex[iTab]==-1) ? fTab : static_cast<TGTab*>(fTGTab->At(fParentIndex[iTab]));
         if (fNumberOfChildren[iTab]<=0) {
            if (fTabWindow) {
               if (parentTab) {
                  newID = parentTab->GetNumberOfTabs() + ( (fParentIndex[iTab]==-1) ? 0 : 1000*fParentIndex[iTab] );
                  tabFrame = parentTab->AddTab(tab->GetTitle());
                  tab->ReparentWindow(tabFrame, 60, 20);
                  tab->ArgusInit();
                  tab->SetID(newID);
                  tabFrame->AddFrame(tab, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY , 0, 0, 0, 0));
               }
            }
         } else {
            newID = parentTab->GetNumberOfTabs() + ( (fParentIndex[iTab]==-1) ? 0 : 1000*fParentIndex[iTab] );
            tabFrame = parentTab->AddTab(tab->GetTitle());
            tab->ReparentWindow(tabFrame, 60, 20);
            tab->ArgusInit();
            tab->SetID(newID);
            newTab = new TGTab(tabFrame);
            command.SetFormatted("gAnalyzer->GetWindow()->ProcessMessage($MSG, $PARM1 + %d, $PARM2)", iTab*1000);
            newTab->SetCommand(command.Data());
            tabFrame->AddFrame(newTab, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 0, 0, 1, 1));
            fTGTab->AddAt(newTab, iTab);
         }
      } else {
         if (fTabWindow) { // we don't have listtrees for sub-windows
            item = (fParentIndex[iTab]==-1) ? 0 : fListTreeItem[fParentIndex[iTab]];
            fListTreeItem[iTab] = fListTree->AddItem(item, tab->GetTitle());
            fListTree->OpenItem(fListTreeItem[iTab]);
         }
         if (fNumberOfChildren[iTab]<=0) {
            tab->ReparentWindow(fMainFrame, 60, 20);
            tab->ArgusInit();
            fMainFrame->AddFrame(tab, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY , 0, 0, 0, 0));
            if (!fTabWindow) {
               return kTRUE;
            }
         } else {
            tab->ArgusInit();
         }
      }
   }

   return kTRUE;
}