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.
fOutliersFitChargeLow(0.03),
fOutliersFitChargeHigh(0.7),
fBeginFitCharge(3.5),
- fPHQon(kTRUE)
+ fPHQon(kTRUE),
+ fDebugPHQon(kFALSE)
{
//
// default constructor
//
//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;
}
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
AliTRDPreprocessorOffline(const AliTRDPreprocessorOffline&); // not implemented
Bool_t fPHQon; //switch of PHQ
+ Bool_t fDebugPHQon; //switch of DebugPHQ
ClassDef(AliTRDPreprocessorOffline,4)
};
#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
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);
}
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);
//
//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());
}
//===================================================================================
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"};
}
}
-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);
if(tpcsig<EPSILON)
return -999;
- return tpcsig/120;
+ return tpcsig/45;
}
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:
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)
{
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);
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);