class AliExternalTrackParam;
class AliTRDtrackInfo : public TObject{
public:
+ enum{
+ kNTrackRefs = 12
+ };
class AliESDinfo{
friend class AliTRDtrackInfo;
public:
Int_t GetLabel() const {return fLabel;}
Int_t GetNTrackRefs() const {return fNTrackRefs;}
Int_t GetPDG() const {return fPDG;}
- AliTrackReference** GetTrackRefIter() {return &fTrackRefs[0];}
+ //AliTrackReference* const* GetTrackRefIter() const {return &fTrackRefs[0];}
protected:
Int_t fLabel; // MC label
Int_t fPDG; // particle code
Int_t fNTrackRefs; // number of track refs
- AliTrackReference *fTrackRefs[12]; // track refs array
+ AliTrackReference *fTrackRefs[kNTrackRefs]; // track refs array
ClassDef(AliMCinfo, 1) // MC info related to TRD
};
ClassImp(AliTRDtrackInfoGen)
+const Float_t AliTRDtrackInfoGen::xTPC = 290.;
+const Float_t AliTRDtrackInfoGen::xTOF = 365.;
//____________________________________________________________________
AliTRDtrackInfoGen::AliTRDtrackInfoGen():
if(esdTrack->GetNcls(1)) nTPC++;
if(esdTrack->GetNcls(2)) nTRD++;
- // look at esternal track param
+ // look at external track param
const AliExternalTrackParam *op = esdTrack->GetOuterParam();
Double_t xyz[3];
if(op){
Int_t iref = 0; AliTrackReference *ref = 0x0;
while(iref<nRefs){
ref = mcParticle->GetTrackReference(iref);
- if(ref->LocalX() > 250.) break;
+ if(ref->LocalX() > xTPC) break;
//printf("\ttrackRef[%2d] @ %7.3f\n", iref, ref->LocalX());
iref++;
}
Int_t jref = iref;//, kref = 0;
while(jref<nRefs){
ref = mcParticle->GetTrackReference(jref);
- if(ref->LocalX() > 370.) break;
+ if(ref->LocalX() > xTOF) break;
if(fDebugLevel>=3) printf("\ttrackRef[%2d (%2d)] @ %7.3f OK\n", jref-iref, jref, ref->LocalX());
fTrackInfo->AddTrackRef(ref);
jref++;
Bool_t AliTRDtrackingResolution::Resolution(AliTRDseedV1 *tracklet, AliTRDtrackInfo *fInfo, Double_t &p, Double_t &ymc, Double_t &zmc, Double_t &phi, Double_t &theta)
{
- AliTrackReference *fTrackRefs[2] = {0x0, 0x0}, *tempTrackRef = 0x0;
+ AliTrackReference *fTrackRefs[2] = {0x0, 0x0};
+ Float_t x0 = tracklet->GetX0();
// check for 2 track ref where the radial position has a distance less than 3.7mm
Int_t nFound = 0;
- for(Int_t itr = 0; itr < fInfo->GetNTrackRefs(); itr++){
- if(!(tempTrackRef = fInfo->GetTrackRef(itr))) continue;
- if(fDebugLevel>=5) printf("TrackRef %d: x = %f\n", itr, tempTrackRef->LocalX());
- if(TMath::Abs(tracklet->GetX0() - tempTrackRef->LocalX()) > 3.7) continue;
- fTrackRefs[nFound++] = tempTrackRef;
+ for(Int_t itr = 0; itr < AliTRDtrackInfo::kNTrackRefs; itr++){
+ if(!(fTrackRefs[nFound] = fInfo->GetTrackRef(itr))) break;
+
+ if(fDebugLevel>=5) printf("\t\tref[%2d] x[%6.3f]\n", itr, fTrackRefs[nFound]->LocalX());
+ if(TMath::Abs(x0 - fTrackRefs[nFound]->LocalX()) > 3.7) continue;
+ nFound++;
if(nFound == 2) break;
}
if(nFound < 2){
- if(fDebugLevel>=4) printf("\t\tFound track crossing [%d] refX[%6.3f]\n", nFound, nFound>0 ? fTrackRefs[0]->LocalX() : 0.);
+ if(fDebugLevel>=3) printf("\t\tMissing track ref x0[%6.3f] ly[%d] nref[%d]\n", x0, tracklet->GetPlane(), fInfo->GetMCinfo()->GetNTrackRefs());
return kFALSE;
}
// We found 2 track refs for the tracklet, get y and z at the anode wire by a linear approximation
// RESOLUTION
Double_t dx = fTrackRefs[1]->LocalX() - fTrackRefs[0]->LocalX();
if(dx <= 0.){
- if(fDebugLevel>=4) printf("\t\ttrack ref in the wrong order refX0[%6.3f] refX1[%6.3f]\n", fTrackRefs[0]->LocalX(), fTrackRefs[1]->LocalX());
+ if(fDebugLevel>=3) printf("\t\tTrack ref in the wrong order refX0[%6.3f] refX1[%6.3f]\n", fTrackRefs[0]->LocalX(), fTrackRefs[1]->LocalX());
return kFALSE;
}
Double_t dydx = (fTrackRefs[1]->LocalY() - fTrackRefs[0]->LocalY()) / dx;
<< "dphi=" << dphi
<< "\n";
+ Int_t det, stk;
Float_t z0 = 0.;
AliTRDpadPlane *pp = 0x0;
AliTRDcluster *c = 0x0;
- for(Int_t ic=AliTRDseed::knTimebins-1; ic>=0; ic--){
- if(!(c = tracklet->GetClusters(ic))) continue;
+ tracklet->ResetClusterIter(kFALSE);
+ while((c = tracklet->PrevCluster())){
if(!pp){
- pp = fGeo->GetPadPlane(iplane, fGeo->GetStack(c->GetDetector()));
+ det = c->GetDetector();
+ stk = fGeo->GetStack(det);
+ pp = fGeo->GetPadPlane(iplane, stk);
z0 = pp->GetRow0() + AliTRDSimParam::Instance()->GetAnodeWireOffset();
}
- dx = tracklet->GetX0() - c->GetX();
+ Float_t xc = c->GetX();
+ dx = tracklet->GetX0() - xc;
Float_t yt = ymc - dx*dydx;
Float_t zt = zmc - dx*dzdx;
Float_t yc = c->GetY() - TMath::Tan(tracklet->GetTilt()) * (c->GetZ() - zt);
Float_t d = z0 - zt;
d -= ((Int_t)(2 * d)) / 2.0;
(*fDebugStream) << "ResolutionClstr"
+ << "det=" << det
<< "ly=" << iplane
+ << "stk=" << stk
<< "pdg=" << pdg
<< "p=" << p
<< "phi=" << phi
<< "tht=" << theta
+ << "xc=" << xc
+ << "yc=" << yc
+ << "yt=" << yt
+ << "zt=" << zt
+ << "z0=" << z0
<< "d=" << d
<< "dy=" << dy
<< "\n";