fContLeft(0x0),
fContDrawOpt(0x0),
fChkDrawOptSame(0x0),
+ fChkDrawOptSparse(0x0),
fComboAddDrawOpt(0x0),
fContDrawSel(0x0),
fContDrawSelSubRunTime(0x0),
// 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);
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);
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);
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());
//
// 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;
while ( (o=next()) ){
fTree->AddFile(o->GetName());
}
+ arr->SetOwner();
delete arr;
if (!CheckChain()) return;
UseConfigFile(fConfigFile.Data());
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++);
}
}
}
//______________________________________________________________________________
-const char* AliTPCCalibViewerGUItime::GetDrawString(){
+const TString AliTPCCalibViewerGUItime::GetDrawString(){
//
// create draw string for ttree by combining the user requestsa
//
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());
// 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
//
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){
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;i<fTree->GetSelectedRows();++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; i<nrows; ++i){
- fValuesX.GetMatrixArray()[i]=xArr[index[i]];
- fValuesY.GetMatrixArray()[i]=fTree->GetV3()[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;
}
}
}
}
}
- varName=SubstituteUnderscores(branchTitle.Data());
+ varName=branchTitle;
+ SubstituteUnderscores(varName);
}
}
title+=varName;
//
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 {
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;
}
}
}
- UpdateValueArrays(graphOutput, xArr);
+ if (xArr) UpdateValueArrays(graphOutput, xArr);
// if (graphOutput){
// if (fIsCustomDraw){
// if (fDrawString.Contains(":")){
//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; ibin<nrows+1; ++ibin) newBins[ibin]=ibin;
+ graph->GetXaxis()->Set(nrows,newBins);
+ graph->GetXaxis()->LabelsOption("v");
+ for (Int_t i=0; i<nrows;++i)
+ graph->GetXaxis()->SetBinLabel(i+1,Form("%.0f",fRunNumbers.GetMatrixArray()[i]));
+ delete [] newBins;
+ }
graph->Draw(grDraw.Data());
graph->SetEditable(kFALSE);
TH1 *hist=graph->GetHistogram();
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();
}
//______________________________________________________________________________