#include <TROOT.h>
#include <TClonesArray.h>
+#include <TObjArray.h>
#include <TTree.h>
#include <TFile.h>
#include <TH1F.h>
fnunmatch(0),
fnmatch(0),
fTracks(new TClonesArray("AliTOFtrack")),
- fSeeds(new TClonesArray("AliESDtrack")),
+ fSeeds(new TObjArray(100)),
fHDigClusMap(0x0),
fHDigNClus(0x0),
fHDigClusTime(0x0),
fHRecSigYVsPWin(0x0),
fHRecSigZVsPWin(0x0)
{
- //AliTOFtrackerV1 main Ctor
+ //AliTOFtrackerV1 main Ctor
+
+ for (Int_t ii=0; ii<kMaxCluster; ii++) fClusters[ii]=0x0;
InitCheckHists();
delete fSeeds;
fSeeds=0x0;
}
+
+
+ for (Int_t ii=0; ii<kMaxCluster; ii++)
+ if (fClusters[ii]) fClusters[ii]->Delete();
+
}
//_____________________________________________________________________________
void AliTOFtrackerV1::GetPidSettings(AliESDpid *esdPID) {
//if(fkRecoParam->GetApplyPbPbCuts())fkRecoParam=fkRecoParam->GetPbPbparam();
//fkRecoParam->PrintParameters();
- /*
- Double_t parPID[2];
- parPID[0]=fkRecoParam->GetTimeResolution();
- parPID[1]=fkRecoParam->GetTimeNSigma();
- fPid=new AliTOFpidESD(parPID);
- */
-
- Double_t timeZero=0.;
- Double_t timeZeroMax=99999.;
-
//Initialise some counters
fNseeds=0;
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 = fkRecoParam->UseTimeZero();
- Bool_t timeZeroFromT0 = fkRecoParam->GetTimeZerofromT0();
- Bool_t timeZeroFromTOF = fkRecoParam->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 = fkRecoParam->GetSensRadius();
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);