CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

RPCSimAverageNoise Class Reference

#include <RPCSimAverageNoise.h>

Inheritance diagram for RPCSimAverageNoise:
RPCSim

List of all members.

Public Member Functions

int getClSize (float posX)
 RPCSimAverageNoise (const edm::ParameterSet &config)
void setRandomEngine (CLHEP::HepRandomEngine &eng)
void simulate (const RPCRoll *roll, const edm::PSimHitContainer &rpcHits)
void simulateNoise (const RPCRoll *)
 ~RPCSimAverageNoise ()

Private Member Functions

void init ()

Private Attributes

RPCSynchronizer_rpcSync
double aveCls
double aveEff
std::map< int, std::vector
< double > > 
clsMap
double dtimCs
CLHEP::RandFlat * flatDistribution
CLHEP::RandFlat * flatDistribution2
double frate
double gate
std::ifstream * infile
double lbGate
int N_hits
int nbxing
CLHEP::RandPoissonQ * poissonDistribution_
double rate
double resEle
double resRPC
bool rpcdigiprint
double sspeed
std::vector< double > sum_clsize
double timOff

Detailed Description

Definition at line 30 of file RPCSimAverageNoise.h.


Constructor & Destructor Documentation

RPCSimAverageNoise::RPCSimAverageNoise ( const edm::ParameterSet config)

Definition at line 48 of file RPCSimAverageNoise.cc.

References _rpcSync, aveCls, aveEff, gather_cfg::cout, dtimCs, frate, gate, edm::ParameterSet::getParameter(), lbGate, nbxing, rate, resEle, resRPC, rpcdigiprint, sspeed, and timOff.

                                                                    : 
  RPCSim(config)
{
  aveEff = config.getParameter<double>("averageEfficiency");
  aveCls = config.getParameter<double>("averageClusterSize");
  resRPC = config.getParameter<double>("timeResolution");
  timOff = config.getParameter<double>("timingRPCOffset");
  dtimCs = config.getParameter<double>("deltatimeAdjacentStrip");
  resEle = config.getParameter<double>("timeJitter");
  sspeed = config.getParameter<double>("signalPropagationSpeed");
  lbGate = config.getParameter<double>("linkGateWidth");
  rpcdigiprint = config.getParameter<bool>("printOutDigitizer");
  rate=config.getParameter<double>("Rate");
  nbxing=config.getParameter<int>("Nbxing");
  gate=config.getParameter<double>("Gate");
  frate=config.getParameter<double>("Frate");

  if (rpcdigiprint) {
    std::cout <<"Average Efficiency        = "<<aveEff<<std::endl;
    std::cout <<"Average Cluster Size      = "<<aveCls<<" strips"<<std::endl;
    std::cout <<"RPC Time Resolution       = "<<resRPC<<" ns"<<std::endl;
    std::cout <<"RPC Signal formation time = "<<timOff<<" ns"<<std::endl;
    std::cout <<"RPC adjacent strip delay  = "<<dtimCs<<" ns"<<std::endl;
    std::cout <<"Electronic Jitter         = "<<resEle<<" ns"<<std::endl;
    std::cout <<"Signal propagation time   = "<<sspeed<<" x c"<<std::endl;
    std::cout <<"Link Board Gate Width     = "<<lbGate<<" ns"<<std::endl;
  }

  _rpcSync = new RPCSynchronizer(config);

}
RPCSimAverageNoise::~RPCSimAverageNoise ( )

Definition at line 87 of file RPCSimAverageNoise.cc.

References _rpcSync, flatDistribution, flatDistribution2, and poissonDistribution_.

{
  //Deleting the distribution defined in the constructor
  delete flatDistribution;
  delete flatDistribution2;
  delete poissonDistribution_;
  delete _rpcSync;
}

Member Function Documentation

int RPCSimAverageNoise::getClSize ( float  posX)

Definition at line 96 of file RPCSimAverageNoise.cc.

References clsMap, flatDistribution, RPCSimSetUp::getClsMap(), RPCSim::getRPCSimSetUp(), max(), min, and sum_clsize.

Referenced by simulate().

