1 |
#include <CaloHough.h> |
2 |
//////////////////////////////////////////////////////////// |
3 |
/// INITIALIZATIONS & GLOBAL PARAMETERS |
4 |
//////////////////////////////////////////////////////////// |
5 |
|
6 |
CaloHough_parameters * CaloHough_parameters::_parameters = 0; |
7 |
|
8 |
/** |
9 |
* Set external parameters to default values |
10 |
*/ |
11 |
void CaloHough_parameters::SetDefault(){ |
12 |
|
13 |
cout << "CaloHough --> SET DEFAULT PARAMETERS" << endl; |
14 |
|
15 |
isimu = 0; |
16 |
|
17 |
// Q_UP = 4.;// mip |
18 |
// Q_DN = 0.; |
19 |
// M_UP = 3; |
20 |
// M_DN = 0; |
21 |
Q_UP = 10000.; |
22 |
Q_DN = 100.; |
23 |
M_UP = 3000; |
24 |
M_DN = 0; |
25 |
|
26 |
h_qtot[0] = new TH2F("houghqtot_0","Hit pattern",96,-0.5,95.5,22,-0.5,21.5); |
27 |
h_qtot[1] = new TH2F("houghqtot_1","Hit pattern",96,-0.5,95.5,22,-0.5,21.5); |
28 |
|
29 |
int n1 = 150; |
30 |
int n2 = 150; |
31 |
|
32 |
h_par[0] = new TH2F("houghpar_0","par1 vs par2",n1,-40.,40.,n2,-10.,10.); |
33 |
h_par[1] = new TH2F("houghpar_1","par1 vs par2",n1,-40.,40.,n2,-10.,10.); |
34 |
|
35 |
h_par_fine[0] = new TH2F("houghparfine_0","par1 vs par2",10*n1,-40.,40.,10*n2,-10.,10.); |
36 |
h_par_fine[1] = new TH2F("houghparfine_1","par1 vs par2",10*n1,-40.,40.,10*n2,-10.,10.); |
37 |
|
38 |
h_par1[0] = new TH1F("houghpar1_0","par1",n1,-10.,10.); |
39 |
h_par1[1] = new TH1F("houghpar1_1","par1",n1,-10.,10.); |
40 |
|
41 |
h_par2[0] = new TH1F("houghpar2_0","par2",n2,-40.,40.); |
42 |
h_par2[1] = new TH1F("houghpar2_1","par2",n2,-40.,40.); |
43 |
}; |
44 |
//////////////////////////////////////////////////////////// |
45 |
/// CLASS IMPLEMENTATION |
46 |
//////////////////////////////////////////////////////////// |
47 |
/** |
48 |
* Reset event |
49 |
* it has to be called for each event |
50 |
*/ |
51 |
void CaloHough::Reset(){ |
52 |
return; |
53 |
} |
54 |
|
55 |
/** |
56 |
* \brief Set event |
57 |
*/ |
58 |
bool CaloHough::Set(CaloLevel1 *cl1){ |
59 |
|
60 |
// bool debug = CaloHough_parameters::Get()->debug; |
61 |
float Q_UP = CaloHough_parameters::Get()->Q_UP; |
62 |
int M_UP = CaloHough_parameters::Get()->M_UP; |
63 |
float Q_DN = CaloHough_parameters::Get()->Q_DN; |
64 |
int M_DN = CaloHough_parameters::Get()->M_DN; |
65 |
|
66 |
cout << "bool CaloHough::Set(CaloLevel1*)"<<endl; |
67 |
|
68 |
if(!cl1)return false; |
69 |
|
70 |
TH2F* h_qtot[2]; |
71 |
TH2F* h_par[2]; |
72 |
TH2F* h_par_fine[2]; |
73 |
TH1F* h_par1[2]; |
74 |
TH1F* h_par2[2]; |
75 |
for(int iv=0; iv<2; iv++){ |
76 |
h_qtot[iv] = CaloHough_parameters::Get()->h_qtot[iv]; |
77 |
h_par[iv] = CaloHough_parameters::Get()->h_par[iv]; |
78 |
h_par_fine[iv] = CaloHough_parameters::Get()->h_par_fine[iv]; |
79 |
h_par1[iv] = CaloHough_parameters::Get()->h_par1[iv]; |
80 |
h_par2[iv] = CaloHough_parameters::Get()->h_par2[iv]; |
81 |
if(!h_qtot[iv] || !h_par[iv] || !h_par1[iv] || !h_par2[iv] || !h_par_fine[iv])return false; |
82 |
h_qtot[iv]->Reset(); |
83 |
h_par[iv]->Reset(); |
84 |
h_par_fine[iv]->Reset(); |
85 |
h_par1[iv]->Reset(); |
86 |
h_par2[iv]->Reset(); |
87 |
} |
88 |
|
89 |
// ----------------------------------- |
90 |
// set charge collected in each plane |
91 |
// ----------------------------------- |
92 |
// |
93 |
CaloStrip cstrip; |
94 |
int isimu = CaloHough_parameters::Get()->isimu; |
95 |
if(isimu==0)cstrip = CaloStrip(cl1,false); |
96 |
if(isimu==1)cstrip = CaloStrip(cl1,true); |
97 |
// |
98 |
vector<int> ids[22][2]; //id strip 0-95 |
99 |
vector<float> xy[22][2]; //cluster coordinate |
100 |
int islast = -1; |
101 |
int iplast = -1; |
102 |
int mult = 0; |
103 |
float qsum = 0.; |
104 |
float xyqsum = 0.; |
105 |
float issum = 0.; |
106 |
int ncluster[] = {0,0}; |
107 |
for(int ih=0;ih<cl1->istrip;ih++){ |
108 |
// |
109 |
int iv=-1; |
110 |
int ip=-1; |
111 |
int is=-1; |
112 |
cl1->DecodeEstrip(ih,iv,ip,is); |
113 |
float xyz[3]; |
114 |
cstrip.Set(iv,ip,is); |
115 |
// cout << " * "<<setw(3)<<iv<<setw(3)<<ip<<setw(3)<<is<<endl; |
116 |
xyz[0] = cstrip.GetX(); |
117 |
xyz[1] = cstrip.GetY(); |
118 |
xyz[2] = cstrip.GetZ(); |
119 |
// |
120 |
// ...................................... metodo 2 |
121 |
if( is != islast+1 || ip != iplast ){ // new cluster |
122 |
if( |
123 |
qsum < Q_UP && |
124 |
qsum > Q_DN && |
125 |
mult < M_UP && |
126 |
mult > M_DN && |
127 |
true){ // store the previous cluster |
128 |
xy[ip][iv].push_back( xyqsum/qsum ); |
129 |
ids[ip][iv].push_back( (int)(0.5+issum/qsum) ); |
130 |
h_qtot[iv]->Fill( issum/qsum, (float)(21-ip), qsum); |
131 |
ncluster[iv]++; |
132 |
cout << " >> "<<qsum<<endl; |
133 |
}// ... and reset counters |
134 |
mult = 0; |
135 |
qsum = 0.; |
136 |
xyqsum = 0.; |
137 |
issum = 0.; |
138 |
} |
139 |
|
140 |
mult++; |
141 |
qsum += cstrip.GetE(); |
142 |
xyqsum += xyz[iv] * cstrip.GetE(); |
143 |
issum += (float)is * cstrip.GetE(); |
144 |
islast = is; |
145 |
iplast = ip; |
146 |
|
147 |
// ...................................... metodo 1 |
148 |
// if( cstrip.GetE() < Q_UP ){ |
149 |
// h_qtot[iv]->Fill( (float)is, (float)(21-ip), cstrip.GetE()); |
150 |
// ids[ip][iv].push_back(is); |
151 |
// } |
152 |
|
153 |
} |
154 |
cout << "n.clusters X "<<ncluster[0]<<endl; |
155 |
cout << "n.clusters Y "<<ncluster[0]<<endl; |
156 |
// |
157 |
// cstrip.Set(0,0,0); |
158 |
// cstrip.Set(0,21,0); |
159 |
cstrip.Set(0,11,0); |
160 |
float zref = cstrip.GetZ();//reference plane |
161 |
// |
162 |
for(int iv=0; iv<2; iv++){ |
163 |
for(int ip1=0; ip1<22-1; ip1++){ |
164 |
// for(int ip2=ip1+1; ip2<22; ip2++){ |
165 |
for(int ip2=ip1+1; ip2<min(22,ip1+3); ip2++){ |
166 |
// cout << "ip1 "<<ip1<<" "<<ids[ip1][iv].size()<<endl; |
167 |
// cout << "ip2 "<<ip2<<" "<<ids[ip2][iv].size()<<endl; |
168 |
for(int is1=0; is1<(int)ids[ip1][iv].size(); is1++){ |
169 |
for(int is2=0; is2<(int)ids[ip2][iv].size(); is2++){ |
170 |
|
171 |
// ...................................... metodo 1 |
172 |
// int ids1 = ids[ip1][iv][is1]; |
173 |
// int ids2 = ids[ip2][iv][is2]; |
174 |
// float xyz1[3]; |
175 |
// float xyz2[3]; |
176 |
// cstrip.Set(iv,ip1,ids1); |
177 |
// xyz1[0] = cstrip.GetX(); |
178 |
// xyz1[1] = cstrip.GetY(); |
179 |
// xyz1[2] = cstrip.GetZ(); |
180 |
// cstrip.Set(iv,ip2,ids2); |
181 |
// xyz2[0] = cstrip.GetX(); |
182 |
// xyz2[1] = cstrip.GetY(); |
183 |
// xyz2[2] = cstrip.GetZ(); |
184 |
|
185 |
// ...................................... metodo 2 |
186 |
// int ids1 = ids[ip1][iv][is1]; |
187 |
int ids2 = ids[ip2][iv][is2]; |
188 |
float xyz1[3]; |
189 |
float xyz2[3]; |
190 |
cstrip.Set(iv,ip1,is1); |
191 |
xyz1[iv] = xy[ip1][iv][is1]; |
192 |
xyz1[2] = cstrip.GetZ(); |
193 |
cstrip.Set(iv,ip2,ids2); |
194 |
xyz2[iv] = xy[ip2][iv][is2]; |
195 |
xyz2[2] = cstrip.GetZ(); |
196 |
// |
197 |
float par1 = 0.; |
198 |
if(fabs(xyz1[2]-xyz2[2])>0.)par1 = (xyz1[iv]-xyz2[iv])/(xyz1[2]-xyz2[2]); |
199 |
float par2 = xyz1[iv] - par1*xyz1[2]; |
200 |
par2 = par1*zref + par2; |
201 |
h_par[iv]->Fill(par2,par1); // parameter space |
202 |
h_par_fine[iv]->Fill(par2,par1); // parameter space |
203 |
h_par1[iv]->Fill(par1); |
204 |
h_par2[iv]->Fill(par2); |
205 |
// cout << setw(15)<<par1<< setw(15)<<par2<<endl; |
206 |
} |
207 |
} |
208 |
} |
209 |
} |
210 |
// |
211 |
for( int ibx=1; ibx <= h_par[iv]->GetXaxis()->GetNbins(); ibx++){ |
212 |
for( int iby=1; iby <= h_par[iv]->GetYaxis()->GetNbins(); iby++){ |
213 |
// get bin content |
214 |
float content = h_par[iv]->GetBinContent(ibx,iby); |
215 |
if( content > 6){ |
216 |
double xmi = h_par[iv]->GetXaxis()->GetBinLowEdge(ibx); |
217 |
double xma = h_par[iv]->GetXaxis()->GetBinUpEdge(ibx); |
218 |
double ymi = h_par[iv]->GetYaxis()->GetBinLowEdge(iby); |
219 |
double yma = h_par[iv]->GetYaxis()->GetBinUpEdge(iby); |
220 |
h_par_fine[iv]->GetXaxis()->SetRangeUser(xmi,xma); |
221 |
h_par_fine[iv]->GetYaxis()->SetRangeUser(ymi,yma); |
222 |
double par1 = h_par_fine[iv]->GetMean(1); |
223 |
double par2 = h_par_fine[iv]->GetMean(2); |
224 |
cout << iv << " <><><><><><><>< "<<setw(15)<<par1<<setw(15)<<par2<<endl; |
225 |
} |
226 |
} |
227 |
} |
228 |
|
229 |
// |
230 |
for(int ip=0; ip<22; ip++){ |
231 |
ids[ip][iv].clear(); |
232 |
xy[ip][iv].clear(); |
233 |
} |
234 |
}//end loop on views |
235 |
|
236 |
return true; |
237 |
} |
238 |
ClassImp(CaloHough); |
239 |
ClassImp(CaloHough_parameters); |
240 |
|