CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/CondTools/RPC/src/RPCRunIOV.cc

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 // this methos filters data
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 //-----------chamber Name -------------------------------------
00281 std::string
00282 RPCRunIOV::chamberName(chRAW ch){
00283 
00284   using namespace std;
00285   string chambername, sector, station, DP, ring;
00286 
00287   // BARREL
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   // ENDCAP
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 }