Go to the documentation of this file.00001 #ifndef GUARD_RecoIdealGeometry_H
00002 #define GUARD_RecoIdealGeometry_H
00003
00004 #include <vector>
00005 #include <algorithm>
00006 #include <cassert>
00007
00008 #include <DataFormats/DetId/interface/DetId.h>
00009
00026 class RecoIdealGeometry {
00027 public:
00028
00029 RecoIdealGeometry() { }
00030 ~RecoIdealGeometry() { }
00031
00032 bool insert( DetId id, const std::vector<double>& trans, const std::vector<double>& rot, const std::vector<double>& pars ) {
00033 if ( trans.size() != 3 || rot.size() != 9 ) return false;
00034 pDetIds.push_back(id);
00035 pNumShapeParms.push_back(pars.size());
00036 pParsIndex.push_back(pPars.size());
00037 pPars.reserve(pPars.size() + trans.size() + rot.size() + pars.size());
00038 std::copy ( trans.begin(), trans.end(), std::back_inserter(pPars));
00039 std::copy ( rot.begin(), rot.end(), std::back_inserter(pPars));
00040 std::copy ( pars.begin(), pars.end(), std::back_inserter(pPars));
00041 return true;
00042 }
00043
00044 bool insert( DetId id, const std::vector<double>& trans, const std::vector<double>& rot, const std::vector<double>& pars, const std::vector<std::string>& spars ) {
00045 if ( trans.size() != 3 || rot.size() != 9 ) return false;
00046 pDetIds.push_back(id);
00047 pNumShapeParms.push_back(pars.size());
00048 pParsIndex.push_back(pPars.size());
00049 pPars.reserve(pPars.size() + trans.size() + rot.size() + pars.size());
00050 std::copy ( trans.begin(), trans.end(), std::back_inserter(pPars));
00051 std::copy ( rot.begin(), rot.end(), std::back_inserter(pPars));
00052 std::copy ( pars.begin(), pars.end(), std::back_inserter(pPars));
00053
00054 sNumsParms.push_back(spars.size());
00055 sParsIndex.push_back(strPars.size());
00056 strPars.reserve(strPars.size()+spars.size());
00057 std::copy ( spars.begin(), spars.end(), std::back_inserter(strPars));
00058 return true;
00059 }
00060
00061 size_t size() {
00062 assert ( (pDetIds.size() == pNumShapeParms.size()) && (pNumShapeParms.size() == pParsIndex.size()) );
00063 return pDetIds.size();
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075 const std::vector<DetId>& detIds () const {
00076 return pDetIds;
00077 }
00078
00079 std::vector<double>::const_iterator tranStart( size_t ind ) const {
00080 return pPars.begin() + pParsIndex[ind];
00081 }
00082
00083 std::vector<double>::const_iterator tranEnd ( size_t ind ) const {
00084 return pPars.begin() + pParsIndex[ind] + 3;
00085 }
00086
00087 std::vector<double>::const_iterator rotStart ( size_t ind ) const {
00088 return pPars.begin() + pParsIndex[ind] + 3;
00089 }
00090
00091 std::vector<double>::const_iterator rotEnd ( size_t ind ) const {
00092 return pPars.begin() + pParsIndex[ind] + 3 + 9;
00093 }
00094
00095 std::vector<double>::const_iterator shapeStart ( size_t ind ) const {
00096 return pPars.begin() + pParsIndex[ind] + 3 + 9;
00097 }
00098
00099 std::vector<double>::const_iterator shapeEnd ( size_t ind ) const {
00100 return pPars.begin() + pParsIndex[ind] + 3 + 9 + pNumShapeParms[ind];
00101 }
00102
00103 std::vector<std::string>::const_iterator strStart ( size_t ind ) const {
00104 return strPars.begin() + sParsIndex[ind];
00105 }
00106
00107 std::vector<std::string>::const_iterator strEnd ( size_t ind ) const {
00108 return strPars.begin() + sParsIndex[ind] + sNumsParms[ind];
00109 }
00110
00111
00112 private:
00113
00114 std::vector<DetId> pDetIds;
00115
00116 std::vector<double> pPars;
00117
00118
00119 std::vector<int> pParsIndex;
00120 std::vector<int> pNumShapeParms;
00121
00122 std::vector<std::string> strPars;
00123 std::vector<int> sParsIndex;
00124 std::vector<int> sNumsParms;
00125 };
00126
00127 #endif
00128