}
}
+
//________________________________________________________________________
void AliAlignmentTracks::ProcessESD(Bool_t onlyITS,
Int_t minITSpts,
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);
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();
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);
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();
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();
}
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);