CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
SiPixelHistoricInfoEDAClient Class Reference

#include <SiPixelHistoricInfoEDAClient.h>

Inheritance diagram for SiPixelHistoricInfoEDAClient:
edm::EDAnalyzer

Public Member Functions

 SiPixelHistoricInfoEDAClient (const edm::ParameterSet &)
 
 ~SiPixelHistoricInfoEDAClient ()
 
- Public Member Functions inherited from edm::EDAnalyzer
 EDAnalyzer ()
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 

Private Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
 
virtual void beginJob ()
 
virtual void beginLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &)
 
virtual void beginRun (const edm::Run &, const edm::EventSetup &)
 
virtual void endJob ()
 
virtual void endLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &)
 
virtual void endRun (const edm::Run &, const edm::EventSetup &)
 
void fillPerformanceSummary () const
 
void retrieveMEs ()
 
void saveFile (std::string filename) const
 
void writeDB () const
 

Private Attributes

DQMStoredbe_
 
bool firstEventInRun
 
SiPixelHistogramId histogramManager
 
std::map< uint32_t,
std::vector< MonitorElement * > > 
mapOfdetIDtoMEs
 
int nEventsInRun
 
std::string outputDir_
 
edm::ParameterSet parameterSet_
 
SiPixelPerformanceSummaryperformanceSummary
 
bool printDebug_
 
bool writeHisto_
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
typedef WorkerT< EDAnalyzerWorkerType
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDAnalyzer
CurrentProcessingContext const * currentContext () const
 

Detailed Description

Definition at line 19 of file SiPixelHistoricInfoEDAClient.h.

Constructor & Destructor Documentation

SiPixelHistoricInfoEDAClient::SiPixelHistoricInfoEDAClient ( const edm::ParameterSet parameterSet)
explicit
SiPixelHistoricInfoEDAClient::~SiPixelHistoricInfoEDAClient ( )

Definition at line 30 of file SiPixelHistoricInfoEDAClient.cc.

30 {}

Member Function Documentation

void SiPixelHistoricInfoEDAClient::analyze ( const edm::Event event,
const edm::EventSetup eventSetup 
)
privatevirtual

Implements edm::EDAnalyzer.

Definition at line 51 of file SiPixelHistoricInfoEDAClient.cc.

References edm::EventBase::time(), and edm::Timestamp::value().

51  {
52  nEventsInRun++;
53  if (firstEventInRun) {
54  firstEventInRun = false;
55 
57  }
58 }
SiPixelPerformanceSummary * performanceSummary
void setTimeStamp(unsigned long long timeStamp)
TimeValue_t value() const
Definition: Timestamp.cc:72
edm::Timestamp time() const
Definition: EventBase.h:57
void SiPixelHistoricInfoEDAClient::beginJob ( void  )
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 33 of file SiPixelHistoricInfoEDAClient.cc.

33 {}
void SiPixelHistoricInfoEDAClient::beginLuminosityBlock ( const edm::LuminosityBlock luminosityBlock,
const edm::EventSetup eventSetup 
)
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 45 of file SiPixelHistoricInfoEDAClient.cc.

References edm::LuminosityBlockBase::luminosityBlock().

46  {
48 }
SiPixelPerformanceSummary * performanceSummary
LuminosityBlockNumber_t luminosityBlock() const
void setLuminosityBlock(unsigned int lumBlock)
void SiPixelHistoricInfoEDAClient::beginRun ( const edm::Run run,
const edm::EventSetup eventSetup 
)
privatevirtual
void SiPixelHistoricInfoEDAClient::endJob ( void  )
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 80 of file SiPixelHistoricInfoEDAClient.cc.

References dbe_, and DQMStore::save().

80  {
81  if (writeHisto_) {
82  ostringstream endJobOutputFile;
83  endJobOutputFile << outputDir_ << "/SiPixelHistoricInfoEDAClient_endJob.root";
84  dbe_->save(endJobOutputFile.str());
85  }
86 }
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:1883
void SiPixelHistoricInfoEDAClient::endLuminosityBlock ( const edm::LuminosityBlock luminosityBlock,
const edm::EventSetup eventSetup 
)
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 61 of file SiPixelHistoricInfoEDAClient.cc.

62  {}
void SiPixelHistoricInfoEDAClient::endRun ( const edm::Run run,
const edm::EventSetup eventSetup 
)
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 65 of file SiPixelHistoricInfoEDAClient.cc.

References dbe_, edm::RunBase::run(), and DQMStore::save().

