CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
AfterBurnerGenerator Class Reference
Inheritance diagram for AfterBurnerGenerator:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 AfterBurnerGenerator (const edm::ParameterSet &p)
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 return a new event vertex More...
 
virtual ~AfterBurnerGenerator ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Member Functions

 AfterBurnerGenerator (const AfterBurnerGenerator &p)
 
double GetV1 (double)
 
double GetV2 (double)
 
double GetV3 (double)
 
double GetV4 (double)
 
double GetV5 (double)
 
double GetV6 (double)
 
AfterBurnerGeneratoroperator= (const AfterBurnerGenerator &rhs)
 

Private Attributes

CLHEP::HepRandomEngine * fEngine
 
CLHEP::RandFlat * fFlat
 
bool fixEP
 
double fluct_v1
 
double fluct_v2
 
double fluct_v3
 
double fluct_v4
 
double fluct_v5
 
double fluct_v6
 
CLHEP::RandGaussQ * fRandom
 
TF1 * fv1
 
TF1 * fv2
 
TF1 * fv3
 
TF1 * fv4
 
TF1 * fv5
 
TF1 * fv6
 
int modmethod
 
edm::InputTag modv1
 
edm::InputTag modv2
 
edm::InputTag modv3
 
edm::InputTag modv4
 
edm::InputTag modv5
 
edm::InputTag modv6
 
edm::InputTag sourceLabel
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Definition at line 46 of file AfterBurnerGenerator.cc.

Constructor & Destructor Documentation

AfterBurnerGenerator::AfterBurnerGenerator ( const edm::ParameterSet p)

Definition at line 103 of file AfterBurnerGenerator.cc.

References edm::hlt::Exception, fEngine, fFlat, fluct_v1, fluct_v2, fluct_v3, fluct_v4, fluct_v5, fluct_v6, fRandom, fv1, fv2, fv3, fv4, fv5, fv6, edm::RandomNumberGenerator::getEngine(), edm::ParameterSet::getParameter(), edm::Service< T >::isAvailable(), edm::InputTag::label(), modmethod, modv1, modv2, modv3, modv4, modv5, and modv6.

103  :
104  fEngine(0),
106  fixEP(p.getUntrackedParameter<bool>("fixEP",true))
107 {
108 
110 
111  if ( ! rng.isAvailable()) {
112 
113  throw cms::Exception("Configuration")
114  << "The BaseEvtVtxGenerator requires the RandomNumberGeneratorService\n"
115  "which is not present in the configuration file. You must add the service\n"
116  "in the configuration file or remove the modules that require it.";
117  }
118 
119  CLHEP::HepRandomEngine& engine = rng->getEngine();
120  fEngine = &engine;
121  //cout << "AfterBurner seed = " << fEngine->getSeed() << endl;
122  fRandom = new CLHEP::RandGaussQ(*fEngine);
123  fFlat = new CLHEP::RandFlat(*fEngine);
124 
125  modv1 = p.getParameter<edm::InputTag>("modv1");
126  modv2 = p.getParameter<edm::InputTag>("modv2");
127  modv3 = p.getParameter<edm::InputTag>("modv3");
128  modv4 = p.getParameter<edm::InputTag>("modv4");
129  modv5 = p.getParameter<edm::InputTag>("modv5");
130  modv6 = p.getParameter<edm::InputTag>("modv6");
131 
132  modmethod = p.getParameter<int>("modmethod");
133 
134  fv1 = new TF1("fv1", modv1.label().c_str());
135  fv2 = new TF1("fv2", modv2.label().c_str());
136  fv3 = new TF1("fv3", modv3.label().c_str());
137  fv4 = new TF1("fv4", modv4.label().c_str());
138  fv5 = new TF1("fv5", modv5.label().c_str());
139  fv6 = new TF1("fv6", modv6.label().c_str());
140 
141  fluct_v1 = p.getParameter<double>("fluct_v1");
142  fluct_v2 = p.getParameter<double>("fluct_v2");
143  fluct_v3 = p.getParameter<double>("fluct_v3");
144  fluct_v4 = p.getParameter<double>("fluct_v4");
145  fluct_v5 = p.getParameter<double>("fluct_v5");
146  fluct_v6 = p.getParameter<double>("fluct_v6");
147 
148  produces<double>("v1");
149  produces<double>("v2");
150  produces<double>("v3");
151  produces<double>("v4");
152  produces<double>("v5");
153  produces<double>("v6");
154 
155  produces<double>("flucv1");
156  produces<double>("flucv2");
157  produces<double>("flucv3");
158  produces<double>("flucv4");
159  produces<double>("flucv5");
160  produces<double>("flucv6");
161 
162 }
CLHEP::RandGaussQ * fRandom
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool isAvailable() const
Definition: Service.h:47
CLHEP::HepRandomEngine * fEngine
virtual CLHEP::HepRandomEngine & getEngine() const =0
Use this to get the random number engine, this is the only function most users should call...
std::string const & label() const
Definition: InputTag.h:25
AfterBurnerGenerator::~AfterBurnerGenerator ( )
virtual

