Go to the documentation of this file.00001 #include "FWCore/Framework/interface/EDAnalyzer.h"
00002 #include "FWCore/Framework/interface/Event.h"
00003 #include "DataFormats/Common/interface/Handle.h"
00004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00005 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
00006 #include <iostream>
00007 #include <cstdio>
00008
00009 using namespace std;
00010
00011
00012
00013
00014
00015
00016 class HcalCableMapper : public edm::EDAnalyzer {
00017 public:
00018 explicit HcalCableMapper(edm::ParameterSet const& conf);
00019 virtual void analyze(edm::Event const& e, edm::EventSetup const& c);
00020 virtual void endJob ();
00021
00022 private:
00023 typedef std::vector<HcalQIESample> SampleSet;
00024
00025 typedef std::map<HcalDetId,SampleSet> PathSet;
00026 typedef std::map<HcalDetId,HcalElectronicsId> IdMap;
00027
00028 void process(const PathSet& ps, const IdMap& im);
00029
00030
00031
00032
00033 std::map<HcalDetId,std::vector<SampleSet> > fullHistory_;
00034 IdMap IdSet;
00035 edm::InputTag hbheLabel_,hoLabel_,hfLabel_;
00036
00037 template <class DigiCollection>
00038 void record(const DigiCollection& digis) {
00039
00040 for (typename DigiCollection::const_iterator digi=digis.begin(); digi!=digis.end(); digi++) {
00041
00042 SampleSet q;
00043 for (int i=0; i<digi->size(); i++)
00044 q.push_back(digi->sample(i));
00045
00046 if (fullHistory_.find(digi->id())==fullHistory_.end()) fullHistory_.insert(std::pair<HcalDetId,std::vector<SampleSet> >(digi->id(),std::vector<SampleSet>()));
00047 if (IdSet.find(digi->id())==IdSet.end()) IdSet.insert(std::pair<HcalDetId,HcalElectronicsId>(digi->id(),HcalElectronicsId()));
00048 fullHistory_[digi->id()].push_back(q);
00049 IdSet[digi->id()]=digi->elecId();
00050 }
00051 }
00052
00053
00054 };
00055
00056
00057 HcalCableMapper::HcalCableMapper(edm::ParameterSet const& conf) :
00058 hbheLabel_(conf.getParameter<edm::InputTag>("hbheLabel")),
00059 hoLabel_(conf.getParameter<edm::InputTag>("hoLabel")),
00060 hfLabel_(conf.getParameter<edm::InputTag>("hfLabel")){
00061
00062 }
00063
00064 static const char* det_names[] = {"Zero","HcalBarrel","HcalEndcap","HcalForward","HcalOuter"};
00065
00066
00067
00068 void HcalCableMapper::process(const PathSet& ps, const IdMap& im){
00069
00070 PathSet::const_iterator iii;
00071 IdMap::const_iterator ij;
00072
00073 for (iii=ps.begin();iii!=ps.end();iii++){
00074
00075
00076 SampleSet ss = iii->second;
00077 const HcalDetId dd = iii->first;
00078
00079 ij=im.find(dd);
00080 HcalElectronicsId eid=ij->second;
00081
00082 int header = ((ss[0].adc())&0x7F);
00083 int ieta = ((ss[1].adc())&0x3F);
00084 int z_ieta = (((ss[1].adc())>>6)&0x1);
00085 int iphi = ((ss[2].adc())&0x7F);
00086 int depth = ((ss[3].adc())&0x7);
00087 int det = (((ss[3].adc())>>3)&0xF);
00088 int spigot = ((ss[4].adc())&0xF);
00089 int fiber = (((ss[4].adc())>>4)&0x7);
00090 int crate = ((ss[5].adc())&0x1F);
00091 int fiber_chan= (((ss[5].adc())>>5)&0x3);
00092 int G_Dcc = ((ss[6].adc())&0x3F);
00093 int H_slot = ((ss[7].adc())&0x1F);
00094 int TB = (((ss[7].adc())>>5)&0x1);
00095 int RBX_7 = (((ss[7].adc())>>6)&0x1);
00096 int RBX = ((ss[8].adc())&0x7F);
00097 int RM = ((ss[9].adc())&0x3);
00098 int RM_card= (((ss[9].adc())>>2)&0x3);
00099 int RM_chan= (((ss[9].adc())>>4)&0x7);
00100 string eta_sign;
00101 std::string det_name;
00102 if (det>4 || det<0) {
00103 char c[20];
00104 snprintf(c,20,"Det=%d",det);
00105 det_name=c;
00106 } else det_name=det_names[det];
00107
00108
00109 if (z_ieta==1){
00110 eta_sign = "+";
00111 }else{eta_sign = "-";}
00112 string is_header;
00113 if (header == 0x75){
00114
00115
00116 if((spigot==eid.spigot())&&(fiber+1==eid.fiberIndex())&&(fiber_chan==eid.fiberChanId())&&(H_slot==eid.htrSlot())&&(G_Dcc==eid.dccid())&&(crate==eid.readoutVMECrateId())&&(iphi==dd.iphi())&&(depth==dd.depth())&&(ieta==dd.ietaAbs())&&(TB==eid.htrTopBottom())&&(det==dd.subdet())){
00117 std::cout <<"Pathway match"<<std::endl;
00118 }else{
00119
00120 is_header=" Header found";
00121
00122 std::cout <<" Digi ID: " << dd << is_header<< " ieta: "<< eta_sign << ieta << " iphi: "<< iphi << " Depth: " << depth << " Detector: " << det_name << " Spigot: "<< spigot<<"/"<<eid.spigot() << " Fiber: " << fiber+1<<"/"<<eid.fiberIndex() << " Fiber Channel: "<< fiber_chan <<"/"<<eid.fiberChanId()<< " Crate: " << crate<<"/"<<eid.readoutVMECrateId() << " Global Dcc: " << G_Dcc <<"/"<<eid.dccid() << " HTR Slot: " << H_slot <<"/ " <<eid.htrSlot()<< " Top/Bottom: " << TB<<"/"<< eid.htrTopBottom() << " RBX: " << (RBX_7*128+RBX) << " RM: " << RM+1 << " RM Card: " << RM_card+1 << " RM Channel: " << RM_chan << std::endl;
00123 }
00124 }else if (ieta+64==0x75){
00125
00126 ieta = ((ss[2].adc())&0x3F);
00127 z_ieta = (((ss[2].adc())>>6)&0x1);
00128 iphi = ((ss[3].adc())&0x7F);
00129 depth = ((ss[4].adc())&0x7);
00130 det = (((ss[4].adc())>>3)&0xF);
00131 spigot = ((ss[5].adc())&0xF);
00132 fiber = (((ss[5].adc())>>4)&0x7);
00133 crate = ((ss[6].adc())&0x1F);
00134 fiber_chan= (((ss[6].adc())>>5)&0x3);
00135 G_Dcc = ((ss[7].adc())&0x3F);
00136 H_slot = ((ss[8].adc())&0x1F);
00137 TB = (((ss[8].adc())>>5)&0x1);
00138 RBX_7 = (((ss[8].adc())>>6)&0x1);
00139 RBX = ((ss[9].adc())&0x7F);
00140
00141
00142
00143 if((spigot==eid.spigot())&&(fiber+1==eid.fiberIndex())&&(fiber_chan==eid.fiberChanId())&&(H_slot==eid.htrSlot())&&(G_Dcc==eid.dccid())&&(TB==eid.htrTopBottom())&&(crate==eid.readoutVMECrateId())&&(iphi==dd.iphi())&&(depth==dd.depth())&&(det==dd.subdet())&&(ieta==dd.ietaAbs())){
00144
00145 std::cout <<"Pathway match (SHIFT)"<<std::endl;
00146 }else{
00147
00148
00149 is_header=" DATA SHIFT";
00150
00151 std::cout <<" Digi ID: " << dd << is_header<< " ieta: "<< eta_sign << ieta << " iphi: "<< iphi << " Depth: " << depth << " Detector: " << det_name << " Spigot: "<< spigot<<"/"<<eid.spigot() << " Fiber: " << fiber+1<<"/"<<eid.fiberIndex() << " Fiber Channel: "<< fiber_chan <<"/"<<eid.fiberChanId()<< " Crate: " << crate<<"/"<<eid.readoutVMECrateId() << " Global Dcc: " << G_Dcc <<"/"<<eid.dccid() << " HTR Slot: " << H_slot <<"/ " <<eid.htrSlot()<< " Top/Bottom: " << TB<<"/"<< eid.htrTopBottom() << " RBX: " << (RBX_7*128+RBX) << std::endl;
00152
00153 }
00154 }else { std::cout<<" Digi ID: " <<dd << " +NO HEADER+ " << " RBX: " << (RBX_7*128+RBX) << std::endl;
00155 }
00156 }
00157 }
00158
00159
00160 void HcalCableMapper::analyze(edm::Event const& e, edm::EventSetup const& c) {
00161
00162 edm::Handle<HBHEDigiCollection> hbhe;
00163 e.getByLabel(hbheLabel_,hbhe);
00164
00165 edm::Handle<HFDigiCollection> hf;
00166 e.getByLabel(hfLabel_,hf);
00167 edm::Handle<HODigiCollection> ho;
00168 e.getByLabel(hoLabel_,ho);
00169
00170
00171 record(*hbhe);
00172 record(*hf);
00173 record(*ho);
00174 }
00175
00176
00177
00178
00179 void HcalCableMapper::endJob(){
00180
00181
00182 std::vector<SampleSet>::iterator j;
00183 int c [128];
00184 int k,ii,kk;
00185 int c_max=0,c_next=0;
00186
00187 std::map<HcalDetId,std::vector<SampleSet> >::iterator i;
00188
00189 PathSet consensus;
00190
00191 for (i=fullHistory_.begin(); i!=fullHistory_.end(); i++) {
00192
00193
00194 SampleSet s;
00195 for (k=0; k<10; k++) {
00196 for (ii=0; ii<128; ii++) c[ii]=0;
00197
00198 for (j=i->second.begin();j!=i->second.end();j++){
00199 if (int(j->size())>k)
00200 c[(*j)[k].adc()]++;
00201
00202
00203 }
00204
00205 for (kk=0;kk<128;kk++){
00206 if (c[kk]>c[c_max]){
00207 c_next=c_max;
00208 c_max = kk;
00209 }
00210 }
00211
00212
00213 s.push_back(((c_max&0x7F)));
00214
00215
00216 c_next=0;
00217 c_max=0;
00218 }
00219 consensus[i->first]=s;
00220
00221 }
00222
00223 process(consensus,IdSet);
00224
00225
00226
00227
00228
00229 }
00230
00231
00232
00233
00234 #include "FWCore/PluginManager/interface/ModuleDef.h"
00235 #include "FWCore/Framework/interface/MakerMacros.h"
00236
00237
00238 DEFINE_FWK_MODULE(HcalCableMapper);
00239