// $Id$
+#include <cstdlib>
#include "AliMUONPainterDataSourceFrame.h"
+#include "AliLog.h"
+#include "AliCDBEntry.h"
+#include "AliCDBManager.h"
+#include "AliMUONChamberPainter.h"
+#include "AliMUONMchViewApplication.h"
+#include "AliMUONPainterDataRegistry.h"
#include "AliMUONPainterDataSourceItem.h"
#include "AliMUONPainterEnv.h"
#include "AliMUONPainterHelper.h"
+#include "AliMUONPainterMatrix.h"
#include "AliMUONPainterRegistry.h"
-#include "AliMUONTrackerOCDBDataMaker.h"
-#include "AliMUONTrackerRawDataMaker.h"
-#include "AliMUONVTrackerDataMaker.h"
-#include "AliLog.h"
-#include "AliRawReaderDate.h"
-#include "AliRawReaderRoot.h"
+#include "AliMUONRecoParam.h"
+#include "AliMUONTrackerConditionDataMaker.h"
+#include "AliMUONTrackerDataMaker.h"
+#include "AliRawReader.h"
+#include <TCanvas.h>
#include <TGButton.h>
#include <TGComboBox.h>
#include <TGFileDialog.h>
#include <TGrid.h>
#include <TObjArray.h>
#include <TObjString.h>
+#include <TMath.h>
#include <TRegexp.h>
#include <TString.h>
#include <TSystem.h>
//_____________________________________________________________________________
AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, UInt_t w, UInt_t h)
: TGCompositeFrame(p,w,h,kVerticalFrame),
- fRecentSourceSelector(new TGGroupFrame(p,"Recent sources",kHorizontalFrame)),
- fRawSelector(new TGGroupFrame(p,"Raw file URI",kHorizontalFrame)),
- fOCDBSelector(new TGGroupFrame(p,"OCDB Path",kHorizontalFrame)),
- fDataReaders(new TGGroupFrame(p,"Data sources")),
- fFilePath(new TGTextEntry(fRawSelector,"")),
- fRawOCDBPath(new TGTextEntry(fRawSelector,"")),
- fOCDBPath(new TGTextEntry(fOCDBSelector,"")),
- fRunSelector(new TGNumberEntry(fOCDBSelector,0)),
+ fRecentSourceSelector(new TGGroupFrame(this,"Recent sources",kHorizontalFrame)),
+ fRawSelector(new TGGroupFrame(this,"Raw file URI",kHorizontalFrame)),
+ fRawSelector2(new TGCompositeFrame(fRawSelector,w,h,kVerticalFrame)),
+ fRawSelector21(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
+ fRawSelector22(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
+ fRawSelector24(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
+ fRawSelector23(new TGCompositeFrame(fRawSelector2,w,h,kHorizontalFrame)),
+ 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)),
+ fEventRangeButton(new TGCheckButton(fRawSelector23,"Event range")),
+ fEventMin(new TGNumberEntry(fRawSelector23,-1,10)),
+ fEventMax(new TGNumberEntry(fRawSelector23,-1,10)),
+ fRawOCDBPath(new TGTextEntry(fRawSelector24,"alien://folder=/alice/data/2013/OCDB")),
+ fOCDBSelector(new TGGroupFrame(this,"OCDB Path",kHorizontalFrame)),
+ fDataReaders(new TGGroupFrame(this,"Data sources")),
+ fFilePath(new TGTextEntry(fRawSelector21,"")),
+ fOCDBPath(new TGTextEntry(fOCDBSelector,"alien://folder=/alice/data/2013/OCDB")),
+ fRunSelector(new TGNumberEntry(fOCDBSelector,0,10)),
fOCDBTypes(new TGComboBox(fOCDBSelector)),
fRecentSources(new TGComboBox(fRecentSourceSelector)),
- fItems(new TObjArray)
+ fItems(new TObjArray),
+ fACFSelector(new TGGroupFrame(this,"ASCII Calib File",kHorizontalFrame)),
+ fACFPath(new TGTextEntry(fACFSelector,"")),
+ fACFTypes(new TGComboBox(fACFSelector))
{
/// Ctor
- AliMUONPainterRegistry* reg = AliMUONPainterRegistry::Instance();
+ AliMUONPainterDataRegistry* reg = AliMUONPainterDataRegistry::Instance();
- reg->Connect("DataReaderWasRegistered(AliMUONVTrackerDataMaker*)",
+ reg->Connect("DataMakerWasRegistered(AliMUONVTrackerDataMaker*)",
"AliMUONPainterDataSourceFrame",
this,
- "DataReaderWasRegistered(AliMUONVTrackerDataMaker*)");
+ "DataMakerWasRegistered(AliMUONVTrackerDataMaker*)");
- reg->Connect("DataReaderWasUnregistered(AliMUONVTrackerDataMaker*)",
+ reg->Connect("DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)",
"AliMUONPainterDataSourceFrame",
this,
- "DataReaderWasUnregistered(AliMUONVTrackerDataMaker*)");
+ "DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)");
fItems->SetOwner(kFALSE);
fRecentSourceSelector->AddFrame(fRecentSources,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
fRecentSourceSelector->AddFrame(createRecentButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
-
+
/// Raw file selection
- TGButton* openButton = new TGPictureButton(fRawSelector,
+ TGButton* openButton = new TGPictureButton(fRawSelector21,
gClient->GetPicture("fileopen.xpm"));
openButton->SetToolTipText("Click to open file dialog");
- TGButton* createRawButton = new TGTextButton(fRawSelector,"Create data source");
+ fRawSelector2->AddFrame(fRawSelector21, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
+ fRawSelector2->AddFrame(fRawSelector22, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
+ fRawSelector2->AddFrame(fRawSelector24, new TGLayoutHints(kLHintsTop,5,5,5,5));
+ fRawSelector2->AddFrame(fRawSelector23, new TGLayoutHints(kLHintsExpandX,5,5,5,5));
+
+ fRawSelector21->AddFrame(openButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
+ fRawSelector21->AddFrame(fFilePath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
+
+ 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));
+
+ fRawSelector24->AddFrame(fRawOCDBPath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
+ fRawOCDBPath->SetEnabled(kFALSE);
- fRawSelector->AddFrame(fFilePath, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
- fRawSelector->AddFrame(fRawOCDBPath, new TGLayoutHints(kLHintsTop,5,5,5,5));
- fRawSelector->AddFrame(openButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
- fRawSelector->AddFrame(createRawButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
+ fRawSelector23->AddFrame(fHistogramButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
+ fHistogramButton->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"HistogramButtonClicked()");
+ fHistoMin->SetState(kFALSE);
+ fHistoMax->SetState(kFALSE);
+ fRawSelector23->AddFrame(fHistoMin,new TGLayoutHints(kLHintsTop,5,5,5,5));
+ fRawSelector23->AddFrame(fHistoMax,new TGLayoutHints(kLHintsTop,5,5,5,5));
+
+ fRawSelector23->AddFrame(fEventRangeButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
+ fEventRangeButton->Connect("Clicked()","AliMUONPainterDataSourceFrame",this,"EventRangeButtonClicked()");
+ fEventMin->SetState(kFALSE);
+ fEventMax->SetState(kFALSE);
+
+ fEventMin->SetFormat(TGNumberFormat::kNESInteger);
+ fEventMax->SetFormat(TGNumberFormat::kNESInteger);
+
+ fRawSelector23->AddFrame(fEventMin,new TGLayoutHints(kLHintsTop,5,5,5,5));
+ fRawSelector23->AddFrame(fEventMax,new TGLayoutHints(kLHintsTop,5,5,5,5));
+
+ TGButton* createRawButton = new TGTextButton(fRawSelector,"Create data source");
+
+ fRawSelector->AddFrame(fRawSelector2, new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
+ fRawSelector->AddFrame(createRawButton, new TGLayoutHints(kLHintsCenterY,5,5,5,5));
+
+ 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",
this,
/// OCDB selection
- fOCDBTypes->AddEntry("Pedestals",0);
- fOCDBTypes->AddEntry("Gains",1);
- fOCDBTypes->AddEntry("Capacitances",2);
- 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->AddEntry("RejectList",8);
+ fOCDBTypes->Select(0);
+ fOCDBTypes->Resize(80,20);
TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source");
createOCDBButton->Connect("Clicked()",
"AliMUONPainterDataSourceFrame",
this,
"CreateOCDBDataSource()");
-
-
+
+ const char* ocdbToolTip = "Use URL style for either alien or local OCDB (foo://bar). For example :\n"
+ "alien://folder=/alice/data.../OCDB\n"
+ "or\nlocal:///home/user/aliroot (mind the 3 slashes there !)";
+
+ fRawOCDBPath->SetToolTipText(ocdbToolTip);
+ fOCDBPath->SetToolTipText(ocdbToolTip);
+
fOCDBSelector->AddFrame(fOCDBPath,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
fOCDBSelector->AddFrame(fRunSelector,new TGLayoutHints(kLHintsTop,5,5,5,5));
fOCDBSelector->AddFrame(fOCDBTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
fOCDBSelector->AddFrame(createOCDBButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
+
+
+ /// ASCII calibration file selection
+
+ TGButton* openButtonACF = new TGPictureButton(fACFSelector,
+ gClient->GetPicture("fileopen.xpm"));
+ openButtonACF->SetToolTipText("Click to open file dialog");
+
+ 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));
+ fACFSelector->AddFrame(fACFTypes,new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5));
+
+ TGButton* createACFButton = new TGTextButton(fACFSelector,"Create data source");
+ createACFButton->Connect("Clicked()",
+ "AliMUONPainterDataSourceFrame",
+ this,
+ "CreateACFDataSource()");
+
+ openButtonACF->Connect("Clicked()",
+ "AliMUONPainterDataSourceFrame",
+ this,
+ "OpenFileDialogACF()");
+
+ fACFSelector->AddFrame(createACFButton,new TGLayoutHints(kLHintsTop,5,5,5,5));
AddFrame(fRecentSourceSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
AddFrame(fOCDBSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
+ AddFrame(fACFSelector,new TGLayoutHints(kLHintsExpandX,10,10,10,10));
+
AddFrame(fDataReaders, new TGLayoutHints(kLHintsExpandX,10,10,10,10));
}
fRecentSources->Layout();
}
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::CalibrateButtonClicked()
+{
+ /// Calibrate button was clicked.
+
+ if ( fCalibrateNoGain->IsOn() ||
+ fCalibrateGainConstantCapa->IsOn() ||
+ fCalibrateGain->IsOn() ||
+ fCalibrateEmelecGain->IsOn() )
+ {
+ fRawOCDBPath->SetEnabled(kTRUE);
+ fRawOCDBPath->SetFocus();
+ }
+ else
+ {
+ fRawOCDBPath->SetEnabled(kFALSE);
+ }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::HistogramButtonClicked()
+{
+ /// Histogram button was clicked.
+
+ if ( fHistogramButton->IsOn() )
+ {
+ fHistoMin->SetState(kTRUE);
+ fHistoMax->SetState(kTRUE);
+ }
+ else
+ {
+ fHistoMin->SetState(kFALSE);
+ fHistoMax->SetState(kFALSE);
+ }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::EventRangeButtonClicked()
+{
+ /// EventRange button was clicked.
+
+ if ( fEventRangeButton->IsOn() )
+ {
+ fEventMin->SetState(kTRUE);
+ fEventMax->SetState(kTRUE);
+ }
+ else
+ {
+ fEventMin->SetIntNumber(-1);
+ fEventMax->SetIntNumber(-1);
+ fEventMin->SetState(kFALSE);
+ fEventMax->SetState(kFALSE);
+ }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::CreateACFDataSource()
+{
+ /// Create an ACF data source (using information from the widgets)
+
+ TString acfPath = fACFPath->GetText();
+ TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fACFTypes->GetSelectedEntry());
+ TString type = t->GetText()->GetString();
+
+ CreateACFDataSource(acfPath,type);
+
+ fACFPath->SetText("");
+}
+
+
//_____________________________________________________________________________
void
AliMUONPainterDataSourceFrame::CreateOCDBDataSource()
TGTextLBEntry* t = static_cast<TGTextLBEntry*>(fOCDBTypes->GetSelectedEntry());
TString type = t->GetText()->GetString();
- CreateOCDBDataSource(cdbPath,runNumber,type);
+ CreateOCDBDataSource(cdbPath,runNumber,type);
+}
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::CreateACFDataSource(const TString& uri)
+{
+ /// Create an ACF data source, given it's URI
+
+ TObjArray* a = uri.Tokenize(";");
+ TString acfPath = static_cast<TObjString*>(a->At(1))->String();
+ TString type = static_cast<TObjString*>(a->At(2))->String();
+
+ CreateACFDataSource(acfPath,type);
- fOCDBPath->SetText("");
- fRunSelector->SetNumber(0);
+ delete a;
}
+
//_____________________________________________________________________________
void
AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& uri)
//_____________________________________________________________________________
void
-AliMUONPainterDataSourceFrame::CreateOCDBDataSource(const TString& cdbPath,
- Int_t runNumber,
- const TString& type)
+AliMUONPainterDataSourceFrame::RegisterDataSource(AliMUONVTrackerDataMaker* reader,
+ const char* dsName)
{
- /// Create an OCDB data source for a given (path,runnumber,type) triplet
-
- AliMUONVTrackerDataMaker* reader = new AliMUONTrackerOCDBDataMaker(cdbPath.Data(),
- runNumber,
- type.Data());
-
- if ( reader->IsValid() )
+ /// Register a new data source
+
+ if ( reader && reader->IsValid() )
{
- AliMUONPainterRegistry::Instance()->Register(reader);
+ 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();
env->Set(fgkNumberOfDataSourcesKey,n+1);
- TString ds(Form("OCDB;%s;%d;%s",cdbPath.Data(),runNumber,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::CreatePedestalCanvases(AliMUONVTrackerData* data,
+ Double_t pedMin, Double_t pedMax,
+ Double_t sigmaMin, Double_t sigmaMax)
+{
+ /// 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];
+
+ att[0].SetViewPoint(kTRUE,kFALSE);
+ att[0].SetCathode(kFALSE,kFALSE);
+ att[0].SetPlane(kTRUE,kFALSE);
+
+ att[1].SetViewPoint(kTRUE,kFALSE);
+ att[1].SetCathode(kFALSE,kFALSE);
+ att[1].SetPlane(kFALSE,kTRUE);
+
+ for ( Int_t iatt = 0; iatt < 2; ++iatt )
+ {
+ 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
+
+ AliMUONPainterMatrix* matrix = new AliMUONPainterMatrix("Tracker",5,2);
+
+ for ( Int_t ichamber = 0; ichamber < 10; ++ichamber )
+ {
+ AliMUONVPainter* painter = new AliMUONChamberPainter(att,ichamber);
+
+ painter->SetResponder("BUSPATCH");
+
+ painter->SetOutlined("*",kFALSE);
+
+ 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()));
}
//_____________________________________________________________________________
/// Create a new raw data source (using info from the widgets)
TString uri(gSystem->ExpandPathName(fFilePath->GetText()));
+
+ TString name("RAW");
+ Bool_t fromMemory(kFALSE);
- if ( gSystem->AccessPathName(uri.Data()) )
+ if ( uri.Contains(TRegexp("^mem")) )
{
- AliError(Form("File %s does not exist",uri.Data()));
- fFilePath->SetText("");
- return;
+ fromMemory = kTRUE;
+ }
+ else
+ {
+ if ( gSystem->AccessPathName(uri.Data()) )
+ {
+ AliError(Form("File %s does not exist",uri.Data()));
+ fFilePath->SetText("");
+ return;
+ }
}
- uri = Form("RAW;%s;%s",uri.Data(),fRawOCDBPath->GetText());
+ TString calibMode("");
+
+ if ( fCalibrateGain->IsOn() )
+ {
+ calibMode = "GAIN";
+ name = "CALC";
+ }
+
+ if ( fCalibrateGainConstantCapa->IsOn() )
+ {
+ calibMode = "GAINCONSTANTCAPA";
+ name = "CALG";
+ }
+
+ if ( fCalibrateEmelecGain->IsOn() )
+ {
+ calibMode = "INJECTIONGAIN";
+ name = "CALE";
+ }
+
+ if ( fCalibrateNoGain->IsOn() )
+ {
+ calibMode = "NOGAIN";
+ name = "CALZ";
+ }
+
+ uri = Form("%s%s%s;%s;%s;%s;%s;%s;%s;%s",
+ ( fHistogramButton->IsOn() ? "H":""),
+ ( fromMemory ? "M" : ""),
+ name.Data(),uri.Data(),
+ ( strlen(fRawOCDBPath->GetText()) > 0 ? fRawOCDBPath->GetText() : " "),
+ ( calibMode.Length() > 0 ? calibMode.Data() : " "),
+ Form("%e",fHistoMin->GetNumber()),
+ Form("%e",fHistoMax->GetNumber()),
+ Form("%d",(Int_t)(fEventMin->GetIntNumber())),
+ Form("%d",(Int_t)(fEventMax->GetIntNumber())));
if ( CreateRawDataSource(uri) )
{
TString filename;
TString ocdbPath;
+ TString calibMode;
+ TString sxmin("0.0");
+ TString sxmax("4096.0");
+ TString emin("-1");
+ TString emax("-1");
TObjArray* a = uri.Tokenize(";");
if ( a->GetLast() > 1 )
{
ocdbPath = static_cast<TObjString*>(a->At(2))->String();
+ if ( ocdbPath == " " ) ocdbPath = "";
}
-
- AliRawReader* rawReader = 0x0;
- if ( filename.Contains(TRegexp(".root$")) )
+ if ( a->GetLast() > 2 )
{
- AliDebug(1,"Using RawReaderRoot");
- if ( filename.Contains(TRegexp("^alien")) )
- {
- // insure we've initialized the grid...
- if (!gGrid)
- {
- TGrid::Connect("alien://");
- }
- }
-
- rawReader = new AliRawReaderRoot(filename.Data());
+ calibMode = static_cast<TObjString*>(a->At(3))->String();
+ if ( calibMode == " " ) calibMode = "";
}
- else if ( uri.Contains(TRegexp(".raw")) )
+
+ if ( a->GetLast() > 3 )
{
- AliDebug(1,"Using RawReaderDate");
- rawReader = new AliRawReaderDate(filename.Data());
+ sxmin = static_cast<TObjString*>(a->At(4))->String();
}
- else
+
+ if ( a->GetLast() > 4 )
{
- AliError(Form("Don't know how to open that file : %s\nURI=%s",filename.Data(),uri.Data()));
- return kFALSE;
+ sxmax = static_cast<TObjString*>(a->At(5))->String();
}
- AliMUONTrackerRawDataMaker* reader = new AliMUONTrackerRawDataMaker(rawReader,ocdbPath.Data());
+ if ( a->GetLast() > 5 )
+ {
+ emin = static_cast<TObjString*>(a->At(6))->String();
+ }
+
+ if ( a->GetLast() > 6 )
+ {
+ emax = static_cast<TObjString*>(a->At(7))->String();
+ }
- reader->SetSource(filename.Data());
+ delete a;
- AliMUONPainterRegistry::Instance()->Register(reader);
+ AliRawReader* rawReader = 0x0;
+
+ if ( filename.Contains(TRegexp("^alien")) )
+ {
+ // insure we've initialized the grid...
+ if (!gGrid)
+ {
+ TGrid::Connect("alien://");
+ }
+ }
- AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
+ rawReader = AliRawReader::Create(filename.Data());
+
+ if (!rawReader)
+ {
+ AliError(Form("Could not open file %s",filename.Data()));
+ fFilePath->SetText("");
+ return kFALSE;
+ }
- Int_t n = env->Integer(fgkNumberOfDataSourcesKey);
+ /// Basic test to see if the file is correct
+ /// and to get run numbre
+ Int_t runNumber(-1);
+ Bool_t ok = rawReader->NextEvent();
+ if (!ok)
+ {
+ AliError(Form("File %s does not seem to be a raw data file",filename.Data()));
+ fFilePath->SetText("");
+ return kFALSE;
+ }
+ else
+ {
+ runNumber = rawReader->GetRunNumber();
+ }
+
+ rawReader->RewindEvents();
- env->Set(fgkNumberOfDataSourcesKey,n+1);
+ AliMUONVTrackerDataMaker* reader(0x0);
+ Bool_t histogram(kFALSE);
- TString ds(Form("RAW;%s;%s",filename.Data(),ocdbPath.Data()));
+ if ( uri.Contains(TRegexp("^H")) ) histogram = kTRUE;
+
+ if ( ocdbPath.Length() > 0 )
+ {
+
+ AliMUONRecoParam* recoParam(0x0);
+
+ AliCDBEntry* e = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam",runNumber);
+ if (e)
+ {
+ TObject* o = e->GetObject();
+ if ( o->IsA() == TObjArray::Class() )
+ {
+ TIter next(static_cast<TObjArray*>(o));
+ AliMUONRecoParam* p;
+ while ( ( p = static_cast<AliMUONRecoParam*>(next()) ))
+ {
+ if ( p->IsDefault()) recoParam = p;
+ }
+ }
+ else
+ {
+ recoParam = static_cast<AliMUONRecoParam*>(o);
+ }
+ }
+
+ reader = new AliMUONTrackerDataMaker(recoParam,
+ rawReader,
+ ocdbPath.Data(),
+ calibMode.Data(),
+ histogram,
+ sxmin.Atof(),
+ sxmax.Atof());
+ }
+ else
+ {
+ reader = new AliMUONTrackerDataMaker(rawReader,histogram);
+ }
+
+ reader->SetEventRange(emin.Atoi(),emax.Atoi());
- env->Set(Form(fgkDataSourceURIKey,n),ds.Data());
+ reader->SetSource(filename.Data());
+
+ TString dsName(uri);
- AddRecentSource(ds.Data());
+ if ( emin.Atoi() <= emax.Atoi() )
+ {
+ // we have an event range
+ if ( emin.Atoi() == emax.Atoi())
+ {
+ dsName += Form("[%d]",emin.Atoi());
+ }
+ else
+ {
+ dsName += Form("[%d,%d]",emin.Atoi(),emax.Atoi());
+ }
+ }
- env->Save();
-
+ RegisterDataSource(reader,dsName.Data());
+
return kTRUE;
}
//_____________________________________________________________________________
void
-AliMUONPainterDataSourceFrame::DataReaderWasRegistered(AliMUONVTrackerDataMaker* reader)
+AliMUONPainterDataSourceFrame::DataMakerWasRegistered(AliMUONVTrackerDataMaker* reader)
{
/// Update ourselves as a new data reader was created
- AliInfo(Form("%s",reader->GetName()));
-
AliMUONPainterDataSourceItem* item = new AliMUONPainterDataSourceItem(fDataReaders,100,20,reader);
+ item->Connect("StartRunning()",
+ "AliMUONPainterDataSourceFrame",
+ this,
+ "StartRunning()");
+
+ item->Connect("StopRunning()",
+ "AliMUONPainterDataSourceFrame",
+ this,
+ "StopRunning()");
+
fDataReaders->AddFrame(item);
fItems->Add(item);
//_____________________________________________________________________________
void
-AliMUONPainterDataSourceFrame::DataReaderWasUnregistered(AliMUONVTrackerDataMaker* reader)
+AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(const AliMUONVTrackerDataMaker* maker)
{
- /// Update ourselves as a new data reader was deleted
+ /// Update ourselves as a data reader was deleted
+
+ AliMUONPainterDataSourceItem* theItem(0x0);
+
+ TIter next(fItems);
+ AliMUONPainterDataSourceItem* item;
+
+ while ( ( item = static_cast<AliMUONPainterDataSourceItem*>(next()) ) && !theItem )
+ {
+ if ( item->DataMaker() == maker )
+ {
+ theItem = item;
+ }
+ }
+
+ if (!theItem) return;
+
+ fDataReaders->RemoveFrame(theItem);
+ fItems->Remove(theItem);
+ theItem->DestroyWindow();
+ delete theItem;
- AliInfo(Form("%s",reader->GetName()));
-
+ fDataReaders->MapSubwindows();
+ fDataReaders->Resize();
+
}
//_____________________________________________________________________________
TGFileInfo fileInfo;
+ const char* fileTypes[] = {
+ "ROOT files","*.root",
+ "DATE files","*.raw",
+ "All files","*",
+ 0,0 };
+
+ fileInfo.fFileTypes = fileTypes;
+ delete[] fileInfo.fIniDir;
+
+ AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
+
+ fileInfo.fIniDir = StrDup(env->String("LastOpenDir","."));
+
new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
kFDOpen,&fileInfo);
-
fFilePath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
+
+ env->Set("LastOpenDir",fileInfo.fIniDir);
+ env->Save();
+}
+
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::OpenFileDialogACF()
+{
+ /// Open a file dialog to select an ASCII calibration file to be read
+
+ TGFileInfo fileInfo;
+
+ const char* fileTypes[] = {
+ "All files","*",
+ 0,0 };
+
+ fileInfo.fFileTypes = fileTypes;
+ delete[] fileInfo.fIniDir;
+
+ AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env();
+
+ fileInfo.fIniDir = StrDup(env->String("LastOpenDirACF","."));
+
+ new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),
+ kFDOpen,&fileInfo);
+
+ fACFPath->SetText(gSystem->ExpandPathName(Form("%s",fileInfo.fFilename)));
+
+ env->Set("LastOpenDirACF",fileInfo.fIniDir);
+ env->Save();
}
TString uri(t->GetText()->GetString());
- if ( uri.Contains(TRegexp("^RAW")) )
+ if ( uri.Contains(TRegexp("^RAW")) || uri.Contains(TRegexp("^HRAW")) ||
+ uri.Contains(TRegexp("^CAL")) || uri.Contains(TRegexp("^HCAL")) ||
+ uri.Contains(TRegexp("^MEM")) )
{
CreateRawDataSource(uri);
}
{
CreateOCDBDataSource(uri);
}
+ else if ( uri.Contains(TRegexp("^ACF")) )
+ {
+ CreateACFDataSource(uri);
+ }
fRecentSources->Select(-1);
}
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::StartRunning()
+{
+ /// One data source starts running. Disable the Run button of the other ones
+
+ AliMUONPainterDataSourceItem* item = reinterpret_cast<AliMUONPainterDataSourceItem*> (gTQSender);
+
+ AliInfo("");
+
+ TIter next(fItems);
+ AliMUONPainterDataSourceItem* o;
+ while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )
+ {
+ if ( o != item )
+ {
+ o->DisableRun();
+ }
+ }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONPainterDataSourceFrame::StopRunning()
+{
+ /// One data source stops running. Enable the Run button of all items
+
+ TIter next(fItems);
+ AliMUONPainterDataSourceItem* o;
+ while ( ( o = static_cast<AliMUONPainterDataSourceItem*>(next()) ) )
+ {
+ o->EnableRun();
+ }
+}
+