CDF II
CDF KITS
source navigation ]
diff markup ]
identifier search ]
freetext search ]
file search ]
 
Architecture: i386 ]
Version: 4.10.4 ] [ 4.10.5 ] [ 4.8.4 ] [ 4.8.4l3s ] [ 4.8.5 ] [ 4.9.0 ] [ 4.9.1 ] [ 4.9.1.hpt3 ] [ 4.9.1hpt3 ] [ 4.9.1top1 ] [ 5.0.0 ] [ 5.1.0 ] [ 5.1.0beamonly ] [ 5.1.1 ] [ 5.2.0 ] [ 5.3.0 ] [ 5.3.1 ] [ 5.3.1dsp ] [ 5.3.3 ] [ 5.3.3_nt ] [ 5.3.4 ] [ 6.1.1 ] [ 6.1.1b ] [ 6.1.2 ] [ 6.1.3 ] [ 6.1.4 ] [ 6.1.4int3 ] [ 6.1.4mc ] [ 6.1.4mc_a ] [ 6.1.6 ] [ development ]

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 // List here the tables one needs access to.
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 // Constructors --
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
169   ostringstream srt_sql;
170   srt_sql<<" WHERE PHYSICS_TABLE_ID = "<<physics_table_id;
171   ROKey dbk(srt_sql.str());
172 
173   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
248   ostringstream srt_sql;
249   srt_sql<<" WHERE TRIGGER_ID = "<<trigger_id;
250   ROKey dbk(srt_sql.str());
251 
252   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
285   ostringstream srt_sql;
286   srt_sql<<" WHERE TRIGGER_ID = "<<trigger_id;
287   ROKey dbk(srt_sql.str());
288 
289 
290   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
323   ostringstream srt_sql;
324   srt_sql<<" WHERE TRIGGER_ID = "<<trigger_id;
325   ROKey dbk(srt_sql.str());
326 
327   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
361   ostringstream srt_sql;
362   srt_sql<<" WHERE RUNNUMBER = "<<run_number;
363   ROKey dbk(srt_sql.str());
364 
365   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
552   ostringstream srt_sql;
553   srt_sql<<" WHERE SPECIFIC_OPTION_ID = "<<specific_option_id;
554   ROKey dbk(srt_sql.str());
555 
556 
557   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
590   ostringstream srt_sql;
591   srt_sql<<" WHERE SPECIFIC_OPTION_ID = "<<specific_option_id;
592   ROKey dbk(srt_sql.str());
593 
594 
595   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
628   ostringstream srt_sql;
629   srt_sql<<" WHERE SPECIFIC_OPTION_ID = "<<specific_option_id;
630   ROKey dbk(srt_sql.str());
631 
632 
633   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
666   ostringstream srt_sql;
667   srt_sql<<" WHERE OPTION_NAME = '"<<option<<"'";
668   ROKey dbk(srt_sql.str());
669 
670 
671   // Do the fetch from the DB and print out returned rows.
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   // Set the key -- just simple election 
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   // Do the fetch from the DB and print out returned rows.
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 }

source navigation ] diff markup ] identifier search ] freetext search ] file search ]

This page was automatically generated by the LXR engine.
The LXR team
Valid HTML 4.01!

Send problems or questions to cdfcode@fnal.gov