X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONPainterDataSourceFrame.cxx;h=d4495e7a6c73264df76bd9464aac352f4cf24572;hb=f3f5888a932f29865d7e09739c9d93337bd9b97c;hp=d8864d7b52f181fff13262b84930c37bac3ebebc;hpb=66cdf5b356ddec79996c44150fae1a3b8755e933;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONPainterDataSourceFrame.cxx b/MUON/AliMUONPainterDataSourceFrame.cxx index d8864d7b52f..d4495e7a6c7 100644 --- a/MUON/AliMUONPainterDataSourceFrame.cxx +++ b/MUON/AliMUONPainterDataSourceFrame.cxx @@ -19,15 +19,21 @@ #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 "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 #include #include #include @@ -36,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -63,6 +70,7 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, 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)")), @@ -71,12 +79,15 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, fHistogramButton(new TGCheckButton(fRawSelector23,"Histogram")), fHistoMin(new TGNumberEntry(fRawSelector23,0)), fHistoMax(new TGNumberEntry(fRawSelector23,4096)), - fRawOCDBPath(new TGTextEntry(fRawSelector22,"")), + 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/2009/OCDB")), - fRunSelector(new TGNumberEntry(fOCDBSelector,0)), + 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), @@ -130,6 +141,7 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, 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)); @@ -139,19 +151,29 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, 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)); + + fRawSelector24->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)); @@ -174,13 +196,17 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, /// OCDB selection + 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("HV",3); - fOCDBTypes->AddEntry("Occupancy",4); + fOCDBTypes->AddEntry("RejectList",8); fOCDBTypes->Select(0); - fOCDBTypes->Resize(100,20); + fOCDBTypes->Resize(80,20); TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source"); createOCDBButton->Connect("Clicked()", @@ -206,14 +232,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->AddEntry("HV",3); + + fACFTypes->AddEntry("Config",7); fACFTypes->AddEntry("Occupancy",4); - fACFTypes->Select(0); - fACFTypes->Resize(100,20); + 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)); @@ -313,6 +339,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() @@ -377,15 +423,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(gApplication); + if (!app) + { + AliError("Could not cast application to the expected type ! CHECK THAT !"); + } + AliMUONPainterDataRegistry::Instance()->Register(reader); AliMUONPainterEnv* env = AliMUONPainterHelper::Instance()->Env(); @@ -394,47 +444,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(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())); } //_____________________________________________________________________________ @@ -488,14 +621,16 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource() name = "CALZ"; } - uri = Form("%s%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) ) { @@ -515,6 +650,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(";"); @@ -542,6 +679,18 @@ 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(); + } + + delete a; + AliRawReader* rawReader = 0x0; if ( filename.Contains(TRegexp("^alien")) ) @@ -563,14 +712,20 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri) } /// 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())); + 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(); AliMUONVTrackerDataMaker* reader(0x0); @@ -580,9 +735,27 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri) if ( ocdbPath.Length() > 0 ) { - AliMUONRecoParam* recoParam = AliMUONRecoParam::GetCosmicParam(); + + AliMUONRecoParam* recoParam(0x0); - // FIXME: where to get the reco params from in reality ? + AliCDBEntry* e = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam",runNumber); + if (e) + { + TObject* o = e->GetObject(); + if ( o->IsA() == TObjArray::Class() ) + { + TIter next(static_cast(o)); + AliMUONRecoParam* p; + while ( ( p = static_cast(next()) )) + { + if ( p->IsDefault()) recoParam = p; + } + } + else + { + recoParam = static_cast(o); + } + } reader = new AliMUONTrackerDataMaker(recoParam, rawReader, @@ -596,23 +769,28 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri) { reader = new AliMUONTrackerDataMaker(rawReader,histogram); } + + reader->SetEventRange(emin.Atoi(),emax.Atoi()); reader->SetSource(filename.Data()); + + TString dsName(uri); - 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()); + 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; } @@ -644,7 +822,7 @@ AliMUONPainterDataSourceFrame::DataMakerWasRegistered(AliMUONVTrackerDataMaker* //_____________________________________________________________________________ void -AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(AliMUONVTrackerDataMaker* maker) +AliMUONPainterDataSourceFrame::DataMakerWasUnregistered(const AliMUONVTrackerDataMaker* maker) { /// Update ourselves as a data reader was deleted