Go to the documentation of this file.00001 #include "SimMuon/GEMDigitizer/src/GEMSimSetUp.h"
00002 #include "Geometry/GEMGeometry/interface/GEMGeometry.h"
00003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00004
00005 GEMSimSetUp::GEMSimSetUp(const edm::ParameterSet& config)
00006 {
00007 auto pset = config.getParameter<edm::ParameterSet>("digiModelConfig");
00008
00009 averageEfficiency_ = pset.getParameter<double>("averageEfficiency");
00010 averageNoiseRate_ = pset.getParameter<double>("averageNoiseRate");
00011 timeCalibrationOffset_ = pset.getParameter<double>("timeCalibrationOffset");
00012 numberOfStripsPerPartition_ = pset.getParameter<int>("numberOfStripsPerPartition");
00013 }
00014
00015 void GEMSimSetUp::setup(std::vector<RPCStripNoises::NoiseItem> &vnoise,
00016 std::vector<float> &vcluster)
00017 {
00018 std::cout << "GEMSimSetUp::setup()" << std::endl;
00019 unsigned int counter = 1;
00020 unsigned int row = 1;
00021 std::vector<float> sum_clsize;
00022
00023 for(unsigned int n = 0; n < vcluster.size(); ++n)
00024 {
00025 sum_clsize.push_back(vcluster[n]);
00026
00027 if(counter == row * 20)
00028 {
00029 clusterMap_[row] = sum_clsize;
00030 row++;
00031 sum_clsize.clear();
00032 }
00033 counter++;
00034 }
00035
00036 setupNoiseAndEfficiency(vnoise);
00037 }
00038
00039
00040 void GEMSimSetUp::setup(std::vector<RPCStripNoises::NoiseItem> &vnoise,
00041 std::vector<RPCClusterSize::ClusterSizeItem> &vClusterSize)
00042 {
00043 int clusterCounter = 1;
00044 std::vector<float> clusterVect;
00045
00046 for(auto cluster: vClusterSize)
00047 {
00048 clusterVect.push_back(cluster.clusterSize);
00049 if( !(clusterCounter % 100) && clusterCounter != 0 )
00050 {
00051 mapDetClusterMap_[cluster.dpid] = clusterVect;
00052 clusterVect.clear();
00053 clusterCounter = 0;
00054 }
00055 ++clusterCounter;
00056 }
00057
00058 setupNoiseAndEfficiency(vnoise);
00059 }
00060
00061
00062
00063 void GEMSimSetUp::setup()
00064 {
00065
00066
00067
00068
00069
00070
00071
00072
00073 std::vector<RPCStripNoises::NoiseItem> vnoise;
00074 vnoise.reserve(geometry_->dets().size() * numberOfStripsPerPartition_);
00075
00076
00077 for(const auto &det: geometry_->dets())
00078 {
00079 GEMEtaPartition* roll = dynamic_cast< GEMEtaPartition* >( det );
00080
00081
00082 if(roll == nullptr) continue;
00083
00084 const int nStrips = roll->nstrips();
00085 if (numberOfStripsPerPartition_ != nStrips)
00086 {
00087 throw cms::Exception("DataCorrupt")
00088 << "GEMSimSetUp::setup() - numberOfStripsPerPartition given in configuration "
00089 <<numberOfStripsPerPartition_ <<" is not the same as in geometry "<<nStrips;
00090 }
00091
00092
00093 for(int iStrip=0; iStrip <= nStrips-1; ++iStrip)
00094 {
00095
00096 RPCStripNoises::NoiseItem noise;
00097 noise.dpid = roll->id();
00098 noise.eff = averageEfficiency_;
00099 noise.noise = averageNoiseRate_;
00100 noise.time = timeCalibrationOffset_;
00101
00102
00103 vnoise.push_back(noise);
00104 }
00105 setupTimeCalibration(det->geographicalId(),timeCalibrationOffset_);
00106 }
00107 setupNoiseAndEfficiency(vnoise);
00108 }
00109
00110
00111 const std::vector<float>& GEMSimSetUp::getNoise(uint32_t id)
00112 {
00113 auto iter = mapDetIdNoise_.find(id);
00114 if(iter == mapDetIdNoise_.end())
00115 {
00116 throw cms::Exception("DataCorrupt")
00117 << "GEMSimSetUp::getNoise() - no noise information for DetId "<<id<< "\n";
00118 }
00119 return iter->second;
00120 }
00121
00122
00123 const std::vector<float>& GEMSimSetUp::getEfficiency(uint32_t id)
00124 {
00125 auto iter = mapDetIdEfficiency_.find(id);
00126 if(iter == mapDetIdEfficiency_.end())
00127 {
00128 throw cms::Exception("DataCorrupt")
00129 << "GEMSimSetUp::getEfficiency() - no efficiency information for DetId "<<id<< "\n";
00130 }
00131 if((iter->second).size() != (unsigned) numberOfStripsPerPartition_)
00132 {
00133 throw cms::Exception("DataCorrupt")
00134 << "GEMSimSetUp::getEfficiency() - efficiency information in a wrong format for DetId "<<id<< "\n";
00135 }
00136 return iter->second;
00137 }
00138
00139
00140 float GEMSimSetUp::getTime(uint32_t id)
00141 {
00142 GEMDetId detid(id);
00143 auto iter = bxmap_.find(detid);
00144 if(iter == bxmap_.end())
00145 {
00146 throw cms::Exception("DataCorrupt")
00147 << "GEMSimSetUp::getTime() - no timing information for gemid.rawId() "<<detid.rawId()<< "\n";
00148 }
00149 return iter->second;
00150 }
00151
00152
00153 const std::map< int, std::vector<float> >& GEMSimSetUp::getClusterMap()
00154 {
00155 if(clusterMap_.size() != 5)
00156 {
00157 throw cms::Exception("DataCorrupt")
00158 << "GEMSimSetUp::getClusterMap() - cluster size has the wrong format.\n";
00159 }
00160 return clusterMap_;
00161 }
00162
00163
00164 const std::vector<float>& GEMSimSetUp::getCluster(uint32_t id)
00165 {
00166 auto iter = mapDetClusterMap_.find(id);
00167 if(iter == mapDetClusterMap_.end())
00168 {
00169 throw cms::Exception("DataCorrupt")
00170 << "GEMSimSetUp::getCluster() - no cluster size information for DetId "<<id<< "\n";
00171 }
00172 if((iter->second).size() != 100)
00173 {
00174 throw cms::Exception("DataCorrupt")
00175 << "GEMSimSetUp::getCluster() - cluster size information in a wrong format for DetId "<<id<< "\n";
00176 }
00177 return iter->second;
00178 }
00179
00180
00181 void GEMSimSetUp::setupNoiseAndEfficiency(std::vector<RPCStripNoises::NoiseItem> &vnoise)
00182 {
00183 unsigned int iStrip = 0;
00184 uint32_t roll = 0;
00185 std::vector<float> vEfficiency, vNoise;
00186 vEfficiency.clear();
00187 vNoise.clear();
00188
00189
00190 for(auto noise: vnoise)
00191 {
00192 if(iStrip % numberOfStripsPerPartition_ == 0)
00193 {
00194
00195 if(iStrip > 0)
00196 {
00197
00198 mapDetIdNoise_[roll] = vNoise;
00199 mapDetIdEfficiency_[roll] = vEfficiency;
00200
00201 vEfficiency.clear();
00202 vNoise.clear();
00203 vNoise.push_back(noise.noise);
00204 vEfficiency.push_back(noise.eff);
00205 }
00206
00207 else if (iStrip == 0 )
00208 {
00209
00210 vNoise.push_back(noise.noise);
00211 vEfficiency.push_back(noise.eff);
00212 }
00213 }
00214
00215 else if (iStrip == vnoise.size() - 1 )
00216 {
00217 roll = noise.dpid;
00218 vNoise.push_back(noise.noise);
00219 vEfficiency.push_back(noise.eff);
00220
00221 mapDetIdNoise_[roll]= vNoise;
00222 mapDetIdEfficiency_[roll] = vEfficiency;
00223 }
00224
00225 else
00226 {
00227 roll = noise.dpid;
00228 vNoise.push_back(noise.noise);
00229 vEfficiency.push_back(noise.eff);
00230 }
00231 iStrip++;
00232 }
00233 }
00234
00235
00236
00237 void GEMSimSetUp::setupTimeCalibration(GEMDetId id, float timing)
00238 {
00239 bxmap_[id] = timing;
00240 }
00241
00242
00243
00244