X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONPainterDataSourceFrame.cxx;h=9a507972a914314efe99d37fe39f055fe8fcd641;hb=05fadcad984dd5fe0ebfdbbe1eebe7c80956893f;hp=87c178436f90d105efa56f0ee90959e6dbd2e997;hpb=a0dc65b45f53d95747053ece26219759360f5eb6;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONPainterDataSourceFrame.cxx b/MUON/AliMUONPainterDataSourceFrame.cxx index 87c178436f9..9a507972a91 100644 --- a/MUON/AliMUONPainterDataSourceFrame.cxx +++ b/MUON/AliMUONPainterDataSourceFrame.cxx @@ -19,16 +19,19 @@ #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 "AliMUONPainterMatrix.h" #include "AliMUONPainterRegistry.h" #include "AliMUONRecoParam.h" -#include "AliMUONTrackerACFDataMaker.h" -#include "AliMUONTrackerCalibratedDataMaker.h" -#include "AliMUONTrackerOCDBDataMaker.h" -#include "AliMUONTrackerRawDataMaker.h" +#include "AliMUONTrackerConditionDataMaker.h" +#include "AliMUONTrackerDataMaker.h" #include "AliRawReader.h" +#include #include #include #include @@ -37,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -65,18 +69,22 @@ 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)), + fEventRangeButton(new TGCheckButton(fRawSelector23,"Event range")), + fEventMin(new TGNumberEntry(fRawSelector23,-1,10)), + fEventMax(new TGNumberEntry(fRawSelector23,-1,10)), fRawOCDBPath(new TGTextEntry(fRawSelector22,"")), fOCDBSelector(new TGGroupFrame(this,"OCDB Path",kHorizontalFrame)), fDataReaders(new TGGroupFrame(this,"Data sources")), fFilePath(new TGTextEntry(fRawSelector21,"")), - fOCDBPath(new TGTextEntry(fOCDBSelector,"")), - fRunSelector(new TGNumberEntry(fOCDBSelector,0)), + fOCDBPath(new TGTextEntry(fOCDBSelector,"alien://folder=/alice/data/2010/OCDB")), + fRunSelector(new TGNumberEntry(fOCDBSelector,0,10)), fOCDBTypes(new TGComboBox(fOCDBSelector)), fRecentSources(new TGComboBox(fRecentSourceSelector)), fItems(new TObjArray), @@ -86,7 +94,7 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, { /// Ctor - AliMUONPainterRegistry* reg = AliMUONPainterRegistry::Instance(); + AliMUONPainterDataRegistry* reg = AliMUONPainterDataRegistry::Instance(); reg->Connect("DataMakerWasRegistered(AliMUONVTrackerDataMaker*)", "AliMUONPainterDataSourceFrame", @@ -138,19 +146,29 @@ 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); - fRawSelector23->AddFrame(fHistogramButton,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); - + 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)); @@ -159,6 +177,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", @@ -172,19 +191,30 @@ 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(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)); @@ -196,12 +226,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)); @@ -271,7 +303,8 @@ AliMUONPainterDataSourceFrame::CalibrateButtonClicked() if ( fCalibrateNoGain->IsOn() || fCalibrateGainConstantCapa->IsOn() || - fCalibrateGain->IsOn() ) + fCalibrateGain->IsOn() || + fCalibrateEmelecGain->IsOn() ) { fRawOCDBPath->SetEnabled(kTRUE); fRawOCDBPath->SetFocus(); @@ -300,6 +333,26 @@ AliMUONPainterDataSourceFrame::HistogramButtonClicked() } } +//_____________________________________________________________________________ +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() @@ -327,10 +380,7 @@ AliMUONPainterDataSourceFrame::CreateOCDBDataSource() TGTextLBEntry* t = static_cast(fOCDBTypes->GetSelectedEntry()); TString type = t->GetText()->GetString(); - CreateOCDBDataSource(cdbPath,runNumber,type); - - fOCDBPath->SetText(""); - fRunSelector->SetNumber(0); + CreateOCDBDataSource(cdbPath,runNumber,type); } //_____________________________________________________________________________ @@ -367,16 +417,20 @@ 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() ) { - AliMUONPainterRegistry::Instance()->Register(reader); + AliMUONMchViewApplication* app = dynamic_cast(gApplication); + if (!app) + { + AliError("Could not cast application to the expected type ! CHECK THAT !"); + } + + AliMUONPainterDataRegistry::Instance()->Register(reader); AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env(); @@ -384,47 +438,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 ) { - AliMUONPainterRegistry::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(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())); } //_____________________________________________________________________________ @@ -434,16 +571,25 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource() /// 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; + } } TString calibMode(""); - TString name("RAW"); if ( fCalibrateGain->IsOn() ) { @@ -456,6 +602,12 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource() calibMode = "GAINCONSTANTCAPA"; name = "CALG"; } + + if ( fCalibrateEmelecGain->IsOn() ) + { + calibMode = "INJECTIONGAIN"; + name = "CALE"; + } if ( fCalibrateNoGain->IsOn() ) { @@ -463,13 +615,16 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource() name = "CALZ"; } - uri = Form("%s%s;%s;%s;%s;%s;%s", + 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("%e",fHistoMax->GetNumber()), + Form("%d",(Int_t)(fEventMin->GetIntNumber())), + Form("%d",(Int_t)(fEventMax->GetIntNumber()))); if ( CreateRawDataSource(uri) ) { @@ -489,6 +644,8 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri) TString calibMode; TString sxmin("0.0"); TString sxmax("4096.0"); + TString emin("-1"); + TString emax("-1"); TObjArray* a = uri.Tokenize(";"); @@ -516,6 +673,16 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri) sxmax = static_cast(a->At(5))->String(); } + if ( a->GetLast() > 5 ) + { + emin = static_cast(a->At(6))->String(); + } + + if ( a->GetLast() > 6 ) + { + emax = static_cast(a->At(7))->String(); + } + AliRawReader* rawReader = 0x0; if ( filename.Contains(TRegexp("^alien")) ) @@ -558,35 +725,40 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri) // FIXME: where to get the reco params from in reality ? - reader = new AliMUONTrackerCalibratedDataMaker(recoParam, - rawReader, - ocdbPath.Data(), - calibMode.Data(), - histogram, - sxmin.Atof(), - sxmax.Atof()); + reader = new AliMUONTrackerDataMaker(recoParam, + rawReader, + ocdbPath.Data(), + calibMode.Data(), + histogram, + sxmin.Atof(), + sxmax.Atof()); } else { - reader = new AliMUONTrackerRawDataMaker(rawReader,histogram); + reader = new AliMUONTrackerDataMaker(rawReader,histogram); } + + reader->SetEventRange(emin.Atoi(),emax.Atoi()); reader->SetSource(filename.Data()); + + TString dsName(uri); - AliMUONPainterRegistry::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()); + 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; } @@ -618,7 +790,7 @@ AliMUONPainterDataSourceFrame::DataMakerWasRegistered(AliMUONVTrackerDataMaker* //_____________________________________________________________________________ void -AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(AliMUONVTrackerDataMaker* maker) +AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(const AliMUONVTrackerDataMaker* maker) { /// Update ourselves as a data reader was deleted @@ -718,7 +890,8 @@ AliMUONPainterDataSourceFrame::OpenRecentSource() TString uri(t->GetText()->GetString()); if ( uri.Contains(TRegexp("^RAW")) || uri.Contains(TRegexp("^HRAW")) || - uri.Contains(TRegexp("^CAL")) || uri.Contains(TRegexp("^HCAL")) ) + uri.Contains(TRegexp("^CAL")) || uri.Contains(TRegexp("^HCAL")) || + uri.Contains(TRegexp("^MEM")) ) { CreateRawDataSource(uri); }