{

  std::map< int, std::vector<double> > clsMap = getRPCSimSetUp()->getClsMap();

  int cnt = 1;
  int min = 1;
  int max = 1;
  double func=0.0;
  std::vector<double> sum_clsize;

  double rr_cl = flatDistribution->fire();
  if(0.0 <= posX && posX < 0.2)  {
    func = (clsMap[1])[(clsMap[1]).size()-1]*(rr_cl);
    sum_clsize = clsMap[1];
  }
  if(0.2 <= posX && posX < 0.4) {
    func = (clsMap[2])[(clsMap[2]).size()-1]*(rr_cl);
    sum_clsize = clsMap[2];
  }
  if(0.4 <= posX && posX < 0.6) {
    func = (clsMap[3])[(clsMap[3]).size()-1]*(rr_cl);
    sum_clsize = clsMap[3];
  }
  if(0.6 <= posX && posX < 0.8) {
    func = (clsMap[4])[(clsMap[4]).size()-1]*(rr_cl);
    sum_clsize = clsMap[4];
  }
  if(0.8 <= posX && posX < 1.0)  {
    func = (clsMap[5])[(clsMap[5]).size()-1]*(rr_cl);
    sum_clsize = clsMap[5];
  }

  for(vector<double>::iterator iter = sum_clsize.begin();
      iter != sum_clsize.end(); ++iter){
    cnt++;
    if(func > (*iter)){
      min = cnt;
    }
    else if(func < (*iter)){
      max = cnt;
      break;
    }
  }
  return min;
}
void RPCSimAverageNoise::init ( void  ) [inline, private, virtual]

Implements RPCSim.

Definition at line 47 of file RPCSimAverageNoise.h.

{};
void RPCSimAverageNoise::setRandomEngine ( CLHEP::HepRandomEngine &  eng) [virtual]

Implements RPCSim.

Definition at line 80 of file RPCSimAverageNoise.cc.

References _rpcSync, flatDistribution, flatDistribution2, poissonDistribution_, and RPCSynchronizer::setRandomEngine().

                                                                 {
  flatDistribution = new CLHEP::RandFlat(eng);
  flatDistribution2 = new CLHEP::RandFlat(eng);
  poissonDistribution_ = new CLHEP::RandPoissonQ(eng);
  _rpcSync->setRandomEngine(eng);
}
void RPCSimAverageNoise::simulate ( const RPCRoll roll,
const edm::PSimHitContainer rpcHits 
) [virtual]

Implements RPCSim.

Definition at line 145 of file RPCSimAverageNoise.cc.

References _rpcSync, aveEff, RPCRoll::centreOfStrip(), edm::DetSet< T >::clear(), flatDistribution, getClSize(), RPCSim::getRPCSimSetUp(), RPCSynchronizer::getSimHitBx(), i, RPCRoll::id(), RPCRoll::nstrips(), DetId::rawId(), RPCSynchronizer::setRPCSimSetUp(), RPCRoll::specs(), RPCRoll::strip(), RPCSim::strips, RPCSim::theDetectorHitMap, RPCSim::theRpcDigiSimLinks, RPCRollSpecs::topology(), and PV3DBase< T, PVType, FrameType >::x().

{
  _rpcSync->setRPCSimSetUp(getRPCSimSetUp());
  theRpcDigiSimLinks.clear();
  theDetectorHitMap.clear();
  theRpcDigiSimLinks = RPCDigiSimLinks(roll->id().rawId());

  const Topology& topology=roll->specs()->topology();

  for (edm::PSimHitContainer::const_iterator _hit = rpcHits.begin();
       _hit != rpcHits.end(); ++_hit){

    // Here I hould check if the RPC are up side down;
    const LocalPoint& entr=_hit->entryPoint();
    int time_hit = _rpcSync->getSimHitBx(&(*_hit));
    float posX = roll->strip(_hit->localPosition()) - static_cast<int>(roll->strip(_hit->localPosition()));

    // Effinciecy

    if (flatDistribution->fire() < aveEff) {

      int centralStrip = topology.channel(entr)+1;  
      int fstrip=centralStrip;
      int lstrip=centralStrip;
      // Compute the cluster size
      double w = flatDistribution->fire(1);
      if (w < 1.e-10) w=1.e-10;
      int clsize = this->getClSize(posX);

      std::vector<int> cls;
      cls.push_back(centralStrip);
      if (clsize > 1){
        for (int cl = 0; cl < (clsize-1)/2; cl++)
          {
            if (centralStrip - cl -1 >= 1  ){
              fstrip = centralStrip-cl-1;
              cls.push_back(fstrip);
            }
            if (centralStrip + cl + 1 <= roll->nstrips() ){
              lstrip = centralStrip+cl+1;
              cls.push_back(lstrip);
            }
          }
        if (clsize%2 == 0 ){
          // insert the last strip according to the 
          // simhit position in the central strip 
          double deltaw=roll->centreOfStrip(centralStrip).x()-entr.x();
          if (deltaw<0.) {
            if (lstrip < roll->nstrips() ){
              lstrip++;
              cls.push_back(lstrip);
            }
          }else{
            if (fstrip > 1 ){
              fstrip--;
              cls.push_back(fstrip);
            }
          }
        }
      }

      for (std::vector<int>::iterator i=cls.begin(); i!=cls.end();i++){
        // Check the timing of the adjacent strip
        std::pair<int, int> digi(*i,time_hit );

        theDetectorHitMap.insert(DetectorHitMap::value_type(digi,&(*_hit)));
        strips.insert(digi);
      }
    }
  }
}
void RPCSimAverageNoise::simulateNoise ( const RPCRoll roll) [virtual]

