390 std::vector< edm::DetSet<PixelDigi> > vPixelDigi;
398 for(SiGlobalIndex::const_iterator IDet =
SiHitStorage_.begin();
401 uint32_t detID = IDet->first;
409 int formerPixel = -1;
414 OneDetectorMap::const_iterator iLocalchk;
416 for(OneDetectorMap::const_iterator iLocal = LocalMap.begin();
417 iLocal != LocalMap.end(); ++iLocal) {
419 currentPixel = iLocal->first;
421 if (currentPixel == formerPixel) {
422 ADCSum+=(iLocal->second).
adc();
426 if (ADCSum > 511) ADCSum = 255;
427 else if (ADCSum > 253 && ADCSum < 512) ADCSum = 254;
429 Signals.insert( std::make_pair(formerPixel, ADCSum));
434 formerPixel = currentPixel;
435 ADCSum = (iLocal->second).
adc();
439 if((++iLocalchk) == LocalMap.end()) {
440 if (ADCSum > 511) ADCSum = 255;
441 else if (ADCSum > 253 && ADCSum < 512) ADCSum = 254;
442 Signals.insert( std::make_pair(formerPixel, ADCSum));
449 _signal.insert( std::make_pair( detID, Signals));
454 LogInfo(
"DataMixingSiPixelMCDigiWorker") <<
"total # Merged Pixels: " <<
_signal.size() ;
476 for(TrackingGeometry::DetUnitContainer::const_iterator iu =
pDD->
detUnits().begin(); iu !=
pDD->
detUnits().end(); iu ++){
478 if((*iu)->type().isTrackerPixel()) {
489 if(theSignal.size()>0) {
495 int numRows = topol->
nrows();
500 double pixelEfficiency = 1.0;
501 double columnEfficiency = 1.0;
502 double chipEfficiency = 1.0;
509 int layerIndex=tTopo->
layer(detID);
516 if(numColumns>416) LogWarning (
"Pixel Geometry") <<
" wrong columns in barrel "<<numColumns;
517 if(numRows>160) LogWarning (
"Pixel Geometry") <<
" wrong rows in barrel "<<numRows;
521 if (module<=4) module=5-
module;
531 unsigned int panelIndex=tTopo->
pxfPanel(detID);
532 unsigned int moduleIndex=tTopo->
pxfModule(detID);
542 if(numColumns>260 || numRows>160) {
543 if(numColumns>260) LogWarning (
"Pixel Geometry") <<
" wrong columns in endcaps "<<numColumns;
544 if(numRows>160) LogWarning (
"Pixel Geometry") <<
" wrong rows in endcaps "<<numRows;
547 if ((panelIndex==1 && (moduleIndex==1 || moduleIndex==2)) || (panelIndex==2 && moduleIndex==1)) {
555 pixelEfficiency = 0.999;
556 columnEfficiency = 0.999;
557 chipEfficiency = 0.999;
566 LogDebug (
"Pixel Digitizer") <<
" enter pixel_inefficiency " << pixelEfficiency <<
" " 567 << columnEfficiency <<
" " << chipEfficiency;
572 std::unique_ptr<PixelIndices> pIndexConverter(
new PixelIndices(numColumns,numRows));
578 std::map<int, int, std::less<int> >chips,
columns;
579 std::map<int, int, std::less<int> >::iterator iter;
590 pIndexConverter->transformToROC(col,row,chipIndex,colROC,rowROC);
591 int dColInChip = pIndexConverter->DColumn(colROC);
593 int dColInDet = pIndexConverter->DColumnInModule(dColInChip,chipIndex);
596 columns[dColInDet]++;
600 for ( iter = chips.begin(); iter != chips.end() ; iter++ ) {
602 float rand = CLHEP::RandFlat::shoot(engine);
603 if( rand > chipEfficiency ) chips[iter->first]=0;
607 for ( iter = columns.begin(); iter != columns.end() ; iter++ ) {
609 float rand = CLHEP::RandFlat::shoot(engine);
610 if( rand > columnEfficiency ) columns[iter->first]=0;
622 pIndexConverter->transformToROC(col,row,chipIndex,colROC,rowROC);
623 int dColInChip = pIndexConverter->DColumn(colROC);
625 int dColInDet = pIndexConverter->DColumnInModule(dColInChip,chipIndex);
628 float rand = CLHEP::RandFlat::shoot(engine);
629 if( chips[chipIndex]==0 || columns[dColInDet]==0
630 || rand>pixelEfficiency ) {
641 vPixelDigi.push_back(SPD);
int adc(sample_type sample)
get the ADC sample (12 bits)
virtual int nrows() const =0
void init_DynIneffDB(const edm::EventSetup &, const unsigned int &)
std::multimap< int, PixelDigi > OneDetectorMap
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
SiGlobalIndex SiHitStorage_
double theInnerEfficiency_FPix[20]
signal_map_type::iterator signal_map_iterator
std::vector< double > theModuleEfficiency_BPix[20]
unsigned int pxbLadder(const DetId &id) const
unsigned int pxbModule(const DetId &id) const
std::map< uint32_t, double > PixelGeomFactors
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
signal_map_type::const_iterator signal_map_const_iterator
uint32_t rawId() const
get the raw id
double thePixelColEfficiency[20]
DetId geographicalId() const
The label of this GeomDet.
std::map< int, Amplitude, std::less< int > > signal_map_type
PixelEfficiencies pixelEff_
std::vector< double > theLadderEfficiency_BPix[20]
std::map< uint32_t, double > ChipGeomFactors
unsigned int pxfModule(const DetId &id) const
std::map< uint32_t, double > ColGeomFactors
void setPileupInfo(const std::vector< PileupSummaryInfo > &ps, const int &bs)
static std::pair< int, int > channelToPixel(int ch)
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
const int NumberOfBarrelLayers
chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, "NDC") lumi.SetBorderSize( 0 ) lumi...
unsigned int layer(const DetId &id) const
std::string PixelDigiCollectionDM_
std::vector< double > pu_scale
virtual int ncolumns() const =0
double theOuterEfficiency_FPix[20]
StreamID streamID() const
double thePixelEfficiency[20]
std::map< uint32_t, size_t > iPU
virtual SubDetector subDetector() const
Which subdetector.
edm::ESHandle< TrackerGeometry > pDD
T const * product() const
unsigned int pxfPanel(const DetId &id) const
const DetUnitContainer & detUnits() const override
Returm a vector of all GeomDetUnit.
double thePixelChipEfficiency[20]