00001 00002 #include "Calibration/HcalIsolatedTrackReco/interface/SubdetFEDSelector.h" 00003 00004 SubdetFEDSelector::SubdetFEDSelector(const edm::ParameterSet& iConfig) 00005 { 00006 getEcal_=iConfig.getParameter<bool>("getECAL"); 00007 getStrip_=iConfig.getParameter<bool>("getSiStrip"); 00008 getPixel_=iConfig.getParameter<bool>("getSiPixel"); 00009 getHcal_=iConfig.getParameter<bool>("getHCAL"); 00010 getMuon_=iConfig.getParameter<bool>("getMuon"); 00011 getTrigger_=iConfig.getParameter<bool>("getTrigger"); 00012 00013 rawInLabel_=iConfig.getParameter<edm::InputTag>("rawInputLabel"); 00014 00015 produces<FEDRawDataCollection>(); 00016 00017 } 00018 00019 SubdetFEDSelector::~SubdetFEDSelector() 00020 { 00021 } 00022 00023 void 00024 SubdetFEDSelector::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) 00025 { 00026 00027 std::auto_ptr<FEDRawDataCollection> producedData(new FEDRawDataCollection); 00028 00029 edm::Handle<FEDRawDataCollection> rawIn; 00030 iEvent.getByLabel(rawInLabel_,rawIn); 00031 00032 std::vector<int> selFEDs; 00033 00034 if (getEcal_) 00035 { 00036 for (int i=FEDNumbering::getEcalFEDIds().first; i<=FEDNumbering::getEcalFEDIds().second; i++) 00037 { 00038 selFEDs.push_back(i); 00039 } 00040 for (int i=FEDNumbering::getPreShowerFEDIds().first; i<=FEDNumbering::getPreShowerFEDIds().second; i++) 00041 { 00042 selFEDs.push_back(i); 00043 } 00044 } 00045 00046 if (getMuon_) 00047 { 00048 for (int i=FEDNumbering::getCSCFEDIds().first; i<=FEDNumbering::getCSCFEDIds().second; i++) 00049 { 00050 selFEDs.push_back(i); 00051 } 00052 for (int i=FEDNumbering::getCSCTFFEDIds().first; i<=FEDNumbering::getCSCTFFEDIds().second; i++) 00053 { 00054 selFEDs.push_back(i); 00055 } 00056 for (int i=FEDNumbering::getDTFEDIds().first; i<=FEDNumbering::getDTFEDIds().second; i++) 00057 { 00058 selFEDs.push_back(i); 00059 } 00060 for (int i=FEDNumbering::getDTTFFEDIds().first; i<=FEDNumbering::getDTTFFEDIds().second; i++) 00061 { 00062 selFEDs.push_back(i); 00063 } 00064 for (int i=FEDNumbering::getRPCFEDIds().first; i<=FEDNumbering::getRPCFEDIds().second; i++) 00065 { 00066 selFEDs.push_back(i); 00067 } 00068 for (int i=FEDNumbering::getCSCDDUFEDIds().first; i<=FEDNumbering::getCSCDDUFEDIds().second; i++) 00069 { 00070 selFEDs.push_back(i); 00071 } 00072 for (int i=FEDNumbering::getCSCContingencyFEDIds().first; i<=FEDNumbering::getCSCContingencyFEDIds().second; i++) 00073 { 00074 selFEDs.push_back(i); 00075 } 00076 for (int i=FEDNumbering::getCSCTFSPFEDIds().first; i<=FEDNumbering::getCSCTFSPFEDIds().second; i++) 00077 { 00078 selFEDs.push_back(i); 00079 } 00080 } 00081 00082 00083 if (getHcal_) 00084 { 00085 for (int i=FEDNumbering::getHcalFEDIds().first; i<=FEDNumbering::getHcalFEDIds().second; i++) 00086 { 00087 selFEDs.push_back(i); 00088 } 00089 } 00090 00091 00092 if (getStrip_) 00093 { 00094 for (int i=FEDNumbering::getSiStripFEDIds().first; i<=FEDNumbering::getSiStripFEDIds().second; i++) 00095 { 00096 selFEDs.push_back(i); 00097 } 00098 } 00099 00100 00101 if (getPixel_) 00102 { 00103 for (int i=FEDNumbering::getSiPixelFEDIds().first; i<=FEDNumbering::getSiPixelFEDIds().second; i++) 00104 { 00105 selFEDs.push_back(i); 00106 } 00107 } 00108 00109 if (getTrigger_) 00110 { 00111 for (int i=FEDNumbering::getTriggerEGTPFEDIds().first; i<=FEDNumbering::getTriggerEGTPFEDIds().second; i++) 00112 { 00113 selFEDs.push_back(i); 00114 } 00115 for (int i=FEDNumbering::getTriggerGTPFEDIds().first; i<=FEDNumbering::getTriggerGTPFEDIds().second; i++) 00116 { 00117 selFEDs.push_back(i); 00118 } 00119 for (int i=FEDNumbering::getTriggerLTCFEDIds().first; i<=FEDNumbering::getTriggerLTCFEDIds().second; i++) 00120 { 00121 selFEDs.push_back(i); 00122 } 00123 for (int i=FEDNumbering::getTriggerLTCmtccFEDIds().first; i<=FEDNumbering::getTriggerLTCmtccFEDIds().second; i++) 00124 { 00125 selFEDs.push_back(i); 00126 } 00127 for (int i=FEDNumbering::getTriggerGCTFEDIds().first; i<=FEDNumbering::getTriggerGCTFEDIds().second; i++) 00128 { 00129 selFEDs.push_back(i); 00130 } 00131 00132 for (int i=FEDNumbering::getTriggerLTCTriggerFEDID().first; i<=FEDNumbering::getTriggerLTCTriggerFEDID().second; i++) 00133 { 00134 selFEDs.push_back(i); 00135 } 00136 00137 for (int i=FEDNumbering::getTriggerLTCHCALFEDID().first; i<=FEDNumbering::getTriggerLTCHCALFEDID().second; i++) 00138 { 00139 selFEDs.push_back(i); 00140 } 00141 00142 for (int i=FEDNumbering::getTriggerLTCSiStripFEDID().first; i<=FEDNumbering::getTriggerLTCSiStripFEDID().second; i++) 00143 { 00144 selFEDs.push_back(i); 00145 } 00146 00147 for (int i=FEDNumbering::getTriggerLTCECALFEDID().first; i<=FEDNumbering::getTriggerLTCECALFEDID().second; i++) 00148 { 00149 selFEDs.push_back(i); 00150 } 00151 00152 for (int i=FEDNumbering::getTriggerLTCTotemCastorFEDID().first; i<=FEDNumbering::getTriggerLTCTotemCastorFEDID().second; i++) 00153 { 00154 selFEDs.push_back(i); 00155 } 00156 for (int i=FEDNumbering::getTriggerLTCRPCFEDID().first; i<=FEDNumbering::getTriggerLTCRPCFEDID().second; i++) 00157 { 00158 selFEDs.push_back(i); 00159 } 00160 00161 for (int i=FEDNumbering::getTriggerLTCCSCFEDID().first; i<=FEDNumbering::getTriggerLTCCSCFEDID().second; i++) 00162 { 00163 selFEDs.push_back(i); 00164 } 00165 for (int i=FEDNumbering::getTriggerLTCDTFEDID().first; i<=FEDNumbering::getTriggerLTCDTFEDID().second; i++) 00166 { 00167 selFEDs.push_back(i); 00168 } 00169 for (int i=FEDNumbering::getTriggerLTCSiPixelFEDID().first; i<=FEDNumbering::getTriggerLTCSiPixelFEDID().second; i++) 00170 { 00171 selFEDs.push_back(i); 00172 } 00173 00174 } 00175 00176 for (int i=FEDNumbering::getDAQeFEDFEDIds().first; i<=FEDNumbering::getDAQeFEDFEDIds().second; i++) 00177 { 00178 selFEDs.push_back(i); 00179 } 00180 00181 00182 // Copying: 00183 const FEDRawDataCollection *rdc=rawIn.product(); 00184 00185 // if ( ( rawData[i].provenance()->processName() != e.processHistory().rbegin()->processName() ) ) 00186 // continue ; // skip all raw collections not produced by the current process 00187 00188 for ( int j=0; j< FEDNumbering::lastFEDId(); ++j ) 00189 { 00190 bool rightFED=false; 00191 for (uint32_t k=0; k<selFEDs.size(); k++) 00192 { 00193 if (j==selFEDs[k]) 00194 { 00195 rightFED=true; 00196 } 00197 } 00198 if (!rightFED) continue; 00199 const FEDRawData & fedData = rdc->FEDData(j); 00200 size_t size=fedData.size(); 00201 00202 if ( size > 0 ) 00203 { 00204 // this fed has data -- lets copy it 00205 FEDRawData & fedDataProd = producedData->FEDData(j); 00206 if ( fedDataProd.size() != 0 ) { 00207 // std::cout << " More than one FEDRawDataCollection with data in FED "; 00208 // std::cout << j << " Skipping the 2nd\n"; 00209 continue; 00210 } 00211 fedDataProd.resize(size); 00212 unsigned char *dataProd=fedDataProd.data(); 00213 const unsigned char *data=fedData.data(); 00214 for ( unsigned int k=0; k<size; ++k ) { 00215 dataProd[k]=data[k]; 00216 } 00217 } 00218 } 00219 00220 iEvent.put(producedData); 00221 00222 } 00223 00224 00225 // ------------ method called once each job just before starting event loop ------------ 00226 void SubdetFEDSelector::beginJob(const edm::EventSetup&) 00227 { 00228 } 00229 00230 // ------------ method called once each job just after ending the event loop ------------ 00231 void SubdetFEDSelector::endJob() { 00232 }