X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCCalibViewerGUItime.cxx;h=9ff9b906568b50ef6431142cb2b1ed2ace34d707;hb=6e0ae02dc1e69442972e6edc620380b606f06900;hp=8596d1ccf4211fc80841bf9f0fe1cf6ab983d79b;hpb=909c8c990b3f26b648e4c4fe6541f2c2efbb29ef;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCCalibViewerGUItime.cxx b/TPC/AliTPCCalibViewerGUItime.cxx index 8596d1ccf42..9ff9b906568 100644 --- a/TPC/AliTPCCalibViewerGUItime.cxx +++ b/TPC/AliTPCCalibViewerGUItime.cxx @@ -103,6 +103,7 @@ TGCompositeFrame(p,w,h), fContLeft(0x0), fContDrawOpt(0x0), fChkDrawOptSame(0x0), + fChkDrawOptSparse(0x0), fComboAddDrawOpt(0x0), fContDrawSel(0x0), fContDrawSelSubRunTime(0x0), @@ -215,9 +216,19 @@ void AliTPCCalibViewerGUItime::DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h // draw options fContDrawOpt = new TGGroupFrame(fContLeft, "Draw options", kVerticalFrame | kFitWidth | kFitHeight); fContLeft->AddFrame(fContDrawOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0)); - fChkDrawOptSame = new TGCheckButton(fContDrawOpt, "Same"); - fContDrawOpt->AddFrame(fChkDrawOptSame, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0)); + + TGCompositeFrame *cfr = new TGCompositeFrame(fContDrawOpt, 200, 23, kHorizontalFrame | kFitWidth | kFixedHeight); + fContDrawOpt->AddFrame(cfr, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX , 0, 0, 0, 0)); + + fChkDrawOptSame = new TGCheckButton(cfr, "Same"); + cfr->AddFrame(fChkDrawOptSame, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0)); fChkDrawOptSame->SetToolTipText("Add draw option 'same'"); + + fChkDrawOptSparse = new TGCheckButton(cfr, "Sparse"); + cfr->AddFrame(fChkDrawOptSparse, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0)); + fChkDrawOptSparse->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "DoNewSelection()"); + fChkDrawOptSparse->SetToolTipText("In case of run trending only plot runs with information"); + // additional draw options combo box fComboAddDrawOpt = new TGComboBox(fContDrawOpt); fComboAddDrawOpt->Resize(0, 22); @@ -225,6 +236,7 @@ void AliTPCCalibViewerGUItime::DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h fContDrawOpt->AddFrame(fComboAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0)); // fComboAddDrawOpt->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral(=14)"); // fComboAddDrawOpt->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()"); + fComboAddDrawOpt->GetTextEntry()->SetText("",kFALSE); // draw selection group fContDrawSel = new TGGroupFrame(fContLeft, "Draw selection", kVerticalFrame | kFitWidth | kFitHeight); @@ -410,7 +422,7 @@ void AliTPCCalibViewerGUItime::DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h fContCustom->AddFrame(fComboCustomDraw, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0)); fComboCustomDraw->Connect("ReturnPressed()", "AliTPCCalibViewerGUItime", this, "DoCustomDraw()"); fComboCustomDraw->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoCustomDraw()"); - + fComboCustomDraw->GetTextEntry()->SetText("",kFALSE); // additional cuts container fContCustomCuts = new TGCompositeFrame(fContTopBottom, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight); @@ -428,7 +440,8 @@ void AliTPCCalibViewerGUItime::DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h fContCustomCuts->AddFrame(fComboCustomCuts, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0)); fComboCustomCuts->Connect("ReturnPressed()", "AliTPCCalibViewerGUItime", this, "DoCustomCutsDraw()"); fComboCustomCuts->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoCustomCutsDraw()"); - + fComboCustomCuts->GetTextEntry()->SetText("",kFALSE); + SetWindowName("AliTPCCalibViewer GUI - Time"); MapSubwindows(); Resize(GetDefaultSize()); @@ -448,9 +461,21 @@ void AliTPCCalibViewerGUItime::UseFile(const char* fileName, const char* treeNam // // retrieve tree from file // - TString s=gSystem->GetFromPipe(Form("ls %s",fileName)); -// TString s(fileName); - TObjArray *arr=s.Tokenize("\n"); + TObjArray *arr=0x0; + TString file(fileName); + if (file.Contains("://")) { + if (file.Contains(";")) { + arr=file.Tokenize(";"); + } else { + arr=new TObjArray; + arr->Add(new TObjString(fileName)); + } + } else { + TString s=gSystem->GetFromPipe(Form("ls %s",fileName)); + arr=s.Tokenize("\n"); + } + + if (!arr) return; TIter next(arr); TObject *o=0; if (fTree) delete fTree; @@ -458,6 +483,7 @@ void AliTPCCalibViewerGUItime::UseFile(const char* fileName, const char* treeNam while ( (o=next()) ){ fTree->AddFile(o->GetName()); } + arr->SetOwner(); delete arr; if (!CheckChain()) return; UseConfigFile(fConfigFile.Data()); @@ -465,7 +491,7 @@ void AliTPCCalibViewerGUItime::UseFile(const char* fileName, const char* treeNam } //______________________________________________________________________________ -void AliTPCCalibViewerGUItime::UseChain(TChain* chain = 0) +void AliTPCCalibViewerGUItime::UseChain(TChain *const chain = 0) { // // @@ -548,14 +574,14 @@ void AliTPCCalibViewerGUItime::FillCalibTypes() if (type.IsNull()) type="UNSPECIFIED"; // printf("CalibType: '%s'\n",type.Data()); if (!fListCalibType->FindEntry(type.Data())) { - fListCalibType->AddEntry(type,id); + fListCalibType->AddEntry(type.Data(),id); fListCalibType->Select(id++); } } //add type for unspecified calibration type type="UNSPECIFIED"; if (!fListCalibType->FindEntry(type.Data())) { - fListCalibType->AddEntry(SubstituteUnderscores(type.Data()),id); + fListCalibType->AddEntry(type.Data(),id); fListCalibType->Select(id++); } } @@ -650,7 +676,7 @@ void AliTPCCalibViewerGUItime::AddReferenceTree(const char* treeFileName, const } //______________________________________________________________________________ -const char* AliTPCCalibViewerGUItime::GetDrawString(){ +const TString AliTPCCalibViewerGUItime::GetDrawString(){ // // create draw string for ttree by combining the user requestsa // @@ -662,8 +688,10 @@ const char* AliTPCCalibViewerGUItime::GetDrawString(){ id=fListVariables->GetSelectedEntry()->EntryId(); // printf("id: %d\n",id); TString branchName=selectedVariable; - const TObject *key=(*fConfigParser)(id); - if (key) branchName=(*fConfigParser)(id)->GetName(); + if (fConfigParser){ + const TObject *key=(*fConfigParser)(id); + if (key) branchName=(*fConfigParser)(id)->GetName(); + } //treat case of TVector if (branchName.EndsWith(".")){ Int_t par = (Int_t)(fNmbPar->GetNumber()); @@ -674,10 +702,10 @@ const char* AliTPCCalibViewerGUItime::GetDrawString(){ // if (fRadioXtime->GetState()==kButtonDown) // selectedVariable.Append(":time"); - return branchName.Data(); + return branchName; } //______________________________________________________________________________ -const char* AliTPCCalibViewerGUItime::GetDrawOptionString(){ +const TString AliTPCCalibViewerGUItime::GetDrawOptionString(){ // // get user selected draw options // @@ -685,7 +713,7 @@ const char* AliTPCCalibViewerGUItime::GetDrawOptionString(){ if (fComboAddDrawOpt->GetSelectedEntry()) drawOpt=fComboAddDrawOpt->GetSelectedEntry()->GetTitle(); if (fChkDrawOptSame->GetState()==kButtonDown && !drawOpt.Contains("same",TString::kIgnoreCase)) drawOpt+="same"; - return drawOpt.Data(); + return drawOpt; } //______________________________________________________________________________ void AliTPCCalibViewerGUItime::GetCutString(TString &cutStr){ @@ -716,13 +744,50 @@ void AliTPCCalibViewerGUItime::UpdateValueArrays(Bool_t withGraph, const Double_ fRunNumbers.ResizeTo(nrows); fTimeStamps.ResizeTo(nrows); long long *index=new long long[nrows]; - TMath::Sort(nrows,fTree->GetV2(),index,kFALSE); + + //sort data + Int_t nTime0=0; + for (Int_t i=0;iGetSelectedRows();++i){ + if (fTree->GetV2()[i]<1) ++nTime0; + } + + if (nTime0==fTree->GetSelectedRows()){ + TMath::Sort(nrows,fTree->GetV1(),index,kFALSE); + } else { + TMath::Sort(nrows,fTree->GetV2(),index,kFALSE); + } + + Double_t lastRun=-1.; + Int_t entries=0; + const Bool_t drawSparse=(fRadioXrun->GetState()==kButtonDown && fChkDrawOptSparse->GetState()==kButtonDown); for (Long64_t i=0; iGetV3()[index[i]]; - fRunNumbers.GetMatrixArray()[i]=fTree->GetV1()[index[i]]; - fTimeStamps.GetMatrixArray()[i]=fTree->GetV2()[index[i]]; + // in case of sparse drawing only use the first entry per run + Double_t run = fTree->GetV1()[index[i]]; + Double_t xval = xArr[index[i]]; + + if (drawSparse){ + if (TMath::Abs(lastRun-run)<.1) { + lastRun=run; + continue; + } + xval=entries+0.5; + } + fValuesX.GetMatrixArray()[entries]=xval; + fValuesY.GetMatrixArray()[entries]=fTree->GetV3()[index[i]]; + fRunNumbers.GetMatrixArray()[entries]=run; + fTimeStamps.GetMatrixArray()[entries]=fTree->GetV2()[index[i]]; + lastRun=run; + ++entries; + } + + if (drawSparse){ + fValuesX.ResizeTo(entries); + fValuesY.ResizeTo(entries); + fRunNumbers.ResizeTo(entries); + fTimeStamps.ResizeTo(entries); + // printf("entries: %d\n",entries); } + delete [] index; } } @@ -780,7 +845,8 @@ void AliTPCCalibViewerGUItime::GetHistogramTitle(TString &title) } } } - varName=SubstituteUnderscores(branchTitle.Data()); + varName=branchTitle; + SubstituteUnderscores(varName); } } title+=varName; @@ -795,11 +861,11 @@ void AliTPCCalibViewerGUItime::AdjustYRange() // TIter nextGraphicObject(fTrashBox); TObject *o=0x0; - Float_t min=0,max=0; + Float_t min=1,max=0; while ( (o=nextGraphicObject()) ){ if (o->IsA()==TGraph::Class()){ TGraph *gr=(TGraph*)o; - if (min==max) { + if (min>max) { min=TMath::MinElement(gr->GetN(),gr->GetY()); max=TMath::MaxElement(gr->GetN(),gr->GetY()); } else { @@ -855,6 +921,7 @@ void AliTPCCalibViewerGUItime::DoDraw() { fCurrentGraph=0x0; fCurrentHist=0x0; } +// printf("%s (%s) [%s]\n",drawString.Data(), cutString.Data(), optString.Data()); //select data fTree->Draw(drawString.Data(),cutString.Data(),optString.Data()); if (fTree->GetSelectedRows()==-1) return; @@ -880,7 +947,7 @@ void AliTPCCalibViewerGUItime::DoDraw() { } } } - UpdateValueArrays(graphOutput, xArr); + if (xArr) UpdateValueArrays(graphOutput, xArr); // if (graphOutput){ // if (fIsCustomDraw){ // if (fDrawString.Contains(":")){ @@ -903,9 +970,21 @@ void AliTPCCalibViewerGUItime::DoDraw() { //create graph according to selection if (drawGraph){ TGraph *graph=new TGraph(fValuesX,fValuesY); +// graph->Sort(); TString grDraw="p"; if (!drawSame) grDraw+="a"; if (!fIsCustomDraw) grDraw+="l"; + // sparse drawing, set bin labels + if (fRadioXrun->GetState()==kButtonDown && fChkDrawOptSparse->GetState()==kButtonDown){ + Int_t nrows=fValuesX.GetNrows(); + Double_t *newBins = new Double_t[nrows+1]; + for (Int_t ibin=0; ibinGetXaxis()->Set(nrows,newBins); + graph->GetXaxis()->LabelsOption("v"); + for (Int_t i=0; iGetXaxis()->SetBinLabel(i+1,Form("%.0f",fRunNumbers.GetMatrixArray()[i])); + delete [] newBins; + } graph->Draw(grDraw.Data()); graph->SetEditable(kFALSE); TH1 *hist=graph->GetHistogram(); @@ -964,7 +1043,7 @@ void AliTPCCalibViewerGUItime::DoDumpRuns() if (run!=prevRun) std::cout << Form("%d",run) << std::endl; prevRun=run; } - delete sortIndex; + delete [] sortIndex; } //______________________________________________________________________________ void AliTPCCalibViewerGUItime::DoParLimitChange() @@ -1250,16 +1329,14 @@ void AliTPCCalibViewerGUItime::SetGuiTree(Int_t run) fCalibViewerGUI->Reload(); } //______________________________________________________________________________ -const char* AliTPCCalibViewerGUItime::SubstituteUnderscores(const char* in) +void AliTPCCalibViewerGUItime::SubstituteUnderscores(TString &s) { // // // - TString s(in); s.ReplaceAll("_{","|{"); s.ReplaceAll("_"," "); s.ReplaceAll("|{","_{"); - return s.Data(); } //______________________________________________________________________________