Definition at line 164 of file AfterBurnerGenerator.cc.

References fFlat, and fRandom.

165 {
166  delete fRandom;
167  delete fFlat;
168 }
CLHEP::RandGaussQ * fRandom
AfterBurnerGenerator::AfterBurnerGenerator ( const AfterBurnerGenerator p)
private

Copy constructor

Member Function Documentation

double AfterBurnerGenerator::GetV1 ( double  pt)
private

Definition at line 305 of file AfterBurnerGenerator.cc.

References fluct_v1, fRandom, and fv1.

Referenced by produce().

306 {
307  return fRandom->fire(fv1->Eval(pt), fluct_v1);
308 }
CLHEP::RandGaussQ * fRandom
double AfterBurnerGenerator::GetV2 ( double  pt)
private

Definition at line 312 of file AfterBurnerGenerator.cc.

References fluct_v2, fRandom, and fv2.

Referenced by produce().

313 {
314  return fRandom->fire(fv2->Eval(pt), fluct_v2);
315 }
CLHEP::RandGaussQ * fRandom
double AfterBurnerGenerator::GetV3 ( double  pt)
private

Definition at line 318 of file AfterBurnerGenerator.cc.

References fluct_v3, fRandom, and fv3.

Referenced by produce().

319 {
320  return fRandom->fire(fv3->Eval(pt), fluct_v3);
321 }
CLHEP::RandGaussQ * fRandom
double AfterBurnerGenerator::GetV4 ( double  pt)
private

Definition at line 324 of file AfterBurnerGenerator.cc.

References fluct_v4, fRandom, and fv4.

Referenced by produce().

325 {
326  return fRandom->fire(fv4->Eval(pt), fluct_v4);
327 }
CLHEP::RandGaussQ * fRandom
double AfterBurnerGenerator::GetV5 ( double  pt)
private

Definition at line 330 of file AfterBurnerGenerator.cc.

References fluct_v5, fRandom, and fv5.

Referenced by produce().

331 {
332  return fRandom->fire(fv5->Eval(pt), fluct_v5);
333 }
CLHEP::RandGaussQ * fRandom
double AfterBurnerGenerator::GetV6 ( double  pt)
private

Definition at line 336 of file AfterBurnerGenerator.cc.

References fluct_v6, fRandom, and fv6.

Referenced by produce().

337 {
338  return fRandom->fire(fv6->Eval(pt), fluct_v6);
339 }
CLHEP::RandGaussQ * fRandom
AfterBurnerGenerator& AfterBurnerGenerator::operator= ( const AfterBurnerGenerator rhs)
private

Copy assignment operator

void AfterBurnerGenerator::produce ( edm::Event evt,
const edm::EventSetup  
)
virtual

return a new event vertex

Implements edm::EDProducer.

Definition at line 172 of file AfterBurnerGenerator.cc.

References funct::cos(), f, fFlat, fixEP, edm::Event::getByLabel(), GetV1(), GetV2(), GetV3(), GetV4(), GetV5(), GetV6(), modmethod, n, AlCaHLTBitMon_ParallelJobs::p, phi, pi, edm::Event::put(), hitfit::return, funct::sin(), sourceLabel, and mathSSE::sqrt().

