CMS 3D CMS Logo

Public Types | Public Member Functions | Private Member Functions | Private Attributes

BeamSpotFromSimProducer Class Reference

Inheritance diagram for BeamSpotFromSimProducer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Types

enum  { dimension = 7 }
typedef math::Error< dimension >
::type 
CovarianceMatrix
typedef math::XYZPoint Point

Public Member Functions

 BeamSpotFromSimProducer (const edm::ParameterSet &iConfig)
 Constructor/destructor.
virtual ~BeamSpotFromSimProducer ()

Private Member Functions

virtual void beginRun (edm::Run &run, const edm::EventSetup &iSetup)
virtual void endRun (edm::Run &run, const edm::EventSetup &iSetup)
virtual void produce (edm::Event &iEvent, const edm::EventSetup &iSetup)

Private Attributes

double dxdz_
double dydz_
CovarianceMatrix error_
double meanX_
double meanY_
double meanZ_
Point point_
double sigmaX_
double sigmaY_
double sigmaZ_

Detailed Description

Definition at line 45 of file BeamSpotFromSimProducer.cc.


Member Typedef Documentation

Definition at line 52 of file BeamSpotFromSimProducer.cc.

Definition at line 50 of file BeamSpotFromSimProducer.cc.


Member Enumeration Documentation

anonymous enum
Enumerator:
dimension 

Definition at line 51 of file BeamSpotFromSimProducer.cc.

{ dimension = 7 };

Constructor & Destructor Documentation

BeamSpotFromSimProducer::BeamSpotFromSimProducer ( const edm::ParameterSet iConfig) [explicit]

Constructor/destructor.

Definition at line 88 of file BeamSpotFromSimProducer.cc.

{
  produces< reco::BeamSpot >( "BeamSpot" ).setBranchAlias("BeamSpot");
}
BeamSpotFromSimProducer::~BeamSpotFromSimProducer ( ) [virtual]

Definition at line 95 of file BeamSpotFromSimProducer.cc.

{
}  

Member Function Documentation

void BeamSpotFromSimProducer::beginRun ( edm::Run run,
const edm::EventSetup iSetup 
) [private, virtual]

///////////////// /// MANDATORY METHODS ///

Reimplemented from edm::EDProducer.

Definition at line 108 of file BeamSpotFromSimProducer.cc.

References gather_cfg::cout.

{
  std::cout << "BeamSpotFromSimProducer" << std::endl;
}
void BeamSpotFromSimProducer::endRun ( edm::Run run,
const edm::EventSetup iSetup 
) [private, virtual]

Things to be done at the exit of the event Loop

Reimplemented from edm::EDProducer.

Definition at line 101 of file BeamSpotFromSimProducer.cc.

{
}
void BeamSpotFromSimProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
) [private, virtual]

Prepare output

Implements edm::EDProducer.

Definition at line 115 of file BeamSpotFromSimProducer.cc.

References funct::cos(), reco::BeamSpot::Fake, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterSet(), edm::Event::getProcessParameterSet(), j, gen::k, edm::Event::processHistory(), edm::Event::put(), funct::sin(), edm::ProcessHistory::size(), mathSSE::sqrt(), and AlCaHLTBitMon_QueryRunRegistry::string.

