ATLAS Offline Software
AddFlowByShifting.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // File: Generators/FlowAfterburner/AddFlowByShifting.h
6 // Description:
7 // This code is used to introduce particle flow
8 // to particles from generated events
9 // It works by modifying phi angles of particles
10 // according to requested flow type and magnitude
11 //
12 // It takes from SG a container of tracks as input
13 // and registers in SG a new container with modified tracks on output
14 //
15 // It currently uses Hijing generator specific class HijingEventParams
16 // with truth event parameters information
17 //
18 // AuthorList:
19 // Andrzej Olszewski: Initial Code February 2006
20 
21 #ifndef ADDFLOWBYSHIFTING_H
22 #define ADDFLOWBYSHIFTING_H
23 
25 #include "GaudiKernel/ServiceHandle.h"
26 //
28 #include "AtlasHepMC/GenParticle.h" //typedef GenParticlePtr
29 #include "AtlasHepMC/GenVertex.h" //GenParticlePtr
30 
31 
32 
33 class HijingEventParams;
34 namespace CLHEP{
35  class HepRandomEngine;
36 }
37 class TGraph;
38 
40 public:
41  AddFlowByShifting(const std::string& name, ISvcLocator* pSvcLocator);
45 
46  //functions used for root finding when using the "exact"(and not the "approximate") method
47  static double vn_func (double x, void *params);
48 
49 
50 private:
51  CLHEP::HepRandomEngine* getRandomEngine(const std::string& streamName, const EventContext& ctx) const;
52 
53  double SetParentToRanPhi(HepMC::GenParticlePtr parent, CLHEP::HepRandomEngine *rndmEngine);
55  const HijingEventParams *hijing_pars);
57 
58 
59  // flow functions to set the vn values
60  void (AddFlowByShifting::*m_flow_function) (double b, double eta, double pt);//function pointer which is set to one of the functions below
61  void jjia_minbias_new (double b, double eta, double pt);
62  void jjia_minbias_new_v2only(double b, double eta, double pt);
63  void fixed_vn (double b, double eta, double pt);
64  void fixed_v2 (double b, double eta, double pt);
65  void jjia_minbias_old (double b, double eta, double pt);
66  void ao_test (double b, double eta, double pt);
67  void custom_vn (double b, double eta, double pt);
68  void p_Pb_cent_eta_indep (double b, double eta, double pt); //for p_Pb
69  void OO_eta_indep (double b, double eta, double pt); //for OO
70 
71  TGraph *m_graph_fluc{};//TGraph storing the v2_RP/delta Vs b_imp
72  void Set_EbE_Fluctuation_Multipliers(HepMC::GenVertexPtr mainvtx, float b, CLHEP::HepRandomEngine *rndmEngine);
73 
74  // Random number service
75  ServiceHandle<IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc"};
76 
77  // Setable Properties:-
78  StringProperty m_inkey {this, "McTruthKey" , "GEN_EVENT" }; //FIXME use Read/WriteHandles
79  StringProperty m_outkey {this, "McFlowKey" , "FLOW_EVENT" }; //FIXME use Read/WriteHandles
80  IntegerProperty m_ranphi_sw {this, "RandomizePhi" , 0 };
81  StringProperty m_flow_function_name {this, "FlowFunctionName" , "jjia_minbias_new"};
82  StringProperty m_flow_implementation{this, "FlowImplementation", "exact" };
84  BooleanProperty m_flow_fluctuations {this, "FlowFluctuations" , false };
85  IntegerProperty m_floweta_sw {this, "FlowEtaSwitch" , 0 };
86  FloatProperty m_flow_maxeta {this, "FlowMaxEtaCut" , 10.0 };
87  FloatProperty m_flow_mineta {this, "FlowMinEtaCut" , 0.f };
88  IntegerProperty m_flowpt_sw {this, "FlowPtSwitch" , 0 };
89  FloatProperty m_flow_maxpt {this, "FlowMaxPtCut" , 1000000.f };
90  FloatProperty m_flow_minpt {this, "FlowMinPtCut" , 0.f };
91  IntegerProperty m_flowb_sw {this, "FlowBSwitch" , 0 };//currently not used
92  FloatProperty m_custom_v1 {this, "custom_v1" , 0.f };
93  FloatProperty m_custom_v2 {this, "custom_v2" , 0.f };
94  FloatProperty m_custom_v3 {this, "custom_v3" , 0.f };
95  FloatProperty m_custom_v4 {this, "custom_v4" , 0.f };
96  FloatProperty m_custom_v5 {this, "custom_v5" , 0.f };
97  FloatProperty m_custom_v6 {this, "custom_v6" , 0.f };
98 
100 
101  enum Harmonic{
103  v1=0,
104  v2=1,
105  v3=2,
106  v4=3,
107  v5=4,
108  v6=5,
109  };
110  float m_psi_n [Harmonic::NumHar];
111  float m_v_n [Harmonic::NumHar];
112  float m_EbE_Multiplier_vn[Harmonic::NumHar];
113 };
114 
115 #endif
AddFlowByShifting::m_flow_function_name
StringProperty m_flow_function_name
Definition: AddFlowByShifting.h:81
HepMC::GenVertexPtr
HepMC::GenVertex * GenVertexPtr
Definition: GenVertex.h:59
AddFlowByShifting::m_flow_function
void(AddFlowByShifting::* m_flow_function)(double b, double eta, double pt)
Definition: AddFlowByShifting.h:60
AddFlowByShifting::finalize
StatusCode finalize()
Definition: AddFlowByShifting.cxx:351
AddFlowByShifting::m_flow_implementation
StringProperty m_flow_implementation
Definition: AddFlowByShifting.h:82
AddFlowByShifting::m_flow_implementation_type
int m_flow_implementation_type
Definition: AddFlowByShifting.h:83
AddFlowByShifting::Set_EbE_Fluctuation_Multipliers
void Set_EbE_Fluctuation_Multipliers(HepMC::GenVertexPtr mainvtx, float b, CLHEP::HepRandomEngine *rndmEngine)
Definition: AddFlowByShifting.cxx:876
AddFlowByShifting::v4
@ v4
Definition: AddFlowByShifting.h:106
AddFlowByShifting::m_graph_fluc
TGraph * m_graph_fluc
Definition: AddFlowByShifting.h:71
AddFlowByShifting::getRandomEngine
CLHEP::HepRandomEngine * getRandomEngine(const std::string &streamName, const EventContext &ctx) const
Definition: AddFlowByShifting.cxx:221
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
AddFlowByShifting::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition: AddFlowByShifting.h:75
GenVertex.h
HepMC::GenParticlePtr
GenParticle * GenParticlePtr
Definition: GenParticle.h:37
AddFlowByShifting::AddFlowToParent
double AddFlowToParent(HepMC::GenParticlePtr parent, const HijingEventParams *hijing_pars)
Definition: AddFlowByShifting.cxx:483
test_pyathena.pt
pt
Definition: test_pyathena.py:11
AddFlowByShifting::m_custom_v2
FloatProperty m_custom_v2
Definition: AddFlowByShifting.h:93
AddFlowByShifting::v1
@ v1
Definition: AddFlowByShifting.h:103
x
#define x
GenParticle.h
AddFlowByShifting::MoveDescendantsToParent
void MoveDescendantsToParent(HepMC::GenParticlePtr parent, double phishift)
Definition: AddFlowByShifting.cxx:391
AddFlowByShifting::m_psi_n
float m_psi_n[Harmonic::NumHar]
Definition: AddFlowByShifting.h:110
AddFlowByShifting::AddFlowByShifting
AddFlowByShifting(const std::string &name, ISvcLocator *pSvcLocator)
Definition: AddFlowByShifting.cxx:56
AddFlowByShifting::m_custom_v4
FloatProperty m_custom_v4
Definition: AddFlowByShifting.h:95
AthAlgorithm.h
AddFlowByShifting::m_flowb_sw
IntegerProperty m_flowb_sw
Definition: AddFlowByShifting.h:91
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AddFlowByShifting::m_EbE_Multiplier_vn
float m_EbE_Multiplier_vn[Harmonic::NumHar]
Definition: AddFlowByShifting.h:112
AddFlowByShifting::m_flow_fluctuations
BooleanProperty m_flow_fluctuations
Definition: AddFlowByShifting.h:84
AddFlowByShifting::m_custom_v6
FloatProperty m_custom_v6
Definition: AddFlowByShifting.h:97
HijingEventParams
Definition: HijingEventParams.h:23
CLHEP
STD'S.
Definition: CaloNoiseCompCondAlg.h:58
AddFlowByShifting::jjia_minbias_old
void jjia_minbias_old(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:667
AddFlowByShifting::m_flowpt_sw
IntegerProperty m_flowpt_sw
Definition: AddFlowByShifting.h:88
AddFlowByShifting::custom_vn
void custom_vn(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:693
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AddFlowByShifting::m_inkey
StringProperty m_inkey
Definition: AddFlowByShifting.h:78
AddFlowByShifting::m_flow_mineta
FloatProperty m_flow_mineta
Definition: AddFlowByShifting.h:87
AddFlowByShifting::m_v_n
float m_v_n[Harmonic::NumHar]
Definition: AddFlowByShifting.h:111
AddFlowByShifting::execute
StatusCode execute()
Definition: AddFlowByShifting.cxx:231
AddFlowByShifting::m_ranphi_sw
IntegerProperty m_ranphi_sw
Definition: AddFlowByShifting.h:80
AthAlgorithm
Definition: AthAlgorithm.h:47
WriteHiveWithMetaData.streamName
string streamName
Definition: WriteHiveWithMetaData.py:23
AddFlowByShifting::v5
@ v5
Definition: AddFlowByShifting.h:107
AddFlowByShifting::m_flow_maxeta
FloatProperty m_flow_maxeta
Definition: AddFlowByShifting.h:86
AddFlowByShifting::jjia_minbias_new_v2only
void jjia_minbias_new_v2only(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:632
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
AddFlowByShifting::m_custom_v5
FloatProperty m_custom_v5
Definition: AddFlowByShifting.h:96
AddFlowByShifting::jjia_minbias_new
void jjia_minbias_new(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:603
AddFlowByShifting::initialize
StatusCode initialize()
Definition: AddFlowByShifting.cxx:68
AddFlowByShifting::m_outkey
StringProperty m_outkey
Definition: AddFlowByShifting.h:79
AddFlowByShifting::fixed_vn
void fixed_vn(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:645
AddFlowByShifting::v6
@ v6
Definition: AddFlowByShifting.h:108
AddFlowByShifting::vn_func
static double vn_func(double x, void *params)
Definition: AddFlowByShifting.cxx:40
AddFlowByShifting::m_particles_processed
int m_particles_processed
Definition: AddFlowByShifting.h:99
AddFlowByShifting::v3
@ v3
Definition: AddFlowByShifting.h:105
AddFlowByShifting::v2
@ v2
Definition: AddFlowByShifting.h:104
AddFlowByShifting::Harmonic
Harmonic
Definition: AddFlowByShifting.h:101
AddFlowByShifting::m_custom_v1
FloatProperty m_custom_v1
Definition: AddFlowByShifting.h:92
AddFlowByShifting::NumHar
@ NumHar
Definition: AddFlowByShifting.h:102
AddFlowByShifting::m_custom_v3
FloatProperty m_custom_v3
Definition: AddFlowByShifting.h:94
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
AddFlowByShifting
Definition: AddFlowByShifting.h:39
AddFlowByShifting::p_Pb_cent_eta_indep
void p_Pb_cent_eta_indep(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:704
AddFlowByShifting::m_floweta_sw
IntegerProperty m_floweta_sw
Definition: AddFlowByShifting.h:85
AddFlowByShifting::OO_eta_indep
void OO_eta_indep(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:735
AddFlowByShifting::m_flow_minpt
FloatProperty m_flow_minpt
Definition: AddFlowByShifting.h:90
AddFlowByShifting::ao_test
void ao_test(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:680
IAthRNGSvc.h
ServiceHandle< IAthRNGSvc >
AddFlowByShifting::m_flow_maxpt
FloatProperty m_flow_maxpt
Definition: AddFlowByShifting.h:89
AddFlowByShifting::fixed_v2
void fixed_v2(double b, double eta, double pt)
Definition: AddFlowByShifting.cxx:657
AddFlowByShifting::SetParentToRanPhi
double SetParentToRanPhi(HepMC::GenParticlePtr parent, CLHEP::HepRandomEngine *rndmEngine)
Definition: AddFlowByShifting.cxx:363