Go to the documentation of this file.00001 #ifndef SISTRIPPOPCON_UNITTEST_HANDLER_H
00002 #define SISTRIPPOPCON_UNITTEST_HANDLER_H
00003
00004 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
00005 #include "FWCore/ServiceRegistry/interface/Service.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
00008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00009
00010 #include "CondCore/PopCon/interface/PopConSourceHandler.h"
00011 #include "CondCore/DBCommon/interface/TagInfo.h"
00012 #include "CondCore/DBCommon/interface/LogDBEntry.h"
00013
00014 #include "OnlineDB/SiStripESSources/interface/SiStripCondObjBuilderFromDb.h"
00015 #include "OnlineDB/SiStripConfigDb/interface/SiStripDbParams.h"
00016 #include "OnlineDB/SiStripConfigDb/interface/SiStripPartition.h"
00017
00018 #include <sstream>
00019 #include <vector>
00020 #include <string>
00021 #include <iostream>
00022 #include <typeinfo>
00023 #include <time.h>
00024
00025 #include "CLHEP/Random/RandFlat.h"
00026 #include "CLHEP/Random/RandGauss.h"
00027
00028 #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
00029 #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h"
00030
00031
00032 namespace popcon{
00033
00034 template <typename T>
00035 class SiStripPopConHandlerUnitTest : public popcon::PopConSourceHandler<T>{
00036 public:
00037
00038 enum DataType { UNDEFINED=0, _Cabling=1, _Pedestal=2, _Noise=3, _Threshold=4, _BadStrip=5};
00039
00040
00041
00042 SiStripPopConHandlerUnitTest(const edm::ParameterSet& pset):
00043 m_name(pset.getUntrackedParameter<std::string>("name","SiStripPopPopConConfigDbObjHandler")),
00044 m_since(pset.getUntrackedParameter<uint32_t>("since",5)),
00045 m_debugMode(pset.getUntrackedParameter<bool>("debug",false)){};
00046
00047
00048
00049 ~SiStripPopConHandlerUnitTest(){};
00050
00051
00052
00053 void getNewObjects(){
00054 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler") << "[getNewObjects] for PopCon application " << m_name;
00055
00056 if (m_debugMode){
00057 std::stringstream ss;
00058 ss << "\n\n------- " << m_name
00059 << " - > getNewObjects\n";
00060 if (this->tagInfo().size){
00061
00062 ss << "got offlineInfo"<<
00063 this->tagInfo().name << ", size " << this->tagInfo().size << " " << this->tagInfo().token
00064 << " , last object valid since "
00065 << this->tagInfo().lastInterval.first << " token "
00066 << this->tagInfo().lastPayloadToken << "\n\n UserText " << this->userTextLog()
00067 << "\n LogDBEntry \n"
00068 << this->logDBEntry().logId<< "\n"
00069 << this->logDBEntry().destinationDB<< "\n"
00070 << this->logDBEntry().provenance<< "\n"
00071 << this->logDBEntry().usertext<< "\n"
00072 << this->logDBEntry().iovtag<< "\n"
00073 << this->logDBEntry().iovtimetype<< "\n"
00074 << this->logDBEntry().payloadIdx<< "\n"
00075 << this->logDBEntry().payloadName<< "\n"
00076 << this->logDBEntry().payloadToken<< "\n"
00077 << this->logDBEntry().payloadContainer<< "\n"
00078 << this->logDBEntry().exectime<< "\n"
00079 << this->logDBEntry().execmessage<< "\n"
00080 << "\n\n-- user text " << this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of("@")) ;
00081 } else {
00082 ss << " First object for this tag ";
00083 }
00084 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler") << ss.str();
00085 }
00086 if (isTransferNeeded())
00087 setForTransfer();
00088
00089 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler") << "[getNewObjects] for PopCon application " << m_name << " Done\n--------------\n";
00090 }
00091
00092
00093
00094
00095 std::string id() const { return m_name;}
00096
00097 private:
00098
00099
00100 DataType getDataType(){
00101
00102 if(typeid(T)==typeid(SiStripFedCabling)){
00103 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler") << "[getDataType] for PopCon application " << m_name << " " << typeid(T).name();
00104 return _Cabling;
00105 }
00106 return UNDEFINED;
00107 }
00108
00109
00110
00111
00112
00113 bool isTransferNeeded(){
00114
00115
00116 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler") << "[isTransferNeeded] checking for transfer" << std::endl;
00117 std::stringstream ss_logdb, ss;
00118 std::stringstream ss1;
00119
00120
00121 if (this->tagInfo().size)
00122 ss_logdb << this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of("@"));
00123 else
00124 ss_logdb << "";
00125
00126 ss << "@ " << clock() ;
00127
00128 if (!strcmp(ss.str().c_str(),ss_logdb.str().c_str())){
00129
00130 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler")
00131 << "[isTransferNeeded] the selected conditions are already uploaded in the last iov ("
00132 << this->tagInfo().lastInterval.first << ") open for the object "
00133 << this->logDBEntry().payloadName << " in the db "
00134 << this->logDBEntry().destinationDB << " parameters: " << ss.str() << "\n NO TRANSFER NEEDED";
00135 return false;
00136 }
00137 this->m_userTextLog = ss.str();
00138 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler")
00139 << "[isTransferNeeded] the selected conditions will be uploaded: " << ss.str()
00140 << "\n A- "<< ss.str() << "\n B- " << ss_logdb.str() << "\n Fine";
00141
00142 return true;
00143 }
00144
00145
00146
00147
00148 void setForTransfer(){
00149 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler") << "[setForTransfer] " << m_name << " getting data to be transferred " << std::endl;
00150
00151 T *obj=0;
00152
00153 fillObject(obj);
00154
00155 if(!this->tagInfo().size)
00156 m_since=1;
00157 else
00158 if (m_debugMode)
00159 m_since=this->tagInfo().lastInterval.first+1;
00160
00161 if (obj!=0){
00162
00163 edm::LogInfo ("SiStripPopPopConConfigDbObjHandler") <<"setting since = "<< m_since <<std::endl;
00164 this->m_to_transfer.push_back(std::make_pair(obj,m_since));
00165 }else{
00166 edm::LogError ("SiStripPopPopConConfigDbObjHandler") <<"[setForTransfer] " << m_name << " : NULL pointer of obj " << typeid(T).name() << " reported by SiStripCondObjBuilderFromDb\n Transfer aborted"<<std::endl;
00167 }
00168 }
00169
00170 private:
00171
00172 std::string m_name;
00173 unsigned long long m_since;
00174 bool m_debugMode;
00175 edm::Service<SiStripCondObjBuilderFromDb> condObjBuilder;
00176
00177
00178 void fillObject(T*& obj){
00179
00180
00181 if(typeid(T)==typeid(SiStripNoises)){
00182
00183
00184 obj = new SiStripNoises();
00185
00186 edm::FileInPath fp_("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat");
00187 SiStripDetInfoFileReader reader(fp_.fullPath());
00188
00189 const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo > DetInfos = reader.getAllData();
00190
00191 int count=-1;
00192 for(std::map<uint32_t, SiStripDetInfoFileReader::DetInfo >::const_iterator it = DetInfos.begin(); it != DetInfos.end(); it++){
00193 count++;
00194
00195 SiStripNoises::InputVector theSiStripVector;
00196 for(int strip=0; strip<128*it->second.nApvs; ++strip){
00197
00198 float MeanNoise = 5;
00199 float RmsNoise = 1;
00200
00201 float noise = CLHEP::RandGauss::shoot(MeanNoise,RmsNoise);
00202
00203
00204
00205
00206 obj->setData(noise,theSiStripVector);
00207 if (count<6)
00208 edm::LogInfo("SiStripNoisesBuilder") << "detid " << it->first << " \t"
00209 << " strip " << strip << " \t"
00210 << noise << " \t"
00211 << theSiStripVector.back()/10 << " \t"
00212 << std::endl;
00213 }
00214
00215 if ( ! obj->put(it->first,theSiStripVector) )
00216 edm::LogError("SiStripNoisesBuilder")<<"[SiStripNoisesBuilder::analyze] detid already exists"<<std::endl;
00217 }
00218 }
00219 }
00220 };
00221
00222 }
00223
00224
00225
00226
00227 #endif //SISTRIPPOPCON_UNITTEST_HANDLER_H