{


  static bool gotProcessParameterSet=false;

  if(!gotProcessParameterSet){

    gotProcessParameterSet=true;

    edm::ParameterSet ps;
    //fetch the real process name using the processHistory accessor of 
    //the edm::Event, then find the     
    // last-1 entry and ask for it's processName

    unsigned int iProcess=iEvent.processHistory().size();
    //std::cout << "Process History size = "<<iProcess<<std::endl;
    //for (unsigned int i=0;i<iProcess;i++){
    //  std::cout << "Process "<<i<<" name: "
    //          <<iEvent.processHistory()[i].processName()<<std::endl;
    //}

    if (iProcess>0) iProcess=0;

    std::string nameProcess = iEvent.processHistory()[iProcess].processName();
    //std::cout << "nameProcess:"<<nameProcess<<std::endl;
    
    // Now ask the edm::Event for the top level parameter set of this process, 
    //return it in ps

    iEvent.getProcessParameterSet(nameProcess,ps);

    // The VtxSmeared has a parameter name "SigmaZ" this will 
    // retrieve it.

    //cout << "Will print out ps:" << endl;
    //cout << ps << endl;
    //cout << "Done printing ps" << endl;

    //    double SigmaZ = ps.getParameterSet("HLLHCVtxSmearingParameters").getParameter<double>("SigmaZ");

    double SigmaX = ps.getParameterSet("VtxSmeared").getParameter<double>("SigmaX");
    double SigmaY = ps.getParameterSet("VtxSmeared").getParameter<double>("SigmaY");
    double SigmaZ = ps.getParameterSet("VtxSmeared").getParameter<double>("SigmaZ");

    meanX_ = ps.getParameterSet("VtxSmeared").getParameter<double>("MeanX");
    meanY_ = ps.getParameterSet("VtxSmeared").getParameter<double>("MeanY");
    meanZ_ = ps.getParameterSet("VtxSmeared").getParameter<double>("MeanZ");

    double HalfCrossingAngle = ps.getParameterSet("VtxSmeared").getParameter<double>("HalfCrossingAngle");
    double CrabAngle = ps.getParameterSet("VtxSmeared").getParameter<double>("CrabAngle");

    static const double sqrtOneHalf=sqrt(0.5);

    double sinbeta=sin(CrabAngle);
    double cosbeta=cos(CrabAngle);
    double cosalpha=cos(HalfCrossingAngle);
    double sinamb=sin(HalfCrossingAngle-CrabAngle);
    double cosamb=sin(HalfCrossingAngle-CrabAngle);

    sigmaX_=sqrtOneHalf*hypot(SigmaZ*sinbeta,SigmaX*cosbeta)/cosalpha;

    sigmaY_=sqrtOneHalf*SigmaY;

    sigmaZ_=sqrtOneHalf*hypot(sinamb/SigmaX,cosamb/SigmaZ);
  
    dxdz_=0.0;
    dydz_=0.0;
    
    point_=Point(meanX_,meanY_,meanZ_);

    for (unsigned int j=0; j<7; j++) {
      for (unsigned int k=j; k<7; k++) {
        error_(j,k) = 0.0;
      }
    }


    //arbitrarily set position errors to 1/10 of width.
    error_(0,0)=0.1*sigmaX_;
    error_(1,1)=0.1*sigmaY_;
    error_(2,2)=0.1*sigmaZ_;
    
    //arbitrarily set width errors to 1/10 of width.
    error_(3,3)=0.1*sigmaZ_;
    error_(6,6)=0.1*sigmaX_;

    //arbitrarily set error on beam axis direction to 1/100 of
    //beam aspect ratio    
    error_(4,4)=0.01*sigmaX_/sigmaZ_;
    error_(5,5)=error_(4,4);
    
  }


  std::auto_ptr< reco::BeamSpot > BeamSpotForOutput( new reco::BeamSpot(point_,
                                                                        sigmaZ_,
                                                                        dxdz_,
                                                                        dydz_,
                                                                        sigmaX_,
                                                                        error_,
                                                                        reco::BeamSpot::Fake));


  iEvent.put( BeamSpotForOutput, "BeamSpot");

} 

Member Data Documentation

Definition at line 77 of file BeamSpotFromSimProducer.cc.

Definition at line 78 of file BeamSpotFromSimProducer.cc.

Definition at line 81 of file BeamSpotFromSimProducer.cc.

Definition at line 69 of file BeamSpotFromSimProducer.cc.

Definition at line 70 of file BeamSpotFromSimProducer.cc.

Definition at line 71 of file BeamSpotFromSimProducer.cc.

Definition at line 80 of file BeamSpotFromSimProducer.cc.

Definition at line 73 of file BeamSpotFromSimProducer.cc.

Definition at line 74 of file BeamSpotFromSimProducer.cc.

Definition at line 75 of file BeamSpotFromSimProducer.cc.