]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
ProcessESD methods updated (A.Rossi)
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 26 Nov 2007 11:20:47 +0000 (11:20 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 26 Nov 2007 11:20:47 +0000 (11:20 +0000)
STEER/AliAlignmentTracks.cxx

index cd8efdac45e422d7b73b1ae2c24d7464f69e5734..4cefd85354b9f667a4fe162fb3c3a24d33d164ef 100644 (file)
@@ -143,6 +143,7 @@ void AliAlignmentTracks::AddESD(const char *esdfilename, const char *esdtreename
   }
 }
 
+
 //________________________________________________________________________
 void AliAlignmentTracks::ProcessESD(Bool_t onlyITS,
                                    Int_t minITSpts,
@@ -209,18 +210,14 @@ void AliAlignmentTracks::ProcessESD(Bool_t onlyITS,
       array = track->GetTrackPointArray();
 
       if(onlyITS) {
-       array2 = new AliTrackPointArray(track->GetNcls(0));
-       Bool_t smallAngleWrtITSModulePlanes=kFALSE;
+       Bool_t layerOK[6]={kTRUE,kTRUE,kTRUE,kTRUE,kTRUE,kTRUE};
        Int_t ipt,volId,modId,layerId;
        Int_t jpt=0;
        for(ipt=0; ipt<array->GetNPoints(); ipt++) {
          array->GetPoint(point,ipt);
          volId = point.GetVolumeID();
          layerId = AliGeomManager::VolUIDToLayer(volId,modId);
-         if(layerId<7) {
-           array2->AddPoint(jpt,&point);
-           jpt++;
-         }
+         if(layerId>6) continue;
          // check minAngleWrtITSModulePlanes
          if(cuts) {
            Double_t p[3]; track->GetDirection(p);
@@ -230,10 +227,24 @@ void AliAlignmentTracks::ProcessESD(Bool_t onlyITS,
            Double_t angle = pvec.Angle(normvec);
            if(angle>0.5*TMath::Pi()) angle = TMath::Pi()-angle;
            angle = 0.5*TMath::Pi()-angle;
-           if(angle<minAngleWrtITSModulePlanes) smallAngleWrtITSModulePlanes=kTRUE;
+           if(angle<minAngleWrtITSModulePlanes) {
+             layerOK[layerId-1]=kFALSE;
+             continue;
+           }
          }
+         jpt++;
+       }
+       if(jpt < minITSpts) continue;      
+       array2 = new AliTrackPointArray(jpt);
+       jpt=0;
+       for(ipt=0; ipt<array->GetNPoints(); ipt++) {
+         array->GetPoint(point,ipt);
+         volId = point.GetVolumeID();
+         layerId = AliGeomManager::VolUIDToLayer(volId,modId);
+         if(layerId>6 || !layerOK[layerId-1]) continue;
+         array2->AddPoint(jpt,&point);
+         jpt++;
        }
-       if(smallAngleWrtITSModulePlanes) continue;
       } // end if(onlyITS)
  
       pointsTree->Fill();
@@ -355,18 +366,11 @@ void AliAlignmentTracks::ProcessESDCosmics(Bool_t onlyITS,
     AliESDtrack * track1 = esd->GetTrack(good1);
     AliESDtrack * track2 = esd->GetTrack(good2);
 
-    Int_t ntotpts;
-    if(onlyITS) {
-      ntotpts = track1->GetNcls(0)+track2->GetNcls(0);
-    } else {
-      ntotpts = track1->GetTrackPointArray()->GetNPoints()+
-               track2->GetTrackPointArray()->GetNPoints();
-    }
-    array2 = new AliTrackPointArray(ntotpts);
     AliTrackPoint point;
     Int_t ipt,volId,modId,layerId;
     Int_t jpt=0;
-    Bool_t smallAngleWrtITSModulePlanes=kFALSE;
+    Bool_t layerOK[6][2]; 
+    for(Int_t l1=0;l1<6;l1++) for(Int_t l2=0;l2<2;l2++) layerOK[l1][l2]=kTRUE; 
     array = track1->GetTrackPointArray();
     for(ipt=0; ipt<array->GetNPoints(); ipt++) {
       array->GetPoint(point,ipt);
@@ -383,10 +387,12 @@ void AliAlignmentTracks::ProcessESDCosmics(Bool_t onlyITS,
          Double_t angle = pvec.Angle(normvec);
          if(angle>0.5*TMath::Pi()) angle = TMath::Pi()-angle;
          angle = 0.5*TMath::Pi()-angle;
-         if(angle<minAngleWrtITSModulePlanes) smallAngleWrtITSModulePlanes=kTRUE;
+         if(angle<minAngleWrtITSModulePlanes) {
+           layerOK[layerId-1][0]=kFALSE;
+           continue;
+         }
        }
       }
-      array2->AddPoint(jpt,&point);
       jpt++;
     }
     array = track2->GetTrackPointArray();
@@ -405,14 +411,41 @@ void AliAlignmentTracks::ProcessESDCosmics(Bool_t onlyITS,
          Double_t angle = pvec.Angle(normvec);
          if(angle>0.5*TMath::Pi()) angle = TMath::Pi()-angle;
          angle = 0.5*TMath::Pi()-angle;
-         if(angle<minAngleWrtITSModulePlanes) smallAngleWrtITSModulePlanes=kTRUE;
+         if(angle<minAngleWrtITSModulePlanes) {
+           layerOK[layerId-1][0]=kFALSE;
+           continue;
+         }
        }
       }
+      jpt++;
+    }
+
+    if(jpt < 2*minITSpts) continue;
+    array2 = new AliTrackPointArray(jpt);
+    jpt=0;
+    array = track1->GetTrackPointArray();
+    for(ipt=0; ipt<array->GetNPoints(); ipt++) {
+      array->GetPoint(point,ipt);
+      if(onlyITS) {
+       volId = point.GetVolumeID();
+       layerId = AliGeomManager::VolUIDToLayer(volId,modId);
+       if(layerId>6 || !layerOK[layerId-1][0]) continue;
+      }
+      array2->AddPoint(jpt,&point);
+      jpt++;
+    }
+    array = track2->GetTrackPointArray();
+    for(ipt=0; ipt<array->GetNPoints(); ipt++) {
+      array->GetPoint(point,ipt);
+      if(onlyITS) {
+       volId = point.GetVolumeID();
+       layerId = AliGeomManager::VolUIDToLayer(volId,modId);
+       if(layerId>6 || !layerOK[layerId-1][1]) continue;
+      }
       array2->AddPoint(jpt,&point);
       jpt++;
     }
 
-    if(smallAngleWrtITSModulePlanes) continue;
     pointsTree->Fill();
   }
 
@@ -724,7 +757,7 @@ void AliAlignmentTracks::AlignVolumes(const TArrayI *volids, const TArrayI *voli
       AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
       AliAlignObj *alignObj = fAlignObjs[iLayer-AliGeomManager::kFirstLayer][iModule];      
       *alignObj *= *minimizer->GetAlignObj();
-      alignObj->Print("");
+      if(iterations==1)alignObj->Print("");
     }
 
     UnloadPoints(nArrays, points);