173 {
174 
175 
176  Handle<HepMCProduct> HepMCEvt ;
177  evt.getByLabel( sourceLabel, HepMCEvt ) ;
178 
179  HepMC::GenEvent * genevt = (HepMC::GenEvent *)HepMCEvt->GetEvent();
180  HepMC::HeavyIon * hi = genevt->heavy_ion();
181  double ep = 0;
182  if ( hi ) {
183  ep = hi->event_plane_angle();
184  } else {
185  ep = 0;
186  }
187 
188  double meanv1 = 0;
189  double meanv2 = 0;
190  double meanv3 = 0;
191  double meanv4 = 0;
192  double meanv5 = 0;
193  double meanv6 = 0;
194 
195  double sigmav1 = 0;
196  double sigmav2 = 0;
197  double sigmav3 = 0;
198  double sigmav4 = 0;
199  double sigmav5 = 0;
200  double sigmav6 = 0;
201 
202  double v1 = -1;
203  double v2 = -1;
204  double v3 = -1;
205  double v4 = -1;
206  double v5 = -1;
207  double v6 = -1;
208 
209  int n = 0;
210  for ( HepMC::GenEvent::particle_iterator part = genevt->particles_begin();
211  part != genevt->particles_end(); ++part ) {
212  double E = (*part)->momentum().e();
213  double px = (*part)->momentum().x();
214  double py = (*part)->momentum().y();
215  double pz = (*part)->momentum().z();
216  double pt = sqrt(px*px+py*py);
217 
218  do { v1 = GetV1(pt); } while ( v1 < 0);
219  do { v2 = GetV2(pt); } while ( v2 < 0);
220  do { v3 = GetV3(pt); } while ( v3 < 0);
221  do { v4 = GetV4(pt); } while ( v4 < 0);
222  do { v5 = GetV5(pt); } while ( v5 < 0);
223  do { v6 = GetV6(pt); } while ( v6 < 0);
224 
225 
226  meanv1 += v1;
227  meanv2 += v2;
228  meanv3 += v3;
229  meanv4 += v4;
230  meanv5 += v5;
231  meanv6 += v6;
232 
233  sigmav1 += v1*v1;
234  sigmav2 += v2*v2;
235  sigmav3 += v3*v3;
236  sigmav4 += v4*v4;
237  sigmav5 += v5*v5;
238  sigmav6 += v6*v6;
239  n++;
240 
241  if ( modmethod == 0 ) continue;
242  if ( modmethod == 1 ) {
243  double phi;
244  double pmax = 1+2*fabs(v1)+2*fabs(v2)+2*fabs(v3)+2*fabs(v4)+2*fabs(v5)+2*fabs(v6);
245  double ptest = 0;
246  do {
247  phi = fFlat->fire(-CLHEP::pi, CLHEP::pi);
248  ptest = 1+2*v1*cos(phi) + 2*v2*cos(2*phi) + 2*v3*cos(3*phi) + 2*v4*cos(4*phi) + 2*v5*cos(5*phi) + 2*v6*cos(6*phi);
249  } while ( ptest < fFlat->fire(pmax) );
250  if (!fixEP) phi += ep;
251  px = pt*cos(phi);
252  py = pt*sin(phi);
253  (*part)->set_momentum(HepMC::FourVector(px, py, pz, E));
254  }
255  if ( modmethod == 2 ) {
256  HepMC::FourVector p = (*part)->momentum();
257  double phi1 = -999;
258  double dphi = 999;
259  double phi_RP = 0;
260  if ( !fixEP ) phi_RP = ep;
261  double phi0 = p.phi() - v2 * sin( 2*(p.phi() - phi_RP) );
262  phi1 = phi0 - v2*sin( 2*(phi0 - phi_RP) );
263  do {
264  double f = phi0 - p.phi() + 2*v1*sin( phi0 - phi_RP ) + v2 * sin( 2*(phi0-phi_RP) ) + 2./3.*v3*sin( 3*(phi0-phi_RP) ) + 0.5*v4*sin( 4*(phi0-phi_RP) ) + 0.4*v5*sin( 5*(phi0-phi_RP) ) + 1./3.*v6*sin( 6*(phi0-phi_RP) );
265  double fp = 1 + 2*v1*cos(phi0-phi_RP) + 2*v2*cos( 2*(phi0-phi_RP) ) + 2*v3*cos( 3*(phi0-phi_RP) ) + 2*v4*cos( 4*(phi0-phi_RP) ) + 2*v5*cos( 5*(phi0-phi_RP)) + 2*v5*cos( 6*(phi0-phi_RP) ) + 2*v6*cos( 6*(phi0-phi_RP) );
266  phi1 = phi0 - f / fp;
267  dphi = phi1 - phi0;
268  phi0 = phi1;
269  } while ( fabs(dphi)>0.01 );
270  px = pt * cos( phi1 );
271  py = pt * sin( phi1 );
272  (*part)->set_momentum(HepMC::FourVector(px, py, pz, E));
273  }
274 
275  }
276 
277  auto_ptr<double> ptr_v1(new double(meanv1/n)) ;
278  auto_ptr<double> ptr_v2(new double(meanv2/n)) ;
279  auto_ptr<double> ptr_v3(new double(meanv3/n)) ;
280  auto_ptr<double> ptr_v4(new double(meanv4/n)) ;
281  auto_ptr<double> ptr_v5(new double(meanv5/n)) ;
282  auto_ptr<double> ptr_v6(new double(meanv6/n)) ;
283  evt.put(ptr_v1, "v1");
284  evt.put(ptr_v2, "v2");
285  evt.put(ptr_v3, "v3");
286  evt.put(ptr_v4, "v4");
287  evt.put(ptr_v5, "v5");
288  evt.put(ptr_v6, "v6");
289  auto_ptr<double> ptr_fv1(new double(sigmav1/n)) ;
290  auto_ptr<double> ptr_fv2(new double(sigmav2/n)) ;
291  auto_ptr<double> ptr_fv3(new double(sigmav3/n)) ;
292  auto_ptr<double> ptr_fv4(new double(sigmav4/n)) ;
293  auto_ptr<double> ptr_fv5(new double(sigmav5/n)) ;
294  auto_ptr<double> ptr_fv6(new double(sigmav6/n)) ;
295  evt.put(ptr_fv1, "flucv1");
296  evt.put(ptr_fv2, "flucv2");
297  evt.put(ptr_fv3, "flucv3");
298  evt.put(ptr_fv4, "flucv4");
299  evt.put(ptr_fv5, "flucv5");
300  evt.put(ptr_fv6, "flucv6");
301  return ;
302 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
const Double_t pi
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:85
T sqrt(T t)
Definition: SSEVec.h:46
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double f[11][100]
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
part
Definition: HCALResponse.h:21
Definition: DDAxes.h:10

Member Data Documentation

CLHEP::HepRandomEngine* AfterBurnerGenerator::fEngine
private

Definition at line 62 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator().

CLHEP::RandFlat* AfterBurnerGenerator::fFlat
private

Definition at line 92 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), produce(), and ~AfterBurnerGenerator().

