001
002
003 #include <cstdlib>
004 #include <fstream>
005 #include <iostream>
006 #include <sstream>
007 #include <string>
008 #include <vector>
009
010 #include "DBManager/ConControl.hh"
011 #include "DBManager/IoEntry.hh"
012 #include "DBManager/PackageManager.hh"
013
014 #include "TriggerDB/Accessors.hh"
015
016
017 #include "RunConfigDB/COMMON.Defs.hh"
018 #include "RunConfigDB/PHYSICSTABLES.Defs.hh"
019 #include "RunConfigDB/DOWNLOADS.Defs.hh"
020
021 using namespace std;
022
023
024
025
026
027 Accessors::Accessors(std::string database_name)
028 {
029 _database_name = database_name;
030
031
032 if(_database_name=="cdfonprd")
033 {
034 ConControl::instance()->addIoEntry(new IoEntry("production_online","OTL","cdf_reader/reader@cdfonprd"));
035 _m.setDefaultID("production_online");
036 }
037 else if(_database_name=="cdfondev")
038 {
039 ConControl::instance()->addIoEntry(new IoEntry("development_online","OTL","cdf_reader/reader@cdfondev"));
040 _m.setDefaultID("development_online");
041 }
042 else if(_database_name=="cdfonint")
043 {
044 ConControl::instance()->addIoEntry(new IoEntry("integration_online","OTL","cdf_reader/reader@cdfonint"));
045 _m.setDefaultID("integration_online");
046 }
047 else if(_database_name=="cdfofprd")
048 {
049 ConControl::instance()->addIoEntry(new IoEntry("production_offline","OTL","cdf_reader/reader@cdfofprd"));
050 _m.setDefaultID("production_offline");
051 }
052 else if(_database_name=="cdfofdev")
053 {
054 ConControl::instance()->addIoEntry(new IoEntry("development_offline","OTL","cdf_reader/reader@cdfofdev"));
055 _m.setDefaultID("development_offline");
056 }
057 else if(_database_name=="cdfofint")
058 {
059 ConControl::instance()->addIoEntry(new IoEntry("integration_offline","OTL","cdf_reader/reader@cdfofint"));
060 _m.setDefaultID("integration_online");
061 }
062 else
063 {
064 cout<<"WRONG DATABASE SPECIFICATION!"<<endl;
065 }
066
067 }
068
069
070 Accessors::~Accessors()
071 {
072 }
073
074
075 int Accessors::getTriggerID(int physics_table_id, int trigger_level, int bit_no)
076 {
077 int trigger_id = -1;
078
079 COMMON_mgr dmgr("COMMON");
080
081 if(!dmgr.isValid())
082 {
083 cout<<"No connection to the Trigger DB !"<<endl;
084 return trigger_id;
085 }
086
087 COMMONContainer_ptr rvals;
088 COMMONContainer::iterator it;
089
090
091 ostringstream srt_sql;
092 srt_sql << "WHERE PHYSICS_TABLE_ID = "<<physics_table_id;
093 srt_sql<<" AND TRIGGER_LEVEL = "<<trigger_level;
094 srt_sql<<" AND BIT_NO = "<<bit_no;
095 ROKey dbk(srt_sql.str());
096
097
098 Result rc = dmgr.get(dbk,rvals);
099 if (rc == Result::success)
100 {
101 for (it = rvals->begin();it != rvals->end();++it)
102 {
103 trigger_id=(it->TRIGGER_ID());
104 if(trigger_id != -1) break;
105 }
106 }
107 else
108 cout << "Error in returning data : ERROR = " << rc << endl;
109
110 return trigger_id;
111
112 }
113
114 int Accessors::getTriggerBit(int physics_table_id, int trigger_id)
115 {
116 int bit_no = -1;
117
118 COMMON_mgr dmgr("COMMON");
119
120 if(!dmgr.isValid())
121 {
122 cout<<"No connection to the Trigger DB !"<<endl;
123 return bit_no;
124 }
125
126 COMMONContainer_ptr rvals;
127 COMMONContainer::iterator it;
128
129
130 ostringstream srt_sql;
131 srt_sql<<" WHERE PHYSICS_TABLE_ID = "<<physics_table_id;
132 srt_sql<<" AND TRIGGER_ID = "<<trigger_id;
133 ROKey dbk(srt_sql.str());
134
135
136 Result rc = dmgr.get(dbk,rvals);
137 if (rc == Result::success)
138 {
139 for (it = rvals->begin();it != rvals->end();++it)
140 {
141 bit_no=it->BIT_NO();
142 if(bit_no != -1) break;
143 }
144 }
145 else
146 cout << "Error in returning data : ERROR = " << rc << endl;
147
148 return bit_no;
149
150 }
151
152
153 vector<int> Accessors::getTriggerIDs(int physics_table_id)
154 {
155 vector<int> trigger_ids;
156
157 COMMON_mgr dmgr("COMMON");
158
159 if(!dmgr.isValid())
160 {
161 cout<<"No connection to the Trigger DB !"<<endl;
162 return trigger_ids;
163 }
164
165 COMMONContainer_ptr rvals;
166 COMMONContainer::iterator it;
167
168
169 ostringstream srt_sql;
170 srt_sql<<" WHERE PHYSICS_TABLE_ID = "<<physics_table_id;
171 ROKey dbk(srt_sql.str());
172
173
174 Result rc = dmgr.get(dbk,rvals);
175 if (rc == Result::success)
176 {
177 for (it = rvals->begin();it != rvals->end();++it)
178 {
179 bool unique = true;
180 for (int c=0;c<trigger_ids.size();c++) if(trigger_ids[c]==(it->TRIGGER_ID())) unique=false;
181 if(unique) trigger_ids.push_back(it->TRIGGER_ID());
182 }
183 }
184 else
185 cout << "Error in returning data : ERROR = " << rc << endl;
186
187 return trigger_ids;
188
189 }
190
191
192 int Accessors::getTriggerID(std::string trigger_name, int trigger_tag, int trigger_level)
193 {
194 int trigger_id = -1;
195
196 COMMON_mgr dmgr("COMMON");
197
198 if(!dmgr.isValid())
199 {
200 cout<<"No connection to the Trigger DB !"<<endl;
201 return trigger_id;
202 }
203
204 COMMONContainer_ptr rvals;
205 COMMONContainer::iterator it;
206
207
208
209 ostringstream srt_sql;
210 srt_sql<<"WHERE TRIGGER_NAME = '"<<trigger_name<<"'";
211 srt_sql<<" AND TRIGGER_TAG = "<<trigger_tag;
212 srt_sql<<" AND TRIGGER_LEVEL = "<<trigger_level;
213 ROKey dbk(srt_sql.str());
214
215
216 Result rc = dmgr.get(dbk,rvals);
217 if (rc == Result::success)
218 {
219 for (it = rvals->begin();it != rvals->end();++it)
220 {
221 trigger_id=it->TRIGGER_ID();
222 if(trigger_id != -1) break;
223 }
224 }
225 else
226 cout << "Error in returning data : ERROR = " << rc << endl;
227
228 return trigger_id;
229
230 }
231
232 std::string Accessors::getTriggerName(int trigger_id)
233 {
234 std::string trigger_name = "";
235
236 COMMON_mgr dmgr("COMMON");
237
238 if(!dmgr.isValid())
239 {
240 cout<<"No connection to the Trigger DB !"<<endl;
241 return trigger_name;
242 }
243
244 COMMONContainer_ptr rvals;
245 COMMONContainer::iterator it;
246
247
248 ostringstream srt_sql;
249 srt_sql<<" WHERE TRIGGER_ID = "<<trigger_id;
250 ROKey dbk(srt_sql.str());
251
252
253 Result rc = dmgr.get(dbk,rvals);
254 if (rc == Result::success)
255 {
256 for (it = rvals->begin();it != rvals->end();++it)
257 {
258 trigger_name=it->TRIGGER_NAME();
259 if(trigger_name != "") break;
260 }
261 }
262 else
263 cout << "Error in returning data : ERROR = " << rc << endl;
264
265 return trigger_name;
266
267 }
268
269 int Accessors::getTriggerTag(int trigger_id)
270 {
271 int trigger_tag = -1;
272
273 COMMON_mgr dmgr("COMMON");
274
275 if(!dmgr.isValid())
276 {
277 cout<<"No connection to the Trigger DB !"<<endl;
278 return trigger_tag;
279 }
280
281 COMMONContainer_ptr rvals;
282 COMMONContainer::iterator it;
283
284
285 ostringstream srt_sql;
286 srt_sql<<" WHERE TRIGGER_ID = "<<trigger_id;
287 ROKey dbk(srt_sql.str());
288
289
290
291 Result rc = dmgr.get(dbk,rvals);
292 if (rc == Result::success)
293 {
294 for (it = rvals->begin();it != rvals->end();++it)
295 {
296 trigger_tag=it->TRIGGER_TAG();
297 if(trigger_tag != -1) break;
298 }
299 }
300 else
301 cout << "Error in returning data : ERROR = " << rc << endl;
302
303 return trigger_tag;
304
305 }
306
307 int Accessors::getTriggerLevel(int trigger_id)
308 {
309 int trigger_level = -1;
310
311 COMMON_mgr dmgr("COMMON");
312
313 if(!dmgr.isValid())
314 {
315 cout<<"No connection to the Trigger DB !"<<endl;
316 return trigger_level;
317 }
318
319 COMMONContainer_ptr rvals;
320 COMMONContainer::iterator it;
321
322
323 ostringstream srt_sql;
324 srt_sql<<" WHERE TRIGGER_ID = "<<trigger_id;
325 ROKey dbk(srt_sql.str());
326
327
328 Result rc = dmgr.get(dbk,rvals);
329 if (rc == Result::success)
330 {
331 for (it = rvals->begin();it != rvals->end();++it)
332 {
333 trigger_level=it->TRIGGER_LEVEL();
334 if(trigger_level != -1) break;
335 }
336 }
337 else
338 cout << "Error in returning data : ERROR = " << rc << endl;
339
340 return trigger_level;
341
342 }
343
344
345 int Accessors::getPhysicsTableID(int run_number)
346 {
347 int physics_table_id = -1;
348
349 PHYSICSTABLES_mgr dmgr("PHYSICSTABLES");
350
351 if(!dmgr.isValid())
352 {
353 cout<<"No connection to the Trigger DB !"<<endl;
354 return physics_table_id;
355 }
356
357 PHYSICSTABLESContainer_ptr rvals;
358 PHYSICSTABLESContainer::iterator it;
359
360
361 ostringstream srt_sql;
362 srt_sql<<" WHERE RUNNUMBER = "<<run_number;
363 ROKey dbk(srt_sql.str());
364
365
366 Result rc = dmgr.get(dbk,rvals);
367 if (rc == Result::success)
368 {
369 for (it = rvals->begin();it != rvals->end();++it)
370 {
371 physics_table_id = Accessors::getPhysicsTableID(it->PHYSICSTABLENAME(),it->PHYSICSTABLETAG());
372 }
373 }
374 else
375 cout << "Error in returning data : ERROR = " << rc << endl;
376
377 return physics_table_id;
378 }
379
380
381 int Accessors::getPhysicsTableID(std::string physics_table_name, int physics_table_tag)
382 {
383 int physics_table_id = -1;
384
385 COMMON_mgr dmgr("COMMON");
386
387 if(!dmgr.isValid())
388 {
389 cout<<"No connection to the Trigger DB !"<<endl;
390 return physics_table_id;
391 }
392
393 COMMONContainer_ptr rvals;
394 COMMONContainer::iterator it;
395
396
397 ostringstream srt_name,srt_tag;
398 srt_name << physics_table_name;
399 string sql_string = " WHERE PHYSICS_TABLE_NAME = '"+srt_name.str()+"'";
400 srt_tag << physics_table_tag;
401 sql_string += " AND PHYSICS_TABLE_TAG = "+srt_tag.str();
402 ROKey dbk(sql_string);
403
404
405 Result rc = dmgr.get(dbk,rvals);
406 if (rc == Result::success)
407 {
408 for (it = rvals->begin();it != rvals->end();++it)
409 {
410 physics_table_id=it->PHYSICS_TABLE_ID();
411 if(physics_table_id != -1) break;
412 }
413 }
414 else
415 cout << "Error in returning data : ERROR = " << rc << endl;
416
417 return physics_table_id;
418 }
419
420
421 std::string Accessors::getPhysicsTableName(int physics_table_id)
422 {
423 std::string physics_table_name = "";
424
425 COMMON_mgr dmgr("COMMON");
426
427 if(!dmgr.isValid())
428 {
429 cout<<"No connection to the Trigger DB !"<<endl;
430 return physics_table_name;
431 }
432
433 COMMONContainer_ptr rvals;
434 COMMONContainer::iterator it;
435
436
437 ostringstream srt;
438 srt << physics_table_id;
439 string sql_string = "WHERE PHYSICS_TABLE_ID = "+srt.str();
440 ROKey dbk(sql_string);
441
442
443 Result rc = dmgr.get(dbk,rvals);
444 if (rc == Result::success)
445 {
446 for (it = rvals->begin();it != rvals->end();++it)
447 {
448 physics_table_name=(it->PHYSICS_TABLE_NAME());
449 if(physics_table_name != "") break;
450 }
451 }
452 else
453 cout << "Error in returning data : ERROR = " << rc << endl;
454
455 return physics_table_name;
456 }
457
458
459 int Accessors::getPhysicsTableTag(int physics_table_id)
460 {
461 int physics_table_tag = -1;
462
463 COMMON_mgr dmgr("COMMON");
464
465 if(!dmgr.isValid())
466 {
467 cout<<"No connection to the Trigger DB !"<<endl;
468 return physics_table_tag;
469 }
470
471 COMMONContainer_ptr rvals;
472 COMMONContainer::iterator it;
473
474
475 ostringstream srt;
476 srt << physics_table_id;
477 string sql_string = " WHERE PHYSICS_TABLE_ID = "+srt.str();
478 ROKey dbk(sql_string);
479
480
481 Result rc = dmgr.get(dbk,rvals);
482 if (rc == Result::success)
483 {
484 for (it = rvals->begin();it != rvals->end();++it)
485 {
486 physics_table_tag = (int) (it->PHYSICS_TABLE_TAG());
487 if(physics_table_tag != -1) break;
488 }
489 }
490 else
491 cout << "Error in returning data : ERROR = " << rc << endl;
492
493 return physics_table_tag;
494 }
495
496 vector<int> Accessors::getSpecificOptionIDs(int trigger_id)
497 {
498 vector<int> specific_option_ids;
499
500 DOWNLOADS_mgr dmgr("DOWNLOADS");
501
502 if(!dmgr.isValid())
503 {
504 cout<<"No connection to the Trigger DB !"<<endl;
505 return specific_option_ids;
506 }
507
508 DOWNLOADSContainer_ptr rvals;
509 DOWNLOADSContainer::iterator it;
510
511
512 ostringstream srt_sql;
513 srt_sql<<" WHERE TRIGGER_NAME = '"<<getTriggerName(trigger_id)<<"'";
514 srt_sql<<" AND TRIGGER_TAG = "<<getTriggerTag(trigger_id);
515 srt_sql<<" AND TRIGGER_LEVEL = "<<getTriggerLevel(trigger_id);
516 ROKey dbk(srt_sql.str());
517
518
519
520 Result rc = dmgr.get(dbk,rvals);
521 if (rc == Result::success)
522 {
523 for (it = rvals->begin();it != rvals->end();++it)
524 {
525 bool unique = true;
526 for (int c=0;c<specific_option_ids.size();c++) if(specific_option_ids[c]==(it->SPECIFIC_OPTION_ID())) unique=false;
527 if(unique) specific_option_ids.push_back(it->SPECIFIC_OPTION_ID());
528 }
529 }
530 else
531 cout << "Error in returning data : ERROR = " << rc << endl;
532
533 return specific_option_ids;
534 }
535
536 std::string Accessors::getSpecificOptionName(int specific_option_id)
537 {
538 std::string specific_option_name = "";
539
540 DOWNLOADS_mgr dmgr("DOWNLOADS");
541
542 if(!dmgr.isValid())
543 {
544 cout<<"No connection to the Trigger DB !"<<endl;
545 return specific_option_name;
546 }
547
548 DOWNLOADSContainer_ptr rvals;
549 DOWNLOADSContainer::iterator it;
550
551
552 ostringstream srt_sql;
553 srt_sql<<" WHERE SPECIFIC_OPTION_ID = "<<specific_option_id;
554 ROKey dbk(srt_sql.str());
555
556
557
558 Result rc = dmgr.get(dbk,rvals);
559 if (rc == Result::success)
560 {
561 for (it = rvals->begin();it != rvals->end();++it)
562 {
563 specific_option_name=(it->SPECIFIC_OPTION_NAME());
564 if(specific_option_name!="") break;
565 }
566 }
567 else
568 cout << "Error in returning data : ERROR = " << rc << endl;
569
570 return specific_option_name;
571
572 }
573
574 int Accessors::getSpecificOptionTag(int specific_option_id)
575 {
576 int specific_option_tag = 0;
577
578 DOWNLOADS_mgr dmgr("DOWNLOADS");
579
580 if(!dmgr.isValid())
581 {
582 cout<<"No connection to the Trigger DB !"<<endl;
583 return specific_option_tag;
584 }
585
586 DOWNLOADSContainer_ptr rvals;
587 DOWNLOADSContainer::iterator it;
588
589
590 ostringstream srt_sql;
591 srt_sql<<" WHERE SPECIFIC_OPTION_ID = "<<specific_option_id;
592 ROKey dbk(srt_sql.str());
593
594
595
596 Result rc = dmgr.get(dbk,rvals);
597 if (rc == Result::success)
598 {
599 for (it = rvals->begin();it != rvals->end();++it)
600 {
601 specific_option_tag=(it->SPECIFIC_OPTION_TAG());
602 if(specific_option_tag!=0) break;
603 }
604 }
605 else
606 cout << "Error in returning data : ERROR = " << rc << endl;
607
608 return specific_option_tag;
609
610 }
611
612 std::string Accessors::getOptionName(int specific_option_id)
613 {
614 std::string option_name = "";
615
616 DOWNLOADS_mgr dmgr("DOWNLOADS");
617
618 if(!dmgr.isValid())
619 {
620 cout<<"No connection to the Trigger DB !"<<endl;
621 return option_name;
622 }
623
624 DOWNLOADSContainer_ptr rvals;
625 DOWNLOADSContainer::iterator it;
626
627
628 ostringstream srt_sql;
629 srt_sql<<" WHERE SPECIFIC_OPTION_ID = "<<specific_option_id;
630 ROKey dbk(srt_sql.str());
631
632
633
634 Result rc = dmgr.get(dbk,rvals);
635 if (rc == Result::success)
636 {
637 for (it = rvals->begin();it != rvals->end();++it)
638 {
639 option_name=(it->OPTION_NAME());
640 if(option_name!="") break;
641 }
642 }
643 else
644 cout << "Error in returning data : ERROR = " << rc << endl;
645
646 return option_name;
647
648 }
649
650 vector<std::string> Accessors::getCutsAndParameters(std::string option)
651 {
652 vector<std::string> cut_parameter;
653
654 DOWNLOADS_mgr dmgr("DOWNLOADS");
655
656 if(!dmgr.isValid())
657 {
658 cout<<"No connection to the Trigger DB !"<<endl;
659 return cut_parameter;
660 }
661
662 DOWNLOADSContainer_ptr rvals;
663 DOWNLOADSContainer::iterator it;
664
665
666 ostringstream srt_sql;
667 srt_sql<<" WHERE OPTION_NAME = '"<<option<<"'";
668 ROKey dbk(srt_sql.str());
669
670
671
672 Result rc = dmgr.get(dbk,rvals);
673 if (rc == Result::success)
674 {
675 for (it = rvals->begin();it != rvals->end();++it)
676 {
677 bool unique = true;
678 for (int c=0;c<cut_parameter.size();c++) if(cut_parameter[c]==(it->CUT_OR_PARAMETER_NAME())) unique=false;
679 if(unique) cut_parameter.push_back(it->CUT_OR_PARAMETER_NAME());
680 }
681 }
682 else
683 cout << "Error in returning data : ERROR = " << rc << endl;
684
685 return cut_parameter;
686 }
687
688 float Accessors::getValue(int physics_table_id, int trigger_id, int specific_option_id, std::string parameter)
689 {
690 float value = (float)-1.975;
691
692 DOWNLOADS_mgr dmgr("DOWNLOADS");
693
694 if(!dmgr.isValid())
695 {
696 cout<<"No connection to the Trigger DB !"<<endl;
697 return value;
698 }
699
700 DOWNLOADSContainer_ptr rvals;
701 DOWNLOADSContainer::iterator it;
702
703
704 ostringstream srt_sql;
705 srt_sql<<" WHERE PHYSICS_TABLE_NAME = '"<<getPhysicsTableName(physics_table_id)<<"'";
706 srt_sql<<" AND PHYSICS_TABLE_TAG = "<<getPhysicsTableTag(physics_table_id);
707 srt_sql<<" AND TRIGGER_NAME = '"<<getTriggerName(trigger_id)<<"'";
708 srt_sql<<" AND TRIGGER_TAG = "<<getTriggerTag(trigger_id);
709 srt_sql<<" AND TRIGGER_LEVEL = "<<getTriggerLevel(trigger_id);
710 srt_sql<<" AND SPECIFIC_OPTION_ID = "<<specific_option_id;
711 srt_sql<<" AND CUT_OR_PARAMETER_NAME = '"<<parameter<<"'";
712 ROKey dbk(srt_sql.str());
713
714
715 Result rc = dmgr.get(dbk,rvals);
716 if (rc == Result::success)
717 {
718
719 for (it = rvals->begin();it != rvals->end();++it)
720 {
721
722 value=(it->SPECIFIED_VALUE());
723 if(value!=(float)-1.975) break;
724 }
725 }
726 else
727 cout << "Error in returning data : ERROR = " << rc << endl;
728
729 return value;
730
731 }
Send problems or questions to cdfcode@fnal.gov