TRD/AliTRDdEdxCalibHistArray.cxx Redefine nbin, min and max in initialization.
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 May 2012 13:22:06 +0000 (13:22 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 May 2012 13:22:06 +0000 (13:22 +0000)
TRD/AliTRDdEdxBaseUtils.cxx            Cleanup unneeded include's.
                                       TRD truncation fraction optimized in accordance with RNDClusterQ: 0-0.55.
                                       Bug in FitSlicesY fixed: should set axis following the input th2d y-axis.

TRD/AliTRDdEdxCalibUtils.h             Combine GenerateDefaultOCDB and Output -> GeneratOCDB
TRD/AliTRDdEdxCalibUtils.cxx           GeneratOCDB related.
                                       Qscale and tpcscale both modified.

TRD/AliTRDPreprocessorOffline.cxx      Add fDebugPHQon, if kTRUE, analysis hists and tree will be produced.
TRD/AliTRDPreprocessorOffline.h        fDebugPHQon related.

TRD/AliTRDPreprocessorOffline.cxx
TRD/AliTRDPreprocessorOffline.h
TRD/AliTRDdEdxBaseUtils.cxx
TRD/AliTRDdEdxCalibHistArray.cxx
TRD/AliTRDdEdxCalibUtils.cxx
TRD/AliTRDdEdxCalibUtils.h

index ddc1fd4..c6e0ccc 100644 (file)
@@ -128,7 +128,8 @@ ClassImp(AliTRDPreprocessorOffline)
   fOutliersFitChargeLow(0.03),
   fOutliersFitChargeHigh(0.7),
   fBeginFitCharge(3.5),
-  fPHQon(kTRUE)
+  fPHQon(kTRUE),
+  fDebugPHQon(kFALSE)
 {
   //
   // default constructor
@@ -952,14 +953,35 @@ Bool_t AliTRDPreprocessorOffline::AnalyzePHQ(Int_t startRunNumber)
   //
   //Produce PHQ calibration results
   //
+  TList *lout = 0x0;
+  TTreeSRedirector *calibStream = 0x0;
+  if(IsDebugPHQon()){
+    lout = new TList;
+    lout->SetOwner();
+
+    calibStream = new TTreeSRedirector(Form("TRDCalibStream_%010d.root", startRunNumber));
+  }
+
   for(Int_t iter=0; iter<AliTRDdEdxCalibUtils::GetHistArray()->GetSize(); iter++){
     THnBase *hi = (THnBase*) AliTRDdEdxCalibUtils::GetHistAt(iter);
-    TObjArray *obji = AliTRDdEdxCalibUtils::HistToObj(hi, startRunNumber);
+    TObjArray *obji = AliTRDdEdxCalibUtils::HistToObj(hi, startRunNumber, lout, calibStream);
     //printf("test analyze %s\n", obji->GetName());
     AliTRDdEdxCalibUtils::GetObjArray()->AddAt(obji, iter);
   }
 
   fCalibObjects->AddAt(AliTRDdEdxCalibUtils::GetObjArray(), kPHQ);
+
+  if(lout){
+    TFile *fout=new TFile(Form("TRDCalibList_%010d.root", startRunNumber),"recreate");
+    fout->cd();
+    lout->Write();
+    fout->Save();
+    fout->Close();
+    delete fout;
+  }
+  delete calibStream;
+  delete lout;
+
   return kTRUE;
 }
 
index 3429c07..c540afb 100644 (file)
@@ -196,6 +196,9 @@ public:
   Bool_t IsPHQon() const { return fPHQon ;};
   void SetPHQon(const Bool_t kphq){ fPHQon = kphq; }
 
+  Bool_t IsDebugPHQon() const { return fDebugPHQon ;};
+  void SetDebugPHQon(const Bool_t kphq){ fDebugPHQon = kphq; }
+
  private:
   Bool_t fMethodSecond;                      // Second Method for drift velocity   
   TString fNameList;                         // Name of the list
@@ -266,6 +269,7 @@ private:
   AliTRDPreprocessorOffline(const AliTRDPreprocessorOffline&); // not implemented
 
   Bool_t fPHQon;                 //switch of PHQ
+  Bool_t fDebugPHQon;                 //switch of DebugPHQ
 
   ClassDef(AliTRDPreprocessorOffline,4)
 };
