]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONPainterDataSourceFrame.cxx
new cuts and tasks added
[u/mrichter/AliRoot.git] / MUON / AliMUONPainterDataSourceFrame.cxx
index 245cf21ce156899b6790c31abbc8360a64ca1d92..599646eba89f09ccf9318f11b24c6ca7a392fa0f 100644 (file)
 #include "AliMUONPainterDataSourceFrame.h"
 
 #include "AliLog.h"
+#include "AliMUONChamberPainter.h"
+#include "AliMUONMchViewApplication.h"
+#include "AliMUONPainterDataRegistry.h"
 #include "AliMUONPainterDataSourceItem.h"
 #include "AliMUONPainterEnv.h"
 #include "AliMUONPainterHelper.h"
-#include "AliMUONPainterDataRegistry.h"
+#include "AliMUONPainterMatrix.h"
+#include "AliMUONPainterRegistry.h"
 #include "AliMUONRecoParam.h"
-#include "AliMUONTrackerACFDataMaker.h"
+#include "AliMUONTrackerConditionDataMaker.h"
 #include "AliMUONTrackerDataMaker.h"
-#include "AliMUONTrackerOCDBDataMaker.h"
 #include "AliRawReader.h"
+#include <TCanvas.h>
 #include <TGButton.h>
 #include <TGComboBox.h>
 #include <TGFileDialog.h>
@@ -36,6 +40,7 @@
 #include <TGrid.h>
 #include <TObjArray.h>
 #include <TObjString.h>
+#include <TMath.h>
 #include <TRegexp.h>
 #include <TString.h>
 #include <TSystem.h>
