SIL/TFndSilMonFrame.cxx

00001 // @(#)fROOT/SIL:$Name:  $:$Id: TFndSilMonFrame.cxx,v 1.21 2007/09/24 07:32:41 Diego_Faso Exp $
00002 // Revision Author: Diego Faso <mailto:faso@to.infn.it>, 2005/06/24
00003 // Original Author: Piergiorgio Cerello <mailto:cerello@to.infn.it>, Diego Faso <mailto:faso@to.infn.it>, 2002
00004 
00006 //                                                //
00007 //               TFndSilMonFrame                  //
00008 //                                                //
00009 //  Class for the SIL monitoring GUI              //
00010 //                                                //
00011 //                                                //
00013 
00014 #include <TROOT.h>
00015 #include <TSystem.h>
00016 #include <TStyle.h>
00017 #include <TLine.h>
00018 #include <TFile.h>
00019 #include <TThread.h>
00020 
00021 #include "TFndSilMonFrame.h"
00022 #include "TFndRun.h" 
00023 
00024 
00025 
00026 ClassImp(TFndSilMonFrame)
00027  
00028 //________________________________________
00029 TFndSilMonFrame::TFndSilMonFrame(TString filename, TString filename2):
00030   TFndMonFrame(filename, filename2),
00031   fLayer(),fModNum(),fSide(),fSideHighlightCol(),
00032   fIsmMapFile(),fOsmMapFile(),
00033   fIsimPad(),fOsimPad(),fAllPadControl(),
00034   fModNumBut(),fAllButton(),
00035   fSideSelPad(),fModAllBut(),fSideBut(),
00036   fHisto(),
00037   fWhichGroup(-1),fAllId(-1)
00038 {
00039 
00040   //  Printf("TFndSilMonFrame::DEBUG!!!!!!!!! \"%s\" --- \"%s\"",filename.Data(),filename2.Data());
00041   Init();
00042 }
00043 
00044 //________________________________________
00045 TFndSilMonFrame::~TFndSilMonFrame() {
00046    
00047   if(!fClosed) Close();
00048 }
00049   
00050 //________________________________________
00051 void TFndSilMonFrame::Init(){
00052 
00053   SetStyle();
00054   fSideHighlightCol = 3;
00055 
00056   // --- set names of all histos
00057   //   fNam_Noise[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides];
00058   //   fNam_Mult[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides];
00059   //   fNam_ClCh[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides];
00060   //   fNam_CMsigma[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides];
00061   //   fNam_CMmean[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides];
00062   //   fNam_CleanMult[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides-1];
00063   //   fNam_ClChClean[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides-1];
00064   //   fNam_dEdx[E_FIN_OUTER_LAYER][K_N_Sil_Modules][K_N_Sil_Sides-1];
00065   //   fNam_dEdx_PvsZ[E_FIN_OUTER_LAYER][K_N_Sil_Modules];
00066   //   fNam_Pos_PvsZ[E_FIN_OUTER_LAYER][K_N_Sil_Modules];
00067   
00068   TString hnam = "";  
00069 
00070   TString CluHNam = "";
00071 
00072   TString det_nam = "";
00073   for(Int_t lay_idx = 0; lay_idx <=1 ; lay_idx++){
00074     det_nam = (lay_idx == 0) ? "Isim" : "Osim"; 
00075     
00076     for(Int_t mod = 0; mod < K_N_Sil_Modules; mod++){
00077       if(lay_idx ==0 && mod > 7) break; // only 8 moduls for ISIM
00078       for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00079         
00080         hnam.Form("%sNoise_%d_%s",det_nam.Data(),mod+1,SilSide_Name(sid).Data());
00081         fNam_Noise[lay_idx][mod][sid] = hnam;
00082         
00083         hnam.Replace(4,5,"Mult");
00084         fNam_Mult[lay_idx][mod][sid] = hnam;
00085         
00086         hnam.Replace(4,4,"ClustCharge");
00087         fNam_ClCh[lay_idx][mod][sid] = hnam;
00088         
00089         hnam.Replace(4,11,"CM_sigma");
00090         fNam_CMsigma[lay_idx][mod][sid] = hnam;
00091         
00092         //      hnam.Replace(4,11,"CM_sigma");
00093         //      fNam_CMsigma[lay_idx][mod][sid] = hnam;
00094         
00095         hnam.Replace(4,8,"CM_mean");
00096         fNam_CMmean[lay_idx][mod][sid] = hnam;
00098         if(sid < 2){
00099           TString sidnam = ( sid == 0 ) ? "PHI" : "Z";
00100 
00101           CluHNam.Form("%s_CleanMult_%d_%s",det_nam.Data(),mod+1,sidnam.Data() );
00102           fNam_CleanMult[lay_idx][mod][sid] = CluHNam;
00103 
00104           CluHNam.Form("%s_ClustChClean_%d_%s",det_nam.Data(),mod+1,sidnam.Data() );
00105           fNam_ClChClean[lay_idx][mod][sid] = CluHNam;
00106 
00107           CluHNam.Form("%s_dEdx_%d_%s",det_nam.Data(),mod+1,sidnam.Data() );
00108           fNam_dEdx[lay_idx][mod][sid] = CluHNam;         
00109         }
00110         
00111         if(sid == 0){
00112           CluHNam.Form("%s_dEdx_PvsZ_%d",det_nam.Data(),mod+1 );
00113           fNam_dEdx_PvsZ[lay_idx][mod] = CluHNam;
00114           
00115           CluHNam.Form("%s_Pos_PvsZ_%d",det_nam.Data(),mod+1 );
00116           fNam_Pos_PvsZ[lay_idx][mod] = CluHNam;
00117         }
00119         
00120       }
00121     }
00122   }
00123   
00124   // Uncomment following lines for debugging purposes only!
00125   /*
00126    for(Int_t lay_idx = 0; lay_idx <=1 ; lay_idx++){    
00127      for(Int_t mod = 0; mod < K_N_Sil_Modules; mod++){
00128        if(lay_idx ==0 && mod > 7) break; // only 8 moduls for ISIM
00129        for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00130          
00131          Printf("====> Noise   : \"%s\"",fNam_Noise[lay_idx][mod][sid].Data()); 
00132          Printf("====> Mult    : \"%s\"",fNam_Mult[lay_idx][mod][sid].Data());  
00133          Printf("====> ClCrg   : \"%s\"",fNam_ClCh[lay_idx][mod][sid].Data());  
00134          Printf("====> CM_sigma: \"%s\"",fNam_CMsigma[lay_idx][mod][sid].Data());       
00135          Printf("====> CM_mean : \"%s\"",fNam_CMmean[lay_idx][mod][sid].Data());        
00136        }
00137      }
00138    }
00139   */
00140 
00141   //  fndrun->SetSilMonFrame(this);
00142   //  StartInterface();
00143 }
00144 
00145 //________________________________________
00146 void TFndSilMonFrame::Open() {
00147 
00148   if(!fClosed) return; 
00149   if(!StartInterface()) return;
00150   fClosed = kFALSE;
00151 }
00152 
00153 //________________________________________
00154 Bool_t TFndSilMonFrame::StartInterface() {
00155   
00156   Int_t BackgroundCol = 12; // was 40
00157   Int_t DisplayPadCol = 15; // was 4
00158 
00159   Float_t sep = 0.001;
00160   Float_t smallsep = 0.0005;
00161 
00162   Float_t Start_X_displaypad = 0.06;
00163   Float_t Stop_X_displaypad  = 1.;
00164   Float_t Start_Y_displaypad = 0.05;
00165   Float_t Stop_Y_displaypad  = 0.95;
00166 
00167   Float_t Sep_IsmOsmPads  = 0.5;
00168   Float_t Sep_SideChipPads  = 0.35;
00169 
00170   // Stop here if no source file was found
00171   if(!fCanStartGUI) return kFALSE;
00172 
00173   fLayer=0;
00174   fSide=1;
00175   fModNum=1;
00176   
00177   ReloadMapFiles();
00178   //   fCanStartGUI = ReloadMapFiles();
00179   //   if(!fCanStartGUI) return;
00180   
00181   if (fRF && fRF2)  cout << "...source files found...starting GUI" << endl;
00182   
00183   fMainCanvas[0] = new TCanvas("Sil_MainCanvas","SIL Main Canvas",
00184                                fMainCanvCoord[0],fMainCanvCoord[1],
00185                                fMainCanvCoord[2],fMainCanvCoord[3]);
00186   SetMonitorTitle(0,"SIL");
00187   fMainCanvas[0]->SetEditable(kFALSE);
00188   //  fMainCanvas[0]->ToggleEventStatus();
00189   fMainCanvas[0]->SetFillColor(BackgroundCol);
00190   fMainCanvas[0]->Draw();
00191   
00192   fDisplayPad[0] = new TPad("SilMonFrameDisplayPad","SIL hist display",
00193                          Start_X_displaypad+sep,Start_Y_displaypad+sep,Stop_X_displaypad,Stop_Y_displaypad-sep);
00194   fDisplayPad[0]->Draw();
00195   fDisplayPad[0]->SetFillColor(DisplayPadCol);
00196   fDisplayPad[0]->SetBorderSize(2);
00197   
00198   // --- allpadcontrol (bottom)
00199   fAllPadControl=new TPad("allpadcontrol","allpadcontol",Start_X_displaypad+sep,0,Stop_X_displaypad,Start_Y_displaypad-sep);
00200   fAllPadControl->Draw();
00201   
00202   fOsimPad=new TPad("ismSelectionpad","ismSelectionpad",0.,0.,Start_X_displaypad-sep,Sep_IsmOsmPads-smallsep);
00203   fOsimPad->SetFillColor(13);
00204   fOsimPad->Draw();
00205   
00206   fIsimPad=new TPad("osmSelectionpad","osmSelectionpad",0.,Sep_IsmOsmPads+smallsep,Start_X_displaypad-sep,Stop_Y_displaypad-sep);
00207   fIsimPad->SetFillColor(13);
00208   fIsimPad->Draw();
00209 
00210   // Control Pads
00211   fMainCanvas[0]->cd();
00212 
00213   fSideSelPad =new TPad("selectside","sd",0.,Stop_Y_displaypad+sep,Sep_SideChipPads-smallsep,1.);
00214   fSideSelPad->Draw();
00215   
00216   DrawButtons();
00217   BuildConnections();
00218 
00219 
00220   return kTRUE;
00221   //  fClosed = kFALSE;
00222 }
00223 
00224 //________________________________________
00225 void TFndSilMonFrame::Close() {
00226   // the consumer should not close shared memories
00227 
00228   
00229   if(!fClosed){
00230     delete fHisto; 
00231     
00232     cout << "...closing and re-initializing to zero all mapfiles..." << endl;    
00233     if(fIsmMapFile) {fIsmMapFile->Close(); fIsmMapFile = 0; }
00234     if(fOsmMapFile) {fOsmMapFile->Close(); fOsmMapFile = 0; }
00235     cout << "...done (Close)" << endl;
00236     
00237     for(Int_t i=0;i<8;i++) { delete fModNumBut[i]; fModNumBut[i] = 0; } // ISIM buttons
00238     for(Int_t i=8;i<18;i++){ delete fModNumBut[i]; fModNumBut[i] = 0; } // OSIM buttons
00239     
00240     for(Int_t i=0;i<8;i++){ delete fAllButton[i]; fAllButton[i] = 0; }
00241 
00242     delete fModAllBut;
00243     for(Int_t i=0;i<4;i++){ delete fSideBut[i]; fSideBut[i] = 0; }
00244     
00245     fIsimPad->Close();       delete fIsimPad;       fIsimPad = 0;
00246     fOsimPad->Close();       delete fOsimPad;       fOsimPad = 0;
00247     fSideSelPad->Close();    delete fSideSelPad;    fSideSelPad = 0;
00248     fAllPadControl->Close(); delete fAllPadControl; fAllPadControl = 0;
00249   }
00250   
00251   fClosed = kTRUE;
00252 }  
00253 
00254 //________________________________________
00255 Bool_t TFndSilMonFrame::ReloadMapFiles(){
00256   
00257   Bool_t result = kTRUE;
00258   if(!fIsOnline) return result;
00259 
00260   if( CheckProducerMessages() != 0 ) return kFALSE; // chech if shared memories are busy (producer message)
00261   TString shr_file_map_name[2] = 0;
00262 
00263 #if defined _FND_ONL_USE_MAP_FILES_
00264   if(fndrun->GetDebug())cout << "...closing and re-initializing to zero all mapfiles..." << endl;    
00265   if(fIsmMapFile) {fIsmMapFile->Close(); fIsmMapFile = 0; }
00266   if(fOsmMapFile) {fOsmMapFile->Close(); fOsmMapFile = 0; }
00267   if(fndrun->GetDebug())cout << "...done" << endl;
00268   //
00269   shr_file_map_name[0] = "$FND_SHR/ism.map";
00270   shr_file_map_name[1] = "$FND_SHR/osm.map";
00271 #elif defined _FND_ONL_USE_SHARED_FILES_
00272   if(fIsmMapFile) { if(fIsmMapFile->IsOpen()) fIsmMapFile->Close(); delete fIsmMapFile; fIsmMapFile = 0; }
00273   if(fOsmMapFile) { if(fOsmMapFile->IsOpen()) fOsmMapFile->Close(); delete fOsmMapFile; fOsmMapFile = 0; }
00274   if(fndrun->GetDebug())cout << "...done" << endl;
00275   //
00276   shr_file_map_name[0] = "$FND_SHR/ism.file.map";
00277   shr_file_map_name[1] = "$FND_SHR/osm.file.map";
00278 #endif
00279 
00280   if(fndrun->GetDebug()) cout << endl << "Reloading shared memories..." << endl;
00281   
00282   if(!gSystem->AccessPathName(FROOT::ExpandPathName(shr_file_map_name[0].Data()))){
00283 #if defined _FND_ONL_USE_MAP_FILES_
00284     fIsmMapFile = TMapFile::Create(FROOT::ExpandPathName(shr_file_map_name[0].Data()),"READ");   
00285     if(fndrun->GetDebug()) fIsmMapFile->Print();
00286 #elif defined _FND_ONL_USE_SHARED_FILES_
00287     fIsmMapFile = new TFile(FROOT::ExpandPathName(shr_file_map_name[0].Data()),"READ");   
00288     Info("TFndSilMonFrame::ReloadMapFiles","Reloading shared file \"%s\"",shr_file_map_name[0].Data());
00289 #endif
00290   }
00291   else result = kFALSE;
00292   
00293   if(!gSystem->AccessPathName(FROOT::ExpandPathName(shr_file_map_name[1].Data()))){
00294 #if defined _FND_ONL_USE_MAP_FILES_
00295     fOsmMapFile = TMapFile::Create(FROOT::ExpandPathName(shr_file_map_name[1].Data()),"READ");   
00296     if(fndrun->GetDebug()) fOsmMapFile->Print();
00297 #elif defined _FND_ONL_USE_SHARED_FILES_
00298     fOsmMapFile = new TFile(FROOT::ExpandPathName(shr_file_map_name[1].Data()),"READ");   
00299     Info("TFndSilMonFrame::ReloadMapFiles","Reloading shared file \"%s\"",shr_file_map_name[1].Data());
00300 #endif
00301   }
00302   else result = kFALSE;
00303 
00304   if(fndrun->GetDebug()) {
00305     if(result) cout << "...done" << endl << endl;
00306     else cout << "SIL - shared memories not found!" << endl << endl;
00307   }
00308   return result;
00309 }
00310 
00311 //________________________________________
00312 void TFndSilMonFrame::DrawButtons() {
00313 
00314   fMainCanvas[0]->cd();
00315 
00316   TString but_label = "";
00317   TString but_cmd = "";
00318   // ISIM  Sidepads
00319   fIsimPad->cd();
00320   for(Int_t j=0;j<8;j++){
00321     but_cmd = TString("fndrun->SilMonFrame()->SelectModule(1,");
00322     but_cmd+=j+1;
00323     but_cmd+="); ";
00324     but_cmd+="fndrun->SilMonFrame()->DisplayModuleDefault();";
00325 
00326     but_label.Form("i_%i",j+1);
00327     //     but_label  = TString("i_");
00328     //     but_label+=j+1;
00329 
00330     fModNumBut[j]=new TButton(but_label.Data(),but_cmd.Data(),0.00,0.125*j,1.0,0.125*(j+1));
00331     fModNumBut[j]->Draw();
00332   }
00333 
00334   // OSIM  Sidepads
00335   fOsimPad->cd();
00336   for(Int_t j=0;j<10;j++){
00337     but_cmd = TString("fndrun->SilMonFrame()->SelectModule(2,");
00338     but_cmd+=j+1;
00339     but_cmd+="); ";
00340     but_cmd+="fndrun->SilMonFrame()->DisplayModuleDefault();";
00341 
00342     but_label.Form("o_%i",j+1);
00343     //     but_label  = TString("o_");
00344     //     but_label+=j+1;
00345     
00346     fModNumBut[8+j]=new TButton(but_label.Data(),but_cmd.Data(),0.00,0.10*j,1.0,0.10*(j+1));
00347     fModNumBut[8+j]->Draw();
00348   }
00349 
00350   // Global  Sidepads
00351   fAllPadControl->cd();
00352   
00353   Float_t step = 1./8.;
00354   Float_t xi = 0.;
00355   Float_t xf = step;
00356   fAllButton[0]=new TButton("ISM mult","fndrun->SilMonFrame()->DisplayAllHist(1,1);",xi,0,xf,1);
00357   fAllButton[0]->Draw(); 
00358   xi = xf;
00359   xf += step;
00360   fAllButton[1]=new TButton("OSM mult","fndrun->SilMonFrame()->DisplayAllHist(2,1);",xi,0,xf,1);
00361   fAllButton[1]->Draw(); 
00362   xi = xf;
00363   xf += step;
00364   fAllButton[2]=new TButton("ISM nois","fndrun->SilMonFrame()->DisplayAllHist(1,0);",xi,0,xf,1); 
00365   fAllButton[2]->Draw();        
00366   xi = xf;
00367   xf += step;
00368   fAllButton[3]=new TButton("OSM nois","fndrun->SilMonFrame()->DisplayAllHist(2,0);",xi,0,xf,1); 
00369   fAllButton[3]->Draw();        
00370   xi = xf;
00371   xf += step;
00372   fAllButton[4]=new TButton("ISM CM_s","fndrun->SilMonFrame()->DisplayAllHist(1,3);",xi,0,xf,1);
00373   fAllButton[4]->Draw();
00374   xi = xf;
00375   xf += step;
00376   fAllButton[5]=new TButton("OSM CM_s","fndrun->SilMonFrame()->DisplayAllHist(2,3);",xi,0,xf,1);
00377   fAllButton[5]->Draw();
00378   xi = xf;
00379   xf += step;
00380   fAllButton[6]=new TButton("ISM clu","fndrun->SilMonFrame()->DisplayAllHist(1,4);",xi,0,xf,1);
00381   fAllButton[6]->Draw();
00382   xi = xf;
00383   xf += step;
00384   fAllButton[7]=new TButton("OSM clu","fndrun->SilMonFrame()->DisplayAllHist(2,4);",xi,0,xf,1);
00385   fAllButton[7]->Draw();
00386 
00387   ResetFrameColors();
00388 }
00389 
00390 //________________________________________
00391 void TFndSilMonFrame::ResetFrameColors(){
00392   
00393   for(Int_t i=0;i<8;i++){
00394     fModNumBut[i]->SetFillColor(50); // ISIM
00395     fModNumBut[i]->Modified();
00396   }
00397 
00398   for(Int_t i=8;i<18;i++){
00399     fModNumBut[i]->SetFillColor(38); // OSIM
00400     fModNumBut[i]->Modified();
00401   }
00402 
00403   for(Int_t i=0;i<8;i++){ 
00404     if(i%2==0) fAllButton[i]->SetFillColor(42); 
00405     else fAllButton[i]->SetFillColor(33); 
00406     fAllButton[i]->Modified();
00407   }
00408 
00409   if(fModAllBut){
00410     fModAllBut->SetFillColor(25);
00411     fModAllBut->Modified();
00412   }
00413   for(Int_t i=0;i<4;i++){
00414     if(fSideBut[i]){
00415       fSideBut[i]->SetFillColor(25);
00416       fSideBut[i]->Modified();
00417     }
00418   }
00419 
00420 }
00421 
00422 //____________________________________________________
00423 TButton *TFndSilMonFrame::HighlightButtons(Int_t which_group,Int_t All_id){
00424   // whichgroup: 
00425   //            0->Module   : Module number
00426   //            1->Mod-Side : Module number, side
00427   //            2->All      : current allbutton only
00428 
00429   fWhichGroup = which_group;
00430   fAllId = All_id;
00431 
00432   Int_t mod_id = ( (fLayer-1) *8 + fModNum)-1;
00433   //  cout << "Highlighting button for module index: " << mod_id << endl;
00434 
00435   switch(which_group){
00436   case 0:
00437     fModNumBut[mod_id]->SetFillColor(fHighlightCol[fLayer]);
00438     fModNumBut[mod_id]->Modified();
00439     return fModNumBut[mod_id];
00440     //break;
00441   case 1:
00442     fModNumBut[mod_id]->SetFillColor(fHighlightCol[fLayer]);
00443     fModNumBut[mod_id]->Modified();
00444     if(fSide == -1){
00445       fModAllBut->SetFillColor(fSideHighlightCol);
00446       fModAllBut->Modified();
00447       return fModAllBut;
00448     }
00449     else{ // all sides
00450       fSideBut[fSide]->SetFillColor(fSideHighlightCol);
00451       fSideBut[fSide]->Modified();
00452       return fSideBut[fSide];
00453     }
00454     //break;
00455   case 2:
00456     fAllButton[All_id]->SetFillColor(fHighlightCol[fLayer]);
00457     fAllButton[All_id]->Modified();
00458     //    fAllPadControl->Modified();
00459     return fAllButton[All_id];
00460     //break;
00461   default: return 0;
00462   }
00463 }
00464 
00465 //___________________________________________
00466 void TFndSilMonFrame::RefreshSingleMonView(){
00467 
00468   if(fWhichGroup ==- 1 || fAllId == - 1) return;
00469   FlashDisplayPad();
00470   HighlightButtons(fWhichGroup,fAllId)->ExecuteEvent(11,0,0);
00471 }
00472 
00473 //________________________________________
00474 void TFndSilMonFrame::ClearSidePad(){
00475 
00476   delete fModAllBut; fModAllBut = 0;
00477   for(Int_t i=0;i<4;i++) { delete fSideBut[i];fSideBut[i] = 0; }
00478 }
00479 
00480 //________________________________________
00481 void TFndSilMonFrame::RebuildSidePad() {
00482 
00483   Bool_t rcheck = kTRUE;
00484   for(Int_t i=0;i<4;i++){
00485     rcheck = rcheck && fModAllBut;
00486     rcheck = rcheck && fSideBut[i];
00487   }
00488   if(rcheck) {
00489     //    cout << "SidePad already built" << endl;
00490     return;
00491   }
00492   //  cout << "rebuilding SidePad" << endl;
00493 
00494   fSideSelPad->cd(); 
00495   fModAllBut=new TButton("All-Sides",
00496                          "fndrun->SilMonFrame()->DisplayHist(1);",
00497                          0. , 0. , .2 , 1. );
00498   fModAllBut->Draw(); 
00499   //
00500   fSideBut[0]=new TButton("Phi",
00501                             "fndrun->SilMonFrame()->SelectSide(0);fndrun->SilMonFrame()->DisplayHist(0);",
00502                             .2 , 0. , .4 , 1. );
00503   fSideBut[0]->Draw();  
00504   // ---
00505   fSideBut[1]=new TButton("ZA",
00506                             "fndrun->SilMonFrame()->SelectSide(1);fndrun->SilMonFrame()->DisplayHist(0);",
00507                             .4 , 0. , .6 , 1. );
00508   fSideBut[1]->Draw();  
00509   // ---
00510   fSideBut[2]=new TButton("ZB",
00511                             "fndrun->SilMonFrame()->SelectSide(2);fndrun->SilMonFrame()->DisplayHist(0);",
00512                             .6 , 0. , .8 , 1. );
00513   fSideBut[2]->Draw(); 
00514   // ---
00515   fSideBut[3]=new TButton("Phi vs Z",
00516                             "fndrun->SilMonFrame()->SelectSide(3);fndrun->SilMonFrame()->DisplayHist(0);",
00517                             .8 , 0. , 1. , 1. );
00518   fSideBut[3]->Draw(); 
00519   // ---
00520   fSideSelPad->Modified();
00521 
00522 }
00523 
00524 //________________________________________
00525 void TFndSilMonFrame::DisplayModuleDefault(){
00526  
00527   //  Printf("Displaying default!!!!!!!!!!!!!!!!!!!!!!!!!!!!1");
00528   SelectSide(3);
00529   DisplayHist(0);
00530 
00531 }
00532 
00533 //________________________________________
00534 void TFndSilMonFrame::DisplayHist(Int_t display_mode){
00535   
00536   if(!ReloadMapFiles()){
00537     fDisplayPad[0]->Clear();
00538     fDisplayPad[0]->Modified();
00539     return;
00540   }
00541   //  cout << "Displaying hist for detector \"" << fLayer << "\" --- module \"" << fModNum << "\"" << endl;
00542   Int_t   EachPadCol1 = 17;
00543   Float_t Margin1     = 0.007;
00544   Int_t   EachPadCol2 = 19;
00545   Float_t Margin2     = 0.002;
00546   
00547   fDisplayPad[0]->Clear();
00548   
00549   if(display_mode == (Int_t)E_SilHist_Displ_SingleSide ){
00550     if(fSide == 3){ // clusters control
00551       fDisplayPad[0]->Divide(1,2,Margin1,Margin1,EachPadCol1);
00552       fDisplayPad[0]->GetPad(1)->Divide(2,2,Margin2,Margin2,EachPadCol2);;
00553       fDisplayPad[0]->GetPad(2)->Divide(2,1,Margin2,Margin2,EachPadCol2);;
00554       
00555       for(Int_t si=0;si<2;si++){
00556         fSide = si;
00557         fDisplayPad[0]->GetPad(1)->cd(1 + si );
00558         DrawHist(E_SilHist_CluDeDx);
00559         
00560         fDisplayPad[0]->GetPad(1)->cd(3 + si );
00561         DrawHist(E_SilHist_CluCleanMult);
00562       }
00563       
00564       fDisplayPad[0]->GetPad(2)->cd(1);
00565       DrawHist(E_SilHist_CluDeDx2D);
00566       
00567       fDisplayPad[0]->GetPad(2)->cd(2);
00568       DrawHist(E_SilHist_CluPos2D);      
00569       
00570       // --- 
00571       fSide = 3;
00572     }
00573     else{ // single side
00574       fDisplayPad[0]->Divide(1,2,Margin1,Margin1,EachPadCol1);
00575       fDisplayPad[0]->GetPad(1)->Divide(1,2,Margin2,Margin2,EachPadCol2);
00576       fDisplayPad[0]->GetPad(2)->Divide(2,1,Margin2,Margin2,EachPadCol2);
00577       fDisplayPad[0]->GetPad(2)->GetPad(1)->Divide(1,2,Margin2,Margin2,EachPadCol2);
00578       
00579       fDisplayPad[0]->GetPad(1)->cd(1);
00580       DrawHist(E_SilHist_Noise);
00581       
00582       fDisplayPad[0]->GetPad(1)->cd(2);
00583       DrawHist(E_SilHist_Mult);
00584       
00585       fDisplayPad[0]->GetPad(2)->GetPad(1)->cd(1);
00586       DrawHist(E_SilHist_CMmean);
00587       
00588       fDisplayPad[0]->GetPad(2)->GetPad(1)->cd(2);
00589       DrawHist(E_SilHist_CMsigma);
00590       
00591       fDisplayPad[0]->GetPad(2)->cd(2);
00592       DrawHist(E_SilHist_CluCrg);
00593     }
00594   }
00595   else if(display_mode == (Int_t)E_SilHist_Displ_AllSides){
00596     fDisplayPad[0]->Divide(3,2,Margin1,Margin1,EachPadCol1);
00597     fDisplayPad[0]->GetPad(1)->Divide(1,2,Margin2,Margin2,EachPadCol2);;
00598     fDisplayPad[0]->GetPad(2)->Divide(1,2,Margin2,Margin2,EachPadCol2);;
00599     fDisplayPad[0]->GetPad(3)->Divide(1,2,Margin2,Margin2,EachPadCol2);;
00600     
00601     fDisplayPad[0]->GetPad(4)->Divide(2,1,Margin2,Margin2,EachPadCol2);;
00602     fDisplayPad[0]->GetPad(5)->Divide(2,1,Margin2,Margin2,EachPadCol2);;
00603     fDisplayPad[0]->GetPad(6)->Divide(2,1,Margin2,Margin2,EachPadCol2);;
00604     
00605     fDisplayPad[0]->GetPad(4)->GetPad(1)->Divide(1,2,Margin2,Margin2,EachPadCol2);;
00606     fDisplayPad[0]->GetPad(5)->GetPad(1)->Divide(1,2,Margin2,Margin2,EachPadCol2);;
00607     fDisplayPad[0]->GetPad(6)->GetPad(1)->Divide(1,2,Margin2,Margin2,EachPadCol2);;
00608     
00609     for(Int_t k=0;k<3;k++){
00610       SelectSide(k);
00611       
00612       fDisplayPad[0]->GetPad(k+1)->cd(1);
00613       DrawHist(E_SilHist_Noise);
00614 
00615       fDisplayPad[0]->GetPad(k+1)->cd(2);
00616       DrawHist(E_SilHist_Mult);
00617 
00618       fDisplayPad[0]->GetPad(k+4)->GetPad(1)->cd(1);
00619       DrawHist(E_SilHist_CMmean);
00620 
00621       fDisplayPad[0]->GetPad(k+4)->GetPad(1)->cd(2);
00622       DrawHist(E_SilHist_CMsigma);
00623 
00624       fDisplayPad[0]->GetPad(k+4)->cd(2);
00625       DrawHist(E_SilHist_CluCrg);
00626     }
00627     SelectSide(-1);
00628   }
00629   RebuildSidePad();
00630   ResetFrameColors();
00631 
00632   HighlightButtons(1);
00633 }
00634 
00635 //________________________________________
00636 void TFndSilMonFrame::DisplayAllHist(Int_t layer, Int_t type){
00637 
00638   if(!ReloadMapFiles()){
00639     fDisplayPad[0]->Clear();
00640     fDisplayPad[0]->Modified();
00641     return;
00642   }
00643   Int_t   EachPadCol = 19;
00644   Float_t Margin     = 0.002;
00645 
00646   fDisplayPad[0]->Clear();
00647   Int_t kmax = 0;
00648   
00649   fLayer = layer;
00650   switch(fLayer){
00651   case (Int_t)E_FIN_INNER_LAYER:
00652     kmax = 8;
00653     fDisplayPad[0]->Divide(4,6,Margin,Margin,EachPadCol);
00654     break;
00655   case (Int_t)E_FIN_OUTER_LAYER:
00656     kmax = 10;
00657     fDisplayPad[0]->Divide(5,6,Margin,Margin,EachPadCol);
00658     break;
00659   default: break;
00660   }
00661   
00662   for(Int_t k=0;k<kmax;k++){
00663     for(Int_t s=0;s<3;s++){
00664       fDisplayPad[0]->cd(k*3+s+1);
00665       fModNum = k+1;
00666       SelectSide(s);
00667       DrawHist((E_SilHist) type);
00668     }
00669   }
00670   
00671   // --- side pad must be cleared
00672   // --- (it depends on the selected module)
00673   ClearSidePad();
00674   ResetFrameColors();
00675   Int_t all_id = -1;
00676   if     (fLayer == (Int_t)E_FIN_INNER_LAYER && type == (Int_t) E_SilHist_Mult)    all_id = 0;
00677   else if(fLayer == (Int_t)E_FIN_OUTER_LAYER && type == (Int_t) E_SilHist_Mult)    all_id = 1;
00678   else if(fLayer == (Int_t)E_FIN_INNER_LAYER && type == (Int_t) E_SilHist_Noise)   all_id = 2;
00679   else if(fLayer == (Int_t)E_FIN_OUTER_LAYER && type == (Int_t) E_SilHist_Noise)   all_id = 3;
00680   else if(fLayer == (Int_t)E_FIN_INNER_LAYER && type == (Int_t) E_SilHist_CMsigma) all_id = 4;
00681   else if(fLayer == (Int_t)E_FIN_OUTER_LAYER && type == (Int_t) E_SilHist_CMsigma) all_id = 5;
00682   else if(fLayer == (Int_t)E_FIN_INNER_LAYER && type == (Int_t) E_SilHist_CluCrg)  all_id = 6;
00683   else if(fLayer == (Int_t)E_FIN_OUTER_LAYER && type == (Int_t) E_SilHist_CluCrg)  all_id = 7;
00684   else{
00685     Error("DisplayAllHist","\"all_id\" out of range!");
00686     return;
00687   }
00688   HighlightButtons(2,all_id);
00689 }
00690 
00691 //________________________________________
00692 void TFndSilMonFrame::SelectModule(Int_t layer,Int_t module) {
00693   
00694   fLayer = layer; 
00695   fModNum = module; 
00696   //  Info("SelectModule","current selection: Layer %i; module %i",fLayer, fModNum);
00697 }
00698 
00699 //________________________________________
00700 void TFndSilMonFrame::SelectSide(Int_t side){
00701   
00702   fSide=side; 
00703   //  Info("SelectSide","current side: %i (\"%s\")",fSide,SilSide_Name(fSide).Data());
00704   
00705 }
00706 
00707 //________________________________________
00708 void TFndSilMonFrame::DrawHist(E_SilHist which_type){
00709   // this method will get and draw one histogram,
00710   // according to the current (layer,module,side) selection
00711   // and to the required type (received argument)
00712   
00713   TString hnam = "";
00714   TString hopt = "";
00715 
00716   switch(which_type) {
00717   case E_SilHist_Noise  : hnam = fNam_Noise[fLayer-1][fModNum-1][fSide];     break;
00718   case E_SilHist_Mult   : hnam = fNam_Mult[fLayer-1][fModNum-1][fSide];      break;
00719   case E_SilHist_CMmean : hnam = fNam_CMmean[fLayer-1][fModNum-1][fSide];    break;
00720   case E_SilHist_CMsigma: hnam = fNam_CMsigma[fLayer-1][fModNum-1][fSide];    break;
00721   case E_SilHist_CluCrg : hnam = fNam_ClCh[fLayer-1][fModNum-1][fSide]; break;
00722   case E_SilHist_CluCleanMult : hnam = fNam_CleanMult[fLayer-1][fModNum-1][fSide]; break;
00723   case E_SilHist_CluCrgClean  : hnam = fNam_ClChClean[fLayer-1][fModNum-1][fSide]; break;
00724   case E_SilHist_CluDeDx      : hnam = fNam_dEdx[fLayer-1][fModNum-1][fSide]; break;
00725   case E_SilHist_CluDeDx2D    : hnam = fNam_dEdx_PvsZ[fLayer-1][fModNum-1]; break;
00726   case E_SilHist_CluPos2D     : hnam = fNam_Pos_PvsZ[fLayer-1][fModNum-1]; hopt = "colz"; break;
00727   default: 
00728     Error("DrawHist","Type not available");
00729     return;
00730   }
00731   
00732 
00733   //  Printf("Histograms to be shown: \"%s\"",hnam.Data());
00734 
00735   if(fLayer == (Int_t)E_FIN_INNER_LAYER){
00736     if(fIsOnline) fHisto =(TH1F*) fIsmMapFile->Get(hnam.Data());
00737     else          fHisto =(TH1F*) fRF->Get(hnam.Data());   
00738   }
00739   else if(fLayer == (Int_t)E_FIN_OUTER_LAYER){
00740     if(fIsOnline) fHisto =(TH1F*) fOsmMapFile->Get(hnam.Data());
00741     else          fHisto =(TH1F*) fRF2->Get(hnam.Data());   
00742   }
00743   
00744   if(!fHisto) return;
00745   fHisto->GetXaxis()->SetLabelSize(0.08);
00746   fHisto->GetYaxis()->SetLabelSize(0.08);
00747   fHisto->Draw(hopt);
00748 
00749   return;
00750 }
00751 

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