111 {
112 MsgStream log(
msgSvc(), name() );
113 SmartDataPtr<Event::EventHeader> eventHeader( m_eventSvc, "/Event/EventHeader" );
114 int run = eventHeader->runNumber();
115 if ( run < 0 )
116 {
117 log << MSG::INFO << "This data is the MC sample with the Run Number: " << run << endmsg;
118 if ( m_type == "Sim" )
119 {
120 run = -run;
121 log << MSG::INFO << "Reverse the sign of Run Number" << endmsg;
122 }
123 }
124
126 MYSQL_ROW row;
127 char stmt1[400];
128
129 std::string sftver;
130
131 if ( m_sftver == "default" && m_bossRelease == "default" )
132 {
133 log << MSG::FATAL << " BossRelease and BossVer for DedxCurve not set!" << endmsg;
134 exit( 1 );
135 }
136
137 if ( ( run < m_runFromMax || run > m_runToMin ) )
138 {
139 if ( m_sftver == "default" )
140 {
142 "select RunFrom, RunTo, SftVer, ParVer from CalVtxLumVer where BossRelease = "
143 "'%s' and RunFrom <= %d and RunTo >= %d and DataType = 'DedxCurve'",
144 m_bossRelease.c_str(), run, run );
145 std::cout << stmt1 << std::endl;
146 DatabaseRecordVector rest;
147 int row_no = m_dbsvc->query( "offlinedb", stmt1, rest );
148 if ( row_no == 0 )
149 {
150 log << MSG::FATAL << "can not find result for DedxCur with: " << stmt1 << endmsg;
151 exit( 1 );
152 }
153 if ( row_no > 1 )
154 {
155 log << MSG::FATAL << "find more than 1 results for DedxCur with: " << stmt1 << endmsg;
156 exit( 1 );
157 }
158 DatabaseRecord* recordst = rest[0];
159 sftver = recordst->
GetString(
"SftVer" );
160 m_calParVer = recordst->
GetString(
"ParVer" );
161 m_runFromMax = atoi( ( recordst->
GetString(
"RunFrom" ) ).c_str() );
162 m_runToMin = atoi( ( recordst->
GetString(
"RunTo" ) ).c_str() );
163 log << MSG::INFO << "get from CalVtxLumVer, m_runFromMax: " << m_runFromMax
164 << " m_runToMin: " << m_runToMin << endmsg;
165 }
166 else sftver = m_sftver;
167
168 if ( m_calParVer != "default" )
170 "select RunFrom, RunTo, DedxCurvePar,DedxSigmaPar, SftVer, CurveFileName from "
171 "DedxCurvePar where SftVer = '%s' and RunFrom <= %d and RunTo >= %d and "
172 "DedxCurveParVer = %s and Status='%s'",
173 sftver.c_str(), run, run, m_calParVer.c_str(), m_dbStatus.c_str() );
174 else
176 "select RunFrom, RunTo, DedxCurvePar,DedxSigmaPar, SftVer, CurveFileName from "
177 "DedxCurvePar where SftVer = '%s' and RunFrom <= %d and RunTo >= %d and "
178 "Status='%s' order by DedxCurveParVer desc",
179 sftver.c_str(), run, run, m_dbStatus.c_str() );
180 std::cout << stmt1 << std::endl;
181
182 DatabaseRecordVector res;
183 int row_no = m_dbsvc->query( "offlinedb", stmt1, res );
184 if ( row_no == 0 )
185 {
186 log << MSG::FATAL << "can not find result for DedxCur with: " << stmt1 << endmsg;
187 exit( 1 );
188 }
189 if ( row_no > 1 )
190 {
191 log << MSG::FATAL << "find more than 1 results for DedxCur with: " << stmt1 << endmsg;
192 exit( 1 );
193 }
194
195 DatabaseRecord* records = res[0];
196 int runFrom = atoi( ( records->
GetString(
"RunFrom" ) ).c_str() );
197 int runTo = atoi( ( records->
GetString(
"RunTo" ) ).c_str() );
198 std::cout << "before output DedxCurveService version" << endl;
199 std::cout << " SftVer is "
201
202 <<
" File name is " << records->
GetString(
"CurveFileName" ) << std::endl;
203 std::cout << "after output DedxCurveService version" << endl;
204
205 if ( m_sftver == "default" )
206 {
207 m_runFromMax = runFrom > m_runFromMax ? runFrom : m_runFromMax;
208 m_runToMin = runTo < m_runToMin ? runTo : m_runToMin;
209 }
210 else
211 {
212 m_runFromMax = runFrom;
213 m_runToMin = runTo;
214 }
215 log << MSG::INFO << "get from DedxCurvePar runFrom: " << runFrom << " runTo: " << runTo
216 << endmsg;
217 log << MSG::INFO << "m_runFromMax: " << m_runFromMax << " m_runToMin: " << m_runToMin
218 << endmsg;
219
220 TBuffer* buf1 = new TBufferFile( TBuffer::kRead );
221 buf1->SetBuffer( ( *records )["DedxCurvePar"], 327680, kFALSE );
222 TBuffer* buf2 = new TBufferFile( TBuffer::kRead );
223 buf2->SetBuffer( ( *records )["DedxSigmaPar"], 327680, kFALSE );
224
225 TTree* curvetree = new TTree();
226 curvetree->Streamer( *buf1 );
227
228 TTree* sigmatree = new TTree();
229 sigmatree->Streamer( *buf2 );
230
231 double curve[50];
232 double sigma[50];
233 int SigmaSize;
234 int CurveSize;
235 curvetree->SetBranchAddress( "curve", curve );
236 curvetree->SetBranchAddress( "CurveSize", &CurveSize );
237 sigmatree->SetBranchAddress( "sigma", sigma );
238 sigmatree->SetBranchAddress( "SigmaSize", &SigmaSize );
239
240 Int_t nentries_curve = (Int_t)curvetree->GetEntries();
241 Int_t nentries_sigma = (Int_t)sigmatree->GetEntries();
242 curvetree->GetEntry( 0 );
243 if ( CurveSize > 50 )
244 {
245 log << MSG::ERROR << "CurveSize larger than designed number" << endmsg;
246 exit( 1 );
247 }
248 for ( int i = 0; i < CurveSize; i++ ) { m_curve[i] = curve[i]; }
249
250 sigmatree->GetEntry( 0 );
251 if ( SigmaSize > 50 )
252 {
253 log << MSG::ERROR << "SigmaSize larger than designed number" << endmsg;
254 exit( 1 );
255 }
256 for ( int i = 0; i < SigmaSize; i++ ) { m_sigma[i] = sigma[i]; }
257 m_curve_size = CurveSize;
258 m_sigma_size = SigmaSize;
259 delete curvetree;
260 delete sigmatree;
261 }
262 return;
263}
struct st_mysql_res MYSQL_RES
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)
std::string GetString(std::string key)