65  {
67 
68  retrieveMEs();
70  writeDB();
71 
72  if (writeHisto_) {
73  ostringstream endRunOutputFile;
74  endRunOutputFile << outputDir_ << "/SiPixelHistoricInfoEDAClient_" << run.run() <<".root";
75  dbe_->save(endRunOutputFile.str());
76  }
77 }
RunNumber_t run() const
Definition: RunBase.h:44
SiPixelPerformanceSummary * performanceSummary
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:1883
void setNumberOfEvents(unsigned int numberOfEvents)
void SiPixelHistoricInfoEDAClient::fillPerformanceSummary ( ) const
private

Definition at line 163 of file SiPixelHistoricInfoEDAClient.cc.

References b, gather_cfg::cout, Association::map, mathSSE::sqrt(), and v.

163  {
164  for (map< uint32_t, vector<MonitorElement*> >::const_iterator iMEvec=mapOfdetIDtoMEs.begin();
165  iMEvec!=mapOfdetIDtoMEs.end(); iMEvec++) {
166  uint32_t theMEdetID = iMEvec->first;
167  vector<MonitorElement*> theMEvector = iMEvec->second;
168 
169  if (printDebug_) {
170  cout << theMEdetID << ":"; for (vector<MonitorElement*>::const_iterator iME = theMEvector.begin();
171  iME!=theMEvector.end(); iME++) cout << (*iME)->getName() << ","; cout << endl;
172  }
173  for (vector<MonitorElement*>::const_iterator iME = theMEvector.begin(); iME!=theMEvector.end(); iME++) {
174  string theMEname = (*iME)->getName();
175 
176 
177  if (theMEdetID<50) {
178  // from SiPixelMonitorRawData
179  if (theMEname.find("errorType_siPixelDigis")!=string::npos) {
180  for (int v=25; v<40; v++) {
181  int b = (*iME)->getTH1()->GetXaxis()->FindBin(v);
182  performanceSummary->setRawDataErrorType(theMEdetID, v-25, (*iME)->getBinContent(b));
183  }
184  }
185  }
186  // from SiPixelMonitorTrack
187  else if (theMEdetID==77) {
188  if (theMEname.find("ntracks")!=string::npos && theMEname.find("InPixVol")==string::npos) {
189  float trkMean=0.0, trkRMS=0.0;
190  if ((*iME)->getBinContent(1)>0.0) {
191  trkMean = float((*iME)->getBinContent(3))/(*iME)->getBinContent(1); // Barrel regionID: 80
192  trkRMS = sqrt(trkMean*(trkMean+1.0)/(*iME)->getBinContent(1));
193  performanceSummary->setFractionOfTracks(80, trkMean, trkRMS);
194 
195  trkMean = float((*iME)->getBinContent(4))/(*iME)->getBinContent(1); // Endcap regionID: 81
196  trkRMS = sqrt(trkMean*(trkMean+1.0)/(*iME)->getBinContent(1));
197  performanceSummary->setFractionOfTracks(81, trkMean, trkRMS);
198  }
199  }
200  }
201  else if (theMEdetID==78) { // OnTrack
202  if (theMEname.find("nclusters_siPixelClusters")!=string::npos) {
203  performanceSummary->setNumberOfOnTrackClusters(80, (*iME)->getBinContent(2));
204  performanceSummary->setNumberOfOnTrackClusters(81, (*iME)->getBinContent(3));
205  }
206  if (theMEname.find("charge_siPixelClusters_Barrel")!=string::npos) {
207  performanceSummary->setClusterChargeOnTrack(80, (*iME)->getMean(), (*iME)->getRMS());
208  }
209  if (theMEname.find("charge_siPixelClusters_Endcap")!=string::npos) {
210  performanceSummary->setClusterChargeOnTrack(81, (*iME)->getMean(), (*iME)->getRMS());
211  }
212  if (theMEname.find("size_siPixelClusters_Barrel")!=string::npos) {
213  performanceSummary->setClusterSizeOnTrack(80, (*iME)->getMean(), (*iME)->getRMS());
214  }
215  if (theMEname.find("size_siPixelClusters_Endcap")!=string::npos) {
216  performanceSummary->setClusterSizeOnTrack(81, (*iME)->getMean(), (*iME)->getRMS());
217  }
218  }
219  else if (theMEdetID==79) { // OffTrack
220  if (theMEname.find("nclusters_siPixelClusters")!=string::npos) {
221  performanceSummary->setNumberOfOffTrackClusters(80, (*iME)->getBinContent(2));
222  performanceSummary->setNumberOfOffTrackClusters(81, (*iME)->getBinContent(3));
223  }
224  if (theMEname.find("charge_siPixelClusters_Barrel")!=string::npos) {
225  performanceSummary->setClusterChargeOffTrack(80, (*iME)->getMean(), (*iME)->getRMS());
226  }
227  if (theMEname.find("charge_siPixelClusters_Endcap")!=string::npos) {
228  performanceSummary->setClusterChargeOffTrack(81, (*iME)->getMean(), (*iME)->getRMS());
229  }
230  if (theMEname.find("size_siPixelClusters_Barrel")!=string::npos) {
231  performanceSummary->setClusterSizeOffTrack(80, (*iME)->getMean(), (*iME)->getRMS());
232  }
233  if (theMEname.find("size_siPixelClusters_Endcap")!=string::npos) {
234  performanceSummary->setClusterSizeOffTrack(81, (*iME)->getMean(), (*iME)->getRMS());
235  }
236  }
237  else {
238  // from SiPixelMonitorDigi
239  if (theMEname.find("ndigis_siPixelDigis")!=string::npos) {
240  performanceSummary->setNumberOfDigis(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
241  }
242  if (theMEname.find("adc_siPixelDigis")!=string::npos) {
243  performanceSummary->setADC(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
244  }
245  // from SiPixelMonitorCluster
246  if (theMEname.find("nclusters_siPixelClusters")!=string::npos) {
247  performanceSummary->setNumberOfClusters(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
248  }
249  if (theMEname.find("charge_siPixelClusters")!=string::npos) {
250  performanceSummary->setClusterCharge(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
251  }
252  if (theMEname.find("size_siPixelClusters")!=string::npos) {
253  performanceSummary->setClusterSize(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
254  }
255  if (theMEname.find("sizeX_siPixelClusters")!=string::npos) {
256  performanceSummary->setClusterSizeX(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
257  }
258  if (theMEname.find("sizeY_siPixelClusters")!=string::npos) {
259  performanceSummary->setClusterSizeY(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
260  }
261  // from SiPixelMonitorRecHit
262  if (theMEname.find("nRecHits_siPixelRecHits")!=string::npos) {
263  performanceSummary->setNumberOfRecHits(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
264  }
265  // from SiPixelMonitorTrack
266  if (theMEname.find("residualX_siPixelTrackResiduals")!=string::npos) {
267  performanceSummary->setResidualX(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
268  }
269  if (theMEname.find("residualY_siPixelTrackResiduals")!=string::npos) {
270  performanceSummary->setResidualY(theMEdetID, (*iME)->getMean(), (*iME)->getRMS(), (*iME)->getEntries()==0.0);
271  }
272  // temporary solutions
273  if (theMEname.find("hitmap_siPixelClusters")!=std::string::npos ||
274  theMEname.find("hitmap_siPixelDigis")!=std::string::npos) { // if digi map exists, use it; else use cluster map
275  int nNoisyCells=0, nEmptyCells=0; // not use xypos_siPixelRecHits
276  for (int xBin=0; xBin<(*iME)->getNbinsX(); xBin++) { // 4-1 pixel per bin
277  for (int yBin=0; yBin<(*iME)->getNbinsY(); yBin++) {
278  if ((*iME)->getBinContent(xBin+1, yBin+1)>0.01*(*iME)->getEntries()) nNoisyCells++;
279  if ((*iME)->getBinContent(xBin+1, yBin+1)==.0 && (*iME)->getBinError(xBin+1, yBin+1)==0.0) nEmptyCells++;
280  }
281  }
282  performanceSummary->setNumberOfNoisCells(theMEdetID, float(nNoisyCells));
283  performanceSummary->setNumberOfDeadCells(theMEdetID, float(nEmptyCells));
284  }
285  // performanceSummary->setNumberOfPixelHitsInTrackFit(theMEdetId, float(nPixelHits));
286  }
287  }
288  }
289 }
bool setRawDataErrorType(uint32_t detId, int bin, float nErrors)
SiPixelPerformanceSummary * performanceSummary
std::map< uint32_t, std::vector< MonitorElement * > > mapOfdetIDtoMEs
bool setADC(uint32_t detId, float mean, float rms, float emPtn)
bool setNumberOfOnTrackClusters(uint32_t detId, float nClusters)
bool setClusterSizeY(uint32_t detId, float mean, float rms, float emPtn)
dictionary map
Definition: Association.py:160
bool setNumberOfDigis(uint32_t detId, float mean, float rms, float emPtn)
bool setNumberOfDeadCells(uint32_t detId, float nNpixCells)
T sqrt(T t)
Definition: SSEVec.h:28
bool setResidualY(uint32_t detId, float mean, float rms, float emPtn)
bool setClusterSize(uint32_t detId, float mean, float rms, float emPtn)
bool setNumberOfOffTrackClusters(uint32_t detId, float nClusters)
bool setResidualX(uint32_t detId, float mean, float rms, float emPtn)
bool setClusterSizeX(uint32_t detId, float mean, float rms, float emPtn)
bool setNumberOfRecHits(uint32_t detId, float mean, float rms, float emPtn)
bool setClusterCharge(uint32_t detId, float mean, float rms, float emPtn)
bool setClusterSizeOffTrack(uint32_t detId, float mean, float rms)
bool setClusterChargeOffTrack(uint32_t detId, float mean, float rms)
double b
Definition: hdecay.h:120
bool setNumberOfNoisCells(uint32_t detId, float nNpixCells)
bool setClusterChargeOnTrack(uint32_t detId, float mean, float rms)
tuple cout
Definition: gather_cfg.py:41
bool setClusterSizeOnTrack(uint32_t detId, float mean, float rms)
bool setNumberOfClusters(uint32_t detId, float mean, float rms, float emPtn)
bool setFractionOfTracks(uint32_t detId, float mean, float rms)
mathSSE::Vec4< T > v
void SiPixelHistoricInfoEDAClient::retrieveMEs ( )
private

Definition at line 89 of file SiPixelHistoricInfoEDAClient.cc.

References gather_cfg::cout, dbe_, DQMStore::get(), DQMStore::getContents(), MonitorElement::getName(), and edm::second().

89  {
90  mapOfdetIDtoMEs.clear();
91 
92  vector<string> listOfMEswithFullPath;
93  dbe_->getContents(listOfMEswithFullPath);
94 
95  for (vector<string>::const_iterator iMEstr = listOfMEswithFullPath.begin();
96  iMEstr!=listOfMEswithFullPath.end(); iMEstr++) {
97  if (printDebug_) cout << iMEstr->data() << endl;
98 
99  size_t pathLength = iMEstr->find(":",0);
100  string thePath = iMEstr->substr(0, pathLength);
101  string allHists = iMEstr->substr(pathLength+1);
102 
103  if (thePath.find("Pixel",0)!=string::npos) {
104  if (thePath.find("Track",0)!=string::npos) { // for Pixel/Tracks, Pixel/Clusters/On,OffTrack
105  uint32_t newMEdetID = 77;
106  if (thePath.find("On", 0)!=string::npos) newMEdetID = 78;
107  if (thePath.find("Off",0)!=string::npos) newMEdetID = 79;
108 
109  size_t histnameLength;
110  do {
111  histnameLength = allHists.find(",",0);
112  string theHist;
113  if (histnameLength!=string::npos) {
114  theHist = allHists.substr(0, histnameLength);
115  allHists.erase(0, histnameLength+1);
116  }
117  else theHist = allHists;
118 
119  string fullPathHist = thePath + "/" + theHist;
120  MonitorElement* newME = dbe_->get(fullPathHist);
121  if (newME) {
122  if (mapOfdetIDtoMEs.find(newMEdetID)==mapOfdetIDtoMEs.end()) {
123  vector<MonitorElement*> newMEvector;
124  newMEvector.push_back(newME);
125  mapOfdetIDtoMEs.insert(make_pair(newMEdetID, newMEvector));
126  }
127  else (mapOfdetIDtoMEs.find(newMEdetID)->second).push_back(newME);
128  }
129  }
130  while (histnameLength!=string::npos);
131  }
132  else {
133  size_t histnameLength;
134  do {
135  histnameLength = allHists.find(",",0);
136  string theHist;
137  if (histnameLength!=string::npos) {
138  theHist = allHists.substr(0, histnameLength);
139  allHists.erase(0, histnameLength+1);
140  }
141  else theHist = allHists;
142 
143  string fullPathHist = thePath + "/" + theHist;
144  MonitorElement* newME = dbe_->get(fullPathHist);
145  if (newME) {
146  uint32_t newMEdetID = histogramManager.getRawId(newME->getName());
147 
148  if (mapOfdetIDtoMEs.find(newMEdetID)==mapOfdetIDtoMEs.end()) {
149  vector<MonitorElement*> newMEvector;
150  newMEvector.push_back(newME);
151  mapOfdetIDtoMEs.insert(make_pair(newMEdetID, newMEvector));
152  }
153  else ((mapOfdetIDtoMEs.find(newMEdetID))->second).push_back(newME);
154  }
155  }
156  while (histnameLength!=string::npos);
157  }
158  }
159  }
160 }
const std::string & getName(void) const
get name of ME
std::map< uint32_t, std::vector< MonitorElement * > > mapOfdetIDtoMEs
U second(std::pair< T, U > const &p)
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1270
std::vector< MonitorElement * > getContents(const std::string &path) const
Definition: DQMStore.cc:1299
tuple cout
Definition: gather_cfg.py:41
uint32_t getRawId(std::string histogramId)
Get Detector Raw Id.
void SiPixelHistoricInfoEDAClient::saveFile ( std::string  filename) const
inlineprivate

Definition at line 36 of file SiPixelHistoricInfoEDAClient.h.

References dbe_, and DQMStore::save().

36 { dbe_->save(filename); }
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:1883
tuple filename
Definition: lut2db_cfg.py:20
void SiPixelHistoricInfoEDAClient::writeDB ( ) const
private

Definition at line 292 of file SiPixelHistoricInfoEDAClient.cc.

References cond::service::PoolDBOutputService::appendSinceTime(), cond::service::PoolDBOutputService::beginOfTime(), gather_cfg::cout, cond::service::PoolDBOutputService::createNewIOV(), cond::service::PoolDBOutputService::currentTime(), cond::service::PoolDBOutputService::endOfTime(), edm::Service< T >::isAvailable(), and cond::service::PoolDBOutputService::isNewTagRequest().

292  {
294  else performanceSummary->print();
295  cout << "SiPixelHistoricInfoEDAClient::writeDB()" << endl;
296 
298  if (mydbservice.isAvailable()) {
299  if (mydbservice->isNewTagRequest("SiPixelPerformanceSummaryRcd")) {
301  mydbservice->beginOfTime(),
302  mydbservice->endOfTime(),
303  "SiPixelPerformanceSummaryRcd");
304  }
305  else {
307  mydbservice->currentTime(),
308  "SiPixelPerformanceSummaryRcd");
309  }
310  }
311  else LogError("writeDB") << "service unavailable" << endl;
312 }
SiPixelPerformanceSummary * performanceSummary
void appendSinceTime(T *payloadObj, cond::Time_t sinceTime, const std::string &recordName, bool withlogging=false)
bool isNewTagRequest(const std::string &recordName)
bool isAvailable() const
Definition: Service.h:47
void createNewIOV(T *firstPayloadObj, cond::Time_t firstSinceTime, cond::Time_t firstTillTime, const std::string &recordName, bool withlogging=false)
tuple cout
Definition: gather_cfg.py:41

Member Data Documentation

DQMStore* SiPixelHistoricInfoEDAClient::dbe_
private

Definition at line 44 of file SiPixelHistoricInfoEDAClient.h.

Referenced by saveFile().

bool SiPixelHistoricInfoEDAClient::firstEventInRun
private

Definition at line 46 of file SiPixelHistoricInfoEDAClient.h.

SiPixelHistogramId SiPixelHistoricInfoEDAClient::histogramManager
private

Definition at line 49 of file SiPixelHistoricInfoEDAClient.h.

std::map< uint32_t, std::vector<MonitorElement*> > SiPixelHistoricInfoEDAClient::mapOfdetIDtoMEs
private

Definition at line 50 of file SiPixelHistoricInfoEDAClient.h.

int SiPixelHistoricInfoEDAClient::nEventsInRun
private

Definition at line 47 of file SiPixelHistoricInfoEDAClient.h.

std::string SiPixelHistoricInfoEDAClient::outputDir_
private

Definition at line 41 of file SiPixelHistoricInfoEDAClient.h.

Referenced by valtools.webpage::readCaptions().

edm::ParameterSet SiPixelHistoricInfoEDAClient::parameterSet_
private

Definition at line 43 of file SiPixelHistoricInfoEDAClient.h.

SiPixelPerformanceSummary* SiPixelHistoricInfoEDAClient::performanceSummary
private

Definition at line 51 of file SiPixelHistoricInfoEDAClient.h.

bool SiPixelHistoricInfoEDAClient::printDebug_
private

Definition at line 39 of file SiPixelHistoricInfoEDAClient.h.

bool SiPixelHistoricInfoEDAClient::writeHisto_
private

Definition at line 40 of file SiPixelHistoricInfoEDAClient.h.