else {
AliDebug(1,"Stand Alone flag set: doing tracking in ITS alone\n");
}
- if(!rc) rc=FindTracks(event);
+ if(!rc){
+ rc=FindTracks(event,kFALSE);
+ if(AliITSReconstructor::GetRecoParam()->GetSAUseAllClusters()==kTRUE) {
+ rc=FindTracks(event,kTRUE);
+ }
+ }
+
return rc;
}
//______________________________________________________________________
-Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
+Int_t AliITStrackerSA::FindTracks(AliESDEvent* event, Bool_t useAllClusters){
// Track finder using the ESD object
}
//Reads event and mark clusters of traks already found, with flag kITSin
Int_t nentr=event->GetNumberOfTracks();
- if(AliITSReconstructor::GetRecoParam()->GetSAUseAllClusters()==kFALSE) {
+ if(!useAllClusters) {
while (nentr--) {
AliESDtrack *track=event->GetTrack(nentr);
if ((track->GetStatus()&AliESDtrack::kITSin) == AliESDtrack::kITSin){
}
}
}
+ }else{
+ while (nentr--) {
+ AliESDtrack *track=event->GetTrack(nentr);
+ if ((track->GetStatus()&AliESDtrack::kITSin) == AliESDtrack::kITSin){
+ Int_t idx[12];
+ Int_t ncl = track->GetITSclusters(idx);
+ for(Int_t k=0;k<ncl;k++){
+ AliITSRecPoint* cll = (AliITSRecPoint*)GetCluster(idx[k]);
+ cll->ResetBit(kSAflag);
+ }
+ }
+ }
}
//Get primary vertex
Double_t primaryVertex[3];
}
}
dmar[i]=0;
- delete fCluLayer[i];
- fCluLayer[i] = new TClonesArray("AliITSRecPoint",nclusters[i]);
- delete fCluCoord[i];
- fCluCoord[i] = new TClonesArray("AliITSclusterTable",nclusters[i]);
+ if(!fCluLayer[i]){
+ fCluLayer[i] = new TClonesArray("AliITSRecPoint",nclusters[i]);
+ }else{
+ fCluLayer[i]->Delete();
+ fCluLayer[i]->Expand(nclusters[i]);
+ }
+ if(!fCluCoord[i]){
+ fCluCoord[i] = new TClonesArray("AliITSclusterTable",nclusters[i]);
+ }else{
+ fCluCoord[i]->Delete();
+ fCluCoord[i]->Expand(nclusters[i]);
+ }
}
for(Int_t ilay=0;ilay<AliITSgeomTGeo::GetNLayers();ilay++){
AliDebug(2,Form("---NPOINTS: %d; MAP: %d %d %d %d %d %d\n",layOK,nClusLay[0],nClusLay[1],nClusLay[2],nClusLay[3],nClusLay[4],nClusLay[5]));
AliITStrackV2* tr2 = 0;
tr2 = FitTrack(trs,primaryVertex);
- if(!tr2) continue;
+ if(!tr2){
+ delete trs;
+ continue;
+ }
AliDebug(2,Form("---NPOINTS fit: %d\n",tr2->GetNumberOfClusters()));
- StoreTrack(tr2,event);
+ StoreTrack(tr2,event,useAllClusters);
ntrack++;
}
AliDebug(2,Form("---NPOINTS: %d; MAP: %d %d %d %d %d %d\n",layOK,nClusLay[0],nClusLay[1],nClusLay[2],nClusLay[3],nClusLay[4],nClusLay[5]));
AliITStrackV2* tr2 = 0;
tr2 = FitTrack(trs,primaryVertex);
- if(!tr2) continue;
+ if(!tr2){
+ delete trs;
+ continue;
+ }
AliDebug(2,Form("---NPOINTS fit: %d\n",tr2->GetNumberOfClusters()));
- StoreTrack(tr2,event);
+ StoreTrack(tr2,event,useAllClusters);
ntrack++;
}
AliITStrackV2* tr2 = 0;
Bool_t onePoint = kTRUE;
tr2 = FitTrack(trs,primaryVertex,onePoint);
- if(!tr2) continue;
+ if(!tr2){
+ delete trs;
+ continue;
+ }
AliDebug(2,Form("----NPOINTS fit: %d\n",tr2->GetNumberOfClusters()));
- StoreTrack(tr2,event);
+ StoreTrack(tr2,event,useAllClusters);
ntrack++;
}
} //end loop on innLay
} // end search 1-point tracks
- Info("FindTracks","Number of found tracks: %d",event->GetNumberOfTracks());
+ if(!useAllClusters) AliInfo(Form("Number of found tracks: %d",event->GetNumberOfTracks()));
+ ResetForFinding();
return 0;
}
static Int_t clind[AliITSgeomTGeo::kNLayers][kMaxClu];
static Int_t clmark[AliITSgeomTGeo::kNLayers][kMaxClu];
- static Int_t nnn[AliITSgeomTGeo::kNLayers];
- static Int_t kkk[AliITSgeomTGeo::kNLayers];
static Int_t end[AliITSgeomTGeo::kNLayers];
static AliITSRecPoint *listlayer[AliITSgeomTGeo::kNLayers][kMaxClu];
for(Int_t i=0;i<AliITSgeomTGeo::GetNLayers();i++) {
firstmod[i]=AliITSgeomTGeo::GetModuleIndex(i+1,1,1);
- nnn[i]=0;
- kkk[i]=0;
end[i]=0;
for(Int_t j=0;j<kMaxClu; j++){
clind[i][j]=0;
Int_t lay = (index & 0xf0000000) >> 28;
Int_t nInLay=end[lay];
listlayer[lay][nInLay]=cl;
- Int_t ind=nnn[lay];
- clind[lay][ind]=index;
+ clind[lay][nInLay]=index;
end[lay]++;
}
for(Int_t nlay=0;nlay<AliITSgeomTGeo::GetNLayers();nlay++){
for(Int_t ncl=0;ncl<tr->GetNumberOfMarked(nlay);ncl++){
Int_t mark = tr->GetClusterMark(nlay,ncl);
- Int_t ind=kkk[nlay];
- clmark[nlay][ind]=mark;
+ clmark[nlay][ncl]=mark;
}
}
}
//_______________________________________________________
-void AliITStrackerSA::StoreTrack(AliITStrackV2 *t,AliESDEvent *event) const
+void AliITStrackerSA::StoreTrack(AliITStrackV2 *t,AliESDEvent *event, Bool_t pureSA) const
{
//
// Add new track to the ESD
//
AliESDtrack outtrack;
outtrack.UpdateTrackParams(t,AliESDtrack::kITSin);
+ if(pureSA) outtrack.SetStatus(AliESDtrack::kITSpureSA);
for(Int_t i=0;i<12;i++) {
outtrack.SetITSModuleIndex(i,t->GetModuleIndex(i));
}
sz = TMath::Sqrt(cl->GetSigmaZ2());
*/
}
-