@@ -64,9 +69,10 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p,
   fRawSelector21(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
   fRawSelector22(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
   fRawSelector23(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
-  fCalibrateNoGain(new TGCheckButton(fRawSelector22,"Ped subraction")),
-  fCalibrateGainConstantCapa(new TGCheckButton(fRawSelector22,"Ped subraction + gain (capa cste)")),
-  fCalibrateGain(new TGCheckButton(fRawSelector22,"Full calib (Ped subraction + gain with capa)")),
+  fCalibrateNoGain(new TGCheckButton(fRawSelector22,"Ped sub")),
+  fCalibrateGainConstantCapa(new TGCheckButton(fRawSelector22,"Ped sub+gain (capa cste)")),
+  fCalibrateGain(new TGCheckButton(fRawSelector22,"Full calib (Ped sub+gain w/ capa)")),
+  fCalibrateEmelecGain(new TGCheckButton(fRawSelector22,"Full calib (Ped sub+inj gain w/ capa)")),
   fHistogramButton(new TGCheckButton(fRawSelector23,"Histogram")),
   fHistoMin(new TGNumberEntry(fRawSelector23,0)),
   fHistoMax(new TGNumberEntry(fRawSelector23,4096)),
@@ -74,7 +80,7 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p,
   fOCDBSelector(new TGGroupFrame(this,"OCDB Path",kHorizontalFrame)),
   fDataReaders(new TGGroupFrame(this,"Data sources")),
   fFilePath(new TGTextEntry(fRawSelector21,"")),
-  fOCDBPath(new TGTextEntry(fOCDBSelector,"")),
+  fOCDBPath(new TGTextEntry(fOCDBSelector,"alien://folder=/alice/data/2009/OCDB")),
   fRunSelector(new TGNumberEntry(fOCDBSelector,0)),
   fOCDBTypes(new TGComboBox(fOCDBSelector)),
   fRecentSources(new TGComboBox(fRecentSourceSelector)),
@@ -137,6 +143,7 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p,
     fRawSelector22->AddFrame(fCalibrateNoGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
     fRawSelector22->AddFrame(fCalibrateGainConstantCapa, new TGLayoutHints(kLHintsTop,5,5,5,5));
     fRawSelector22->AddFrame(fCalibrateGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
+    fRawSelector22->AddFrame(fCalibrateEmelecGain, new TGLayoutHints(kLHintsTop,5,5,5,5));
     fRawSelector22->AddFrame(fRawOCDBPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
     fRawOCDBPath->SetEnabled(kFALSE);
     
@@ -158,6 +165,7 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p,
     fCalibrateNoGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
     fCalibrateGainConstantCapa->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
     fCalibrateGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
+  fCalibrateEmelecGain->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"CalibrateButtonClicked()");
 
     openButton->Connect("Clicked()",
                         "AliMUONPainterDataSourceFrame",
@@ -171,12 +179,16 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p,
     
     /// OCDB selection
     
-    fOCDBTypes->AddEntry("Pedestals",0);
-    fOCDBTypes->AddEntry("Gains",1);
-    fOCDBTypes->AddEntry("Capacitances",2);
-    fOCDBTypes->AddEntry("HV",3);
-    fOCDBTypes->Select(0);
-    fOCDBTypes->Resize(100,20);
+  fOCDBTypes->AddEntry("Config",7);
+  fOCDBTypes->AddEntry("Occupancy",4);
+  fOCDBTypes->AddEntry("HV",3);
+  fOCDBTypes->AddEntry("Pedestals",0);
+  fOCDBTypes->AddEntry("Gains",1);
+  fOCDBTypes->AddEntry("StatusMap",5);
+  fOCDBTypes->AddEntry("Status",6);
+  fOCDBTypes->AddEntry("Capacitances",2);
+  fOCDBTypes->Select(0);
+  fOCDBTypes->Resize(100,20);
     
     TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source");
     createOCDBButton->Connect("Clicked()",
@@ -202,12 +214,14 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p,
     TGButton* openButtonACF = new TGPictureButton(fACFSelector,
                                                   gClient->GetPicture("fileopen.xpm"));
     openButtonACF->SetToolTipText("Click to open file dialog");
-    
-    fACFTypes->AddEntry("Pedestals",0);
-    fACFTypes->AddEntry("Gains",1);
-    fACFTypes->AddEntry("Capacitances",2);
-    fACFTypes->Select(0);
-    fACFTypes->Resize(100,20);
+
+  fACFTypes->AddEntry("Config",7);
+  fACFTypes->AddEntry("Occupancy",4);
+  fACFTypes->AddEntry("Pedestals",0);
+  fACFTypes->AddEntry("Gains",1);
+  fACFTypes->AddEntry("Capacitances",2);
+  fACFTypes->Select(0);
+  fACFTypes->Resize(100,20);
     
     fACFSelector->AddFrame(openButtonACF,new TGLayoutHints(kLHintsTop,5,5,5,5));                                      
     fACFSelector->AddFrame(fACFPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
@@ -277,7 +291,8 @@ AliMUONPainterDataSourceFrame::CalibrateButtonClicked()
   
   if ( fCalibrateNoGain->IsOn() ||
        fCalibrateGainConstantCapa->IsOn() ||
-       fCalibrateGain->IsOn() ) 
+       fCalibrateGain->IsOn() || 
+       fCalibrateEmelecGain->IsOn() ) 
   {
     fRawOCDBPath->SetEnabled(kTRUE);
     fRawOCDBPath->SetFocus();
@@ -333,10 +348,7 @@ AliMUONPainterDataSourceFrame::CreateOCDBDataSource()
   TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fOCDBTypes->GetSelectedEntry());
   TString type = t->GetText()->GetString();
   
-  CreateOCDBDataSource(cdbPath,runNumber,type);
-  
-  fOCDBPath->SetText("");
-  fRunSelector->SetNumber(0);  
+  CreateOCDBDataSource(cdbPath,runNumber,type);  
 }
 
 //_____________________________________________________________________________
@@ -373,15 +385,19 @@ AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& uri)
 
 //_____________________________________________________________________________
 void
-AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& acfPath, const TString& type)
+AliMUONPainterDataSourceFrame::RegisterDataSource(AliMUONVTrackerDataMaker* reader,
+                                                  const char* dsName)
 {
-  /// Create an ACF data source for a given (path,type) 
-
-  AliMUONVTrackerDataMaker* reader = new AliMUONTrackerACFDataMaker(acfPath.Data(),
-                                                                    type.Data());
-  
-  if ( reader->IsValid() ) 
+  /// Register a new data source
+  if ( reader && reader->IsValid() ) 
   {
+    AliMUONMchViewApplication* app = dynamic_cast<AliMUONMchViewApplication*>(gApplication);
+    if (!app)
+    {
+      AliError("Could not cast application to the expected type ! CHECK THAT !");
+    }
+    
     AliMUONPainterDataRegistry::Instance()->Register(reader);
     
     AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
@@ -390,47 +406,130 @@ AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& acfPath, const
     
     env->Set(fgkNumberOfDataSourcesKey,n+1);
     
-    TString ds(Form("ACF;%s;%s",acfPath.Data(),type.Data()));
-    
-    env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
+    env->Set(Form(fgkDataSourceURIKey,n),dsName);
     
     env->Save();
     
-    AddRecentSource(ds.Data());
-  }
-  
+    AddRecentSource(dsName);
+    
+    if ( app ) 
+    {
+      
+      TString name(dsName);
+      name.ToUpper();
+      
+      if ( name.Contains("PED") )
+      {
+        CreatePedestalCanvases(reader->Data());
+      }
+    }
+  }  
 }
 
 //_____________________________________________________________________________
 void
-AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& cdbPath,
-                                                    Int_t runNumber,
-                                                    const TString& type)
+AliMUONPainterDataSourceFrame::CreatePedestalCanvases(AliMUONVTrackerData* data,
+                                                      Double_t pedMin, Double_t pedMax,
+                                                      Double_t sigmaMin, Double_t sigmaMax)
 {
-  /// Create an OCDB data source for a given (path,runnumber,type) triplet
+  /// Create 4 canvases with the pedestals contained in data
+  /// to show mean and sigma, for bending and non bending, with given limits
+                                                 
+  TList matrices;
+  
+  AliMUONAttPainter att[2];
   
-  AliMUONVTrackerDataMaker* reader = new AliMUONTrackerOCDBDataMaker(cdbPath.Data(),
-                                                                       runNumber,
-                                                                       type.Data());
+  att[0].SetViewPoint(kTRUE,kFALSE);
+  att[0].SetCathode(kFALSE,kFALSE);
+  att[0].SetPlane(kTRUE,kFALSE);
   
-  if ( reader->IsValid() ) 
+  att[1].SetViewPoint(kTRUE,kFALSE);
+  att[1].SetCathode(kFALSE,kFALSE);
+  att[1].SetPlane(kFALSE,kTRUE);
+  
+  for ( Int_t iatt = 0; iatt < 2; ++iatt ) 
   {
-    AliMUONPainterDataRegistry::Instance()->Register(reader);
-    
-    AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
-    
-    Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
-    
-    env->Set(fgkNumberOfDataSourcesKey,n+1);
+    matrices.Add(CreateFullTracker(data,0,pedMin,pedMax,att[iatt]));
+    matrices.Add(CreateFullTracker(data,1,sigmaMin,sigmaMax,att[iatt]));
+  }
+  
+  TIter next(&matrices);
+  AliMUONPainterMatrix* matrix;
+  
+  Int_t w = TMath::Nint(gClient->GetDisplayWidth()*0.9);
+  Int_t h = TMath::Nint(gClient->GetDisplayHeight()*0.9);
+  
+  Int_t x[] = { 0, 0, 20 + w/2, 20 + w/2 };
+  Int_t y[] = { 0, h/2+30, 0, h/2+30 };
+  
+  Int_t i(0);
+  
+  while ( ( matrix = static_cast<AliMUONPainterMatrix*>(next())) )
+  {
+    TCanvas* c = matrix->CreateCanvas(x[i],y[i],w/2,h/2);
+    c->Draw();
+    c->SaveAs(Form("%s.png",c->GetName()));
+    ++i;
+  }
+}
+
+//_____________________________________________________________________________
+AliMUONPainterMatrix*
+AliMUONPainterDataSourceFrame::CreateFullTracker(AliMUONVTrackerData* data, 
+                                                 Int_t dim, 
+                                                 Double_t xmin, Double_t xmax,
+                                                 const AliMUONAttPainter& att)
+{
+  /// Generate, draw and register a matrix of 10 painters to show all the tracker
+  /// chambers
     
-    TString ds(Form("OCDB;%s;%d;%s",cdbPath.Data(),runNumber,type.Data()));
+  AliMUONPainterMatrix* matrix = new AliMUONPainterMatrix("Tracker",5,2);
+  
+  for ( Int_t ichamber = 0; ichamber < 10; ++ichamber )
+  {
+    AliMUONVPainter* painter = new AliMUONChamberPainter(att,ichamber);
     
-    env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
+    painter->SetResponder("BUSPATCH");
     
-    env->Save();
+    painter->SetOutlined("*",kFALSE);
     
-    AddRecentSource(ds.Data());
+    matrix->Adopt(painter);    
   }
+  
+  matrix->SetData("MANU",data,dim);    
+  matrix->SetDataRange(xmin,xmax);    
+  
+  AliMUONPainterRegistry::Instance()->Register(matrix);
+    
+  return matrix;
+}
+
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& acfPath, const TString& type)
+{
+  /// Create an ACF data source for a given (path,type) 
+
+  AliMUONVTrackerDataMaker* reader = new AliMUONTrackerConditionDataMaker(acfPath.Data(),
+                                                                          type.Data());
+  
+  RegisterDataSource(reader,Form("ACF;%s;%s",acfPath.Data(),type.Data()));
+}
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& cdbPath,
+                                                    Int_t runNumber,
+                                                    const TString& type)
+{
+  /// Create an OCDB data source for a given (path,runnumber,type) triplet
+  
+  AliMUONVTrackerDataMaker* reader = new AliMUONTrackerConditionDataMaker(runNumber,
+                                                                          cdbPath.Data(),
+                                                                          type.Data());
+  
+  RegisterDataSource(reader,Form("OCDB;%s;%d;%s",cdbPath.Data(),runNumber,type.Data()));
 }
 
 //_____________________________________________________________________________
@@ -471,6 +570,12 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource()
     calibMode = "GAINCONSTANTCAPA";
     name = "CALG";
   }
+
+  if ( fCalibrateEmelecGain->IsOn() ) 
+  {
+    calibMode = "INJECTIONGAIN";
+    name = "CALE";
+  }
   
   if ( fCalibrateNoGain->IsOn() ) 
   {
@@ -586,23 +691,11 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri)
   {
     reader = new AliMUONTrackerDataMaker(rawReader,histogram);
   }
-  
+
   reader->SetSource(filename.Data());
-  
-  AliMUONPainterDataRegistry::Instance()->Register(reader);
-  
-  AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
-  
-  Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
-  
-  env->Set(fgkNumberOfDataSourcesKey,n+1);
-  
-  env->Set(Form(fgkDataSourceURIKey,n),uri.Data());
-  
-  AddRecentSource(uri.Data());
-  
-  env->Save();
 
+  RegisterDataSource(reader,uri.Data());
+                       
   return kTRUE;
 }