StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StFmsJetFilter.cxx
1 // @(#)root/eg:$Id: StFmsJetFilter.cxx,v 1.1 2017/03/01 14:58:23 jwebb Exp $
2 // Author: Victor Perev 17/03/2009
3 
4 //______________________________________________________________________________
5 #include "stdlib.h"
6 #include "math.h"
7 #include "TMath.h"
8 #include "TRandom.h"
9 #include <iostream>
10 
11 #include "StFmsJetFilter.h"
12 #include "StGenParticle.h"
13 
14 using namespace std;
15 
26 
27 static StFmsJetFilter qwerty;
28 
90 
91 
92 
93 //______________________________________________________________________________
95 {
96  //ptl.Print("************** In RejectEG ************** ");
97  // Condition: number of tracks etaGate[0]<eta<= etaGate[1] must be bigger etaGate[2]
98  // const static double etaGate[3]={2.5,4.2,30};
99  const static double etaGate[3]={2.4,4.4,30};
100  // const static double etaGate[3]={-4.2,-2.5,30};
101  const StGenParticle *tk=0;
102  int n = ptl.Size();
103 
104 
105  Float_t se[10] = {0};
106  Float_t seH[10] = {0};
107  Float_t seE[10] = {0};
108 
109  Float_t se1[10] = {0};
110  Float_t seH1[10] = {0};
111  Float_t seE1[10] = {0};
112 
113  Float_t se2[10] = {0};
114  Float_t seH2[10] = {0};
115  Float_t seE2[10] = {0};
116 
117  // Float_t e1=0;
118  // Float_t e2=0;
119  // Float_t eta1=0;
120  // Float_t eta2=0;
121  int kk=0;
122 
123  Float_t en, phi, deltaphi, tot_e;
124  tot_e =0;
125  Float_t M_pi=TMath::Pi();
126  Float_t max_e = 0;
127  // Int_t partonPresent = 0;
128  // TRandom *r = new TRandom();
129 
130  for (int i=0;i<n;i++) {
131  tk = ptl(i); if (!tk) continue;
132  /*
133  if(i==6){
134  // e1 = tk->Energy();
135  eta1 = tk->Eta();
136  }
137 
138  if(i==7){
139  // e2 = tk->Energy();
140  eta2 = tk->Eta();
141  }
142  */
143  // if(eta1>2.0) partonPresent = 1;
144  // if(eta2>2.0) partonPresent = 1;
145 
146  if (tk->Eta() < etaGate[0]) continue;
147  if (tk->Eta() > etaGate[1]) continue;
148  if (tk->GetStatusCode()!=1) continue;
149 
150  Int_t isNeutral = 0;
151  if(tk->GetPdgCode() ==111 || tk->GetPdgCode() ==221 || tk->GetPdgCode() ==22 || tk->GetPdgCode() ==11) isNeutral =1;
152  if(TMath::Abs(tk->GetPdgCode() ==13)|| TMath::Abs(tk->GetPdgCode() ==14))continue;
153 
154  en = tk->Energy();
155  tot_e += en;
156  phi = tk->Phi();
157 
158  kk = 9;
159 
160  Float_t phi1 = phi;
161  if(phi<0) phi1 = phi+2*TMath::Pi();
162 
163  for(int ikk =0; ikk <8; ikk++){
164  kk = 9;
165  Float_t ik = ikk;
166  if((phi1 > ik*(M_pi/4.)) && (phi1 < (ik+2.)*(M_pi/4.))) kk = 7-ikk;
167  if(ikk==7) {if((phi1 > ik*(M_pi/4.)) && (phi1 < 1.*(M_pi/4))) kk = 7-ikk;}
168 
169  se2[kk] = se2[kk] + en;
170  if(isNeutral ==1){
171  seE2[kk] = seE2[kk] + en;
172  }
173  if(isNeutral ==0){
174  seH2[kk] = seH2[kk] + en;
175  }
176  }
177 
178  if(max_e <en)max_e = en;
179  kk = 9;
180 
181  if((phi< 1.0*(M_pi/4)) && (phi > -1.0*(M_pi/4))) kk = 0;
182  if((phi< 0*(M_pi/4)) && (phi > -2.0*(M_pi/4))) kk = 1;
183  if((phi< -1.0*(M_pi/4)) && (phi > -3.0*(M_pi/4))) kk = 2;
184  if((phi< -2.0*(M_pi/4)) && (phi > -4.0*(M_pi/4))) kk = 3;
185 
186  if((phi < -3.0*(M_pi/4)) && (phi > 3.0*(M_pi/4))) kk = 4;
187  if((phi < 4.0*(M_pi/4)) && (phi > 2.0*(M_pi/4))) kk = 5;
188  if((phi < 3.0*(M_pi/4)) && (phi > 1.*(M_pi/4))) kk = 6;
189  if((phi < 2.0*(M_pi/4)) && (phi > 0*(M_pi/4))) kk = 7;
190 
191  se1[kk] = se1[kk] + en;
192  if(isNeutral ==1){
193  seE1[kk] = seE1[kk] + en;
194  }
195  if(isNeutral ==0){
196  seH1[kk] = seH1[kk] + en;
197  }
198 
199 for (int k=0;k<5;k++) {
200  deltaphi = (k*(-M_pi/4.)) - phi ;
201  if(deltaphi > M_pi) {deltaphi -= 2.0 * M_pi;}
202  if(deltaphi < -1.*M_pi) {deltaphi += 2.0 * M_pi;}
203  if (deltaphi< -M_pi/2) deltaphi=deltaphi+2*M_pi;
204  deltaphi = TMath::Abs(deltaphi);
205 
206  if(deltaphi < M_pi/4.){
207  se[k] = se[k] + en;
208  if(isNeutral ==1){
209  seE[k] = seE[k] + en;
210  }
211  if(isNeutral ==0){
212  seH[k] = seH[k] + en;
213  }
214  }
215  }
216 
217 
218  for (int k=5;k<8;k++) {
219  deltaphi = (8-k)*(M_pi/4.) - phi ;
220  if(deltaphi > M_pi) {deltaphi -= 2.0 * M_pi;}
221  if(deltaphi < -1.*M_pi) {deltaphi += 2.0 * M_pi;}
222  if (deltaphi< -M_pi/2) deltaphi=deltaphi+2*M_pi;
223  deltaphi = TMath::Abs(deltaphi);
224  if(deltaphi < M_pi/4.){
225  se[k] = se[k] + en;
226  if(isNeutral ==1){
227  seE[k] = seE[k] + en;
228  }
229  if(isNeutral ==0){
230  seH[k] = seH[k] + en;
231  }
232  }
233  }
234 
235  }
236 
237 
238  int trig = 0;
239  Float_t maxE =0;
240  // Float_t maxEn =0;
241  // Float_t maxHn =0;
242  Float_t maxE1 =0;
243  // Float_t maxEn1 =0;
244  //Float_t maxHn1 =0;
245 
246  Float_t maxE2 =0;
247  //Float_t maxEn2 =0;
248  //Float_t maxHn2 =0;
249 
250  Int_t max1 =-1;
251  Int_t max2 =-1;
252  Int_t max3 =-1;
253 
254  for (int k=0;k<8;k++) {
255  // printf("M1 T,E,H : %4.2f %4.2f %4.2f \n",se[k],seE[k],seH[k]);
256  //printf("M2 T,E,H : %4.2f %4.2f %4.2f \n",se1[k],seE1[k],seH1[k]);
257  //printf("M3 T,E,H : %4.2f %4.2f %4.2f \n",se2[k],seE2[k],seH2[k]);
258  //printf(" -------------------------- \n");
259  // cout<<se[k]<<" --- "<<(seE[k]+seH[k])<<endl;
260  se[k] = seE[k] + 0.75*seH[k];
261  se1[k] = seE1[k] + 0.75*seH1[k];
262  se2[k] = seE2[k] + 0.75*seH2[k];
263 
264 }
265  for (int k=0;k<8;k++) {
266  // if(se[k]>0&& partonPresent ) trig =1; // 30 GeV energy in Qudrant
267  // if(max_e>60 ) trig =1; // 30 GeV energy in Qudrant
268  if(se[k]>maxE){
269  maxE = se[k];
270  //maxEn = seE[k];
271  //maxHn = seH[k];
272  max1 = k;
273  }
274 
275  if(se1[k]>maxE1){
276  maxE1 = se1[k];
277  //maxEn1 = seE1[k];
278  //maxHn1 = seH1[k];
279  max2 = k;
280  }
281 
282  if(se2[k]>maxE2){
283  maxE2 = se2[k];
284  //maxEn2 = seE2[k];
285  //maxHn2 = seH2[k];
286  max3 = k;
287  }
288 
289  }
290 
291 
292  if(maxE>=30 ) trig =1; // 30 GeV energy in Qudrant
293  //if(maxE>0&& partonPresent==1 ) trig =1; // 30 GeV energy in Qudrant
294  if (trig==0){
295  // cout<<"NO TRIGGER :p6, p7, el had el+%50Had-quad ToT : "<<e1<<" "<<e2<<" ("<<maxEn<<" "<<maxHn<<") "<<maxE<<" --- "<<tot_e<<endl;
296  return 1;
297  }
298  // printf(" %4.2f %4.2f %4.2f %4.2f %4.2f %4.2f ---- 75% \n",e1,e2,maxEn,maxHn,maxE,tot_e );
299  //printf(" %4.2f %4.2f %4.2f %d %d %d\n ",maxE, maxE1, maxE2, max1, max2, max3);
300  //printf("Trig2 : %4.2f %4.2f %4.2f %4.2f %4.2f %4.2f \n",e1,e2,maxEn1,maxHn1,maxE1,tot_e);
301  //printf("Trig3 : %4.2f %4.2f %4.2f %4.2f %4.2f %4.2f \n",e1,e2,maxEn2,maxHn2,maxE2,tot_e);
302  //cout<<" "<<e1<<" "<<e2<<" "<<maxEn1<<" "<<maxHn1<<" "<<maxE1<<" "<<tot_e<<endl;
303  //cout<<" "<<e1<<" "<<e2<<" "<<maxEn2<<" "<<maxHn2<<" "<<maxE2<<" "<<tot_e<<endl;
304 
305  printf("MAX : %4.2f %4.2f %4.2f %d %d %d\n ",maxE, maxE1, maxE2, max1, max2, max3);
306 
307 
308  return 0;
309 }
310 
311 //Float_t StFmsJetFilter::DPhi(Float_t phim, Float_t phi, Float_t &dphi){
312 Float_t StFmsJetFilter::DPhi(Float_t phim, Float_t phi){
313  Float_t dphi;
314  Float_t dp = phim - phi ;
315  Float_t M_pi = TMath::Pi();
316  if(dp > M_pi) {dp -= 2.0 * M_pi;}
317  if(dp < -1.*M_pi) {dp += 2.0 * M_pi;}
318  dphi=dp;
319  if (dphi< -M_pi/2) dphi=dphi+2*M_pi;
320  dphi = TMath::Abs(dphi);
321  return dphi;
322 
323 }
324 
325 //______________________________________________________________________________
327 {
328  // ptl.Print("************** In RejectGT ************** ");
329  return 0;
330 }
331 //______________________________________________________________________________
333 {
334  //ptl.Print("************** In RejectGE ************** ");
335  return 0;
336 }
Abstract base class for particles related to common /HEPEVT/.
Int_t RejectGE(const StGenParticleMaster &ptl) const
Int_t RejectEG(const StGenParticleMaster &ptl) const
Int_t RejectGT(const StGenParticleMaster &ptl) const