, fTime0(-1)
, fCreateT0seed(kFALSE)
, fLongT0seed(kTRUE)
+, fFillClusterRes(kFALSE)
, fStreamer(0x0)
, fInputFile(0x0)
, fTree(0x0)
AliExternalTrackParam trackITS2;
AliExternalTrackParam *dummy;
+
+ //
+ TClonesArray *arrClustRes=0x0;
+ if (fFillClusterRes){
+ arrClustRes=new TClonesArray("AliTPCclusterMI",160);
+ }
Int_t maxev=fTree->GetEntries();
if (nmaxEv>0&&nmaxEv<maxev) maxev=nmaxEv;
// create fitted track
if (fDoTrackFit){
// printf("track\n");
- dummy = GetFittedTrackFromSeed(tr, &seed);
+ dummy = GetFittedTrackFromSeed(tr, &seed, arrClustRes);
track = *dummy;
delete dummy;
}
"trackITS.=" << &trackITS <<
"trackITS1.=" << &trackITS1 <<
- "trackITS2.=" << &trackITS2 <<
+ "trackITS2.=" << &trackITS2;
+
+ if (arrClustRes) {
+ const Int_t nCl=arrClustRes->GetEntriesFast();
+ // fracktion of outliers from track extrapolation
+ // for 1, 1.5, 2, 2.5 and 3 sigma of the cluster resolution (~1mm)
+ Float_t fracY[5]={0.};
+ Float_t fracZ[5]={0.};
+
+ for (Int_t icl=0; icl<nCl; ++icl) {
+ AliTPCclusterMI *cl=static_cast<AliTPCclusterMI*>(arrClustRes->At(icl));
+ const Float_t sigmaY=TMath::Sqrt(cl->GetSigmaY2());
+ const Float_t sigmaZ=TMath::Sqrt(cl->GetSigmaZ2());
+ for (Int_t inSig=0; inSig<5; ++inSig) {
+ fracY[inSig] += cl->GetY()>(1+inSig*.5)*sigmaY;
+ fracZ[inSig] += cl->GetZ()>(1+inSig*.5)*sigmaZ;
+ }
+ }
+
+ if (nCl>0) {
+ for (Int_t inSig=0; inSig<5; ++inSig) {
+ fracY[inSig]/=nCl;
+ fracZ[inSig]/=nCl;
+ }
+ }
+
+ (*fStreamer) << "Tracks" <<
+ "clustRes.=" << arrClustRes;
+ for (Int_t inSig=0; inSig<5; ++inSig) {
+ const char* fracYname=Form("clFracY%02d=", 10+inSig*5);
+ const char* fracZname=Form("clFracZ%02d=", 10+inSig*5);
+ (*fStreamer) << "Tracks" <<
+ fracYname << fracY[inSig] <<
+ fracZname << fracZ[inSig];
+ }
+ }
+
+ (*fStreamer) << "Tracks" <<
"\n";
}
}
}
+ delete arrClustRes;
Cleanup();
}
}
//____________________________________________________________________________________
-AliExternalTrackParam* AliToyMCReconstruction::GetFittedTrackFromSeed(const AliToyMCTrack *tr, const AliExternalTrackParam *seed)
+AliExternalTrackParam* AliToyMCReconstruction::GetFittedTrackFromSeed(const AliToyMCTrack *tr, const AliExternalTrackParam *seed, TClonesArray *arrClustRes)
{
//
//
//
+ if (arrClustRes) {
+ arrClustRes->Clear();
+ }
+
// create track
AliExternalTrackParam *track = new AliExternalTrackParam(*seed);
if (TMath::Abs(track->GetX())>kMaxR) break;
// if (TMath::Abs(track->GetZ())<kZcut)continue;
//
+
+ // add residuals
+ if (arrClustRes) {
+ TClonesArray &arrDummy=*arrClustRes;
+ AliTPCclusterMI *clRes = new(arrDummy[arrDummy.GetEntriesFast()]) AliTPCclusterMI(*cl);
+ clRes->SetX(prot.GetX());
+ clRes->SetY(track->GetY()-prot.GetY());
+ clRes->SetZ(track->GetZ()-prot.GetZ());
+ }
+
Double_t pointPos[2]={0,0};
Double_t pointCov[3]={0,0,0};
pointPos[0]=prot.GetY();//local y
return track;
}
-
//____________________________________________________________________________________
AliExternalTrackParam* AliToyMCReconstruction::GetFittedTrackFromSeedAllClusters(const AliToyMCTrack *tr, const AliExternalTrackParam *seed, Int_t &nClus)
{
void SetIdealTracking(Bool_t tr) { fIdealTracking = tr; }
Bool_t GetIdealTracking() const { return fIdealTracking; }
+
+ void SetFillClusterRes(Bool_t res) { fFillClusterRes=res; }
+ Bool_t GetFillClusterRes() const { return fFillClusterRes; }
+
+
void SetTree(TTree *tree) { fTree=tree; }
TTree* GetTree() const { return fTree; }
AliExternalTrackParam* GetSeedFromTrack(const AliToyMCTrack * const tr, Bool_t forceSeed=kFALSE);
AliExternalTrackParam* GetSeedFromTrackIdeal(const AliToyMCTrack * const tr, EDet det );
- AliExternalTrackParam* GetFittedTrackFromSeed(const AliToyMCTrack *tr, const AliExternalTrackParam *seed);
+ AliExternalTrackParam* GetFittedTrackFromSeed(const AliToyMCTrack *tr, const AliExternalTrackParam *seed, TClonesArray *arrClustRes=0x0);
AliExternalTrackParam* GetFittedTrackFromSeedAllClusters(const AliToyMCTrack *tr, const AliExternalTrackParam *seed, Int_t &nClus);
AliExternalTrackParam* GetTrackRefit(const AliToyMCTrack * const tr, EDet det);
Double_t fTime0; // current time0 used for reconstruction
Bool_t fCreateT0seed; // if current seed is the T0 seed
Bool_t fLongT0seed; // if we should use a t0 seed including all clusters in the seed range
+ Bool_t fFillClusterRes; // fill cluster residuals?
TTreeSRedirector *fStreamer; // debug streamer
TFile *fInputFile; // input file