HighLAND
CoreUtils.cxx
1 #include "CoreUtils.hxx"
2 #include <TVector3.h>
3 #include <stdio.h>
4 #include <math.h>
5 #include <iostream>
6 #include <typeinfo>
7 
8 namespace anaUtils{
9  std::string skimFileName="";
10  bool breakLoop=false;
11 }
12 
13 
14 //********************************************************************
15 void anaUtils::ConfigureTreeBranch(TTree* tree, const char* bname, void* add, TBranch** ptr){
16 //********************************************************************
17 
18  if (!tree->FindLeaf(bname)) return;
19  tree->SetBranchAddress(bname,add,ptr);
20 }
21 
22 //********************************************************************
23 void anaUtils::ClearArray(AnaRecObjectC** objArr, int nObj){
24 //********************************************************************
25 
26  for(int i = 0; i < nObj; ++i){
27  objArr[i] = NULL;
28  }
29 }
30 
31 //********************************************************************
32 void anaUtils::ClearArray(AnaTrueObjectC** objArr, int nObj){
33 //********************************************************************
34 
35  for(int i = 0; i < nObj; ++i){
36  objArr[i] = NULL;
37  }
38 }
39 
40 //********************************************************************
41 void anaUtils::ReserveArray(Int_t* arr, int n, Int_t ini){
42 //********************************************************************
43 
44  for(int i = 0; i < n; ++i){
45  arr[i] = ini;
46  }
47  return;
48 }
49 
50 //********************************************************************
51 void anaUtils::ReserveArray(Float_t* arr, int n, Float_t ini){
52 //********************************************************************
53 
54  for(int i = 0; i < n; ++i){
55  arr[i] = ini;
56  }
57  return;
58 }
59 
60 //********************************************************************
61 void anaUtils::CopyArray(const Int_t* src, Int_t* dest, int n){
62 //********************************************************************
63 
64  for(int i = 0; i < n; ++i){
65  dest[i] = src[i];
66  }
67  return;
68 }
69 
70 
71 //********************************************************************
72 void anaUtils::CopyArray(const Float_t* src, Float_t* dest, int n){
73 //********************************************************************
74 
75  for(int i = 0; i < n; ++i){
76  dest[i] = src[i];
77  }
78  return;
79 }
80 
81 //********************************************************************
82 void anaUtils::CopyArray(const Double_t* src, Float_t* dest, int n){
83 //********************************************************************
84 
85  for(int i = 0; i < n; ++i){
86  dest[i] = (Float_t) src[i];
87  }
88  return;
89 }
90 
91 //********************************************************************
92 void anaUtils::CopyArray(AnaRecObjectC** tgtArr, AnaRecObjectC** srcArr, int nObj){
93 //********************************************************************
94 
95  for(int i = 0; i < nObj; ++i){
96  tgtArr[i] = srcArr[i];
97  }
98 }
99 
100 //********************************************************************
101 void anaUtils::CopyArray(AnaTrueObjectC** tgtArr, AnaTrueObjectC** srcArr, int nObj){
102 //********************************************************************
103 
104  for(int i = 0; i < nObj; ++i){
105  tgtArr[i] = srcArr[i];
106  }
107 }
108 
109 //********************************************************************
110 void anaUtils::VectorToArray(const TLorentzVector& v, Float_t* array){
111 //********************************************************************
112  for (UInt_t i=0; i<4;i++) array[i]=v[i];
113 }
114 
115 //********************************************************************
116 void anaUtils::VectorToArray(const TVector3& v, Float_t* array){
117 //********************************************************************
118  for (UInt_t i=0; i<3;i++) array[i]=v[i];
119 }
120 
121 //********************************************************************
122 TVector3 anaUtils::ArrayToTVector3(const Float_t* array){
123 //********************************************************************
124 
125  TVector3 v;
126  for (UInt_t i=0; i<3;i++) v[i]=array[i];
127  return v;
128 }
129 
130 //********************************************************************
131 TLorentzVector anaUtils::ArrayToTLorentzVector(const Float_t* array){
132 //********************************************************************
133 
134  TLorentzVector v;
135  for (UInt_t i=0; i<4;i++) v[i]=array[i];
136  return v;
137 }
138 
139 //********************************************************************
140 void anaUtils::CreateArray(Weight_h* &tgtArr, int nObj, Weight_h ini){
141 //********************************************************************
142 
143  tgtArr = new Weight_h[nObj];
144  for(int i = 0; i < nObj; ++i){
145  tgtArr[i] = ini;
146  }
147 }
148 
149 //********************************************************************
150 void anaUtils::CreateArray(AnaRecObjectC** &tgtArr, int nObj){
151 //********************************************************************
152 
153  tgtArr = new AnaRecObjectC*[nObj];
154  for(int i = 0; i < nObj; ++i){
155  tgtArr[i] = NULL;
156  }
157 }
158 
159 //********************************************************************
160 void anaUtils::CreateArray(AnaTrueObjectC** &tgtArr, int nObj){
161 //********************************************************************
162 
163  tgtArr = new AnaTrueObjectC*[nObj];
164  for(int i = 0; i < nObj; ++i){
165  tgtArr[i] = NULL;
166  }
167 }
168 
169 //********************************************************************
170 void anaUtils::CreateArray(Float_t* &tgtArr, int nObj, Float_t ini){
171 //********************************************************************
172 
173  tgtArr = new Float_t[nObj];
174  for(int i = 0; i < nObj; ++i){
175  tgtArr[i] = ini;
176  }
177 }
178 
179 //********************************************************************
180 void anaUtils::CreateArray(Int_t* &tgtArr, int nObj, Int_t ini){
181 //********************************************************************
182 
183  tgtArr = new Int_t[nObj];
184  for(int i = 0; i < nObj; ++i){
185  tgtArr[i] = ini;
186  }
187 }
188 
189 //********************************************************************
190 void anaUtils::CreateArray(bool* &tgtArr, int nObj, bool ini){
191 //********************************************************************
192 
193  tgtArr = new bool[nObj];
194  for(int i = 0; i < nObj; ++i){
195  tgtArr[i] = ini;
196  }
197 }
198 
199 //********************************************************************
200 void anaUtils::ResizeArray(AnaRecObjectC** &tgtArr, int nObj){
201 //********************************************************************
202 
203  tgtArr = (AnaRecObjectC**) realloc (tgtArr, nObj*sizeof(AnaRecObjectC*));
204 }
205 
206 //********************************************************************
207 void anaUtils::ResizeArray(AnaTrueObjectC** &tgtArr, int nObj){
208 //********************************************************************
209 
210  tgtArr = (AnaTrueObjectC**) realloc (tgtArr, nObj*sizeof(AnaTrueObjectC*));
211 }
212 
213 //********************************************************************
214 void anaUtils::ResizeArray(Int_t* &tgtArr, int nObj){
215 //********************************************************************
216 
217  tgtArr = (Int_t*) realloc (tgtArr, nObj*sizeof(Int_t));
218 }
219 
220 
221 //********************************************************************
222 Float_t anaUtils::ScalarProduct(Float_t* array1, Float_t* array2, Int_t size){
223 //********************************************************************
224 
225  Float_t product=0;
226  for(int i = 0; i < size; ++i){
227  product += array1[i]*array2[i];
228  }
229  return product;
230 }
231 
232 //*****************************************************************************
233 bool anaUtils::CheckSkimmedEvent(Int_t sRun, Int_t sSubrun, Int_t sEvt){
234 //*****************************************************************************
235 
236  if (skimFileName=="") return true;
237 
238  static std::ifstream inputFile(skimFileName.c_str(), std::ios::in);
239  static bool first=true;
240  static bool found=true;
241 
242  if (first){
243  if (!inputFile) {
244  std::cerr << "Cannot open skim file '" << skimFileName << "'. Exit!" << std::endl;
245  exit(0);
246  }
247  first=false;
248  }
249 
250 
251  static std::string run, subrun, evt;
252  char* pEnd;
253  if (found && !breakLoop){
254  if(!(inputFile >> run >> subrun >> evt)){breakLoop=true;inputFile.close(); }
255  found=false;
256  }
257  if (sRun == strtod(run.c_str(), &pEnd) &&
258  sSubrun == strtod(subrun.c_str(), &pEnd) &&
259  sEvt == strtod(evt.c_str(), &pEnd)){
260  found=true;
261  return true;
262  }
263  found= false;
264 
265 
266  return false;
267 
268 
269 
270 
271 }
Float_t ScalarProduct(Float_t *array1, Float_t *array2, Int_t size=3)
Scalar product of two Float_t arrays. Provided their size.
Definition: CoreUtils.cxx:222
This namespace contains useful functions for analyses related to kinematics.