FairRoot/PandaRoot
PndEmcClusterMoments.cxx
Go to the documentation of this file.
1 //--------------------------------------------------------------------------
2 // File and Version Information:
3 // $Id: PndEmcClusterMoments.cc,v 1.3 2005/11/15 01:20:20 steinke Exp $
4 //
5 // Description:
6 // Class PndEmcClusterMoments
7 //
8 // Environment:
9 // Software developed for the BaBar Detector at the SLAC B-Factory.
10 //
11 // Author List:
12 // Stephen J. Gowdy Originator
13 //
14 // Copyright Information:
15 // Copyright (C) 1998 University of Edinburgh
16 //
17 // Dima Melnichuk, adaption for pandaroot
18 //------------------------------------------------------------------------
19 
20 #include "PndEmcClusterMoments.h"
22 
23 #include "PndEmcTwoCoordIndex.h"
24 #include "PndEmcCluster.h"
25 #include "PndEmcDigi.h"
26 #include "TClonesArray.h"
27 #include <iostream>
28 #include <cmath>
29 #include <map>
30 
31 using std::endl;
32 using std::ostream;
33 
34 //----------------
35 // Constructors --
36 //----------------
37 
38 PndEmcClusterMoments::PndEmcClusterMoments(const PndEmcCluster &cluster, const TClonesArray *digiArray):
39  PndEmcAbsClusterProperty(cluster, digiArray)
40 {
41 }
42 
45 {}
46 
47 //--------------
48 // Destructor --
49 //--------------
50 
52 {}
53 
54 //-------------
55 // Methods --
56 //-------------
57 
60 {
61  Double_t sum=0;
62 
63  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
64 
65  TVector3 clusterLocation( MyCluster().where() );
66  while ( iter != Members().end() ) {
67  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
68  TVector3 digiLocation( digi->where() );
69  Double_t dx = digiLocation.x() - clusterLocation.x();
70  Double_t dy = digiLocation.y() - clusterLocation.y();
71  Double_t dz = digiLocation.z() - clusterLocation.z();
72  sum+=digi->GetEnergy()*(dx*dx + dy*dy + dz*dz);
73  ++iter;
74  }
75 
76  sum/=MyCluster().energy();
77  return sum;
78 }
79 
80 Double_t
82 {
83  TVector3 cluster = MyCluster().where();
84 
85  Double_t sum =0;
86  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
87  while ( iter != Members().end() ) {
88  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
89  Double_t da = cluster.Angle(digi->where());
90  sum+=digi->GetEnergy()*da*da;
91  ++iter;
92  }
93 
94  sum/=MyCluster().energy();
95  return sum;
96 }
97 
100 {
101  Double_t t=0;
102 
103  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
104 
105  Double_t clusterTheta(MyCluster().theta());
106 
107  while ( iter != Members().end() ) {
108  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
109  t+=digi->GetEnergy()*(digi->GetTheta()- clusterTheta);
110  ++iter;
111  }
112 
113  t/=MyCluster().energy();
114 
115  return t;
116 
117 }
118 
119 
120 Double_t
122 {
123  Double_t p=0;
124  Double_t clus_phi=MyCluster().phi();
125 
126  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
127 
128  while ( iter != Members().end() ) {
129  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
130  p+=digi->GetEnergy()*PndEmcCluster::FindPhiDiff(digi->GetPhi(),clus_phi);
131  ++iter;
132  }
133 
134  p/=MyCluster().energy();
135 
136  return(p);
137 }
138 
139 Double_t
141 {
142  Double_t t=0;
143 
144  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
145  Double_t clusterTheta(MyCluster().theta());
146 
147  while ( iter != Members().end() ) {
148  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
149  Double_t theta_diff=digi->GetTheta()-clusterTheta;
150  t+=digi->GetEnergy()*theta_diff*theta_diff;
151  ++iter;
152  }
153 
154  t/=MyCluster().energy();
155 
156  return(t);
157 
158 }
159 
160 Double_t
162 {
163  Double_t p=0;
164  Double_t clus_phi=MyCluster().phi();
165 
166  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
167 
168  while ( iter != Members().end() ) {
169  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
171  p+=digi->GetEnergy()*phi_diff*phi_diff;
172  ++iter;
173  }
174 
175  p/=MyCluster().energy();
176 
177  return(p);
178 
179 }
180 
181 Double_t
183 {
184  Double_t moment=0;
186  Double_t axis=properties->Major_axis();
187  Double_t clusT=MyCluster().theta(),clusP=MyCluster().phi();
188 
189  if ( axis==-999. ) return ( 0. );
190 
191  TVector2 maj(cos( axis ), sin( axis ));
192 
193  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
194 
195  while ( iter != Members().end() ) {
196  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
197  TVector2 coord(PndEmcCluster::FindPhiDiff(digi->GetPhi(),clusP), digi->GetTheta()-clusT);
198 
199  moment += fabs( coord*maj ) * digi->GetEnergy();
200  ++iter;
201  }
202 
203  moment/=MyCluster().energy();
204 
205  return( moment );
206 }
207 
208 
209 Double_t
211 {
212  Double_t moment=0;
214  Double_t axis=properties->Major_axis();
215  Double_t clusT=MyCluster().theta(),clusP=MyCluster().phi();
216 
217  if ( axis==-999. ) return ( 0. );
218 
219  TVector2 maj(cos( axis ), sin( axis ));
220 
221  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
222 
223  while ( iter != Members().end() ) {
224  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
225  TVector2 coord(PndEmcCluster::FindPhiDiff(digi->GetPhi(),clusP), digi->GetTheta()-clusT);
226 
227  moment+=(coord*maj)*(coord*maj)*digi->GetEnergy();
228  ++iter;
229  }
230 
231  moment/=MyCluster().energy();
232 
233  return( moment );
234 }
235 
236 Double_t
238 {
239  Double_t moment=0;
241  Double_t axis=properties->Major_axis();
242  Double_t clusT=MyCluster().theta(),clusP=MyCluster().phi();
243 
244 
245  if ( axis==-999. ) return ( 0. );
246 
247  axis+=TMath::Pi()/2.0;
248  TVector2 min(cos( axis ), sin( axis ));
249 
250  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
251 
252  while ( iter != Members().end() ) {
253  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
254  TVector2 coOrd(PndEmcCluster::FindPhiDiff(digi->GetPhi(),clusP), digi->GetTheta()-clusT);
255 
256  moment+=fabs( coOrd*min )*digi->GetEnergy();
257  ++iter;
258  }
259 
260  moment/=MyCluster().energy();
261 
262  return( moment );
263 }
264 
265 
266 Double_t
268 {
269  Double_t moment=0;
271  Double_t axis=properties->Major_axis();
272  Double_t clusT=MyCluster().theta(),clusP=MyCluster().phi();
273 
274  if ( axis==-999. ) return ( 0. );
275 
276  axis+=TMath::Pi()/2.0;
277  TVector2 min(cos( axis ), sin( axis));
278 
279  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
280 
281  while ( iter != Members().end() ) {
282  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
283  TVector2 coOrd(PndEmcCluster::FindPhiDiff(digi->GetPhi(),clusP), digi->GetTheta()-clusT);
284 
285  moment+=(coOrd*min)*(coOrd*min)*digi->GetEnergy();
286  iter++;
287  }
288 
289  moment/=MyCluster().energy();
290 
291  return( moment );
292 }
293 
294 TVector3
296 {
297  TVector3 aVector(0,0,0);
298  TVector3 clusterCentre( MyCluster().where() );
299 
300  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
301  while ( iter != Members().end() ) {
302  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
303  aVector += ( digi->where() - clusterCentre ) * digi->GetEnergy();
304  ++iter;
305  }
306  aVector *= 1./MyCluster().energy();
307 
308  return aVector;
309 }
310 
311 TVector3
313 {
314  TVector3 aVector(0,0,0);
315  TVector3 clusterCentre( MyCluster().where() );
316 
317  std::map<Int_t, Int_t>::const_iterator iter = Members().begin();
318  while ( iter != Members().end() ) {
319  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(iter->second);
320  TVector3 displacement( digi->where() - clusterCentre );
321  aVector += TVector3(displacement.X()*displacement.X(), displacement.Y()*displacement.Y(),displacement.Z()*displacement.Z()) * digi->GetEnergy();
322  ++iter;
323  }
324  aVector *= 1./MyCluster().energy();
325 
326  return aVector;
327 }
328 
329 void
330 PndEmcClusterMoments::Print(const Option_t* ) const
331 {
332 // std::cout << " centre1=" << Centre1() << ", centre2=" << Centre2();
333 // std::cout << endl;
334 // std::cout << " theta1=" << Theta1() << ", phi1=" << Phi1();
335 // std::cout << ", theta2=" << Theta2() << ", phi2=" << Phi2();
336 // std::cout << endl;
337 // std::cout << " major1=" << Major1() << ", minor1=" << Minor1();
338 // std::cout << ", major2=" << Major2() << ", minor2=" << Minor2();
339 // std::cout << endl;
340 // std::cout << " secondMoment=" << SecondMoment() << ", secondMomentTP=" << SecondMomentTP();
341 // std::cout << endl;
342 }
343 
Double_t p
Definition: anasim.C:58
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
TClonesArray * digi
double dy
TVector3 where() const
virtual Double_t GetEnergy() const
Definition: PndEmcDigi.cxx:296
represents the reconstructed hit of one emc crystal
Definition: PndEmcDigi.h:40
virtual double Phi2() const
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
virtual double Theta2() const
virtual double Major1() const
Double_t GetTheta() const
Definition: PndEmcDigi.h:101
virtual TVector3 Centre2() const
const PndEmcCluster & MyCluster() const
virtual void Print(const Option_t *opt="") const
basic_ostream< char, char_traits< char > > ostream
Double_t
virtual Double_t Major_axis() const
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:25
axis
Definition: PndRadMapPlane.h:9
virtual TVector3 Centre1() const
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
const TClonesArray * DigiArray() const
virtual double SecondMomentTP() const
virtual double Phi1() const
double dx
virtual double Theta1() const
virtual double Minor1() const
virtual double Major2() const
Double_t GetPhi() const
Definition: PndEmcDigi.h:102
virtual Double_t energy() const
ClassImp(PndAnaContFact)
virtual double SecondMoment() const
const TVector3 & where() const
Definition: PndEmcDigi.h:111
TTree * t
Definition: bump_analys.C:13
Double_t theta() const
const std::map< Int_t, Int_t > & Members() const
Double_t Pi
Double_t phi() const
virtual double Minor2() const
static Double_t FindPhiDiff(Double_t, Double_t)