107{
109
111 float xmin = p1.
Xmin(), xmax = p1.
Xmax();
112 float ymin = p1.
Ymin(), ymax = p1.
Ymax();
113 int nx = (int)((xmax-xmin)/xbin+2);
114 int ny = (int)((ymax-ymin)/ybin+2);
115
116
117 int meancell1 = (int)Sqrt(p1.
N()/nx/ny);
118 int meancell2 = (int)Sqrt(p2.
N()/nx/ny);
119 int meancell = (int)Max(meancell1,meancell2)+10;
120
121 TObjArray as1(nx*ny), as2(nx*ny);
122 for(int i=0; i<nx*ny; i++) {
123 as1.Add(new TObjArray(meancell));
124 as2.Add(new TObjArray(meancell));
125 }
126
127 int kx,ky, k;
128 for(
int i=0; i<p1.
N(); i++) {
130 if(
s->Flag()==-10)
continue;
131 ky = (int)((
s->Y()-ymin)/ybin);
132 kx = (int)((
s->X()-xmin)/xbin);
133 k = nx*ky + kx;
134 ((TObjArray*)(as1.At(k)))->Add(
s);
135 }
136 for(
int i=0; i<p2.
N(); i++) {
138 if(
s->Flag()==-10)
continue;
139 if(
s->X() <= xmin-xbin/2)
continue;
140 if(
s->X() >= xmax+xbin/2)
continue;
141 if(
s->Y() <= ymin-ybin/2)
continue;
142 if(
s->Y() >= ymax+ybin/2)
continue;
143
144 kx = (int)((
s->X()-xmin - xbin/2)/xbin);
145 ky = (int)((
s->Y()-ymin - ybin/2)/ybin);
146 if(kx>nx-1||kx<0||ky>ny-1||ky<0) continue;
147 ((TObjArray*)(as2.At(nx*ky+kx)))->Add(
s);
148 ((TObjArray*)(as2.At(nx*ky+kx+1)))->Add(
s);
149 ((TObjArray*)(as2.At(nx*(ky+1)+kx)))->Add(
s);
150 ((TObjArray*)(as2.At(nx*(ky+1)+kx+1)))->Add(
s);
151 }
152
153 TObjArray *a1,*a2;
155 for(int i=0; i<nx*ny; i++) {
156 a1 = (TObjArray*)as1.At(i);
157 a2 = (TObjArray*)as2.At(i);
158 for(int i1=0; i1<a1->GetEntriesFast(); i1++)
159 {
161 for(int i2=0; i2<a2->GetEntriesFast(); i2++)
162 {
165 if( Abs(
s2->
TX()-
s1->
TX()) > 0.25)
continue;
166 if( Abs(
s2->
TY()-
s1->
TY()) > 0.25)
continue;
169 }
170 }
171 }
172
173}
virtual Float_t Xmax() const
Definition: EdbVirtual.cxx:196
virtual Float_t Ymin() const
Definition: EdbVirtual.cxx:206
virtual Float_t Xmin() const
Definition: EdbVirtual.cxx:186
virtual Float_t Ymax() const
Definition: EdbVirtual.cxx:216
s
Definition: check_shower.C:55