]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITStrackerSA.cxx
Adding TDC channel delays to the calib object.
[u/mrichter/AliRoot.git] / ITS / AliITStrackerSA.cxx
index 3d7c0d09dacbfbe11618717358f28ecd476ba734..1e693dc957fd68167f1329663466dfedf97d09a6 100644 (file)
@@ -277,7 +277,13 @@ Int_t AliITStrackerSA::Clusters2Tracks(AliESDEvent *event){
   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;
 }
 
@@ -334,7 +340,7 @@ void AliITStrackerSA::ResetForFinding(){
  
 
 //______________________________________________________________________
-Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
+Int_t AliITStrackerSA::FindTracks(AliESDEvent* event, Bool_t useAllClusters){
 
 // Track finder using the ESD object
 
@@ -347,7 +353,7 @@ Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
   }
   //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){
@@ -359,6 +365,18 @@ Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
        }
       }
     }
+  }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];
@@ -387,10 +405,18 @@ Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
       }
     }
     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++){
@@ -472,10 +498,13 @@ Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
              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++;
              
            }   
@@ -534,10 +563,13 @@ Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
              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++;
              
            }   
@@ -596,10 +628,13 @@ Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
            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++;
            
          }   
@@ -611,7 +646,8 @@ Int_t AliITStrackerSA::FindTracks(AliESDEvent* event){
     } //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;
 
 }
@@ -629,15 +665,11 @@ AliITStrackV2* AliITStrackerSA::FitTrack(AliITStrackSA* tr,Double_t *primaryVert
   
   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;
@@ -655,16 +687,14 @@ AliITStrackV2* AliITStrackerSA::FitTrack(AliITStrackSA* tr,Double_t *primaryVert
     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;
     }
   }
 
@@ -908,13 +938,14 @@ AliITStrackV2* AliITStrackerSA::FitTrack(AliITStrackSA* tr,Double_t *primaryVert
 }
 
 //_______________________________________________________
-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));
   }
@@ -1286,4 +1317,3 @@ void AliITStrackerSA::GetCoorErrors(AliITSRecPoint* cl,Float_t &sx,Float_t &sy,
   sz = TMath::Sqrt(cl->GetSigmaZ2());
 */
 }
-