#include <L1Trigger/MaskedRctInputDigiProducer/src/MaskedRctInputDigiProducer.cc>
Public Member Functions | |
MaskedRctInputDigiProducer (const edm::ParameterSet &) | |
~MaskedRctInputDigiProducer () | |
Private Member Functions | |
virtual void | beginJob (const edm::EventSetup &) |
virtual void | endJob () |
virtual void | produce (edm::Event &, const edm::EventSetup &) |
Private Attributes | |
edm::InputTag | ecalDigisLabel_ |
edm::InputTag | hcalDigisLabel_ |
edm::FileInPath | maskFile_ |
bool | useEcal_ |
bool | useHcal_ |
Implementation: <Notes on="" implementation>="">
Definition at line 46 of file MaskedRctInputDigiProducer.h.
MaskedRctInputDigiProducer::MaskedRctInputDigiProducer | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 15 of file MaskedRctInputDigiProducer.cc.
00015 : 00016 useEcal_(iConfig.getParameter<bool>("useEcal")), 00017 useHcal_(iConfig.getParameter<bool>("useHcal")), 00018 ecalDigisLabel_(iConfig.getParameter<edm::InputTag>("ecalDigisLabel")), 00019 hcalDigisLabel_(iConfig.getParameter<edm::InputTag>("hcalDigisLabel")), 00020 maskFile_(iConfig.getParameter<edm::FileInPath>("maskFile")) 00021 { 00022 //register your products 00023 /* Examples 00024 produces<ExampleData2>(); 00025 00026 //if do put with a label 00027 produces<ExampleData2>("label"); 00028 */ 00029 00030 produces<EcalTrigPrimDigiCollection>(); 00031 produces<HcalTrigPrimDigiCollection>(); 00032 00033 //now do what ever other initialization is needed 00034 00035 }
MaskedRctInputDigiProducer::~MaskedRctInputDigiProducer | ( | ) |
Definition at line 38 of file MaskedRctInputDigiProducer.cc.
00039 { 00040 00041 // do anything here that needs to be done at desctruction time 00042 // (e.g. close files, deallocate resources etc.) 00043 00044 }
void MaskedRctInputDigiProducer::beginJob | ( | const edm::EventSetup & | ) | [private, virtual] |
void MaskedRctInputDigiProducer::produce | ( | edm::Event & | iEvent, | |
const edm::EventSetup & | iSetup | |||
) | [private, virtual] |
Implements edm::EDProducer.
Definition at line 53 of file MaskedRctInputDigiProducer.cc.
References funct::abs(), TestMuL1L2Filter_cff::cerr, ReconstructionGR_cff::ecal, ecalDigisLabel_, EcalTriggerTower, lat::endl(), relval_parameters_module::energy, Exception, edm::FileInPath::fullPath(), edm::Event::getByLabel(), ReconstructionGR_cff::hcal, hcalDigisLabel_, i, edm::Handle< T >::isValid(), j, maskFile_, edm::Event::put(), HcalTriggerPrimitiveDigi::setPresamples(), EcalTriggerPrimitiveDigi::setSample(), HcalTriggerPrimitiveDigi::setSample(), EcalTriggerPrimitiveDigi::setSize(), HcalTriggerPrimitiveDigi::setSize(), edm::SortedCollection< T, SORT >::size(), useEcal_, and useHcal_.
00054 { 00055 using namespace edm; 00056 /* This is an event example 00057 //Read 'ExampleData' from the Event 00058 Handle<ExampleData> pIn; 00059 iEvent.getByLabel("example",pIn); 00060 00061 //Use the ExampleData to create an ExampleData2 which 00062 // is put into the Event 00063 std::auto_ptr<ExampleData2> pOut(new ExampleData2(*pIn)); 00064 iEvent.put(pOut); 00065 */ 00066 00067 edm::Handle<EcalTrigPrimDigiCollection> ecal; 00068 edm::Handle<HcalTrigPrimDigiCollection> hcal; 00069 00070 if (useEcal_) { iEvent.getByLabel(ecalDigisLabel_, ecal); } 00071 if (useHcal_) { iEvent.getByLabel(hcalDigisLabel_, hcal); } 00072 00073 EcalTrigPrimDigiCollection ecalColl; 00074 HcalTrigPrimDigiCollection hcalColl; 00075 if (ecal.isValid()) { ecalColl = *ecal; } 00076 if (hcal.isValid()) { hcalColl = *hcal; } 00077 00078 /* this is an EventSetup example 00079 //Read SetupData from the SetupRecord in the EventSetup 00080 ESHandle<SetupData> pSetup; 00081 iSetup.get<SetupRecord>().get(pSetup); 00082 */ 00083 00084 ifstream maskFileStream(maskFile_.fullPath().c_str()); 00085 if (!maskFileStream.is_open()) 00086 { 00087 throw cms::Exception("FileInPathError") 00088 << "RCT mask file not opened" << endl;; 00089 } 00090 00091 // read and process file (transform mask to new position in phi to match digis) 00092 //char junk[256]; 00093 std::string junk; 00094 //char junk[32]; 00095 do 00096 { 00097 //maskFileStream.getline(junk, 256); 00098 maskFileStream >> junk; 00099 } 00100 while (junk.compare("ECAL:") != 0); 00101 00102 // vector<vector<vector<unsigned short> > > temp(2,vector<vector<unsigned short> >(72,vector<unsigned short>(28,1))); 00103 vector<vector<vector<unsigned short> > > ecalMask(2,vector<vector<unsigned short> >(72,vector<unsigned short>(28,1))); 00104 vector<vector<vector<unsigned short> > > hcalMask(2,vector<vector<unsigned short> >(72,vector<unsigned short>(28,1))); 00105 vector<vector<vector<unsigned short> > > hfMask(2,vector<vector<unsigned short> >(18,vector<unsigned short>(8,1))); 00106 00107 // read ECAL mask first 00108 // loop through rct iphi 00109 for (int i = 1; i <= 72; i++) 00110 { 00111 int phi_index = (72 + 18 - i) % 72; // transfrom from RCT coords 00112 if (phi_index == 0) {phi_index = 72;} 00113 //std::cout << "ecal phi index is " << phi_index << endl; 00114 for (int j = 28; j >= 1; j--) 00115 { 00116 maskFileStream >> junk; 00117 if (junk.compare("-") == 0) 00118 {} 00119 else if ((junk.compare("X") == 0) || (junk.compare("x") == 0)) 00120 { 00121 ecalMask.at(0).at(phi_index-1).at(j-1) = 0; 00122 } 00123 else 00124 { 00125 std::cerr << "RCT mask producer: error -- unrecognized character" << endl; 00126 } 00127 } 00128 for (int j = 1; j <= 28; j++) 00129 { 00130 maskFileStream >> junk; 00131 if(junk.compare("-") == 0) 00132 {} 00133 else if((junk.compare("X") == 0) || (junk.compare("x") == 0)) 00134 { 00135 ecalMask.at(1).at(phi_index-1).at(j-1) = 0; 00136 } 00137 else 00138 { 00139 std::cerr << "RCT mask producer: error -- unrecognized character" << endl; 00140 } 00141 } 00142 } 00143 //std::cout << "done reading ECAL" << endl; 00144 00145 maskFileStream >> junk; 00146 if (junk.compare("HCAL:") != 0) 00147 { 00148 throw cms::Exception("FileInPathError") 00149 << "RCT mask producer: error reading ECAL mask" << endl;; 00150 } 00151 00152 //std::cout << "Starting HCAL read" << endl; 00153 00154 // now read HCAL mask 00155 // loop through rct iphi 00156 for (int i = 1; i <= 72; i++) 00157 { 00158 int phi_index = (72 + 18 - i) % 72; // transfrom from RCT coords 00159 if (phi_index == 0) {phi_index = 72;} 00160 //std::cout << "hcal phi index is " << phi_index << endl; 00161 for (int j = 28; j >= 1; j--) 00162 { 00163 maskFileStream >> junk; 00164 if (junk.compare("-") == 0) 00165 {} 00166 else if ((junk.compare("X") == 0) || (junk.compare("x") == 0)) 00167 { 00168 hcalMask.at(0).at(phi_index-1).at(j-1) = 0; 00169 } 00170 else 00171 { 00172 std::cerr << "RCT mask producer: error -- unrecognized character" << endl; 00173 } 00174 } 00175 for (int j = 1; j <= 28; j++) 00176 { 00177 maskFileStream >> junk; 00178 if(junk.compare("-") == 0) 00179 {} 00180 else if((junk.compare("X") == 0) || (junk.compare("x") == 0)) 00181 { 00182 hcalMask.at(1).at(phi_index-1).at(j-1) = 0; 00183 } 00184 else 00185 { 00186 std::cerr << "RCT mask producer: error -- unrecognized character" << endl; 00187 } 00188 } 00189 } 00190 00191 maskFileStream >> junk; 00192 if (junk.compare("HF:") != 0) 00193 { 00194 throw cms::Exception("FileInPathError") 00195 << "RCT mask producer: error reading HCAL mask" << endl;; 00196 } 00197 00198 // loop through the hf phi columns in file 00199 for(int i = 0; i < 18; i++) 00200 { 00201 //std::cout << "iphi for hf file read is " << i << endl; 00202 for (int j = 4; j >= 1; j--) 00203 { 00204 if (maskFileStream >> junk) {} 00205 else { std::cerr << "RCT mask producer: error reading HF mask" << endl; } 00206 if (junk.compare("-") == 0) 00207 {} 00208 else if ((junk.compare("X") == 0) || (junk.compare("x") == 0)) 00209 { 00210 hfMask.at(0).at(i).at(j-1) = 0; // just save iphi as 0-17, transform later 00211 } 00212 else 00213 { 00214 std::cerr << "RCT mask producer: error -- unrecognized character" << endl; 00215 } 00216 } 00217 for (int j = 1; j <= 4; j++) 00218 { 00219 if (maskFileStream >> junk) {} 00220 else { std::cerr << "RCT mask producer: error reading HF mask" << endl; } 00221 if (junk.compare("-") == 0) 00222 {} 00223 else if ((junk.compare("X") == 0) || (junk.compare("x") == 0)) 00224 { 00225 hfMask.at(1).at(i).at(j-1) = 0; 00226 } 00227 else 00228 { 00229 std::cerr << "RCT mask producer: error -- unrecognized character" << endl; 00230 } 00231 } 00232 } 00233 00234 //std::cout << "HF read done" << endl; 00235 00236 maskFileStream.close(); 00237 00238 //std::cout << "file closed" << endl; 00239 00240 // apply mask 00241 00242 std::auto_ptr<EcalTrigPrimDigiCollection> 00243 maskedEcalTPs(new EcalTrigPrimDigiCollection()); 00244 std::auto_ptr<HcalTrigPrimDigiCollection> 00245 maskedHcalTPs(new HcalTrigPrimDigiCollection()); 00246 maskedEcalTPs->reserve(56*72); 00247 maskedHcalTPs->reserve(56*72+18*8); 00248 int nEcalSamples = 0; 00249 int nHcalSamples = 0; 00250 00251 for (unsigned int i = 0; i < ecalColl.size(); i++) 00252 { 00253 nEcalSamples = ecalColl[i].size(); 00254 short ieta = (short) ecalColl[i].id().ieta(); 00255 unsigned short absIeta = (unsigned short) abs(ieta); 00256 int sign = ieta / absIeta; 00257 short iphi = (unsigned short) ecalColl[i].id().iphi(); 00258 //if (i < 20) {std::cout << "ieta is " << ieta << ", absIeta is " << absIeta 00259 // << ", iphi is " << iphi << endl;} 00260 00261 EcalTriggerPrimitiveDigi 00262 ecalDigi(EcalTrigTowerDetId(sign, EcalTriggerTower, absIeta,iphi)); 00263 ecalDigi.setSize(nEcalSamples); 00264 00265 for (int nSample = 0; nSample < nEcalSamples; nSample++) 00266 { 00267 00268 int energy; 00269 bool fineGrain; 00270 00271 if (sign < 0) 00272 { 00273 //std::cout << "eta-: mask is " << ecalMask.at(0).at(iphi-1).at(absIeta-1) << endl; 00274 energy = ecalMask.at(0).at(iphi-1).at(absIeta-1) * ecalColl[i].sample(nSample).compressedEt(); 00275 fineGrain = ecalMask.at(0).at(iphi-1).at(absIeta-1) * ecalColl[i].sample(nSample).fineGrain(); 00276 } 00277 else if (sign > 0) 00278 { 00279 //std::cout << "eta+: mask is " << ecalMask.at(1).at(iphi-1).at(absIeta-1) << endl; 00280 energy = ecalMask.at(1).at(iphi-1).at(absIeta-1) * ecalColl[i].sample(nSample).compressedEt(); 00281 fineGrain = ecalMask.at(1).at(iphi-1).at(absIeta-1) * ecalColl[i].sample(nSample).fineGrain(); 00282 } 00283 00284 ecalDigi.setSample(nSample, EcalTriggerPrimitiveSample(energy, 00285 fineGrain, 00286 0)); 00287 } 00288 maskedEcalTPs->push_back(ecalDigi); 00289 } 00290 //std::cout << "End of ecal digi masking" << endl; 00291 00292 //std::cout << "nHcalDigis is " << hcalColl.size() << std::endl; 00293 for (unsigned int i = 0; i < hcalColl.size(); i++) 00294 { 00295 nHcalSamples = hcalColl[i].size(); 00296 //if ((i % 100) == 0 ) {std::cout << "Loop " << i << std::endl;} 00297 short ieta = (short) hcalColl[i].id().ieta(); 00298 unsigned short absIeta = (unsigned short) abs(ieta); 00299 int sign = ieta / absIeta; 00300 short iphi = (unsigned short) hcalColl[i].id().iphi(); 00301 //if (i < 20) {std::cout << "ieta is " << ieta << ", absIeta is " << absIeta 00302 // << ", iphi is " << iphi << endl;} 00303 /* 00304 if (hcalColl[i].SOI_compressedEt() != 0) 00305 { 00306 std::cout << "original et " << hcalColl[i].SOI_compressedEt() 00307 << " fg " << hcalColl[i].SOI_fineGrain() << " iphi " 00308 << iphi << " ieta " << ieta << std::endl; 00309 } 00310 */ 00311 HcalTriggerPrimitiveDigi 00312 hcalDigi(HcalTrigTowerDetId(ieta,iphi)); 00313 hcalDigi.setSize(nHcalSamples); 00314 hcalDigi.setPresamples(hcalColl[i].presamples()); 00315 00316 for (int nSample = 0; nSample < nHcalSamples; nSample++) 00317 { 00318 00319 int energy; 00320 bool fineGrain; 00321 00322 if (absIeta < 29) 00323 { 00324 if (sign < 0) 00325 { 00326 energy = hcalMask.at(0).at(iphi-1).at(absIeta-1) * hcalColl[i].sample(nSample).compressedEt(); 00327 fineGrain = hcalMask.at(0).at(iphi-1).at(absIeta-1) * hcalColl[i].sample(nSample).fineGrain(); 00328 } 00329 else if (sign > 0) 00330 { 00331 energy = hcalMask.at(1).at(iphi-1).at(absIeta-1) * hcalColl[i].sample(nSample).compressedEt(); 00332 fineGrain = hcalMask.at(1).at(iphi-1).at(absIeta-1) * hcalColl[i].sample(nSample).fineGrain(); 00333 } 00334 } 00335 else if ((absIeta >= 29) && (absIeta <= 32)) 00336 { 00337 //std::cout << "hf iphi: " << iphi << endl; 00338 short hf_phi_index = iphi/4; 00339 //iphi = iphi/4; // change from 1,5,9, etc to access vector positions 00340 //std::cout << "hf phi index: " << hf_phi_index << endl; 00341 if (sign < 0) 00342 { 00343 //std::cout << "ieta is " << ieta << ", absIeta is " << absIeta << ", iphi is " << iphi << endl; 00344 //std::cout << "eta-: mask is " << hfMask.at(0).at(hf_phi_index).at(absIeta-29) << endl; // hf ieta 0-3 00345 energy = hfMask.at(0).at(hf_phi_index).at(absIeta-29) * hcalColl[i].sample(nSample).compressedEt(); // for hf, iphi starts at 0 00346 fineGrain = hfMask.at(0).at(hf_phi_index).at(absIeta-29) * hcalColl[i].sample(nSample).fineGrain(); 00347 } 00348 else if (sign > 0) 00349 { 00350 //std::cout << "ieta is " << ieta << ", absIeta is " << absIeta << ", iphi is " << iphi << endl; 00351 //std::cout << "eta+: mask is " << hfMask.at(1).at(hf_phi_index).at(absIeta-29) << endl; 00352 energy = hfMask.at(1).at(hf_phi_index).at(absIeta-29) * hcalColl[i].sample(nSample).compressedEt(); 00353 fineGrain = hfMask.at(1).at(hf_phi_index).at(absIeta-29) * hcalColl[i].sample(nSample).fineGrain(); 00354 } 00355 //iphi = iphi*4 + 1; // change back to original 00356 //std::cout << "New hf iphi = " << iphi << endl; 00357 } 00358 00359 hcalDigi.setSample(nSample, HcalTriggerPrimitiveSample(energy, 00360 fineGrain, 00361 0, 0)); 00362 00363 //if (hcalDigi.SOI_compressedEt() != 0) 00364 //{ 00365 // std::cout << "et " << hcalDigi.SOI_compressedEt() 00366 // << "fg " << hcalDigi.SOI_fineGrain() << std::endl; 00367 //} 00368 } 00369 maskedHcalTPs->push_back(hcalDigi); 00370 } 00371 //std::cout << "End of hcal digi masking" << endl; 00372 00373 // put new data into event 00374 00375 iEvent.put(maskedEcalTPs); 00376 iEvent.put(maskedHcalTPs); 00377 00378 }
bool MaskedRctInputDigiProducer::useEcal_ [private] |
bool MaskedRctInputDigiProducer::useHcal_ [private] |