#include <EcalBarrelRecHitsMaker.h>
Public Member Functions | |
EcalBarrelRecHitsMaker (edm::ParameterSet const &p, const RandomEngine *) | |
void | init (const edm::EventSetup &es, bool dodigis, bool doMiscalib) |
void | loadEcalBarrelRecHits (edm::Event &iEvent, EBRecHitCollection &ecalHits, EBDigiCollection &ecaldigis) |
~EcalBarrelRecHitsMaker () | |
Private Member Functions | |
void | clean () |
void | geVtoGainAdc (float e, unsigned &gain, unsigned &adc) const |
bool | isHighInterest (int tthi) |
void | loadPCaloHits (const edm::Event &iEvent) |
bool | noisifyTriggerTower (unsigned tthi) |
void | noisifyTriggerTowers () |
void | randomNoisifier () |
Private Attributes | |
float | adcToGeV_ |
std::vector< int > | applyZSCells_ |
std::vector< uint32_t > | barrelRawId_ |
double | calibfactor_ |
std::vector< std::vector< int > > | crystalsinTT_ |
bool | doCustomHighNoise_ |
bool | doDigis_ |
bool | doMisCalib_ |
double | EBHotFraction_ |
const EcalTrigTowerConstituentsMap * | eTTmap_ |
float | geVToAdc1_ |
float | geVToAdc2_ |
float | geVToAdc3_ |
std::vector< double > | highNoiseParameters_ |
const std::vector< float > * | ICMC_ |
edm::InputTag | inputCol_ |
unsigned | maxAdc_ |
double | meanNoiseSigmaEt_ |
unsigned | minAdc_ |
const GaussianTail * | myGaussianTailGenerator_ |
std::vector< std::vector< int > > | neighboringTTs_ |
double | noise_ |
double | noiseADC_ |
std::vector< float > | noisesigma_ |
bool | noisified_ |
const RandomEngine * | random_ |
double | refactor_ |
double | refactor_mean_ |
float | sat_ |
std::vector< float > | sinTheta_ |
int | SREtaSize_ |
int | SRPhiSize_ |
float | SRThreshold_ |
float | t1_ |
float | t2_ |
std::vector< float > | theCalibConstants_ |
std::vector< float > | theCalorimeterHits_ |
std::vector< int > | theFiredCells_ |
std::vector< unsigned > | theFiredTTs_ |
std::vector< EcalTrigTowerDetId > | theTTDetIds_ |
std::vector< int > | theTTofHighInterest_ |
double | threshold_ |
std::vector< bool > | treatedTTs_ |
std::vector< int > | TTHighInterest_ |
std::vector< float > | TTTEnergy_ |
Definition at line 20 of file EcalBarrelRecHitsMaker.h.
EcalBarrelRecHitsMaker::EcalBarrelRecHitsMaker | ( | edm::ParameterSet const & | p, |
const RandomEngine * | myrandom | ||
) |
Definition at line 31 of file EcalBarrelRecHitsMaker.cc.
References applyZSCells_, alignmentValidation::c1, calibfactor_, crystalsinTT_, doCustomHighNoise_, EBHotFraction_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), highNoiseParameters_, inputCol_, EBDetId::kSizeForDenseIndexing, myGaussianTailGenerator_, neighboringTTs_, noise_, noiseADC_, noisified_, random_, refactor_, refactor_mean_, sinTheta_, mathSSE::sqrt(), SREtaSize_, SRPhiSize_, SRThreshold_, theCalorimeterHits_, theTTDetIds_, threshold_, treatedTTs_, TTHighInterest_, and TTTEnergy_.
: random_(myrandom) { edm::ParameterSet RecHitsParameters=p.getParameter<edm::ParameterSet>("ECALBarrel"); inputCol_=RecHitsParameters.getParameter<edm::InputTag>("MixedSimHits"); noise_ = RecHitsParameters.getParameter<double>("Noise"); threshold_ = RecHitsParameters.getParameter<double>("Threshold"); refactor_ = RecHitsParameters.getParameter<double> ("Refactor"); refactor_mean_ = RecHitsParameters.getParameter<double> ("Refactor_mean"); noiseADC_ = RecHitsParameters.getParameter<double>("NoiseADC"); highNoiseParameters_ = RecHitsParameters.getParameter<std::vector<double> > ("HighNoiseParameters"); SRThreshold_ = RecHitsParameters.getParameter<double> ("SRThreshold"); SREtaSize_ = RecHitsParameters.getUntrackedParameter<int> ("SREtaSize",1); SRPhiSize_ = RecHitsParameters.getUntrackedParameter<int> ("SRPhiSize",1); applyZSCells_.resize(EBDetId::kSizeForDenseIndexing,true); theCalorimeterHits_.resize(EBDetId::kSizeForDenseIndexing,0.); crystalsinTT_.resize(2448); TTTEnergy_.resize(2448,0.); TTHighInterest_.resize(2448,0); treatedTTs_.resize(2448,false); theTTDetIds_.resize(2448); neighboringTTs_.resize(2448); sinTheta_.resize(86,0.); doCustomHighNoise_=false; // Initialize the Gaussian tail generator // Two options : noise is set by the user (to a positive value). In this case, this value is taken // or the user chose to use the noise from DB. In this case, the noise is flat in pT and not in energy // but the threshold is in energy and not in pT. doCustomHighNoise_=highNoiseParameters_.size()>=3; Genfun::Erf myErf; if( noise_>0. ) { EBHotFraction_ = 0.5-0.5*myErf(threshold_/noise_/sqrt(2.)); myGaussianTailGenerator_ = new GaussianTail(random_, noise_, threshold_); edm::LogInfo("CaloRecHitsProducer") <<"Uniform noise simulation selected in the barrel"; } else if (noise_==-1 && doCustomHighNoise_) { if(highNoiseParameters_.size()==4) EBHotFraction_ = 0.5-0.5*myErf(highNoiseParameters_[3]/highNoiseParameters_[2]/sqrt(2.)); if(highNoiseParameters_.size()==3) EBHotFraction_ = highNoiseParameters_[2] ; edm::LogInfo("CaloRecHitsProducer")<< " The gaussian model for high noise fluctuation cells after ZS is selected (best model), hot fraction " << EBHotFraction_ << std::endl; } noisified_ = (noise_==0.); edm::ParameterSet CalibParameters = RecHitsParameters.getParameter<edm::ParameterSet>("ContFact"); double c1=CalibParameters.getParameter<double>("EBs25notContainment"); calibfactor_=1./c1; }
EcalBarrelRecHitsMaker::~EcalBarrelRecHitsMaker | ( | ) |
Definition at line 83 of file EcalBarrelRecHitsMaker.cc.
{; }
void EcalBarrelRecHitsMaker::clean | ( | ) | [private] |
Definition at line 88 of file EcalBarrelRecHitsMaker.cc.
References applyZSCells_, noise_, noisified_, findQualityFiles::size, theCalorimeterHits_, theFiredCells_, theFiredTTs_, theTTofHighInterest_, treatedTTs_, TTHighInterest_, and TTTEnergy_.
Referenced by loadEcalBarrelRecHits().
{ // std::cout << " clean " << std::endl; unsigned size=theFiredCells_.size(); for(unsigned ic=0;ic<size;++ic) { theCalorimeterHits_[theFiredCells_[ic]] = 0.; applyZSCells_[theFiredCells_[ic]] = true; } theFiredCells_.clear(); // If the noise is set to 0. No need to simulate it. noisified_ = (noise_==0.); // std::cout << " Finished to clean " << std::endl; size=theFiredTTs_.size(); // std::cout << " Number of barrel TT " << size << std::endl; for(unsigned itt=0;itt<size;++itt) { // std::cout << " TT " << theFiredTTs_[itt] << " " << TTTEnergy_[theFiredTTs_[itt]] << std::endl; TTTEnergy_[theFiredTTs_[itt]]=0.; treatedTTs_[theFiredTTs_[itt]]=false; } theFiredTTs_.clear(); size=theTTofHighInterest_.size(); for(unsigned itt=0;itt<size;++itt) TTHighInterest_[theTTofHighInterest_[itt]]=0; theTTofHighInterest_.clear(); // std::cout << " Check cleaning " << std::endl; // for(unsigned ic=0;ic<TTTEnergy_.size();++ic) // if(TTTEnergy_[ic]!=0.) std::cout << " TT " << ic << " not cleaned " << std::endl; // for(unsigned ic=0;ic<TTHighInterest_.size();++ic) // if(TTHighInterest_[ic]!=0) std::cout << " TTHighInterest " << ic << TTHighInterest_[ic] << " not cleaned " << std::endl; // for(unsigned ic=0;ic<treatedTTs_.size();++ic) // if(treatedTTs_[ic]) std::cout << " treatedTT " << ic << treatedTTs_[ic] << " not cleaned " << std::endl; }
void EcalBarrelRecHitsMaker::geVtoGainAdc | ( | float | e, |
unsigned & | gain, | ||
unsigned & | adc | ||
) | const [private] |
Definition at line 559 of file EcalBarrelRecHitsMaker.cc.
References geVToAdc1_, geVToAdc2_, geVToAdc3_, maxAdc_, min, minAdc_, t1_, and t2_.
Referenced by loadEcalBarrelRecHits().
{ if(e<t1_) { gain = 1; // x1 // std::cout << " E " << e << std::endl; adc = minAdc_ + (unsigned)(e*geVToAdc1_); // std::cout << " e*geVtoAdc1_ " << e*geVToAdc1_ << " " <<(unsigned)(e*geVToAdc1_) << std::endl; } else if (e<t2_) { gain = 2; adc = minAdc_ + (unsigned)(e*geVToAdc2_); } else { gain = 3; adc = std::min(minAdc_+(unsigned)(e*geVToAdc3_),maxAdc_); } }
void EcalBarrelRecHitsMaker::init | ( | const edm::EventSetup & | es, |
bool | dodigis, | ||
bool | doMiscalib | ||
) |
Definition at line 390 of file EcalBarrelRecHitsMaker.cc.
References abs, adcToGeV_, EcalCondObjectContainer< T >::barrelItems(), barrelRawId_, calibfactor_, crystalsinTT_, doDigis_, doMisCalib_, DetId::Ecal, EcalBarrel, eTTmap_, edm::EventSetup::get(), CaloSubdetectorGeometry::getGeometry(), CaloCellGeometry::getPosition(), CaloSubdetectorGeometry::getValidDetIds(), geVToAdc1_, geVToAdc2_, geVToAdc3_, EcalTrigTowerDetId::hashedIndex(), EBDetId::hashedIndex(), ICMC_, EBDetId::ietaAbs(), EBDetId::kSizeForDenseIndexing, max(), maxAdc_, plotscripts::mean(), min, minAdc_, neighboringTTs_, noise_, noiseADC_, noisesigma_, edm::ESHandle< T >::product(), refactor_, refactor_mean_, plotscripts::rms(), sat_, funct::sin(), sinTheta_, findQualityFiles::size, mathSSE::sqrt(), SREtaSize_, SRPhiSize_, t1_, t2_, theCalibConstants_, PV3DBase< T, PVType, FrameType >::theta(), theTTDetIds_, and EcalTrigTowerConstituentsMap::towerOf().
Referenced by CaloRecHitsProducer::beginRun().
{ // std::cout << " Initializing EcalBarrelRecHitsMaker " << std::endl; doDigis_=doDigis; doMisCalib_=doMiscalib; edm::ESHandle<EcalADCToGeVConstant> agc; es.get<EcalADCToGeVConstantRcd>().get(agc); adcToGeV_= agc->getEBValue();// 0.035 ; minAdc_ = 200; maxAdc_ = 4085; geVToAdc1_ = 1./adcToGeV_; geVToAdc2_ = geVToAdc1_/2.; geVToAdc3_ = geVToAdc1_/12.; t1_ = ((int)maxAdc_-(int)minAdc_)*adcToGeV_; t2_ = 2.* t1_ ; // Saturation value. Not needed in the digitization sat_ = 12.*t1_*calibfactor_; barrelRawId_.resize(EBDetId::kSizeForDenseIndexing); if (doMisCalib_ || noise_==-1.) theCalibConstants_.resize(EBDetId::kSizeForDenseIndexing); edm::ESHandle<CaloGeometry> pG; es.get<CaloGeometryRecord>().get(pG); // edm::ESHandle<CaloTopology> theCaloTopology; // es.get<CaloTopologyRecord>().get(theCaloTopology); edm::ESHandle<EcalTrigTowerConstituentsMap> hetm; es.get<IdealGeometryRecord>().get(hetm); eTTmap_ = &(*hetm); const EcalBarrelGeometry * myEcalBarrelGeometry = dynamic_cast<const EcalBarrelGeometry*>(pG->getSubdetectorGeometry(DetId::Ecal,EcalBarrel)); // std::cout << " Got the geometry " << myEcalBarrelGeometry << std::endl; const std::vector<DetId>& vec(myEcalBarrelGeometry->getValidDetIds(DetId::Ecal,EcalBarrel)); unsigned size=vec.size(); for(unsigned ic=0; ic<size; ++ic) { EBDetId myDetId(vec[ic]); int crystalHashedIndex=myDetId.hashedIndex(); barrelRawId_[crystalHashedIndex]=vec[ic].rawId(); // save the Trigger tower DetIds EcalTrigTowerDetId towid= eTTmap_->towerOf(EBDetId(vec[ic])); int TThashedindex=towid.hashedIndex(); theTTDetIds_[TThashedindex]=towid; crystalsinTT_[TThashedindex].push_back(crystalHashedIndex); int ietaAbs=myDetId.ietaAbs(); if(sinTheta_[ietaAbs]==0.) { sinTheta_[ietaAbs]=std::sin(myEcalBarrelGeometry->getGeometry(myDetId)->getPosition().theta()); // std::cout << " Ieta abs " << ietaAbs << " " << sinTheta_[ietaAbs] << std::endl; } } unsigned nTTs=theTTDetIds_.size(); // EBDetId myDetId(-58,203); // EcalTrigTowerDetId towid= eTTmap_->towerOf(myDetId); // const std::vector<int> & xtals(crystalsinTT_[towid.hashedIndex()]); // unsigned Size=xtals.size(); // for(unsigned i=0;i<Size;++i) // { // std::cout << EBDetId(barrelRawId_[xtals[i]]) << std::endl; // } // now loop on each TT and save its neighbors. for(unsigned iTT=0;iTT<nTTs;++iTT) { int ietaPivot=theTTDetIds_[iTT].ieta(); int iphiPivot=theTTDetIds_[iTT].iphi(); int TThashedIndex=theTTDetIds_[iTT].hashedIndex(); // std::cout << " TT Pivot " << TThashedIndex << " " << ietaPivot << " " << iphiPivot << " iz " << theTTDetIds_[iTT].zside() << std::endl; int ietamin=std::max(ietaPivot-SREtaSize_,-17); if(ietamin==0) ietamin=-1; int ietamax=std::min(ietaPivot+SREtaSize_,17); if(ietamax==0) ietamax=1; int iphimin=iphiPivot-SRPhiSize_; int iphimax=iphiPivot+SRPhiSize_; for(int ieta=ietamin;ieta<=ietamax;) { int iz=(ieta>0)? 1 : -1; for(int iphi=iphimin;iphi<=iphimax;) { int riphi=iphi; if(riphi<1) riphi+=72; else if(riphi>72) riphi-=72; EcalTrigTowerDetId neighborTTDetId(iz,EcalBarrel,abs(ieta),riphi); // std::cout << " Voisin " << ieta << " " << riphi << " " <<neighborTTDetId.hashedIndex()<< " " << neighborTTDetId.ieta() << " " << neighborTTDetId.iphi() << std::endl; if(ieta!=ietaPivot||riphi!=iphiPivot) { neighboringTTs_[TThashedIndex].push_back(neighborTTDetId.hashedIndex()); } ++iphi; } ++ieta; if(ieta==0) ieta=1; } } // std::cout << " Made the array " << std::endl; // Stores the miscalibration constants if(doMisCalib_ || noise_==-1.) { double rms=0.; double mean=0.; unsigned ncells=0; if(noise_==-1.) noisesigma_.resize(EBDetId::kSizeForDenseIndexing); // Intercalib MC constants IC_MC_i edm::ESHandle<EcalIntercalibConstantsMC> pJcal; es.get<EcalIntercalibConstantsMCRcd>().get(pJcal); const EcalIntercalibConstantsMC* jcal = pJcal.product(); const std::vector<float>& ICMC = jcal->barrelItems(); // should be saved, used by the zero suppression ICMC_ = &ICMC; // Intercalib constants IC_i // IC = IC_MC * (1+delta) // where delta is the miscalib edm::ESHandle<EcalIntercalibConstants> pIcal; es.get<EcalIntercalibConstantsRcd>().get(pIcal); const EcalIntercalibConstants* ical = pIcal.product(); const std::vector<float> & IC = ical->barrelItems(); float meanIC=0.; unsigned nic = IC.size(); for ( unsigned ic=0; ic <nic ; ++ic ) { // the miscalibration factor is float factor = IC[ic]/ICMC[ic]; meanIC+=(IC[ic]-1.); // Apply Refactor & refactor_mean theCalibConstants_[ic] = refactor_mean_+(factor-1.)*refactor_; rms+=(factor-1.)*(factor-1.); mean+=(factor-1.); ++ncells; if(noise_==-1.) { // the calibfactor will be applied later on noisesigma_[ic]=noiseADC_*adcToGeV_*ICMC[ic]/calibfactor_; } } mean/=(float)ncells; rms/=(float)ncells; rms=sqrt(rms-mean*mean); meanIC = 1.+ meanIC/ncells; // The following should be on LogInfo // float NoiseSigma = 1.26 * meanIC * adcToGeV_ ; // std::cout << " Found " << ncells << edm::LogInfo("CaloRecHitsProducer") << "Found " << ncells << " cells in the barrel calibration map. RMS is " << rms << std::endl; // std::cout << "Found " << ncells << " cells in the barrel calibration map. RMS is " << rms << std::endl; } }
bool EcalBarrelRecHitsMaker::isHighInterest | ( | int | tthi | ) | [private] |
Definition at line 580 of file EcalBarrelRecHitsMaker.cc.
References neighboringTTs_, query::result, findQualityFiles::size, SRThreshold_, theTTofHighInterest_, TTHighInterest_, and TTTEnergy_.
Referenced by loadEcalBarrelRecHits().
{ if(TTHighInterest_[tthi]!=0) return (TTHighInterest_[tthi]>0); TTHighInterest_[tthi]=(TTTEnergy_[tthi] > SRThreshold_) ? 1:-1; // if high interest, can leave ; otherwise look at the neighbours) if( TTHighInterest_[tthi]==1) { theTTofHighInterest_.push_back(tthi); return true; } // now look if a neighboring TT is of high interest const std::vector<int> & tts(neighboringTTs_[tthi]); // a tower is of high interest if it or one of its neighbour is above the SR threshold unsigned size=tts.size(); bool result=false; for(unsigned itt=0;itt<size&&!result;++itt) { if(TTTEnergy_[tts[itt]] > SRThreshold_) result=true; } TTHighInterest_[tthi]=(result)? 1:-1; theTTofHighInterest_.push_back(tthi); return result; }
void EcalBarrelRecHitsMaker::loadEcalBarrelRecHits | ( | edm::Event & | iEvent, |
EBRecHitCollection & | ecalHits, | ||
EBDigiCollection & | ecaldigis | ||
) |
Definition at line 127 of file EcalBarrelRecHitsMaker.cc.
References ecalMGPA::adc(), applyZSCells_, edm::DataFrameContainer::back(), barrelRawId_, clean(), doDigis_, relval_parameters_module::energy, eTTmap_, geVtoGainAdc(), EcalTrigTowerDetId::hashedIndex(), isHighInterest(), loadPCaloHits(), edm::DataFrameContainer::push_back(), edm::SortedCollection< T, SORT >::push_back(), edm::SortedCollection< T, SORT >::reserve(), edm::DataFrameContainer::reserve(), sat_, SRThreshold_, theCalorimeterHits_, theFiredCells_, threshold_, and EcalTrigTowerConstituentsMap::towerOf().
Referenced by CaloRecHitsProducer::produce().
{ clean(); loadPCaloHits(iEvent); unsigned nhit=theFiredCells_.size(); // std::cout << " loadEcalBarrelRecHits " << nhit << std::endl; unsigned gain, adc; ecalDigis.reserve(nhit); ecalHits.reserve(nhit); for(unsigned ihit=0;ihit<nhit;++ihit) { unsigned icell = theFiredCells_[ihit]; EBDetId myDetId(barrelRawId_[icell]); EcalTrigTowerDetId towid= eTTmap_->towerOf(myDetId); int TThashedindex=towid.hashedIndex(); if(doDigis_) { ecalDigis.push_back( myDetId ); EBDataFrame myDataFrame( ecalDigis.back() ); // myDataFrame.setSize(1); // now useless - by construction fixed at 1 frame - FIXME // The real work is in the following line geVtoGainAdc(theCalorimeterHits_[icell],gain,adc); myDataFrame.setSample(0,EcalMGPASample(adc,gain)); // std::cout << "myDataFrame" << myDataFrame.sample(0).raw() << std::endl; //ecalDigis.push_back(myDataFrame); } // If the energy+noise is below the threshold, a hit is nevertheless created, otherwise, there is a risk that a "noisy" hit // is afterwards put in this cell which would not be correct. float energy=theCalorimeterHits_[icell]; // std::cout << myDetId << " Energy " << theCalorimeterHits_[icell] << " " << TTTEnergy_[TThashedindex] << " " << isHighInterest(TThashedindex) << std::endl; if ( SRThreshold_ && energy < threshold_ && !isHighInterest(TThashedindex) && applyZSCells_[icell]) { // std::cout << " Killed " << std::endl; theCalorimeterHits_[icell]=0.; energy=0.; } // else // std::cout << " SR " << TTTEnergy_[TThashedindex] << " Cell energy " << energy << " 1" << std::endl; // if( TTTEnergy_[TThashedindex] < SRThreshold_ && energy > threshold_) // std::cout << " SR " << TTTEnergy_[TThashedindex] << " Cell energy " << energy << std::endl; if (energy > sat_) { theCalorimeterHits_[icell]=sat_; energy=sat_; } // std::cout << " Threshold ok " << std::endl; // std::cout << " Raw Id " << barrelRawId_[icell] << std::endl; // std::cout << " Adding " << icell << " " << barrelRawId_[icell] << " " << energy << std::endl; if(energy!=0.) ecalHits.push_back(EcalRecHit(myDetId,energy,0.)); // std::cout << " Hit stored " << std::endl; } // std::cout << " Done " << std::endl; }
void EcalBarrelRecHitsMaker::loadPCaloHits | ( | const edm::Event & | iEvent | ) | [private] |
Definition at line 189 of file EcalBarrelRecHitsMaker.cc.
References calib, calibfactor_, doMisCalib_, relval_parameters_module::energy, eTTmap_, RandomEngine::gaussShoot(), edm::Event::getByLabel(), EcalTrigTowerDetId::hashedIndex(), ecalpyutils::hashedIndex(), EBDetId::ietaAbs(), inputCol_, noise_, noisesigma_, noisified_, noisifyTriggerTowers(), edm::Handle< T >::product(), random_, sinTheta_, theCalibConstants_, theCalorimeterHits_, theFiredCells_, theFiredTTs_, EcalTrigTowerConstituentsMap::towerOf(), and TTTEnergy_.
Referenced by loadEcalBarrelRecHits().
{ edm::Handle<CrossingFrame<PCaloHit> > cf; iEvent.getByLabel(inputCol_,cf); std::auto_ptr<MixCollection<PCaloHit> > colcalo(new MixCollection<PCaloHit>(cf.product(),std::pair<int,int>(0,0) )); theFiredCells_.reserve(colcalo->size()); MixCollection<PCaloHit>::iterator cficalo; MixCollection<PCaloHit>::iterator cficaloend=colcalo->end(); for (cficalo=colcalo->begin(); cficalo!=cficaloend;cficalo++) { unsigned hashedindex = EBDetId(cficalo->id()).hashedIndex(); // the famous 1/0.97 calibration factor is applied here ! // the miscalibration is applied here: float calib = (doMisCalib_) ? calibfactor_*theCalibConstants_[hashedindex]:calibfactor_; // Check if the hit already exists if(theCalorimeterHits_[hashedindex]==0.) { theFiredCells_.push_back(hashedindex); float noise=(noise_==-1.) ? noisesigma_[hashedindex] : noise_ ; if (!noisified_ ) theCalorimeterHits_[hashedindex] += random_->gaussShoot(0.,noise*calib); } // cficalo->energy can be 0 (a 7x7 grid is always built) if there is no noise simulated, in this case the cells should // not be added several times. float energy=(cficalo->energy()==0.) ? 0.000001 : cficalo->energy() ; energy*=calib; theCalorimeterHits_[hashedindex]+=energy; // Now deal with the TTs. EBDetId myDetId(EBDetId(cficalo->id())); EcalTrigTowerDetId towid= eTTmap_->towerOf(myDetId); // std::cout << " Added " << energy << " in " << EBDetId(cficalo->id()) << std::endl; int TThashedindex=towid.hashedIndex(); if(TTTEnergy_[TThashedindex]==0.) { theFiredTTs_.push_back(TThashedindex); // std::cout << " Creating " ; } // std::cout << " Updating " << TThashedindex << " " << energy << " " << sinTheta_[myDetId.ietaAbs()] <<std::endl; TTTEnergy_[TThashedindex]+=energy*sinTheta_[myDetId.ietaAbs()]; // std::cout << " TT " << TThashedindex << " updated, now contains " << TTTEnergy_[TThashedindex] << std::endl; } noisifyTriggerTowers(); noisified_ = true; }
bool EcalBarrelRecHitsMaker::noisifyTriggerTower | ( | unsigned | tthi | ) | [private] |
Definition at line 284 of file EcalBarrelRecHitsMaker.cc.
References barrelRawId_, calib, calibfactor_, cmsDriverOptions::counter, crystalsinTT_, doMisCalib_, relval_parameters_module::energy, RandomEngine::gaussShoot(), EBDetId::ietaAbs(), noise_, noisesigma_, random_, sinTheta_, theCalibConstants_, theCalorimeterHits_, theFiredCells_, theFiredTTs_, treatedTTs_, and TTTEnergy_.
Referenced by noisifyTriggerTowers().
{ // check if the TT has already been treated or not if(treatedTTs_[tthi]) return false; // get the crystals in the TT (this info might need to be cached) // const std::vector<DetId> & xtals=eTTmap_->constituentsOf(theTTDetIds_[tthi]); const std::vector<int> & xtals(crystalsinTT_[tthi]); unsigned nxtals=xtals.size(); unsigned counter =0 ; float energy=0.; for(unsigned ic=0;ic<nxtals;++ic) { unsigned hashedindex=xtals[ic]; // check if the crystal has been already hit // std::cout << " Checking " << EBDetId(barrelRawId_[xtals[ic]]) << " " << theCalorimeterHits_[hashedindex] << std::endl; if(theCalorimeterHits_[hashedindex]==0) { float calib = (doMisCalib_) ? calibfactor_*theCalibConstants_[hashedindex]:calibfactor_; float noise = (noise_==-1.) ? noisesigma_[hashedindex]:noise_; float energy = calib*random_->gaussShoot(0.,noise); theCalorimeterHits_[hashedindex]=energy; // std::cout << " Updating with noise " << tthi << " " << energy << " " << sinTheta_[EBDetId(barrelRawId_[hashedindex]).ietaAbs()] << std::endl; if(TTTEnergy_[tthi]==0.) theFiredTTs_.push_back(tthi); TTTEnergy_[tthi]+=energy*sinTheta_[EBDetId(barrelRawId_[hashedindex]).ietaAbs()]; theFiredCells_.push_back(hashedindex); ++counter; } else energy+=theCalorimeterHits_[hashedindex]; } // std::cout << " Energy " << energy << " Added noise in " << counter << " cells" << std::endl; treatedTTs_[tthi]=true; return true; }
void EcalBarrelRecHitsMaker::noisifyTriggerTowers | ( | ) | [private] |
Definition at line 241 of file EcalBarrelRecHitsMaker.cc.
References recoMuon::in, neighboringTTs_, noise_, noisifyTriggerTower(), nTT, randomNoisifier(), theFiredTTs_, treatedTTs_, and TTTEnergy_.
Referenced by loadPCaloHits().
{ if(noise_==0.) return; // std::cout << " List of TT before" << std::endl; // for(unsigned itt=0;itt<theFiredTTs_.size();++itt) // std::cout << " TT " << theFiredTTs_[itt] << " " << TTTEnergy_[theFiredTTs_[itt]] << std::endl; // std::cout << " Starting to noisify the trigger towers " << std::endl; unsigned nTT=theFiredTTs_.size(); for(unsigned itt=0;itt<nTT;++itt) { // std::cout << "Treating " << theFiredTTs_[itt] << " " << theTTDetIds_[theFiredTTs_[itt]].ieta() << " " << theTTDetIds_[theFiredTTs_[itt]].iphi() << " " << TTTEnergy_[theFiredTTs_[itt]] << std::endl; // shoot noise in the trigger tower noisifyTriggerTower(theFiredTTs_[itt]); // get the neighboring TTs const std::vector<int>& neighbors=neighboringTTs_[theFiredTTs_[itt]]; unsigned nneighbors=neighbors.size(); // inject noise in those towers only if they have not been looked at yet // std::cout << " Now looking at the neighbours " << std::endl; for(unsigned in=0;in<nneighbors;++in) { // std::cout << " TT " << neighbors[in] << " " << theTTDetIds_[neighbors[in]] << " has been treated " << treatedTTs_[neighbors[in]] << std::endl; if(!treatedTTs_[neighbors[in]]) { noisifyTriggerTower(neighbors[in]); if(TTTEnergy_[neighbors[in]]==0.) theFiredTTs_.push_back(neighbors[in]); // std::cout << " Added " << neighbors[in] << " in theFiredTTs_ " << std::endl;; } } } // std::cout << " List of TT after" << std::endl; // for(unsigned itt=0;itt<theFiredTTs_.size();++itt) // { // std::cout << " TT " << theFiredTTs_[itt] << " " << TTTEnergy_[theFiredTTs_[itt]] << std::endl; // const std::vector<int> & xtals=crystalsinTT_[theFiredTTs_[itt]]; // for(unsigned ic=0;ic<xtals.size();++ic) // std::cout << EBDetId::unhashIndex(xtals[ic]) << " " << theCalorimeterHits_[xtals[ic]] << std::endl; // } randomNoisifier(); }
void EcalBarrelRecHitsMaker::randomNoisifier | ( | ) | [private] |
Definition at line 324 of file EcalBarrelRecHitsMaker.cc.
References adcToGeV_, applyZSCells_, calib, calibfactor_, doCustomHighNoise_, doMisCalib_, EBHotFraction_, relval_parameters_module::energy, eTTmap_, RandomEngine::flatShoot(), RandomEngine::gaussShoot(), ecalpyutils::hashedIndex(), highNoiseParameters_, ICMC_, EBDetId::ietaAbs(), EBDetId::kSizeForDenseIndexing, plotscripts::mean(), myGaussianTailGenerator_, noise_, noisesigma_, RandomEngine::poissonShoot(), random_, GaussianTail::shoot(), sinTheta_, theCalibConstants_, theCalorimeterHits_, theFiredCells_, theFiredTTs_, EcalTrigTowerConstituentsMap::towerOf(), TTTEnergy_, and EBDetId::unhashIndex().
Referenced by noisifyTriggerTowers().
{ // first number of cells where some noise will be injected double mean = (double)(EBDetId::kSizeForDenseIndexing-theFiredCells_.size())*EBHotFraction_; unsigned ncells= random_->poissonShoot(mean); // if hot fraction is high (for example, no ZS, inject everywhere) bool fullInjection=(noise_==-1. && !doCustomHighNoise_); if(fullInjection) ncells = EBDetId::kSizeForDenseIndexing; // for debugging // std::vector<int> listofNewTowers; unsigned icell=0; while(icell < ncells) { unsigned cellindex= (unsigned)(floor(random_->flatShoot()*EBDetId::kSizeForDenseIndexing)); if(theCalorimeterHits_[cellindex]==0.) { float energy=0.; if(noise_>0.) energy=myGaussianTailGenerator_->shoot(); if(noise_==-1.) { // in this case the generated noise might be below the threshold but it // does not matter, the threshold will be applied anyway // energy/=sinTheta_[(cellindex<EEDetId::kEEhalf)?cellindex : cellindex-EEDetId::kEEhalf]; float noisemean = (doCustomHighNoise_)? highNoiseParameters_[0]*(*ICMC_)[cellindex]*adcToGeV_: 0.; float noisesigma = (doCustomHighNoise_)? highNoiseParameters_[1]*(*ICMC_)[cellindex]*adcToGeV_ : noisesigma_[cellindex]; energy=random_->gaussShoot(noisemean,noisesigma); // in the case of high noise fluctuation, the ZS should not be applied later if(doCustomHighNoise_) applyZSCells_[cellindex]=false; } float calib = (doMisCalib_) ? calibfactor_*theCalibConstants_[cellindex]:calibfactor_; energy *= calib; theCalorimeterHits_[cellindex]=energy; theFiredCells_.push_back(cellindex); EBDetId myDetId(EBDetId::unhashIndex(cellindex)); // now get the TT int TThashedindex=(eTTmap_->towerOf(myDetId)).hashedIndex(); // std::cout << " myDetIds " << myDetId << " "TTHI " << TThashedindex<< std::endl; if(TTTEnergy_[TThashedindex]==0.) { theFiredTTs_.push_back(TThashedindex); TTTEnergy_[TThashedindex]+=energy*sinTheta_[myDetId.ietaAbs()]; // listofNewTowers.push_back(TThashedindex); } // else // { // std::vector<int>::const_iterator itcheck=std::find(listofNewTowers.begin(),listofNewTowers.end(), // TThashedindex); // if(itcheck==listofNewTowers.end()) // { // std::cout << " EcalBarrelRecHitsMaker : this tower has already been treated " << TTTEnergy_[TThashedindex] << std::endl; // const std::vector<int> & xtals=crystalsinTT_[TThashedindex]; // for(unsigned ic=0;ic<xtals.size();++ic) // std::cout << EBDetId::unhashIndex(xtals[ic]) << " " << theCalorimeterHits_[xtals[ic]] << std::endl; // } // } ++icell; } } // std::cout << " Injected random noise in " << ncells << " cells " << std::endl; }
float EcalBarrelRecHitsMaker::adcToGeV_ [private] |
Definition at line 65 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), and randomNoisifier().
std::vector<int> EcalBarrelRecHitsMaker::applyZSCells_ [private] |
Definition at line 59 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), EcalBarrelRecHitsMaker(), loadEcalBarrelRecHits(), and randomNoisifier().
std::vector<uint32_t> EcalBarrelRecHitsMaker::barrelRawId_ [private] |
Definition at line 64 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), loadEcalBarrelRecHits(), and noisifyTriggerTower().
double EcalBarrelRecHitsMaker::calibfactor_ [private] |
Definition at line 47 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), init(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
std::vector<std::vector<int> > EcalBarrelRecHitsMaker::crystalsinTT_ [private] |
Definition at line 83 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), init(), and noisifyTriggerTower().
bool EcalBarrelRecHitsMaker::doCustomHighNoise_ [private] |
Definition at line 92 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and randomNoisifier().
bool EcalBarrelRecHitsMaker::doDigis_ [private] |
Definition at line 40 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), and loadEcalBarrelRecHits().
bool EcalBarrelRecHitsMaker::doMisCalib_ [private] |
Definition at line 41 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
double EcalBarrelRecHitsMaker::EBHotFraction_ [private] |
Definition at line 48 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and randomNoisifier().
const EcalTrigTowerConstituentsMap* EcalBarrelRecHitsMaker::eTTmap_ [private] |
Definition at line 71 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), loadEcalBarrelRecHits(), loadPCaloHits(), and randomNoisifier().
float EcalBarrelRecHitsMaker::geVToAdc1_ [private] |
Definition at line 66 of file EcalBarrelRecHitsMaker.h.
Referenced by geVtoGainAdc(), and init().
float EcalBarrelRecHitsMaker::geVToAdc2_ [private] |
Definition at line 66 of file EcalBarrelRecHitsMaker.h.
Referenced by geVtoGainAdc(), and init().
float EcalBarrelRecHitsMaker::geVToAdc3_ [private] |
Definition at line 66 of file EcalBarrelRecHitsMaker.h.
Referenced by geVtoGainAdc(), and init().
std::vector<double> EcalBarrelRecHitsMaker::highNoiseParameters_ [private] |
Definition at line 91 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and randomNoisifier().
const std::vector<float>* EcalBarrelRecHitsMaker::ICMC_ [private] |
Definition at line 106 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), and randomNoisifier().
Definition at line 53 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and loadPCaloHits().
unsigned EcalBarrelRecHitsMaker::maxAdc_ [private] |
Definition at line 68 of file EcalBarrelRecHitsMaker.h.
Referenced by geVtoGainAdc(), and init().
double EcalBarrelRecHitsMaker::meanNoiseSigmaEt_ [private] |
Definition at line 102 of file EcalBarrelRecHitsMaker.h.
unsigned EcalBarrelRecHitsMaker::minAdc_ [private] |
Definition at line 67 of file EcalBarrelRecHitsMaker.h.
Referenced by geVtoGainAdc(), and init().
const GaussianTail* EcalBarrelRecHitsMaker::myGaussianTailGenerator_ [private] |
Definition at line 50 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and randomNoisifier().
std::vector<std::vector<int> > EcalBarrelRecHitsMaker::neighboringTTs_ [private] |
Definition at line 81 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), init(), isHighInterest(), and noisifyTriggerTowers().
double EcalBarrelRecHitsMaker::noise_ [private] |
Definition at line 46 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), EcalBarrelRecHitsMaker(), init(), loadPCaloHits(), noisifyTriggerTower(), noisifyTriggerTowers(), and randomNoisifier().
double EcalBarrelRecHitsMaker::noiseADC_ [private] |
Definition at line 104 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and init().
std::vector<float> EcalBarrelRecHitsMaker::noisesigma_ [private] |
Definition at line 101 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
bool EcalBarrelRecHitsMaker::noisified_ [private] |
Definition at line 52 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), EcalBarrelRecHitsMaker(), and loadPCaloHits().
const RandomEngine* EcalBarrelRecHitsMaker::random_ [private] |
Definition at line 49 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
double EcalBarrelRecHitsMaker::refactor_ [private] |
Definition at line 42 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and init().
double EcalBarrelRecHitsMaker::refactor_mean_ [private] |
Definition at line 43 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and init().
float EcalBarrelRecHitsMaker::sat_ [private] |
Definition at line 69 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), and loadEcalBarrelRecHits().
std::vector<float> EcalBarrelRecHitsMaker::sinTheta_ [private] |
Definition at line 99 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), init(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
int EcalBarrelRecHitsMaker::SREtaSize_ [private] |
Definition at line 96 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and init().
int EcalBarrelRecHitsMaker::SRPhiSize_ [private] |
Definition at line 97 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and init().
float EcalBarrelRecHitsMaker::SRThreshold_ [private] |
Definition at line 95 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), isHighInterest(), and loadEcalBarrelRecHits().
float EcalBarrelRecHitsMaker::t1_ [private] |
Definition at line 69 of file EcalBarrelRecHitsMaker.h.
Referenced by geVtoGainAdc(), and init().
float EcalBarrelRecHitsMaker::t2_ [private] |
Definition at line 69 of file EcalBarrelRecHitsMaker.h.
Referenced by geVtoGainAdc(), and init().
std::vector<float> EcalBarrelRecHitsMaker::theCalibConstants_ [private] |
Definition at line 61 of file EcalBarrelRecHitsMaker.h.
Referenced by init(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
std::vector<float> EcalBarrelRecHitsMaker::theCalorimeterHits_ [private] |
Definition at line 55 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), EcalBarrelRecHitsMaker(), loadEcalBarrelRecHits(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
std::vector<int> EcalBarrelRecHitsMaker::theFiredCells_ [private] |
Definition at line 57 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), loadEcalBarrelRecHits(), loadPCaloHits(), noisifyTriggerTower(), and randomNoisifier().
std::vector<unsigned> EcalBarrelRecHitsMaker::theFiredTTs_ [private] |
Definition at line 77 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), loadPCaloHits(), noisifyTriggerTower(), noisifyTriggerTowers(), and randomNoisifier().
std::vector<EcalTrigTowerDetId> EcalBarrelRecHitsMaker::theTTDetIds_ [private] |
Definition at line 73 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and init().
std::vector<int> EcalBarrelRecHitsMaker::theTTofHighInterest_ [private] |
Definition at line 85 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), and isHighInterest().
double EcalBarrelRecHitsMaker::threshold_ [private] |
Definition at line 45 of file EcalBarrelRecHitsMaker.h.
Referenced by EcalBarrelRecHitsMaker(), and loadEcalBarrelRecHits().
std::vector<bool> EcalBarrelRecHitsMaker::treatedTTs_ [private] |
Definition at line 79 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), EcalBarrelRecHitsMaker(), noisifyTriggerTower(), and noisifyTriggerTowers().
std::vector<int> EcalBarrelRecHitsMaker::TTHighInterest_ [private] |
Definition at line 87 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), EcalBarrelRecHitsMaker(), and isHighInterest().
std::vector<float> EcalBarrelRecHitsMaker::TTTEnergy_ [private] |
Definition at line 75 of file EcalBarrelRecHitsMaker.h.
Referenced by clean(), EcalBarrelRecHitsMaker(), isHighInterest(), loadPCaloHits(), noisifyTriggerTower(), noisifyTriggerTowers(), and randomNoisifier().