118 {
120 bool fgOldXt = saveOldXt( newXtList );
121 newXtList->Clear();
122
124 char hname[200];
125 for (
int lay = 0; lay <
NLAYER; lay++ )
126 {
127 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
128 {
129 for ( int lr = 0; lr < 2; lr++ )
130 {
131 m_vt.clear();
132 m_vd.clear();
133 m_entries.clear();
134 for ( int iPf = 0; iPf < 3; iPf++ )
135 {
136 TProfile* pro;
137 if ( 0 == iPf ) pro = m_pfNear[lay][iEntr][lr];
138 else if ( 1 == iPf ) pro = m_pfMid[lay][iEntr][lr];
139 else pro = m_pfFar[lay][iEntr][lr];
140
141 int nbin = pro->GetNbinsX();
142 for ( int i = 0; i < nbin; i++ )
143 {
144 double tt = pro->GetBinCenter( i + 1 );
145 double dd = pro->GetBinContent( i + 1 );
146 double entries = pro->GetBinEntries( i + 1 );
147 if ( entries > 10 )
148 {
149 m_vt.push_back( tt );
150 m_vd.push_back( dd );
151 m_entries.push_back( entries );
152 }
153 }
154 }
155 unsigned vsize = m_vt.size();
156 if ( vsize > 10 )
157 {
158 for ( int i = 0; i < 2; i++ )
159 {
160 double slope =
161 ( m_vd[vsize - 1] - m_vd[vsize - 2] ) / ( m_vt[vsize - 1] - m_vt[vsize - 2] );
162 if ( fabs( slope ) > 0.04 )
163 {
164 m_vt.pop_back();
165 m_vd.pop_back();
166 m_entries.pop_back();
167 vsize = m_vt.size();
168 }
169 }
170 }
171 sprintf( hname,
"grXtFit%02d_%02d_%d", lay, iEntr, lr );
172 grXtfit[lay][iEntr][lr] = new TGraph();
173 grXtfit[lay][iEntr][lr]->SetName( hname );
174 grXtfit[lay][iEntr][lr]->SetMarkerStyle( 20 );
175 m_fgFit[lay][iEntr][lr] = getXt( lay, iEntr, lr, grXtfit[lay][iEntr][lr] );
176 }
177 }
178 }
179
180 double tdr, doca;
181 for (
int lay = 0; lay <
NLAYER; lay++ )
182 {
183 double tCut = 500.0;
184 if ( lay < 8 ) tCut = 400.0;
185 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
186 {
187 for ( int lr = 0; lr < 2; lr++ )
188 {
189 if ( !m_fgFit[lay][iEntr][lr] )
190 {
191 int iEntrNew = findXtEntr( lay, iEntr, lr );
192 if ( -1 != iEntrNew )
193 {
194 int npoint = grXtfit[lay][iEntrNew][lr]->GetN();
195 for ( int i = 0; i < npoint; i++ )
196 {
197 grXtfit[lay][iEntrNew][lr]->GetPoint( i, tdr, doca );
198 grXtfit[lay][iEntr][lr]->SetPoint( i, tdr, doca );
199 }
200 }
201 else if ( fgOldXt )
202 {
203 cout << grXtfit[lay][iEntr][lr]->GetName() << " use old x-t" << endl;
204 int npoint = m_grXtOld[lay][iEntr][lr]->GetN();
205 for ( int i = 0; i < npoint; i++ )
206 {
207 m_grXtOld[lay][iEntr][lr]->GetPoint( i, tdr, doca );
208 grXtfit[lay][iEntr][lr]->SetPoint( i, tdr, doca );
209 }
210 }
211 }
212 int nn = grXtfit[lay][iEntr][lr]->GetN();
214 grXtfit[lay][iEntr][lr]->GetPoint( nn - 1, tmax,
dmax );
215 if ( tmax > tCut ) m_fgEdge[lay][iEntr][lr] = true;
216 else m_fgEdge[lay][iEntr][lr] = false;
217 }
218 }
219 }
220
221 for (
int lay = 0; lay <
NLAYER; lay++ )
222 {
223 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
224 {
225 for ( int lr = 0; lr < 2; lr++ )
226 {
227 if ( !m_fgEdge[lay][iEntr][lr] )
228 {
229 int iEntrNew = findXtEntrEdge( lay, iEntr, lr );
230 if ( -1 != iEntrNew )
231 {
232 double t1, d1;
233 int n1 = grXtfit[lay][iEntr][lr]->GetN();
234 grXtfit[lay][iEntr][lr]->GetPoint(
n1 - 1, t1, d1 );
235 double t2, d2;
236 int n2 = grXtfit[lay][iEntrNew][lr]->GetN();
237 for (
int i = 0; i <
n2; i++ )
238 {
239 grXtfit[lay][iEntrNew][lr]->GetPoint( i, t2, d2 );
240 if ( t2 > t1 )
241 {
242 grXtfit[lay][iEntr][lr]->SetPoint(
n1, t2, d2 );
244 }
245 }
246 }
247 }
248 }
249 }
250 }
251
253 for (
int lay = 0; lay <
NLAYER; lay++ )
254 {
255 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
256 {
257 for ( int lr = 0; lr < 2; lr++ )
258 {
259 sprintf( hname,
"trNewXt%02d_%02d_%d", lay, iEntr, lr );
260 xttr[lay][iEntr][lr] = new TTree( hname, hname );
261 xttr[lay][iEntr][lr]->Branch( "t", &tdr, "t/D" );
262 xttr[lay][iEntr][lr]->Branch( "d", &doca, "d/D" );
264 {
265 int npoint = m_grXtOld[lay][iEntr][lr]->GetN();
266 for ( int i = 0; i < npoint; i++ )
267 {
268 m_grXtOld[lay][iEntr][lr]->GetPoint( i, tdr, doca );
269 xttr[lay][iEntr][lr]->Fill();
270 }
271 }
272 else
273 {
274 int npoint = grXtfit[lay][iEntr][lr]->GetN();
275 for ( int i = 0; i < npoint; i++ )
276 {
277 grXtfit[lay][iEntr][lr]->GetPoint( i, tdr, doca );
278 xttr[lay][iEntr][lr]->Fill();
279 }
280 }
281 newXtList->Add( xttr[lay][iEntr][lr] );
282 }
283 }
284 }
285
286 for (
int lay = 0; lay <
NLAYER; lay++ )
287 {
288 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
289 {
290 for ( int lr = 0; lr < 2; lr++ ) { delete grXtfit[lay][iEntr][lr]; }
291 }
292 }
293
294
295 renameHist();
296}
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
virtual void calib(MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList)=0