bool AfterBurnerGenerator::fixEP
private

Definition at line 76 of file AfterBurnerGenerator.cc.

Referenced by produce().

double AfterBurnerGenerator::fluct_v1
private

Definition at line 77 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV1().

double AfterBurnerGenerator::fluct_v2
private

Definition at line 78 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV2().

double AfterBurnerGenerator::fluct_v3
private

Definition at line 79 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV3().

double AfterBurnerGenerator::fluct_v4
private

Definition at line 80 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV4().

double AfterBurnerGenerator::fluct_v5
private

Definition at line 81 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV5().

double AfterBurnerGenerator::fluct_v6
private

Definition at line 82 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV6().

CLHEP::RandGaussQ* AfterBurnerGenerator::fRandom
private
TF1* AfterBurnerGenerator::fv1
private

Definition at line 84 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV1().

TF1* AfterBurnerGenerator::fv2
private

Definition at line 85 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV2().

TF1* AfterBurnerGenerator::fv3
private

Definition at line 86 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV3().

TF1* AfterBurnerGenerator::fv4
private

Definition at line 87 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV4().

TF1* AfterBurnerGenerator::fv5
private

Definition at line 88 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV5().

TF1* AfterBurnerGenerator::fv6
private

Definition at line 89 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and GetV6().

int AfterBurnerGenerator::modmethod
private

Definition at line 71 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator(), and produce().

edm::InputTag AfterBurnerGenerator::modv1
private

Definition at line 64 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator().

edm::InputTag AfterBurnerGenerator::modv2
private

Definition at line 65 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator().

edm::InputTag AfterBurnerGenerator::modv3
private

Definition at line 66 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator().

edm::InputTag AfterBurnerGenerator::modv4
private

Definition at line 67 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator().

edm::InputTag AfterBurnerGenerator::modv5
private

Definition at line 68 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator().

edm::InputTag AfterBurnerGenerator::modv6
private

Definition at line 69 of file AfterBurnerGenerator.cc.

Referenced by AfterBurnerGenerator().

edm::InputTag AfterBurnerGenerator::sourceLabel
private

Definition at line 63 of file AfterBurnerGenerator.cc.

Referenced by produce().