]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDdEdxCalibUtils.cxx
- load TRD on-line gain tables together with TRAP configuration
[u/mrichter/AliRoot.git] / TRD / AliTRDdEdxCalibUtils.cxx
index f8574c12511e5a891a9feda0a1339c5688381a8b..de5eda2281f0b48427b805f30776c2048d0d9982 100644 (file)
@@ -57,7 +57,7 @@
 #include "AliTRDdEdxCalibHistArray.h"
 #include "AliTRDdEdxCalibUtils.h"
 
-#define EPSILON 1e-12
+#define EPSILON 1e-8
 
 AliTRDdEdxCalibHistArray * AliTRDdEdxCalibUtils::fgHistArray = 0x0;
 TObjArray * AliTRDdEdxCalibUtils::fgObjArray = 0x0;
@@ -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", run<0? 0 : run , run<0 ? 999999999 : run);
   AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(path);
   gStorage->Put(arr8, id1, metaData);
 
@@ -218,10 +226,16 @@ void AliTRDdEdxCalibUtils::FillHist(const Int_t ncls, const TVectorD *arrayQ, co
   if(!hcalib){printf("AliTRDdEdxCalibUtils::FillCalibHist errro hcalib null!!\n"); exit(1);}
 
   for(Int_t ii=0; ii<ncls; ii++){
-    const Double_t dq = (*arrayQ)[ii];
-    const Double_t xx = (*arrayX)[ii];
-
+    Double_t dq = (*arrayQ)[ii]/scale;
+    const Double_t qmin = hcalib->GetAxis(1)->GetXmin() +0.5 * hcalib->GetAxis(1)->GetBinWidth(1);
     const Double_t qmax = hcalib->GetAxis(1)->GetXmax() -0.5 * hcalib->GetAxis(1)->GetBinWidth(1);
+
+    if(dq<qmin)
+      dq = qmin;
+    if(dq>qmax)
+      dq = qmax;
+
+    const Double_t xx = (*arrayX)[ii];
     const Double_t xmin = hcalib->GetAxis(0)->GetXmin();
     const Double_t xmax = hcalib->GetAxis(0)->GetXmax();
 
@@ -229,7 +243,7 @@ void AliTRDdEdxCalibUtils::FillHist(const Int_t ncls, const TVectorD *arrayQ, co
       printf("AliTRDdEdxCalibUtils::FillCalibHist error x overflow or underflow! %s %15f %15f %15f\n", hcalib->GetName(),  xx, xmin, xmax); exit(1);
     }
 
-    const Double_t var[]={xx, TMath::Min(dq, qmax)/scale};
+    const Double_t var[]={xx, dq};
     hcalib->Fill(var);
   }
 }
@@ -277,7 +291,7 @@ Double_t AliTRDdEdxCalibUtils::GetCalibTPCscale(const Int_t tpcncls, const Doubl
   if(tpcsig<EPSILON)
     return -999;
 
-  return tpcsig/120;
+  return tpcsig/45;
 
 }
 
@@ -332,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:
@@ -397,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)
 {