fFirst = first;
fLast = last;
Is2Global(kTRUE);
- SetParameter(2,2,0.001,0.1,0.4);
+ SetParameter(2,2,0.001,0.05,0.1);
}
AliL3GlobalMerger::~AliL3GlobalMerger(){
<<"Need more than one Slice!"<<ENDLOG;
return;
}
- for(Int_t i=0; i<fNSlices-1; i++){
+ for(Int_t i=0; i<fNSlices; i++){
+ if(fNSlices!=18 && i+1 == fNSlices) continue; //full cicle == 18 slices
Int_t slice = fFirst + i;
AliL3TrackArray *ttt0=GetInTracks(i);
- AliL3TrackArray *ttt1=GetInTracks(i+1);
+ Int_t slice2 = i+1;
+ if(slice2==fNSlices) slice2 =0;
+ AliL3TrackArray *ttt1=GetInTracks(slice2);
Float_t angle = PI/18.; //10 degrees -> the border of the slices
fTransformer->Local2GlobalAngle(&angle,slice);
+ if(i==0)
+ ttt0->QSort();
+ ttt1->QSort();
for(Int_t s0=0;s0<ttt0->GetNTracks();s0++){
- AliL3Track *track0=ttt0->GetTrack(s0);
+ AliL3Track *track0=ttt0->GetCheckedTrack(s0);
+ if(!track0) continue;
track0->CalculateHelix();
track0->CalculateEdgePoint(angle);
- if(!track0->IsPoint()) ttt0->Remove(s0);
+// if(track0->IsPoint()) AddTrack(tout,track0);
}
-// ttt0->Compress();
for(Int_t s1=0;s1<ttt1->GetNTracks();s1++){
- AliL3Track *track1=ttt1->GetTrack(s1);
+ AliL3Track *track1=ttt1->GetCheckedTrack(s1);
+ if(!track1) continue;
track1->CalculateHelix();
track1->CalculateEdgePoint(angle);
- if(!track1->IsPoint()) ttt1->Remove(s1);
+// if(track1->IsPoint()) AddTrack(tout,track1);
}
-// ttt1->Compress();
Bool_t merge = kTRUE;
while(merge){
Int_t min0=-1,min1=-1;
for(Int_t s0=0;s0<ttt0->GetNTracks();s0++){
AliL3Track *track0=ttt0->GetCheckedTrack(s0);
if(!track0) continue;
- if(!track0->CalculateEdgePoint(angle)) continue;
+ if(!track0->IsPoint()) continue;
for(Int_t s1=0;s1<ttt1->GetNTracks();s1++){
AliL3Track *track1=ttt1->GetCheckedTrack(s1);
if(!track1) continue;
- if(!track1->CalculateEdgePoint(angle)) continue;
+ if(!track1->IsPoint()) continue;
Double_t diff = TrackDiff(track0,track1);
if(diff>=0&&diff<min){
min=diff;
track[1] = track1;
SortGlobalTracks(track,2);
MultiMerge(tout,track,2);
- track0->CalculateEdgePoint(angle);
- track1->CalculateEdgePoint(angle);
track0->CalculateReferencePoint(angle);
track1->CalculateReferencePoint(angle);
PrintDiff(track0,track1);
FillNtuple(ntuple,track0,track1);
ttt0->Remove(min0);
ttt1->Remove(min1);
-// ttt0->Compress();
-// ttt1->Compress();
}
else merge = kFALSE;
}
+ ttt0->Compress();
+ ttt1->Compress();
LOG(AliL3Log::kInformational,"AliL3GlobalMerger::SlowMerge","Result")
- <<AliL3Log::kDec<<"Merged Tracks: "<<tout->GetNTracks()<<ENDLOG;
+ <<AliL3Log::kDec<<"Merged Tracks: "<<tout->GetNTracks()<<" at:"
+ <<angle<<ENDLOG;
}
WriteNtuple("ntuple_s.root",ntuple);
}
<<"Need more than one Slice!"<<ENDLOG;
return;
}
- for(Int_t i=0; i<fNSlices-1; i++){
+ for(Int_t i=0; i<fNSlices; i++){
+ if(fNSlices!=18 && i+1 == fNSlices) continue; //full cicle == 18 slices
Int_t slice = fFirst + i;
AliL3TrackArray *ttt0=GetInTracks(i);
- AliL3TrackArray *ttt1=GetInTracks(i+1);
+ Int_t slice2 = i+1;
+ if(slice2==fNSlices) slice2 =0;
+ AliL3TrackArray *ttt1=GetInTracks(slice2);
Float_t angle = PI/18.; //10 degrees -> the border of the slices
fTransformer->Local2GlobalAngle(&angle,slice);
if(i==0)
track[0] = track0;
track[1] = track1;
SortGlobalTracks(track,2);
- MultiMerge(tout,track,2);
- ismatched0[s0]=kTRUE;
- ismatched1[s1]=kTRUE;
- ttt0->Remove(s0);
- ttt1->Remove(s1);
+ Double_t r0 = pow(track[0]->GetLastPointX(),2)+
+ pow(track[0]->GetLastPointY(),2);
+ Double_t r1 = pow(track[1]->GetFirstPointX(),2)+
+ pow(track[1]->GetFirstPointY(),2);
+ if(r0<r1){
+ MultiMerge(tout,track,2);
+ ismatched0[s0]=kTRUE;
+ ismatched1[s1]=kTRUE;
+ ttt0->Remove(s0);
+ ttt1->Remove(s1);
+ }
}
}
}
AliL3InterMerger::AliL3InterMerger():AliL3Merger(1){
//Default constructor
Is2Global(kFALSE);
- SetParameter(2,2,.3,.3,.3);
+// SetParameter(2,2,.3,.3,.3);
+ SetParameter(1,0.5,0.0005,0.05,0.1);
fRowMax = fRowMin = 0;
}
if(IsTrack(innertrack,outertrack)){
tr[0]=innertrack;
tr[1]=outertrack;
- SortTracks(tr,2);
- if(tr[0]->GetLastPointX()<tr[1]->GetFirstPointX()){
+ SortGlobalTracks(tr,2);
+
+ Double_t r0 = pow(tr[0]->GetLastPointX(),2)+
+ pow(tr[0]->GetLastPointY(),2);
+ Double_t r1 = pow(tr[1]->GetFirstPointX(),2)+
+ pow(tr[1]->GetFirstPointY(),2);
+ if(r0<r1){
MultiMerge(tracks,tr,2);
tracks->Remove(out);
tracks->Remove(in);