File indexing completed on 2024-04-06 12:23:15
0001 #include <iostream>
0002 #include <string>
0003 #include <sstream>
0004 #include <vector>
0005 #include <time.h>
0006
0007 #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h"
0008 #include "OnlineDB/EcalCondDB/interface/all_lmf_types.h"
0009 #include "OnlineDB/EcalCondDB/interface/RunDat.h"
0010 #include "TROOT.h"
0011 #include "TFile.h"
0012 #include "TDirectory.h"
0013 #include "TH2F.h"
0014 #include "TF1.h"
0015
0016
0017 using namespace std;
0018
0019 class CondDBApp {
0020 public:
0021
0022
0023
0024
0025 CondDBApp(string host, string sid, string user, string pass)
0026 {
0027 try {
0028 cout << "Making connection..." << flush;
0029 econn = new EcalCondDBInterface( host, sid, user, pass );
0030 cout << "Done." << endl;
0031 } catch (runtime_error &e) {
0032 cerr << e.what() << endl;
0033 exit(-1);
0034 }
0035
0036
0037 }
0038
0039
0040
0041
0042
0043
0044 ~CondDBApp()
0045 {
0046 delete econn;
0047 }
0048
0049 inline std::string to_string( char value[])
0050
0051 {
0052
0053 std::ostringstream streamOut;
0054
0055 streamOut << value;
0056
0057 return streamOut.str();
0058
0059 }
0060
0061
0062
0063 RunIOV makeRunIOV(std::string run_num, std::string& location)
0064 {
0065 cout << "entering retrieveRunIOV for run " << run_num<< " and location= "<< location << endl;
0066
0067 LocationDef locdef;
0068 RunTypeDef rundef;
0069 RunTag runtag;
0070
0071 locdef.setLocation(location);
0072
0073 rundef.setRunType("LASER");
0074
0075 runtag.setLocationDef(locdef);
0076 runtag.setRunTypeDef(rundef);
0077 runtag.setGeneralTag("LASER");
0078 cout << " set the run tag and location " << endl;
0079
0080
0081 RunIOV runiov;
0082
0083
0084 int run=atoi(run_num.c_str());
0085
0086
0087
0088
0089 runiov.setRunTag(runtag);
0090 runiov.setRunNumber(run);
0091 cout << " before " << endl;
0092
0093 cout << " after " << endl;
0094
0095
0096 cout << "Setting run " << run << endl;
0097
0098 return runiov;
0099
0100 }
0101
0102
0103 LMFRunIOV makeLMFRunIOV(RunIOV* runiov)
0104 {
0105
0106
0107 LMFRunTag lmftag;
0108
0109 LMFRunIOV lmfiov;
0110 lmfiov.setLMFRunTag(lmftag);
0111 lmfiov.setRunIOV(*runiov);
0112 lmfiov.setSubRunNumber(0);
0113 lmfiov.setSubRunStart(runiov->getRunStart());
0114
0115 return lmfiov;
0116 }
0117
0118
0119
0120
0121
0122
0123
0124
0125 void testWrite(std::string& run_number)
0126 {
0127 std::string location="H4B";
0128 cout << "Writing LMFLaserBlueDat to database..." << endl;
0129 RunIOV runiov = this->makeRunIOV(run_number, location);
0130 RunTag runtag = runiov.getRunTag();
0131 run_t run = runiov.getRunNumber();
0132 cout << "Fetching run by tag just used..." << flush;
0133 RunIOV runiov_prime = econn->fetchRunIOV(&runtag, run);
0134
0135
0136 LMFRunIOV lmfiov = this->makeLMFRunIOV(&runiov_prime);
0137
0138
0139 EcalLogicID ecid_sm;
0140 RunDat rd_sm;
0141
0142
0143 RunDat rd;
0144 map<EcalLogicID, RunDat> dataset;
0145 econn->fetchDataSet(&dataset, &runiov_prime);
0146
0147
0148 int sm_num=ecid_sm.getID1();
0149 int count = 0;
0150 typedef map< EcalLogicID, RunDat >::const_iterator CI;
0151 for (CI p = dataset.begin(); p != dataset.end(); p++) {
0152 count++;
0153 ecid_sm = p->first;
0154 rd_sm = p->second;
0155 sm_num=ecid_sm.getID1();
0156 cout << "SM: " << ecid_sm.getID1() << endl;
0157 cout << "========================" << endl;
0158 }
0159 cout << endl;
0160
0161
0162
0163
0164
0165
0166
0167
0168 map<EcalLogicID, LMFLaserBlueNormDat> dataset_lmf;
0169 map<EcalLogicID, LMFLaserBlueRawDat> dataset_lraw;
0170 map<EcalLogicID, LMFPNBlueDat> dataset_lpn;
0171 map<EcalLogicID, LMFMatacqBlueDat> dataset_mq;
0172
0173 Int_t cx, cy;
0174
0175 TFile *f;
0176 TFile *f_mq;
0177
0178 ostringstream Run;
0179 ostringstream sROOT;
0180 ostringstream sROOT_mq;
0181
0182 Run.str("");
0183 Run << "0000" << run;
0184
0185 sROOT.str("");
0186 sROOT_mq.str("");
0187
0188
0189
0190
0191 sROOT << "/data1/daq/crogan/ROOT_files/SM22/SM22-0000";
0192 sROOT_mq << "/data1/daq/crogan/ROOT_files/SM22/MATACQ-SM22-0000";
0193 sROOT << run << ".root";
0194 sROOT_mq << run << ".root";
0195
0196 cout << "opening file "<< sROOT.str().c_str() << endl;
0197 f = (TFile*) new TFile(sROOT.str().c_str());
0198 TDirectory *DIR = (TDirectory*) f->GetDirectory(Run.str().c_str());
0199
0200
0201
0202
0203 if(DIR != NULL){
0204 TH2F *APDPN = (TH2F*) DIR->Get("APDPN");
0205 TH2F *APD = (TH2F*) DIR->Get("APD");
0206 TH2F *APD_RMS = (TH2F*) DIR->Get("APD_RMS");
0207 TH2F *APDPN_RMS = (TH2F*) DIR->Get("APDPN_RMS");
0208 TH2F *PN = (TH2F*) DIR->Get("PN");
0209 if(APDPN !=NULL && APD !=NULL && APD_RMS !=NULL && APDPN_RMS!=NULL && PN !=NULL ){
0210
0211 int pn_chan[]={1,101, 501, 901, 1301, 11, 111, 511, 911, 1311 };
0212
0213 for (int c=1; c<1701; c++){
0214
0215
0216 cx = 85-(c-1)/20;
0217 cy = 20-(c-1)%20;
0218 float apdpn = (float) APDPN->GetBinContent(cx,cy);
0219 float apd = (float) APD->GetBinContent(cx,cy);
0220 float apd_rms = (float) APD_RMS->GetBinContent(cx,cy);
0221 float apdpn_rms = (float) APDPN_RMS->GetBinContent(cx,cy);
0222 float pn = (float) PN->GetBinContent(cx,cy);
0223
0224 if(c%20==0) cout << "channel "<< c<< " value "<< apdpn << endl;
0225 EcalLogicID ecid;
0226 ecid = econn->getEcalLogicID("EB_crystal_number", sm_num, c);
0227
0228
0229 LMFLaserBlueNormDat bluelaser;
0230 LMFLaserBlueRawDat bluelaserraw;
0231
0232 int ispn=-1;
0233 for(int j=0; j<10; j++){
0234 if(pn_chan[j]==c) ispn=j;
0235 }
0236
0237 if(ispn!=-1){
0238 LMFPNBlueDat bluepn;
0239
0240 bluepn.setPNPeak(pn);
0241 bluepn.setPNErr(pn/100.);
0242 EcalLogicID ecid_pn;
0243 ecid_pn = econn->getEcalLogicID("EB_LM_PN", sm_num, ispn);
0244 dataset_lpn[ecid_pn] = bluepn;
0245 }
0246
0247 bluelaser.setAPDOverPNMean(apdpn);
0248 bluelaser.setAPDOverPNAMean(apdpn);
0249 bluelaser.setAPDOverPNBMean(apdpn);
0250 bluelaser.setAPDOverPNARMS(apdpn_rms);
0251 bluelaser.setAPDOverPNBRMS(apdpn_rms);
0252 bluelaser.setAPDOverPNRMS(apdpn_rms);
0253
0254 bluelaserraw.setAPDPeak(apd);
0255 bluelaserraw.setAPDErr(apd_rms);
0256
0257
0258 dataset_lmf[ecid] = bluelaser;
0259 dataset_lraw[ecid] = bluelaserraw;
0260
0261
0262 }
0263 }
0264
0265 }
0266 f->Close();
0267 cout << "finished processing the APD and PN data" << endl;
0268
0269 cout << "opening MATACQ file "<< sROOT_mq.str().c_str() << endl;
0270
0271 try {
0272
0273
0274 f_mq = (TFile*) new TFile(sROOT_mq.str().c_str());
0275
0276 TH1F *mq_height = (TH1F*) f_mq->Get("Height_Channel_0_blue");
0277 TH1F *mq_width = (TH1F*) f_mq->Get("Width_Channel_0_blue");
0278 TH1F *mq_timing = (TH1F*) f_mq->Get("Timing_Channel_0_blue");
0279
0280 mq_height->Fit("gaus");
0281 TF1 *fit_height= mq_height->GetFunction("gaus");
0282 float par_height= (float) fit_height ->GetParameter(1);
0283
0284 mq_width->Fit("gaus");
0285 TF1 *fit_width= mq_width->GetFunction("gaus");
0286 float par_width=(float) fit_width ->GetParameter(1);
0287
0288 mq_timing->Fit("gaus");
0289 TF1 *fit_timing= mq_timing->GetFunction("gaus");
0290 float par_timing=(float) fit_timing ->GetParameter(1);
0291
0292
0293
0294
0295 LMFMatacqBlueDat lmf_mq;
0296 EcalLogicID ecid_mq;
0297 ecid_mq = econn->getEcalLogicID("EB");
0298 lmf_mq.setAmplitude(par_height);
0299 lmf_mq.setWidth(par_width);
0300 lmf_mq.setTimeOffset(par_timing);
0301 dataset_mq[ecid_mq] = lmf_mq;
0302 econn->insertDataSet(&dataset_mq, &lmfiov);
0303
0304 f_mq->Close();
0305
0306
0307 cout << "Done Matacq " << endl;
0308
0309 } catch (exception &e) {
0310 cout << "TestLMF>> error with MATACQ " << e.what() ;
0311 }
0312
0313
0314 cout << "Inserting dataset..." << flush;
0315 econn->insertDataSet(&dataset_lmf, &lmfiov);
0316 econn->insertDataSet(&dataset_lraw, &lmfiov);
0317 econn->insertDataSet(&dataset_lpn, &lmfiov);
0318 cout << "Done." << endl;
0319
0320
0321 };
0322
0323
0324
0325
0326
0327
0328 template<class DATT, class IOVT>
0329 void testTable(DATT* data, IOVT* iov, EcalLogicID* ecid)
0330 {
0331 tablesTried++;
0332 try {
0333 cout << "Table " << tablesTried << "..." << flush;
0334 map<EcalLogicID, DATT> dataset;
0335 dataset[*ecid] = *data;
0336 econn->insertDataSet(&dataset, iov);
0337 cout << "write OK..." << flush;
0338 dataset.clear();
0339 econn->fetchDataSet(&dataset, iov);
0340 if (!dataset.size()) {
0341 throw(runtime_error("Zero rows read back"));
0342 }
0343 cout << "read OK" << endl;
0344 tablesOK++;
0345 } catch (runtime_error &e) {
0346 cout << "testTable FAILED: " << e.what() << endl;
0347 } catch (...) {
0348 cout << "testTable FAILED: unknown exception" << endl;
0349 }
0350 }
0351
0352
0353
0354
0355
0356 private:
0357 CondDBApp();
0358 EcalCondDBInterface* econn;
0359 string locations[4];
0360 uint64_t startmicros;
0361 uint64_t endmicros;
0362 run_t startrun;
0363 run_t endrun;
0364
0365 int tablesTried;
0366 int tablesOK;
0367
0368
0369
0370
0371 void printDataSet( const map<EcalLogicID, LMFLaserBlueRawDat>* dataset, int limit = 0 ) const
0372 {
0373 cout << "==========printDataSet()" << endl;
0374 if (dataset->size() == 0) {
0375 cout << "No data in map!" << endl;
0376 }
0377 EcalLogicID ecid;
0378 LMFLaserBlueRawDat bluelaser;
0379
0380 int count = 0;
0381 typedef map< EcalLogicID, LMFLaserBlueRawDat >::const_iterator CI;
0382 for (CI p = dataset->begin(); p != dataset->end(); p++) {
0383 count++;
0384 if (limit && count > limit) { return; }
0385 ecid = p->first;
0386 bluelaser = p->second;
0387
0388 cout << "SM: " << ecid.getID1() << endl;
0389 cout << "Xtal: " << ecid.getID2() << endl;
0390 cout << "APD Peak: " << bluelaser.getAPDPeak() << endl;
0391 cout << "========================" << endl;
0392 }
0393 cout << endl;
0394 }
0395
0396
0397
0398
0399
0400 void printTag( const RunTag* tag) const
0401 {
0402 cout << endl;
0403 cout << "=============RunTag:" << endl;
0404 cout << "GeneralTag: " << tag->getGeneralTag() << endl;
0405 cout << "Location: " << tag->getLocationDef().getLocation() << endl;
0406 cout << "Run Type: " << tag->getRunTypeDef().getRunType() << endl;
0407 cout << "====================" << endl;
0408 }
0409
0410 void printIOV( const RunIOV* iov) const
0411 {
0412 cout << endl;
0413 cout << "=============RunIOV:" << endl;
0414 RunTag tag = iov->getRunTag();
0415 printTag(&tag);
0416 cout << "Run Number: " << iov->getRunNumber() << endl;
0417 cout << "Run Start: " << iov->getRunStart().str() << endl;
0418 cout << "Run End: " << iov->getRunEnd().str() << endl;
0419 cout << "====================" << endl;
0420 }
0421 };
0422
0423
0424
0425 int main (int argc, char* argv[])
0426 {
0427 string host;
0428 string sid;
0429 string user;
0430 string pass;
0431 string run_num;
0432
0433 if (argc != 6) {
0434 cout << "Usage:" << endl;
0435 cout << " " << argv[0] << " <host> <SID> <user> <pass> <run_num>" << endl;
0436 exit(-1);
0437 }
0438
0439 host = argv[1];
0440 sid = argv[2];
0441 user = argv[3];
0442 pass = argv[4];
0443 run_num= argv[5];
0444
0445 try {
0446 CondDBApp app(host, sid, user, pass);
0447
0448 app.testWrite(run_num);
0449 } catch (exception &e) {
0450 cout << "ERROR: " << e.what() << endl;
0451 } catch (...) {
0452 cout << "Unknown error caught" << endl;
0453 }
0454
0455 cout << "All Done." << endl;
0456
0457 return 0;
0458 }