Implements RPCSim.

Definition at line 218 of file RPCSimAverageNoise.cc.

References compareJSON::const, flatDistribution2, frate, gate, RPCSim::getRPCSimSetUp(), i, RPCRoll::id(), j, TrapezoidalStripTopology::localPosition(), RectangularStripTopology::localPosition(), N_hits, nbxing, RPCRoll::nstrips(), poissonDistribution_, DetId::rawId(), RPCDetId::region(), RectangularStripTopology::stripLength(), TrapezoidalStripTopology::stripLength(), RPCSim::strips, RPCRoll::topology(), and x.

{
  RPCDetId rpcId = roll->id();
  std::vector<float> vnoise = (getRPCSimSetUp())->getNoise(rpcId.rawId());
  unsigned int nstrips = roll->nstrips();

  double area = 0.0;
  
  if ( rpcId.region() == 0 )
    {
      const RectangularStripTopology* top_ = dynamic_cast<const
        RectangularStripTopology*>(&(roll->topology()));
      float xmin = (top_->localPosition(0.)).x();
      float xmax = (top_->localPosition((float)roll->nstrips())).x();
      float striplength = (top_->stripLength());
      area = striplength*(xmax-xmin);
    }
  else
    {
      const TrapezoidalStripTopology* top_=dynamic_cast<const TrapezoidalStripTopology*>(&(roll->topology()));
      float xmin = (top_->localPosition(0.)).x();
      float xmax = (top_->localPosition((float)roll->nstrips())).x();
      float striplength = (top_->stripLength());
      area = striplength*(xmax-xmin);
    }
  for(unsigned int j = 0; j < vnoise.size(); ++j){
    
    if(j >= nstrips) break; 

    double ave = frate*vnoise[j]*nbxing*gate*area*1.0e-9;
    N_hits = poissonDistribution_->fire(ave);

    for (int i = 0; i < N_hits; i++ ){
      int time_hit = (static_cast<int>(flatDistribution2->fire((nbxing*gate)/gate))) - nbxing/2;
      std::pair<int, int> digi(j+1,time_hit);
      strips.insert(digi);
    }
  }
}

Member Data Documentation

double RPCSimAverageNoise::aveCls [private]

Definition at line 50 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

double RPCSimAverageNoise::aveEff [private]

Definition at line 47 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise(), and simulate().

std::map< int, std::vector<double> > RPCSimAverageNoise::clsMap [private]

Definition at line 65 of file RPCSimAverageNoise.h.

Referenced by getClSize().

double RPCSimAverageNoise::dtimCs [private]

Definition at line 53 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

CLHEP::RandFlat* RPCSimAverageNoise::flatDistribution [private]

Definition at line 73 of file RPCSimAverageNoise.h.

Referenced by getClSize(), setRandomEngine(), simulate(), and ~RPCSimAverageNoise().

CLHEP::RandFlat* RPCSimAverageNoise::flatDistribution2 [private]

Definition at line 76 of file RPCSimAverageNoise.h.

Referenced by setRandomEngine(), simulateNoise(), and ~RPCSimAverageNoise().

double RPCSimAverageNoise::frate [private]

Definition at line 63 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise(), and simulateNoise().

double RPCSimAverageNoise::gate [private]

Definition at line 62 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise(), and simulateNoise().

std::ifstream* RPCSimAverageNoise::infile [private]

Definition at line 67 of file RPCSimAverageNoise.h.

double RPCSimAverageNoise::lbGate [private]

Definition at line 56 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

Definition at line 59 of file RPCSimAverageNoise.h.

Referenced by simulateNoise().

Definition at line 60 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise(), and simulateNoise().

CLHEP::RandPoissonQ* RPCSimAverageNoise::poissonDistribution_ [private]

Definition at line 77 of file RPCSimAverageNoise.h.

Referenced by setRandomEngine(), simulateNoise(), and ~RPCSimAverageNoise().

double RPCSimAverageNoise::rate [private]

Definition at line 61 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

double RPCSimAverageNoise::resEle [private]

Definition at line 54 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

double RPCSimAverageNoise::resRPC [private]

Definition at line 51 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

Definition at line 57 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

double RPCSimAverageNoise::sspeed [private]

Definition at line 55 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().

std::vector<double> RPCSimAverageNoise::sum_clsize [private]

Definition at line 66 of file RPCSimAverageNoise.h.

Referenced by getClSize().

double RPCSimAverageNoise::timOff [private]

Definition at line 52 of file RPCSimAverageNoise.h.

Referenced by RPCSimAverageNoise().