#include "AliTOFCTPLatency.h"
#include "AliTOFT0Fill.h"
#include "AliTOFRunParams.h"
+#include "AliLHCClockPhase.h"
#include "AliTOFResponseParams.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
class TROOT;
class TStyle;
-extern TROOT *gROOT;
+//extern TROOT *gROOT;
extern TStyle *gStyle;
ClassImp(AliTOFcalib)
fCTPLatency(NULL),
fT0Fill(NULL),
fRunParams(NULL),
+ fLHCClockPhase(NULL),
fResponseParams(NULL),
fReadoutEfficiency(NULL),
fProblematic(NULL),
fInitFlag(kFALSE),
fRemoveMeanT0(kTRUE),
+ fUseLHCClockPhase(kFALSE),
fCalibrateTOFsignal(kTRUE),
- fCorrectTExp(kFALSE)
+ fCorrectTExp(kFALSE),
+ fRunParamsSpecificVersion(-1)
{
//TOF Calibration Class ctor
fNChannels = AliTOFGeometry::NSectors()*(2*(AliTOFGeometry::NStripC()+AliTOFGeometry::NStripB())+AliTOFGeometry::NStripA())*AliTOFGeometry::NpadZ()*AliTOFGeometry::NpadX();
fCTPLatency(NULL),
fT0Fill(NULL),
fRunParams(NULL),
+ fLHCClockPhase(NULL),
fResponseParams(NULL),
fReadoutEfficiency(NULL),
fProblematic(NULL),
fInitFlag(calib.fInitFlag),
fRemoveMeanT0(calib.fRemoveMeanT0),
+ fUseLHCClockPhase(calib.fUseLHCClockPhase),
fCalibrateTOFsignal(calib.fCalibrateTOFsignal),
- fCorrectTExp(calib.fCorrectTExp)
+ fCorrectTExp(calib.fCorrectTExp),
+ fRunParamsSpecificVersion(calib.fRunParamsSpecificVersion)
{
fTOFCalOnline = new TObjArray(fNChannels);
}
fInitFlag = calib.fInitFlag;
fRemoveMeanT0 = calib.fRemoveMeanT0;
+ fUseLHCClockPhase = calib.fUseLHCClockPhase;
fCalibrateTOFsignal = calib.fCalibrateTOFsignal;
fCorrectTExp = calib.fCorrectTExp;
+ fRunParamsSpecificVersion = calib.fRunParamsSpecificVersion;
return *this;
}
}
}
nusefulbins = FindBins(hToT,&binsProfile[0]);
- meantime/=ntracksTotal;
+ if (ntracksTotal != 0){
+ meantime/=ntracksTotal;
+ }
AliDebug(2, Form("meantime = %f",meantime));
for (Int_t j=1;j<=nusefulbins;j++) {
Float_t minToT = 0; //ns
Float_t maxToT = 5.; //ns
Float_t deltaToT = (maxToT-minToT)/knbinToT;
- Double_t mTime[knbinToT+1],mToT[knbinToT+1],meanTime[knbinToT+1], meanTime2[knbinToT+1],vToT[knbinToT+1], vToT2[knbinToT+1],meanToT[knbinToT+1],meanToT2[knbinToT+1],vTime[knbinToT+1],vTime2[knbinToT+1],xlow[knbinToT+1],sigmaTime[knbinToT+1];
+ Double_t mTime[knbinToT+1],mToT[knbinToT+1],meanTime[knbinToT+1], meanTime2[knbinToT+1],vToT[knbinToT+1], vToT2[knbinToT+1],meanToT[knbinToT+1],meanToT2[knbinToT+1],vTime[knbinToT+1],vTime2[knbinToT+1],sigmaTime[knbinToT+1];
Int_t n[knbinToT+1], nentrx[knbinToT+1];
- Double_t sigmaToT[knbinToT+1];
+ //Double_t xlow[knbinToT+1],sigmaToT[knbinToT+1]; // not used for the time being
for (Int_t i = 0; i < knbinToT+1 ; i++){
mTime[i]=0;
mToT[i]=0;
meanToT2[i]=0;
vTime[i]=0;
vTime2[i]=0;
- xlow[i]=0;
+ //xlow[i]=0;
sigmaTime[i]=0;
- sigmaToT[i]=0;
+ //sigmaToT[i]=0;
n[i]=0;
nentrx[i]=0;
}
*(meanToT2[usefulBins]-meanToT[usefulBins]
*meanToT[usefulBins]/n[usefulBins]))< 0) {
AliError(" too small radical" );
- sigmaToT[usefulBins]=0;
+ //sigmaToT[usefulBins]=0;
}
else{
- sigmaToT[usefulBins]=TMath::Sqrt(1./n[usefulBins]/n[usefulBins]
- *(meanToT2[usefulBins]-meanToT[usefulBins]
- *meanToT[usefulBins]/n[usefulBins]));
+ //sigmaToT[usefulBins]=TMath::Sqrt(1./n[usefulBins]/n[usefulBins]
+ // *(meanToT2[usefulBins]-meanToT[usefulBins]
+ // *meanToT[usefulBins]/n[usefulBins]));
}
usefulBins++;
}
*/
AliCDBManager *man = AliCDBManager::Instance();
- AliCDBEntry *entry = man->Get(Form("%s/RunParams", sel),nrun);
+ AliCDBEntry *entry = man->Get(Form("%s/RunParams", sel),nrun, fRunParamsSpecificVersion);
if (!entry) {
AliFatal("No RunParams entry found in CDB");
exit(0);
//----------------------------------------------------------------------------
+Bool_t
+AliTOFcalib::ReadLHCClockPhaseFromCDB(const Char_t *sel , Int_t nrun)
+{
+ /*
+ * read LHC clock-phase from CDB
+ */
+
+ AliCDBManager *man = AliCDBManager::Instance();
+ AliCDBEntry *entry = man->Get(Form("%s/LHCClockPhase", sel),nrun);
+ if (!entry) {
+ AliFatal("No LHCClockPhase entry found in CDB");
+ exit(0);
+ }
+ fLHCClockPhase =(AliLHCClockPhase *)entry->GetObject();
+ if(!fRunParams){
+ AliFatal("No LHCClockPhase object found in CDB entry");
+ exit(0);
+ }
+ return kTRUE;
+}
+
+//----------------------------------------------------------------------------
+
Bool_t
AliTOFcalib::ReadReadoutEfficiencyFromCDB(const Char_t *sel , Int_t nrun)
{
AliError("cannot get \"RunParams\" object from OCDB");
return kFALSE;
}
+ /* get LHC clock-phase obj */
+ if (!ReadLHCClockPhaseFromCDB("GRP/Calib", run)) {
+ AliError("cannot get \"LHCClockPhase\" object from OCDB");
+ return kFALSE;
+ }
/* get readout efficiency obj */
if (!ReadReadoutEfficiencyFromCDB("TOF/Calib", run)) {
AliError("cannot get \"ReadoutEfficiency\" object from OCDB");
}
responseFile->Close();
+ /* check whether to use the clock phase */
+ if (fRunParams->GetUseLHCClockPhase())
+ fUseLHCClockPhase = kTRUE;
+
+ if (fUseLHCClockPhase)
+ AliInfo("calibration using BPTX LHC clock-phase");
+
/* all done */
fInitFlag = kTRUE;
return kTRUE;
return 0.;
}
+ /* deal with L0-L1 orbit crossing (negative values) */
+ if (l0l1 < 0) l0l1 += 3564;
+
/* get calibration params */
AliTOFChannelOffline *parOffline = (AliTOFChannelOffline *)fTOFCalOffline->At(index);
Int_t deltaBCOffset = fDeltaBCOffset->GetDeltaBCOffset();
Float_t ctpLatency = fCTPLatency->GetCTPLatency();
Float_t tdcLatencyWindow = fStatus->GetLatencyWindow(index) * 1.e3;
Float_t timezero = fRunParams->EvalT0(timestamp);
+ Float_t clockphase = fLHCClockPhase->GetPhase(timestamp);
/* check whether to remove mean T0.
* useful when one wants to compute mean T0 */
if (!fRemoveMeanT0) timezero = 0.;
+ /* check whether to use the clock phase */
+ if (fUseLHCClockPhase) timezero -= 1.e3 * clockphase;
/* compute correction */
Double_t corr = 0.;
return;
}
- /* loop over tracks */
- AliESDtrack *track = NULL;
Int_t index, l0l1, deltaBC;
- Double_t time, tot, corr, texp[AliPID::kSPECIES];
+ Double_t time, tot, corr;
UInt_t timestamp = event->GetTimeStamp();
- for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
- /* get track */
- track = event->GetTrack(itrk);
- if (!track || !(track->GetStatus() & AliESDtrack::kTOFout)) continue;
-
- /* calibrate TOF signal */
- if (fCalibrateTOFsignal) {
- /* get info */
- index = track->GetTOFCalChannel();
- time = track->GetTOFsignalRaw();
- tot = track->GetTOFsignalToT();
- l0l1 = track->GetTOFL0L1();
- deltaBC = track->GetTOFDeltaBC();
- /* get correction */
- corr = GetTimeCorrection(index, tot, deltaBC, l0l1, timestamp);
- /* apply correction */
- time -= corr;
- /* set new TOF signal */
- track->SetTOFsignal(time);
+ // calibrating TOF hits
+
+ AliESDTOFHit* hit = NULL;
+ AliESDtrack* track = NULL;
+ TClonesArray* esdTOFhits = event->GetESDTOFHits();
+ if (esdTOFhits) { // new TOF data structure
+ for (Int_t ihit = 0; ihit < esdTOFhits->GetEntriesFast(); ihit++) {
+
+ /* get track */
+ hit = (AliESDTOFHit*)esdTOFhits->At(ihit);
+ //if (!track || !(track->GetStatus() & AliESDtrack::kTOFout)) continue;
+ if (!hit) continue;
+
+ /* calibrate TOF signal */
+ if (fCalibrateTOFsignal) {
+ /* get info */
+ index = hit->GetTOFchannel();
+ time = hit->GetTimeRaw();
+ tot = hit->GetTOT();
+ l0l1 = hit->GetL0L1Latency();
+ deltaBC = hit->GetDeltaBC();
+ /* get correction */
+ corr = GetTimeCorrection(index, tot, deltaBC, l0l1, timestamp);
+ /* apply correction */
+ time -= corr;
+ /* set new TOF signal */
+ hit->SetTime(time);
+ }
+
}
+ }
+ else { // old TOF data structure
- /* correct expected time */
- if (fCorrectTExp) {
- /* 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);
+ for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
+
+ /* get track */
+ track = event->GetTrack(itrk);
+ if (!track || !(track->GetStatus() & AliESDtrack::kTOFout)) continue;
+
+ /* calibrate TOF signal */
+ if (fCalibrateTOFsignal) {
+ /* get info */
+ index = track->GetTOFCalChannel();
+ time = track->GetTOFsignalRaw();
+ tot = track->GetTOFsignalToT();
+ l0l1 = track->GetTOFL0L1();
+ deltaBC = track->GetTOFDeltaBC();
+ /* get correction */
+ corr = GetTimeCorrection(index, tot, deltaBC, l0l1, timestamp);
+ /* apply correction */
+ time -= corr;
+ /* set new TOF signal */
+ track->SetTOFsignal(time);
+ }
}
-
+
+ if (fCorrectTExp)
+ CalibrateTExp(event);
}
-
+
}
//----------------------------------------------------------------------------
* calibrate TExp
*/
+ /* check if new TOF data structure, crash in case */
+ TClonesArray* esdTOFhits = event->GetESDTOFHits();
+ if (esdTOFhits) {
+ AliFatal("This method is DEPRECATED, doing NOTHING");
+ return ;
+ }
+
if (!fInitFlag) {
AliError("class not yet initialized. Initialize it before.");
return;
/* loop over tracks */
AliESDtrack *track = NULL;
- Double_t texp[AliPID::kSPECIES];
+ Double_t texp[AliPID::kSPECIESC];
for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
/* get track */
if (!track || !(track->GetStatus() & AliESDtrack::kTOFout)) continue;
/* get integrated times */
- track->GetIntegratedTimes(texp);
+ track->GetIntegratedTimes(texp,AliPID::kSPECIESC);
/* loop over particle types and correct expected time */
for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
texp[ipart] += fResponseParams->EvalTExpCorr(ipart, track->P());
* tune for MC
*/
+ /* check if new TOF data structure, crash in case */
+ TClonesArray* esdTOFhits = event->GetESDTOFHits();
+ if (esdTOFhits) {
+ AliFatal("This method is DEPRECATED, doing NOTHING");
+ return 0.;
+ }
+
/* get vertex spread and define T0-spread */
Double_t diamond2 = TMath::Abs(event->GetSigma2DiamondZ());
Double_t t0spread = TMath::Sqrt(diamond2) / 2.99792457999999984e-02;