#include "TF1.h"
#include "TFile.h"
#include "TH1F.h"
+#include "TH1C.h"
#include "TH2F.h"
//#include "TList.h"
//#include "TROOT.h"
#include "AliTOFResponseParams.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
+#include "TRandom.h"
class TROOT;
class TStyle;
fT0Fill(NULL),
fRunParams(NULL),
fResponseParams(NULL),
+ fReadoutEfficiency(NULL),
+ fProblematic(NULL),
fInitFlag(kFALSE),
fRemoveMeanT0(kTRUE),
fCalibrateTOFsignal(kTRUE),
{
//TOF Calibration Class ctor
fNChannels = AliTOFGeometry::NSectors()*(2*(AliTOFGeometry::NStripC()+AliTOFGeometry::NStripB())+AliTOFGeometry::NStripA())*AliTOFGeometry::NpadZ()*AliTOFGeometry::NpadX();
+
+ gRandom->SetSeed(123456789);
}
//____________________________________________________________________________
fT0Fill(NULL),
fRunParams(NULL),
fResponseParams(NULL),
+ fReadoutEfficiency(NULL),
+ fProblematic(NULL),
fInitFlag(calib.fInitFlag),
fRemoveMeanT0(calib.fRemoveMeanT0),
fCalibrateTOFsignal(calib.fCalibrateTOFsignal),
fCorrectTExp(calib.fCorrectTExp)
{
+
+ fTOFCalOnline = new TObjArray(fNChannels);
+ fTOFCalOnlinePulser = new TObjArray(fNChannels);
+ fTOFCalOnlineNoise = new TObjArray(fNChannels);
+ fTOFCalOnlineHW = new TObjArray(fNChannels);
+ fTOFCalOffline = new TObjArray(fNChannels);
+ fTOFCalOnline->SetOwner();
+ fTOFCalOnlinePulser->SetOwner();
+ fTOFCalOnlineNoise->SetOwner();
+ fTOFCalOnlineHW->SetOwner();
+ fTOFCalOffline->SetOwner();
+
//TOF Calibration Class copy ctor
for (Int_t iarray = 0; iarray<fNChannels; iarray++){
AliTOFChannelOnline * calChOnline = (AliTOFChannelOnline*)calib.fTOFCalOnline->At(iarray);
if (calib.fT0Fill) fT0Fill = new AliTOFT0Fill(*calib.fT0Fill);
if (calib.fRunParams) fRunParams = new AliTOFRunParams(*calib.fRunParams);
if (calib.fResponseParams) fResponseParams = new AliTOFResponseParams(*calib.fResponseParams);
+ if (calib.fReadoutEfficiency) fReadoutEfficiency = new TH1F(*calib.fReadoutEfficiency);
+ if (calib.fProblematic) fProblematic = new TH1C(*calib.fProblematic);
+
+ gRandom->SetSeed(123456789);
}
//____________________________________________________________________________
if (fResponseParams) *fResponseParams = *calib.fResponseParams;
else fResponseParams = new AliTOFResponseParams(*calib.fResponseParams);
}
+ if (calib.fReadoutEfficiency) {
+ if (fReadoutEfficiency) *fReadoutEfficiency = *calib.fReadoutEfficiency;
+ else fReadoutEfficiency = new TH1F(*calib.fReadoutEfficiency);
+ }
+ if (calib.fProblematic) {
+ if (fProblematic) *fProblematic = *calib.fProblematic;
+ else fProblematic = new TH1C(*calib.fProblematic);
+ }
fInitFlag = calib.fInitFlag;
fRemoveMeanT0 = calib.fRemoveMeanT0;
fCalibrateTOFsignal = calib.fCalibrateTOFsignal;
if (fCTPLatency) delete fCTPLatency;
if (fT0Fill) delete fT0Fill;
if (fRunParams) delete fRunParams;
+ if (fResponseParams) delete fResponseParams;
+ if (fReadoutEfficiency) delete fReadoutEfficiency;
+ if (fProblematic) delete fProblematic;
}
if (fTree!=0x0) delete fTree;
if (fChain!=0x0) delete fChain;
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Config" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF configuration map for online calib on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
//Write calibration parameters to the CDB with infinite validity
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Config" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF config map for online calib on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOnlineDelay" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF online calib obj on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Status" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF online status calib obj on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
//Write calibration parameters to the CDB with infinite validity -------> new calib objs!!!!!
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOnlineDelay" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF online calib obj on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
//Write calibration parameters to the CDB with infinite validity -------> new calib objs!!!!!
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Status" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF online status calib obj on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOnline" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF online calib obj on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Pulser" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF online calib obj from pulser on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Noise" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF online calib obj from noise on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "HW" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF online calib obj from hardware on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
//Write calibration parameters to the CDB with infinite validity
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOnline" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF online calib obj on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
//Write calibration parameters from pulser to the CDB with infinite validity
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Pulser" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF online calib obj from pulser on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
//Write calibration parameters from noise to the CDB with infinite validity
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Noise" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF online calib obj from noise on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
//Write calibration parameters from hardware to the CDB with infinite validity
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "HW" ; // to be consistent with TOFPreprocessor
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF online calib obj from harware on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
SetLastRun(maxrun);
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOffline" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliDebug(2,Form("Writing TOF offline calib obj on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
AliCDBId id(out,fFirstRun,fLastRun);
AliCDBMetaData *md = new AliCDBMetaData();
//Write calibration parameters to the CDB with infinite validity
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOffline" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBRunRange runrange(fFirstRun,fLastRun);
AliDebug(2,Form("Writing TOF offline calib obj on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
AliCDBId id(out,runrange);
//Read calibration parameters from the CDB
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Config" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (ConfigMap) found!!!");
//Read calibration parameters from the CDB -------> new calib objs!!!!!
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOnlineDelay" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (ParOnlineDelay) found!!!");
//Read calibration parameters from the CDB -------> new calib objs!!!!!
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Status" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (Status) found!!!");
//Read calibration parameters from the CDB
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOnline" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (ParOnline) found!!!");
//Read calibration parameters from pulser from the CDB
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Pulser" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (Pulser) found!!!");
//Read calibration parameters from noise from the CDB
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "Noise" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (Noise) found!!!");
//Read calibration parameters from hardware from the CDB
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "HW" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (HW map) found!!!");
//Read calibration parameters from the CDB
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "ParOffline" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (ParOffline) found!!!");
fTOFSimToT=histo;
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "SimHisto" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBMetaData *mdhisto = new AliCDBMetaData();
mdhisto->SetResponsible("Chiara Zampolli");
AliCDBId id(out,minrun,maxrun);
// The Tot Histo
const Char_t *sel1 = "SimHisto" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (SimHisto) found!!!");
AliCDBMetaData *md = new AliCDBMetaData();
md->SetResponsible("Silvia Arcelli");
const Char_t *sel1 = "RecoParam" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBId id(out,minrun,maxrun);
- man->Put(param,id,md);
+
+ TObjArray *arr=new TObjArray(1);
+ arr->AddLast(param);
+ man->Put(arr,id,md);
+ //man->Put(param,id,md);
delete md;
}
//_____________________________________________________________________________
-AliTOFRecoParam * AliTOFcalib::ReadRecParFromCDB(const Char_t *sel, Int_t nrun)
+void AliTOFcalib::WriteRecParOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun, TObjArray *arr){
+ //Write reconstruction parameters to the CDB
+
+ AliCDBManager *man = AliCDBManager::Instance();
+ AliCDBMetaData *md = new AliCDBMetaData();
+ md->SetResponsible("Silvia Arcelli");
+ const Char_t *sel1 = "RecoParam" ;
+ TString out(Form("%s/%s",sel,sel1));
+ AliCDBId id(out,minrun,maxrun);
+ man->Put(arr,id,md);
+ delete md;
+}
+//_____________________________________________________________________________
+AliTOFRecoParam * AliTOFcalib::ReadRecParFromCDB(const Char_t *sel, Int_t nrun, Int_t eventType)
{
//Read reconstruction parameters from the CDB
AliCDBManager *man = AliCDBManager::Instance();
const Char_t *sel1 = "RecoParam" ;
- Char_t out[100];
- sprintf(out,"%s/%s",sel,sel1);
+ TString out(Form("%s/%s",sel,sel1));
AliCDBEntry *entry = man->Get(out,nrun);
if (!entry) {
AliFatal("Exiting, no CDB object (RecoParam) found!!!");
exit(0);
}
- AliTOFRecoParam *param=(AliTOFRecoParam*)entry->GetObject();
+ TObjArray *array = (TObjArray*)entry->GetObject();
+ AliTOFRecoParam *param=0x0;
+ if (eventType>=0 || eventType<array->GetEntries())
+ param=(AliTOFRecoParam*)array->At(eventType);
return param;
+
}
//-----------------------------------------------------------------------------
// Calibration methods
AliInfo(Form("No entry found for run %i",irun));
}
else{
- TTree *tree = new TTree();
- tree = (TTree*)entry->GetObject();
+ TTree *tree = (TTree*)entry->GetObject();
tree->SetBranchAddress("nentries",&nentries);
tree->SetBranchAddress("TOFentries",p);
fTree->CopyEntries(tree);
- delete tree;
fNruns++;
}
}
AliInfo("connected to alien");
TGrid::Connect("alien://");
- Char_t filename[100];
+ TString filename;
for (Int_t irun = minrun;irun<=maxrun;irun++){
- sprintf(filename,"alien:///alice/cern.ch/user/c/czampolli/TOFCalibReference_%i.root",irun);
- TFile *filegrid = TFile::Open(filename,"READ");
+ filename = Form("alien:///alice/cern.ch/user/c/czampolli/TOFCalibReference_%i.root",irun);
+ TFile *filegrid = TFile::Open(filename.Data(),"READ");
TTree *tree = (TTree*)filegrid->Get("T");
tree->SetBranchAddress("nentries",&nentries);
tree->SetBranchAddress("TOFentries",p);
fTree->SetDirectory(0);
fTree->Branch("nentries",&nentries,"nentries/I");
fTree->Branch("TOFentries",p,"TOFentries[nentries]/F");
- Char_t filename[100];
+ TString filename;
for (Int_t irun = minrun;irun<=maxrun;irun++){
- sprintf(filename,"$ALICE_ROOT/TOF/RefData/TreeForCalib/fileout_%i.root",irun);
- TFile *file = new TFile(filename,"READ");
+ filename = Form("$ALICE_ROOT/TOF/RefData/TreeForCalib/fileout_%i.root",irun);
+ TFile *file = new TFile(filename.Data(),"READ");
TTree *tree = (TTree*)file->Get("T");
tree->SetBranchAddress("nentries",&nentries);
tree->SetBranchAddress("TOFentries",p);
AliInfo("connected to alien");
TGrid::Connect("alien://");
- Char_t filename[100];
+ TString filename;
for (Int_t irun = minrun;irun<=maxrun;irun++){
- sprintf(filename,"alien:///alice/cern.ch/user/c/czampolli/TOFCalibReference_%i.root",irun);
- fChain->Add(filename);
+ filename = Form("alien:///alice/cern.ch/user/c/czampolli/TOFCalibReference_%i.root",irun);
+ fChain->Add(filename.Data());
fNruns++;
}
ntracksTotal+=nentries/3;
}
if (ntracksTotal < MEANENTRIES) {
- AliInfo(Form(" Too small mean number of entires in channel %i (number of tracks = %f), not calibrating channel and continuing.....",i,ntracksTotal));
+ AliInfo(Form(" Too small mean number of entires in channel %i (number of tracks = %d), not calibrating channel and continuing.....",i,ntracksTotal));
continue;
}
}
if (ntracksTotal < MEANENTRIES) {
- AliInfo(Form(" Too small mean number of entires per channel (mean number = %f) not calibrating and exiting.....",ntracksTotal));
+ AliInfo(Form(" Too small mean number of entires per channel (mean number = %d) not calibrating and exiting.....",ntracksTotal));
return 2;
}
- TH1F * hProf = new TH1F();
- hProf = Profile(ich);
+ TH1F * hProf = Profile(ich);
hProf->Fit("pol5",optionFit,"",0,4);
TF1 * calibfunc = (TF1*)hProf->GetFunction("pol5");
Float_t par[6];
ntracksTotal+=nentries/3;
}
if (ntracksTotal < MEANENTRIES) {
- AliInfo(Form(" Too small mean number of entires in channel %i (number of tracks = %f), not calibrating channel and continuing.....",ii,ntracksTotal));
+ AliInfo(Form(" Too small mean number of entires in channel %i (number of tracks = %d), not calibrating channel and continuing.....",ii,ntracksTotal));
continue;
}
Float_t meantime=0;
//----------------------------------------------------------------------------
+void
+AliTOFcalib::WriteReadoutEfficiencyOnCDB(const Char_t *sel , Int_t minrun, Int_t maxrun)
+{
+ /*
+ * write readout efficiency on CDB
+ */
+
+ if (!fReadoutEfficiency) return;
+ AliCDBId id(Form("%s/ReadoutEfficiency", sel), minrun, maxrun);
+ AliCDBMetaData *md = new AliCDBMetaData();
+ md->SetResponsible("Roberto Preghenella");
+ AliCDBManager *man = AliCDBManager::Instance();
+ man->Put(fReadoutEfficiency, id, md);
+ AliDebug(2,Form("ReadoutEfficiency written on CDB with run range [%i, %i] ",minrun ,maxrun));
+ delete md;
+}
+
+//----------------------------------------------------------------------------
+
+void
+AliTOFcalib::WriteProblematicOnCDB(const Char_t *sel , Int_t minrun, Int_t maxrun)
+{
+ /*
+ * write problematic on CDB
+ */
+
+ if (!fProblematic) return;
+ AliCDBId id(Form("%s/Problematic", sel), minrun, maxrun);
+ AliCDBMetaData *md = new AliCDBMetaData();
+ md->SetResponsible("Roberto Preghenella");
+ AliCDBManager *man = AliCDBManager::Instance();
+ man->Put(fProblematic, id, md);
+ AliDebug(2,Form("Problematic written on CDB with run range [%i, %i] ",minrun ,maxrun));
+ delete md;
+}
+
+//----------------------------------------------------------------------------
+
Bool_t
AliTOFcalib::ReadDeltaBCOffsetFromCDB(const Char_t *sel , Int_t nrun)
{
//----------------------------------------------------------------------------
+Bool_t
+AliTOFcalib::ReadReadoutEfficiencyFromCDB(const Char_t *sel , Int_t nrun)
+{
+ /*
+ * read readout efficiency from CDB
+ */
+
+ AliCDBManager *man = AliCDBManager::Instance();
+ AliCDBEntry *entry = man->Get(Form("%s/ReadoutEfficiency", sel),nrun);
+ if (!entry) {
+ AliFatal("No ReadoutEfficiency entry found in CDB");
+ exit(0);
+ }
+ fReadoutEfficiency = (TH1F *)entry->GetObject();
+ if(!fReadoutEfficiency){
+ AliFatal("No ReadoutEfficiency object found in CDB entry");
+ exit(0);
+ }
+ return kTRUE;
+}
+
+//----------------------------------------------------------------------------
+
+Bool_t
+AliTOFcalib::ReadProblematicFromCDB(const Char_t *sel , Int_t nrun)
+{
+ /*
+ * read problematic from CDB
+ */
+
+ AliCDBManager *man = AliCDBManager::Instance();
+ AliCDBEntry *entry = man->Get(Form("%s/Problematic", sel),nrun);
+ if (!entry) {
+ AliFatal("No Problematic entry found in CDB");
+ exit(0);
+ }
+ fProblematic = (TH1C *)entry->GetObject();
+ if(!fProblematic){
+ AliFatal("No Problematic object found in CDB entry");
+ exit(0);
+ }
+ return kTRUE;
+}
+
+//----------------------------------------------------------------------------
+
Bool_t
AliTOFcalib::Init(Int_t run)
{
AliError("cannot get \"RunParams\" object from OCDB");
return kFALSE;
}
+ /* get readout efficiency obj */
+ if (!ReadReadoutEfficiencyFromCDB("TOF/Calib", run)) {
+ AliError("cannot get \"ReadoutEfficiency\" object from OCDB");
+ return kFALSE;
+ }
+ /* get readout efficiency obj */
+ if (!ReadProblematicFromCDB("TOF/Calib", run)) {
+ AliError("cannot get \"Problematic\" object from OCDB");
+ return kFALSE;
+ }
/* get response params */
- if (fCorrectTExp) {
- TFile *responseFile = TFile::Open("$ALICE_ROOT/TOF/data/AliTOFresponsePar.root");
- if (!responseFile || !responseFile->IsOpen()) {
- AliError("cannot open \"ResponseParams\" local file");
- return kFALSE;
- }
- fResponseParams = (AliTOFResponseParams *)responseFile->Get("ResponseParams");
- if (!fResponseParams) {
- AliError("cannot get \"ResponseParams\" object from local file");
- return kFALSE;
- }
- responseFile->Close();
+ TFile *responseFile = TFile::Open("$ALICE_ROOT/TOF/data/AliTOFresponsePar.root");
+ if (!responseFile || !responseFile->IsOpen()) {
+ AliError("cannot open \"ResponseParams\" local file");
+ return kFALSE;
+ }
+ fResponseParams = (AliTOFResponseParams *)responseFile->Get("ResponseParams");
+ if (!fResponseParams) {
+ AliError("cannot get \"ResponseParams\" object from local file");
+ return kFALSE;
}
+ responseFile->Close();
/* all done */
fInitFlag = kTRUE;
//----------------------------------------------------------------------------
Bool_t
-AliTOFcalib::IsChannelEnabled(Int_t index)
+AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency, Bool_t checkProblematic)
{
/*
* is channel enabled
if (fStatus->GetPulserStatus(index) == AliTOFChannelOnlineStatusArray::kTOFPulserBad) return kFALSE;
if (fStatus->GetNoiseStatus(index) == AliTOFChannelOnlineStatusArray::kTOFNoiseBad) return kFALSE;
if (fStatus->GetHWStatus(index) == AliTOFChannelOnlineStatusArray::kTOFHWBad) return kFALSE;
+ if (checkEfficiency && !IsChannelEfficient(index)) return kFALSE;
+ if (checkProblematic && IsChannelProblematic(index)) return kFALSE;
/* good status */
return kTRUE;
}
+
+//----------------------------------------------------------------------------
+
+Bool_t
+AliTOFcalib::IsChannelEfficient(Int_t index)
+{
+ /*
+ * is channel efficient
+ */
+
+ if (!fInitFlag) {
+ AliError("class not yet initialized. Initialize it before.");
+ return kTRUE;
+ }
+
+ /* check efficiency */
+ if (fReadoutEfficiency->GetBinContent(index + 1) < 0.95) return kFALSE;
+ return kTRUE;
+
+}
+
+//----------------------------------------------------------------------------
+
+Bool_t
+AliTOFcalib::IsChannelProblematic(Int_t index)
+{
+ /*
+ * is channel problematic
+ */
+
+ if (!fInitFlag) {
+ AliError("class not yet initialized. Initialize it before.");
+ return kTRUE;
+ }
+
+ /* check problematic */
+ if (fProblematic->GetBinContent(index + 1) != 0) return kTRUE;
+ return kFALSE;
+
+}
+
+//----------------------------------------------------------------------------
+
+void
+AliTOFcalib::CalibrateTExp(AliESDEvent *event) const
+{
+ /*
+ * calibrate TExp
+ */
+
+ if (!fInitFlag) {
+ AliError("class not yet initialized. Initialize it before.");
+ return;
+ }
+
+ /* loop over tracks */
+ AliESDtrack *track = NULL;
+ Double_t texp[AliPID::kSPECIES];
+ for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
+
+ /* get track */
+ track = event->GetTrack(itrk);
+ if (!track || !(track->GetStatus() & AliESDtrack::kTOFout)) continue;
+
+ /* get integrated times */
+ track->GetIntegratedTimes(texp);
+ /* loop over particle types and correct expected time */
+ for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
+ texp[ipart] += fResponseParams->EvalTExpCorr(ipart, track->P());
+ /* set integrated times */
+ track->SetIntegratedTimes(texp);
+
+ }
+
+}
+
+//----------------------------------------------------------------------------
+
+Double_t
+AliTOFcalib::TuneForMC(AliESDEvent *event, Double_t resolution)
+{
+ /*
+ * tune for MC
+ */
+
+ /* get vertex spread and define T0-spread */
+ Double_t diamond2 = TMath::Abs(event->GetSigma2DiamondZ());
+ Double_t t0spread = TMath::Sqrt(diamond2) / 2.99792457999999984e-02;
+ /* generate random startTime */
+ Double_t startTime = gRandom->Gaus(0., t0spread);
+ /* define extra smearing for resolution */
+ Double_t defaultResolution = 80.;
+ Double_t extraSmearing = 0.;
+ if (resolution > defaultResolution)
+ extraSmearing = TMath::Sqrt(resolution * resolution - defaultResolution * defaultResolution);
+
+ /* loop over tracks */
+ AliESDtrack *track = NULL;
+ Double_t time;
+ for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
+ /* get track */
+ track = event->GetTrack(itrk);
+ if (!track) continue;
+ /* check TOF match */
+ if (!track->IsOn(AliESDtrack::kTOFout)) continue;
+ /* check if channel is enabled */
+ if (!IsChannelEnabled(track->GetTOFCalChannel())) {
+ /* reset TOF status */
+ track->ResetStatus(AliESDtrack::kTOFin);
+ track->ResetStatus(AliESDtrack::kTOFout);
+ track->ResetStatus(AliESDtrack::kTOFmismatch);
+ track->ResetStatus(AliESDtrack::kTOFpid);
+ }
+ /* get original time and manipulate it */
+ time = track->GetTOFsignal();
+ time += startTime; /* add start time */
+ time += gRandom->Gaus(0., extraSmearing); /* extra smearing */
+ time -= 25.; /* remove 25 ps to center the signal */
+ track->SetTOFsignal(time);
+ }
+
+ return startTime;
+}