#include <TROOT.h>
#include <TClonesArray.h>
+#include <TObjArray.h>
#include <TTree.h>
#include <TFile.h>
#include <TH1F.h>
#include "AliESDtrack.h"
#include "AliESDEvent.h"
+#include "AliESDpid.h"
#include "AliLog.h"
#include "AliTrackPointArray.h"
#include "AliGeomManager.h"
#include "AliTOFGeometry.h"
#include "AliTOFtrackerV1.h"
#include "AliTOFtrack.h"
-#include "AliTOFpidESD.h"
extern TROOT *gROOT;
//_____________________________________________________________________________
AliTOFtrackerV1::AliTOFtrackerV1():
- fRecoParam(0x0),
- fPid(0x0),
+ fkRecoParam(0x0),
fN(0),
fNseeds(0),
fNseedsTOF(0),
fnunmatch(0),
fnmatch(0),
fTracks(new TClonesArray("AliTOFtrack")),
- fSeeds(new TClonesArray("AliESDtrack")),
+ fSeeds(new TObjArray(100)),
fHDigClusMap(0x0),
fHDigNClus(0x0),
fHDigClusTime(0x0),
SaveCheckHists();
if(!(AliCDBManager::Instance()->GetCacheFlag())){
- delete fRecoParam;
+ delete fkRecoParam;
}
- delete fPid;
delete fHDigClusMap;
delete fHDigNClus;
delete fHDigClusTime;
}
}
//_____________________________________________________________________________
-Int_t AliTOFtrackerV1::PropagateBack(AliESDEvent* event) {
+void AliTOFtrackerV1::GetPidSettings(AliESDpid *esdPID) {
+ //
+ // Sets TOF resolution from RecoParams
+ //
+ if (fkRecoParam)
+ esdPID->GetTOFResponse().SetTimeResolution(fkRecoParam->GetTimeResolution());
+ else
+ AliWarning("fkRecoParam not yet set; cannot set PID settings");
+}
+//_____________________________________________________________________________
+Int_t AliTOFtrackerV1::PropagateBack(AliESDEvent * const event) {
//
// Gets seeds from ESD event and Match with TOF Clusters
//
// initialize RecoParam for current event
AliDebug(1,"Initializing params for TOF");
- fRecoParam = AliTOFReconstructor::GetRecoParam(); // instantiate reco param from STEER...
+ fkRecoParam = AliTOFReconstructor::GetRecoParam(); // instantiate reco param from STEER...
- if (fRecoParam == 0x0) {
+ if (fkRecoParam == 0x0) {
AliFatal("No Reco Param found for TOF!!!");
}
- //fRecoParam->Dump();
- //if(fRecoParam->GetApplyPbPbCuts())fRecoParam=fRecoParam->GetPbPbparam();
- //fRecoParam->PrintParameters();
-
- Double_t parPID[2];
- parPID[0]=fRecoParam->GetTimeResolution();
- parPID[1]=fRecoParam->GetTimeNSigma();
- fPid=new AliTOFpidESD(parPID);
+ //fkRecoParam->Dump();
+ //if(fkRecoParam->GetApplyPbPbCuts())fkRecoParam=fkRecoParam->GetPbPbparam();
+ //fkRecoParam->PrintParameters();
//Initialise some counters
Int_t ntrk=event->GetNumberOfTracks();
fNseeds = ntrk;
- TClonesArray &aESDTrack = *fSeeds;
-
//Load ESD tracks into a local Array of ESD Seeds
-
- for (Int_t i=0; i<fNseeds; i++) {
- AliESDtrack *t=event->GetTrack(i);
- new(aESDTrack[i]) AliESDtrack(*t);
- }
+ for (Int_t i=0; i<fNseeds; i++)
+ fSeeds->AddLast(event->GetTrack(i));
//Prepare ESD tracks candidates for TOF Matching
CollectESD();
for (Int_t i=0; i<ntrk; i++) {
AliESDtrack *t=event->GetTrack(i);
- AliESDtrack *seed =(AliESDtrack*)fSeeds->UncheckedAt(i);
+ AliESDtrack *seed =(AliESDtrack*)fSeeds->At(i);
if ( (seed->GetStatus()&AliESDtrack::kTOFin)!=0 ) {
t->SetStatus(AliESDtrack::kTOFin);
t->SetTOFsignalRaw(seed->GetTOFsignalRaw());
t->SetTOFsignalDz(seed->GetTOFsignalDz());
t->SetTOFsignalDx(seed->GetTOFsignalDx());
+ t->SetTOFDeltaBC(seed->GetTOFDeltaBC());
+ t->SetTOFL0L1(seed->GetTOFL0L1());
t->SetTOFCalChannel(seed->GetTOFCalChannel());
Int_t tlab[3]; seed->GetTOFLabel(tlab);
t->SetTOFLabel(tlab);
- Double_t alphaA = dynamic_cast<AliExternalTrackParam*>(t)->GetAlpha();
- Double_t xA = dynamic_cast<AliExternalTrackParam*>(t)->GetX();
- Double_t yA = dynamic_cast<AliExternalTrackParam*>(t)->GetY();
- Double_t zA = dynamic_cast<AliExternalTrackParam*>(t)->GetZ();
- Double_t p1A = dynamic_cast<AliExternalTrackParam*>(t)->GetSnp();
- Double_t p2A = dynamic_cast<AliExternalTrackParam*>(t)->GetTgl();
- Double_t p3A = dynamic_cast<AliExternalTrackParam*>(t)->GetSigned1Pt();
- const Double_t *covA = dynamic_cast<AliExternalTrackParam*>(t)->GetCovariance();
+ Double_t alphaA = (Double_t)t->GetAlpha();
+ Double_t xA = (Double_t)t->GetX();
+ Double_t yA = (Double_t)t->GetY();
+ Double_t zA = (Double_t)t->GetZ();
+ Double_t p1A = (Double_t)t->GetSnp();
+ Double_t p2A = (Double_t)t->GetTgl();
+ Double_t p3A = (Double_t)t->GetSigned1Pt();
+ const Double_t *covA = (Double_t*)t->GetCovariance();
// Make attention, please:
// AliESDtrack::fTOFInfo array does not be stored in the AliESDs.root file
Double_t length = seed->GetIntegratedLength();
t->SetIntegratedLength(length);
- Double_t alphaB = dynamic_cast<AliExternalTrackParam*>(t)->GetAlpha();
- Double_t xB = dynamic_cast<AliExternalTrackParam*>(t)->GetX();
- Double_t yB = dynamic_cast<AliExternalTrackParam*>(t)->GetY();
- Double_t zB = dynamic_cast<AliExternalTrackParam*>(t)->GetZ();
- Double_t p1B = dynamic_cast<AliExternalTrackParam*>(t)->GetSnp();
- Double_t p2B = dynamic_cast<AliExternalTrackParam*>(t)->GetTgl();
- Double_t p3B = dynamic_cast<AliExternalTrackParam*>(t)->GetSigned1Pt();
- const Double_t *covB = dynamic_cast<AliExternalTrackParam*>(t)->GetCovariance();
+ Double_t alphaB = (Double_t)t->GetAlpha();
+ Double_t xB = (Double_t)t->GetX();
+ Double_t yB = (Double_t)t->GetY();
+ Double_t zB = (Double_t)t->GetZ();
+ Double_t p1B = (Double_t)t->GetSnp();
+ Double_t p2B = (Double_t)t->GetTgl();
+ Double_t p3B = (Double_t)t->GetSigned1Pt();
+ const Double_t *covB = (Double_t*)t->GetCovariance();
AliDebug(2,"Track params -now(before)-:");
AliDebug(2,Form(" X: %f(%f), Y: %f(%f), Z: %f(%f) --- alpha: %f(%f)",
xB,xA,
covB[13],covA[13],
covB[14],covA[14]
));
- AliDebug(3,Form(" %6d %f %f %f %f % %6d %3d %f %f %f %f %f %f",
+ AliDebug(3,Form(" %6d %f %f %f %f %f %6d %3d %f %f %f %f %f %f",
i,
t->GetTOFsignalRaw(),
t->GetTOFsignal(),
}
}
- //Handle Time Zero information
-
- Double_t timeZero=0.;
- Double_t timeZeroMax=99999.;
- Bool_t usetimeZero = fRecoParam->UseTimeZero();
- Bool_t timeZeroFromT0 = fRecoParam->GetTimeZerofromT0();
- Bool_t timeZeroFromTOF = fRecoParam->GetTimeZerofromTOF();
-
- AliDebug(2,Form("Use Time Zero?: %d",usetimeZero));
- AliDebug(2,Form("Time Zero from T0? : %d",timeZeroFromT0));
- AliDebug(2,Form("Time Zero From TOF? : %d",timeZeroFromTOF));
-
- if(usetimeZero){
- if(timeZeroFromT0){
- timeZero=GetTimeZerofromT0(event);
- }
- if(timeZeroFromTOF && (timeZero>timeZeroMax || !timeZeroFromT0)){
- timeZero=GetTimeZerofromTOF(event);
- }
- }
- AliDebug(2,Form("time Zero used in PID: %f",timeZero));
- //Make TOF PID
- fPid->MakePID(event,timeZero);
-
fSeeds->Clear();
- fTracks->Clear();
+ fTracks->Delete();
return 0;
}
TClonesArray &aTOFTrack = *fTracks;
for (Int_t i=0; i<fNseeds; i++) {
- AliESDtrack *t =(AliESDtrack*)fSeeds->UncheckedAt(i);
+ AliESDtrack *t =(AliESDtrack*)fSeeds->At(i);
if ((t->GetStatus()&AliESDtrack::kTPCout)==0)continue;
AliTOFtrack *track = new AliTOFtrack(*t); // New
Float_t dY=AliTOFGeometry::XPad();
Float_t dZ=AliTOFGeometry::ZPad();
- const Float_t kTimeOffset = 32.; // time offset for tracking algorithm [ps]
+ const Float_t kTimeOffset = 0.; // time offset for tracking algorithm [ps]
const Int_t kncmax = 100;
- Float_t sensRadius = fRecoParam->GetSensRadius();
- Float_t scaleFact = fRecoParam->GetWindowScaleFact();
- Float_t dyMax=fRecoParam->GetWindowSizeMaxY();
- Float_t dzMax=fRecoParam->GetWindowSizeMaxZ();
- Double_t maxChi2=fRecoParam->GetMaxChi2();
- Bool_t timeWalkCorr = fRecoParam->GetTimeWalkCorr();
+ Float_t sensRadius = fkRecoParam->GetSensRadius();
+ Float_t scaleFact = fkRecoParam->GetWindowScaleFact();
+ Float_t dyMax=fkRecoParam->GetWindowSizeMaxY();
+ Float_t dzMax=fkRecoParam->GetWindowSizeMaxZ();
+ Double_t maxChi2=fkRecoParam->GetMaxChi2();
+ Bool_t timeWalkCorr = fkRecoParam->GetTimeWalkCorr();
AliDebug(1,"++++++++++++++TOF Reconstruction Parameters:++++++++++++ \n");
AliDebug(1,Form("TOF sens radius: %f",sensRadius));
AliDebug(1,Form("TOF Window scale factor: %f",scaleFact));
for (Int_t iseed=0; iseed<fNseedsTOF; iseed++) {
AliTOFtrack *track =(AliTOFtrack*)fTracks->UncheckedAt(iseed);
- AliESDtrack *t =(AliESDtrack*)fSeeds->UncheckedAt(track->GetSeedIndex());
+ AliESDtrack *t =(AliESDtrack*)fSeeds->At(track->GetSeedIndex());
//if ( t->GetTOFsignal()>0. ) continue;
if ( (t->GetStatus()&AliESDtrack::kTOFout)!=0 ) continue;
- AliTOFtrack *trackTOFin =new AliTOFtrack(*track);
+ AliTOFtrack *trackTOFin = new AliTOFtrack(*track);
// Determine a window around the track
Double_t x,par[5]; trackTOFin->GetExternalParameters(x,par);
}
Double_t z = par[1];
- Double_t dz = scaleFact*3.*TMath::Sqrt(TMath::Abs(cov[2])+dZ*dZ/12.);
- Double_t dphi = scaleFact*3.*TMath::Sqrt(TMath::Abs(cov[0])+dY*dY/12.)/sensRadius;
+ Double_t dz = scaleFact*3.*TMath::Sqrt(TMath::Abs(cov[2])+dZ*dZ/12.);
+ Double_t dphi = scaleFact*3.*TMath::Sqrt(TMath::Abs(cov[0])+dY*dY/12.)/sensRadius;
Double_t phi=TMath::ATan2(par[0],x) + trackTOFin->GetAlpha();
if (phi<-TMath::Pi())phi+=2*TMath::Pi();
if (phi>=TMath::Pi())phi-=2*TMath::Pi();
//upper limit on window's size.
- if(dz> dzMax) dz=dzMax;
- if(dphi*sensRadius> dyMax) dphi=dyMax/sensRadius;
+ if (dz> dzMax) dz=dzMax;
+ if (dphi*sensRadius> dyMax) dphi=dyMax/sensRadius;
// find the clusters inside the selected window
Int_t nc=0;
AliWarning("No more matchable clusters can be stored! Please, increase the corresponding vectors size.");
break; /* R+ fix (buffer overflow protection) */
}
- if(c->GetZ() > z+dz) break;
- if(c->IsUsed()) continue;
- if(!c->GetStatus()) {
+ if (c->GetZ() > z+dz) break;
+ if (c->IsUsed()) continue;
+ if (!c->GetStatus()) {
AliDebug(1,"Cluster in channel declared bad!");
continue; // skip bad channels as declared in OCDB
}
Float_t deltaY = trackTOFin->GetY()-bestCluster->GetY();
t->SetTOFsignalDx(deltaY);
+ t->SetTOFDeltaBC(bestCluster->GetDeltaBC());
+ t->SetTOFL0L1(bestCluster->GetL0L1Latency());
+
Float_t distR = (trackTOFin->GetX()-bestCluster->GetX())*
(trackTOFin->GetX()-bestCluster->GetX());
distR+=deltaY*deltaY;
fHRecNClus->Fill(nc);
fHRecChi2->Fill(bestChi2);
fHRecDistZ->Fill(dzTW);
- fHRecSigYVsP->Fill(mom,TMath::Sqrt(cov[0]));
- fHRecSigZVsP->Fill(mom,TMath::Sqrt(cov[2]));
+ if (cov[0]>=0.)
+ fHRecSigYVsP->Fill(mom,TMath::Sqrt(cov[0]));
+ else
+ fHRecSigYVsP->Fill(mom,-TMath::Sqrt(-cov[0]));
+ if (cov[2]>=0.)
+ fHRecSigZVsP->Fill(mom,TMath::Sqrt(cov[2]));
+ else
+ fHRecSigZVsP->Fill(mom,-TMath::Sqrt(-cov[2]));
fHRecSigYVsPWin->Fill(mom,dphi*sensRadius);
fHRecSigZVsPWin->Fill(mom,dz);
}
//_________________________________________________________________________
-Float_t AliTOFtrackerV1::CorrectTimeWalk( Float_t dist, Float_t tof) {
+Float_t AliTOFtrackerV1::CorrectTimeWalk( Float_t dist, Float_t tof) const {
//dummy, for the moment
Float_t tofcorr=0.;
return tofcorr;
}
//_________________________________________________________________________
-Float_t AliTOFtrackerV1::GetTimeZerofromT0(AliESDEvent *event) const {
+Float_t AliTOFtrackerV1::GetTimeZerofromT0(const AliESDEvent * const event) const {
//Returns TimeZero as measured by T0 detector