]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/TPCLib/AliHLTTPCInterMerger.cxx
- made package indepentend of src
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCInterMerger.cxx
CommitLineData
a6c02c85 1// @(#) $Id$
2
3// Author: Uli Frankenfeld <mailto:franken@fi.uib.no>
4//*-- Copyright &copy ALICE HLT Group
5
a6c02c85 6#include "AliHLTTPCLogging.h"
7#include "AliHLTTPCInterMerger.h"
8#include "AliHLTTPCTrack.h"
9#include "AliHLTTPCTrackSegmentData.h"
10#include "AliHLTTPCTransform.h"
11#include "AliHLTTPCTrackArray.h"
12
13/** \class AliHLTTPCInterMerger
14<pre>
15//_____________________________________________________________
16// AliHLTTPCInterMerger
17//
18// The HLTTPC track segment merger
19//
20</pre>
21*/
22
23#if __GNUC__ >= 3
24using namespace std;
25#endif
26
27ClassImp(AliHLTTPCInterMerger)
28
29AliHLTTPCInterMerger::AliHLTTPCInterMerger()
30{
31 //Default constructor
32 InitMerger(1);
33 Is2Global(kFALSE);
34// SetParameter(2,2,.3,.3,.3);
35 SetParameter(1,0.5,0.0005,0.05,0.1);
36 fRowMax = fRowMin = 0;
37}
38
39
40AliHLTTPCInterMerger::~AliHLTTPCInterMerger(){
41 //Destructor
42
43}
44
45void AliHLTTPCInterMerger::SlowMerge(){
46 Int_t nrow= fRowMax-fRowMin+1;
47 void *ntuple=GetNtuple();
48 AliHLTTPCTrackArray * tracks = GetInTracks(0);
49 const Int_t kNIn =tracks->GetNTracks();
50 AliHLTTPCTrack *tr[2];
51 Bool_t merge = kTRUE;
52 for(Int_t in=0;in<kNIn;in++)
53 tracks->GetCheckedTrack(in)->CalculateHelix();
54 while(merge){
55 Int_t inmin=-1,outmin=-1;
56 Double_t min=10;
57 for(Int_t out=0;out<kNIn;out++){
58 AliHLTTPCTrack *outertrack=tracks->GetCheckedTrack(out);
59 if(!outertrack) continue;
60 for(Int_t in=0;in<kNIn;in++){
61 if(in==out) continue;
62 AliHLTTPCTrack *innertrack=tracks->GetCheckedTrack(in);
63 if(!innertrack) continue;
64 if(outertrack->GetNHits()+innertrack->GetNHits()>nrow) continue;
65
66 Double_t diff = TrackDiff(innertrack,outertrack);
67
68 if(diff>=0&&diff<min){
69 min=diff;
70 inmin=in;
71 outmin=out;
72 }
73 }
74 }
75 if(inmin>=0&&outmin>=0){
76 AliHLTTPCTrack *outertrack=tracks->GetTrack(outmin);
77 AliHLTTPCTrack *innertrack=tracks->GetTrack(inmin);
78 tr[0]=innertrack;
79 tr[1]=outertrack;
80 SortTracks(tr,2);
81 MultiMerge(tracks,tr,2);
82 outertrack->CalculatePoint(tr[0]->GetLastPointX());
83 innertrack->CalculatePoint(tr[0]->GetLastPointX());
84 PrintDiff(innertrack,outertrack);
85 FillNtuple(ntuple,innertrack,outertrack);
86 tracks->Remove(outmin);
87 tracks->Remove(inmin);
88 }
89 else merge = kFALSE;
90 }
91 LOG(AliHLTTPCLog::kInformational,"AliHLTTPCInterMerger::SlowMerge","Result")
92 <<AliHLTTPCLog::kDec<<"Merged Tracks: "<<tracks->GetNTracks()-kNIn<<ENDLOG;
93
94 char name[256];
95 sprintf(name,"ntuple_i_%d.root",fPatch);
96 WriteNtuple(name,ntuple);
97}
98
99void AliHLTTPCInterMerger::MMerge(){
100 while(Merge());
101 GetOutTracks()->AddTracks(GetInTracks(0));
102}
103
104Int_t AliHLTTPCInterMerger::Merge(){
105 Int_t nrow= fRowMax-fRowMin+1;
106 Double_t xval =AliHLTTPCTransform::Row2X((fRowMax+fRowMin)/2);
107 AliHLTTPCTrackArray * tracks = GetInTracks(0);
108 const Int_t kNIn =tracks->GetNTracks();
109 AliHLTTPCTrack *tr[2];
110 for(Int_t in=0;in<kNIn;in++){
111 AliHLTTPCTrack *t = tracks->GetCheckedTrack(in);
112 if(t){
113 t->CalculateHelix();
114 t->CalculatePoint(xval);
115 }
116 }
117 for(Int_t out=0;out<kNIn;out++){
118 AliHLTTPCTrack *outertrack=tracks->GetCheckedTrack(out);
119 if(!outertrack) continue;
120 for(Int_t in=0;in<kNIn;in++){
121 if(in==out) continue;
122 AliHLTTPCTrack *innertrack=tracks->GetCheckedTrack(in);
123 if(!innertrack) continue;
124 if(outertrack->GetNHits()+innertrack->GetNHits()>nrow) continue;
125
126 if(IsTrack(innertrack,outertrack)){
127 tr[0]=innertrack;
128 tr[1]=outertrack;
129 SortGlobalTracks(tr,2);
130
131 Double_t r0 = pow(tr[0]->GetLastPointX(),2)+
132 pow(tr[0]->GetLastPointY(),2);
133 Double_t r1 = pow(tr[1]->GetFirstPointX(),2)+
134 pow(tr[1]->GetFirstPointY(),2);
135 if(r0<r1){
136 MultiMerge(tracks,tr,2);
137 tracks->Remove(out);
138 tracks->Remove(in);
139 break;
140 }
141 }
142 }
143 }
144 Int_t nmerged = tracks->GetNTracks()-kNIn;
145 LOG(AliHLTTPCLog::kInformational,"AliHLTTPCInterMerger::Merge","Result")
146 <<AliHLTTPCLog::kDec<<"Merged Tracks: "<<nmerged<<ENDLOG;
147 //add in tracks
148// GetOutTracks()->AddTracks(GetInTracks(0));
149
150 return nmerged;
151}
152
153