CMS 3D CMS Logo

LuminosityBlockID.h

Go to the documentation of this file.
00001 #ifndef DataFormats_Provenance_LuminosityBlockID_h
00002 #define DataFormats_Provenance_LuminosityBlockID_h
00003 // -*- C++ -*-
00004 //
00005 // Package:     DataFormats/Provenance
00006 // Class  :     LuminosityBlockID
00007 // 
00016 //
00017 // $Id: LuminosityBlockID.h,v 1.1 2007/03/04 04:48:08 wmtan Exp $
00018 //
00019 
00020 // system include files
00021 #include <functional>
00022 #include <iosfwd>
00023 
00024 // user include files
00025 #include "DataFormats/Provenance/interface/RunID.h"
00026 
00027 // forward declarations
00028 namespace edm {
00029 
00030    typedef unsigned int LuminosityBlockNumber_t;
00031 
00032    
00033 class LuminosityBlockID
00034 {
00035 
00036    public:
00037    
00038    
00039       LuminosityBlockID() : run_(0), luminosityBlock_(0) {}
00040       LuminosityBlockID(RunNumber_t iRun, LuminosityBlockNumber_t iLuminosityBlock) :
00041         run_(iRun), luminosityBlock_(iLuminosityBlock) {}
00042       
00043       //virtual ~LuminosityBlockID();
00044 
00045       // ---------- const member functions ---------------------
00046       RunNumber_t run() const { return run_; }
00047       LuminosityBlockNumber_t luminosityBlock() const { return luminosityBlock_; }
00048    
00049       //moving from one LuminosityBlockID to another one
00050       LuminosityBlockID next() const {
00051          if(luminosityBlock_ != maxLuminosityBlockNumber()) {
00052             return LuminosityBlockID(run_, luminosityBlock_+1);
00053          }
00054          return LuminosityBlockID(run_+1, 1);
00055       }
00056       LuminosityBlockID nextRun() const {
00057          return LuminosityBlockID(run_+1, 0);
00058       }
00059       LuminosityBlockID nextRunFirstLuminosityBlock() const {
00060          return LuminosityBlockID(run_+1, 1);
00061       }
00062       LuminosityBlockID previousRunLastLuminosityBlock() const {
00063          if(run_ > 1) {
00064             return LuminosityBlockID(run_-1, maxLuminosityBlockNumber());
00065          }
00066          return LuminosityBlockID(0,0);
00067       }
00068    
00069       LuminosityBlockID previous() const {
00070          if(luminosityBlock_ > 1) {
00071             return LuminosityBlockID(run_, luminosityBlock_-1);
00072          }
00073          if(run_ != 0) {
00074             return LuminosityBlockID(run_ -1, maxLuminosityBlockNumber());
00075          }
00076          return LuminosityBlockID(0,0);
00077       }
00078       
00079       bool operator==(LuminosityBlockID const& iRHS) const {
00080          return iRHS.run_ == run_ && iRHS.luminosityBlock_ == luminosityBlock_;
00081       }
00082       bool operator!=(LuminosityBlockID const& iRHS) const {
00083          return ! (*this == iRHS);
00084       }
00085       
00086       bool operator<(LuminosityBlockID const& iRHS) const {
00087          return doOp<std::less>(iRHS);
00088       }
00089       bool operator<=(LuminosityBlockID const& iRHS) const {
00090          return doOp<std::less_equal>(iRHS);
00091       }
00092       bool operator>(LuminosityBlockID const& iRHS) const {
00093          return doOp<std::greater>(iRHS);
00094       }
00095       bool operator>=(LuminosityBlockID const& iRHS) const {
00096          return doOp<std::greater_equal>(iRHS);
00097       }
00098       // ---------- static functions ---------------------------
00099 
00100       static LuminosityBlockNumber_t maxLuminosityBlockNumber() {
00101          return 0xFFFFFFFFU;
00102       }
00103    
00104       static LuminosityBlockID firstValidLuminosityBlock() {
00105          return LuminosityBlockID(1, 1);
00106       }
00107       // ---------- member functions ---------------------------
00108    
00109    private:
00110       template<template <typename> class Op>
00111       bool doOp(LuminosityBlockID const& iRHS) const {
00112          //Run takes presidence for comparisions
00113          if(run_ == iRHS.run_) {
00114             Op<LuminosityBlockNumber_t> op_e;
00115             return op_e(luminosityBlock_, iRHS.luminosityBlock_);
00116          }
00117          Op<RunNumber_t> op;
00118          return op(run_, iRHS.run_) ;
00119       }
00120       //LuminosityBlockID(LuminosityBlockID const&); // stop default
00121 
00122       //LuminosityBlockID const& operator=(LuminosityBlockID const&); // stop default
00123 
00124       // ---------- member data --------------------------------
00125       RunNumber_t run_;
00126       LuminosityBlockNumber_t luminosityBlock_;
00127 };
00128 
00129 std::ostream& operator<<(std::ostream& oStream, LuminosityBlockID const& iID);
00130 
00131 }
00132 #endif

Generated on Tue Jun 9 17:31:33 2009 for CMSSW by  doxygen 1.5.4