index 8021a0f..672c1b2 100644 (file)
 
 #include "TTreeStream.h"
 
-#include "AliCDBId.h"
-#include "AliCDBMetaData.h"
-#include "AliCDBStorage.h"
 #include "AliESDEvent.h"
 #include "AliESDfriendTrack.h"
 #include "AliESDtrack.h"
-#include "AliTRDcalibDB.h"
-#include "AliTRDCalROC.h"
 #include "AliTRDtrackV1.h"
 
 #include "AliTRDdEdxBaseUtils.h"
 
 #define EPSILON 1e-12
 
-Double_t AliTRDdEdxBaseUtils::fgQ0Frac = 0.3;
+Double_t AliTRDdEdxBaseUtils::fgQ0Frac = 0.55;
 Double_t AliTRDdEdxBaseUtils::fgQ1Frac = 0.5;
 Double_t AliTRDdEdxBaseUtils::fgTimeBinCountCut = 0.0; 
 Int_t    AliTRDdEdxBaseUtils::fgCalibTPCnclsCut = 70;
 Bool_t   AliTRDdEdxBaseUtils::fgExBOn = kTRUE; 
 Bool_t   AliTRDdEdxBaseUtils::fgPadGainOn = kTRUE;
-Double_t AliTRDdEdxBaseUtils::fgQScale = 45;
+Double_t AliTRDdEdxBaseUtils::fgQScale = 50;
 
 //===================================================================================
 //                                   Math and Histogram
@@ -294,6 +289,12 @@ void AliTRDdEdxBaseUtils::FitSlicesY(const TH2D *hh, TH1D *&hnor, TH1D *&hmpv, T
   hwid = new TH1D(Form("%s_wid",hh->GetName()), "", nx, xmin, xmax);
   hres = new TH1D(Form("%s_res",hh->GetName()), "", nx, xmin, xmax);
 
+  Double_t newbins[ny+1];
+  for(Int_t ii=1; ii<=ny+1; ii++){
+    const Double_t lowx= hh->GetYaxis()->GetBinLowEdge(ii);
+    newbins[ii-1]=lowx;
+  }
+
   for(Int_t ix=x0; ix<=x1; ix++){
     //to speed up
     const Double_t rawcount = hh->Integral(ix,ix,0, ny+1);
@@ -302,6 +303,7 @@ void AliTRDdEdxBaseUtils::FitSlicesY(const TH2D *hh, TH1D *&hnor, TH1D *&hmpv, T
     }
 
     TH1D *htmp = new TH1D(Form("FitSlicesY_%s_%d", hh->GetName(), ix),"",ny, ymin, ymax);
+    htmp->GetXaxis()->Set(ny, newbins);
     Double_t ntot = 0;
     for(Int_t iy=y0; iy<=y1; iy++){
       const Double_t be = hh->GetBinError(ix,iy);
@@ -535,7 +537,7 @@ void AliTRDdEdxBaseUtils::PrintControl()
   //
   //print out control variable
   //
-  printf("\nAliTRDdEdxBaseUtils::PrintControl Q0Frac %.1f, Q1Frac %.1f, TimeBinCountCut %.2f, CalibTPCnclsCut %d, IsExBOn %d, IsPadGainOn %d, QScale %.2f\n\n", Q0Frac(), Q1Frac(), TimeBinCountCut(), CalibTPCnclsCut(), IsExBOn(), IsPadGainOn(), QScale());
+  printf("\nAliTRDdEdxBaseUtils::PrintControl Q0Frac %.2f, Q1Frac %.2f, TimeBinCountCut %.2f, CalibTPCnclsCut %d, IsExBOn %d, IsPadGainOn %d, QScale %.2f\n\n", Q0Frac(), Q1Frac(), TimeBinCountCut(), CalibTPCnclsCut(), IsExBOn(), IsPadGainOn(), QScale());
 }
 
 //===================================================================================
index 310d534..88b7851 100644 (file)
@@ -43,9 +43,9 @@ AliTRDdEdxCalibHistArray::AliTRDdEdxCalibHistArray(const Bool_t kNoInv):
   SetName(GetArrayName());
   SetOwner(kTRUE);
 
-  const Int_t    nbin[2]={AliTRDdEdxBaseUtils::NTRDtimebin(), 100};
-  const Double_t xmin[2]={0,       0.1};
-  const Double_t xmax[2]={nbin[0], 20};
+  const Int_t    nbin[2]={AliTRDdEdxBaseUtils::NTRDtimebin(), 200};
+  const Double_t xmin[2]={0,       0.01};
+  const Double_t xmax[2]={nbin[0], 10};
   const TString aname[2]={"globalTimeBin", "trdqovertpc"};
   const TString atitle[2]={"det * AliTRDseedV1::kNtb + itb", "TRD-Cluster-Q / TPC-Signal"};
 
index 790bb0e..d733253 100644 (file)
@@ -102,37 +102,45 @@ void AliTRDdEdxCalibUtils::DeleteObjArray()
   }
 }
 
