ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/yangyong/combineICEB/common_functions.cc
(Generate patch)

Comparing UserCode/yangyong/combineICEB/common_functions.cc (file contents):
Revision 1.1 by yangyong, Mon Dec 26 17:27:05 2011 UTC vs.
Revision 1.2 by yangyong, Tue Apr 10 19:41:08 2012 UTC

# Line 0 | Line 1
1 +
2 + /////////////////////////////////////////////////////////////////////////////////////////////////
3 +
4 + void convxtalid(Int_t &nphi,Int_t &neta)
5 + {
6 +  // Changed to what Yong's convention; output will give just two indices
7 +  // phi is unchanged; only eta now runs from
8 +  //
9 +  // 03/01/2008 changed to the new definition in CMSSW. The output is still the same...
10 +  // Barrel only
11 +  // Output nphi 0...359; neta 0...84; nside=+1 (for eta>0), or 0 (for eta<0).
12 +  // neta will be [-85,-1] , or [0,84], the minus sign indicates the z<0 side.
13 +
14 +     if(neta > 0) neta -= 1;
15 +     if(nphi > 359) nphi=nphi-360;
16 +
17 +     // final check
18 +   if(nphi >359 || nphi <0 || neta< -85 || neta > 84)
19 +     {
20 +       cout <<" output not in range: "<<  nphi <<  " " << neta <<  " " <<endl;
21 +    exit(1);
22 +     }
23 + } //end of convxtalid
24 +
25 +
26 + // Calculate the distance in xtals taking into account possibly different sides
27 + // change to coincide with yongs definition
28 + Int_t diff_neta(Int_t neta1, Int_t neta2){
29 +    Int_t mdiff;
30 +    mdiff=abs(neta1-neta2);
31 +    return mdiff;
32 + }
33 +
34 + // Calculate the absolute distance in xtals taking into account the periodicity of the Barrel
35 + Int_t diff_nphi(Int_t nphi1,Int_t nphi2) {
36 +  Int_t mdiff;
37 +   mdiff=abs(nphi1-nphi2);
38 +   if (mdiff > (360-abs(nphi1-nphi2))) mdiff=(360-abs(nphi1-nphi2));
39 +   return mdiff;
40 + }
41 +
42 + // Calculate the distance in xtals taking into account possibly different sides
43 + // Then the distance would be from the 1st to the 2nd argument
44 + // _s means that it gives the sign; the only difference from the above !
45 + // also changed to coincide with Yong's definition
46 + Int_t diff_neta_s(Int_t neta1, Int_t neta2){
47 +  Int_t mdiff;
48 +  mdiff=(neta1-neta2);
49 +  return mdiff;
50 + }
51 +
52 + // Calculate the distance in xtals taking into account the periodicity of the Barrel
53 + Int_t diff_nphi_s(Int_t nphi1,Int_t nphi2) {
54 +   Int_t mdiff;
55 +   if(abs(nphi1-nphi2) < (360-abs(nphi1-nphi2))) {
56 +     mdiff=nphi1-nphi2;
57 +   }
58 +   else {
59 +   mdiff=360-abs(nphi1-nphi2);
60 +   if(nphi1>nphi2) mdiff=-mdiff;
61 +   }
62 +   return mdiff;
63 + }
64 +
65 +
66 +
67 + void sortPtvector(vector<float> pt, vector<int> &ind){
68 +  
69 +  ind.clear();
70 +
71 +  int n = int( pt.size());
72 +
73 +  vector<float> pt0;
74 +  for(int j=0; j< n ; j++){
75 +    pt0.push_back(pt[j]);
76 +  }
77 +  
78 +  sort(pt.begin(),pt.end());
79 +  
80 +  for(int j = n -1; j>=0; j--){
81 +    
82 +    float dptmin = 0.1;
83 +    int jmin = -1;
84 +    for(int k=0; k< n; k++){
85 +      
86 +      float dpt = fabs( pt[j] - pt0[k]);
87 +      vector<int>::iterator it = find( ind.begin(),ind.end(),k);
88 +      if( it != ind.end()) continue;
89 +      
90 +      if( dpt < dptmin){
91 +        dptmin = dpt;
92 +        jmin = k;
93 +      }
94 +
95 +    }
96 +    ind.push_back(jmin);
97 +    
98 +  }
99 +  
100 +  if(int(ind.size()) != n){
101 +    cout<<"erorr_sortPtvector.."<<endl;
102 +    exit(1);
103 +  }
104 +  
105 + }
106 +
107 +
108 + float  calculateS4(int nn, float en[],int ieta[], int iphi[]){
109 +  ///shower-shape
110 +  Float_t S4_0 =0.;      Float_t S4_1 =0.;
111 +  Float_t S4_2 =0.;      Float_t S4_3 =0.;
112 +  
113 +  
114 +  for(int n=0; n< nn; n++){
115 +    float energy = en[n];
116 +    int deta = diff_neta_s(ieta[0],ieta[n]);
117 +    int dphi = diff_nphi_s(iphi[0],iphi[n]);
118 +    if( abs(deta) <=1 && abs(dphi) <= 1){
119 +      if( dphi <= 0 && deta <= 0) S4_0+=energy;
120 +      if( dphi >= 0 && deta <= 0) S4_1+=energy;
121 +      if( dphi <= 0 && deta >= 0) S4_2+=energy;
122 +      if( dphi >= 0 && deta >= 0) S4_3+=energy;
123 +    }
124 +  }
125 +  Float_t S4max=S4_0;
126 +  if(S4_1 > S4max) S4max=S4_1;
127 +  if(S4_2 > S4max) S4max=S4_2;
128 +  if(S4_3 > S4max) S4max=S4_3;
129 +  
130 +  return S4max;
131 +  
132 + }
133 +
134 + void calculateS4_v1(int nn, float en[],int ieta[], int iphi[],float res[]){
135 +  ///shower-shape
136 +  Float_t S4_0 =0.;      Float_t S4_1 =0.;
137 +  Float_t S4_2 =0.;      Float_t S4_3 =0.;
138 +
139 +  float S9 = 0;
140 +    
141 +  for(int n=0; n< nn; n++){
142 +    float energy = en[n];
143 +    int deta = diff_neta_s(ieta[0],ieta[n]);
144 +    int dphi = diff_nphi_s(iphi[0],iphi[n]);
145 +    if( abs(deta) <=1 && abs(dphi) <= 1){
146 +
147 +      S9 += energy;
148 +      
149 +      if( dphi <= 0 && deta <= 0) S4_0+=energy;
150 +      if( dphi >= 0 && deta <= 0) S4_1+=energy;
151 +      if( dphi <= 0 && deta >= 0) S4_2+=energy;
152 +      if( dphi >= 0 && deta >= 0) S4_3+=energy;
153 +    }
154 +  }
155 +  Float_t S4max=S4_0;
156 +  if(S4_1 > S4max) S4max=S4_1;
157 +  if(S4_2 > S4max) S4max=S4_2;
158 +  if(S4_3 > S4max) S4max=S4_3;
159 +  
160 +  ////  return S4max;
161 +  
162 +  res[0] = S4max;
163 +  res[1] = S9;
164 +  
165 +
166 + }
167 +
168 +
169 + ///input ieta iphi originall
170 +
171 + void calculateS4_v2(int nn, float en[],int ieta[], int iphi[],float res[]){
172 +  ///shower-shape
173 +  Float_t S4_0 =0.;      Float_t S4_1 =0.;
174 +  Float_t S4_2 =0.;      Float_t S4_3 =0.;
175 +
176 +  float S9 = 0;
177 +
178 +  int ieta_seed = ieta[0];
179 +  int iphi_seed = iphi[0];
180 +  
181 +  convxtalid(iphi_seed,ieta_seed);
182 +  
183 +
184 +    
185 +  for(int n=0; n< nn; n++){
186 +    float energy = en[n];
187 +
188 +    int eta = ieta[n];
189 +    int phi = iphi[n];
190 +    convxtalid(phi,eta);
191 +    
192 +    int deta = diff_neta_s(ieta_seed,eta);
193 +    int dphi = diff_nphi_s(iphi_seed,phi);
194 +    
195 +    if( abs(deta) <=1 && abs(dphi) <= 1){
196 +
197 +      S9 += energy;
198 +      
199 +      if( dphi <= 0 && deta <= 0) S4_0+=energy;
200 +      if( dphi >= 0 && deta <= 0) S4_1+=energy;
201 +      if( dphi <= 0 && deta >= 0) S4_2+=energy;
202 +      if( dphi >= 0 && deta >= 0) S4_3+=energy;
203 +    }
204 +  }
205 +  Float_t S4max=S4_0;
206 +  if(S4_1 > S4max) S4max=S4_1;
207 +  if(S4_2 > S4max) S4max=S4_2;
208 +  if(S4_3 > S4max) S4max=S4_3;
209 +  
210 +  ////  return S4max;
211 +  
212 +  res[0] = S4max;
213 +  res[1] = S9;
214 +  
215 +
216 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines