119 {
121 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
122 MsgStream log(
msgSvc,
"XtInteMdcCalib" );
123 log << MSG::DEBUG << "XtInteMdcCalib::fillHist()" << endmsg;
124
126
127
128 bool esCutFg = event->getEsCutFlag();
129 if ( !esCutFg ) return -1;
130
131 int i;
132 int k;
133 int lay;
134 int iLR;
135 int iEntr;
136
137 double dr;
138 double dz;
139 double doca;
140 double tdr;
141 double resi;
142 double entrance;
143
144 int nhitlay;
146 bool fgTrk;
147
148 if ( !m_fgIni )
149 {
151 {
152 if ( lay < 8 ) m_docaMax[lay] = m_param.maxDocaInner;
153 else m_docaMax[lay] = m_param.maxDocaOuter;
154 }
155 m_fgIni = true;
156 }
157
158 MdcCalRecTrk* rectrk;
159 MdcCalRecHit* rechit;
160
161 int nhit;
162 int ntrk = event->getNTrk();
163 for ( i = 0; i < ntrk; i++ )
164 {
165 fgTrk = true;
166 rectrk = event->getRecTrk( i );
168
169
170 dr = rectrk->
getDr();
171 if ( fabs( dr ) > m_param.drCut ) continue;
172
173
174 dz = rectrk->
getDz();
175 if ( fabs( dz ) > m_param.dzCut ) continue;
176
177
178 double p = rectrk->
getP();
179 if ( ( fabs( p ) < m_param.pCut[0] ) || ( fabs( p ) > m_param.pCut[1] ) ) continue;
180
181
182 double phi0 = rectrk->
getPhi0();
183 double phiTrk = phi0 + CLHEP::halfpi;
184 if ( phiTrk > CLHEP::twopi ) phiTrk -= CLHEP::twopi;
185 if ( m_param.cosmicDwTrk && ( phiTrk < CLHEP::pi ) ) continue;
186
187
188
189 for ( lay = 0; lay <
MdcCalNLayer; lay++ ) { fgHitLay[lay] =
false; }
190
191 for ( k = 0; k < nhit; k++ )
192 {
197 fgHitLay[lay] = true;
198
199
200
201
202
203 }
204 if ( !fgTrk ) continue;
205
206 nhitlay = 0;
208 {
209 if ( fgHitLay[lay] ) nhitlay++;
210 }
211 if ( nhitlay < m_param.nHitLayCut ) continue;
212
213 for ( k = 0; k < nhit; k++ )
214 {
219 iLR = rechit->
getLR();
222
223 if ( ( fabs( doca ) > m_docaMax[lay] ) || ( fabs( resi ) > m_param.resiCut[lay] ) )
224 { continue; }
225
226 if ( 0 == lay )
227 {
228 if ( !fgHitLay[1] ) continue;
229 }
230 else if ( 42 == lay )
231 {
232 if ( !fgHitLay[41] ) continue;
233 }
234 else
235 {
236 if ( ( !fgHitLay[lay - 1] ) && ( !fgHitLay[lay + 1] ) ) continue;
237 }
238
239 int nPM = 1;
240 if ( m_param.fgCombinePlusMinue ) nPM = 2;
241 for ( int iPM = 0; iPM < nPM; iPM++ )
242 {
243 if ( 0 == iPM ) iEntr = m_mdcFunSvc->getXtEntrIndex( entrance );
244 else iEntr = m_mdcFunSvc->getXtEntrIndex( -1.0 * entrance );
245
246 int npoint = m_grXt[lay][iEntr][iLR]->GetN();
247 if ( npoint < m_nMaxGrPoint )
248 m_grXt[lay][iEntr][iLR]->SetPoint( npoint, tdr, fabs( doca ) );
249
250 if ( tdr < m_tbinLim[lay][0] ) continue;
251 else if ( tdr < m_tbinLim[lay][1] )
252 m_pfNear[lay][iEntr][iLR]->Fill( tdr, fabs( doca ) );
253 else if ( tdr < m_tbinLim[lay][2] )
254 m_pfMid[lay][iEntr][iLR]->Fill( tdr, fabs( doca ) );
255 else if ( tdr < m_tbinLim[lay][3] )
256 m_pfFar[lay][iEntr][iLR]->Fill( tdr, fabs( doca ) );
257 }
258 }
259 }
260 return 1;
261}
double getDocaInc() const
double getResiInc() const
MdcCalRecHit * getRecHit(int index) const
virtual int fillHist(MdcCalEvent *event)=0