SCC/TFndSCCshowGUI.cxx

00001 // @(#)fROOT/SCC:$Name:  $:$Id: TFndSCCshowGUI.cxx,v 1.13 2007/09/24 07:32:41 Diego_Faso Exp $
00002 // Author: Diego Faso <mailto:faso@to.infn.it>, 2007/06/23
00003 
00005 //                                                                             //
00007 
00008 #include "TFndSCCshowGUI.h"
00009 
00010 #include <TPaveText.h>
00011 #include <TPaveStats.h>
00012 
00013 ClassImp(TFndSCCshowGUI)
00014   
00015 //_______________________________
00016 TFndSCCshowGUI::TFndSCCshowGUI():
00017   fTransientProgress(),fTrsnFrm_SaveName(),
00018   fFndMultiGraph()
00019 {
00020   // ---
00021   fSCCHistosRef = new TFndSCCshowHistos();
00022 
00023   fSCCHistosRef->InitHistos();
00024   fTh1DrawOpt = "P";
00025 
00026   ResetMultiGraphs(kTRUE);
00027 }
00028 
00029 //_______________________________
00030 TFndSCCshowGUI::~TFndSCCshowGUI(){
00031   // ---
00032   delete fSCCHistosRef;
00033   for( Int_t i=0;i<(NmaxMulGraph)(NMaxMultiGraphs); i++) delete fFndMultiGraph[i];
00034 }
00035 
00036 //_______________________________
00037 void TFndSCCshowGUI::ResetMultiGraphs(Bool_t recreate){
00038 
00039   TString mgnam="";
00040   for( Int_t i=0;i<(NmaxMulGraph)(NMaxMultiGraphs); i++){
00041     if(recreate){
00042       delete fFndMultiGraph[i];
00043       mgnam.Form("MultiGraph_%i",i);    
00044       fFndMultiGraph[i] = new TFndMultiGraph(mgnam,mgnam);
00045     }
00046     else if(fFndMultiGraph[i]) fFndMultiGraph[i]->Reset();
00047   }
00048 
00049 }
00050 
00051 //_______________________________
00052 void TFndSCCshowGUI::ResetDaughter(){
00053   ResetMultiGraphs();
00054 }
00055 
00056 //_______________________________
00057   void TFndSCCshowGUI::GetDatimesFromGUI(UInt_t &start_time,UInt_t &stop_time){
00058     
00059     Int_t year[2] = {0}; 
00060     Int_t month[2] = {0};
00061     Int_t day[2] = {0};
00062     Int_t hour[2] = {0}; 
00063     Int_t min[2] = {0};
00064     Int_t sec[2] = {0};
00065     
00066     fSteer_Num1->GetDate(year[0],month[0],day[0]);
00067     fSteer_Num1_time->GetTime(hour[0],min[0],sec[0]);
00068     
00069     fSteer_Num2->GetDate(year[1],month[1],day[1]);
00070     fSteer_Num2_time->GetTime(hour[1],min[1],sec[1]);
00071     
00072     fStartDatime.Set(year[0],month[0],day[0],hour[0],min[0],sec[0]);
00073     fStopDatime.Set(year[1],month[1],day[1],hour[1],min[1],sec[1]);
00074 
00075     start_time = fStartDatime.Convert();
00076     stop_time  = fStopDatime.Convert();
00077     
00078     //     cout << "num1_date  : " << year[0] << "/"  << month[0] << "/" << day[0] << endl;
00079     //     cout << "num1_time  : " << hour[0] << ":"  << min[0]   << ":" << sec[0] << endl;
00080     //     cout << "num2_date  : " << year[1] << "/"  << month[1] << "/" << day[1] << endl;
00081     //     cout << "num2_time  : " << hour[1] << ":"  << min[1]   << ":" << sec[1] << endl;
00082     //     cout << "start_time : " << start_time << endl;
00083     //     cout << "stop_time  : " << stop_time << endl;
00084   }
00085 
00086 //_______________________________
00087 void TFndSCCshowGUI::SetGuiDatime(const Int_t &whichone,const UInt_t &conv_time){
00088 
00089   if(whichone < 1 || whichone > 2){
00090     Error("SetGuiDatime","Wrong call: whichone = %i",whichone);
00091     return;
00092   }
00093   //  cout << "---> Setting " << conv_time << endl;
00094   TDatime tmpdat;
00095   tmpdat.Set(conv_time);
00096   //  cout << "---> " << tmpdat.AsString() << endl;
00097   TGNumberEntry *tmpn_date = (whichone == 1)? fSteer_Num1 : fSteer_Num2;
00098   TGNumberEntry *tmpn_time = (whichone == 1)? fSteer_Num1_time : fSteer_Num2_time;
00099   //
00100   tmpn_date->SetDate(tmpdat.GetYear(),tmpdat.GetMonth(),tmpdat.GetDay());
00101   tmpn_time->SetTime(tmpdat.GetHour(),tmpdat.GetMinute(),tmpdat.GetSecond());
00102   // ---  
00103   tmpn_date = 0;
00104   tmpn_time = 0;
00105 
00106   if(whichone == 1) fStartDatime.Set(conv_time);
00107   else  fStopDatime.Set(conv_time);
00108 
00109 }
00110 
00111 //_______________________________
00112 void TFndSCCshowGUI::SetStartDatime(Long_t){
00113   // set last run number-entry depending on first run
00114   
00115   if(!fSteer_Num1 || !fSteer_Num1_time || !fSteer_Num2 || !fSteer_Num2_time) return;
00116   
00117   UInt_t start_time = 0;
00118   UInt_t stop_time  = 0;
00119   GetDatimesFromGUI(start_time,stop_time);  
00120   //   cout << "===========> start_time : " << start_time << endl;
00121   //   cout << "===========> stop_time  : " << stop_time << endl;
00122   if(stop_time < start_time){
00123     SetGuiDatime(1,stop_time);
00124     return;
00125   }
00126   
00127 }
00128 
00129 //_______________________________
00130 void TFndSCCshowGUI::SetStopDatime(Long_t){
00131   // set last run number-entry depending on first run
00132   
00133   if(!fSteer_Num1 || !fSteer_Num1_time || !fSteer_Num2 || !fSteer_Num2_time) return;
00134   
00135   UInt_t start_time = 0;
00136   UInt_t stop_time  = 0;
00137   GetDatimesFromGUI(start_time,stop_time);  
00138   //   cout << "===========> start_time : " << start_time << endl;
00139   //   cout << "===========> stop_time  : " << stop_time << endl;
00140   if(start_time > stop_time){
00141     SetGuiDatime(2,start_time);
00142     return;
00143   }
00144   
00145   
00146 }
00147 
00148 //_______________________________
00149 void TFndSCCshowGUI::FillHistos_GUI(){
00150   
00151   if(!fSteer_Combo || !fSteer_Num1 || !fSteer_Num2){
00152     Warning("FillHistos_GUI","Some STEER command not available");
00153     return;
00154   }
00155 
00156   // - Check date-time
00157   // - loop on dates:
00158   //           - tell the histo-ref to open new date (raw-file)
00159   //           - tell the histo-ref to loop on raw-data and fill histograms/profiles
00160   //           - tell the histo-ref to close current date (raw-file)
00161 
00162   Bool_t fill_tofi = fChkBox_FillDet[TOFI]->GetState();
00163   Bool_t fill_tofo = fChkBox_FillDet[TOFO]->GetState();
00164   Bool_t fill_sil  = fChkBox_FillDet[SIL] ->GetState();
00165   Bool_t fill_lmd  = fChkBox_FillDet[LMD] ->GetState();
00166   Bool_t fill_stb  = fChkBox_FillDet[STB] ->GetState();
00167   Bool_t fill_gas  = fChkBox_FillDet[GAS] ->GetState();
00168   Bool_t fill_mag  = fChkBox_FillDet[MAG] ->GetState();
00169 
00170   UpdateDisplayPad(kFALSE);
00171   // --- create the transient progress window
00172   if(fStopDatime.Convert()-fStartDatime.Convert() > 3 * 86400){
00173     // trasient GUI only if more than 3 days
00174     fTransientProgress = new TFndGTransientProgress();
00175     fTransientProgress->SetTitle("Filling progress");
00176   }
00177 
00178   TDatime Ctim = fStartDatime;
00179 
00180   AddTextMessage("Resetting plots...",kTRUE);
00181   AddTextMessage("...please wait...",kFALSE);
00182   UpdateDisplayPad(kFALSE);
00183   fSCCHistosRef->ResetHistos(kTRUE);
00184 
00185   AddTextMessage("Getting data...",kTRUE);
00186   AddTextMessage("...please wait...",kFALSE);
00187   UpdateDisplayPad(kFALSE);
00189   Bool_t verbmem = kFALSE; // hard-coded
00190   Float_t rammem = 0;
00191   Float_t resmem = 0;
00192   Float_t virmem = 0;
00193   
00194   while( Ctim.Convert() <= fStopDatime.Convert() ){
00195     TString tmpstr = "";
00196     TString tmpstr1 = "";
00197     tmpstr.Form("%s",Ctim.AsSQLString());
00198     tmpstr.Resize(tmpstr.Sizeof()-10);
00199     tmpstr1.Form("Filling for time %s (virt. mem: %.2f %)",tmpstr.Data(),virmem);
00200     //
00201     if(fDebugLev > 1) cout << "Opening file for \"" << Ctim.AsSQLString() << "\"" << endl;
00202     Int_t open_err = fSCCHistosRef->OpenRawFile("$FND_SCC_RAW",Ctim);
00203     //    cout << "open_err:" << open_err << endl;
00204     if(! open_err){
00205       if(K_DEBUG_LEV > 0) cout << "Filling for date-time \"" << Ctim.AsString() << "\"" << endl;
00206       fSCCHistosRef->FillHistos(fStopDatime.Convert(),
00207                                 fill_tofi,fill_tofo,fill_sil,fill_lmd,fill_stb,fill_gas,fill_mag);
00208     }
00209     else{
00210       cout << "File not found for \"" << tmpstr.Data() << "\"" << endl;
00211       TString addstr;
00212       addstr.Form("\"%s\" missing",tmpstr.Data());
00213       AddTextMessage(addstr,kFALSE);
00214     }    // ---
00215     Int_t close_err = fSCCHistosRef->CloseRawFile();
00216     //    cout << "close_err:" << close_err << endl;
00217     Ctim.Set( Ctim.Convert() + 86400 );
00218     
00219     // --- update the transient progress window
00220     if(fTransientProgress){
00221       fTransientProgress->ReSetStatusMessage(tmpstr1);
00222       if(Ctim.Convert() < fStopDatime.Convert()){
00223         fTransientProgress->SetProgressBar(Ctim.Convert()-fStartDatime.Convert(),
00224                                            fStopDatime.Convert()-fStartDatime.Convert() );
00225       }
00226       fTransientProgress->UpdateGUI();
00227       gClient->ProcessEventsFor(fTransientProgress);
00228       if( fTransientProgress->IsCancelled() ){
00229         AddTextMessage("\n Filling manually stopped:",kFALSE);
00230         tmpstr1.Form("time: %s\n",tmpstr.Data());
00231         AddTextMessage(tmpstr1,kFALSE);
00232         break;
00233       }
00234     }
00235     //  
00236     // --- check available memory
00237     rammem = GetRamUsage(verbmem);
00238     resmem = GetProcMemUsage(E_FROOT_MemRes,verbmem);
00239     virmem = GetProcMemUsage(E_FROOT_MemVirt,verbmem);
00240     
00241     if(resmem > 90.){
00242       AddTextMessage("\n Res. mem > 90 %",kFALSE);
00243       tmpstr1.Form("time: %s\n",tmpstr.Data());
00244       AddTextMessage(tmpstr1,kFALSE);
00245       Warning("FillHistos_GUI","Resident memory > 90 percent.");
00246       break;
00247     }
00248     if(rammem > 98.){
00249       //       AddTextMessage("\n RAM busy > 98 %",kFALSE);
00250       //       tmpstr1.Form("time: %s\n",tmpstr.Data());
00251       //       AddTextMessage(tmpstr1,kFALSE);
00252       Info("FillHistos_GUI","RAM busy.");
00253       //      break;
00254     }
00255     if(virmem > 95.){
00256       AddTextMessage("\n Virt > 95 %",kFALSE);
00257       tmpstr1.Form("time: %s\n",tmpstr.Data());
00258       AddTextMessage(tmpstr1,kFALSE);
00259       Warning("FillHistos_GUI","Virtual memory > 95 percent.");
00260       break;
00261     }
00262   }
00263   // --- remove the transient progress window
00264   if(fTransientProgress){
00265     delete fTransientProgress;
00266     fTransientProgress = 0;
00267   }
00268   
00270   AddTextMessage("SCC GUI ready.",kFALSE);
00271  
00272 }
00273 
00274 //_______________________________
00275 void TFndSCCshowGUI::BuildGUI(){
00276   
00277   BuildBaseGUI();
00278   // --- changes from base gui down here
00279 
00280 }
00281 
00282 //_______________________________
00283 void TFndSCCshowGUI::CloseGUI(){
00284   
00285   if(!fMainFrame){
00286     Warning("CloseGUI","fMainFrame not available");
00287     return;
00288   }
00289   
00290   if(fDebugLev > 1) Info("CloseGUI","Deleting mainframe");
00291   
00292   fMainFrame->Cleanup();
00293 
00294   delete fMainFrame;
00295 
00296   gApplication->Terminate();
00297   return;
00298 }
00299 
00300 //_______________________________
00301 void TFndSCCshowGUI::CustomizeGUI(){
00302 
00303   fGrpFrm_SteerCmd->SetTitle("Steer commands");
00304   fSteer_Combo_Lbl->SetText("Data taking");
00305   fSteer_Num1_Lbl->SetText("From");
00306   fSteer_Num2_Lbl->SetText("To");
00307 
00308   Gui::MoveResizeSafe(10,40,77,35, fSteer_Num1_Lbl);
00309   Gui::MoveResizeSafe(10,80,77,35, fSteer_Num2_Lbl);
00310 
00311 
00312   fSteer_Num1->SetFormat( (TGNumberFormat::EStyle) 10 ); // date format
00313   Gui::MoveResizeSafe(90,40,69,17, fSteer_Num2);
00314 
00315 
00316   fSteer_Num2->SetFormat( (TGNumberFormat::EStyle) 10 );
00317   Gui::MoveResizeSafe(90,80,69,17, fSteer_Num2);
00318 
00319   fSteer_Num1_time = new TGNumberEntry(fGrpFrm_SteerCmd, (Double_t) 0,8,-1,(TGNumberFormat::EStyle) 9);
00320   fGrpFrm_SteerCmd->AddFrame(fSteer_Num1_time, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00321   Gui::MoveResizeSafe(90,57,69,17, fSteer_Num1_time);
00322 
00323   fSteer_Num2_time = new TGNumberEntry(fGrpFrm_SteerCmd, (Double_t) 0,8,-1,(TGNumberFormat::EStyle) 9);
00324   fGrpFrm_SteerCmd->AddFrame(fSteer_Num2_time, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00325   Gui::MoveResizeSafe(90,97,69,17, fSteer_Num2_time);
00326 
00327 
00328   fSteer_But1->SetText("Fill Histos");
00329   Gui::MoveResizeSafe(10,120,70,30, fSteer_But1);
00330 
00331   fSteer_But2->SetText("Save page");
00332   Gui::MoveResizeSafe(87,120,70,30, fSteer_But2);
00333 
00334   fGrpFrm_SelectCmd->SetTitle("Display commands");
00335   fSel_Combo1_Lbl->SetText("Type");
00336   fSel_Combo2_Lbl->SetText("Selection");
00337 
00338   Gui::MoveResizeSafe(20,70,130,20, fSel_Combo2_Lbl);
00339   Gui::MoveResizeSafe(20,90,130,20, fSel_Combo2);
00340 
00341   fGrpFrm_Msg->SetTitle("Info");
00342 
00343   // --- ADDs on
00344   //---
00345   fChkBox_Autoreset = new TGCheckButton(fGrpFrm_SteerCmd,"Auto-reset");
00346   fGrpFrm_SteerCmd->AddFrame(fChkBox_Autoreset, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00347   Gui::MoveResizeSafe(10,155,70,20, fChkBox_Autoreset);
00348   fChkBox_Autoreset->SetState(kButtonDown,kFALSE);
00349 
00350   // ---
00351   fChkBox_Overwrite = new TGCheckButton(fGrpFrm_SteerCmd,"overwrite");
00352   fGrpFrm_SteerCmd->AddFrame(fChkBox_Overwrite, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00353   Gui::MoveResizeSafe(90,155,70,20, fChkBox_Overwrite);
00354   fChkBox_Overwrite->SetState(kButtonDown,kFALSE);
00355 
00357   Gui::MoveResizeSafe(2,20,165,185,fGrpFrm_SteerCmd);
00358 
00359   // ---
00360   fChkBox_DisplayLine = new TGCheckButton(fGrpFrm_SelectCmd,"Lines");
00361   fGrpFrm_SelectCmd->AddFrame(fChkBox_DisplayLine, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00362   Gui::MoveResizeSafe(10,170,70,20, fChkBox_DisplayLine);
00363   fChkBox_DisplayLine->SetState(kButtonUp,kTRUE);
00364 
00365   Gui::MoveResizeSafe(2,195,165,205, fGrpFrm_SelectCmd);
00366 
00367   // settings
00368   fSetting_Combo_Lbl = new TGLabel(fGrpFrm_SelectCmd,"Setting",
00369                                  fFontGC_LabNorm->GetGC(),
00370                                  fFont_LabNorm->GetFontStruct(),
00371                                  kSunkenFrame | kDoubleBorder | kOwnBackground);
00372 
00373   fSetting_Combo_Lbl->SetTextJustify(36);
00374   fGrpFrm_SelectCmd->AddFrame(fSetting_Combo_Lbl, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00375   Gui::MoveResizeSafe(10,140,65,20, fSetting_Combo_Lbl);
00376    
00377   fSetting_Combo = new TGComboBox(fGrpFrm_SelectCmd,-1,kHorizontalFrame | kSunkenFrame | kDoubleBorder | kOwnBackground);
00378   fSetting_Combo->AddEntry("Entry 1 ",0);
00379   fSetting_Combo->AddEntry("Entry 2 ",1);
00380   fSetting_Combo->Select(-1);
00381   fGrpFrm_SelectCmd->AddFrame(fSetting_Combo, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00382   Gui::MoveResizeSafe(80,140,80,20, fSetting_Combo);
00383 
00384   // ----- warnings label
00385   fWarningMsg_Lbl = new TGLabel(fVertFrm_CL1," --- ",
00386                                 fFontGC_LabEnl->GetGC(),
00387                                 fFont_LabEnl->GetFontStruct(),
00388                                 kSunkenFrame | kDoubleBorder | kOwnBackground);
00389   
00390   fWarningMsg_Lbl->SetTextJustify(36);
00391   fWarningMsg_Lbl->SetBackgroundColor(TColor::RGB2Pixel(0xcd,0xc5,0xbf)); // similar to the default for root-Gframes
00392   fVertFrm_CL1->AddFrame(fWarningMsg_Lbl, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00393   Gui::MoveResizeSafe(5,2,165,20, fWarningMsg_Lbl);
00394   
00395   // -----  channel selection buttons
00396   fLab_ChannelSelect = new TGLabel(fGrpFrm_SelectCmd," ch ",
00397                                 fFontGC_LabEnl->GetGC(),
00398                                 fFont_LabEnl->GetFontStruct(),
00399                                 kSunkenFrame | kDoubleBorder | kOwnBackground);
00400   
00401   fLab_ChannelSelect->SetTextJustify(36);
00402   fLab_ChannelSelect->SetBackgroundColor(TColor::RGB2Pixel(0xcd,0xc5,0xbf)); // similar to the default for root-Gframes
00403   fGrpFrm_SelectCmd->AddFrame(fLab_ChannelSelect, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00404   Gui::MoveResizeSafe(40,110,30,20, fLab_ChannelSelect);
00405   
00406   fNum_ChannelSelect = new TGNumberEntry(fGrpFrm_SelectCmd, (Double_t) 0,8,-1,(TGNumberFormat::EStyle) 5);
00407   fGrpFrm_SelectCmd->AddFrame(fNum_ChannelSelect, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00408   Gui::MoveResizeSafe(73,110,50,20, fNum_ChannelSelect);
00409   //cout << "=====> " << fNum_ChannelSelect << endl;  
00410 
00411 
00412   // ----- save/load root-file buttons
00413   fTxtBut_SaveRootFile = new TGTextButton(fVertFrm_CL1,"Save root-file");
00414   fTxtBut_SaveRootFile->SetTextJustify(36);
00415   fTxtBut_SaveRootFile->SetFont(fFont_But->GetName());
00416   fVertFrm_CL1->AddFrame(fTxtBut_SaveRootFile, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00417   Gui::MoveResizeSafe(185,2,90,19, fTxtBut_SaveRootFile);
00418 
00419   fTxtBut_LoadRootFile = new TGTextButton(fVertFrm_CL1,"Load root-file");
00420   fTxtBut_LoadRootFile->SetTextJustify(36);
00421   fTxtBut_LoadRootFile->SetFont(fFont_But->GetName());
00422   fVertFrm_CL1->AddFrame(fTxtBut_LoadRootFile, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00423   Gui::MoveResizeSafe(280,2,90,19, fTxtBut_LoadRootFile);
00424 
00425   //---
00426   //Int_t sldet_id = 0;
00427   for(Int_t sldet_id =(Int_t)(TOFI) ; sldet_id <=(Int_t)(MAG) ; sldet_id++){
00428     fChkBox_FillDet[sldet_id] = new TGCheckButton(fVertFrm_CL1,fSlowDetNames[sldet_id]);
00429     fVertFrm_CL1->AddFrame(fChkBox_FillDet[sldet_id], new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00430     Gui::MoveResizeSafe(500            ,2,50,19, fChkBox_FillDet[(Int_t)(TOFI)]);
00431     Gui::MoveResizeSafe(500 + (65)     ,2,50,19, fChkBox_FillDet[(Int_t)(TOFO)]);
00432     Gui::MoveResizeSafe(500 + (65 * 2) ,2,50,19, fChkBox_FillDet[(Int_t)(SIL)]);
00433     Gui::MoveResizeSafe(500 + (65 * 3) ,2,50,19, fChkBox_FillDet[(Int_t)(LMD)]);
00434     Gui::MoveResizeSafe(500 + (65 * 4) ,2,50,19, fChkBox_FillDet[(Int_t)(STB)]);
00435     Gui::MoveResizeSafe(500 + (65 * 5) ,2,50,19, fChkBox_FillDet[(Int_t)(GAS)]);
00436     Gui::MoveResizeSafe(500 + (65 * 6) ,2,50,19, fChkBox_FillDet[(Int_t)(MAG)]);
00437     if(sldet_id != (Int_t)(MAG)) fChkBox_FillDet[sldet_id]->SetState(kButtonDown,kFALSE);
00438     else fChkBox_FillDet[sldet_id]->SetState(kButtonUp,kFALSE);
00439   }
00440   
00441   // --- main frame size
00442   Gui::MoveResizeSafe(10, 10,1000,550,fMainFrame);
00443 
00444   fMainFrame->SetWindowName("FINUDA SCC GUI"); 
00445 
00446   SetBackgroundColor( (Int_t)E_SCCshowBckCol_default );
00447 
00448   UInt_t default_start = 1170284400; // 02 Feb, 2007 (first raw-saving date)
00449   SetGuiDatime(1,default_start);
00450   SetStopDatime(0);
00451 }
00452 
00453 //_______________________________
00454 Bool_t TFndSCCshowGUI::MakeConnections(Bool_t Connect){
00455 
00456   Bool_t ok = kTRUE;
00457   
00458   if(Connect){
00459     ok = ok && fMainFrame->Connect("CloseWindow()", "TFndSCCshowGUI", this, "CloseGUI()");
00460 
00461     ok = ok && fSteer_But1->Connect("Clicked()", "TFndSCCshowGUI", this, "FillHistos_GUI()");
00462     ok = ok && fSteer_But2->Connect("Clicked()", "TFndSCCshowGUI", this, "SavePage()");
00463 
00464     ok = ok && fSteer_Combo->Connect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SteerCombo(Int_t)");
00465     ok = ok && fSel_Combo1->Connect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SelCombo1(Int_t)");
00466     ok = ok && fSel_Combo2->Connect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SelCombo2(Int_t)");
00467 
00468     ok = ok && fSteer_Num1->Connect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStopDatime(Long_t)");
00469     ok = ok && fSteer_Num1_time->Connect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStopDatime(Long_t)");
00470     ok = ok && fSteer_Num2->Connect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStartDatime(Long_t)");
00471     ok = ok && fSteer_Num2_time->Connect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStartDatime(Long_t)");
00472     ok = ok && fChkBox_DisplayLine->Connect("Toggled(Bool_t)", "TFndSCCshowGUI", this, "ToggleLineDraw(Bool_t)");
00473     ok = ok && fSetting_Combo->Connect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SettingCombo(Int_t)");
00474     ok = ok && fNum_ChannelSelect->Connect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetDetChan(Long_t)");
00475 
00476     ok = ok && fTxtBut_SaveRootFile->Connect("Clicked()", "TFndSCCshowGUI", this, "SaveHistos()");
00477     ok = ok && fTxtBut_LoadRootFile->Connect("Clicked()", "TFndSCCshowGUI", this, "LoadHistos()");
00478 
00479     ok = ok && fShowCanvas->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","TFndSCCshowGUI",this,"HandleMouseActions(Int_t,Int_t,Int_t,TObject*)");
00480 
00481 
00482   }
00483   else{
00484     ok = ok && fMainFrame->Disconnect("CloseWindow()", "TFndSCCshowGUI", this, "CloseGUI()");
00485 
00486     ok = ok && fSteer_But1->Disconnect("Clicked()", "TFndSCCshowGUI", this, "FillHistos_GUI()");
00487     ok = ok && fSteer_But2->Disconnect("Clicked()", "TFndSCCshowGUI", this, "SavePage()");
00488 
00489     ok = ok && fSteer_Combo->Disconnect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SteerCombo(Int_t)");
00490     ok = ok && fSel_Combo1->Disconnect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SelCombo1(Int_t)");
00491     ok = ok && fSel_Combo2->Disconnect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SelCombo2(Int_t)");
00492 
00493     ok = ok && fSteer_Num1->Disconnect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStopDatime(Long_t)");
00494     ok = ok && fSteer_Num1_time->Disconnect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStopDatime(Long_t)");
00495     ok = ok && fSteer_Num2->Disconnect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStartDatime(Long_t)");
00496     ok = ok && fSteer_Num2_time->Disconnect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetStartDatime(Long_t)");
00497     ok = ok && fChkBox_DisplayLine->Disconnect("Toggled(Bool_t)", "TFndSCCshowGUI", this, "ToggleLineDraw(Bool_t)");
00498     ok = ok && fSetting_Combo->Disconnect("Selected(Int_t)", "TFndSCCshowGUI", this, "Exe_SettingCombo(Int_t)");
00499     ok = ok && fNum_ChannelSelect->Disconnect("ValueSet(Long_t)", "TFndSCCshowGUI", this, "SetDetChan(Long_t)");
00500 
00501     ok = ok && fTxtBut_SaveRootFile->Disconnect("Clicked()", "TFndSCCshowGUI", this, "SaveHistos()");
00502     ok = ok && fTxtBut_LoadRootFile->Disconnect("Clicked()", "TFndSCCshowGUI", this, "LoadHistos()");
00503 
00504     ok = ok && fShowCanvas->Disconnect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","TFndSCCshowGUI",this,"HandleMouseActions(Int_t,Int_t,Int_t,TObject*)");
00505   }
00506 
00507   if(!ok) Warning("MakeConnections","At least one broken connection found.");
00508   return ok;
00509 
00510 }
00511 
00512 //_______________________________
00513 void TFndSCCshowGUI::FillCombo_Steer(){
00514   
00515   if( !fSteer_Combo ) return;
00516   
00517   // --- run type
00518   if(fSteer_Combo->GetNumberOfEntries() != 0) fSteer_Combo->RemoveAll();
00519   
00520   fSteer_Combo->AddEntry("2006/2007",0); // make "FINU" the only available run-type
00521   fSteer_Combo->Select(0);
00522     
00523 }
00524 
00525 //_______________________________
00526 void TFndSCCshowGUI::FillCombo_Sel1(){
00527 
00528   if(!fSel_Combo1) return;
00529   if(fSel_Combo1->GetNumberOfEntries() != 0) fSel_Combo1->RemoveAll();
00530   
00531   fSel_Combo1->AddEntry("TOFINO",  E_MasMenu_TOFI );
00532   fSel_Combo1->AddEntry("TOFONE",  E_MasMenu_TOFO );
00533   fSel_Combo1->AddEntry("ISIM",    E_MasMenu_ISIM );
00534   fSel_Combo1->AddEntry("OSIM",    E_MasMenu_OSIM );
00535   fSel_Combo1->AddEntry("INN_LMD", E_MasMenu_LMDINN );
00536   fSel_Combo1->AddEntry("OUT_LMD", E_MasMenu_LMDOUT );
00537   fSel_Combo1->AddEntry("STB",     E_MasMenu_STB );
00538   fSel_Combo1->AddEntry("GAS",     E_MasMenu_GAS );
00539 
00540 
00541 }
00542 
00543 //_______________________________
00544 void TFndSCCshowGUI::FillCombo_Setting(){
00545   
00546   if(fSetting_Combo->GetNumberOfEntries() != 0) fSetting_Combo->RemoveAll();
00547   for(Int_t id=E_SetMenu_ZoomV;id<E_SetMenu_End;id++){
00548     fSetting_Combo->AddEntry(GetSettingName(id),id);
00549   }
00550   fSetting_Combo->Select((Int_t)E_SetMenu_ZoomV);
00551   
00552 }
00553 
00554 //_______________________________
00555 void TFndSCCshowGUI::FillCombo_Sel2(Int_t mode){
00556 
00557   fCurMasterMode = (E_MasterMenuMode) mode;
00558 
00559   if(!fSel_Combo2) return;
00560   if(fSel_Combo2->GetNumberOfEntries() != 0) fSel_Combo2->RemoveAll();
00561   
00562   if(fCurMasterMode != E_MasMenu_GAS){
00563     fSel_Combo2->AddEntry("AVAIL.",  E_SlMenu_Gen_Avail);
00564     fSel_Combo2->AddEntry("CHANNEL", E_SlMenu_Gen_Ch);
00565     fSel_Combo2->AddEntry("POWER",   E_SlMenu_Gen_Pw);
00566     fSel_Combo2->AddEntry("TRIPS",   E_SlMenu_Gen_Trip);
00567     fSel_Combo2->AddEntry("SUMMARY", E_SlMenu_Gen_Summ);
00568   }
00569   else{
00570     fSel_Combo2->AddEntry("STATUS",  E_SlMenu_Gas_Avail);
00571 
00572   }
00573 
00574 
00575 
00576 }
00577 
00578 
00579 //_______________________________
00580 void TFndSCCshowGUI::SetYaxis(TFndGraph *prof,Float_t min, Float_t max){
00581 
00582   if(min == 0 && max == 0){
00583     prof->GetYaxis()->UnZoom();
00584     return;  
00585   }
00586   
00587   prof->GetYaxis()->SetRangeUser(min,max); 
00588 }
00589 
00590 //_______________________________
00591 void TFndSCCshowGUI::SetYaxis(TProfile *prof,Float_t min, Float_t max){
00592   
00593   if(min == 0 && max == 0){
00594     prof->GetYaxis()->UnZoom();
00595     return;  
00596   }
00597   
00598   prof->SetAxisRange(min,max,"Y");
00599 
00600 }
00601 
00602 //_______________________________
00603 void TFndSCCshowGUI::Exe_SettingCombo(Int_t sel){
00604   
00605   if(fDebugLev > 0) Printf("Exe_SettingCombo ==========> %d",sel);
00606   
00607   E_SettingMenuMode sel_set = (E_SettingMenuMode) sel;
00608 
00609   
00610   Float_t mins[K_N_SLOWS] = {0};
00611   Float_t maxs[K_N_SLOWS] = {0};
00612   
00613   if( sel_set == (Int_t)(E_SetMenu_ZoomV) ){
00614     mins[TOFI] = 0;  maxs[TOFI] = 2500.;
00615     mins[TOFO] = 0;  maxs[TOFO] = 3000.;
00616     mins[LMD]  = 0;  maxs[LMD]  = 3500.;
00617     mins[STB]  = 0;  maxs[STB]  = 1800.;
00618     mins[GAS]  = 0;  maxs[GAS]  = 5;
00619     mins[SIL]  = 0.; maxs[SIL]  = 8.;
00620     mins[MAG]  = 0;  maxs[MAG]  = 1;    
00621   }
00622   else if( sel_set == (Int_t)(E_SetMenu_ZoomI) ){
00623     mins[TOFI] = 0;  maxs[TOFI] = 450.;
00624     mins[TOFO] = 0;  maxs[TOFO] = 3000.;
00625     mins[LMD]  = -1; maxs[LMD]  = 200.;
00626     mins[STB]  = -1;  maxs[STB]  = 10.;
00627     mins[GAS]  = 0;  maxs[GAS]  = 5;
00628     mins[SIL]  = -1;  maxs[SIL]  = 50.;
00629     mins[MAG]  = 0;  maxs[MAG]  = 1;    
00630   }
00631   else{
00632     Error("Exe_SettingCombo","Selection \"%d\" not available!",sel);
00633     return;
00634   }
00635   
00636   for(Int_t mod=(Int_t)(TFndSCCshowHistos::E_SccHisMod_V) ; mod<=(Int_t)(TFndSCCshowHistos::E_SccHisMod_I) ; mod++){
00637     // --- TOF
00638     for(Int_t sid=0;sid<2;sid++){
00639       for(Int_t ch=0;ch<K_N_TOFONE_SLABS;ch++){
00640         if(ch<K_N_TOFINO_SLABS) SetYaxis( fSCCHistosRef->fHP_Tofi[mod][sid][ch],mins[TOFI],maxs[TOFI] ); 
00641         SetYaxis( fSCCHistosRef->fHP_Tofo[mod][sid][ch],mins[TOFO],maxs[TOFO] );
00642       }
00643     }
00644     
00645     // --- SIL
00646     for(Int_t ch=0;ch<K_N_Sil_Modules;ch++){
00647       for(Int_t side=0;side<K_N_Sil_Sides;side++){
00648         for(Int_t sign=0;sign<2;sign++){
00649           SetYaxis(fSCCHistosRef->fHP_Osim[mod][ch][side][sign],mins[SIL],maxs[SIL]); 
00650           if( ch < (K_N_Sil_Modules-2) ) SetYaxis(fSCCHistosRef->fHP_Isim[mod][ch][side][sign],mins[SIL],maxs[SIL]); 
00651         }
00652       }
00653     }
00654     
00655     // --- LMD
00656     for(Int_t ch=0;ch<K_N_LMD_CHAMS_PER_LAYER;ch++){
00657       for(Int_t sign=0;sign<2;sign++){
00658         SetYaxis(fSCCHistosRef->fHP_LmdInn[mod][ch][sign],mins[LMD],maxs[LMD]); 
00659         SetYaxis(fSCCHistosRef->fHP_LmdOut[mod][ch][sign],mins[LMD],maxs[LMD]); 
00660       }
00661     }
00662     
00663     // --- STB
00664     for(Int_t ch=0;ch<K_SLOW_N_CHANS[STB];ch++){
00665       SetYaxis(fSCCHistosRef->fHP_Stb[mod][ch],mins[STB],maxs[STB]);
00666     }
00667   }
00668   
00669   UpdateDisplayPad(kTRUE);
00670 }
00671 
00672 //_______________________________
00673 void TFndSCCshowGUI::Exe_SteerCombo(Int_t id){
00674 
00675   if(fDebugLev > 0) Info("Exe_SteerCombo","Executing command id: %d",id); 
00676 
00677 }
00678 
00679 //_______________________________
00680 void TFndSCCshowGUI::Exe_SelCombo1(Int_t id){
00681 
00682   if(fDebugLev > 0) Info("Exe_SelCombo1","Executing command id: %d",id); 
00683   FillCombo_Sel2(id);
00684 }
00685 
00686 //_______________________________
00687 void TFndSCCshowGUI::Exe_SelCombo2(Int_t id){
00688 
00689   if(fDebugLev > 0) Info("Exe_SelCombo2","Executing command id: %d",id); 
00690 
00691   // NOTE:
00692   //   don't know why, but drawing a MultiGraph
00693   //   is faster than drawing a Graph:
00694   //     that's why MultiGraphs are used even for
00695   //     displaying single plots
00696 
00697   // to be completed
00698   switch(fCurMasterMode){
00699   case E_MasMenu_TOFI:
00700     DisplayTofino((E_SlaveMenuMode)id);
00701     break;
00702   case E_MasMenu_TOFO:
00703     DisplayTofone((E_SlaveMenuMode)id);
00704     break;
00705   case E_MasMenu_ISIM:
00706     DisplaySil((E_SlaveMenuMode)id, E_FIN_INNER_LAYER);
00707     break;
00708   case E_MasMenu_OSIM:
00709     DisplaySil((E_SlaveMenuMode)id, E_FIN_OUTER_LAYER);
00710     break;
00711   case E_MasMenu_LMDINN:
00712     DisplayLmd((E_SlaveMenuMode)id, E_FIN_INNER_LAYER);
00713     break;
00714   case E_MasMenu_LMDOUT:
00715     DisplayLmd((E_SlaveMenuMode)id, E_FIN_OUTER_LAYER);
00716     break;
00717   case E_MasMenu_STB:
00718     DisplayStb((E_SlaveMenuMode)id);
00719     break;
00720   case E_MasMenu_GAS:
00721     DisplayGas((E_SlaveMenuMode)id);
00722     break;
00723   default: return;
00724   }
00725 }
00726 
00727 //_______________________________
00728 void TFndSCCshowGUI::UpdateDisplayPad(Bool_t every_pad){
00729 
00730   if(!fShowCanvas){
00731     Warning("ResetDisplayPad","Display pad not available");
00732     return;
00733   }
00734 
00735   fShowCanvas->cd();
00736 
00737   // compute divisions
00738   /*
00739   TIter next(gDirectory->GetList());
00740   TObject *obj;
00741   while ( obj && ( obj = next() ) ) {
00742     if( !obj->IsA() ) continue;
00743     TString clnam = obj->IsA()->GetName();
00744     //    clnam.Resize(9);
00745     if ( clnam.CompareTo("TProfile") == 0 ) {
00746       if(! ( ((TH1 *)obj)->GetSumw2() )->fN){
00747         //      ( (TProfile *)obj )->SetNdivisions(3,"X");
00748         //      ( (TProfile *)obj )->GetXaxis()->SetNdivisions(3,kTRUE);
00749         cout << "UPDATING -----------------> " << obj->GetName() << endl;
00750       }
00751     }
00752   }
00753   */
00754 
00755   // ---
00756   if(every_pad){
00757     if( !fShowCanvas->GetListOfPrimitives() ) return;
00758     const Int_t npads = fShowCanvas->GetListOfPrimitives()->GetEntries();
00759     if(npads>1){
00760       for(Int_t pd=1;pd<=npads;pd++){
00761         if(! fShowCanvas->cd(pd) ) continue;
00762         gPad->Modified();
00763       }
00764     }
00765   }
00766   // ---
00767   fShowCanvas->Modified();
00768   fShowCanvas->Update();
00769   
00770   //   gInterpreter->EndOfLineAction();
00771 }
00772 
00773 //_______________________________
00774 void TFndSCCshowGUI::SetDetChan(Long_t){
00775 
00776   fDetChan = static_cast<Int_t>( fNum_ChannelSelect->GetNumber() );
00777   //  cout << "current channel is: " << fDetChan << endl;
00778   Exe_SelCombo2(fSel_Combo2->GetSelected());
00779 }
00780 
00781 //_______________________________
00782 void TFndSCCshowGUI::ToggleLineDraw(Bool_t line){
00783   
00784   fTh1DrawOpt = line ? "LHIST" : "P" ;
00785   Exe_SelCombo2(fSel_Combo2->GetSelected());
00786 }
00787 
00788 
00789 //_______________________________
00790 void TFndSCCshowGUI::SavePage(){
00791   
00792   StartGUI_SaveFilename(Esave_pdf);
00793   // ---  
00794   
00795 }
00796 
00797 //_______________________________
00798 void TFndSCCshowGUI::SaveHistos(){
00799   
00800   StartGUI_SaveFilename(Esave_root);
00801   // ---  
00802 
00803 }
00804 
00805 //_______________________________
00806 TString TFndSCCshowGUI::BrowseCurDir(){
00807 
00808   TString sel_name = "";
00809 
00810   Printf("...Browsing for histograms...");
00811  
00812   static TString dir(".");
00813   TGFileInfo fi;
00814   new TGFileDialog(gClient->GetDefaultRoot(), fMainFrame,
00815                    kFDOpen,&fi);
00816   dir = fi.fIniDir;
00817   TObjString *el;
00818   TIter next(fi.fFileNamesList);
00819   while ((el = (TObjString *) next())) {
00820     new TFile(el->GetString(), "update");
00821   }
00822   sel_name = fi.fFilename;
00823 
00824   if( sel_name.IsNull() ){ return 0; }
00825 
00826   Printf("...Selected file is \"%s\"",sel_name.Data());
00827   return sel_name;
00828 
00829 }
00830 
00831 //_______________________________
00832 void TFndSCCshowGUI::LoadHistos(){
00833 
00834   TString nam = BrowseCurDir();
00835   
00836   if( nam.IsNull() ){
00837     Info("LoadHistos","Load operation cancelled");
00838     return;
00839   }
00840   
00841   Printf("...Loading histograms from file \"%s\"",nam.Data());
00842   Bool_t fill_tofi = fChkBox_FillDet[TOFI]->GetState();
00843   Bool_t fill_tofo = fChkBox_FillDet[TOFO]->GetState();
00844   Bool_t fill_sil  = fChkBox_FillDet[SIL] ->GetState();
00845   Bool_t fill_lmd  = fChkBox_FillDet[LMD] ->GetState();
00846   Bool_t fill_stb  = fChkBox_FillDet[STB] ->GetState();
00847   Bool_t fill_gas  = fChkBox_FillDet[GAS] ->GetState();
00848   Bool_t fill_mag  = fChkBox_FillDet[MAG] ->GetState();
00849 
00850   fSCCHistosRef->LoadHistosFromFile(nam,
00851                                     fill_tofi,fill_tofo,fill_sil,fill_lmd,fill_stb,fill_gas,fill_mag);
00852   Printf("...histograms loadedfrom file \"%s\"",nam.Data());
00853   
00854   // ---  
00855   
00856 }
00857 
00858 //_______________________________
00859 void TFndSCCshowGUI::StartGUI_SaveFilename(E_savemode mode){
00860 
00861   
00862   fStrSaveFilename.Form("SCCshow_%s_%u_%u%s",
00863                         RunType_Name(fSteer_Combo->GetSelected()).Data(),
00864                         (UInt_t)(fSteer_Num1->GetNumber()),
00865                         (UInt_t)(fSteer_Num2->GetNumber()),
00866                         GetExtFromMode(mode).Data()
00867                         );
00868 
00869   // ---
00870   
00871   fTrsnFrm_SaveName = new TGTransientFrame(gClient->GetRoot(), fMainFrame, 400, 200);
00872   fTrsnFrm_SaveName->SetCleanup(kDeepCleanup);
00873   // ---
00874   Gui::MoveResizeSafe(10,90,385,120, fTrsnFrm_SaveName);
00875   
00876   fSaveFnam_Trsn_Lbl = new TGLabel(fTrsnFrm_SaveName,"set filename (with ext)",
00877                                    fFontGC_LabNorm->GetGC(),
00878                                    fFont_LabEnl->GetFontStruct(),
00879                                    kSunkenFrame | kDoubleBorder | kOwnBackground);
00880   
00881   fSaveFnam_Trsn_Lbl->SetTextJustify(36);
00882   fSaveFnam_Trsn_Lbl->SetTextFont("-adobe-helvetica-medium-r-*-*-16-*-*-*-*-*-iso8859-1");
00883   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_Lbl, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00884   Gui::MoveResizeSafe(10,10,135,25, fSaveFnam_Trsn_Lbl);
00885   
00886   fSaveFnam_Trsn_Txt = new TGTextEntry(fTrsnFrm_SaveName, new TGTextBuffer(15),-1);
00887   //  fSaveFnam_Trsn_Txt = new TGTextEntry(fTrsnFrm_SaveName, new TGTextBuffer(15),-1,
00888   //                         fFontGC_LabNorm->GetGC(),
00889   //                         fFont_LabEnl->GetFontStruct(),
00890   //                         kSunkenFrame | kDoubleBorder | kOwnBackground);
00891   
00892   fSaveFnam_Trsn_Txt->SetMaxLength(255);
00893   fSaveFnam_Trsn_Txt->SetAlignment(kTextLeft);
00894   fSaveFnam_Trsn_Txt->SetText(fStrSaveFilename);
00895   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_Txt, new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5));
00896   Gui::MoveResizeSafe(155,10,240,25,fSaveFnam_Trsn_Txt);
00897   
00898   fSaveFnam_Trsn_ButOk = new TGTextButton(fTrsnFrm_SaveName,"OK");
00899   fSaveFnam_Trsn_ButOk->SetTextJustify(36);
00900   fSaveFnam_Trsn_ButOk->SetFont(fFont_But->GetName());
00901   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_ButOk, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00902   Gui::MoveResizeSafe(30,50,70,30, fSaveFnam_Trsn_ButOk);
00903   
00904   fSaveFnam_Trsn_ButCancel = new TGTextButton(fTrsnFrm_SaveName,"CANCEL");
00905   fSaveFnam_Trsn_ButCancel->SetTextJustify(36);
00906   fSaveFnam_Trsn_ButCancel->SetFont(fFont_But->GetName());
00907   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_ButCancel, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00908   Gui::MoveResizeSafe(300,50,70,30, fSaveFnam_Trsn_ButCancel);
00909   // ---
00910   fTrsnFrm_SaveName->MapSubwindows();
00911   //  fTrsnFrm_SaveName->Resize();
00912   
00913   fTrsnFrm_SaveName->CenterOnParent(); // position relative to the parent's window
00914   fTrsnFrm_SaveName->SetWindowName("Filename window");
00915   fTrsnFrm_SaveName->MapWindow();
00916   //
00917 
00918   switch(mode){
00919   case Esave_pdf:
00920     fSaveFnam_Trsn_ButOk->Connect("Clicked()", "TFndSCCshowGUI", this, "Do_SaveDisplay()");
00921     break;
00922   case Esave_root:
00923     fSaveFnam_Trsn_ButOk->Connect("Clicked()", "TFndSCCshowGUI", this, "Do_SaveHistos()");
00924     break;
00925     
00926   }
00927   
00928   fSaveFnam_Trsn_ButCancel->Connect("Clicked()", "TFndSCCshowGUI", this, "CloseGUI_SaveFilename()");
00929   fMainFrame->Connect("CloseWindow()", "TGTransientFrame", fTrsnFrm_SaveName, "CloseWindow()");
00930   fTrsnFrm_SaveName->DontCallClose(); // to avoid double deletions.
00931   
00932 }
00933 
00934 //_______________________________
00935 void TFndSCCshowGUI::CloseGUI_SaveFilename(){
00936 
00937   fTrsnFrm_SaveName->CloseWindow();
00938   if(fDebugLev > 0) Printf("Save window closed");
00939 }
00940 
00941 //_______________________________
00942 void TFndSCCshowGUI::Do_SaveDisplay(){
00943   
00944   Bool_t MustOverwrite = (Bool_t) (fChkBox_Overwrite->GetState() );
00945   
00946   if(! Do_CheckCanWriteFile() ) return;
00947   
00948   fStrSaveFilename = fSaveFnam_Trsn_Txt->GetText();
00949 
00950   SetBackgroundColor( (Int_t)E_SCCshowBckCol_save );
00951   // ---
00952 
00953   TString msg;
00954   TString canv_tit;
00955   canv_tit.Form("SCC show \"%s\" from %u  to %u",
00956                 RunType_Name(fSteer_Combo->GetSelected()).Data(),
00957                 (UInt_t)(fSteer_Num1->GetNumber()),
00958                 (UInt_t)(fSteer_Num2->GetNumber())
00959                 );
00960   
00961   Gui::SaveCanvasWithTitle(fShowCanvas,canv_tit,fStrSaveFilename,fTh1DrawOpt,"",0);
00962   msg.Form("file \"%s\" created in current directory.",fStrSaveFilename.Data());
00963   WriteStatusMessage(msg);
00964 
00965   // ---
00966   SetBackgroundColor( (Int_t)E_SCCshowBckCol_default );
00967 
00968   CloseGUI_SaveFilename();
00969   
00970 }
00971 
00972 //_______________________________
00973 void TFndSCCshowGUI::Do_SaveHistos(){
00974   
00975   Bool_t MustOverwrite = (Bool_t) (fChkBox_Overwrite->GetState() );
00976   Printf("Saving histograms to root-file... (overwrite flag: %d)",MustOverwrite);
00977 
00978   if(! Do_CheckCanWriteFile() ){
00979     CloseGUI_SaveFilename();
00980     return;
00981   }
00982 
00983   Bool_t fill_tofi = fChkBox_FillDet[TOFI]->GetState();
00984   Bool_t fill_tofo = fChkBox_FillDet[TOFO]->GetState();
00985   Bool_t fill_sil  = fChkBox_FillDet[SIL] ->GetState();
00986   Bool_t fill_lmd  = fChkBox_FillDet[LMD] ->GetState();
00987   Bool_t fill_stb  = fChkBox_FillDet[STB] ->GetState();
00988   Bool_t fill_gas  = fChkBox_FillDet[GAS] ->GetState();
00989   Bool_t fill_mag  = fChkBox_FillDet[MAG] ->GetState();
00990 
00991   fStrSaveFilename = fSaveFnam_Trsn_Txt->GetText();
00992   fSCCHistosRef->WriteHistosToFile(fStrSaveFilename,
00993                                    fill_tofi,fill_tofo,fill_sil,fill_lmd,fill_stb,fill_gas,fill_mag);
00994   
00995   CloseGUI_SaveFilename();
00996   Printf("histograms saved to root-file...");
00997 }
00998 
00999 //_______________________________
01000 Bool_t TFndSCCshowGUI::Do_CheckCanWriteFile(){
01001   
01002   Bool_t MustOverwrite = (Bool_t) (fChkBox_Overwrite->GetState() );
01003   
01004   if(!MustOverwrite && !gSystem->AccessPathName(fStrSaveFilename)){
01005     TString msg;
01006     msg.Form("file \"%s\" already existing: can not save (if you want to overwrite it check the dedicated box).",fStrSaveFilename.Data());
01007     WriteStatusMessage(msg);
01008     return kFALSE;
01009   }
01010   
01011   return kTRUE;
01012 }
01013 
01014 //_______________________________
01015 void TFndSCCshowGUI::DrawFndGraph(Int_t pad_id, TFndGraph *graph1, TFndGraph *graph2,Bool_t time_x){
01016   // default displaying pad "pad_id"
01017   //   ( pad_id = 1,2,3,4,... )
01018   // NOTE: two graphs can be superimposed
01019   
01020   if(pad_id < 0){
01021     Error("DrawFndGraph","BUG detected: wrong pad_id (%d) in private method",pad_id);
01022     TerminateFroot();
01023     return;
01024   }
01025   
01026   if(! graph1 || graph1->GetN() < 2){
01027     Info("DrawFndGraph","graph1 is empty (less than 2 points).");
01028     return;
01029   }
01030   
01031   Int_t gr_id = (pad_id == 0) ? pad_id : pad_id -1 ;
01032   if( pad_id ==0 )fShowCanvas->cd();
01033   else fShowCanvas->cd(pad_id);
01034   
01035   fFndMultiGraph[gr_id]->AddFndGraph( graph1 );
01036   if(graph2) fFndMultiGraph[gr_id]->AddFndGraph( graph2 );
01037   fFndMultiGraph[gr_id]->DrawDefaults(time_x);
01038 }
01039 
01040 //_______________________________
01041 void TFndSCCshowGUI::DisplayTofino(E_SlaveMenuMode mode){
01042   
01043   if(mode < E_SlMenu_Gen_Avail || mode > E_SlMenu_Gen_End){
01044     Warning("DisplayTofino","mode %d not accepted",(Int_t)mode);
01045     return;
01046   }
01047   
01048   if( fDetChan<1 ){
01049     fDetChan = 1;
01050     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01051   }
01052   else if( fDetChan>K_N_TOFINO_SLABS ){
01053     fDetChan = K_N_TOFINO_SLABS;
01054     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01055   }
01056 
01057   TString sameopt = fTh1DrawOpt; sameopt+="same";
01058   
01059   switch(mode){
01060   case E_SlMenu_Gen_Avail:
01061     ResetDisplayPad(1,2);
01062     DrawFndGraph(1,fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1]);
01063     //   
01064     DrawFndGraph(2,fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1]);
01065      
01066     break;
01067   case E_SlMenu_Gen_Ch:
01068     ResetDisplayPad(1,2);
01069     DrawFndGraph(1,
01070                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1],
01071                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1]);
01072     //
01073     DrawFndGraph(2,
01074                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1],
01075                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1]);
01076     break;
01077   case E_SlMenu_Gen_Pw:
01078     ResetDisplayPad(1,2);
01079     DrawFndGraph(1,
01080                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)  ][(Int_t)(E_FIN_SIDE_E)][fDetChan-1]);
01081     //   
01082     DrawFndGraph(2,
01083                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)  ][(Int_t)(E_FIN_SIDE_P)][fDetChan-1]);
01084     break;
01085   case E_SlMenu_Gen_Trip:
01086     ResetDisplayPad(1,2);
01087     DrawFndGraph(1,
01088                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1]);
01089     //   
01090     DrawFndGraph(2,
01091                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1]);
01092     break;
01093   case E_SlMenu_Gen_Summ:
01094     ResetDisplayPad(1,2);
01095     DrawFndGraph(1,
01096     fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)  ][(Int_t)(E_FIN_SIDE_E)][fDetChan-1]);
01097     //   
01098     DrawFndGraph(2,
01099                  fSCCHistosRef->fHP_Tofi[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)  ][(Int_t)(E_FIN_SIDE_P)][fDetChan-1]);
01100     break;
01101   default:
01102     ResetDisplayPad();
01103     Error("DisplayTofino","mode not available");
01104     return;
01105   }
01106   // ---
01107   UpdateDisplayPad();  
01108 
01109   DisplayInfo_Tofino(mode);
01110 
01111 }
01112 
01113 //_______________________________
01114 void TFndSCCshowGUI::DisplayTofone(E_SlaveMenuMode mode){
01115   
01116   if(mode < E_SlMenu_Gen_Avail || mode > E_SlMenu_Gen_End){
01117     Warning("DisplayTofone","mode %d not accepted",(Int_t)mode);
01118     return;
01119   }
01120   
01121   if( fDetChan<1 ){
01122     fDetChan = 1;
01123     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01124   }
01125   else if( fDetChan>K_N_TOFONE_SLABS ){
01126     fDetChan = K_N_TOFONE_SLABS;
01127     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01128   }
01129 
01130   TString sameopt = fTh1DrawOpt; sameopt+="same";
01131 
01132   switch(mode){
01133   case E_SlMenu_Gen_Avail:
01134     ResetDisplayPad(1,2);
01135     DrawFndGraph(1,
01136                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1] );
01137     //   
01138     DrawFndGraph(2,
01139                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1] );
01140     break;
01141   case E_SlMenu_Gen_Ch:
01142     ResetDisplayPad(1,2);
01143     DrawFndGraph(1,
01144                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1],
01145                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1] );
01146     //
01147     DrawFndGraph(2,
01148                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1],
01149                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1] );
01150     break;
01151   case E_SlMenu_Gen_Pw:
01152     ResetDisplayPad(1,2);
01153     DrawFndGraph(1,
01154                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)  ][(Int_t)(E_FIN_SIDE_E)][fDetChan-1] );
01155     //   
01156     DrawFndGraph(2,
01157                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)  ][(Int_t)(E_FIN_SIDE_P)][fDetChan-1] );
01158     break;
01159   case E_SlMenu_Gen_Trip:
01160     ResetDisplayPad(1,2);
01161     DrawFndGraph(1,
01162                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][(Int_t)(E_FIN_SIDE_E)][fDetChan-1] );
01163     //   
01164     DrawFndGraph(2,
01165                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][(Int_t)(E_FIN_SIDE_P)][fDetChan-1] );
01166     break;
01167   case E_SlMenu_Gen_Summ:
01168     ResetDisplayPad(1,2);
01169     DrawFndGraph(1,
01170                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)  ][(Int_t)(E_FIN_SIDE_E)][fDetChan-1] );
01171     //   
01172     DrawFndGraph(2,
01173                  fSCCHistosRef->fHP_Tofo[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)  ][(Int_t)(E_FIN_SIDE_P)][fDetChan-1] );
01174     break;
01175   default:
01176     ResetDisplayPad();
01177     Error("DisplayTofone","mode not available");
01178     return;
01179   }
01180   // ---
01181   UpdateDisplayPad();  
01182 
01183   DisplayInfo_Tofone(mode);
01184 
01185 }
01186 
01187 //_______________________________
01188 void TFndSCCshowGUI::DisplaySil(E_SlaveMenuMode mode,E_Fnd_Layer layer){
01189   //     E_FIN_SIDE_E = 0,
01190   //     E_FIN_SIDE_P = 1
01191 
01192   Int_t maxch = K_N_Sil_Modules;
01193   if( layer == (Int_t)(E_FIN_INNER_LAYER) ) maxch = K_N_Sil_Modules - 2;
01194   
01195   
01196   if( fDetChan<1 ){
01197     fDetChan = 1;
01198     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01199   }
01200   else if( fDetChan>maxch ){
01201     fDetChan = maxch;
01202     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01203   }
01204   
01205   TString sameopt = fTh1DrawOpt; sameopt+="same";
01206   
01207   switch(mode){
01208   case E_SlMenu_Gen_Avail:
01209     ResetDisplayPad(3,2);
01210     for(Int_t side=0; side<3;side++){
01211       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01212         DrawFndGraph(side+1,
01213                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][side][0] );
01214       } else{
01215         DrawFndGraph(side+1,
01216                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][side][0] );
01217       }
01218       //
01219       //      fShowCanvas->cd(side + 4);
01220       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01221         DrawFndGraph(side+4,
01222                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][side][1] );
01223       } else{
01224         DrawFndGraph(side+4,
01225                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][side][1] );
01226       }
01227     }
01228     break;
01229   case E_SlMenu_Gen_Ch:
01230     ResetDisplayPad(3,2);
01231     for(Int_t side=0; side<3;side++){
01232       //      fShowCanvas->cd(side +1);
01233       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01234         DrawFndGraph(side+1,
01235                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][side][0],
01236                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][side][0] );
01237       } else {
01238         DrawFndGraph(side+1,
01239                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][side][0],
01240                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][side][0] );
01241       }
01242       //
01243       //      fShowCanvas->cd(side + 4);
01244       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01245         DrawFndGraph(side+4,
01246                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][side][1],
01247                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][side][1] );
01248       } else {
01249         DrawFndGraph(side+4,
01250                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][side][1],
01251                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][side][1] );
01252       }
01253     }
01254     break;
01255   case E_SlMenu_Gen_Pw:
01256     ResetDisplayPad(3,2);
01257     for(Int_t side=0; side<3;side++){
01258       //      fShowCanvas->cd(side +1);
01259       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01260         DrawFndGraph(side+1,
01261                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][side][0] );
01262       }
01263       else {
01264         DrawFndGraph(side+1,
01265                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][side][0] );
01266       }
01267       //
01268       //      fShowCanvas->cd(side + 4);
01269       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01270         DrawFndGraph(side+4,
01271                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][side][1] );
01272       }
01273       else {
01274         DrawFndGraph(side+4,
01275                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][side][1] );
01276       }
01277     }
01278     break;
01279   case E_SlMenu_Gen_Trip:
01280     ResetDisplayPad(3,2);
01281     for(Int_t side=0; side<3;side++){
01282       //      fShowCanvas->cd(side +1);
01283       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01284         DrawFndGraph(side+1,
01285                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][side][0] );
01286       }
01287       else {
01288         DrawFndGraph(side+1,
01289                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][side][0] );
01290       }
01291       //
01292       //      fShowCanvas->cd(side + 4);
01293       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01294         DrawFndGraph(side+4,
01295                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][side][1] );
01296       }
01297       else {
01298         DrawFndGraph(side+4,
01299                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][side][1] );
01300       }
01301     }
01302     break;
01303   case E_SlMenu_Gen_Summ:
01304     ResetDisplayPad(3,2);
01305     for(Int_t side=0; side<3;side++){
01306       //      fShowCanvas->cd(side +1);
01307       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01308         DrawFndGraph(side+1,
01309                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][side][0] );
01310       }
01311       else {
01312         DrawFndGraph(side+1,
01313                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][side][0] );
01314       }
01315       //
01316       //      fShowCanvas->cd(side + 4);
01317       if(       layer == (Int_t)(E_FIN_INNER_LAYER)){
01318         DrawFndGraph(side+4,
01319                      fSCCHistosRef->fHP_Isim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][side][1] );
01320       }
01321       else {
01322         DrawFndGraph(side+4,
01323                      fSCCHistosRef->fHP_Osim[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][side][1] );
01324       }
01325     }
01326     break;
01327   default:
01328     ResetDisplayPad();
01329     Error("DisplaySil","mode not available");
01330     return;
01331   }
01332   // ---
01333   UpdateDisplayPad();  
01334 
01335   DisplayInfo_Sil(mode,layer);
01336 
01337 }
01338 
01339 
01340 //_______________________________
01341 void TFndSCCshowGUI::DisplayLmd(E_SlaveMenuMode mode,E_Fnd_Layer layer){
01342   //     E_FIN_SIDE_E = 0,
01343   //     E_FIN_SIDE_P = 1
01344   
01345   if( fDetChan<1 ){
01346     fDetChan = 1;
01347     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01348   }
01349   else if( fDetChan>K_N_LMD_CHAMS_PER_LAYER ){
01350     fDetChan = K_N_LMD_CHAMS_PER_LAYER;
01351     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01352   }
01353   
01354   TString sameopt = fTh1DrawOpt; sameopt+="same";
01355   
01356   switch(mode){
01357   case E_SlMenu_Gen_Avail:
01358     ResetDisplayPad(1,2);
01359     //    fShowCanvas->cd(1);
01360     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01361       DrawFndGraph(1,
01362                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][0] );
01363     } else{
01364       DrawFndGraph(1,
01365                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][0] );
01366     }
01367     //
01368     //    fShowCanvas->cd(2);
01369     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01370       DrawFndGraph(2,
01371                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][1] );
01372     } else{
01373       DrawFndGraph(2,
01374                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1][1] );
01375     }
01376     break;
01377    case E_SlMenu_Gen_Ch:
01378      ResetDisplayPad(1,2);
01379      //     fShowCanvas->cd(1);
01380     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01381       DrawFndGraph(1,
01382                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][0],
01383                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][0] );
01384     } else {
01385       DrawFndGraph(1,
01386                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][0],
01387                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][0]);
01388     }
01389     //
01390     //    fShowCanvas->cd(2);
01391     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01392       DrawFndGraph(2,
01393                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][1],
01394                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][1]);
01395     } else {
01396       DrawFndGraph(2,
01397                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1][1],
01398                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1][1]);
01399     }
01400     break;
01401   case E_SlMenu_Gen_Pw:
01402     ResetDisplayPad(1,2);
01403     //    fShowCanvas->cd(1);
01404     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01405       DrawFndGraph(1,
01406                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][0] );
01407     }
01408     else {
01409       DrawFndGraph(1,
01410                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][0] );
01411     }
01412     //
01413     //    fShowCanvas->cd(2);
01414     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01415       DrawFndGraph(2,
01416                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][1] );
01417     } 
01418     else {
01419       DrawFndGraph(2,
01420                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1][1] );
01421     }
01422     break;
01423   case E_SlMenu_Gen_Trip:
01424     ResetDisplayPad(1,2);
01425     //    fShowCanvas->cd(1);
01426     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01427       DrawFndGraph(1,
01428                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][0] );
01429     }
01430     else {
01431       DrawFndGraph(1,
01432                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][0] );
01433     }
01434     //
01435     //    fShowCanvas->cd(2);
01436     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01437       DrawFndGraph(2,
01438                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][1] );
01439     } 
01440     else {
01441       DrawFndGraph(2,
01442                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1][1] );
01443     }
01444     break;
01445   case E_SlMenu_Gen_Summ:
01446     ResetDisplayPad(1,2);
01447     //    fShowCanvas->cd(1);
01448     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01449       DrawFndGraph(1,
01450                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][0] );
01451     }
01452     else {
01453       DrawFndGraph(1,
01454                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][0] );
01455     }
01456     //
01457     //    fShowCanvas->cd(2);
01458     if( layer == (Int_t)(E_FIN_INNER_LAYER)){
01459       DrawFndGraph(2,
01460                    fSCCHistosRef->fHP_LmdInn[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][1] );
01461     } 
01462     else {
01463       DrawFndGraph(2,
01464                    fSCCHistosRef->fHP_LmdOut[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1][1] );
01465     }
01466     break;
01467   default:
01468     ResetDisplayPad();
01469     Error("DisplayLmd","mode not available");
01470     return;
01471   }
01472   // ---
01473   UpdateDisplayPad();  
01474   
01475   DisplayInfo_Lmd(mode,layer);
01476 
01477 }
01478 
01479 //_______________________________
01480 void TFndSCCshowGUI::DisplayStb(E_SlaveMenuMode mode){
01481   
01482   if(mode < E_SlMenu_Gen_Avail || mode > E_SlMenu_Gen_End){
01483     Warning("DisplayStb","mode %d not accepted",(Int_t)mode);
01484     return;
01485   }
01486   
01487   if( fDetChan<1 ){
01488     fDetChan = 1;
01489     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01490   }
01491   else if( fDetChan>K_SLOW_N_CHANS[STB] ){
01492     fDetChan = K_SLOW_N_CHANS[STB];
01493     fNum_ChannelSelect->SetNumber( static_cast<Long_t>(fDetChan) );
01494   }
01495   
01496   TString sameopt = fTh1DrawOpt; sameopt+="same";
01497   
01498    switch(mode){
01499    case E_SlMenu_Gen_Avail:
01500      ResetDisplayPad();
01501      //     fShowCanvas->cd();
01502      DrawFndGraph(0,
01503                   fSCCHistosRef->fHP_Stb[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Avail)][fDetChan-1] );
01504      //   
01505      break;
01506    case E_SlMenu_Gen_Ch:
01507      ResetDisplayPad();
01508      //     fShowCanvas->cd();
01509      DrawFndGraph(0,
01510                   fSCCHistosRef->fHP_Stb[(Int_t)(TFndSCCshowHistos::E_SccHisMod_V)][fDetChan-1],
01511                   fSCCHistosRef->fHP_Stb[(Int_t)(TFndSCCshowHistos::E_SccHisMod_I)][fDetChan-1] );
01512      //
01513      break;
01514    case E_SlMenu_Gen_Pw:
01515      ResetDisplayPad();
01516      //     fShowCanvas->cd();
01517      DrawFndGraph(0,
01518                   fSCCHistosRef->fHP_Stb[(Int_t)(TFndSCCshowHistos::E_SccHisMod_PW)][fDetChan-1] );
01519      //
01520      break;
01521    case E_SlMenu_Gen_Trip:
01522      ResetDisplayPad();
01523      //     fShowCanvas->cd();
01524      DrawFndGraph(0,
01525                   fSCCHistosRef->fHP_Stb[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Trip)][fDetChan-1] );
01526      //
01527      break;
01528    case E_SlMenu_Gen_Summ:
01529      ResetDisplayPad();
01530      //     fShowCanvas->cd();
01531      DrawFndGraph(0,
01532                   fSCCHistosRef->fHP_Stb[(Int_t)(TFndSCCshowHistos::E_SccHisMod_Stat)][fDetChan-1] );
01533      //
01534      break;
01535    default:
01536     ResetDisplayPad();
01537     Error("DisplayStb","mode not available");
01538     return;
01539   }
01540   // ---
01541   UpdateDisplayPad();  
01542 
01543   DisplayInfo_Stb(mode);
01544 
01545 }
01546 
01547 //_______________________________
01548 void TFndSCCshowGUI::DisplayGas(E_SlaveMenuMode mode){
01549   
01550   if(mode < E_SlMenu_Gen_Avail || mode > E_SlMenu_Gen_End){
01551     Warning("DisplayGas","mode %d not accepted",(Int_t)mode);
01552     return;
01553   }
01554 
01555    switch(mode){
01556    case E_SlMenu_Gen_Avail:
01557      ResetDisplayPad();
01558      fShowCanvas->cd(1);
01559      //     fSCCHistosRef->fH_GesTrigBit->Draw(fTh1DrawOpt);
01560      break;
01561    case E_SlMenu_Gen_Ch:
01562      ResetDisplayPad();
01563      fShowCanvas->cd(1);
01564      //     fSCCHistosRef->fH_GesTrigBit->Draw(fTh1DrawOpt);
01565      break;
01566    case E_SlMenu_Gen_Summ:
01567      ResetDisplayPad();
01568      fShowCanvas->cd(1);
01569      //     fSCCHistosRef->fH_GesTrigBit->Draw(fTh1DrawOpt);
01570      break;
01571    default:
01572     ResetDisplayPad();
01573     Error("DisplayGas","mode not available");
01574     return;
01575   }
01576   // ---
01577   UpdateDisplayPad();  
01578 
01579   DisplayInfo_Gas(mode);
01580 
01581 }
01582 
01584 
01585 //____________________________________
01586 void TFndSCCshowGUI::DisplayInfo_Tofino(E_SlaveMenuMode mode){
01587 
01588   if(fDebugLev > 0) Info("DisplayInfo_Tofino","Displaying information");
01589   ResetTextMessage();
01590   TString info_msg = "";
01591   
01592   
01593   switch(mode){
01594   case E_SlMenu_Gen_Avail:  
01595     info_msg.Form("TOFINO: %i",mode);
01596     AddTextMessage(info_msg,kTRUE);
01597     return;
01598   case E_SlMenu_Gen_Ch:
01599     info_msg.Form("TOFINO: %i",mode);
01600     AddTextMessage(info_msg,kTRUE);
01601     return;
01602   case E_SlMenu_Gen_Summ:
01603     info_msg.Form("TOFINO: %i",mode);
01604     AddTextMessage(info_msg,kTRUE);
01605     return;
01606   default: return;
01607   }
01608   
01609 
01610 }
01611 
01612 //____________________________________
01613 void TFndSCCshowGUI::DisplayInfo_Tofone(E_SlaveMenuMode mode){
01614   
01615   if(fDebugLev > 0) Info("DisplayInfo_Tofone","Displaying information");
01616   ResetTextMessage();
01617   TString info_msg = "";
01618   
01619   switch(mode){
01620   case E_SlMenu_Gen_Avail:  
01621     info_msg.Form("TOFONE: %i",mode);
01622     AddTextMessage(info_msg,kTRUE);
01623     return;
01624   case E_SlMenu_Gen_Ch:
01625     info_msg.Form("TOFONE: %i",mode);
01626     AddTextMessage(info_msg,kTRUE);
01627     return;
01628   case E_SlMenu_Gen_Summ:
01629     info_msg.Form("TOFONE: %i",mode);
01630     AddTextMessage(info_msg,kTRUE);
01631     return;
01632   default: return;
01633   }
01634 
01635 }
01636 
01637 //____________________________________
01638 void TFndSCCshowGUI::DisplayInfo_Sil(E_SlaveMenuMode mode,E_Fnd_Layer layer){
01639   
01640   if(fDebugLev > 0) Info("DisplayInfo_Sil","Displaying information");
01641   ResetTextMessage();
01642   TString info_msg = "";
01643   
01644   switch(mode){
01645   case E_SlMenu_Gen_Avail:  
01646     info_msg.Form("SIL: %i (lay: %i)",mode,layer);
01647     AddTextMessage(info_msg,kTRUE);
01648     return;
01649   case E_SlMenu_Gen_Ch:
01650     info_msg.Form("SIL: %i (lay: %i)",mode,layer);
01651     AddTextMessage(info_msg,kTRUE);
01652     return;
01653   case E_SlMenu_Gen_Summ:
01654     info_msg.Form("SIL: %i (lay: %i)",mode,layer);
01655     AddTextMessage(info_msg,kTRUE);
01656     return;
01657   default: return;
01658   }
01659 
01660 }
01661 
01662 //____________________________________
01663 void TFndSCCshowGUI::DisplayInfo_Lmd(E_SlaveMenuMode mode,E_Fnd_Layer layer){
01664   
01665   if(fDebugLev > 0) Info("DisplayInfo_Lmd","Displaying information");
01666   ResetTextMessage();
01667   TString info_msg = "";
01668   
01669   switch(mode){
01670   case E_SlMenu_Gen_Avail:  
01671     info_msg.Form("LMD: %i (lay: %i)",mode,layer);
01672     AddTextMessage(info_msg,kTRUE);
01673     return;
01674   case E_SlMenu_Gen_Ch:
01675     info_msg.Form("LMD: %i (lay: %i)",mode,layer);
01676     AddTextMessage(info_msg,kTRUE);
01677     return;
01678   case E_SlMenu_Gen_Summ:
01679     info_msg.Form("LMD: %i (lay: %i)",mode,layer);
01680     AddTextMessage(info_msg,kTRUE);
01681     return;
01682   default: return;
01683   }
01684 
01685 }
01686 
01687 //____________________________________
01688 void TFndSCCshowGUI::DisplayInfo_Stb(E_SlaveMenuMode mode){
01689 
01690   if(fDebugLev > 0) Info("DisplayInfo_Stb","Displaying information");
01691   ResetTextMessage();
01692   TString info_msg = "";
01693   
01694   
01695   switch(mode){
01696   case E_SlMenu_Gen_Avail:  
01697     info_msg.Form("STB: %i",mode);
01698     AddTextMessage(info_msg,kTRUE);
01699     return;
01700   case E_SlMenu_Gen_Ch:
01701     info_msg.Form("STB: %i",mode);
01702     AddTextMessage(info_msg,kTRUE);
01703     return;
01704   case E_SlMenu_Gen_Summ:
01705     info_msg.Form("STB: %i",mode);
01706     AddTextMessage(info_msg,kTRUE);
01707     return;
01708   default: return;
01709   }
01710   
01711 
01712 }
01713 
01714 //____________________________________
01715 void TFndSCCshowGUI::DisplayInfo_Gas(E_SlaveMenuMode mode){
01716 
01717   if(fDebugLev > 0) Info("DisplayInfo_Gas","Displaying information");
01718   ResetTextMessage();
01719   TString info_msg = "";
01720   
01721   
01722   switch(mode){
01723   case E_SlMenu_Gen_Avail:  
01724     info_msg.Form("GAS: %i",mode);
01725     AddTextMessage(info_msg,kTRUE);
01726     return;
01727   case E_SlMenu_Gen_Ch:
01728     info_msg.Form("GAS: %i",mode);
01729     AddTextMessage(info_msg,kTRUE);
01730     return;
01731   case E_SlMenu_Gen_Summ:
01732     info_msg.Form("GAS: %i",mode);
01733     AddTextMessage(info_msg,kTRUE);
01734     return;
01735   default: return;
01736   }
01737   
01738 
01739 }
01740 
01744 
01745 //____________________________________
01746 void TFndSCCshowGUI::HandleMouseActionsDaughter(Int_t event, Int_t x, Int_t y, TObject *selected){
01747   
01748   //  cout << "event: " << event << " ===> (" << x << ";" << y << "): " << selected->ClassName() << " -> " << selected->GetName() << endl;
01749   // 51: move
01750   // 53: leave pad
01751   // 52: enter subpad
01752   //
01753   //  1: left  click (press left mouse button)
01754   // 11: left  release (release left mouse button)
01755   // 61: left  double-click (after "1-11-1" combo)
01756   // 21: left  drag (keep left mouse button clicked and move mouse)
01757   //
01758   //  2: right click (press left mouse button)
01759   // 12: right release (release left mouse button)
01760   // 62: right double-click (after "1-11-1" combo)
01761   //
01762   //  3: right click (press left mouse button)
01763   // 13: right release (release left mouse button)
01764   // 63: right double-click (after "1-11-1" combo)
01765 
01766   //  if(event == 11 && !strcmp(selected->ClassName(),"TH1F"))
01767   //  cout << "Clicked on " << selected->ClassName() << " " << selected->GetName() << endl;
01768 
01769 
01770   switch(event){
01771     // ------------
01772     // --- move ---
01773   case 51: // move inside the canvas (or sub-pads)
01774     //cout << "Moving on " << selected->ClassName() << " " << selected->GetName() << endl << endl;
01775     break;
01776   case 53: // leave the main pad
01777     break;
01778   case 52: // enter sub-pad
01779     break;
01780     // -------------
01781     // --- click ---
01782   case  1: // left click (before releasing mouse button)
01783     
01784     break;
01785     //
01786   case 11: // left click (after having releasing mouse button)
01787     
01788     break;
01789     //
01790   case 61: // left double-click
01791     cout << "Double-click received on object: \"" << selected->ClassName() 
01792          << "\"; name: \"" << selected->GetName() 
01793          << "\"; title: \"" << selected->GetTitle() << "\"." << endl;
01794     
01795     if(!strncmp(selected->ClassName(),"TH",2)) EnlargeHisto(selected);
01796     if(!strncmp(selected->ClassName(),"TProfile",8)) EnlargeHisto(selected);
01797     if(!strncmp(selected->ClassName(),"TPave",5)) PrintPaveInfo(selected);
01798     break;
01799     //
01800   default: break;    
01801   }
01802 
01803 }
01804 
01805 //____________________________________
01806 void TFndSCCshowGUI::EnlargeHisto(TObject *selected){
01807   
01808   //  cout << "--------------> sel address: " << selected << endl;
01809   if(!selected){
01810     Warning("EnlargeHisto","selected object is NULL!");
01811     return;
01812   }
01813   //   TString clnam = selected->ClassName();
01814   //   cout << "--------------> sel type   : " << clnam << endl;
01815   //   cout << "--------------> sel name   :" << selected->GetName() << endl;
01816   
01817   ResetDisplayPad();
01818   fShowCanvas->cd();
01819   selected->Draw(fTh1DrawOpt);
01820   
01821   UpdateDisplayPad();  
01822   
01823 }
01824 //____________________________________
01825 void TFndSCCshowGUI::PrintPaveInfo(TObject *selected){
01826   
01827   const Char_t *clnam = (Char_t *) selected->ClassName();
01828   
01829   Printf("");
01830   Printf(" ----------------------------------------");
01831   Printf(" Selected object general properties:");
01832   Printf("   Object type: \"%s\"",clnam);
01833   
01834   if(!strcmp(clnam,"TPaveText")){
01835     Printf("   Histogram title ====> \"%s\".",((TPaveText *)selected)->GetLine(0)->GetTitle());
01836   }
01837   else if(!strcmp(clnam,"TPaveStats")){
01838     for(Int_t i=0;i<50;i++){
01839       TText *curtxt = (TText*)(((TPaveText *)selected)->GetListOfLines())->At(i);   
01840       if(!curtxt) break;
01841       Printf("   - %s",curtxt->GetTitle());
01842     }
01843   }
01844   if(fDebugLev > 1){
01845     cout << "   Text Align =======> " << ((TPaveText *)selected)->GetTextAlign() << endl;
01846     cout << "   Text Color =======> " << ((TPaveText *)selected)->GetTextColor() << endl;
01847     cout << "   Text Font ========> " << ((TPaveText *)selected)->GetTextFont() << endl;  
01848   }
01849   cout << " ----------------------------------------" << endl;
01850 }

Generated on Tue Oct 16 15:40:48 2007 by  doxygen 1.5.2