PREAN/TFndPreanGUI.cxx

00001 // @(#)fROOT/PREAN:$Name:  $:$Id: TFndPreanGUI.cxx,v 1.39 2007/10/04 14:10:26 Diego_Faso Exp $
00002 // Author: Diego Faso <mailto:faso@to.infn.it>, 2006/12/02
00003 
00005 //                                                                             //
00007 
00008 
00009 #include "TFndPreanGUI.h"
00010 
00011 #include "TFndRun.h"
00012 
00013 #include <TPaveText.h>
00014 #include <TPaveStats.h>
00015 
00016 ClassImp(TFndPreanGUI)
00017   
00018 //_______________________________
00019 TFndPreanGUI::TFndPreanGUI():
00020   fTrsnFrm_SaveName()
00021 {
00022   // ---
00023   PreanHistosRef = new TFndPreanHistos();
00024   SetCutFit(kTRUE);
00025   //
00026   PreanHistosRef->InitHistos();
00027   fTh1DrawOpt = "hist";
00028 
00029   new TFndRun;
00030   ResetMultiGraphs(kTRUE);
00031 
00032 }
00033 
00034 //_______________________________
00035 TFndPreanGUI::~TFndPreanGUI(){
00036   // ---
00037   delete PreanHistosRef;
00038 }
00039 
00040 //_______________________________
00041 void TFndPreanGUI::SetFirstRun(Long_t){
00042   // set last run number-entry depending on first run
00043 
00044   if(!fSteer_Num1 || !fSteer_Num2) return;
00045   if(fSteer_Num2->GetNumber() <= 0){
00046     fSteer_Num1->SetNumber(0);
00047     fSteer_Num2->SetNumber(0);
00048     return;
00049   }
00050 
00051   if(fSteer_Num1->GetNumber() < fSteer_Num2->GetNumber()) return;
00052   fSteer_Num1->SetNumber(fSteer_Num2->GetNumber());
00053 }
00054 
00055 //_______________________________
00056 void TFndPreanGUI::SetLastRun(Long_t){
00057   // set last run number-entry depending on first run
00058 
00059   if(!fSteer_Num1 || !fSteer_Num2) return;
00060   if(fSteer_Num1->GetNumber() <= 0){
00061     fSteer_Num1->SetNumber(0);
00062     fSteer_Num2->SetNumber(0);
00063     return;
00064   }
00065 
00066   if(fSteer_Num1->GetNumber() < fSteer_Num2->GetNumber()) return;
00067   fSteer_Num2->SetNumber(fSteer_Num1->GetNumber());
00068   
00069 }
00070 
00071 //_______________________________
00072 void TFndPreanGUI::FillHistos_GUI(){
00073   
00074   if(!fSteer_Combo || !fSteer_Num1 || !fSteer_Num2){
00075     Warning("FillHistos_GUI","Some STEER command not available");
00076     return;
00077   }
00078   
00079   TString run_type = RunType_Name(fSteer_Combo->GetSelected());
00080   Int_t first_run = (Int_t) fSteer_Num1->GetNumber();
00081   Int_t last_run = (Int_t)fSteer_Num2->GetNumber();;
00082   if(fDebugLev > 0){
00083     Info("FillHistos_GUI","Filling: run-type: \"%s\"; from run %d to run %d.",
00084          run_type.Data(),
00085          first_run,
00086          last_run);
00087   }
00088 
00089   if(fChkBox_Autoreset->GetState()) PreanHistosRef->ResetHistos();
00090   PreanHistosRef->ResetStatGraphs(kTRUE);
00091   ResetMultiGraphs(kTRUE);
00092   
00094   TString cpth = "$FND_PREAN_TREES/";
00095   cpth+=FidaVer_Name( (E_FndFidaVersion)(fFidaVer_Combo->GetSelected()) );
00096   TString start_pth=ExpandPathName(cpth);  
00097   TString fnam;
00098 
00099   AddTextMessage("Getting data: please wait...",kTRUE);
00100   UpdateDisplayPad(kFALSE);
00101   // --- create the transient progress window
00102   if(last_run-first_run > 2){
00103     fTransientProgress = new TFndGTransientProgress();
00104     fTransientProgress->SetTitle("Filling progress");
00105   }
00106   //
00107   for(Int_t cur_run=first_run;cur_run<=last_run;cur_run++){ // loop on requested runs
00108 #if defined _FND_OUTPUTS_USE_SUBDIR
00109     TString frunnam = BuildRunName(run_type,cur_run,kTRUE);
00110 #else
00111     TString frunnam = BuildRunName(run_type,cur_run);
00112 #endif
00113     
00114     fnam.Form("%s/%s.prean.root",
00115               start_pth.Data(),
00116               frunnam.Data() );
00117         
00118     if( PreanHistosRef->LoadTrees(fnam) != 0){
00119       //Printf("prean. not ready for file \"%s\"",fnam.Data());
00120       TString inf_str_tmp="";
00121       inf_str_tmp.Form("run %d missing",cur_run);
00122       AddTextMessage(inf_str_tmp,kFALSE,kFALSE);
00123       continue;
00124     }
00125     
00126     //    Printf("***************** file ok: \"%s\" *****************",fnam.Data());
00127     
00128     PreanHistosRef->FillHistos();
00129     
00130     PreanHistosRef->CloseCurrentSourceFile();
00131     PreanHistosRef->EvalStatGraphs(cur_run);
00132     
00133     // --- update the transient progress window
00134     if(fTransientProgress){
00135       TString tmpstr = "";
00136       tmpstr.Form("Filling from run %d",cur_run);
00137       fTransientProgress->ReSetStatusMessage(tmpstr);
00138       fTransientProgress->SetProgressBar(cur_run-first_run,last_run-first_run);
00139       fTransientProgress->UpdateGUI();
00140       gClient->ProcessEventsFor(fTransientProgress);
00141       if( fTransientProgress->IsCancelled() ){
00142         AddTextMessage("\n     Filling manually",kFALSE);
00143         tmpstr.Form("  stopped(last run %d)\n",cur_run);
00144         AddTextMessage(tmpstr,kFALSE);
00145         break;
00146       }
00147     }
00148     //  
00149   }
00150   // --- remove the transient progress window
00151   if(fTransientProgress){
00152     delete fTransientProgress;
00153     fTransientProgress = 0;
00154   }  //
00155   
00156   AddTextMessage("Data loaded...",kFALSE);
00157 
00158   PreanHistosRef->EvalHistos();
00159   AddTextMessage("Pre-analysis GUI ready.",kFALSE);
00160  
00161 }
00162 
00163 //_______________________________
00164 void TFndPreanGUI::BuildGUI(){
00165   
00166   BuildBaseGUI();
00167   // --- changes from base gui down here
00168 
00169 }
00170 
00171 //_______________________________
00172 void TFndPreanGUI::CloseGUI(){
00173   
00174   if(!fMainFrame){
00175     Warning("CloseGUI","fMainFrame not available");
00176     return;
00177   }
00178   
00179   if(fDebugLev > 1) Info("CloseGUI","Deleting mainframe");
00180   
00181   fMainFrame->Cleanup();
00182 
00183   delete fMainFrame;
00184 
00185   gApplication->Terminate();
00186   return;
00187 }
00188 
00189 //_______________________________
00190 void TFndPreanGUI::CustomizeGUI(){
00191 
00192   fGrpFrm_SteerCmd->SetTitle("Steer commands");
00193   fSteer_Combo_Lbl->SetText("RUN type");
00194   fSteer_Num1_Lbl->SetText("From run");
00195   fSteer_Num2_Lbl->SetText("To run");
00196 
00197   fSteer_But1->SetText("Fill Histos");
00198   Gui::MoveResizeSafe(10,120,70,30, fSteer_But1);
00199 
00200   fSteer_But2->SetText("Save page");
00201   Gui::MoveResizeSafe(87,120,70,30, fSteer_But2);
00202 
00203   fGrpFrm_SelectCmd->SetTitle("Display commands");
00204   fSel_Combo1_Lbl->SetText("Type");
00205   fSel_Combo2_Lbl->SetText("Selection");
00206 
00207   Gui::MoveResizeSafe(20,70,130,20, fSel_Combo2_Lbl);
00208   Gui::MoveResizeSafe(20,90,130,20, fSel_Combo2);
00209 
00210   fGrpFrm_Msg->SetTitle("Info");
00211 
00212   // --- ADDs on
00213   fFidaVer_Combo_Lbl = new TGLabel(fGrpFrm_SteerCmd,"fidarc ver.",
00214                                  fFontGC_LabNorm->GetGC(),
00215                                  fFont_LabNorm->GetFontStruct(),
00216                                  kSunkenFrame | kDoubleBorder | kOwnBackground);
00217 
00218   fFidaVer_Combo_Lbl->SetTextJustify(36);
00219   fGrpFrm_SteerCmd->AddFrame(fFidaVer_Combo_Lbl, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00220   Gui::MoveResizeSafe(10,90,75,20, fFidaVer_Combo_Lbl);
00221    
00222   fFidaVer_Combo = new TGComboBox(fGrpFrm_SteerCmd,-1,kHorizontalFrame | kSunkenFrame | kDoubleBorder | kOwnBackground);
00223   fFidaVer_Combo->AddEntry("Entry 1 ",0);
00224   fFidaVer_Combo->AddEntry("Entry 2 ",1);
00225   fFidaVer_Combo->Select(-1);
00226   fGrpFrm_SteerCmd->AddFrame(fFidaVer_Combo, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00227   Gui::MoveResizeSafe(90,90,70,20, fFidaVer_Combo);
00228   //---
00229   fChkBox_Autoreset = new TGCheckButton(fGrpFrm_SteerCmd,"Auto-reset");
00230   fGrpFrm_SteerCmd->AddFrame(fChkBox_Autoreset, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00231   Gui::MoveResizeSafe(10,155,70,20, fChkBox_Autoreset);
00232   fChkBox_Autoreset->SetState(kButtonDown,kFALSE);
00233 
00234   // ---
00235   fChkBox_Overwrite = new TGCheckButton(fGrpFrm_SteerCmd,"overwrite");
00236   fGrpFrm_SteerCmd->AddFrame(fChkBox_Overwrite, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00237   Gui::MoveResizeSafe(90,155,70,20, fChkBox_Overwrite);
00238   fChkBox_Overwrite->SetState(kButtonDown,kFALSE);
00239 
00241   Gui::MoveResizeSafe(2,20,165,185,fGrpFrm_SteerCmd);
00242 
00243   // -
00244 
00245   fChkBox_SumW2 = new TGCheckButton(fGrpFrm_SelectCmd,"Error-bars");
00246   fGrpFrm_SelectCmd->AddFrame(fChkBox_SumW2, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00247   Gui::MoveResizeSafe(10,170,70,20, fChkBox_SumW2);
00248   fChkBox_SumW2->SetState(kButtonUp,kFALSE);
00249 
00250   Gui::MoveResizeSafe(2,195,165,205, fGrpFrm_SelectCmd);
00251 
00252   // settings
00253   fSetting_Combo_Lbl = new TGLabel(fGrpFrm_SelectCmd,"Setting",
00254                                  fFontGC_LabNorm->GetGC(),
00255                                  fFont_LabNorm->GetFontStruct(),
00256                                  kSunkenFrame | kDoubleBorder | kOwnBackground);
00257 
00258   fSetting_Combo_Lbl->SetTextJustify(36);
00259   fGrpFrm_SelectCmd->AddFrame(fSetting_Combo_Lbl, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00260   Gui::MoveResizeSafe(10,140,75,20, fSetting_Combo_Lbl);
00261    
00262   fSetting_Combo = new TGComboBox(fGrpFrm_SelectCmd,-1,kHorizontalFrame | kSunkenFrame | kDoubleBorder | kOwnBackground);
00263   fSetting_Combo->AddEntry("Entry 1 ",0);
00264   fSetting_Combo->AddEntry("Entry 2 ",1);
00265   fSetting_Combo->Select(-1);
00266   fGrpFrm_SelectCmd->AddFrame(fSetting_Combo, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00267   Gui::MoveResizeSafe(90,140,70,20, fSetting_Combo);
00268 
00269   // ----- warnings label
00270   fWarningMsg_Lbl = new TGLabel(fVertFrm_CL1," --- ",
00271                                 fFontGC_LabEnl->GetGC(),
00272                                 fFont_LabEnl->GetFontStruct(),
00273                                 kSunkenFrame | kDoubleBorder | kOwnBackground);
00274   
00275   fWarningMsg_Lbl->SetTextJustify(36);
00276   fWarningMsg_Lbl->SetBackgroundColor(TColor::RGB2Pixel(0xcd,0xc5,0xbf)); // similar to the default for root-Gframes
00277   fVertFrm_CL1->AddFrame(fWarningMsg_Lbl, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00278   Gui::MoveResizeSafe(5,2,165,20, fWarningMsg_Lbl);
00279   
00280   // ----- save/load root-file buttons
00281   fTxtBut_SaveRootFile = new TGTextButton(fVertFrm_CL1,"Save root-file");
00282   fTxtBut_SaveRootFile->SetTextJustify(36);
00283   fTxtBut_SaveRootFile->SetFont(fFont_But->GetName());
00284   fVertFrm_CL1->AddFrame(fTxtBut_SaveRootFile, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00285   Gui::MoveResizeSafe(185,2,90,19, fTxtBut_SaveRootFile);
00286 
00287   fTxtBut_LoadRootFile = new TGTextButton(fVertFrm_CL1,"Load root-file");
00288   fTxtBut_LoadRootFile->SetTextJustify(36);
00289   fTxtBut_LoadRootFile->SetFont(fFont_But->GetName());
00290   fVertFrm_CL1->AddFrame(fTxtBut_LoadRootFile, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00291   Gui::MoveResizeSafe(280,2,90,19, fTxtBut_LoadRootFile);
00292 
00293   // ----- CUTS/SELECTIONS management
00294   // --- event general selection
00295   fLbl_EvtCuts = new TGLabel(fVertFrm_CL1,"EV. SELECT.",
00296                                 fFontGC_LabEnl->GetGC(),
00297                                 fFont_LabEnl->GetFontStruct(),
00298                                 kSunkenFrame | kDoubleBorder | kOwnBackground);
00299   
00300   fLbl_EvtCuts->SetTextJustify(36);
00301   fLbl_EvtCuts->SetBackgroundColor(TColor::RGB2Pixel(0xcd,0xc5,0xbf));
00302   fVertFrm_CL1->AddFrame(fLbl_EvtCuts, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00303   Gui::MoveResizeSafe(380,1,75,20, fLbl_EvtCuts);
00304 
00305 
00306   // --- track selection
00307   fLbl_TrkCuts = new TGLabel(fVertFrm_CL1,"TRK. SELECT.",
00308                                 fFontGC_LabEnl->GetGC(),
00309                                 fFont_LabEnl->GetFontStruct(),
00310                                 kSunkenFrame | kDoubleBorder | kOwnBackground);
00311   
00312   fLbl_TrkCuts->SetTextJustify(36);
00313   fLbl_TrkCuts->SetBackgroundColor(TColor::RGB2Pixel(0xcd,0xc5,0xbf));
00314   fVertFrm_CL1->AddFrame(fLbl_TrkCuts, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00315   Gui::MoveResizeSafe(590,1,75,20, fLbl_TrkCuts);
00316   
00317   fChkBox_CutTrkFit = new TGCheckButton(fVertFrm_CL1,"FITTED",-1,
00318                                         fFontGC_LabEnl->GetGC(),
00319                                         fFont_LabEnl->GetFontStruct(),
00320                                         kSunkenFrame | kDoubleBorder | kOwnBackground);
00321 
00322   fVertFrm_CL1->AddFrame(fChkBox_CutTrkFit, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00323   Gui::MoveResizeSafe(670,1,50,20, fChkBox_CutTrkFit);
00324   fChkBox_CutTrkFit->SetState(kButtonDown,kFALSE);
00325   // ---
00326   fLbl_TrkType = new TGLabel(fVertFrm_CL1,"TYPE:",
00327                                 fFontGC_LabEnl->GetGC(),
00328                                 fFont_LabEnl->GetFontStruct(),
00329                                 kSunkenFrame | kDoubleBorder | kOwnBackground);
00330   
00331   fLbl_TrkType->SetTextJustify(36);
00332   fLbl_TrkType->SetBackgroundColor(TColor::RGB2Pixel(0xcd,0xc5,0xbf));
00333   fVertFrm_CL1->AddFrame(fLbl_TrkType, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00334   Gui::MoveResizeSafe(720,1,50,20, fLbl_TrkType);
00335   //
00336    
00337   fCombo_TrkType = new TGComboBox(fVertFrm_CL1,-1,kHorizontalFrame | kSunkenFrame | kDoubleBorder | kOwnBackground);
00338   TString typstr = "";
00339   for(Int_t ti=0;ti<PreanHistosRef->TrkTypes();ti++){
00340     PreanHistosRef->TrkType(ti,typstr); 
00341     fCombo_TrkType->AddEntry(typstr,ti);
00342   }
00343   fCombo_TrkType->Select(0,kTRUE);
00344   fVertFrm_CL1->AddFrame(fCombo_TrkType, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00345   Gui::MoveResizeSafe(770,1,90,20, fCombo_TrkType);
00346 
00348   //           --- main frame placement ---           //
00350   Gui::MoveResizeSafe(10, 10,1000,550,fMainFrame);
00351   fMainFrame->SetWindowName("FINUDA pre-analysis GUI"); 
00352   SetBackgroundColor( (Int_t)E_PreanBckCol_default );
00354 }
00355 
00356 //_______________________________
00357 Bool_t TFndPreanGUI::MakeConnections(Bool_t Connect){
00358 
00359   Bool_t ok = kTRUE;
00360   
00361   if(Connect){
00362     ok = ok && fMainFrame->Connect("CloseWindow()", "TFndPreanGUI", this, "CloseGUI()");
00363 
00364     ok = ok && fSteer_But1->Connect("Clicked()", "TFndPreanGUI", this, "FillHistos_GUI()");
00365     ok = ok && fSteer_But2->Connect("Clicked()", "TFndPreanGUI", this, "SavePage()");
00366 
00367     ok = ok && fSteer_Combo->Connect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SteerCombo(Int_t)");
00368     ok = ok && fSel_Combo1->Connect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SelCombo1(Int_t)");
00369     ok = ok && fSel_Combo2->Connect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SelCombo2(Int_t)");
00370 
00371     ok = ok && fSteer_Num1->Connect("ValueSet(Long_t)", "TFndPreanGUI", this, "SetLastRun(Long_t)");
00372     ok = ok && fSteer_Num2->Connect("ValueSet(Long_t)", "TFndPreanGUI", this, "SetFirstRun(Long_t)");
00373     ok = ok && fChkBox_SumW2->Connect("Toggled(Bool_t)", "TFndPreanGUI", this, "ToggleErrorBars(Bool_t)");
00374     ok = ok && fFidaVer_Combo->Connect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_FidaVerCombo(Int_t)");
00375     ok = ok && fSetting_Combo->Connect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SettingCombo(Int_t)");
00376 
00377     ok = ok && fTxtBut_SaveRootFile->Connect("Clicked()", "TFndPreanGUI", this, "SaveHistos()");
00378     ok = ok && fTxtBut_LoadRootFile->Connect("Clicked()", "TFndPreanGUI", this, "LoadHistos()");
00379 
00380     ok = ok && fShowCanvas->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","TFndPreanGUI",this,"HandleMouseActions(Int_t,Int_t,Int_t,TObject*)");
00381     //
00382     ok = ok && fChkBox_CutTrkFit->Connect("Toggled(Bool_t)","TFndPreanGUI",this,"SetCutFit(Bool_t)");
00383     ok = ok && fCombo_TrkType->Connect("Selected(Int_t)", "TFndPreanGUI", this, "SetTrkType(Int_t)");
00384   }
00385   else{
00386     ok = ok && fMainFrame->Disconnect("CloseWindow()", "TFndPreanGUI", this, "CloseGUI()");
00387 
00388     ok = ok && fSteer_But1->Disconnect("Clicked()", "TFndPreanGUI", this, "FillHistos_GUI()");
00389     ok = ok && fSteer_But2->Disconnect("Clicked()", "TFndPreanGUI", this, "SavePage()");
00390 
00391     ok = ok && fSteer_Combo->Disconnect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SteerCombo(Int_t)");
00392     ok = ok && fSel_Combo1->Disconnect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SelCombo1(Int_t)");
00393     ok = ok && fSel_Combo2->Disconnect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SelCombo2(Int_t)");
00394 
00395     ok = ok && fSteer_Num1->Disconnect("ValueSet(Long_t)", "TFndPreanGUI", this, "SetLastRun(Long_t)");
00396     ok = ok && fSteer_Num2->Disconnect("ValueSet(Long_t)", "TFndPreanGUI", this, "SetFirstRun(Long_t)");
00397     ok = ok && fChkBox_SumW2->Disconnect("Toggled(Bool_t)", "TFndPreanGUI", this, "ToggleErrorBars(Bool_t)");
00398     ok = ok && fFidaVer_Combo->Disconnect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_FidaVerCombo(Int_t)");
00399     ok = ok && fSetting_Combo->Disconnect("Selected(Int_t)", "TFndPreanGUI", this, "Exe_SettingCombo(Int_t)");
00400 
00401     ok = ok && fTxtBut_SaveRootFile->Disconnect("Clicked()", "TFndPreanGUI", this, "SaveHistos()");
00402     ok = ok && fTxtBut_LoadRootFile->Disconnect("Clicked()", "TFndPreanGUI", this, "LoadHistos()");
00403 
00404     ok = ok && fShowCanvas->Disconnect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","TFndPreanGUI",this,"HandleMouseActions(Int_t,Int_t,Int_t,TObject*)");
00405     //
00406     ok = ok && fChkBox_CutTrkFit->Disconnect("Toggled(Bool_t)","TFndPreanGUI",this,"SetCutFit(Bool_t)");
00407     ok = ok && fCombo_TrkType->Disconnect("Selected(Int_t)", "TFndPreanGUI", this, "SetTrkType(Int_t)");
00408   }
00409   
00410   if(!ok) Warning("MakeConnections","At least one broken connection found.");
00411   return ok;
00412 
00413 }
00414 
00415 //_______________________________
00416 void TFndPreanGUI::FillCombo_Steer(){
00417   
00418   if(!fSteer_Combo || !fFidaVer_Combo) return;
00419   
00420   // --- run type
00421   if(fSteer_Combo->GetNumberOfEntries() != 0) fSteer_Combo->RemoveAll();
00422   
00423   //   for(Int_t i=(Int_t)(RT_FINU);i<=(Int_t)(RT_ONLM-1);i++) {
00424   //     fSteer_Combo->AddEntry(RunType_Name(i),i);
00425   //   }  
00426   fSteer_Combo->AddEntry(RunType_Name((Int_t)(RT_FINU)),(Int_t)(RT_FINU)); // make "FINU" the only available run-type
00427   fSteer_Combo->Select(RT_FINU);
00428   
00429   // --- fida version
00430   if(fFidaVer_Combo->GetNumberOfEntries() != 0) fFidaVer_Combo->RemoveAll();
00431   
00432   for(Int_t i=(Int_t)(FIDAVER_521);i < (Int_t)(FIDAVER_END);i++) {
00433     fFidaVer_Combo->AddEntry(FidaVer_Name((E_FndFidaVersion)i),i);
00434   }  
00435   fFidaVer_Combo->Select(FIDAVER_603);
00436   
00437 }
00438 
00439 //_______________________________
00440 void TFndPreanGUI::FillCombo_Sel1(){
00441 
00442   if(!fSel_Combo1) return;
00443   if(fSel_Combo1->GetNumberOfEntries() != 0) fSel_Combo1->RemoveAll();
00444   
00445   fSel_Combo1->AddEntry("GES",E_MasMenu_GES);
00446   fSel_Combo1->AddEntry("BHABHA",E_MasMenu_BHABHA);
00447   fSel_Combo1->AddEntry("HYPE",E_MasMenu_HYPE);
00448   fSel_Combo1->AddEntry("STATISTICS",E_MasMenu_STAT);
00449 
00450 }
00451 
00452 //_______________________________
00453 void TFndPreanGUI::FillCombo_Setting(){
00454   
00455   if(fSetting_Combo->GetNumberOfEntries() != 0) fSetting_Combo->RemoveAll();
00456   for(Int_t id=E_SetMenu_DEFAULT;id<E_SetMenu_End;id++){
00457     fSetting_Combo->AddEntry(GetSettingName(id),id);
00458   }
00459   fSetting_Combo->Select((Int_t)E_SetMenu_DEFAULT);
00460   
00461 }
00462 
00463 //_______________________________
00464 void TFndPreanGUI::FillCombo_Sel2(Int_t mode){
00465 
00466   fCurMasterMode = (E_MasterMenuMode) mode;
00467 
00468   if(!fSel_Combo2) return;
00469   if(fSel_Combo2->GetNumberOfEntries() != 0) fSel_Combo2->RemoveAll();
00470 
00471   switch(fCurMasterMode){
00472   case E_MasMenu_GES:
00473     fSel_Combo2->AddEntry("Main check",E_SlMenu_Ges_Main);
00474     break;
00475   case E_MasMenu_BHABHA:
00476     fSel_Combo2->AddEntry("Particles", E_SlMenu_Bha_Part);
00477     fSel_Combo2->AddEntry("Int. point", E_SlMenu_Bha_Int);
00478     fSel_Combo2->AddEntry("TOF", E_SlMenu_Bha_Tof);
00479     break;
00480   case E_MasMenu_HYPE:
00481     fSel_Combo2->AddEntry("K- stop (2D)", E_SlMenu_Hyp_Km_Stop_2D);
00482     fSel_Combo2->AddEntry("K+ stop (2D)", E_SlMenu_Hyp_Kp_Stop_2D);
00483     fSel_Combo2->AddEntry("K-/K+ stop", E_SlMenu_Hyp_K_Stop);
00484     fSel_Combo2->AddEntry("K-/K+ stat", E_SlMenu_Hyp_K_Stat);
00485     fSel_Combo2->AddEntry("Phi decay pos.", E_SlMenu_Hyp_K_PhiPos);
00486     fSel_Combo2->AddEntry("K+ pos. trk (ALL)", E_SlMenu_Hyp_K_KpluPosTrk_All);
00487     fSel_Combo2->AddEntry("K+ pos. trk (tgt)", E_SlMenu_Hyp_K_KpluPosTrk_Tgt);
00488     fSel_Combo2->AddEntry("K+ pos. trk (pth)", E_SlMenu_Hyp_K_KpluPosTrk_Pth);
00489     fSel_Combo2->AddEntry("K+ mu+ (TOF)", E_SlMenu_Hyp_K_KpluPosTrk_Tof);
00490     break;
00491   case E_MasMenu_STAT:
00492     fSel_Combo2->AddEntry("Events./run", E_SlMenu_Stat_Events);
00493     fSel_Combo2->AddEntry("Lumin./run", E_SlMenu_Stat_Lumin);
00494     fSel_Combo2->AddEntry("Int. Lumin.[no inh.]", E_SlMenu_Stat_LuminInt_NoInh);
00495     fSel_Combo2->AddEntry("Int. Lumin.[inj inh.]", E_SlMenu_Stat_LuminInt_InjInh);
00496     fSel_Combo2->AddEntry("Int. Lumin.[all inh]", E_SlMenu_Stat_LuminInt_AllInh);
00497     fSel_Combo2->AddEntry("BHA trig", E_SlMenu_Stat_BhaCount);
00498     fSel_Combo2->AddEntry("HYP trig", E_SlMenu_Stat_HypCount);
00499     fSel_Combo2->AddEntry("K stop (all tgt.)", E_SlMenu_Stat_KaonsStop);
00500     fSel_Combo2->AddEntry("Mu-plus (all tgt.)", E_SlMenu_Stat_MuPluAll);
00501     fSel_Combo2->AddEntry("ECM. (from e-e+)", E_SlMenu_Stat_BhaECM);
00502     fSel_Combo2->AddEntry("Kshort. (from pi-pi+)", E_SlMenu_Stat_BhaKshort);
00503     fSel_Combo2->AddEntry("Kshort/Bhabha ratio", E_SlMenu_Stat_BhaRatio);
00504     break;
00505   default: return;
00506   }
00507 
00508 }
00509 
00510 //_______________________________
00511 void TFndPreanGUI::Exe_FidaVerCombo(Int_t sel){
00512 
00513   if(fDebugLev > 0) Printf("Exe_FidaVerCombo ==========> %d",sel);
00514   
00515   if( fFidaVer_Combo->GetSelected() != FidaVer_ID()){
00516     fWarningMsg_Lbl->SetBackgroundColor(TColor::RGB2Pixel(0xff,0x00,0x33));
00517 
00518     TString msg = "";
00519     msg.Form("default fidarc version is \"%s\" ",FidaVer_Name().Data());    
00520     
00521     Warning("Exe_FidaVerCombo","Not using the default release of fidarc (default is \"%s\")",FidaVer_Name().Data());
00522     fWarningMsg_Lbl->SetText(msg);
00523   }
00524   else{
00525     fWarningMsg_Lbl->SetBackgroundColor(TColor::RGB2Pixel(0xcd,0xc5,0xbf));
00526     fWarningMsg_Lbl->SetText("");
00527   }
00528 }
00529 
00530 //_______________________________
00531 void TFndPreanGUI::Exe_SettingCombo(Int_t sel){
00532   
00533   if(fDebugLev > 0) Printf("Exe_SettingCombo ==========> %d",sel);
00534   
00535   E_SettingMenuMode sel_set = (E_SettingMenuMode) sel;
00536   switch(sel_set){
00537   case E_SetMenu_DEFAULT:
00538     ( (TAxis *)(PreanHistosRef->fH_HypTrk_KpluPosAll->GetXaxis() ) ) ->UnZoom();
00539     ( (TAxis *)(PreanHistosRef->fH_InvMass_EpluEmin->GetXaxis()  ) ) ->UnZoom();
00540     ( (TAxis *)(PreanHistosRef->fH_InvMass_PIpluPImin->GetXaxis() ) )->UnZoom();
00541     ( (TAxis *)(PreanHistosRef->fH_BhaTracksAngle->GetXaxis() ) )->UnZoom();
00542     break;
00543   case E_SetMenu_SHIFT:
00544     PreanHistosRef->fH_HypTrk_KpluPosAll->SetAxisRange(0.215,0.245,"X");
00545     PreanHistosRef->fH_InvMass_EpluEmin->SetAxisRange(0.95,1.08,"X");
00546     PreanHistosRef->fH_InvMass_PIpluPImin->SetAxisRange(0.46,0.54,"X");
00547     PreanHistosRef->fH_BhaTracksAngle->SetAxisRange(120.,180.,"X");
00548     break;
00549   default:
00550     Warning("Exe_SettingCombo","selection \"%d\" not available.",sel);
00551     return;
00552   }
00553   
00554   UpdateDisplayPad(kTRUE);
00555 }
00556 
00557 //_______________________________
00558 void TFndPreanGUI::Exe_SteerCombo(Int_t id){
00559 
00560   if(fDebugLev > 0) Info("Exe_SteerCombo","Executing command id: %d",id); 
00561 
00562 }
00563 
00564 //_______________________________
00565 void TFndPreanGUI::Exe_SelCombo1(Int_t id){
00566 
00567   if(fDebugLev > 0) Info("Exe_SelCombo1","Executing command id: %d",id); 
00568   FillCombo_Sel2(id);
00569 }
00570 
00571 //_______________________________
00572 void TFndPreanGUI::Exe_SelCombo2(Int_t id){
00573 
00574   if(fDebugLev > 0) Info("Exe_SelCombo2","Executing command id: %d",id); 
00575 
00576   // to be completed
00577   switch(fCurMasterMode){
00578   case E_MasMenu_GES:
00579     DisplayGes((E_SlaveMenuMode)id);
00580     break;
00581   case E_MasMenu_BHABHA:
00582     DisplayBhabha((E_SlaveMenuMode)id);
00583     break;
00584   case E_MasMenu_HYPE:
00585     DisplayHype((E_SlaveMenuMode)id);
00586     break;
00587   case E_MasMenu_STAT:
00588     DisplayStat((E_SlaveMenuMode)id);
00589     break;
00590   default: return;
00591   }
00592 }
00593 
00594 //_______________________________
00595 void TFndPreanGUI::UpdateDisplayPad(Bool_t every_pad){
00596 
00597   if(!fShowCanvas){
00598     Warning("ResetDisplayPad","Display pad not available");
00599     return;
00600   }
00601 
00602   fShowCanvas->cd();
00603 
00604   // compute error-bars
00605   TIter next(gDirectory->GetList());
00606   TObject *obj;
00607   while ( obj && ( obj = next() ) ) {
00608     if( !obj->IsA() ) continue;
00609     TString clnam = obj->IsA()->GetName();
00610     clnam.Resize(3);
00611     if ( clnam.CompareTo("TH1") == 0 ) {
00612       if(! ( ((TH1 *)obj)->GetSumw2() )->fN) ( (TH1 *)obj )->Sumw2();
00613       //      cout << obj->GetName() << endl;
00614     }
00615   }
00616 
00617   // ---
00618   if(every_pad){
00619     if( !fShowCanvas->GetListOfPrimitives() ) return;
00620     const Int_t npads = fShowCanvas->GetListOfPrimitives()->GetEntries();
00621     if(npads>1){
00622       for(Int_t pd=1;pd<=npads;pd++){
00623         if(! fShowCanvas->cd(pd) ) continue;
00624         gPad->Modified();
00625         //      gPad->Update();  
00626       }
00627     }
00628   }
00629   // ---
00630   fShowCanvas->Modified();
00631   //  fShowCanvas->Flush();  
00632   gInterpreter->EndOfLineAction();
00633 }
00634 
00635 //_______________________________
00636 void TFndPreanGUI::ResetMultiGraphs(Bool_t recreate){
00637   
00638   TString mgnam="";
00639   for( Int_t i=0;i<(NmaxMulGraph)(NMaxMultiGraphs); i++){
00640     if(recreate){
00641       delete fFndMultiGraph[i];
00642       mgnam.Form("MultiGraph_%i",i);    
00643       fFndMultiGraph[i] = new TFndMultiGraph(mgnam,mgnam);
00644     }
00645     else if(fFndMultiGraph[i]) fFndMultiGraph[i]->Reset();
00646   }
00647 
00648 }
00649 
00650 //_______________________________
00651 void TFndPreanGUI::ToggleErrorBars(Bool_t sumw2){
00652   
00653   fTh1DrawOpt = sumw2 ? "" : "hist" ;
00654   Exe_SelCombo2(fSel_Combo2->GetSelected());
00655 }
00656 
00657 
00658 //_______________________________
00659 void TFndPreanGUI::SavePage(){
00660   
00661   StartGUI_SaveFilename(Esave_pdf);
00662   // ---  
00663   
00664 }
00665 
00666 //_______________________________
00667 void TFndPreanGUI::SaveHistos(){
00668   
00669   StartGUI_SaveFilename(Esave_root);
00670   // ---  
00671 
00672 }
00673 
00674 //_______________________________
00675 TString TFndPreanGUI::BrowseCurDir(){
00676 
00677   TString sel_name = "";
00678 
00679   Printf("...Browsing for histograms...");
00680  
00681   static TString dir(".");
00682   TGFileInfo fi;
00683   new TGFileDialog(gClient->GetDefaultRoot(), fMainFrame,
00684                    kFDOpen,&fi);
00685   dir = fi.fIniDir;
00686   TObjString *el;
00687   TIter next(fi.fFileNamesList);
00688   while ((el = (TObjString *) next())) {
00689     new TFile(el->GetString(), "update");
00690   }
00691   sel_name = fi.fFilename;
00692 
00693   if( sel_name.IsNull() ){ return 0; }
00694 
00695   Printf("...Selected file is \"%s\"",sel_name.Data());
00696   return sel_name;
00697 
00698 }
00699 
00700 //_______________________________
00701 void TFndPreanGUI::LoadHistos(){
00702 
00703   TString nam = BrowseCurDir();
00704   
00705   if( nam.IsNull() ){
00706     Info("LoadHistos","Load operation cancelled");
00707     return;
00708   }
00709   
00710   Printf("...Loading histograms from file \"%s\"",nam.Data());
00711   PreanHistosRef->LoadHistosFromFile(nam);
00712   Printf("...histograms loadedfrom file \"%s\"",nam.Data());
00713 
00714   // ---  
00715   
00716 }
00717 
00718 //_______________________________
00719 void TFndPreanGUI::StartGUI_SaveFilename(E_savemode mode){
00720 
00721   
00722   fStrSaveFilename.Form("Prean_%s_%s_%u_%u%s",
00723                         FidaVer_Name( (E_FndFidaVersion)(fFidaVer_Combo->GetSelected()) ).Data(),
00724                         RunType_Name(fSteer_Combo->GetSelected()).Data(),
00725                         (UInt_t)(fSteer_Num1->GetNumber()),
00726                         (UInt_t)(fSteer_Num2->GetNumber()),
00727                         GetExtFromMode(mode).Data()
00728                         );
00729 
00730   // ---
00731   
00732   fTrsnFrm_SaveName = new TGTransientFrame(gClient->GetRoot(), fMainFrame, 400, 200);
00733   fTrsnFrm_SaveName->SetCleanup(kDeepCleanup);
00734   // ---
00735   Gui::MoveResizeSafe(10,90,385,120, fTrsnFrm_SaveName);
00736   
00737   fSaveFnam_Trsn_Lbl = new TGLabel(fTrsnFrm_SaveName,"set filename (with ext)",
00738                                    fFontGC_LabNorm->GetGC(),
00739                                    fFont_LabEnl->GetFontStruct(),
00740                                    kSunkenFrame | kDoubleBorder | kOwnBackground);
00741   
00742   fSaveFnam_Trsn_Lbl->SetTextJustify(36);
00743   fSaveFnam_Trsn_Lbl->SetTextFont("-adobe-helvetica-medium-r-*-*-16-*-*-*-*-*-iso8859-1");
00744   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_Lbl, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00745   Gui::MoveResizeSafe(10,10,135,25, fSaveFnam_Trsn_Lbl);
00746   
00747   fSaveFnam_Trsn_Txt = new TGTextEntry(fTrsnFrm_SaveName, new TGTextBuffer(15),-1);
00748   //  fSaveFnam_Trsn_Txt = new TGTextEntry(fTrsnFrm_SaveName, new TGTextBuffer(15),-1,
00749   //                         fFontGC_LabNorm->GetGC(),
00750   //                         fFont_LabEnl->GetFontStruct(),
00751   //                         kSunkenFrame | kDoubleBorder | kOwnBackground);
00752   
00753   fSaveFnam_Trsn_Txt->SetMaxLength(255);
00754   fSaveFnam_Trsn_Txt->SetAlignment(kTextLeft);
00755   fSaveFnam_Trsn_Txt->SetText(fStrSaveFilename);
00756   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_Txt, new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5));
00757   Gui::MoveResizeSafe(155,10,240,25,fSaveFnam_Trsn_Txt);
00758   
00759   fSaveFnam_Trsn_ButOk = new TGTextButton(fTrsnFrm_SaveName,"OK");
00760   fSaveFnam_Trsn_ButOk->SetTextJustify(36);
00761   fSaveFnam_Trsn_ButOk->SetFont(fFont_But->GetName());
00762   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_ButOk, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00763   Gui::MoveResizeSafe(30,50,70,30, fSaveFnam_Trsn_ButOk);
00764   
00765   fSaveFnam_Trsn_ButCancel = new TGTextButton(fTrsnFrm_SaveName,"CANCEL");
00766   fSaveFnam_Trsn_ButCancel->SetTextJustify(36);
00767   fSaveFnam_Trsn_ButCancel->SetFont(fFont_But->GetName());
00768   fTrsnFrm_SaveName->AddFrame(fSaveFnam_Trsn_ButCancel, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
00769   Gui::MoveResizeSafe(300,50,70,30, fSaveFnam_Trsn_ButCancel);
00770   // ---
00771   fTrsnFrm_SaveName->MapSubwindows();
00772   //  fTrsnFrm_SaveName->Resize();
00773   
00774   fTrsnFrm_SaveName->CenterOnParent(); // position relative to the parent's window
00775   fTrsnFrm_SaveName->SetWindowName("Filename window");
00776   fTrsnFrm_SaveName->MapWindow();
00777   //
00778 
00779   switch(mode){
00780   case Esave_pdf:
00781     fSaveFnam_Trsn_ButOk->Connect("Clicked()", "TFndPreanGUI", this, "Do_SaveDisplay()");
00782     break;
00783   case Esave_root:
00784     fSaveFnam_Trsn_ButOk->Connect("Clicked()", "TFndPreanGUI", this, "Do_SaveHistos()");
00785     break;
00786     
00787   }
00788   
00789   fSaveFnam_Trsn_ButCancel->Connect("Clicked()", "TFndPreanGUI", this, "CloseGUI_SaveFilename()");
00790   fMainFrame->Connect("CloseWindow()", "TGTransientFrame", fTrsnFrm_SaveName, "CloseWindow()");
00791   fTrsnFrm_SaveName->DontCallClose(); // to avoid double deletions.
00792   
00793 }
00794 
00795 //_______________________________
00796 void TFndPreanGUI::CloseGUI_SaveFilename(){
00797 
00798   fTrsnFrm_SaveName->CloseWindow();
00799   if(fDebugLev > 0) Printf("Save window closed");
00800 }
00801 
00802 //_______________________________
00803 void TFndPreanGUI::Do_SaveDisplay(){
00804   
00805   Bool_t MustOverwrite = (Bool_t) (fChkBox_Overwrite->GetState() );
00806   
00807   if(! Do_CheckCanWriteFile() ) return;
00808   //   if(!MustOverwrite && !gSystem->AccessPathName(fStrSaveFilename)){
00809   //     TString msg;
00810   //     msg.Form("file \"%s\" already existing: can not save (if you want to overwrite it check the dedicated box).",fStrSaveFilename.Data());
00811   //     WriteStatusMessage(msg);
00812   //     return;
00813   //   }
00814   
00815   fStrSaveFilename = fSaveFnam_Trsn_Txt->GetText();
00816 
00817   SetBackgroundColor( (Int_t)E_PreanBckCol_save );
00818   // ---
00819 
00820   TString msg;
00821   TString canv_tit;
00822   canv_tit.Form("Preanalysis (%s) \"%s\" from %u  to %u",
00823                 FidaVer_Name( (E_FndFidaVersion)(fFidaVer_Combo->GetSelected()) ).Data(),
00824                 RunType_Name(fSteer_Combo->GetSelected()).Data(),
00825                 (UInt_t)(fSteer_Num1->GetNumber()),
00826                 (UInt_t)(fSteer_Num2->GetNumber())
00827                 );
00828   
00829   Gui::SaveCanvasWithTitle(fShowCanvas,canv_tit,fStrSaveFilename,fTh1DrawOpt,"",0);
00830   //    fShowCanvas->SaveAs(fStrSaveFilename);
00831   msg.Form("file \"%s\" created in current directory.",fStrSaveFilename.Data());
00832   WriteStatusMessage(msg);
00833 
00834   // ---
00835   SetBackgroundColor( (Int_t)E_PreanBckCol_default );
00836 
00837   CloseGUI_SaveFilename();
00838   
00839 }
00840 
00841 //_______________________________
00842 void TFndPreanGUI::Do_SaveHistos(){
00843   
00844   Bool_t MustOverwrite = (Bool_t) (fChkBox_Overwrite->GetState() );
00845   Printf("Saving histograms to root-file... (overwrite flag: %d)",MustOverwrite);
00846 
00847   if(! Do_CheckCanWriteFile() ){
00848     CloseGUI_SaveFilename();
00849     return;
00850   }
00851 
00852   fStrSaveFilename = fSaveFnam_Trsn_Txt->GetText();
00853   PreanHistosRef->WriteHistosToFile(fStrSaveFilename);
00854   
00855   CloseGUI_SaveFilename();
00856   Printf("histograms saved to root-file...");
00857 }
00858 
00859 //_______________________________
00860 Bool_t TFndPreanGUI::Do_CheckCanWriteFile(){
00861   
00862   Bool_t MustOverwrite = (Bool_t) (fChkBox_Overwrite->GetState() );
00863   
00864   if(!MustOverwrite && !gSystem->AccessPathName(fStrSaveFilename)){
00865     TString msg;
00866     msg.Form("file \"%s\" already existing: can not save (if you want to overwrite it check the dedicated box).",fStrSaveFilename.Data());
00867     WriteStatusMessage(msg);
00868     return kFALSE;
00869   }
00870   
00871   return kTRUE;
00872 }
00873 
00874 //_______________________________
00875 void TFndPreanGUI::DisplayGes(E_SlaveMenuMode mode){
00876   
00877   if(mode < E_SlMenu_Ges_Main || mode > E_SlMenu_Ges_End){
00878     Warning("DisplayGes","mode %d not accepted",(Int_t)mode);
00879     return;
00880   }
00881 
00882    switch(mode){
00883    case E_SlMenu_Ges_Main:
00884      ResetDisplayPad();
00885      fShowCanvas->cd(1);
00886      PreanHistosRef->fH_GesTrigBit->Draw(fTh1DrawOpt);
00887      break;
00888    default:
00889     ResetDisplayPad();
00890     Error("DisplayGes","mode not available");
00891     return;
00892   }
00893   // ---
00894   UpdateDisplayPad();  
00895 
00896   DisplayInfo_Ges(mode);
00897 
00898 }
00899 
00900 //_______________________________
00901 void TFndPreanGUI::DisplayBhabha(E_SlaveMenuMode mode){
00902   
00903   if(mode < E_SlMenu_Bha_Part || mode > E_SlMenu_Bha_End){
00904     Warning("DisplayBhabha","mode %d not accepted",(Int_t)mode);
00905     return;
00906   }
00907 
00908   TH1D *H_ElecMom;
00909   TH1D *H_PositMom;
00910   TH1D *H_Bha_Vert_X;
00911   TH1D *H_Bha_Vert_Y;
00912   TH1D *H_Bha_Vert_Z;
00913 
00914   TH1D *H_ElecTof;
00915   TH1D *H_PositTof;
00916 
00917   switch(mode){
00918   case E_SlMenu_Bha_Part: 
00919     ResetDisplayPad(3,2);
00920     // particle momentum
00921     fShowCanvas->cd(1);
00922     //    PreanHistosRef->fH_BhaMom_2D->Draw("box");
00923     PreanHistosRef->fH_BhaMom_2D->Draw("colz");
00924     
00925  
00926     fShowCanvas->cd(2);
00927     H_ElecMom = PreanHistosRef->fH_BhaMom_2D->ProjectionY("ElecMom");
00928     H_ElecMom->SetTitle("electron momentum (Gev/c)");
00929     H_ElecMom->Draw(fTh1DrawOpt);
00930     
00931     fShowCanvas->cd(3);
00932     H_PositMom = PreanHistosRef->fH_BhaMom_2D->ProjectionX("PositMom");
00933     H_PositMom->SetTitle("positron momentum (Gev/c)");
00934     H_PositMom->Draw(fTh1DrawOpt);
00935     
00936     // invariant mass
00937     fShowCanvas->cd(4);
00938     PreanHistosRef->fH_InvMass_EpluEmin->Draw(fTh1DrawOpt);
00939     
00940     fShowCanvas->cd(5);
00941     PreanHistosRef->fH_InvMass_PIpluPImin->Draw(fTh1DrawOpt);
00942     
00943     // angle between tracks
00944     fShowCanvas->cd(6);
00945     PreanHistosRef->fH_BhaTracksAngle->Draw(fTh1DrawOpt);
00946   
00947     break;
00948   case E_SlMenu_Bha_Int: 
00949     ResetDisplayPad(3,2);
00950     // interaction point position
00951     fShowCanvas->cd(1);
00952     PreanHistosRef->fH_BhaVert_XYZ->Draw();
00953     
00954     fShowCanvas->cd(2);
00955     PreanHistosRef->fH_BhaVert_XY->Draw("cont");
00956     
00957     fShowCanvas->cd(3);
00958     PreanHistosRef->fH_BhaVert_XZ->Draw("cont");
00959     
00960     // single axis position (int. point)
00961     fShowCanvas->cd(4);
00962     H_Bha_Vert_X = PreanHistosRef->fH_BhaVert_XY->ProjectionX("Bhabha_Vertex_X");
00963     H_Bha_Vert_X->SetTitle("Bhabha Vertex X");
00964     H_Bha_Vert_X->Draw(fTh1DrawOpt);
00965     
00966     fShowCanvas->cd(5);
00967     H_Bha_Vert_Y = PreanHistosRef->fH_BhaVert_XY->ProjectionY("Bhabha_Vertex_Y");
00968     H_Bha_Vert_Y->SetTitle("Bhabha Vertex Y");
00969     H_Bha_Vert_Y->Draw(fTh1DrawOpt);
00970     
00971     fShowCanvas->cd(6);
00972     H_Bha_Vert_Z = PreanHistosRef->fH_BhaVert_XZ->ProjectionY("Bhabha_Vertex_Z");
00973     H_Bha_Vert_Z->SetTitle("Bhabha Vertex Z");
00974     H_Bha_Vert_Z->Draw(fTh1DrawOpt);
00975 
00976     break;
00977   case E_SlMenu_Bha_Tof:
00978     ResetDisplayPad(3,2);
00979     
00980     fShowCanvas->cd(1);
00981     PreanHistosRef->fH_BhaParticleTOF_2D->Draw();
00982     
00983     fShowCanvas->cd(2);
00984     H_ElecTof = PreanHistosRef->fH_BhaParticleTOF_2D->ProjectionY("ElectronTOF");
00985     H_ElecTof->SetTitle("e- TOF (ns)");
00986     H_ElecTof->Draw(fTh1DrawOpt);
00987     
00988     fShowCanvas->cd(3);
00989     H_PositTof = PreanHistosRef->fH_BhaParticleTOF_2D->ProjectionX("PositronTOF");
00990     H_PositTof->SetTitle("e+ TOF (ns)");
00991     H_PositTof->Draw(fTh1DrawOpt);
00992     
00993     fShowCanvas->cd(4);
00994     PreanHistosRef->fH_BhaTofi_TimeDiff->Draw(fTh1DrawOpt);
00995     
00996     fShowCanvas->cd(5);
00997     PreanHistosRef->fH_BhaTofi_Time_2D->Draw();
00998 
00999     fShowCanvas->cd(6);
01000     PreanHistosRef->fH_BhaTofo_TimeDiff->Draw(fTh1DrawOpt);
01001     break;
01002   default:
01003     ResetDisplayPad();
01004     Error("DisplayBhabha","mode not available");
01005     return;
01006   }
01007   // ---
01008   UpdateDisplayPad();  
01009 
01010   DisplayInfo_Bhabha(mode);
01011 }
01012 
01013 //_______________________________
01014 void TFndPreanGUI::DisplayHype(E_SlaveMenuMode mode){
01015   
01016   if(mode < E_SlMenu_Hyp_Km_Stop_2D || mode >= E_SlMenu_Hyp_End){
01017     Warning("DisplayHype","mode %d not accepted",(Int_t)mode);
01018     return;
01019   }
01020 
01021   switch(mode){
01022   case E_SlMenu_Hyp_Km_Stop_2D: 
01023     ResetDisplayPad(3,2);
01024 
01025     // negative kaon stopping point
01026     fShowCanvas->cd(1);
01027     PreanHistosRef->fH_HypKmin_stop_XY[TFndPrean::E_Kaon_Stop_Target]->Draw();
01028     
01029     fShowCanvas->cd(2);
01030     PreanHistosRef->fH_HypKmin_stop_XY[TFndPrean::E_Kaon_Stop_Isim]->Draw();
01031     
01032     fShowCanvas->cd(3);
01033     PreanHistosRef->fH_HypKmin_stop_XY[TFndPrean::E_Kaon_Stop_Upilex]->Draw();
01034     PreanHistosRef->fH_HypKmin_stop_XY[TFndPrean::E_Kaon_Stop_Glass]->Draw("same");
01035     
01036     fShowCanvas->cd(4);
01037     PreanHistosRef->fH_HypKmin_stop_XY[TFndPrean::E_Kaon_Stop_Osim]->Draw();
01038     
01039     fShowCanvas->cd(5);
01040     PreanHistosRef->fH_HypKmin_stop_XY[TFndPrean::E_Kaon_Stop_Other]->Draw();
01041     
01042     fShowCanvas->cd(6);
01043     for(Int_t i=(Int_t)TFndPrean::E_Kaon_Stop_Target; i<=(Int_t)TFndPrean::E_Kaon_Stop_Other; i++){
01044       PreanHistosRef->fH_HypKmin_stop_XY[i]->Draw("same");
01045     }
01046     break;
01047   case E_SlMenu_Hyp_Kp_Stop_2D: 
01048     ResetDisplayPad(3,2);
01049     
01050     // positive kaon stopping point
01051     fShowCanvas->cd(1);
01052     PreanHistosRef->fH_HypKplu_stop_XY[TFndPrean::E_Kaon_Stop_Target]->Draw();
01053     
01054     fShowCanvas->cd(2);
01055     PreanHistosRef->fH_HypKplu_stop_XY[TFndPrean::E_Kaon_Stop_Isim]->Draw();
01056     
01057     fShowCanvas->cd(3);
01058     PreanHistosRef->fH_HypKplu_stop_XY[TFndPrean::E_Kaon_Stop_Upilex]->Draw();
01059     PreanHistosRef->fH_HypKplu_stop_XY[TFndPrean::E_Kaon_Stop_Glass]->Draw("same");
01060     
01061     fShowCanvas->cd(4);
01062     PreanHistosRef->fH_HypKplu_stop_XY[TFndPrean::E_Kaon_Stop_Osim]->Draw();
01063     
01064     fShowCanvas->cd(5);
01065     PreanHistosRef->fH_HypKplu_stop_XY[TFndPrean::E_Kaon_Stop_Other]->Draw();
01066     
01067     fShowCanvas->cd(6);
01068     for(Int_t i=(Int_t)TFndPrean::E_Kaon_Stop_Target; i<=(Int_t)TFndPrean::E_Kaon_Stop_Other; i++){
01069       PreanHistosRef->fH_HypKplu_stop_XY[i]->Draw("same");
01070     }
01071     break;
01072   case E_SlMenu_Hyp_K_Stop: 
01073     ResetDisplayPad(3,2);
01074     
01075     // K- stop patterns (targe)
01076     fShowCanvas->cd(1);
01077     PreanHistosRef->fH_Hyp_K_StopTgt_2D->Draw("colz");
01078     
01079     fShowCanvas->cd(2);
01080     PreanHistosRef->fH_Hyp_Kmin_StopTgt->Draw(fTh1DrawOpt);
01081     
01082     fShowCanvas->cd(3);
01083     PreanHistosRef->fH_Hyp_Kplu_StopTgt->Draw(fTh1DrawOpt);
01084     
01085     fShowCanvas->cd(4);
01086     PreanHistosRef->fH_Hyp_K_StopVol_2D->Draw("colz");
01087     
01088     fShowCanvas->cd(5);
01089     PreanHistosRef->fH_Hyp_Kmin_StopVol->Draw(fTh1DrawOpt);
01090     
01091     fShowCanvas->cd(6);
01092     PreanHistosRef->fH_Hyp_Kplu_StopVol->Draw(fTh1DrawOpt);
01093     break;
01094   case E_SlMenu_Hyp_K_Stat: 
01095     ResetDisplayPad(2,2);
01096     fShowCanvas->cd(1);
01097     PreanHistosRef->fH_Hyp_PattRecErr->Draw(fTh1DrawOpt);
01098 
01099     fShowCanvas->cd(2);
01100     PreanHistosRef->fH_Hyp_Kmin_StopCode->Draw(fTh1DrawOpt);
01101     
01102     fShowCanvas->cd(3);
01103     PreanHistosRef->fH_Hyp_Kplu_StopCode->Draw(fTh1DrawOpt);
01104     break;
01105   case E_SlMenu_Hyp_K_PhiPos: 
01106     ResetDisplayPad(3,2);
01107     // interaction point position
01108     // interaction point position
01109     fShowCanvas->cd(1);
01110     PreanHistosRef->fH_Hyp_PhiDecPos_XYZ->Draw();
01111     
01112     fShowCanvas->cd(2);
01113     PreanHistosRef->fH_Hyp_PhiDecPos_XY->Draw("cont");
01114     
01115     fShowCanvas->cd(3);
01116     PreanHistosRef->fH_Hyp_PhiDecPos_XZ->Draw("cont");
01117     
01118     // single axis position (int. point)
01119     fShowCanvas->cd(4);
01120     PreanHistosRef->fH_PhiDecPos_X->Draw(fTh1DrawOpt);
01121     
01122     fShowCanvas->cd(5);
01123     PreanHistosRef->fH_PhiDecPos_Y->Draw(fTh1DrawOpt);
01124     
01125     fShowCanvas->cd(6);
01126     PreanHistosRef->fH_PhiDecPos_Z->Draw(fTh1DrawOpt);
01127     break;
01128   case E_SlMenu_Hyp_K_KpluPosTrk_All: 
01129     ResetDisplayPad(2,1);
01130     
01131     fShowCanvas->cd(1);
01132     PreanHistosRef->fH_HypTrk_KpluPosAll->Draw(fTh1DrawOpt);
01133     
01134     fShowCanvas->cd(2);
01135     PreanHistosRef->fH_HypTrk_KpluPosPthAll->Draw(fTh1DrawOpt);
01136     
01137     break;
01138   case E_SlMenu_Hyp_K_KpluPosTrk_Tgt: 
01139     ResetDisplayPad(4,2);
01140     for(Int_t i=0;i<8;i++){
01141       fShowCanvas->cd(i+1);
01142       PreanHistosRef->fH_HypTrk_KpluPosTgt[i]->Draw(fTh1DrawOpt);
01143     }
01144     break;
01145   case E_SlMenu_Hyp_K_KpluPosTrk_Pth: 
01146     ResetDisplayPad(4,2);
01147     for(Int_t i=0;i<8;i++){
01148       fShowCanvas->cd(i+1);
01149       PreanHistosRef->fH_HypTrk_KpluPosPth[i]->Draw(fTh1DrawOpt);
01150     }
01151     break;
01152   case E_SlMenu_Hyp_K_KpluPosTrk_Tof: 
01153     ResetDisplayPad(2,2);
01154     fShowCanvas->cd(1);
01155     PreanHistosRef->fH_Hyp_KTofi_TimeDiff->Draw(fTh1DrawOpt);
01156     fShowCanvas->cd(2);
01157     PreanHistosRef->fH_Hyp_MuTof->Draw(fTh1DrawOpt);
01158     fShowCanvas->cd(3);
01159     PreanHistosRef->fH_Hyp_KTofi_Time_2D->Draw(fTh1DrawOpt);
01160     fShowCanvas->cd(4);
01161     PreanHistosRef->fH_Hyp_MuTofCorr->Draw(fTh1DrawOpt);
01162     break;
01163   default:
01164     ResetDisplayPad();
01165     Error("DisplayHype","mode not available");
01166     return;
01167   }
01168   // ---
01169   UpdateDisplayPad();
01170 
01171   DisplayInfo_Hype(mode);
01172 
01173 }
01174 
01175 //_______________________________
01176 void TFndPreanGUI::DrawFndGraph(Int_t pad_id,Option_t *opt,TFndGraph *graph1,TFndGraph *graph2,TFndGraph *graph3,TFndGraph *graph4){
01177   // default displaying pad "pad_id"
01178   //   ( pad_id = 1,2,3,4,... )
01179   // NOTE: four graphs can be superimposed
01180   
01181   if(pad_id < 0){
01182     Error("DrawFndGraph","BUG detected: wrong pad_id (%d) in private method",pad_id);
01183     TerminateFroot();
01184     return;
01185   }
01186   
01187   if(! graph1 || graph1->GetN() < 2){
01188     Info("DrawFndGraph","graph1 is empty (less than 2 points).");
01189     return;
01190   }
01191   
01192   Int_t gr_id = (pad_id == 0) ? pad_id : pad_id -1 ;
01193   if( pad_id ==0 )fShowCanvas->cd();
01194   else fShowCanvas->cd(pad_id);
01195   
01196   fFndMultiGraph[gr_id]->AddFndGraph( graph1 ,opt);
01197   if(graph2 && graph2->GetN() > 2) fFndMultiGraph[gr_id]->AddFndGraph( graph2 ,opt);
01198   if(graph3 && graph3->GetN() > 2) fFndMultiGraph[gr_id]->AddFndGraph( graph3 ,opt);
01199   if(graph4 && graph4->GetN() > 2) fFndMultiGraph[gr_id]->AddFndGraph( graph4 ,opt);
01200   fFndMultiGraph[gr_id]->DrawDefaults();
01201 }
01202 
01203 //_______________________________
01204 void TFndPreanGUI::DisplayStat(E_SlaveMenuMode mode){
01205   
01206   if(mode < E_SlMenu_Stat_Events || mode >= E_SlMenu_Stat_End){
01207     Warning("DisplayStat","mode %d not accepted",(Int_t)mode);
01208     return;
01209   }
01210 
01211   switch(mode){
01212   case E_SlMenu_Stat_Events:
01213     ResetDisplayPad();
01214     PreanHistosRef->fGR_Stat_Evs->SetMinDrawY(0);
01215     PreanHistosRef->fGR_Stat_Evs->SetMaxDrawY(30000);
01216     DrawFndGraph(0,"PB", PreanHistosRef->fGR_Stat_Evs );
01217     break;
01218   case E_SlMenu_Stat_Lumin:
01219     ResetDisplayPad();
01220     PreanHistosRef->fGR_Stat_AvgLum[TFndPrean::E_Scal_Inhib_No] ->SetMinDrawY(0);
01221     PreanHistosRef->fGR_Stat_AvgLum[TFndPrean::E_Scal_Inhib_Inj]->SetMinDrawY(0);
01222     PreanHistosRef->fGR_Stat_AvgLum[TFndPrean::E_Scal_Inhib_All]->SetMinDrawY(0);
01223     //
01224     DrawFndGraph(0,"PB",
01225                  PreanHistosRef->fGR_Stat_AvgLum[TFndPrean::E_Scal_Inhib_No] ,
01226                  PreanHistosRef->fGR_Stat_AvgLum[TFndPrean::E_Scal_Inhib_Inj],
01227                  PreanHistosRef->fGR_Stat_AvgLum[TFndPrean::E_Scal_Inhib_All]
01228                  );
01229     break;
01230   case E_SlMenu_Stat_LuminInt_NoInh:
01231     ResetDisplayPad(1,2);
01232     PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_No]->SetMinDrawY(0);
01233     //
01234     DrawFndGraph(1,"PB", 
01235                  PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_No] );
01236     DrawFndGraph(2,"PBC", 
01237                  PreanHistosRef->fGR_Stat_IntLum_Tot[TFndPrean::E_Scal_Inhib_No] );
01238     break;
01239   case E_SlMenu_Stat_LuminInt_InjInh:
01240     ResetDisplayPad(1,2);
01241     PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_Inj]->SetMinDrawY(0);
01242     //
01243     DrawFndGraph(1,"PB", 
01244                  PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_Inj] );
01245     DrawFndGraph(2,"PBC", 
01246                  PreanHistosRef->fGR_Stat_IntLum_Tot[TFndPrean::E_Scal_Inhib_Inj] );
01247     break;
01248   case E_SlMenu_Stat_LuminInt_AllInh:
01249     ResetDisplayPad(1,2);
01250     PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_All]->SetMinDrawY(0);
01251     //
01252     DrawFndGraph(1,"PB", 
01253                  PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_All] );
01254     DrawFndGraph(2,"PBC", 
01255                  PreanHistosRef->fGR_Stat_IntLum_Tot[TFndPrean::E_Scal_Inhib_All] );
01256     break;
01257   case E_SlMenu_Stat_BhaCount:
01258     ResetDisplayPad();
01259     PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_No] ->SetMinDrawY(0);
01260     PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_Inj]->SetMinDrawY(0);
01261     PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_All]->SetMinDrawY(0);
01262     //
01263     DrawFndGraph(0,"PB",
01264                  PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_No] ,
01265                  PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_Inj],
01266                  PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_All]
01267                  );
01268     break;
01269   case E_SlMenu_Stat_HypCount:
01270     ResetDisplayPad();
01271     PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_No] ->SetMinDrawY(0);
01272     PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_Inj]->SetMinDrawY(0);
01273     PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_All]->SetMinDrawY(0);
01274     //
01275     DrawFndGraph(0,"PB",
01276                  PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_No] ,
01277                  PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_Inj],
01278                  PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_All]
01279                  );
01280     break;
01281   case E_SlMenu_Stat_KaonsStop:
01282     ResetDisplayPad(1,2);
01283     //     PreanHistosRef->fGR_Stat_KminStop_Num->SetMinDrawY(0);
01284     //     PreanHistosRef->fGR_Stat_KpluStop_Num->SetMinDrawY(0);
01285     //
01286     DrawFndGraph(1,"PCF",
01287                  PreanHistosRef->fGR_Stat_KminStop_Num );
01288     //
01289     DrawFndGraph(2,"PCF",
01290                  PreanHistosRef->fGR_Stat_KpluStop_Num );
01291     break;
01292   case E_SlMenu_Stat_MuPluAll:
01293     ResetDisplayPad(1,2);
01294     PreanHistosRef->fGR_Stat_MuPluAll_Num->SetMinDrawY(0);
01295     //
01296     PreanHistosRef->fGR_Stat_MuPluAll_Mom->SetMinDrawY(0.22);
01297     PreanHistosRef->fGR_Stat_MuPluAll_Mom->SetMaxDrawY(0.25);
01298     //
01299     DrawFndGraph(1,"PCF",
01300                  PreanHistosRef->fGR_Stat_MuPluAll_Num );
01301     //
01302     DrawFndGraph(2,"PCF",
01303                  PreanHistosRef->fGR_Stat_MuPluAll_Mom );
01304     break;
01305   case E_SlMenu_Stat_BhaECM:
01306     ResetDisplayPad(1,2);
01307     PreanHistosRef->fGR_Stat_BhaRec_Num->SetMinDrawY(0);
01308     //
01309     PreanHistosRef->fGR_Stat_BhaRec_ECMee->SetMinDrawY(0.9);
01310     PreanHistosRef->fGR_Stat_BhaRec_ECMee->SetMaxDrawY(1.1);
01311     //
01312     DrawFndGraph(1,"PCF",
01313                  PreanHistosRef->fGR_Stat_BhaRec_Num );
01314     //
01315     DrawFndGraph(2,"PCF",
01316                  PreanHistosRef->fGR_Stat_BhaRec_ECMee );
01317     break;
01318   case E_SlMenu_Stat_BhaKshort:
01319     ResetDisplayPad(1,2);
01320     PreanHistosRef->fGR_Stat_BhaRec_Kshort_Num->SetMinDrawY(0);
01321     //
01322     PreanHistosRef->fGR_Stat_BhaRec_Kshort_InvMass->SetMinDrawY(0.45);
01323     PreanHistosRef->fGR_Stat_BhaRec_Kshort_InvMass->SetMaxDrawY(0.53);
01324     //
01325     DrawFndGraph(1,"PCF",
01326                  PreanHistosRef->fGR_Stat_BhaRec_Kshort_Num );
01327     //
01328     DrawFndGraph(2,"PCF",
01329                  PreanHistosRef->fGR_Stat_BhaRec_Kshort_InvMass );
01330     break;
01331   case E_SlMenu_Stat_BhaRatio:
01332     ResetDisplayPad();
01333     PreanHistosRef->fGR_Stat_BhaRec_Ratio->SetMinDrawY(0);
01334     //
01335     DrawFndGraph(0,"PCF",
01336                  PreanHistosRef->fGR_Stat_BhaRec_Ratio );
01337     break;
01338   default:
01339     ResetDisplayPad();
01340     Error("DisplayStat","mode not available");
01341     return;
01342   }
01343   // ---
01344   UpdateDisplayPad();
01345 
01346   DisplayInfo_Stat(mode);
01347   
01348 }
01349 
01351 
01352 //____________________________________
01353 void TFndPreanGUI::DisplayInfo_Ges(E_SlaveMenuMode mode){
01354   // Type of trigger code   (1): Hypernuclear trigger
01355   //                        (2): Bhabha Trigger
01356   //                        (3): Cosmic ray trigger
01357   //                       (11): Both HYP and BHA bits on
01358   //                             Priority to HYP trigger
01359   //                       (21): Single track (only MC)
01360 
01361   if(fDebugLev > 0) Info("DisplayInfo_Ges","Displaying information");
01362   ResetTextMessage();
01363   TString info_msg = "";
01364 
01365   TString nam[5] = {
01366     "HYPE.... :",
01367     "BHA..... :",
01368     "COSM.... :",
01369     "HYPE+BHA :",
01370     "SING-TRK :"
01371   };
01372 
01373   Float_t entries = (Float_t) (PreanHistosRef->fH_GesTrigBit->GetEntries() );
01374   Float_t en[5] = {0};
01375 
01376   en[0] = (Float_t) (PreanHistosRef->fH_GesTrigBit->GetBinContent(2) );
01377   en[1] = (Float_t) (PreanHistosRef->fH_GesTrigBit->GetBinContent(3) );
01378   en[2] = (Float_t) (PreanHistosRef->fH_GesTrigBit->GetBinContent(4) );
01379   en[3] = (Float_t) (PreanHistosRef->fH_GesTrigBit->GetBinContent(12) );
01380   en[4] = (Float_t) (PreanHistosRef->fH_GesTrigBit->GetBinContent(22) );
01381 
01382   switch(mode){
01383   case E_SlMenu_Ges_Main:  
01384     info_msg.Form("# events: %.0f",entries);
01385     AddTextMessage(info_msg,kTRUE);
01386     for(Int_t i=0;i<4;i++){
01387       info_msg.Form("# %s %.0f",nam[i].Data(),en[i]);
01388       AddTextMessage(info_msg,kFALSE);
01389     }
01390     return;
01391   default: return;
01392   }
01393 
01394 }
01395 
01396 //____________________________________
01397 void TFndPreanGUI::DisplayInfo_Bhabha(E_SlaveMenuMode mode){
01398   
01399   if(fDebugLev > 0) Info("DisplayInfo_Bhabha","Displaying information");
01400   ResetTextMessage();
01401   TString info_msg = "";
01402   
01403   Double_t entries_p = 0;
01404   Double_t entries_e = 0;
01405   Float_t ratio   = 0;
01406   switch(mode){
01407   case E_SlMenu_Bha_Part:  
01408     entries_p = PreanHistosRef->fH_InvMass_PIpluPImin->Integral();
01409     entries_e = PreanHistosRef->fH_InvMass_EpluEmin->Integral();
01410     //    Printf("chk: %f ; %f",entries_p,entries_e);
01411     ratio = ( (Float_t)(entries_p) ) / ( (Float_t)(entries_e) );
01412     info_msg.Form("#Inv(pi)/(e): %.3f",ratio);
01413     AddTextMessage(info_msg,kTRUE);
01414     return;
01415   case E_SlMenu_Bha_Int: return;
01416   case E_SlMenu_Bha_Tof: return;
01417   case E_SlMenu_Bha_End: return;
01418   default: return;
01419   }
01420 
01421 }
01422 
01423 //____________________________________
01424 void TFndPreanGUI::DisplayInfo_Hype(E_SlaveMenuMode mode){
01425   
01426   if(fDebugLev > 0) Info("DisplayInfo_Hype","Displaying information");  
01427   ResetTextMessage();
01428 
01429   TString info_msg = "";
01430   
01431   switch(mode){
01432   case E_SlMenu_Hyp_Km_Stop_2D:
01433     break;
01434     //
01435   case E_SlMenu_Hyp_Kp_Stop_2D:
01436         break;
01437     // 
01438   case E_SlMenu_Hyp_K_Stop:
01439 
01440     info_msg.Form("Tot # K- stop: %i",PreanHistosRef->fEval_NumOfStoppedKmin_All);
01441     AddTextMessage(info_msg,kTRUE);
01442     
01443     for(Int_t i=0; i<8; i++){
01444       info_msg.Form("Tgt %i K- stop: %i",i+1,PreanHistosRef->fEval_NumOfStoppedKmin[i]);
01445       AddTextMessage(info_msg,kFALSE);
01446     }
01447     // ---
01448     info_msg.Form("\n --- --- ---\n");
01449     AddTextMessage(info_msg,kFALSE);
01450     // ---
01451     info_msg.Form("Tot # K+ stop: %i",PreanHistosRef->fEval_NumOfStoppedKplu_All);
01452     AddTextMessage(info_msg,kFALSE);
01453     
01454     for(Int_t i=0; i<8; i++){
01455       info_msg.Form("Tgt %i K+ stop: %i",i+1,PreanHistosRef->fEval_NumOfStoppedKplu[i]);
01456       AddTextMessage(info_msg,kFALSE);
01457     }
01458     
01459     break;
01460     // 
01461   case E_SlMenu_Hyp_K_Stat:
01462     break;
01463     // 
01464   case E_SlMenu_Hyp_K_PhiPos:
01465     break;
01466     // 
01467   case E_SlMenu_Hyp_K_KpluPosTrk_All:
01468     break;
01469     // 
01470   case E_SlMenu_Hyp_K_KpluPosTrk_Tgt:
01471     break;
01472     // 
01473   case E_SlMenu_Hyp_K_KpluPosTrk_Pth:
01474     break;
01475     //
01476   case E_SlMenu_Hyp_K_KpluPosTrk_Tof:
01477     break;
01478     //
01479   default: return;
01480   }
01481   
01482   return;
01483 }
01484 
01485 //____________________________________
01486 void TFndPreanGUI::DisplayInfo_Stat(E_SlaveMenuMode mode){
01487   
01488   if(fDebugLev > 0) Info("DisplayInfo_Stat","Displaying information");
01489   ResetTextMessage();
01490   
01491   Float_t tmpscalvar[30]= {0};
01492 
01493 
01494   TString info_msg = "";
01495   switch(mode){
01496   case E_SlMenu_Stat_Events:
01497     info_msg.Form("Avg. # ev/run: %.2f",PreanHistosRef->fGR_Stat_Evs->GetMean(2));
01498     AddTextMessage(info_msg,kTRUE);
01499     //    info_msg.Form("Tot. # ev/run: %d",PreanHistosRef->fCount_EventTotal);
01500     info_msg.Form("Tot. # ev/run: %.2f",PreanHistosRef->fGR_Stat_Evs->GetSum());
01501     AddTextMessage(info_msg,kFALSE);
01502     break;
01503   case E_SlMenu_Stat_Lumin:
01504     for(Int_t i=(Int_t)(TFndPrean::E_Scal_Inhib_No); i<(Int_t)TFndPrean::E_Scal_Inhib_End;i++ ){
01505       tmpscalvar[i] = (Float_t) ( (PreanHistosRef->fGR_Stat_AvgLum[i])->GetMean(2) );
01506     }
01507     AddTextMessage("Avg. Lum (e+32 cm-2 s-1)");
01508     info_msg.Form("no  inh.: %.2f ",tmpscalvar[TFndPrean::E_Scal_Inhib_No]);
01509     AddTextMessage(info_msg,kFALSE);
01510     info_msg.Form("inj inh.: %.2f ",tmpscalvar[TFndPrean::E_Scal_Inhib_Inj]);
01511     AddTextMessage(info_msg,kFALSE);
01512     info_msg.Form("all inh.: %.2f ",tmpscalvar[TFndPrean::E_Scal_Inhib_All]);
01513     AddTextMessage(info_msg,kFALSE);
01514     break;
01515   case E_SlMenu_Stat_LuminInt_NoInh:
01516     tmpscalvar[0] = (Float_t) ( (PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_No])->GetMean(2) );
01517     tmpscalvar[1] = (Float_t) ( (PreanHistosRef->fGR_Stat_IntLum_Tot[TFndPrean::E_Scal_Inhib_No])->GetMaxY() );
01518    
01519     AddTextMessage("Avg. Lum/run (inv. nb)");
01520     info_msg.Form("(no  inh.): %.2f \n",tmpscalvar[0]);
01521     AddTextMessage(info_msg,kFALSE);
01522 
01523     if(tmpscalvar[1] < 1000){
01524       AddTextMessage("Tot. Lum (inv. nb)");
01525       info_msg.Form("(no  inh.): %.2f ",tmpscalvar[1]);
01526     }
01527     else{
01528       AddTextMessage("Tot. Lum (inv. pb)");
01529       info_msg.Form("(no  inh.): %.2f ",tmpscalvar[1] / 1000);      
01530     }
01531     AddTextMessage(info_msg,kFALSE);
01532 
01533     break;
01534   case E_SlMenu_Stat_LuminInt_InjInh:
01535     tmpscalvar[0] = (Float_t) ( (PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_Inj])->GetMean(2) );
01536     tmpscalvar[1] = (Float_t) ( (PreanHistosRef->fGR_Stat_IntLum_Tot[TFndPrean::E_Scal_Inhib_Inj])->GetMaxY() );
01537    
01538     AddTextMessage("Avg. Lum/run (inv. nb)");
01539     info_msg.Form("(inj inh.): %.2f \n",tmpscalvar[0]);
01540     AddTextMessage(info_msg,kFALSE);
01541 
01542     if(tmpscalvar[1] < 1000){
01543       AddTextMessage("Tot. Lum (inv. nb)");
01544       info_msg.Form("(inj. inh.): %.2f ",tmpscalvar[1]);
01545     }
01546     else{
01547       AddTextMessage("Tot. Lum (inv. pb)");
01548       info_msg.Form("(inj. inh.): %.2f ",tmpscalvar[1] / 1000);      
01549     }
01550     AddTextMessage(info_msg,kFALSE);
01551     break;
01552   case E_SlMenu_Stat_LuminInt_AllInh:
01553     tmpscalvar[0] = (Float_t) ( (PreanHistosRef->fGR_Stat_IntLum[TFndPrean::E_Scal_Inhib_All])->GetMean(2) );
01554     tmpscalvar[1] = (Float_t) ( (PreanHistosRef->fGR_Stat_IntLum_Tot[TFndPrean::E_Scal_Inhib_All])->GetMaxY() );
01555    
01556     AddTextMessage("Avg. Lum/run (inv. nb)");
01557     info_msg.Form("(all inh.): %.2f \n",tmpscalvar[0]);
01558     AddTextMessage(info_msg,kFALSE);
01559 
01560     if(tmpscalvar[1] < 1000){
01561       AddTextMessage("Tot. Lum (inv. nb)");
01562       info_msg.Form("(all inh.): %.2f ",tmpscalvar[1]);
01563     }
01564     else{
01565       AddTextMessage("Tot. Lum (inv. pb)");
01566       info_msg.Form("(all inh.): %.2f ",tmpscalvar[1] / 1000);      
01567     }
01568     AddTextMessage(info_msg,kFALSE);
01569     break;
01570   case E_SlMenu_Stat_BhaCount:
01571     //     PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_No]->Draw("hist");
01572     //     PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_Inj]->Draw("samehist");
01573     //     PreanHistosRef->fGR_Stat_BhaNum[TFndPrean::E_Scal_Inhib_All]->Draw("samehist");
01574     break;
01575   case E_SlMenu_Stat_HypCount:
01576     //     PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_No]->Draw("hist");
01577     //     PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_Inj]->Draw("samehist");
01578     //     PreanHistosRef->fGR_Stat_HypNum[TFndPrean::E_Scal_Inhib_All]->Draw("samehist");
01579     break;
01580   case E_SlMenu_Stat_KaonsStop:
01581     // ---
01582     break;
01583   case E_SlMenu_Stat_MuPluAll:
01584     // ---
01585     break;
01586   case E_SlMenu_Stat_BhaECM:
01587     // ---
01588     break;
01589   case E_SlMenu_Stat_BhaKshort:
01590     // ---
01591     break;
01592   case E_SlMenu_Stat_BhaRatio:
01593     // ---
01594     break;
01595   default:
01596     ResetDisplayPad();
01597     Error("DisplayStat","mode not available");
01598     return;
01599   }
01600 
01601 
01602 }
01603 
01607 
01608 //____________________________________
01609 void TFndPreanGUI::HandleMouseActionsDaughter(Int_t event, Int_t x, Int_t y, TObject *selected){
01610 
01611   //  cout << "event: " << event << " ===> (" << x << ";" << y << "): " << selected->ClassName() << " -> " << selected->GetName() << endl;
01612   // 51: move
01613   // 53: leave pad
01614   // 52: enter subpad
01615   //
01616   //  1: left  click (press left mouse button)
01617   // 11: left  release (release left mouse button)
01618   // 61: left  double-click (after "1-11-1" combo)
01619   // 21: left  drag (keep left mouse button clicked and move mouse)
01620   //
01621   //  2: right click (press left mouse button)
01622   // 12: right release (release left mouse button)
01623   // 62: right double-click (after "1-11-1" combo)
01624   //
01625   //  3: right click (press left mouse button)
01626   // 13: right release (release left mouse button)
01627   // 63: right double-click (after "1-11-1" combo)
01628 
01629   //  if(event == 11 && !strcmp(selected->ClassName(),"TH1F"))
01630   //  cout << "Clicked on " << selected->ClassName() << " " << selected->GetName() << endl;
01631 
01632   TString msg = "";
01633 
01634   switch(event){
01635     // ------------
01636     // --- move ---
01637   case 51: // move inside the canvas (or sub-pads)
01638     //cout << "Moving on " << selected->ClassName() << " " << selected->GetName() << endl << endl;
01639     break;
01640   case 53: // leave the main pad
01641     break;
01642   case 52: // enter sub-pad
01643     break;
01644     // -------------
01645     // --- click ---
01646   case  1: // left click (before releasing mouse button)
01647     
01648     break;
01649     //
01650   case 11: // left click (after having releasing mouse button)
01651     
01652     break;
01653     //
01654   case 61: // left double-click
01655     cout << "Double-click received on object: \"" << selected->ClassName() 
01656          << "\"; name: \"" << selected->GetName() 
01657          << "\"; title: \"" << selected->GetTitle() << "\"." << endl;
01658 
01659     msg.Form( "Double-click: %s (%s)",selected->GetName(),selected->GetTitle() );
01660 
01661     
01662     if(!strncmp(selected->ClassName(),"TH",2)) EnlargeHisto(selected);
01663     if(!strncmp(selected->ClassName(),"TProfile",8)) EnlargeHisto(selected);
01664     if(!strncmp(selected->ClassName(),"TPave",5)) PrintPaveInfo(selected);
01665     break;
01666     //
01667   default: break;    
01668   }
01669 
01670 
01671   if( ! msg.IsNull() )  WriteStatusMessage(msg,1);
01672 
01673 }
01674 
01675 //____________________________________
01676 void TFndPreanGUI::EnlargeHisto(TObject *selected){
01677   
01678   //  cout << "--------------> sel address: " << selected << endl;
01679   if(!selected){
01680     Warning("EnlargeHisto","selected object is NULL!");
01681     return;
01682   }
01683   //   TString clnam = selected->ClassName();
01684   //   cout << "--------------> sel type   : " << clnam << endl;
01685   //   cout << "--------------> sel name   :" << selected->GetName() << endl;
01686   
01687   ResetDisplayPad();
01688   fShowCanvas->cd();
01689   selected->Draw(fTh1DrawOpt);
01690   
01691   UpdateDisplayPad();  
01692   
01693 }
01694 //____________________________________
01695 void TFndPreanGUI::PrintPaveInfo(TObject *selected){
01696   
01697   const Char_t *clnam = (Char_t *) selected->ClassName();
01698   
01699   Printf("");
01700   Printf(" ----------------------------------------");
01701   Printf(" Selected object general properties:");
01702   Printf("   Object type: \"%s\"",clnam);
01703   
01704   //  if(!strcmp(clnam,"TPaveText")){
01705   
01706   if(!strcmp(clnam,"TPaveText")){
01707     Printf("   Histogram title ====> \"%s\".",((TPaveText *)selected)->GetLine(0)->GetTitle());
01708   }
01709   else if(!strcmp(clnam,"TPaveStats")){
01710     for(Int_t i=0;i<50;i++){
01711       TText *curtxt = (TText*)(((TPaveText *)selected)->GetListOfLines())->At(i);   
01712       if(!curtxt) break;
01713       Printf("   - %s",curtxt->GetTitle());
01714     }
01715   }
01716   if(fDebugLev > 1){
01717     cout << "   Text Align =======> " << ((TPaveText *)selected)->GetTextAlign() << endl;
01718     cout << "   Text Color =======> " << ((TPaveText *)selected)->GetTextColor() << endl;
01719     cout << "   Text Font ========> " << ((TPaveText *)selected)->GetTextFont() << endl;  
01720   }
01721   cout << " ----------------------------------------" << endl;
01722 }

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