Go to the documentation of this file.00001 #include "CondTools/RPC/interface/RPCRunIOV.h"
00002 #include <iostream>
00003 #include <sstream>
00004 #include <iomanip>
00005 #include "DataFormats/Provenance/interface/Timestamp.h"
00006 #include <sys/time.h>
00007
00008
00009 namespace
00010 {
00011 std::string toString (int i)
00012 {
00013 char temp[20];
00014 sprintf (temp, "%d", i);
00015 return ((std::string) temp);
00016 }
00017 }
00018
00019
00020
00021 RPCRunIOV::RPCRunIOV()
00022 {}
00023
00024
00025 RPCRunIOV::RPCRunIOV(const edm::EventSetup& evtSetup)
00026 {
00027 eventSetup = &evtSetup;
00028 }
00029
00030
00031
00032 std::vector<RPCObImon::I_Item>
00033 RPCRunIOV::getImon() {
00034
00035 edm::ESHandle<RPCObImon> condRcd;
00036 eventSetup->get<RPCObImonRcd>().get(condRcd);
00037
00038 std::cout << std::endl << "=============================================" << std::endl;
00039 std::cout << std::endl << "=============== IMON READER ===============" << std::endl;
00040 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00041
00042
00043 const RPCObImon* cond = condRcd.product();
00044 std::vector<RPCObImon::I_Item> mycond = cond->ObImon_rpc;
00045 std::vector<RPCObImon::I_Item>::iterator icond;
00046
00047 std::cout << ">>> Object IMON" << std::endl;
00048 std::cout << " size " << mycond.size() << std::endl;
00049
00050 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00051
00052 if (mycond.size() == 0) {
00053 min_I = 0;
00054 max_I = 0;
00055 return mycond;
00056 }
00057
00058 std::vector<RPCObImon::I_Item>::iterator first;
00059 first = mycond.begin();
00060 min_I = this->toUNIX(first->day, first->time);
00061 max_I = min_I;
00062 unsigned long long value;
00063 for(icond = mycond.begin(); icond < mycond.end(); ++icond){
00064 value = this->toUNIX(icond->day, icond->time);
00065 if (value < min_I) min_I = value;
00066 if (value > max_I) max_I = value;
00067 }
00068 return mycond;
00069 }
00070
00071
00072
00073 std::vector<RPCObVmon::V_Item>
00074 RPCRunIOV::getVmon() {
00075
00076 edm::ESHandle<RPCObVmon> condRcd;
00077 eventSetup->get<RPCObVmonRcd>().get(condRcd);
00078
00079 std::cout << std::endl << "=============================================" << std::endl;
00080 std::cout << std::endl << "=============== VMON READER ===============" << std::endl;
00081 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00082
00083
00084 const RPCObVmon* cond = condRcd.product();
00085 std::vector<RPCObVmon::V_Item> mycond = cond->ObVmon_rpc;
00086 std::vector<RPCObVmon::V_Item>::iterator icond;
00087
00088 std::cout << ">>> Object VMON" << std::endl;
00089 std::cout << " size " << mycond.size() << std::endl;
00090
00091 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00092
00093 if (mycond.size() == 0) {
00094 min_I = 0;
00095 max_I = 0;
00096 return mycond;
00097 }
00098
00099 std::vector<RPCObVmon::V_Item>::iterator first;
00100 first = mycond.begin();
00101 min_V = this->toUNIX(first->day, first->time);
00102 max_V = min_I;
00103 unsigned long long value;
00104 for(icond = mycond.begin(); icond < mycond.end(); ++icond){
00105 value = this->toUNIX(icond->day, icond->time);
00106 if (value < min_V) min_V = value;
00107 if (value > max_V) max_V = value;
00108 }
00109 return mycond;
00110 }
00111
00112
00113
00114 std::vector<RPCObTemp::T_Item>
00115 RPCRunIOV::getTemp() {
00116
00117 edm::ESHandle<RPCObTemp> condRcd;
00118 eventSetup->get<RPCObTempRcd>().get(condRcd);
00119
00120 std::cout << std::endl << "=============================================" << std::endl;
00121 std::cout << std::endl << "=============== TEMP READER ===============" << std::endl;
00122 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00123
00124
00125 const RPCObTemp* cond = condRcd.product();
00126 std::vector<RPCObTemp::T_Item> mycond = cond->ObTemp_rpc;
00127 std::vector<RPCObTemp::T_Item>::iterator icond;
00128
00129 std::cout << ">>> Object TEMPERATURE" << std::endl;
00130 std::cout << " size " << mycond.size() << std::endl;
00131
00132 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00133
00134 if (mycond.size() == 0) {
00135 min_I = 0;
00136 max_I = 0;
00137 return mycond;
00138 }
00139
00140 std::vector<RPCObTemp::T_Item>::iterator first;
00141 first = mycond.begin();
00142 min_T = this->toUNIX(first->day, first->time);
00143 max_T = min_T;
00144 unsigned long long value;
00145 for(icond = mycond.begin(); icond < mycond.end(); ++icond){
00146 value = this->toUNIX(icond->day, icond->time);
00147 if (value < min_T) min_T = value;
00148 if (value > max_T) max_T = value;
00149 }
00150 return mycond;
00151 }
00152
00153
00154
00155
00156
00157 std::map<int, RPCObPVSSmap::Item>
00158 RPCRunIOV::getPVSSMap()
00159 {
00160
00161 edm::ESHandle<RPCObPVSSmap> pvssRcd;
00162 eventSetup->get<RPCObPVSSmapRcd>().get(pvssRcd);
00163
00164 std::cout << std::endl << "=============================================" << std::endl;
00165 std::cout << std::endl << "=============== PVSS READER ===============" << std::endl;
00166 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00167
00168 const RPCObPVSSmap* pvss = pvssRcd.product();
00169 std::vector<RPCObPVSSmap::Item> mypvss = pvss->ObIDMap_rpc;
00170 std::vector<RPCObPVSSmap::Item>::iterator ipvss;
00171
00172 std::cout << ">>> Object PVSS" << std::endl;
00173 std::cout << " size " << mypvss.size() << std::endl;
00174
00175 RPCObPVSSmap::Item pvssItem={0,0,0,0,0,0,0,0,0};
00176 int id;
00177 std::map<int, RPCObPVSSmap::Item> pvssmap;
00178 for(ipvss = mypvss.begin(); ipvss < mypvss.end(); ++ipvss){
00179 id = ipvss->dpid;
00180 pvssItem.region = ipvss->region;
00181 pvssItem.ring = ipvss->ring;
00182 pvssItem.station = ipvss->station;
00183 pvssItem.sector = ipvss->sector;
00184 pvssItem.layer = ipvss->layer;
00185 pvssItem.subsector = ipvss->subsector;
00186 pvssItem.suptype = ipvss->suptype;
00187 pvssmap.insert ( std::pair<int, RPCObPVSSmap::Item>(id, pvssItem) );
00188
00189 }
00190
00191 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00192
00193 return pvssmap;
00194 }
00195
00196
00197 RPCRunIOV::~RPCRunIOV(){}
00198
00199
00200
00201 unsigned long long
00202 RPCRunIOV::toDAQ(unsigned long long timeU)
00203 {
00204 ::timeval tv;
00205 tv.tv_sec = timeU;
00206 tv.tv_usec = 0;
00207 edm::TimeValue_t daqtime=0LL;
00208 daqtime=tv.tv_sec;
00209 daqtime=(daqtime<<32)+tv.tv_usec;
00210 edm::Timestamp daqstamp(daqtime);
00211 edm::TimeValue_t dtime_ = daqstamp.value();
00212 unsigned long long dtime = dtime_;
00213 return dtime;
00214 }
00215
00216
00217 unsigned long long
00218 RPCRunIOV::DAQtoUNIX(unsigned long long *time)
00219 {
00220 timeval *tmval=(timeval*)time;
00221 unsigned long long int curVal=(tmval->tv_usec*1000000LL)+tmval->tv_sec;
00222 return curVal;
00223 }
00224
00225
00226 unsigned long long
00227 RPCRunIOV::toUNIX(int date, int time)
00228 {
00229 int yea_ = (int)date/100;
00230 int yea = 2000 + (date - yea_*100);
00231 int mon_ = (int)yea_/100;
00232 int mon = yea_ - mon_*100;
00233 int day = (int)yea_/100;
00234 int sec_ = (int)time/100;
00235 int sec = time - sec_*100;
00236 int min_ = (int)sec_/100;
00237 int min = sec_ - min_*100;
00238 int hou = (int)sec_/100;
00239 int nan = 0;
00240 coral::TimeStamp TS;
00241 TS = coral::TimeStamp(yea, mon, day, hou, min, sec, nan);
00242 RPCFw conv ("","","");
00243 unsigned long long UT = conv.TtoUT(TS);
00244 return UT;
00245 }
00246
00247
00248
00249
00250
00251
00252 std::vector<RPCObImon::I_Item>
00253 RPCRunIOV::filterIMON(std::vector<RPCObImon::I_Item> imon, unsigned long long since, unsigned long long till)
00254 {
00255
00256 std::cout << std::endl << "=============================================" << std::endl;
00257 std::cout << std::endl << "============ FILTERING DATA ===========" << std::endl;
00258 std::cout << std::endl << "=============================================" << std::endl << std::endl;
00259 std::vector<RPCObImon::I_Item>::iterator it;
00260 RPCFw conv ("","","");
00261 int n = 0;
00262 for ( it=imon.begin(); it < imon.end(); it++ ) {
00263 n++;
00264 int day = (int)it->day/10000;
00265 int mon = (int)(it->day - day*10000)/100;
00266 int yea = (int)(it->day - day*10000 - mon*100)+2000;
00267 int hou = (int)it->time/10000;
00268 int min = (int)(it->time - hou*10000)/100;
00269 int sec = (int)(it->time - hou*10000 - min*100);
00270 int nan = 0;
00271 coral::TimeStamp timeD = coral::TimeStamp(yea, mon, day, hou, min, sec, nan);
00272 unsigned long long timeU = conv.TtoUT(timeD);
00273 if (timeU < till && timeU > since) filtImon.push_back(*it);
00274 }
00275 return filtImon;
00276 }
00277
00278
00279
00280
00281 std::string
00282 RPCRunIOV::chamberName(chRAW ch){
00283
00284 using namespace std;
00285 string chambername, sector, station, DP, ring;
00286
00287
00288 if (ch.region == 0) {
00289 switch(ch.ring) {
00290 case 2: chambername = "WP2";
00291 case 1: chambername = "WP1";
00292 case 0: chambername = "W00";
00293 case -1: chambername = "WM1";
00294 case -2: chambername = "WM2";
00295 }
00296 sector = toString (ch.sector);
00297 station = toString (ch.station);
00298 chambername += "_S"+sector+"_RB"+station;
00299
00300 switch(ch.station) {
00301 case 1:; case 2:
00302 if (ch.subsector == 1) chambername += "minus";
00303 if (ch.subsector == 2) chambername += "minus";
00304 case 3:
00305 if(ch.layer == 1)chambername += "in";
00306 if(ch.layer == 2)chambername += "out";
00307 case 4:
00308 if(ch.sector != 9 && ch.sector != 11) {
00309 if (ch.subsector == 1) chambername += "minusminus";
00310 if (ch.subsector == 2) chambername += "minus";
00311 if (ch.subsector == 3) chambername += "plus";
00312 if (ch.subsector == 4) chambername += "plusplus";
00313 } else {
00314 if (ch.subsector == 1) chambername += "minus";
00315 if (ch.subsector == 2) chambername += "minus";
00316 }
00317 }
00318 }
00319
00320 else{
00321 int DP_ = 6*(ch.sector-1)+ch.subsector;
00322 DP = toString (DP_);
00323 ring = toString (ch.ring);
00324 station = toString (ch.station);
00325 if (ch.region == 1) chambername += "DP";
00326 if (ch.region == -1)chambername += "DM";
00327 chambername += station+"_R"+ring+"_C"+DP;
00328 }
00329 return chambername;
00330 }