]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCCalibViewerGUItime.cxx
Geometry modified - added makrolon clams holding rods. Overlaps checked down to 1...
[u/mrichter/AliRoot.git] / TPC / AliTPCCalibViewerGUItime.cxx
index 8596d1ccf4211fc80841bf9f0fe1cf6ab983d79b..9ff9b906568b50ef6431142cb2b1ed2ace34d707 100644 (file)
@@ -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;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;
   }
 }
@@ -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; 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();
@@ -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();
 }
 
 //______________________________________________________________________________