amp[i] = frecpoints -> GetAmp(i);
}
pESD->SetT0zVertex(Zposition); //vertex Z position
- /*
pESD->SetT0(timeStart); // interaction time
- pESD->SetT0time(*time); // best TOF on each PMT
- pESD->SetT0amplitude(*amp); // number of particles(MIPs) on each PMT
- */
- // pESD->Dump();
+ pESD->SetT0time(time); // best TOF on each PMT
+ pESD->SetT0amplitude(amp); // number of particles(MIPs) on each PMT
+
pStartLoader->UnloadRecPoints();
} // vertex in 3 sigma
fZDCEMEnergy(0),
fZDCParticipants(0),
fT0zVertex(0),
+ fT0timeStart(0),
fPrimaryVertex(),
fTracks("AliESDtrack",15000),
fHLTConfMapTracks("AliESDHLTtrack",25000),
fFirstPHOSCluster(-1),
fESDFMD(0x0)
{
-
+ for (Int_t i=0; i<24; i++) {
+ fT0time[i] = 0;
+ fT0amplitude[i] = 0;
+ }
}
//______________________________________________________________________________
fZDCEMEnergy=0;
fZDCParticipants=0;
fT0zVertex=0;
+ fT0timeStart = 0;
fPrimaryVertex.Reset();
fTracks.Clear();
fHLTConfMapTracks.Clear();
Float_t GetT0zVertex() const {return fT0zVertex;}
void SetT0zVertex(Float_t z) {fT0zVertex=z;}
+ Float_t GetT0() const {return fT0timeStart;}
+ void SetT0(Float_t timeStart) {fT0timeStart = timeStart;}
+ const Float_t * GetT0time() const {return fT0time;}
+ void SetT0time(Float_t time[24]) {
+ for (Int_t i=0; i<24; i++) fT0time[i] = time[i];
+ }
+ const Float_t * GetT0amplitude() const {return fT0amplitude;}
+ void SetT0amplitude(Float_t amp[24]) {
+ for (Int_t i=0; i<24; i++) fT0amplitude[i] = amp[i];
+ }
Float_t GetZDCN1Energy() const {return fZDCN1Energy;}
Float_t GetZDCP1Energy() const {return fZDCP1Energy;}
Int_t fZDCParticipants; // number of participants estimated by the ZDC
Float_t fT0zVertex; // vertex z position estimated by the START
+ Float_t fT0timeStart; // interaction time estimated by the START
+ Float_t fT0time[24]; // best TOF on each START PMT
+ Float_t fT0amplitude[24]; // number of particles(MIPs) on each START PMT
AliESDVertex fPrimaryVertex; // Primary vertex estimated by the ITS
TClonesArray fTracks; // ESD tracks
//
// The default ESD constructor
//
- Int_t i;
+ Int_t i, j;
for (i=0; i<AliPID::kSPECIES; i++) {
fTrackTime[i]=0.;
fR[i]=1.;
for (i=0; i<3; i++) { fKinkIndexes[i]=0;}
for (i=0; i<3; i++) { fV0Indexes[i]=-1;}
- for (i=0;i<kNPlane;i++) {fTRDsignals[i]=0.; fTRDTimBin[i]=-1;}
+ for (i=0;i<kNPlane;i++) {
+ for (j=0;j<kNSlice;j++) {
+ fTRDsignals[i][j]=0.;
+ }
+ fTRDTimBin[i]=-1;
+ }
for (i=0;i<4;i++) {fTPCPoints[i]=-1;}
for (i=0;i<3;i++) {fTOFLabel[i]=-1;}
for (i=0;i<10;i++) {fTOFInfo[i]=-1;}
for (Int_t i=0; i<3;i++) { fV0Indexes[i]=track.fV0Indexes[i];}
//
for (Int_t i=0;i<kNPlane;i++) {
- fTRDsignals[i]=track.fTRDsignals[i];
- fTRDTimBin[i]=track.fTRDTimBin[i];
+ for (Int_t j=0;j<kNSlice;j++) {
+ fTRDsignals[i][j]=track.fTRDsignals[i][j];
+ }
+ fTRDTimBin[i]=track.fTRDTimBin[i];
}
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTRDr[i]=track.fTRDr[i];
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTOFr[i]=track.fTOFr[i];
fTRDncls0 = 0;
fTRDsignal = 0;
for (Int_t i=0;i<kNPlane;i++) {
- fTRDsignals[i] = 0;
- fTRDTimBin[i] = 0;
+ for (Int_t j=0;j<kNSlice;j++) {
+ fTRDsignals[i][j] = 0;
+ }
+ fTRDTimBin[i] = 0;
}
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTRDr[i] = 0;
fTRDLabel = 0;
Float_t GetTRDQuality()const {return fTRDQuality;}
void SetTRDBudget(Float_t budget){fTRDBudget=budget;}
Float_t GetTRDBudget()const {return fTRDBudget;}
- void SetTRDsignals(Float_t dedx, Int_t i) {fTRDsignals[i]=dedx;}
+ void SetTRDsignals(Float_t dedx, Int_t i, Int_t j) {fTRDsignals[i][j]=dedx;}
void SetTRDTimBin(Int_t timbin, Int_t i) {fTRDTimBin[i]=timbin;}
void GetTRDpid(Double_t *p) const;
Float_t GetTRDsignal() const {return fTRDsignal;}
- Float_t GetTRDsignals(Int_t i) const {return fTRDsignals[i];}
+ Float_t GetTRDsignals(Int_t iPlane, Int_t iSlice=-1) const { if (iSlice == -1)
+ return (fTRDsignals[iPlane][0] + fTRDsignals[iPlane][1] + fTRDsignals[iPlane][3])/3.0;
+ return fTRDsignals[iPlane][iSlice];
+ }
Int_t GetTRDTimBin(Int_t i) const {return fTRDTimBin[i];}
Float_t GetTRDchi2() const {return fTRDchi2;}
Int_t GetTRDclusters(Int_t *idx) const;
kTIME=0x80000000
};
enum {
- kNPlane = 6
+ kNPlane = 6,
+ kNSlice = 3
};
protected:
Int_t fTRDncls; // number of clusters assigned in the TRD
Int_t fTRDncls0; // number of clusters assigned in the TRD before first material cross
Float_t fTRDsignal; // detector's PID signal
- Float_t fTRDsignals[kNPlane]; // TRD signals from all six planes
+ Float_t fTRDsignals[kNPlane][kNSlice]; // TRD signals from all six planes in 3 slices each
Int_t fTRDTimBin[kNPlane]; // Time bin of Max cluster from all six planes
Float_t fTRDr[AliPID::kSPECIES]; // "detector response probabilities" (for the PID)
Int_t fTRDLabel; // label according TRD
AliESDtrack & operator=(const AliESDtrack & ) {return *this;}
- ClassDef(AliESDtrack,27) //ESDtrack
+ ClassDef(AliESDtrack,28) //ESDtrack
};
#endif
for (Int_t j=0; j<ns; j++) {
p[j]=1.;
for (Int_t ilayer=0; ilayer <6; ilayer++) {
- Double_t dedx=t->GetTRDsignals(ilayer);
+ Double_t dedx=t->GetTRDsignals(ilayer,1);
Int_t timbin=t->GetTRDTimBin(ilayer);
p[j]*= pd->GetProbability(j,mom,dedx);
p[j]*= pd->GetProbabilityT(j,mom,timbin);
{
for (Int_t i=0; i<kNplane; i++) {
- fdEdxPlane[i] = 0;
+ for (Int_t j=0; j<kNslice; j++) {
+ fdEdxPlane[i][j] = 0;
+ }
fTimBinPlane[i] = -1;
}
for (UInt_t i=0; i<kMAXCLUSTERSPERTRACK; i++) {
}
for (Int_t i=0; i<3; i++) fBudget[i] = 0;
}
+
//_____________________________________________________________________________
AliTRDtrack::AliTRDtrack(const AliTRDcluster *c, UInt_t index,
const Double_t xx[5], const Double_t cc[15],
fdEdxT=0.;
fDE=0.;
for (Int_t i=0;i<kNplane;i++){
- fdEdxPlane[i] = 0.;
- fTimBinPlane[i] = -1;
+ for (Int_t j=0; j<kNslice; j++) {
+ fdEdxPlane[i][j] = 0;
+ }
+ fTimBinPlane[i] = -1;
}
fLhElectron = 0.0;
fdEdxT=t.fdEdxT;
fDE=t.fDE;
for (Int_t i=0;i<kNplane;i++){
- fdEdxPlane[i] = t.fdEdxPlane[i];
- fTimBinPlane[i] = t.fTimBinPlane[i];
- fTracklets[i] = t.fTracklets[i];
+ for (Int_t j=0; j<kNslice; j++) {
+ fdEdxPlane[i][j] = t.fdEdxPlane[i][j];
+ }
+ fTimBinPlane[i] = t.fTimBinPlane[i];
+ fTracklets[i] = t.fTracklets[i];
}
fLhElectron = 0.0;
fdEdx=t.GetPIDsignal();
fDE = 0;
for (Int_t i=0;i<kNplane;i++){
- fdEdxPlane[i] = 0.0;
+ for (Int_t j=0;j<kNslice;j++){
+ fdEdxPlane[i][j] = 0.0;
+ }
fTimBinPlane[i] = -1;
}
fdEdx=t.GetTRDsignal();
fDE =0;
for (Int_t i=0;i<kNplane;i++){
- fdEdxPlane[i] = t.GetTRDsignals(i);
+ for (Int_t j=0;j<kNslice;j++){
+ fdEdxPlane[i][j] = t.GetTRDsignals(i,j);
+ }
fTimBinPlane[i] = t.GetTRDTimBin(i);
}
}
return 1;
+
}
//_____________________________________________________________________________
class AliTRDtrack : public AliKalmanTrack {
- enum { kNdet = 540, kNstacks = 90, kNplane = 6, kNcham = 5, kNsect = 18 };
+ enum { kNdet = 540
+ , kNstacks = 90
+ , kNplane = 6
+ , kNcham = 5
+ , kNsect = 18
+ , kNslice = 3
+ , kNtimeBins = 22 };
friend class AliTRDtracker;
void GetCovariance(Double_t cov[15]) const;
Double_t GetdEdx() const { return fdEdx; }
Double_t GetPIDsignal() const { return GetdEdx(); }
- Float_t GetPIDsignals(Int_t i) const { return fdEdxPlane[i]; }
+ Float_t GetPIDsignals(Int_t iPlane, Int_t iSlice) const
+ { return fdEdxPlane[iPlane][iSlice]; }
Int_t GetPIDTimBin(Int_t i) const { return fTimBinPlane[i];}
Double_t GetEta() const { return fE; }
Int_t Rotate(Double_t angle, Bool_t absolute=kFALSE);
void SetdEdx(Float_t dedx) { fdEdx = dedx; }
- void SetPIDsignals(Float_t dedx, Int_t i) { fdEdxPlane[i] = dedx; }
+ void SetPIDsignals(Float_t dedx, Int_t iPlane, Int_t iSlice)
+ { fdEdxPlane[iPlane][iSlice] = dedx; }
void SetPIDTimBin(Int_t timbin, Int_t i) { fTimBinPlane[i] = timbin; }
void SetLikelihoodElectron(Float_t l) { fLhElectron = l; }
Float_t fdEdx; // dE/dx
Float_t fdEdxT; // dE/dx - truncated mean
Float_t fDE; // integrated delta energy
- Float_t fdEdxPlane[kNplane]; // dE/dx from all 6 planes
+ Float_t fdEdxPlane[kNplane][kNslice]; // dE/dx from all 6 planes in 3 slices each
Int_t fTimBinPlane[kNplane]; // time bin of Max cluster from all 6 planes
Double_t fAlpha; // rotation angle
Float_t fBudget[3]; // integrated material budget
AliTRDtrack *fBackupTrack; //! backup track
- ClassDef(AliTRDtrack,4) // TRD reconstructed tracks
+ ClassDef(AliTRDtrack,5) // TRD reconstructed tracks
};
}
else {
printf("AliTRDtracker::AliTRDtracker(): can't find TRD geometry!\n");
+
fGeom = new AliTRDgeometryFull();
+
}
fGeom->ReadGeoMatrices();
if (track->PropagateTo(xtof)) {
seed->UpdateTrackParams(track, AliESDtrack::kTRDout);
for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
- seed->SetTRDsignals(track->GetPIDsignals(i),i);
- seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
+ for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+ seed->SetTRDsignals(track->GetPIDsignals(i,j),i,j);
+ }
+ seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
}
// seed->SetTRDtrack(new AliTRDtrack(*track));
if (track->GetNumberOfClusters()>foundMin) found++;
seed->UpdateTrackParams(track, AliESDtrack::kTRDout);
//seed->SetStatus(AliESDtrack::kTRDStop);
for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
- seed->SetTRDsignals(track->GetPIDsignals(i),i);
- seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
+ for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+ seed->SetTRDsignals(track->GetPIDsignals(i,j),i,j);
+ }
+ seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
}
//seed->SetTRDtrack(new AliTRDtrack(*track));
found++;
AliTRDtrack *pt = new AliTRDtrack(seed2,seed2.GetAlpha());
Int_t * indexes2 = seed2.GetIndexes();
for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
- pt->SetPIDsignals(seed2.GetPIDsignals(i),i);
+ for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+ pt->SetPIDsignals(seed2.GetPIDsignals(i,j),i,j);
+ }
pt->SetPIDTimBin(seed2.GetPIDTimBin(i),i);
}
if(PropagateToX(t,xTPC,fgkMaxStep)) {
seed->UpdateTrackParams(pt, AliESDtrack::kTRDrefit);
for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
- seed->SetTRDsignals(pt->GetPIDsignals(i),i);
+ for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+ seed->SetTRDsignals(pt->GetPIDsignals(i,j),i,j);
+ }
seed->SetTRDTimBin(pt->GetPIDTimBin(i),i);
}
}else{
CookdEdxTimBin(*pt2);
seed->UpdateTrackParams(pt2, AliESDtrack::kTRDrefit);
for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
- seed->SetTRDsignals(pt2->GetPIDsignals(i),i);
+ for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+ seed->SetTRDsignals(pt2->GetPIDsignals(i,j),i,j);
+ }
seed->SetTRDTimBin(pt2->GetPIDTimBin(i),i);
}
}
// Prashant Shukla (shukla@physi.uni-heidelberg.de)
//
- Double_t clscharge[AliESDtrack::kNPlane], maxclscharge[AliESDtrack::kNPlane];
- Int_t nCluster[AliESDtrack::kNPlane], timebin[AliESDtrack::kNPlane];
+ Double_t clscharge[AliESDtrack::kNPlane][AliESDtrack::kNSlice];
+ Double_t maxclscharge[AliESDtrack::kNPlane];
+ Int_t nCluster[AliESDtrack::kNPlane][AliESDtrack::kNSlice];
+ Int_t timebin[AliESDtrack::kNPlane];
+
+ //Initialization of cluster charge per plane.
+ for (Int_t iPlane = 0; iPlane < AliESDtrack::kNPlane; iPlane++) {
+ for (Int_t iSlice = 0; iSlice < AliESDtrack::kNSlice; iSlice++) {
+ clscharge[iPlane][iSlice] = 0.0;
+ nCluster[iPlane][iSlice] = 0;
+ }
+ }
//Initialization of cluster charge per plane.
for (Int_t iPlane = 0; iPlane < AliESDtrack::kNPlane; iPlane++) {
- clscharge[iPlane] = 0.0;
- nCluster[iPlane] = 0;
timebin[iPlane] = -1;
maxclscharge[iPlane] = 0.0;
}
if (!tb) continue;
Int_t detector = pTRDcluster->GetDetector();
Int_t iPlane = fGeom->GetPlane(detector);
- clscharge[iPlane] = clscharge[iPlane]+charge;
+ Int_t iSlice = tb*AliESDtrack::kNSlice/AliTRDtrack::kNtimeBins;
+ clscharge[iPlane][iSlice] = clscharge[iPlane][iSlice]+charge;
if(charge > maxclscharge[iPlane]) {
maxclscharge[iPlane] = charge;
timebin[iPlane] = tb;
}
- nCluster[iPlane]++;
+ nCluster[iPlane][iSlice]++;
} // end of loop over cluster
// Setting the fdEdxPlane and fTimBinPlane variabales
Double_t totalCharge = 0;
+
for (Int_t iPlane = 0; iPlane < AliESDtrack::kNPlane; iPlane++) {
- // Quality control of TRD track.
- if (nCluster[iPlane]<= 5) {
- clscharge[iPlane]=0.0;
- timebin[iPlane]=-1;
+ for (Int_t iSlice = 0; iSlice < AliESDtrack::kNSlice; iSlice++) {
+ if (nCluster[iPlane][iSlice]) clscharge[iPlane][iSlice] /= nCluster[iPlane][iSlice];
+ TRDtrack.SetPIDsignals(clscharge[iPlane][iSlice], iPlane, iSlice);
+ totalCharge= totalCharge+clscharge[iPlane][iSlice];
}
- if (nCluster[iPlane]) clscharge[iPlane] /= nCluster[iPlane];
- TRDtrack.SetPIDsignals(clscharge[iPlane], iPlane);
- TRDtrack.SetPIDTimBin(timebin[iPlane], iPlane);
- totalCharge= totalCharge+clscharge[iPlane];
+ TRDtrack.SetPIDTimBin(timebin[iPlane], iPlane);
}
+
// Int_t i;
// Int_t nc=TRDtrack.GetNumberOfClusters();
// Float_t dedx=0;