CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

RPCSimAverage Class Reference

#include <RPCSimAverage.h>

Inheritance diagram for RPCSimAverage:
RPCSim

List of all members.

Public Member Functions

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

Private Member Functions

void init ()

Private Attributes

RPCSynchronizer_rpcSync
double aveCls
double aveEff
std::map< int, std::vector
< double > > 
clsMap
double dtimCs
CLHEP::RandFlat * flatDistribution1
CLHEP::RandFlat * flatDistribution2
CLHEP::RandFlat * flatDistribution_
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

Class for the RPC strip response simulation based on a parametrized model (ORCA-based)

Author:
Raffaello Trentadue -- INFN Bari

Class for the RPC strip response simulation based on a parametrized model (ORCA-based)

Author:
Borislav Pavlov -- University of Sofia

Definition at line 30 of file RPCSimAverage.h.


Constructor & Destructor Documentation

RPCSimAverage::RPCSimAverage ( const edm::ParameterSet config)

Definition at line 48 of file RPCSimAverage.cc.

References _rpcSync, aveCls, aveEff, gather_cfg::cout, dtimCs, 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");

  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);
}
RPCSimAverage::~RPCSimAverage ( )

Member Function Documentation

int RPCSimAverage::getClSize ( float  posX)

Definition at line 95 of file RPCSimAverage.cc.

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

Referenced by simulate().

{

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

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

  double rr_cl = flatDistribution_->fire(1);
  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)){
      break;
    }
  }
  return min;
}
void RPCSimAverage::init ( void  ) [inline, private, virtual]

Implements RPCSim.

Definition at line 47 of file RPCSimAverage.h.

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

Implements RPCSim.

Definition at line 79 of file RPCSimAverage.cc.

References _rpcSync, flatDistribution1, flatDistribution2, flatDistribution_, poissonDistribution, and RPCSynchronizer::setRandomEngine().

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

Implements RPCSim.

Definition at line 142 of file RPCSimAverage.cc.

References _rpcSync, aveEff, RPCRoll::centreOfStrip(), cl, edm::DetSet< T >::clear(), alignCSCRings::e, 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(), w(), 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();

    //    const LocalPoint& exit=_hit->exitPoint();

    float posX = roll->strip(_hit->localPosition()) - static_cast<int>(roll->strip(_hit->localPosition()));
    int time_hit = _rpcSync->getSimHitBx(&(*_hit));

    // Effinciecy

    if (flatDistribution_->fire(1) < 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);
          }
        for (int cl = 0; cl < (clsize-1)/2; cl++)
          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 RPCSimAverage::simulateNoise ( const RPCRoll roll) [virtual]

Implements RPCSim.

Definition at line 216 of file RPCSimAverage.cc.

References compareJSON::const, flatDistribution1, flatDistribution2, gate, i, RPCRoll::id(), N_hits, nbxing, RPCRoll::nstrips(), poissonDistribution, rate, RPCDetId::region(), strip(), RPCSim::strips, RPCRoll::topology(), and x.

{

  RPCDetId rpcId = roll->id();
  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);
    }

  double ave = rate*nbxing*gate*area*1.0e-9;

  N_hits = poissonDistribution->fire(ave);

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

}

Member Data Documentation

Definition at line 68 of file RPCSimAverage.h.

Referenced by RPCSimAverage(), setRandomEngine(), simulate(), and ~RPCSimAverage().

double RPCSimAverage::aveCls [private]

Definition at line 50 of file RPCSimAverage.h.

Referenced by RPCSimAverage().

double RPCSimAverage::aveEff [private]

Definition at line 47 of file RPCSimAverage.h.

Referenced by RPCSimAverage(), and simulate().

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

Definition at line 64 of file RPCSimAverage.h.

Referenced by getClSize().

double RPCSimAverage::dtimCs [private]

Definition at line 53 of file RPCSimAverage.h.

Referenced by RPCSimAverage().

CLHEP::RandFlat* RPCSimAverage::flatDistribution1 [private]

Definition at line 72 of file RPCSimAverage.h.

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

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

Definition at line 73 of file RPCSimAverage.h.

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

CLHEP::RandFlat* RPCSimAverage::flatDistribution_ [private]

Definition at line 71 of file RPCSimAverage.h.

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

double RPCSimAverage::gate [private]

Definition at line 62 of file RPCSimAverage.h.

Referenced by RPCSimAverage(), and simulateNoise().

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

Definition at line 66 of file RPCSimAverage.h.

double RPCSimAverage::lbGate [private]

Definition at line 56 of file RPCSimAverage.h.

Referenced by RPCSimAverage().

int RPCSimAverage::N_hits [private]

Definition at line 59 of file RPCSimAverage.h.

Referenced by simulateNoise().

int RPCSimAverage::nbxing [private]

Definition at line 60 of file RPCSimAverage.h.

Referenced by RPCSimAverage(), and simulateNoise().

CLHEP::RandPoissonQ* RPCSimAverage::poissonDistribution [private]

Definition at line 74 of file RPCSimAverage.h.

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

double RPCSimAverage::rate [private]

Definition at line 61 of file RPCSimAverage.h.

Referenced by RPCSimAverage(), and simulateNoise().

double RPCSimAverage::resEle [private]

Definition at line 54 of file RPCSimAverage.h.

Referenced by RPCSimAverage().

double RPCSimAverage::resRPC [private]

Definition at line 51 of file RPCSimAverage.h.

Referenced by RPCSimAverage().

Definition at line 57 of file RPCSimAverage.h.

Referenced by RPCSimAverage().

double RPCSimAverage::sspeed [private]

Definition at line 55 of file RPCSimAverage.h.

Referenced by RPCSimAverage().

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

Definition at line 65 of file RPCSimAverage.h.

Referenced by getClSize().

double RPCSimAverage::timOff [private]

Definition at line 52 of file RPCSimAverage.h.

Referenced by RPCSimAverage().