00001
00002 #include <TSystem.h>
00003 #include <TRootEmbeddedCanvas.h>
00004
00005
00006 #include "bfemDisplay/EDControl.h"
00007 #include "bfemDisplay/EDGui.h"
00008 #include "bfemDisplay/Enum.h"
00009
00010
00011
00012
00013 static const TString CONFIG_FILE = BFEMDISPLAYROOT + "/" + BFEMDISPLAYCONFIG + "/EDConfig";
00014
00015
00016 extern EDControl *m_evtCtrl;
00017
00018 Char_t m_threshVal[ 3 ][ 4 ][ 10 ]
00019 = { { "0.1", "0.5", "2.0", "10.0" }, { "0.1", "0.5", "2.0", "10.0" }, { "0.5", "1.0", "2.0", "4.0" } };
00020
00021
00022 ClassImpQ(EDGui)
00023
00024
00025 EDGui::EDGui( const TGWindow *p, UInt_t w, UInt_t h ): TGMainFrame( p, w, h ) {
00026
00027 m_rawFileExists = kFALSE;
00028 m_reconFileExists = kFALSE;
00029
00030 m_inLoop = kFALSE;
00031
00032 m_ModeIsDisplay = kTRUE;
00033
00034
00035 sprintf( m_RawFilePath, "%s", "" );
00036 sprintf( m_ReconFilePath, "%s", "" );
00037
00038
00039
00040 cout << (const char *)CONFIG_FILE << endl;
00041
00042 ifstream configFile;
00043
00044 if ( !gSystem->AccessPathName( (const char *)CONFIG_FILE, kFileExists ) ) {
00045
00046
00047 configFile.open( (const char *)CONFIG_FILE );
00048 configFile >> m_dataDir;
00049
00050 if ( gSystem->AccessPathName( m_dataDir, kFileExists ) ) {
00051
00052 sprintf( m_dataDir, gSystem->WorkingDirectory() );
00053 }
00054
00055
00056 for ( Int_t detTyp=0; detTyp<3; ++detTyp ) {
00057 for ( Int_t lev=0; lev<4; ++lev ) configFile >> m_threshVal[ detTyp ][ lev ];
00058 }
00059
00060 configFile.close();
00061
00062 }
00063
00064 else {
00065
00066
00067
00068 sprintf( m_dataDir, gSystem->WorkingDirectory() );
00069
00070 }
00071
00072
00073
00074 m_MenuBarLayout = new TGLayoutHints( kLHintsTop | kLHintsLeft | kLHintsExpandX,
00075 1, 1, 1, 1 );
00076 m_MenuBarItemLayout = new TGLayoutHints( kLHintsTop | kLHintsLeft, 4, 0, 0, 0 );
00077
00078 m_MenuFile = new TGPopupMenu( fClient->GetRoot() );
00079
00080
00081
00082
00083
00084
00085
00086 m_MenuFile->AddEntry( "&Exit", kFileExit );
00087 m_MenuFile->Associate( this );
00088
00089
00090
00091
00092
00093
00094
00095 m_MenuBar = new TGMenuBar( this, 1, 1 );
00096 m_MenuBar->AddPopup( "&File", m_MenuFile, m_MenuBarItemLayout );
00097
00098
00099 AddFrame( m_MenuBar, m_MenuBarLayout );
00100
00101
00102 m_HorizFrame1 = new TGCompositeFrame( this, 100, 100, kHorizontalFrame );
00103
00104
00105
00106 m_CurrentDir = new TGListBox( m_HorizFrame1, -1 );
00107 m_CurrentDir->Resize( 350, 20 );
00108 m_CurrentDir->AddEntry( m_dataDir, 1 );
00109 m_HorizFrame1->AddFrame( m_CurrentDir, new TGLayoutHints( kLHintsLeft | kLHintsTop, 2, 2, 2, 2 ) );
00110
00111
00112
00113 TGPicture *upDirPic = ( TGPicture* )gClient->GetPicture( "tb_uplevel.xpm" );
00114 m_UpDirButton = new TGPictureButton( m_HorizFrame1, upDirPic, kUpDir );
00115 m_UpDirButton->SetToolTipText( "Up one level" );
00116 m_UpDirButton->Associate( this );
00117 m_HorizFrame1->AddFrame( m_UpDirButton, new TGLayoutHints( kLHintsLeft | kLHintsTop, 5, 5, 5, 5 ) );
00118
00119
00120
00121 m_HorizFrame1->AddFrame( new TGLabel( m_HorizFrame1, new TGHotString( "Filter:" ) ),
00122 new TGLayoutHints( kLHintsLeft | kLHintsTop, 10, 5, 5, 5) );
00123
00124 m_FilterBox = new TGComboBox( m_HorizFrame1, kFileFilter );
00125 m_FilterBox->Associate( this );
00126 Char_t filt[ 50 ];
00127 sprintf( filt, "%s", "Raw (*raw.root)" );
00128 m_FilterBox->AddEntry( filt, 1 );
00129 sprintf( filt, "%s", "Recon (*recon.root)" );
00130 m_FilterBox->AddEntry( filt, 2 );
00131 sprintf( filt, "%s", "G4 (*G4Sim.root)" );
00132 m_FilterBox->AddEntry( filt, 3 );
00133 m_FilterBox->Resize( 150, 20 );
00134 m_FilterBox->Select( 1 );
00135
00136 m_HorizFrame1->AddFrame( m_FilterBox, new TGLayoutHints( kLHintsLeft | kLHintsTop, 5, 5, 5, 5 ) );
00137
00138 AddFrame( m_HorizFrame1, new TGLayoutHints( kLHintsExpandX, 20, 20, 20, 10 ) );
00139
00140
00141
00142 m_HorizFrame2 = new TGCompositeFrame( this, 100, 200, kHorizontalFrame );
00143
00144
00145
00146
00147 TGListView *m_FileView = new TGListView( m_HorizFrame2, 300, 200 );
00148
00149 m_fileContainer = new TGFileContainer( m_FileView->GetViewPort(), 300, 100, kVerticalFrame, fgWhitePixel );
00150 m_fileContainer->Associate( this );
00151 m_FileView->GetViewPort()->SetBackgroundColor( fgWhitePixel );
00152 m_FileView->SetContainer( m_fileContainer );
00153 m_fileContainer->SetFilter( "*raw.root" );
00154 m_fileContainer->ChangeDirectory( m_dataDir );
00155 m_fileContainer->SetViewMode( kLVList );
00156
00157 m_HorizFrame2->AddFrame( m_FileView, new TGLayoutHints( kLHintsLeft, 20, 20, 20, 10 ) );
00158
00159
00160
00161 m_Tab = new TGTab( m_HorizFrame2, 200, 300 );
00162 m_Tab->Associate( this );
00163
00164 TGCompositeFrame *displayTab = m_Tab->AddTab( "Display" );
00165 TGCompositeFrame *analTab = m_Tab->AddTab( "Analysis" );
00166
00167
00168
00169 m_ThreshGroup = new TGGroupFrame( displayTab, "Thresholds (MIP)", kHorizontalFrame );
00170
00171
00172
00173 ULong_t green, blue, red, yellow;
00174 gClient->GetColorByName( "green", green );
00175 gClient->GetColorByName( "blue", blue );
00176 gClient->GetColorByName( "red", red );
00177 gClient->GetColorByName( "yellow", yellow );
00178
00179 TGTextEntry *threshEntry;
00180 Char_t *detTypeTxt[ 4 ] = { "", "CAL", "ACD", "XGT" };
00181 Char_t *levTxt[ 4 ] = { "Lev1", "Lev2", "Lev3", "Lev4" };
00182
00183 ULong_t color[ 4 ] = { green, blue, red, yellow };
00184
00185 m_ThreshMatrix = new TGCompositeFrame( m_ThreshGroup, 200, 200 );
00186 TGMatrixLayout *threshMatrixLayout = new TGMatrixLayout( m_ThreshMatrix, 0, 4, 2 );
00187 m_ThreshMatrix->SetLayoutManager( threshMatrixLayout );
00188
00189 m_ThreshEntryArray = new TObjArray();
00190
00191
00192 for ( Int_t row=0; row<5; ++row ) {
00193
00194 for ( Int_t col=0; col<4; ++col ) {
00195
00196 if ( row == 0 ) {
00197 TGLabel *typeLabel = new TGLabel( m_ThreshMatrix, detTypeTxt[ col ] );
00198 m_ThreshMatrix->AddFrame( typeLabel, new TGLayoutHints( kLHintsCenterX, 1, 1, 1, 1 ) );
00199 continue;
00200 }
00201
00202 if ( col == 0 ) {
00203 TGLabel *levLabel = new TGLabel( m_ThreshMatrix, levTxt[ row - 1 ] );
00204 levLabel->SetBackgroundColor( color[ row - 1 ] );
00205 m_ThreshMatrix->AddFrame( levLabel, new TGLayoutHints( kLHintsCenterX, 1, 1, 1, 1 ) );
00206 continue;
00207 }
00208
00209 threshEntry = new TGTextEntry( m_ThreshMatrix, m_threshVal[ col - 1 ][ row - 1 ], row*10+col );
00210 m_ThreshMatrix->AddFrame( threshEntry, new TGLayoutHints( kLHintsCenterX, 1, 1, 1, 1 ) );
00211 threshEntry->Resize( 50, 20 );
00212 m_ThreshEntryArray->Add( threshEntry );
00213
00214 }
00215
00216 }
00217
00218 m_ThreshGroup->AddFrame( m_ThreshMatrix, new TGLayoutHints( kLHintsCenterX, 1, 1, 1, 1 ) );
00219
00220 displayTab->AddFrame( m_ThreshGroup, new TGLayoutHints( kLHintsCenterX, 10, 10, 10, 10 ) );
00221
00222
00223
00224
00225 m_HistoGroup = new TGGroupFrame( analTab, "Histogram selection", kHorizontalFrame );
00226
00227 m_HButtonTKR = new TGTextButton( m_HistoGroup, "&TKR", kHistTKR );
00228 m_HistoGroup->AddFrame( m_HButtonTKR, new TGLayoutHints( kLHintsLeft, 1, 5, 10, 1 ) );
00229 m_HButtonTKR->Associate( this );
00230 m_HButtonCAL = new TGTextButton( m_HistoGroup, "&CAL", kHistCAL );
00231 m_HistoGroup->AddFrame( m_HButtonCAL, new TGLayoutHints( kLHintsLeft, 1, 5, 10, 1 ) );
00232 m_HButtonCAL->Associate( this );
00233 m_HButtonACD = new TGTextButton( m_HistoGroup, "&ACD", kHistACD );
00234 m_HistoGroup->AddFrame( m_HButtonACD, new TGLayoutHints( kLHintsLeft, 1, 5, 10, 1 ) );
00235 m_HButtonACD->Associate( this );
00236 m_HButtonXGT = new TGTextButton( m_HistoGroup, "&XGT", kHistXGT );
00237 m_HistoGroup->AddFrame( m_HButtonXGT, new TGLayoutHints( kLHintsLeft, 1, 5, 10, 1 ) );
00238 m_HButtonXGT->Associate( this );
00239 m_HButtonTOTl = new TGTextButton( m_HistoGroup, "&TotL", kHistTOTl );
00240 m_HistoGroup->AddFrame( m_HButtonTOTl, new TGLayoutHints( kLHintsLeft, 1, 5, 10, 1 ) );
00241 m_HButtonTOTl->Associate( this );
00242 m_HButtonTOTr = new TGTextButton( m_HistoGroup, "&TotR", kHistTOTr );
00243 m_HistoGroup->AddFrame( m_HButtonTOTr, new TGLayoutHints( kLHintsLeft, 1, 5, 10, 1 ) );
00244 m_HButtonTOTr->Associate( this );
00245
00246 analTab->AddFrame( m_HistoGroup, new TGLayoutHints( kLHintsCenterX | kLHintsCenterY, 5, 5, 5, 5 ) );
00247
00248 m_HorizFrame2->AddFrame( m_Tab, new TGLayoutHints( kLHintsLeft, 20, 20, 20, 10 ) );
00249
00250 AddFrame( m_HorizFrame2, new TGLayoutHints( kLHintsLeft, 0, 0, 0, 0 ) );
00251
00252
00253
00254 m_SliderFrame = new TGCompositeFrame( this, 600, 50, kHorizontalFrame );
00255
00256 m_RewPic = ( TGPicture* )gClient->GetPicture( "first_t.xpm" );
00257 m_CtrlRew = new TGPictureButton( m_SliderFrame, m_RewPic, kRewind );
00258 m_SliderFrame->AddFrame( m_CtrlRew, new TGLayoutHints( kLHintsLeft, 1, 1, 1, 1 ) );
00259 m_CtrlRew->Associate( this );
00260
00261 m_PrevPic = ( TGPicture* )gClient->GetPicture( "arrow_left.xpm" );
00262 m_CtrlPrev = new TGPictureButton( m_SliderFrame, m_PrevPic, kGoPrev );
00263 m_SliderFrame->AddFrame( m_CtrlPrev, new TGLayoutHints( kLHintsLeft, 1, 1, 1, 1 ) );
00264 m_CtrlPrev->Associate( this );
00265
00266 m_Slider = new TGHSlider( m_SliderFrame, 500, kSlider2 | kScaleBoth, kSlider );
00267 m_Slider->SetPosition( 0 );
00268 m_Slider->Associate( this );
00269
00270 m_SliderFrame->AddFrame( m_Slider, new TGLayoutHints( kLHintsLeft, 1, 1, 1, 1 ) );
00271
00272 m_NextPic = ( TGPicture* )gClient->GetPicture( "arrow_right.xpm" );
00273 m_CtrlNext = new TGPictureButton( m_SliderFrame, m_NextPic, kGoNext );
00274 m_SliderFrame->AddFrame( m_CtrlNext, new TGLayoutHints( kLHintsLeft, 1, 1, 1, 1 ) );
00275 m_CtrlNext->Associate( this );
00276
00277 m_AllPic = ( TGPicture* )gClient->GetPicture( "last_t.xpm" );
00278 m_CtrlAll = new TGPictureButton( m_SliderFrame, m_AllPic, kGoToEnd );
00279 m_SliderFrame->AddFrame( m_CtrlAll, new TGLayoutHints( kLHintsLeft, 1, 1, 1, 1 ) );
00280 m_CtrlAll->Associate( this );
00281
00282 AddFrame( m_SliderFrame, new TGLayoutHints( kLHintsCenterX, 10, 10, 10, 10 ) );
00283
00284
00285
00286 m_HorizFrame3 = new TGCompositeFrame( this, 500, 200, kHorizontalFrame );
00287
00288 m_EventTxtEntry = new TGTextEntry( m_HorizFrame3, "0", kEvtNumEntry );
00289 m_EventTxtEntry->Associate( this );
00290 m_EventTxtEntry->Resize( 70, 20 );
00291
00292 m_HorizFrame3->AddFrame( m_EventTxtEntry, new TGLayoutHints( kLHintsCenterX | kLHintsCenterY, 20, 1, 1, 1 ) );
00293
00294 m_StopPic = ( TGPicture* )gClient->GetPicture( "mb_stop_s.xpm" );
00295 m_CtrlStop = new TGPictureButton( m_HorizFrame3, m_StopPic, kStop );
00296 m_HorizFrame3->AddFrame( m_CtrlStop, new TGLayoutHints( kLHintsCenterX | kLHintsCenterY, 20, 1, 10, 1 ) );
00297 m_CtrlStop->Associate( this );
00298
00299 AddFrame( m_HorizFrame3, new TGLayoutHints( kLHintsCenterX, 0, 0, 0, 0 ) );
00300
00301 SetToolTips();
00302
00303 MapSubwindows();
00304 SetWindowName( "EventControl" );
00305 Resize ( 671, 421 );
00306 MapWindow();
00307
00308 }
00309
00310
00311 EDGui::~EDGui() {
00312
00313 delete m_HButtonTKR;
00314 delete m_HButtonCAL;
00315 delete m_HButtonACD;
00316 delete m_HButtonXGT;
00317 delete m_HButtonTOTl;
00318 delete m_HButtonTOTr;
00319 delete m_HistoGroup;
00320
00321 delete m_StopPic;
00322 delete m_CtrlStop;
00323 delete m_RewPic;
00324 delete m_CtrlRew;
00325 delete m_AllPic;
00326 delete m_CtrlAll;
00327 delete m_PrevPic;
00328 delete m_CtrlPrev;
00329 delete m_NextPic;
00330 delete m_CtrlNext;
00331
00332 delete m_MenuFile;
00333 delete m_MenuBar;
00334
00335 }
00336
00337
00338 Bool_t EDGui::ProcessMessage( Long_t msg, Long_t parm1, Long_t parm2 ) {
00339
00340 Text_t tmp[ 200 ];
00341
00342
00343 if ( GET_MSG( msg ) == kC_COMMAND ) {
00344
00345 if ( GET_SUBMSG( msg ) == kCM_MENU ) {
00346
00347 switch( parm1 ) {
00348
00349 case kFileExit:
00350
00351 WriteConfigFile();
00352 m_evtCtrl->processCommand( kReqExit );
00353 break;
00354
00355 default: break;
00356
00357 }
00358
00359 }
00360
00361 if ( GET_SUBMSG( msg ) == kCM_TAB ) {
00362
00363 switch( parm1 ) {
00364
00365 case 0:
00366
00367
00368
00369 if ( m_inLoop ) {
00370
00371 if ( !m_ModeIsDisplay ) m_Tab->SetTab( 1 );
00372 break;
00373 }
00374
00375 m_ModeIsDisplay = kTRUE;
00376 SetToolTips();
00377 m_evtCtrl->processCommand( kReqDisplay );
00378 break;
00379
00380 case 1:
00381
00382
00383
00384 if ( m_inLoop ) {
00385
00386 if ( m_ModeIsDisplay ) m_Tab->SetTab( 0 );
00387 break;
00388 }
00389
00390 m_ModeIsDisplay = kFALSE;
00391 SetToolTips();
00392 m_evtCtrl->processCommand( kReqAnalysis );
00393 break;
00394
00395 default: break;
00396
00397 }
00398
00399 }
00400
00401
00402 if ( GET_SUBMSG( msg ) == kCM_BUTTON ) {
00403
00404 if ( !m_rawFileExists && ( parm1 != kUpDir ) ) {
00405 new TGMsgBox( fClient->GetRoot(), this, "Error", "Please first select a raw data file.", 0, kMBOk );
00406 return( kFALSE );
00407 }
00408
00409 switch( parm1 ) {
00410
00411 case kGoNext:
00412 if ( m_ModeIsDisplay ) {
00413 WriteConfigFile();
00414 m_evtCtrl->processCommand( kReqDisplayNext );
00415 }
00416
00417 break;
00418
00419 case kGoPrev:
00420 if ( m_ModeIsDisplay ) {
00421 WriteConfigFile();
00422 m_evtCtrl->processCommand( kReqPrev );
00423 }
00424
00425 break;
00426
00427 case kGoToEnd:
00428 m_inLoop = kTRUE;
00429 if ( m_ModeIsDisplay ) {
00430 WriteConfigFile();
00431 m_evtCtrl->processCommand( kReqCue );
00432 }
00433 else m_evtCtrl->processCommand( kReqAll );
00434 break;
00435
00436 case kRewind:
00437 if ( m_ModeIsDisplay ) {
00438 m_inLoop = kTRUE;
00439 WriteConfigFile();
00440 m_evtCtrl->processCommand( kReqReview );
00441 }
00442 else m_evtCtrl->processCommand( kReqRewind );
00443 break;
00444
00445 case kStop:
00446 m_inLoop = kFALSE;
00447 if ( m_ModeIsDisplay ) m_evtCtrl->processCommand( kReqDisplayStop );
00448 else m_evtCtrl->processCommand( kReqAnalStop );
00449 break;
00450
00451 case kUpDir:
00452
00453
00454
00455 m_fileContainer->ChangeDirectory( ".." );
00456 m_fileContainer->DisplayDirectory();
00457 if ( m_FilterType == kFilterRaw || m_FilterType == kFilterG4 ) HiliteSelectedFile( m_RawFileName );
00458 else HiliteSelectedFile( m_ReconFileName );
00459
00460 sprintf( tmp, "%s", m_fileContainer->GetDirectory() );
00461 m_CurrentDir->RemoveEntry( 1 );
00462 m_CurrentDir->AddEntry( tmp, 1 );
00463 m_CurrentDir->MapSubwindows();
00464 m_CurrentDir->Layout();
00465
00466 break;
00467
00468 case kHistTKR:
00469 m_evtCtrl->processCommand( kReqHistTKR );
00470 break;
00471
00472 case kHistCAL:
00473 m_evtCtrl->processCommand( kReqHistCAL );
00474 break;
00475
00476 case kHistACD:
00477 m_evtCtrl->processCommand( kReqHistACD );
00478 break;
00479
00480 case kHistXGT:
00481 m_evtCtrl->processCommand( kReqHistXGT );
00482 break;
00483
00484 case kHistTOTl:
00485 m_evtCtrl->processCommand( kReqHistTOTl );
00486 break;
00487
00488 case kHistTOTr:
00489 m_evtCtrl->processCommand( kReqHistTOTr );
00490 break;
00491
00492 default: break;
00493
00494 }
00495
00496 }
00497
00498 if ( GET_SUBMSG( msg ) == kCM_COMBOBOX ) {
00499
00500 switch( parm1 ) {
00501
00502 case kFileFilter:
00503
00504
00505
00506 if( parm2 == 1 ) {
00507 m_fileContainer->SetFilter( "*raw.root" );
00508 m_FilterType = kFilterRaw;
00509 m_fileContainer->DisplayDirectory();
00510 HiliteSelectedFile( m_RawFileName );
00511 }
00512 if( parm2 == 2 ) {
00513 m_fileContainer->SetFilter( "*recon.root" );
00514 m_FilterType = kFilterRecon;
00515 m_fileContainer->DisplayDirectory();
00516 HiliteSelectedFile( m_ReconFileName );
00517 }
00518 if( parm2 == 3 ) {
00519 m_fileContainer->SetFilter( "*G4Sim.root" );
00520 m_FilterType = kFilterG4;
00521 m_fileContainer->DisplayDirectory();
00522 HiliteSelectedFile( m_RawFileName );
00523 }
00524
00525 break;
00526
00527 default:
00528 break;
00529
00530 }
00531
00532 }
00533
00534 }
00535
00536 if ( GET_MSG( msg ) == kC_CONTAINER ) {
00537
00538 void *p = NULL;
00539
00540 TGFileItem *f = ( TGFileItem* )m_fileContainer->GetNextSelected( &p );
00541
00542 switch( GET_SUBMSG( msg ) ) {
00543
00544 case kCT_ITEMDBLCLICK:
00545
00546 if ( m_inLoop ) {
00547
00548 if ( m_FilterType == kFilterRaw || m_FilterType == kFilterG4 ) HiliteSelectedFile( m_RawFileName );
00549 else HiliteSelectedFile( m_ReconFileName );
00550 break;
00551 }
00552
00553
00554
00555 if ( m_fileContainer->NumSelected() != 1 ) break;
00556
00557 if ( S_ISDIR( f->GetType() ) ) {
00558
00559
00560 sprintf( tmp, "%s%s%s", m_fileContainer->GetDirectory(), "/", f->GetItemName()->GetString() );
00561 m_fileContainer->ChangeDirectory( tmp );
00562 if ( m_FilterType == kFilterRaw || m_FilterType == kFilterG4 ) HiliteSelectedFile( m_RawFileName );
00563 else HiliteSelectedFile( m_ReconFileName );
00564 m_CurrentDir->RemoveEntry( 1 );
00565 m_CurrentDir->AddEntry( tmp, 1 );
00566 m_CurrentDir->MapSubwindows();
00567 m_CurrentDir->Layout();
00568 }
00569
00570 else {
00571
00572 if ( m_FilterType == kFilterRaw || m_FilterType == kFilterG4 ) {
00573 sprintf( m_RawFileName, "%s", f->GetItemName()->GetString() );
00574 sprintf( m_RawFilePath, "%s%s%s", m_fileContainer->GetDirectory(), "/", m_RawFileName );
00575
00576 m_rawFileExists = kTRUE;
00577
00578 if ( m_FilterType == kFilterG4 ) m_isRealData = kFALSE;
00579 else m_isRealData = kTRUE;
00580
00581 WriteConfigFile();
00582
00583 if ( !m_ModeIsDisplay ) m_Tab->SetTab( 0 );
00584
00585 m_evtCtrl->processCommand( kReqRawFile );
00586 }
00587
00588 if ( m_FilterType == kFilterRecon ) {
00589 sprintf( m_ReconFileName, "%s", f->GetItemName()->GetString() );
00590 sprintf( m_ReconFilePath, "%s%s%s", m_fileContainer->GetDirectory(), "/", m_ReconFileName );
00591
00592 m_reconFileExists = kTRUE;
00593
00594 WriteConfigFile();
00595
00596 if ( !m_ModeIsDisplay ) m_Tab->SetTab( 0 );
00597
00598 m_evtCtrl->processCommand( kReqReconFile );
00599 }
00600
00601 }
00602
00603 break;
00604
00605 default:
00606 break;
00607
00608 }
00609
00610 }
00611
00612
00613 if ( GET_MSG( msg ) == kC_HSLIDER ) {
00614
00615 switch( GET_SUBMSG( msg ) ) {
00616
00617 case kSL_RELEASE:
00618
00619 if ( !m_rawFileExists ) {
00620 new TGMsgBox( fClient->GetRoot(), this, "Error", "Please first select a raw data file.", 0, kMBOk );
00621 m_Slider->SetPosition( 0 );
00622 return( kFALSE );
00623 }
00624
00625 if ( m_ModeIsDisplay ) {
00626 WriteConfigFile();
00627 m_evtCtrl->processCommand( kReqDisplayGoto, m_Slider->GetPosition() );
00628 }
00629 else {
00630 m_evtCtrl->processCommand( kReqAnalGoto, m_Slider->GetPosition() );
00631 }
00632
00633 SetEventNumber( m_Slider->GetPosition() );
00634
00635 break;
00636
00637 case kSL_POS:
00638
00639 SetEventNumber( m_Slider->GetPosition() );
00640 break;
00641
00642 default: break;
00643
00644 }
00645
00646 }
00647
00648
00649 if ( GET_MSG( msg ) == kC_TEXTENTRY ) {
00650
00651 if ( GET_SUBMSG( msg ) == kTE_ENTER ) {
00652
00653 if ( !m_rawFileExists ) {
00654 new TGMsgBox( fClient->GetRoot(), this, "Error", "Please first select a raw data file.", 0, kMBOk );
00655 SetEventNumber( 0 );
00656 return( kFALSE );
00657 }
00658
00659 switch ( parm1 ) {
00660
00661 case kEvtNumEntry:
00662
00663 Char_t evtNo[ 20 ];
00664 sprintf( evtNo, "%s", m_EventTxtEntry->GetText() );
00665
00666 if ( m_ModeIsDisplay ) {
00667 WriteConfigFile();
00668 m_evtCtrl->processCommand( kReqDisplayGoto, atoi( evtNo ) );
00669 }
00670 else m_evtCtrl->processCommand( kReqAnalGoto, atoi( evtNo ) );
00671 break;
00672
00673 default: break;
00674
00675 }
00676
00677 }
00678
00679 }
00680
00681 return( kTRUE );
00682
00683 }
00684
00685 void EDGui::SetEventNumber( Int_t evt ) {
00686
00687 Char_t tmp[ 10 ];
00688
00689 sprintf( tmp, "%d", evt );
00690 m_EventTxtEntry->SetText( tmp );
00691 m_EventTxtEntry->Resize( 70, 20 );
00692
00693 }
00694
00695
00696 void EDGui::WriteConfigFile() {
00697
00698
00699
00700
00701
00702
00703
00704
00705 ofstream configFile;
00706 TGTextEntry *txtEntry;
00707
00708 sprintf( m_dataDir, m_fileContainer->GetDirectory() );
00709
00710 configFile.open( (const char *)CONFIG_FILE, ios::out );
00711
00712 configFile << m_dataDir;
00713 configFile << "\n";
00714
00715 for ( Int_t detTyp=0; detTyp<3; ++detTyp ) {
00716 for ( Int_t lev=0; lev<4; ++lev ) {
00717 txtEntry = ( TGTextEntry* )m_ThreshEntryArray->At( detTyp + 3*lev );
00718 sprintf( m_threshVal[ detTyp ][ lev ], txtEntry->GetText() );
00719 configFile << m_threshVal[ detTyp ][ lev ] << " ";
00720 }
00721 configFile << "\n";
00722 }
00723
00724 configFile.close();
00725
00726 }
00727
00728
00729 void EDGui::GetThresholds( Float_t thresh[ 3 ][ 4 ] ) {
00730
00731 for ( Int_t detTyp=0; detTyp<3; ++detTyp ) {
00732 for ( Int_t lev=0; lev<4; ++lev ) {
00733 thresh[ detTyp ][ lev ] = ( Float_t )atof( m_threshVal[ detTyp ][ lev ] );
00734 }
00735 }
00736
00737 }
00738
00739
00740 void EDGui::HiliteSelectedFile( Char_t *fname ) {
00741
00742 Char_t itemName[ 100 ];
00743 void *p=NULL;
00744 Bool_t matched = kFALSE;
00745
00746
00747
00748
00749
00750
00751
00752 m_fileContainer->SelectAll();
00753 TGLVEntry *entry;
00754
00755 for ( Int_t i=0; i < m_fileContainer->NumItems(); ++i ) {
00756
00757
00758 entry = ( TGLVEntry* )m_fileContainer->GetNextSelected( &p );
00759 sprintf( itemName, "%s", entry->GetItemName()->GetString() );
00760
00761 if ( !strcmp( itemName, fname ) ) {
00762
00763 m_fileContainer->InvertSelection();
00764 entry->Activate(kTRUE);
00765 entry->Layout();
00766 matched = kTRUE;
00767 break;
00768 }
00769
00770 }
00771
00772
00773 if ( !matched ) m_fileContainer->InvertSelection();
00774
00775 }
00776
00777
00778 void EDGui::SetModeDisplay() {
00779
00780
00781
00782 m_ModeIsDisplay = kTRUE;
00783
00784 }
00785
00786
00787 void EDGui::SetToolTips() {
00788
00789 if ( m_ModeIsDisplay ) {
00790 m_CtrlRew->SetToolTipText( "Review events" );
00791 m_CtrlPrev->SetToolTipText( "Previous event" );
00792 m_CtrlNext->SetToolTipText( "Next event" );
00793 m_CtrlAll->SetToolTipText( "Cue events" );
00794 m_CtrlStop->SetToolTipText( "Stop display loop" );
00795 }
00796 else {
00797 m_CtrlRew->SetToolTipText( "Reset analysis" );
00798 m_CtrlPrev->SetToolTipText( "" );
00799 m_CtrlNext->SetToolTipText( "" );
00800 m_CtrlAll->SetToolTipText( "All events" );
00801 m_CtrlStop->SetToolTipText( "Stop analysis" );
00802 }
00803
00804 }
00805
00806
00807
00808