/************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ /* $Log$ */ #include "AliTPCMonitorDialog.h" #include "Rtypes.h" #include "AliLog.h" ClassImp(AliTPCMonitorDialog) //_____________________________________________________________________________________________ AliTPCMonitorDialog::AliTPCMonitorDialog(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h, UInt_t options, Int_t version,AliTPCMonitor* monitor) { // Constructor for Dialog window. // Create a dialog window.depending on the version it is called with.. // Verrion 0: Choose DATA Format // Version 1: Choose FEC components to display // Version 2: Choose Ranges for base and max adc calculation fMonitor = monitor; fFrameMain = new TGTransientFrame(p, main, w, h, options); fFrameMain->Connect("CloseWindow()", "AliTPCMonitorDialog", this, "DoClose()"); fFrameMain->DontCallClose(); fFrameMain->SetCleanup(kDeepCleanup); fFrameHor = new TGHorizontalFrame(fFrameMain, 60, 20, kFixedWidth); fOkButton = new TGTextButton(fFrameHor, "&Ok", 1); fOkButton->Connect("Clicked()", "AliTPCMonitorDialog", this, "DoOK()"); fLayout1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2); fLayout2 = new TGLayoutHints(kLHintsBottom | kLHintsRight , 2, 2, 5, 1); fLayout3 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5); fFrameHor->AddFrame(fOkButton, fLayout1); fFrameHor->Resize(150, fOkButton->GetDefaultHeight()); fFrameMain->AddFrame( fFrameHor, fLayout2); fTab = new TGTab(fFrameMain, 300, 300); fTab->Connect("Selected(Int_t)", "AliTPCMonitorDialog", this, "DoTab(Int_t)"); CreateDialogVersion(version); } //_____________________________________________________________________________________________ void AliTPCMonitorDialog::CreateDialogVersion(Int_t version) { // Create a dialog window depending on the version passed Char_t tmp[256]; if(version==1) { // Choose DATA Format //////////////////////////////////////////////////// TGTextButton *bt; TGCompositeFrame* tf = fTab->AddTab("Select Format"); fFrameComp = new TGCompositeFrame(tf, 60, 20, kVerticalFrame); fFrameComp->AddFrame(bt = new TGTextButton(fFrameComp, "Select Entry", 1), fLayout3); bt->Connect("Clicked()", "AliTPCMonitorDialog", this, "HandleButtons()"); fFrameComp->AddFrame(fListBox = new TGListBox(fFrameComp, 1), fLayout3); tf->AddFrame(fFrameComp, fLayout3); sprintf(tmp, "ROOT file "); fListBox->AddEntry(tmp, 0); sprintf(tmp, "DATE file "); fListBox->AddEntry(tmp, 1); sprintf(tmp, "DATE file/stream "); fListBox->AddEntry(tmp, 2); fListBox->Resize(200, 80); } else if(version==2) { // choose component to be displayed ///////////////////////////////////// fFrameGroup = new TGGroupFrame(fFrameMain, "Components", kVerticalFrame); fFrameGroup->SetTitlePos(TGGroupFrame::kRight); // right aligned fFrameMain->AddFrame(fFrameGroup, fLayout3); fFrameGroup->SetLayoutManager(new TGMatrixLayout(fFrameGroup, 0, 2, 10)); Char_t buff[100]; Char_t names[6][40] ={ "FEC (global)", "RCU (patch) ", "Branch ", "FEC (local) ", "Connector ", "Chip " }; for (Int_t j = 0; j < 6; j++) { sprintf(buff, "%s", names[j]); fFrameGroup->AddFrame(new TGLabel(fFrameGroup, new TGHotString(buff))); fBuf[j] = new TGTextBuffer(10); fBuf[j]->AddText(0, "all"); fEnt[j] = new TGTextEntry(fFrameMain, fBuf[j]); fEnt[j]->Resize(50, fEnt[j]->GetDefaultHeight()); fEnt[j]->SetFont("-adobe-courier-bold-r-*-*-14-*-*-*-*-*-iso8859-1"); fFrameGroup->AddFrame(fEnt[j]); } TGTextButton* bt2 =0; fFrameGroup->AddFrame(bt2 = new TGTextButton(fFrameGroup, "Select Config", 2), fLayout3); bt2->Connect("Clicked()", "AliTPCMonitorDialog", this, "HandleButtons()"); fFrameGroup->Resize(); } else if(version==3) { // choose component to be displayed ///////////////////////////////////// fFrameGroup = new TGGroupFrame(fFrameMain, "Ranges BASE/MAX/SUM ", kVerticalFrame); fFrameGroup->SetTitlePos(TGGroupFrame::kRight); fFrameMain->AddFrame(fFrameGroup, fLayout3); fFrameGroup->SetLayoutManager(new TGMatrixLayout(fFrameGroup, 0, 2, 10)); Char_t buff[100]; Char_t names[3][40] = { "baseline", "maximum adc", "sum adc ", }; Char_t namebas[40]; sprintf(namebas,"%i,%i",fMonitor->GetRangeBaseMin() , fMonitor->GetRangeBaseMax() ); Char_t namemax[40]; sprintf(namemax,"%i,%i",fMonitor->GetRangeMaxAdcMin(), fMonitor->GetRangeMaxAdcMax()); Char_t namesum[40]; sprintf(namesum,"%i,%i",fMonitor->GetRangeSumMin() , fMonitor->GetRangeSumMax() ); for (Int_t j = 0; j < 3; j++) { sprintf(buff, "%s", names[j]); fFrameGroup->AddFrame(new TGLabel(fFrameGroup, new TGHotString(buff))); fBuf[j] = new TGTextBuffer(30); if(j==0) fBuf[j]->AddText(0,namebas); if(j==1) fBuf[j]->AddText(0,namemax); if(j==2) fBuf[j]->AddText(0,namesum); fEnt[j] = new TGTextEntry(fFrameMain, fBuf[j]); fEnt[j]->Resize(100, fEnt[j]->GetDefaultHeight()); fEnt[j]->SetFont("-adobe-courier-bold-r-*-*-14-*-*-*-*-*-iso8859-1"); fFrameGroup->AddFrame(fEnt[j]); } TGTextButton* bt2 =0; fFrameGroup->AddFrame(bt2 = new TGTextButton(fFrameGroup, "Select Config", 3), fLayout3); bt2->Connect("Clicked()", "AliTPCMonitorDialog", this, "HandleButtons()"); fFrameGroup->Resize(100,300); } TGLayoutHints *fL5 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX | kLHintsExpandY, 2, 2, 5, 1); fFrameMain->AddFrame(fTab, fL5); fFrameMain->MapSubwindows(); fFrameMain->Resize(); fFrameMain->CenterOnParent(); if( version==3) fFrameMain->SetWindowName("Select Ranges"); else if(version==1) fFrameMain->SetWindowName("Select Component"); else fFrameMain->SetWindowName("Select Format"); fFrameMain->MapWindow(); } //_____________________________________________________________________________________________ AliTPCMonitorDialog::~AliTPCMonitorDialog() { // Delete test dialog widgets. fFrameMain->DeleteWindow(); } //_____________________________________________________________________________________________ void AliTPCMonitorDialog::HandleButtons(Int_t id) { // Handle different buttons. if (id == -1) { TGButton *btn = (TGButton*) gTQSender; id = btn->WidgetId(); } switch (id) { case 1: { // Select Format Int_t fsel = fListBox->GetSelected(); if(fsel==-1) { AliError("Warning: No Format selected "); } TGLBEntry* libentr = (TGLBEntry*)fListBox->GetEntry(fsel); AliInfo(Form("Selected Format : %i : %s",fsel,libentr->GetTitle())); fMonitor->SetFormat(fsel); break; } case 2: { // Select FEE Component Int_t comp_sel=1; Int_t fComponents[10]; for(Int_t j = 0; j < 6; j++) { TString s1 = fEnt[j]->GetDisplayText(); if(s1=="all"){ fComponents[j] = -1; } else { fComponents[j] = (int)atoi(s1.Data()); } if( j==0 && (fComponents[j] < -1 || fComponents[j]>5000) || j==1 && (fComponents[j] < -1 || fComponents[j]>5 ) || j==2 && (fComponents[j] < -1 || fComponents[j]>1 ) || j==3 && (fComponents[j] < -1 || fComponents[j]>25 ) || j==4 && (fComponents[j] < -1 || fComponents[j]>6 ) || j==5 && (fComponents[j] < -1 || fComponents[j]>8 ) ) { comp_sel =0; AliError("Settings out of range ( version 2) "); } } if(comp_sel==1) { if(fMonitor!=0 && fMonitor->GetEventProcessed() )fMonitor->ShowSel((Int_t*)fComponents); else AliError("No event processed up to now"); } break; } case 3: { // Set Configuration (base, max, sum) Int_t fConfigArr[6]; string s1((TString)fEnt[0]->GetDisplayText().Data()); string s2((TString)fEnt[1]->GetDisplayText().Data()); string s3((TString)fEnt[2]->GetDisplayText().Data()); Int_t error = 1; if(s1.find(",")!=string::npos){ string sub1_1 = s1.substr(0,s1.find(",")) ;fConfigArr[0] = atoi(sub1_1.data()); string sub1_2 = s1.substr(s1.find(",")+1,s1.length() ) ;fConfigArr[1] = atoi(sub1_2.data()); if(fConfigArr[0]SetRangeBase(fConfigArr[0],fConfigArr[1]); error=0; } } if(s2.find(",")!=string::npos){ string sub2_1 = s2.substr(0,s2.find(",")) ;fConfigArr[2] = atoi(sub2_1.data()); string sub2_2 = s2.substr(s2.find(",")+1,s2.length() ) ;fConfigArr[3] = atoi(sub2_2.data()); if(fConfigArr[2]SetRangeMax(fConfigArr[2],fConfigArr[3]); error=0; } } if(s3.find(",")!=string::npos){ string sub3_1 = s3.substr(0,s3.find(",")) ;fConfigArr[4] = atoi(sub3_1.data()); string sub3_2 = s3.substr(s3.find(",")+1,s3.length() ) ;fConfigArr[5] = atoi(sub3_2.data()); if(fConfigArr[4]SetRangeSum(fConfigArr[4],fConfigArr[5]); error=0; } } if(error!=0) AliError("Settings out of range (version 3)"); break; } default: break; } } //_____________________________________________________________________________________________ void AliTPCMonitorDialog::DoTab(Int_t id) { printf("Tab item %d activated\n", id); } //_____________________________________________________________________________________________ void AliTPCMonitorDialog::DoClose() { // Close the dialog window printf("\nTerminating dialog: via window manager\n"); CloseWindow(); // Close the Ged editor if it was activated. if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0) TVirtualPadEditor::Terminate(); } //_____________________________________________________________________________________________ void AliTPCMonitorDialog::CloseWindow() { // Called when window is closed via the window manager. delete this; } //_____________________________________________________________________________________________ void AliTPCMonitorDialog::DoOK() { // Call from OK button printf("\nTerminating dialog: OK pressed\n"); // The same effect can be obtained by using a singleshot timer: TTimer::SingleShot(150, "AliTPCMonitorDialog", this, "CloseWindow()"); // Close the Ged editor if it was activated. if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0) TVirtualPadEditor::Terminate(); } //_____________________________________________________________________________________________ void AliTPCMonitorDialog::DoCancel() { // Cancel operation and close the dialog window printf("\nTerminating dialog: Cancel pressed\n"); TTimer::SingleShot(150, "AliTPCMonitorDialog", this, "CloseWindow()"); // Close the Ged editor if it was activated. if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0) TVirtualPadEditor::Terminate(); }