FairRoot/PandaRoot
PndEmcClusterEnergySums.cxx
Go to the documentation of this file.
1 //--------------------------------------------------------------------------
2 // File and Version Information:
3 //
4 // Description:
5 // Class PndEmcClusterEnergySums
6 //
7 // Environment:
8 // Software developed for the BaBar Detector at the SLAC B-Factory.
9 //
10 // Author List:
11 // Stephen J. Gowdy Originator
12 // Helmut Marsiske
13 //
14 // Copyright Information:
15 // Copyright (C) 1998 University of Edinburgh
16 //
17 // Dima Melnichuk, adaption for pandaroot
18 //------------------------------------------------------------------------
20 #include "PndEmcCluster.h"
21 #include "PndEmcDigi.h"
22 #include "TClonesArray.h"
23 
24 #include <iostream>
25 
26 
27 
28 using std::endl;
29 using std::ostream;
30 
31 PndEmcClusterEnergySums::PndEmcClusterEnergySums(const PndEmcCluster &toUse, const TClonesArray *digiArray):
32  PndEmcAbsClusterProperty( toUse, digiArray )
33 {
34 }
35 
37  PndEmcAbsClusterProperty( other )
38 {}
39 
40 //--------------
41 // Destructor --
42 //--------------
43 
45 {}
46 
47 //-------------
48 // Methods --
49 //-------------
50 
53 {
54  Double_t sum = 0;
55 
56  // If asked for too many digis summed return the whole energy
57  if ( n > MyCluster().NumberOfDigis() ) return ( MyCluster().energy() );
58 
59  std::vector<Int_t>::const_iterator digi_iter;
60  std::vector<Int_t> digiList = MyCluster().DigiList();
61  for (Int_t i=0; i<n; n++)
62  {
63  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(digiList[i]);
64  sum += digi->GetEnergy();
65  }
66 
67  return( sum );
68 }
69 
72 {
73  Double_t sum = 0;
74  std::vector<Int_t>::const_iterator digi_iter;
75  std::vector<Int_t> digiList = MyCluster().DigiList();
76  for (digi_iter=digiList.begin();digi_iter!=digiList.end();++digi_iter)
77  {
78  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(*digi_iter);
79  if ( MyCluster().DistanceToCentre( digi) < distance )
80  sum += digi->GetEnergy();
81  }
82 
83  return( sum );
84 }
85 
88 {
89  const PndEmcDigi* current = MyCluster().Maxima(DigiArray());
90  return( current->GetEnergy() );
91 }
92 
95 {
96  PndEmcDigi* maxDigi = const_cast<PndEmcDigi*> (MyCluster().Maxima(DigiArray()));
97 
98  Double_t sum = maxDigi->GetEnergy();
99 
100  std::vector<Int_t>::const_iterator digi_iter;
101  std::vector<Int_t> digiList = MyCluster().DigiList();
102  for (digi_iter=digiList.begin();digi_iter!=digiList.end();++digi_iter)
103  {
104  PndEmcDigi *digi = (PndEmcDigi *) DigiArray()->At(*digi_iter);
105  if (digi==maxDigi) continue;
106  if ( digi->isNeighbour(maxDigi))
107  {
108  sum += digi->GetEnergy();
109  }
110  }
111  return sum;
112 }
113 
114 Double_t
116 {
117  const PndEmcDigi* maxDigi = MyCluster().Maxima(DigiArray());
118  Double_t sum = E9();
119  std::vector<Int_t> tmpDigiList;
120 
121  std::vector<Int_t>::const_iterator current_i, current_j;
122  std::vector<Int_t> digiList = MyCluster().DigiList();
123 
124  for (current_i=digiList.begin();current_i!=digiList.end();++current_i)
125  {
126  PndEmcDigi *digi_i = (PndEmcDigi *) DigiArray()->At(*current_i);
127  if (digi_i == maxDigi) continue;
128  if (digi_i->isNeighbour(maxDigi))
129  {
130  for (current_j=digiList.begin();current_j!=digiList.end();++current_j){
131  PndEmcDigi *digi_j = (PndEmcDigi *) DigiArray()->At(*current_j);
132  if ( (digi_j == maxDigi) || (digi_j->isNeighbour(maxDigi) ) ) continue;
133  if ( digi_j->isNeighbour(digi_i) ) {
134  std::vector<Int_t>::iterator iter;
135  iter = std::find(tmpDigiList.begin(), tmpDigiList.end(), *current_j);
136  if (iter == tmpDigiList.end()) {
137  sum += digi_j->GetEnergy();
138  tmpDigiList.push_back(*current_j);
139  }
140  }
141  }
142  }
143  }
144 
145  return sum;
146 }
147 
149 {
150  Double_t e9 = E9();
151  //Double_t e1e9 = ( e9 != 0. )? e1e9 = E1()/e9 : -1.;
152  /*
153  Double_t e1e9 = -1;
154  if( e9 != 0.0){
155  e1e9 = E1()/e9;
156  }
157  return( e1e9 );
158  */
159  return ( e9 != 0. )? E1()/e9 : -1.;
160 }
161 
163 {
164  Double_t e25 = E25();
165  //Double_t e9e25 = ( e25 != 0. )? e9e25 = E9()/e25 : -1.;
166  /*
167  Double_t e9e25 = -1;
168  if( e25 != 0.0){
169  e9e25 = E9()/e25;
170  }
171  return( e9e25 );
172  */
173  return ( e25 != 0. )? E9()/e25 : -1.;
174 }
175 
176 void
177 PndEmcClusterEnergySums::Print(const Option_t* ) const
178 {
179  std::cout << " E1=" << E1() << ", E9=" << E9() << ", E25=" << E25();
180  std::cout << ", E1/E9=" << E1E9() << ", E9/E25=" << E9E25();
181  std::cout << endl;
182 }
183 
TClonesArray * digi
virtual Double_t GetEnergy() const
Definition: PndEmcDigi.cxx:296
represents the reconstructed hit of one emc crystal
Definition: PndEmcDigi.h:40
Int_t i
Definition: run_full.C:25
int n
const std::vector< Int_t > & DigiList() const
Definition: PndEmcCluster.h:40
virtual Double_t E1() const
const PndEmcCluster & MyCluster() const
basic_ostream< char, char_traits< char > > ostream
virtual const PndEmcDigi * Maxima(const TClonesArray *digiArray) const
Double_t
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
const TClonesArray * DigiArray() const
virtual Double_t energy(Int_t numberOfDigis) const
virtual Double_t E1E9() const
virtual void Print(const Option_t *opt="") const
virtual Double_t E25() const
ClassImp(PndAnaContFact)
virtual Double_t E9() const
virtual Double_t E9E25() const
bool isNeighbour(const PndEmcDigi *theDigi) const
Definition: PndEmcDigi.cxx:201