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