-Bool_t AliTRDdEdxCalibUtils::GenerateDefaultOCDB(const TString path)
+Bool_t AliTRDdEdxCalibUtils::GenerateOCDB(const Int_t run, const TString path)
 {
   //
-  //generate default OCDB object PHQ, do like
-  //AliTRDdEdxCalibUtils::GenerateDefaultPHQOCDB("local://./")
+  //generate OCDB object PHQ, do like
+  //AliTRDdEdxCalibUtils::GenerateOCDB(run, "local://./")
+  //if fgObjArray==0x0, generate default one
+  //else generate according to fgObjArray
   //
 
-  TObjArray * arr8 = new TObjArray(8);
-  arr8->SetOwner();
-
-  for(Int_t ii=0; ii<8; ii++){
-    TObjArray * arr1 = new TObjArray(1);
-    arr1->SetOwner();
-    TString objn(AliTRDdEdxCalibHistArray::GetNameAt(ii));
-    objn.ReplaceAll("Hist","Obj");
-    arr1->SetName(objn);
-
-    const Int_t nbins = AliTRDdEdxBaseUtils::NTRDtimebin();
-    TVectorD * vec = new TVectorD(nbins);
-    for(Int_t jj=0; jj<nbins; jj++){
-      (*vec)[jj] = 1;
+  TObjArray * arr8 = 0x0;
+  if(fgObjArray){
+    arr8 = fgObjArray;
+  }
+  else{
+    arr8 = new TObjArray(8);
+    arr8->SetOwner();
+
+    for(Int_t ii=0; ii<8; ii++){
+      TObjArray * arr1 = new TObjArray(1);
+      arr1->SetOwner();
+      TString objn(AliTRDdEdxCalibHistArray::GetNameAt(ii));
+      objn.ReplaceAll("Hist","Obj");
+      arr1->SetName(objn);
+      
+      const Int_t nbins = AliTRDdEdxBaseUtils::NTRDtimebin();
+      TVectorD * vec = new TVectorD(nbins);
+      for(Int_t jj=0; jj<nbins; jj++){
+        (*vec)[jj] = 1;
+      }
+      arr1->Add(vec);
+      arr8->Add(arr1);
     }
-    arr1->Add(vec);
-    arr8->Add(arr1);
   }
 
   AliCDBMetaData *metaData= new AliCDBMetaData();
   metaData->SetObjectClassName("TObjArray");
   metaData->SetResponsible("Raphaelle Bailhache and Xianguo Lu");
 
-  AliCDBId id1("TRD/Calib/PHQ", 0, 999999999);
+  AliCDBId id1("TRD/Calib/PHQ", 0, run<0 ? 999999999 : run);
   AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(path);
   gStorage->Put(arr8, id1, metaData);
 
@@ -283,7 +291,7 @@ Double_t AliTRDdEdxCalibUtils::GetCalibTPCscale(const Int_t tpcncls, const Doubl
   if(tpcsig<EPSILON)
     return -999;
 
-  return tpcsig/120;
+  return tpcsig/45;
 
 }
 
@@ -338,62 +346,6 @@ void AliTRDdEdxCalibUtils::GetPHCountMeanRMS(const TH1D *hnor, TH1D *&hmean)
   delete obj;
 }
 
-void AliTRDdEdxCalibUtils::Output(const TList *lin, Int_t run)
-{
-  //
-  //produce calibration objects
-  //
-
-  TString objnames;
-  for(Int_t iter=0; iter<8; iter++){
-    objnames+= AliTRDdEdxCalibHistArray::GetNameAt(iter)+" ";
-  }
-
-  TList * lout = new TList;
-  lout->SetOwner();
-
-  TTreeSRedirector *calibStream = new TTreeSRedirector(Form("TRDCalibStream_%010d.root", run));
-    
-  const Int_t nh=lin->GetEntries();
-  for(Int_t ii=0; ii<nh; ii++){
-    const THnBase *hh=(THnBase*)lin->At(ii);
-    const TString hname = hh->GetName();
-    if(!objnames.Contains(hname))
-      continue;
-
-    TObjArray * cobj0 = HistToObj(hh, run, lout, calibStream);
-    lout->Add(cobj0);
-  }
-
-  //lout->ls();
-
-  //=============================================================
-  //=============================================================
-  
-  TFile *fout=new TFile(Form("TRDCalibObj_%010d.root", run),"recreate");
-  fout->cd();
-  const Int_t nout=lout->GetEntries();
-  for(Int_t ii=0; ii<nout; ii++){
-    const TString oname = lout->At(ii)->GetName();
-    if(oname.Contains("Obj")){
-      TObjArray * cobj = (TObjArray*) lout->At(ii);
-      cobj->Write(oname, TObjArray::kSingleKey);
-    }
-  }
-  fout->Save();
-  fout->Close();
-  delete fout;
-
-  fout=new TFile(Form("TRDCalibList_%010d.root", run),"recreate");
-  fout->cd();
-  lin->Write();
-  lout->Write();
-  fout->Save();
-  fout->Close();
-  delete fout;
-  
-  delete calibStream;
-
   /*
     http://root.cern.ch/root/html/TH1.html
     When an histogram is created, a reference to it is automatically added to the list of in-memory objects for the current file or directory. This default behaviour can be changed by:
@@ -403,8 +355,6 @@ void AliTRDdEdxCalibUtils::Output(const TList *lin, Int_t run)
     
     When the histogram is deleted, the reference to it is removed from the list of objects in memory. When a file is closed, all histograms in memory associated with this file are automatically deleted. 
   */
-  delete lout;
-}
 
 TObjArray* AliTRDdEdxCalibUtils::HistToObj(const THnBase *hh, Int_t run, TList *lout, TTreeSRedirector *calibStream)
 {
index 054b6d2..34aa29e 100644 (file)
@@ -63,7 +63,7 @@ class AliTRDdEdxCalibUtils
   static TObjArray * GetObj(const Bool_t kinvq, const Double_t mag, const Int_t charge);
   static TObjArray* HistToObj(const THnBase *hh, Int_t run=-999, TList *lout=0x0, TTreeSRedirector *calibStream=0x0);
   static void DeleteObjArray();
-  static Bool_t GenerateDefaultOCDB(const TString path="local://./");
+  static Bool_t GenerateOCDB(const Int_t run=-1, const TString path="local://./");
 
   static AliTRDdEdxCalibHistArray * GetHistArray(){return fgHistArray;}
   static THnBase * GetHistAt(const Int_t iter);
@@ -73,7 +73,6 @@ class AliTRDdEdxCalibUtils
   static void DeleteHistArray();
 
   static Double_t GetCalibTPCscale(const Int_t tpcncls, const Double_t tpcsig);
-  static void Output(const TList *lin, Int_t run);
   
  private:
   static void FillHist(const Int_t ncls, const TVectorD *arrayQ, const TVectorD *arrayX, THnBase * hcalib, const Double_t scale);