![]() |
![]() |
#include <Calibration/HcalIsolatedTrackReco/interface/SiStripRegFEDSelector.h>
Public Member Functions | |
SiStripRegFEDSelector (const edm::ParameterSet &) | |
~SiStripRegFEDSelector () | |
Public Attributes | |
double | delta_ |
edm::InputTag | rawInLabel_ |
edm::InputTag | seedLabel_ |
edm::ESHandle < SiStripRegionCabling > | strip_cabling |
Private Member Functions | |
virtual void | beginJob (const edm::EventSetup &) |
virtual void | endJob () |
virtual void | produce (edm::Event &, const edm::EventSetup &) |
Definition at line 23 of file SiStripRegFEDSelector.h.
SiStripRegFEDSelector::SiStripRegFEDSelector | ( | const edm::ParameterSet & | iConfig | ) |
Definition at line 9 of file SiStripRegFEDSelector.cc.
References delta_, edm::ParameterSet::getParameter(), rawInLabel_, and seedLabel_.
00010 { 00011 seedLabel_=iConfig.getParameter<edm::InputTag>("regSeedLabel"); 00012 delta_=iConfig.getParameter<double>("delta"); 00013 00014 rawInLabel_=iConfig.getParameter<edm::InputTag>("rawInputLabel"); 00015 00016 produces<FEDRawDataCollection>(); 00017 }
SiStripRegFEDSelector::~SiStripRegFEDSelector | ( | ) |
void SiStripRegFEDSelector::beginJob | ( | const edm::EventSetup & | ) | [private, virtual] |
void SiStripRegFEDSelector::produce | ( | edm::Event & | iEvent, | |
const edm::EventSetup & | iSetup | |||
) | [private, virtual] |
Implements edm::EDProducer.
Definition at line 26 of file SiStripRegFEDSelector.cc.
References SiStripRegionCabling::ALLLAYERS, SiStripRegionCabling::ALLSUBDETS, FEDRawData::data(), data, delta_, FEDRawDataCollection::FEDData(), edm::EventSetup::get(), edm::Event::getByLabel(), i, it, j, k, FEDNumbering::lastFEDId(), p, funct::pow(), edm::Handle< T >::product(), edm::Event::put(), dttmaxenums::R, rawInLabel_, FEDRawData::resize(), seedLabel_, FEDRawData::size(), size, funct::sqrt(), strip_cabling, and trigger::TriggerTrack.
00027 { 00028 std::auto_ptr<FEDRawDataCollection> producedData(new FEDRawDataCollection); 00029 00030 edm::Handle<trigger::TriggerFilterObjectWithRefs> trigSeedTrks; 00031 iEvent.getByLabel(seedLabel_,trigSeedTrks); 00032 00033 std::vector< edm::Ref<reco::IsolatedPixelTrackCandidateCollection> > isoPixTrackRefs; 00034 trigSeedTrks->getObjects(trigger::TriggerTrack, isoPixTrackRefs); 00035 00036 edm::Handle<FEDRawDataCollection> rawIn; 00037 iEvent.getByLabel(rawInLabel_,rawIn); 00038 00039 iSetup.get<SiStripRegionCablingRcd>().get(strip_cabling); 00040 00041 std::vector<int> stripFEDVec; 00042 00043 //get vector of regions 00044 const SiStripRegionCabling::Cabling ccab=strip_cabling->getRegionCabling(); 00045 00046 //size of region (eta,phi) 00047 const std::pair<double,double> regDim=strip_cabling->regionDimensions(); 00048 00049 const SiStripRegionCabling::ElementCabling elcabling; 00050 00051 bool fedSaved[1000]; 00052 for (int i=0; i<1000; i++) fedSaved[i]=false; 00053 00054 //cycle on seeds 00055 for (uint32_t p=0; p<isoPixTrackRefs.size(); p++) 00056 { 00057 double etaObj_=isoPixTrackRefs[p]->track()->eta(); 00058 double phiObj_=isoPixTrackRefs[p]->track()->phi(); 00059 00060 //cycle on regions 00061 for (uint32_t i=0; i<ccab.size(); i++) 00062 { 00063 SiStripRegionCabling::Position pos=strip_cabling->position(i); 00064 double dphi=fabs(pos.second-phiObj_); 00065 if (dphi>acos(-1)) dphi=2*acos(-1)-dphi; 00066 double R=sqrt(pow(pos.first-etaObj_,2)+dphi*dphi); 00067 if (R-sqrt(pow(regDim.first/2,2)+pow(regDim.second/2,2))>delta_) continue; 00068 //get vector of subdets within region 00069 const SiStripRegionCabling::RegionCabling regSubdets= ccab[i]; 00070 //cycle on subdets 00071 for (uint32_t idet=0; idet<SiStripRegionCabling::ALLSUBDETS; idet++) 00072 { 00073 //get vector of layers within subdet of region 00074 const SiStripRegionCabling::WedgeCabling regSubdetLayers=regSubdets[idet]; 00075 for (uint32_t ilayer=0; ilayer<SiStripRegionCabling::ALLLAYERS; ilayer++) 00076 { 00077 //get map of vectors of feds withing the layer of subdet of region 00078 const SiStripRegionCabling::ElementCabling fedVectorMap=regSubdetLayers[ilayer]; 00079 SiStripRegionCabling::ElementCabling::const_iterator it=fedVectorMap.begin(); 00080 for( ; it!=fedVectorMap.end(); it++) 00081 { 00082 for (uint32_t op=0; op<(it->second).size(); op++) 00083 { 00084 //get fed id 00085 int fediid=(it->second)[op].fedId(); 00086 if (!fedSaved[fediid]) 00087 { 00088 stripFEDVec.push_back(fediid); 00089 } 00090 fedSaved[fediid]=true; 00091 00092 } 00093 } 00094 00095 } 00096 00097 } 00098 } 00099 } 00100 00101 00103 00104 const FEDRawDataCollection *rdc=rawIn.product(); 00105 00106 // if ( ( rawData[i].provenance()->processName() != e.processHistory().rbegin()->processName() ) ) 00107 // continue ; // skip all raw collections not produced by the current process 00108 00109 for ( int j=0; j< FEDNumbering::lastFEDId(); ++j ) 00110 { 00111 bool rightFED=false; 00112 for (uint32_t k=0; k<stripFEDVec.size(); k++) 00113 { 00114 if (j==stripFEDVec[k]) 00115 { 00116 rightFED=true; 00117 } 00118 } 00119 if (!rightFED) continue; 00120 const FEDRawData & fedData = rdc->FEDData(j); 00121 size_t size=fedData.size(); 00122 00123 if ( size > 0 ) 00124 { 00125 // this fed has data -- lets copy it 00126 FEDRawData & fedDataProd = producedData->FEDData(j); 00127 if ( fedDataProd.size() != 0 ) { 00128 // std::cout << " More than one FEDRawDataCollection with data in FED "; 00129 // std::cout << j << " Skipping the 2nd\n"; 00130 continue; 00131 } 00132 fedDataProd.resize(size); 00133 unsigned char *dataProd=fedDataProd.data(); 00134 const unsigned char *data=fedData.data(); 00135 for ( unsigned int k=0; k<size; ++k ) { 00136 dataProd[k]=data[k]; 00137 } 00138 } 00139 } 00140 00141 iEvent.put(producedData); 00142 00143 }
Definition at line 31 of file SiStripRegFEDSelector.h.
Referenced by produce(), and SiStripRegFEDSelector().
Definition at line 33 of file SiStripRegFEDSelector.h.
Referenced by produce(), and SiStripRegFEDSelector().
Definition at line 30 of file SiStripRegFEDSelector.h.
Referenced by produce(), and SiStripRegFEDSelector().