00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "Geometry/CaloEventSetup/plugins/EcalTrigTowerConstituentsMapBuilder.h"
00022 #include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h"
00023 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00024 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00025
00026 #include <iostream>
00027 #include <fstream>
00028
00029 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00030
00031
00032
00033
00034 EcalTrigTowerConstituentsMapBuilder::EcalTrigTowerConstituentsMapBuilder(const edm::ParameterSet& iConfig) :
00035 mapFile_(iConfig.getUntrackedParameter<std::string>("MapFile",""))
00036 {
00037
00038
00039 setWhatProduced(this);
00040
00041
00042 }
00043
00044
00045 EcalTrigTowerConstituentsMapBuilder::~EcalTrigTowerConstituentsMapBuilder()
00046 {
00047 }
00048
00049
00050
00051
00052
00053
00054 EcalTrigTowerConstituentsMapBuilder::ReturnType
00055 EcalTrigTowerConstituentsMapBuilder::produce(const IdealGeometryRecord& iRecord)
00056 {
00057 using namespace edm::es;
00058 std::auto_ptr<EcalTrigTowerConstituentsMap> prod(new EcalTrigTowerConstituentsMap());
00059
00060 if (!mapFile_.empty()) {
00061 parseTextMap(mapFile_,*prod);
00062 }
00063 return prod;
00064 }
00065
00066 void EcalTrigTowerConstituentsMapBuilder::parseTextMap(const std::string& filename, EcalTrigTowerConstituentsMap& theMap) {
00067 edm::FileInPath eff(filename);
00068
00069 std::ifstream f(eff.fullPath().c_str());
00070 if (!f.good())
00071 return;
00072
00073 int mod,cry,ietaTower,iphiTower;
00074 int ix,iy,iz;
00075 char line[80];
00076 char ch;
00077 while ((ch = f.peek()) != '-') {
00078 f.get(line,80,'\n');
00079 f.get(ch);
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 int nread = sscanf (line, " %d %d %d %d %d",&ix,&iy,&iz,&ietaTower, &iphiTower);
00092 if (nread == 5) {
00093 EEDetId eeid(ix,iy,iz,0);
00094
00095 EcalTrigTowerDetId etid(iz,EcalEndcap,ietaTower,iphiTower);
00096 theMap.assign(DetId(eeid),etid);
00097 }
00098
00099 }
00100
00101 f.get(line,80,'\n');
00102 f.get(ch);
00103
00104 f.get(line,80,'\n');
00105 f.get(ch);
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 f.close();
00120 return;
00121 }