ATLAS Offline Software
Loading...
Searching...
No Matches
AddFlowByShifting Class Reference

#include <AddFlowByShifting.h>

Inheritance diagram for AddFlowByShifting:
Collaboration diagram for AddFlowByShifting:

Public Member Functions

 AddFlowByShifting (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize ()
StatusCode execute (const EventContext &ctx)
 Execute method with EventContext.
StatusCode finalize ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual StatusCode execute ()
 Execute method without EventContext (deprecated).
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
const EventContext & getContext () const
 Deprecated methods (use the ones with EventContext).
bool filterPassed () const
void setFilterPassed (bool state) const

Static Public Member Functions

static double vn_func (double x, void *params)

Protected Member Functions

virtual bool isReEntrant () const override final
 Legacy algorithms are not thread-safe.
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

enum  Harmonic {
  NumHar =6 , v1 =0 , v2 =1 , v3 =2 ,
  v4 =3 , v5 =4 , v6 =5
}
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

CLHEP::HepRandomEngine * getRandomEngine (const std::string &streamName, const EventContext &ctx) const
double SetParentToRanPhi (HepMC::GenParticlePtr parent, CLHEP::HepRandomEngine *rndmEngine)
double AddFlowToParent (HepMC::GenParticlePtr parent, const HijingEventParams *hijing_pars)
void MoveDescendantsToParent (HepMC::GenParticlePtr parent, double phishift)
void jjia_minbias_new (double b, double eta, double pt)
void jjia_minbias_new_v2only (double b, double eta, double pt)
void fixed_vn (double b, double eta, double pt)
void fixed_v2 (double b, double eta, double pt)
void jjia_minbias_old (double b, double eta, double pt)
void ao_test (double b, double eta, double pt)
void custom_vn (double b, double eta, double pt)
void p_Pb_cent_eta_indep (double b, double eta, double pt)
void OO_eta_indep (double b, double eta, double pt)
void Set_EbE_Fluctuation_Multipliers (HepMC::GenVertexPtr mainvtx, float b, CLHEP::HepRandomEngine *rndmEngine)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

void(AddFlowByShifting::* m_flow_function )(double b, double eta, double pt)
TGraph * m_graph_fluc {}
ServiceHandle< IAthRNGSvcm_rndmSvc {this, "RndmSvc", "AthRNGSvc"}
StringProperty m_inkey {this, "McTruthKey" , "GEN_EVENT" }
StringProperty m_outkey {this, "McFlowKey" , "FLOW_EVENT" }
IntegerProperty m_ranphi_sw {this, "RandomizePhi" , 0 }
StringProperty m_flow_function_name {this, "FlowFunctionName" , "jjia_minbias_new"}
StringProperty m_flow_implementation {this, "FlowImplementation", "exact" }
int m_flow_implementation_type {0}
BooleanProperty m_flow_fluctuations {this, "FlowFluctuations" , false }
IntegerProperty m_floweta_sw {this, "FlowEtaSwitch" , 0 }
FloatProperty m_flow_maxeta {this, "FlowMaxEtaCut" , 10.0 }
FloatProperty m_flow_mineta {this, "FlowMinEtaCut" , 0.f }
IntegerProperty m_flowpt_sw {this, "FlowPtSwitch" , 0 }
FloatProperty m_flow_maxpt {this, "FlowMaxPtCut" , 1000000.f }
FloatProperty m_flow_minpt {this, "FlowMinPtCut" , 0.f }
IntegerProperty m_flowb_sw {this, "FlowBSwitch" , 0 }
FloatProperty m_custom_v1 {this, "custom_v1" , 0.f }
FloatProperty m_custom_v2 {this, "custom_v2" , 0.f }
FloatProperty m_custom_v3 {this, "custom_v3" , 0.f }
FloatProperty m_custom_v4 {this, "custom_v4" , 0.f }
FloatProperty m_custom_v5 {this, "custom_v5" , 0.f }
FloatProperty m_custom_v6 {this, "custom_v6" , 0.f }
int m_particles_processed {0}
float m_psi_n [Harmonic::NumHar]
float m_v_n [Harmonic::NumHar]
float m_EbE_Multiplier_vn [Harmonic::NumHar]
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 39 of file AddFlowByShifting.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ Harmonic

Enumerator
NumHar 
v1 
v2 
v3 
v4 
v5 
v6 

Definition at line 101 of file AddFlowByShifting.h.

Constructor & Destructor Documentation

◆ AddFlowByShifting()

AddFlowByShifting::AddFlowByShifting ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 56 of file AddFlowByShifting.cxx.

56 :
57 AthAlgorithm(name, pSvcLocator)
58{
59 m_flow_function= NULL;
60 for(int ihar = 0; ihar< Harmonic::NumHar; ihar++){
61 m_psi_n[ihar] =0.0;
62 m_v_n [ihar] =0.0;
63 m_EbE_Multiplier_vn[ihar]=1.0;
64 }
65}
float m_psi_n[Harmonic::NumHar]
void(AddFlowByShifting::* m_flow_function)(double b, double eta, double pt)
float m_EbE_Multiplier_vn[Harmonic::NumHar]
float m_v_n[Harmonic::NumHar]
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:

Member Function Documentation

◆ AddFlowToParent()

double AddFlowByShifting::AddFlowToParent ( HepMC::GenParticlePtr parent,
const HijingEventParams * hijing_pars )
private

Definition at line 482 of file AddFlowByShifting.cxx.

483{
485 CLHEP::HepLorentzVector momentum(parent->momentum().px(),
486 parent->momentum().py(),
487 parent->momentum().pz(),
488 parent->momentum().e());
489 double pt = parent->momentum().perp();
490 double eta = parent->momentum().pseudoRapidity();
491 double phi_0 = parent->momentum().phi();
492
493 int error_=0;
494 if(pt !=pt) {ATH_MSG_ERROR("ERROR pt of track is not defined");error_=1;} //true if pt==nan
495 if(eta !=eta) {ATH_MSG_ERROR("ERROR eta of track is not defined");error_=1;}
496 if(phi_0 !=phi_0) {ATH_MSG_ERROR("ERROR phi of track is not defined");error_=1;}
497 if(error_==1){
498 ATH_MSG_ERROR("Original Particle Momentum(px,py,pz,e,m)="<<parent->momentum().px()<<" "
499 <<parent->momentum().py()<<" "
500 <<parent->momentum().pz()<<" "
501 <<parent->momentum().e() <<" "
502 <<parent->momentum().m() <<" ");
503 }
504
505
506
507
508 //Call the appropriate function to set the vn values
509 for(int ihar = 0; ihar< Harmonic::NumHar; ihar++){m_v_n [ihar]=0.0;} //reset the vn for this particle
510 double b = hijing_pars->get_b();
511 (*this.*m_flow_function)(b,eta,pt);//Set the vn for this particle
512
513 //add EbE fluctuations
515 for(int ihar = 0; ihar< Harmonic::NumHar; ihar++){
516 m_v_n[ihar] *= m_EbE_Multiplier_vn[ihar];
517 if(m_v_n[ihar]>0.5){
518 ATH_MSG_WARNING(" Vn Too large "<<ihar+1<<" "<<m_EbE_Multiplier_vn[ihar]<<" "<<m_v_n[ihar]);m_v_n[ihar]=0.5;
519 }
520 }
521 }
522
523 double phishift=0;
524
525 // Old fashioned rotation(approximate)
527 float phi=phi_0;
528 phishift= -2*( m_v_n[Harmonic::v1]*sin(1*(phi-m_psi_n[Harmonic::v1]))/1.0 +
534
535 }
536
537 // New fashioned rotation(exact)
538 else if (m_flow_implementation_type==1){
539 // Thread-safe according to https://www.gnu.org/software/gsl/doc/html/roots.html
540 const gsl_root_fsolver_type *T ATLAS_THREAD_SAFE = gsl_root_fsolver_brent;
541 gsl_root_fsolver *s = gsl_root_fsolver_alloc (T);
542 double x_lo=-2*M_PI,x_hi=2*M_PI;
543 float params[13];
544 for(int ipar=0;ipar<13;ipar++) {params[ipar]=0;}
545 gsl_function F;
546 F.function = &(AddFlowByShifting::vn_func);
547 F.params =&params;
548 gsl_root_fsolver_set (s, &F, x_lo, x_hi);
549 int iter=0;
550 params[ 0]=phi_0;
563 int status;
564 double phi=phi_0;
565 do
566 {
567 iter++;
568 status = gsl_root_fsolver_iterate (s);
569 phi = gsl_root_fsolver_root (s);
570 x_lo = gsl_root_fsolver_x_lower (s);
571 x_hi = gsl_root_fsolver_x_upper (s);
572 status = gsl_root_test_interval (x_lo, x_hi,0, 0.00001);
573 }
574 while (status == GSL_CONTINUE && iter < 1000);
575 gsl_root_fsolver_free (s);
576
577 if (iter>=1000) return 0;
578
579 phishift = phi-phi_0;
580 }
581
582 if(std::abs(phishift) > 1e-7) {
583 momentum.rotateZ(phishift*Gaudi::Units::rad);
584 parent->set_momentum( HepMC::FourVector(momentum.px(),momentum.py(),momentum.pz(),momentum.e()) );
585 }
586 ATH_MSG_DEBUG( "Parent particle:" <<
587 " V1 = " << m_v_n[Harmonic::v1] <<
588 " V2 = " << m_v_n[Harmonic::v2] <<
589 " V3 = " << m_v_n[Harmonic::v3] <<
590 " V4 = " << m_v_n[Harmonic::v4] <<
591 " V5 = " << m_v_n[Harmonic::v5] <<
592 " V6 = " << m_v_n[Harmonic::v6] <<
593 " Phi shift = " << phishift <<
594 " Phi shifted = " << momentum.phi() );
595
596 return phishift;
597}
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define F(x, y, z)
Definition MD5.cxx:112
#define ATLAS_THREAD_SAFE
static double vn_func(double x, void *params)
BooleanProperty m_flow_fluctuations
unsigned long long T
status
Definition merge.py:16

◆ ao_test()

void AddFlowByShifting::ao_test ( double b,
double eta,
double pt )
private

Definition at line 679 of file AddFlowByShifting.cxx.

680{
681 for(int ihar=0;ihar<Harmonic::NumHar;ihar++){
682 m_v_n[ihar]=0.0;
683 }
684
685 pt/=1000;
686 if(pt>2) pt = 2; // flat max at pt > 2
687
688 m_v_n[Harmonic::v2] = 0.02 * b * pt;
689}

◆ custom_vn()

void AddFlowByShifting::custom_vn ( double b,
double eta,
double pt )
private

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute() [1/2]

StatusCode AddFlowByShifting::execute ( const EventContext & )
virtual

Execute method with EventContext.

Override this method if acccess to the EventContext is needed.

Reimplemented from AthAlgorithm.

Definition at line 231 of file AddFlowByShifting.cxx.

231 {
232 ATH_MSG_INFO(">>> AddFlowByShifting from execute");
233
234 CLHEP::HepRandomEngine *rndmEngine = getRandomEngine("FLOW", ctx);
235 // Get hijing event parameters
236 const HijingEventParams *hijing_pars;
237 if( evtStore()->retrieve(hijing_pars, "Hijing_event_params").isFailure() ) {
238 ATH_MSG_ERROR("Could not retrieve Hijing_event_params");
239 return StatusCode::FAILURE;
240 }
241 ATH_MSG_INFO("Event parameters: B = " << hijing_pars->get_b()<<
242 " BPhi = " << hijing_pars->get_bphi());
243
244
245 // FIXME: changing data in the event store
246 HijingEventParams *hijing_pars_nc = const_cast<HijingEventParams*> (hijing_pars);
247
248
249 // Read Data from Transient Store
250 const McEventCollection* mcCollptr;
251 if ( evtStore()->retrieve(mcCollptr, m_inkey).isFailure() ) {
252 ATH_MSG_ERROR("Could not retrieve truth McEventCollection");
253 return StatusCode::FAILURE;
254 }
255
256
257 // Loop over all events in original McEventCollection and
258 // Copy to a new (modifiable) collection
260 McEventCollection* mcFlowCollptr = new McEventCollection();
261 for (citr = mcCollptr->begin(); citr!=mcCollptr->end(); ++citr) {
262 mcFlowCollptr->push_back(new HepMC::GenEvent(*(*citr)));
263 }
264
265
266 //Geneate the event-plane angles (some of them may or may not be used later on)
267 //Store the angles into the hijing event parameters
268 for(int ihar=0;ihar<6;ihar++){
269 m_psi_n[ihar] =(CLHEP::RandFlat::shoot(rndmEngine)-0.5)*2*M_PI / (ihar+1); //Principal value must be within -PI/n to PI/n
270 hijing_pars_nc->set_psi(ihar+1,m_psi_n[ihar]);
271 }
272 m_psi_n[1]=hijing_pars->get_bphi() ;//the psi2 plane is aligned with the impact parameter
273 m_psi_n[1]=std::atan2(std::sin(2*m_psi_n[1]),std::cos(2*m_psi_n[1]))/2.0;//ensure that Psi2 is within [-PI/2,PI/2]
274 hijing_pars_nc->set_psi(2,m_psi_n[1]);
275 ATH_MSG_DEBUG(" Psi2 for event : "<<(*hijing_pars).get_psi(2));
276
277
278 // Add flow by phi angle shifting
280 for (itr = mcFlowCollptr->begin(); itr!=mcFlowCollptr->end(); ++itr) {
281 ATH_MSG_DEBUG("Next event in the bag ...");
282
283
284
285#ifdef HEPMC3
286 auto mainvtx=(*itr)->vertices().front();
287 if(m_flow_fluctuations) Set_EbE_Fluctuation_Multipliers(mainvtx,hijing_pars->get_b(),rndmEngine);
288 int particles_in_event = (*itr)->particles().size();
290 for ( auto parent: mainvtx->particles_out())
291#else
292 auto mainvtx=*((*itr)->vertices_begin());
293 if(m_flow_fluctuations) Set_EbE_Fluctuation_Multipliers(mainvtx,hijing_pars->get_b(),rndmEngine);
294 int particles_in_event = (*itr)->particles_size();
296 for ( auto parent: *mainvtx)
297#endif
298 {
299 // Process particles from main vertex
300 CLHEP::HepLorentzVector momentum(parent->momentum().px(),
301 parent->momentum().py(),
302 parent->momentum().pz(),
303 parent->momentum().e());
304 ATH_MSG_DEBUG("Parent particle: " << parent <<
305 " Eta = " << momentum.pseudoRapidity()<<
306 " Phi = " << momentum.phi() );
307
308 //skip particle if eta is outside implementation range
309 if(m_floweta_sw){
310 float eta=std::abs(momentum.pseudoRapidity());
312 }
313
314 //skip particle if pT is outside implementation range
315 if(m_flowpt_sw){
316 float pT=momentum.perp();
317 if (pT<m_flow_minpt || pT> m_flow_maxpt) continue;
318 }
319
320 // Randomize phi if explicitely requested
321 if(m_ranphi_sw) {
322 double phishift = SetParentToRanPhi(parent, rndmEngine);
323 MoveDescendantsToParent(parent, phishift) ;// adjust descendants to parent position
324 }
325
326 // Add flow to particles from main vertex
327 double phishift = AddFlowToParent(parent, hijing_pars);
328 MoveDescendantsToParent(std::move(parent), phishift);// adjust descendants to parent position
329 }
330
331 // correct for double counting
333 // correct for incoming particles
334 ATH_MSG_INFO( " Particles in event: " << particles_in_event <<
335 " Processed for flow: " << m_particles_processed+2);
336 if(particles_in_event != (m_particles_processed+2)){
337 ATH_MSG_WARNING( " Particles in event: " << particles_in_event <<
338 " Processed for flow: " << m_particles_processed+2);
339 }
340 }
341
342 if(evtStore()->record(mcFlowCollptr, m_outkey).isFailure()){
343 ATH_MSG_ERROR("Could not record flow McEventCollection");
344 return StatusCode::FAILURE;
345 }
346 return StatusCode::SUCCESS;
347}
#define ATH_MSG_INFO(x)
StringProperty m_outkey
IntegerProperty m_flowpt_sw
void Set_EbE_Fluctuation_Multipliers(HepMC::GenVertexPtr mainvtx, float b, CLHEP::HepRandomEngine *rndmEngine)
double AddFlowToParent(HepMC::GenParticlePtr parent, const HijingEventParams *hijing_pars)
double SetParentToRanPhi(HepMC::GenParticlePtr parent, CLHEP::HepRandomEngine *rndmEngine)
IntegerProperty m_floweta_sw
FloatProperty m_flow_maxeta
void MoveDescendantsToParent(HepMC::GenParticlePtr parent, double phishift)
CLHEP::HepRandomEngine * getRandomEngine(const std::string &streamName, const EventContext &ctx) const
StringProperty m_inkey
IntegerProperty m_ranphi_sw
FloatProperty m_flow_maxpt
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DataModel_detail::iterator< DataVector > iterator
Definition DataVector.h:842
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
void set_psi(int ihar, float psi)
float get_bphi() const

◆ execute() [2/2]

virtual StatusCode AthAlgorithm::execute ( void )
inlinevirtualinherited

Execute method without EventContext (deprecated).

Override this method if the EventContext is not needed.

Reimplemented in ActsTrk::ActsMuonTrackingGeometryTest, ActsTrk::MaterialTrackReader, ActsTrk::MaterialTrackWriter, ActsTrk::ReadoutGeoDumpAlg, ActsWriteTrackingGeometryTransforms, AddTRTMomConstr, AFP_DigiTop, AFP_PixelHistoFiller, ALFA_BeamTransport, ALFA_CLinkAlg, ALFA_DigiAlg, ALFA_GloRec, ALFA_LocRec, ALFA_LocRecCorr, ALFA_Raw2Digit, ALFA_RawDataProvider, ALFA_RawDataProvider_charge, AlgB, AlgT, Analysis::CalibrationDataInterfaceTester, AODReader, AsgExampleAlgorithm, AthAsgExUnittestAlg, Athena::RootAsciiDumperAlg, Athena::RootNtupleOutputStream, AthenaMon, AthenaMonManager, AthenaPoolTestDataReader, AthenaPoolTestDataWriter, AthEx::Hist, AthEx::Ntup, AthExAlgWithFPE, AthExThinning::CreateData, AthExThinning::ReadThinnedData, AthExThinning::WriteThinnedData, AthJetReclusteringAlgo, AthPoolEx::PassNoneFilter, AthPoolEx::ReadCond, AthPrescaler, BackgroundWordFiller, BackgroundWordTest, BCM_Digitization, BJT::BoostedJetTaggerAlg, BTagToolTester, BTagVertexAugmenter, BuildVertexPointingAlg, BunchCrossingAverageCondTest, BunchCrossingCondTest, BunchCrossingIntensityCondTest, CalibHitIDCheck, CalibHitToCaloCell, CalibrationNtupleMakerTool, CaloAddCellPedShift, CaloCellCalcEnergyCorr, CaloCellDumper, CaloCellEnergyCorr2Ntuple, CaloCellFilterAlg, CaloCellNoiseAlg, CaloCellPosition2Ntuple, CaloClusterNavTest, CaloFillCellPositionShift, CaloNoise2Ntuple, CaloReadLCClassificationFile, CaloReadLCJetEnergyScaleFile, CaloReadLCOutOfClusterFile, CaloReadLCWeightsFile, CaloRescaleNoise, CaloTowerStoreTestAlg, CheckLArFebHeader, ClusterCreator, ClusterDumper, ComTimeRec, CP::AsgClassificationDecorationAlg, CP::AsgEnergyDecoratorAlg, CP::AsgEventScaleFactorAlg, CP::AsgLeptonTrackDecorationAlg, CP::AsgObjectScaleFactorAlg, CP::AsgPriorityDecorationAlg, CP::AsgSelectionAlg, CP::AsgShallowCopyAlg, CP::AsgUnionPreselectionAlg, CP::AsgUnionSelectionAlg, CP::AsgViewFromSelectionAlg, CP::AsgxAODNTupleMakerAlg, CP::BJetCalibrationAlg, CP::BootstrapGeneratorAlg, CP::BTaggingEfficiencyAlg, CP::BTaggingInformationDecoratorAlg, CP::BTaggingTriggerEfficiencyAlg, CP::BTaggingTriggerMatchingAlg, CP::CalibratedEgammaProvider, CP::CalibratedMuonsProvider, CP::CalibratedTracksProvider, CP::ChargeSelectorAlg, CP::CopyNominalSelectionAlg, CP::DileptonInvariantMassSelectorAlg, CP::DileptonInvariantMassWindowSelectorAlg, CP::DileptonOSSFInvariantMassWindowSelectorAlg, CP::DiTauEfficiencyCorrectionsAlg, CP::DiTauMassCalculatorAlg, CP::DiTauSmearingAlg, CP::DiTauTruthMatchingAlg, CP::EgammaCalibrationAndSmearingAlg, CP::EgammaFSRForMuonsCollectorAlg, CP::EgammaIsolationCorrectionAlg, CP::EgammaIsolationSelectionAlg, CP::ElectronEfficiencyCorrectionAlg, CP::ElectronSiHitDecAlg, CP::EventCutFlowHistAlg, CP::EventFlagSelectionAlg, CP::EventSelectionByObjectFlagAlg, CP::EventStatusSelectionAlg, CP::FakeBkgCalculatorAlg, CP::InDetTrackBiasingAlg, CP::InDetTrackExtraVarDecoratorAlg, CP::InDetTrackSelectionAlg, CP::InDetTrackSmearingAlg, CP::JetCalibAlg, CP::JetCalibrationAlg, CP::JetDecoratorAlg, CP::JetFFSmearingAlg, CP::JetGhostMuonAssociationAlg, CP::JetModifierAlg, CP::JetNGhostSelectorAlg, CP::JetReclusteringAlg, CP::JetSelectionAlg, CP::JetTileCorrectionAlg, CP::JetTriggerDecoratorAlg, CP::JetUncertaintiesAlg, CP::JvtEfficiencyAlg, CP::JvtUpdateAlg, CP::KinematicHistAlg, CP::LeptonSFCalculatorAlg, CP::MCTCDecorationAlg, CP::MetadataHistAlg, CP::MetBuilderAlg, CP::MetMakerAlg, CP::MetSignificanceAlg, CP::MissingETPlusTransverseMassSelectorAlg, CP::MissingETSelectorAlg, CP::MuonCalibrationAndSmearingAlg, CP::MuonCloseJetDecorationAlg, CP::MuonEfficiencyScaleFactorAlg, CP::MuonIsolationAlg, CP::MuonQualityUpdaterAlg, CP::MuonScaleFactorTestAlg, CP::MuonSelectionAlg, CP::MuonSelectionAlgV2, CP::MuonTriggerEfficiencyScaleFactorAlg, CP::NJetDecoratorAlg, CP::NLargeRJetMassWindowSelectorAlg, CP::NObjectMassSelectorAlg, CP::NObjectPtSelectorAlg, CP::ObjectCutFlowHistAlg, CP::OverlapRemovalAlg, CP::PhotonEfficiencyCorrectionAlg, CP::PhotonExtraVariablesAlg, CP::PhotonShowerShapeFudgeAlg, CP::PhotonVertexSelectionAlg, CP::PileupReweightingAlg, CP::PileupReweightingProvider, CP::PMGTruthWeightAlg, CP::RNtupleTreeMakerAlg, CP::RunNumberSelectorAlg, CP::RunPartonHistoryAlg, CP::SaveFilterAlg, CP::SecVertexTruthMatchAlg, CP::SSVWeightsAlg, CP::SumNLeptonPtSelectorAlg, CP::SysListDumperAlg, CP::SysTruthWeightAlg, CP::TauCombineMuonRMTausAlg, CP::TauEfficiencyCorrectionsAlg, CP::TauSmearingAlg, CP::TauTruthMatchingAlg, CP::TestIsolationAthenaAlg, CP::TestIsolationCloseByCorrAlg, CP::TestMCASTTool, CP::TransverseMassSelectorAlg, CP::TreeFillerAlg, CP::TreeMakerAlg, CP::TrigEventSelectionAlg, CP::TrigGlobalEfficiencyAlg, CP::TrigMatchingAlg, CP::TrigPrescalesAlg, CP::VGammaORAlg, CP::xAODWriterAlg, CP::XbbEfficiencyAlg, CP::XbbInformationDecoratorAlg, CreateLumiBlockCollectionFromFile, CSCConditionsTestAlgMT, CscDigitBuilder, CscDigitToCscRDO, CscThresholdClusterBuilder, CTTDecorCheckInTool, CutAlg, D3PD::DummyInitAlg, D3PD::egammaDeltaEmax2Alg, D3PD::egammaMaxECellAlg, D3PD::egammaNbCellsGainAlg, D3PD::egammaSumCellsGainAlg, D3PD::MakerAlg, D3PD::PhotonTruthAlg, D3PD::TruthMuonsToSG, D3PDTest::FillerAlg, D3PDTest::HitsFillerAlg, DecoratePhotonPointingAlg, DecorateVertexScoreAlg, DerivationFramework::CompactHardTruth, DerivationFramework::DerivationKernel, DerivationFramework::GoodRunsListFilterAlgorithm, DerivationFramework::METRemappingAlg, DigitizationAlg, DMTest::CondWriterAlg, DMTest::CondWriterExtAlg, DMTest::DMTestRead, DMTest::HLTResultReader, DMTest::HLTResultWriter, DMTest::MetaWriterAlg, DMTest::xAODTestClearDecor, DMTest::xAODTestTypelessRead, DumpAllSystematics, DumpCaloBadChannels, DumpEventDataToJsonAlg, DumpGeo, DumpLArDigits, DumpLArRawChannels, EFTrackingSmearingAlg, EFTrackingSmearMonAlg, EgammaMonitoring, EL::AnaAlgorithm, EL::UnitTestAlg2, EL::UnitTestAlg3, EL::UnitTestAlg4, EL::UnitTestAlg5, EL::UnitTestAlg7, EventCleaningTestAlg, EventDecisionAlg, EventInfoWriter, EventInfoWriterAlg, EventQualityFilterAlg, EventReaderAlg, EventReaderBaseAlg, EventReco::KLFitterFinalizeOutputAlg, EventReco::RunKLFitterAlg, ExtractCaloGeoConstants, FakeLArOFCs, FakeLArTimeOffset, FCAL_HV_Energy_Rescale, FilteredAlgorithm, FindDuplicatedLArDigits, FixLArElecCalib, FixLArElecSCCalib, FixLArIdMap, ForceLoadCondObj, FortranAlgorithm, FPGATrackSimConstGenAlgo, FPGATrackSimDumpDetStatusAlgo, FPGATrackSimDumpOutputStatAlg, FPGATrackSimLayerStudyAlg, FPGATrackSimLogicalHitsProcessAlg, FPGATrackSimMapMakerAlg, FPGATrackSimMatrixGenAlgo, FPGATrackSimMatrixMergeAlgo, FPGATrackSimMergeOutputsAlg, FPGATrackSimRawHitsWrapperAlg, FPGATrackSimSecondStageAlg, FSR::ToolTester, ftag::MetadataAlg, FTAGValidation::PhysicsTriggerVariablePlots, FTAGValidation::PhysicsVariablePlots, GetDetectorLocalFrames, GetDetectorPositions, GetLCClassification, GetLCDeadMaterial, GetLCDeadMaterialTree, GetLCOutOfCluster, GetLCSinglePionsPerf, GetLCWeights, GlobalSim::eEmMultTestBench, GlobalSim::PU1SuppTestBenchAlg, GRLSelectorAlg, HelloAlg, HGTD_Digitization, HIClusterGeo_HistoFiller, HitMapBuilder, HLTTest::TestRecoAlg, IdDictCnvTest, IDPerfMonEoverP, IDPerfMonZmumu, IDPerfMuonRefitter, InDet::DumpObjects, InDet::InDetBeamSpotFinder, InDet::InDetCosmicsEventPhase, InDet::InDetEventSplitter, InDet::InDetSecVtxFinder, InDet::InDetTrackBiasingToolTester, InDet::InDetTrackSmearingToolTester, InDet::InDetV0Finder, InDet::InDetVertexSplitter, InDet::InDetVertexSplitterHist, InDet::SCT_ClusterValidationNtupleWriter, InDet::SegmentDriftCircleAssValidation, InDet::TRT_SegmentsToTrack, InDet::TRT_StrawStatus, InDetAlignCog, InDetAlignment::CreateMisalignAlg, InDetAlignWrt, InDetGNNHardScatterSelection::VertexDecoratorAlg, InDetRawDataFakeReader, InDetRawDataFakeWriter, InDetUpdateCaches, InDetVertexTruthMatchAlgorithm, IParticleWriterAlg, IsolationTool_AthTest, ITk::StripDigitization, JetGlobalEventSetup, JetHitAssociation, JetHypoExerciserAlg, JetHypoExerciserCompareAlg, JpsiAlg, JpsiExample, L1CaloCondAlgReader, L1CaloDumpRampData, L1CaloHVCorrectionsForDB, L1CaloHVDummyContainers, L1CaloLinearCalibration, L1CaloPedestalGenerator, L1CaloRampMaker, L1CaloTriggerTowerSelector, LArAccumulatedCalibDigitContSplitter, LArAccumulatedDigits2Ntuple, LArAlignDbAlg, LArAutoCorrAlgToDB, LArAutoCorrExtrapolate, LArAutoCorrFromStdNtuple, LArAutoCorrMaker, LArAverages2Ntuple, LArBadChannel2Ascii, LArBadChannelDBAlg, LArBadChannelHunter, LArBadEventCatcher, LArBadFeb2Ascii, LArBlockCorrections, LArCablingChecker, LArCablingTest, LArCalibCopyAlg< CONDITIONSCONTAINER >, LArCalibCopyAlg< LArDAC2uAMC >, LArCalibCopyAlg< LArPhysWaveContainer >, LArCalibCopyAlg< LArTdriftComplete >, LArCalibDigitMaker, LArCalibDigitsAccumulator, LArCalibDigitsAccumulatorFreeGain, LArCalibPatchingAlg< CONDITIONSCONTAINER >, LArCalibPatchingAlg< LArAutoCorrComplete >, LArCalibPatchingAlg< LArCaliWaveContainer >, LArCalibPatchingAlg< LArMphysOverMcalComplete >, LArCalibPatchingAlg< LArRampComplete >, LArCalibShortCorrector, LArCalibValidationAlg< CONDITIONSCONTAINER, REFCONTAINER >, LArCalibValidationAlg< LArAutoCorrComplete, LArAutoCorrComplete >, LArCalibValidationAlg< LArCaliWaveContainer, LArCaliWaveContainer >, LArCalibValidationAlg< LArPedestalComplete, ILArPedestal >, LArCalibValidationAlg< LArRampComplete, ILArRamp >, LArCaliWaveBuilder, LArCaliWaveBuilderXtalk, LArCaliWaveSelector, LArCellContFakeReader, LArCellContFakeWriter, LArCompleteToFlat, LArCond2NtupleBase, LArCond2NtupleBaseEB, LArCondDataTest, LArConditionsMergerAlg< T, T1 >, LArConditionsMergerAlg< LArAutoCorrComplete >, LArConditionsMergerAlg< LArDAC2uAComplete, LArCaliPulseParamsComplete >, LArConditionsMergerAlg< LArDAC2uAComplete, LArCaliWaveContainer >, LArConditionsMergerAlg< LArDAC2uAComplete, LArDetCellParamsComplete >, LArConditionsMergerAlg< LArDAC2uAComplete, LArPhysWaveContainer >, LArConditionsMergerAlg< LArMphysOverMcalComplete >, LArConditionsMergerAlg< LArOFCComplete >, LArConditionsMergerAlg< LArPedestalComplete >, LArConditionsMergerAlg< LArRampComplete >, LArConditionsMergerAlg< LArShapeComplete >, LArConditionsTestAlg, LArDeltaRespPredictor, LArDigits2Ntuple, LArDigits2NtupleEB, LArDigitsAccumulator, LArDSPThresholdFillInline, LArDumpShapes, LArDuplicateConstants, LArFCalTowerBuilderToolTestAlg, LArFebRodMapConvert, LArFebTimeOffset2Ntuple, LArFillDSPConfig, LArFlatFromFile, LArG4::CalibrationHitMerger, LArG4GenShowerLib, LArG4ShowerLibSvcTest, LArGeoWeightsFill, LArHECNoise, LArHitEMapMaker, LArHitMerger, LArHV2Ntuple, LArHVCorrMaker, LArHVPathologyDbAlg, LArIdCablingTest, LArIdMapConvert, LArMasterWaveBuilder, LArMinBiasAlg, LArMphysOverMcalFromTuple, LArNoiseBursts, LArOFCAlg, LArOFCBin_PhysCaliTdiffFromStdNtuple, LArOFCBinAlg, LArOFCtoOFC, LArOFPhaseFill, LArOFPhasePicker, LArParams2Ntuple, LArParamsFromStdNtuple, LArPedestalAutoCorrBuilder, LArPedestalMaker, LArPhysCaliTDiffAlg, LArPhysWaveFromAscii, LArPhysWaveFromStdNtuple, LArPhysWaveFromTuple, LArPhysWavePredictor, LArPhysWaveShifter, LArPulseShape, LArRampAdHocPatchingAlg, LArRampBuilder, LArRampCorr, LArRampFCalCorr, LArReadCells, LArReadHadDMCoeffFile2, LArReadHadDMCoeffFile, LArReadParamsFromFile< DATA >, LArReadParamsFromFile< LArCableAttenuationComplete >, LArReadParamsFromFile< LArCableLengthComplete >, LArReadParamsFromFile< LArCaliPulseParamsComplete >, LArReadParamsFromFile< LArDetCellParamsComplete >, LArReadParamsFromFile< LArEMEC_CphiComplete >, LArReadParamsFromFile< LArEMEC_HValphaComplete >, LArReadParamsFromFile< LArEMEC_HVbetaComplete >, LArReadParamsFromFile< LArMphysOverMcalComplete >, LArReadParamsFromFile< LArPhysCaliTdiffComplete >, LArReadParamsFromFile< LArRinjComplete >, LArReadParamsFromFile< LArTdriftComplete >, LArReadParamsFromFile< LArTshaperComplete >, LArReadSC, LArRTMParamExtractor, LArSC2Ntuple, LArSC2NtupleEB, LArShapeCompleteMaker, LArShapeCompleteMakerAlg, LArShapeCorrector, LArShapeDumper, LArShapeFromStdNtuple, LArShapeToSCShape, LArSimpleShapeDumper, LArStripsCrossTalkCorrector, LArTimePhysPrediction, LArTTL1Calib, LArTTL1Maker, LArWFParams2Ntuple, LisNtuple, LUCID_DigiTop, LVL1::CPCMX, LVL1::eFEXDriver, LVL1::eFexTOBDecorator, LVL1::eFexTOBSuperCellDecorator, LVL1::gFEXDriver, LVL1::gTowerMakerFromGfexTowers, LVL1::JEMEnergySim, LVL1::JEMJetSim, LVL1::jFEXDriver, LVL1::L1CaloTriggerTowerDecoratorAlg, LVL1::L1TopoSimulation, LVL1::Run2CPMTowerMaker, LVL1::Run2JetElementMaker, LVL1::Run2TriggerTowerMaker, LVL1::TrigT1MBTS, LVL1TGCTrigger::LVL1TGCTrigger, MagField::SolenoidTest, McAodFilter, McAodTupleWriter, McAodValidationAlg, MdtAsBuiltJsonDumpAlg, MdtCablingJsonDumpAlg, MdtCablingTestAlg, MdtConditionsTestAlg, MdtCondJsonDumpAlg, MdtToyCablingJsonDumpAlg, MdtToyTwinCablingDumpAlg, met::METAssocTestAlg, MMCablingTestAlg, MonitoredAlg, MSVtxValidationAlg, MuCTPI_RDOToRoIBResult, Muon::MdtCalibJsonDumpAlg, Muon::RpcCablingTestAlg, Muon::RpcToyCablingJsonDumpAlg, MuonABLineJsonDumpAlg, MuonAlign::AlignmentErrorTestAlg, MuonCalib::CoolInserter, MuonCalib::CscCalcPed, MuonCalib::CscCalcSlope, MuonCalib::MuonSegmentReader, MuonChamberIDSelector, MuonDigitizer, MuonFeatureCnvTestAlg, MuonGM::GeoModelCscTest, MuonGM::GeoModelMdtTest, MuonGM::GeoModelMmTest, MuonGM::GeoModelRpcTest, MuonGM::GeoModelsTgcTest, MuonGM::GeoModelTgcTest, MuonGM::NSWGeoPlottingAlg, MuonGMR4::GeoModelMdtTest, MuonGMR4::GeoModelMmTest, MuonGMR4::GeoModelRpcTest, MuonGMR4::GeoModelsTgcTest, MuonGMR4::GeoModelTgcTest, MuonGMR4::NswGeoPlottingAlg, MuonHoughDataNtuple, MuonPatternCombinationDetailedTrackTruthMaker, MuonPrdSelectorAlg, MuonR4::BucketDumperAlg, MuonR4::CaloCellsDumperAlg, MuonR4::MlHitDumperAlg, MuonR4::SegmentDumperAlg, MuonR4::SpacePointCsvDumperAlg, MuonR4::SPIdDumperAlg, MuonR4::TruthMuonVertexDumperAlg, MuonR4::TruthSegmentCsvDumperAlg, MuonVal::HitValAlg, MuonVal::MetaDataAlg, MuonVal::MuonTester::TreeTestAlg, MuonValR4::MdtCalibDbAlgTest, MuonValR4::MsTrackTester, MuonValR4::MuonFastRecoTester, MuonValR4::MuonHitTesterAlg, MuonValR4::MuonHoughTransformTester, MuonValR4::MuonRecoChainTester, MuonValR4::MuonSPCalibrationTest, MuonValR4::SegmentRefitTest, NswOccupancyAlg, OccupancyMapMaker, ORToolBoxTestAlg, OutputConditionsAlg, OverlapRemovalGenUseAlg, OverlapRemovalTestAlg, ParticleRemoverAlg, ParticleSelectionAlg, ParticleSortingAlg, PerfMonTest::CpuCruncherAlg, PerfMonTest::ErroneousAlg, PerfMonTest::LeakyAlg, PerfMonTest::MallocAlg, PerfMonTest::ManyLeaksAlg, PerfMonTest::PolyVectorAlg, PerfMonTest::PolyVectorAlgWithArenas, PerfMonTest::VectorAlg, PileUpMTAlg, PileUpToolsAlg, PixelChargeToTConversion, PixelClusterAnalysis, PixelDigitization, PixelFastDigitization, PixelPrepDataToxAOD, PixelSiliconConditionsTestAlg, PrintSiElements, Prompt::DecoratePromptLeptonImproved, Prompt::DecoratePromptLeptonRNN, Prompt::NonPromptLeptonVertexingAlg, Prompt::PrimaryVertexReFitter, PyAthena::Alg, RatesAnalysisAlg, RDOReaderDoubleSelector, ReadData, ReadLArDigits, ReadLArRaw, ReadSiDetectorElements, ReadTRT_DetectorElements, Rec::MuSAVtxJPsiValidationAlg, RefitTracksAndVertex, Ringer::CaloRingerAlgorithm, Ringer::xAODRingSetConfWriter, SCT_ClusterAnalysis, SCT_Digitization, SCT_FastDigitization, SCT_ReadoutTestAlg, SCTCalib, SelectorBase< Derived >, SGInputLoader, SgStressConsumer, SgStressProducer, SharedHitMapper, SiDistWriteAlg, SingleTrackValidation, SiSmearedDigitization, SourceCompAlg, SpacePointAnalysis, SumOfWeightsAlg, SuperCellVsCaloCellTestAlg, SurveyConstraintTestAlg, SUSYToolsAlg, TauAnalysisTools::TauAnalysisToolsExampleAthena, TBBPCRec, TBMWPCRec, TBScintillatorRec, TBTailCatcherRec, TBTrackInfoFromTag, TestAthenaConstraintFit, testAthenaEgammaCalibTool, testAthenaPhotonAlg, TestMatchingToolAlg, TestRandomSeqAlg, TestSiAlignment, TestTRT_Alignment, TgcCondDbTestAlg, TgcDigtJitterTestAlg, TgcDigtThresholdTestAlg, TileAANtuple, TileBeamElemToCell, TileCellIDCToCell, TileCellIDCToNtuple, TileCellSelector, TileCellToNtuple, TileCellToTTL1, TileCellVerify, TileClusterFilterAlg, TileCosmicMuonFilterAlg, TileCosmicsTrigger, TileDigiNoiseCalibAlg, TileDigitsFromPulse, TileDigitsThresholdFilter, TileDigitsToNtuple, TileDigitsToTTL1, TileEopFilterAlg, TileExpertDump, TileFCSmStepToTileHitVec, TileHitToCell, TileHitToNtuple, TileHitToRawChannel, TileHitVecToCnt, TileHitVecToNtuple, TileInfoDump, TileLaserCalibAlg, TileMuId2DBAlg, TileMuonFilterAlg, TileMuonFitter, TileMuonReceiverDecisionToNtuple, TileMuonReceiverReadCnt, TileMuRODToNtuple, TileMuToNtuple, TileOFC2DBAlg, TilePulseForTileMuonReceiver, TileRawChannelMaker, TileRawChannelToHit, TileRawChannelToNtuple, TileRawChannelToTTL1, TileRawChannelVerify, TileRawChNoiseCalibAlg, TileRawCorrelatedNoise, TileTBAANtuple, TileTBDump, TileTBHitToBeamElem, TileTBHitToNtuple, TileTBStat, TileTopCalibAlg, TileTrackFilterAlg, TileTTL1ToNtuple, TrackCaloClusterAlg, TrackCaloClusterInfoAlg, TrackTruthSelector, TrackTruthSimilaritySelector, TrackVertexAssoTestAlg, Trig::TrigBtagValidationTest, Trig::TrigEgammaMatchingToolTest, Trig::TrigMatchTestAlg, Trig::TrigMuonMatching_example, TrigBSExtraction, TrigConf::xAODMenuReader, TrigCostAnalysis, TrigDecisionChecker, TrigEDMAuxChecker, TrigEDMChecker, TrigFPGATrackSimRawHitsWrapperAlg, TriggerSelectionAlg, TrigMuonEFInfoCnvTestAlg, Trk::AdaptiveMultiVertexFitterTestAlg, Trk::AlignAlg, Trk::AlignTrackCollSplitter, Trk::CETmaterial, Trk::CombinedExtrapolatorTest, Trk::EnergyLossExtrapolationValidation, Trk::EventDataModelMonitor, Trk::ExtrapolationValidation, Trk::ExtrapolatorTest, Trk::GaussianDensityTestAlg, Trk::MaterialManipulation, Trk::MaterialMapping, Trk::MaterialOnTrackValidation, Trk::MaterialValidation, Trk::RecMomentumQualityValidation, Trk::ReFitTrack, Trk::ReFitTrackWithTruth, Trk::RiddersAlgorithm, Trk::SelectEventNumber, Trk::SingleTrackDiffAlg, Trk::TrackValidationNtupleWriter, Trk::TrkDetDescrUnitTestBase, Trk::TrkExUnitTestBase, Trk::VertexSeedFinderTestAlg, TrkEDMTestAlg, TrkTrackFakeReader, TrkTrackFakeWriter, TRT_PrepDataToxAOD, TRTCalibrationMgr, TRTCondRead, TRTCondStoreText, TRTDigitization, TRTFastDigitization, TRTOccupancyInclude, TRTStrawEfficiency, TRTStrawStatusRead, TRTStrawStatusWrite, TruthParticleBuilder, VKalVrtAthena::VrtSecInclusive, WriteData, xAODMaker::AuxStoreWrapper, xAODMaker::BTaggingCnvAlg, xAODMaker::BunchConfCnvAlg, xAODMaker::CMMCPHitsCnvAlg, xAODMaker::CMMEtSumsCnvAlg, xAODMaker::CMMJetHitsCnvAlg, xAODMaker::CMMRoICnvAlg, xAODMaker::CombinedMuonFeatureCnvAlg, xAODMaker::CPMHitsCnvAlg, xAODMaker::CPMRoICnvAlg, xAODMaker::CPMTowerCnvAlg, xAODMaker::DynVarFixerAlg, xAODMaker::ElectronCnvAlg, xAODMaker::ElementLinkResetAlg, xAODMaker::EmTauRoICnvAlg, xAODMaker::EnergySumRoICnvAlg, xAODMaker::GSFTrackParticleMapCnvAlg, xAODMaker::IsoMuonFeatureCnvAlg, xAODMaker::JEMEtSumsCnvAlg, xAODMaker::JEMHitsCnvAlg, xAODMaker::JEMRoICnvAlg, xAODMaker::JetCnvAlg, xAODMaker::JetElementCnvAlg, xAODMaker::JetEtRoICnvAlg, xAODMaker::JetRoICnvAlg, xAODMaker::MissingETCnvAlg, xAODMaker::MuonFeatureCnvAlg, xAODMaker::MuonRoICnvAlg, xAODMaker::PhotonCnvAlg, xAODMaker::RODHeaderCnvAlg, xAODMaker::TauJetCnvAlg, xAODMaker::TauJetReaderAlg, xAODMaker::TrigBjetCnvAlg, xAODMaker::TrigCaloClusterCnvAlg, xAODMaker::TrigEFBphysCnvAlg, xAODMaker::TrigEMClusterCnvAlg, xAODMaker::TriggerTowerCnvAlg, xAODMaker::TrigL2BphysCnvAlg, xAODMaker::TrigMissingETCnvAlg, xAODMaker::TrigMuonEFInfoToMuonCnvAlg, xAODMaker::TrigSpacePointCountsCnvAlg, xAODMaker::TrigT2MbtsBitsCnvAlg, xAODMaker::TrigT2ZdcSignalsCnvAlg, xAODMaker::TrigTrackCountsCnvAlg, xAODMaker::TrigVertexCountsCnvAlg, xAODMaker::TrigxAODBphysReaderAlg, xAODMaker::VertexCnvAlg, xAODReader::BTaggingReader, xAODReader::EventDuplicateFinderAlg, xAODReader::EventInfoReaderAlg, ZDC_DigiTop, ZdcByteStreamLucrodData, ZdcByteStreamRawData, ZdcByteStreamTester, ZdcLEDNtuple, ZdcMCTruthAlg, ZdcNtuple, ZdcRec, ZdcRecRun3, ZdcRecRun3Decode, ZdcRecV2, ZdcRecV3, and ZdcRecV3Decode.

Definition at line 76 of file AthAlgorithm.h.

76 {
77 throw GaudiException( "execute() or execute(const EventContext&) needs to be implemented", name(),
78 StatusCode::FAILURE );
79 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ filterPassed()

bool AthAlgorithm::filterPassed ( ) const
inherited

Definition at line 94 of file AthAlgorithm.cxx.

94 {
95 return execState( Gaudi::Hive::currentContext() ).filterPassed();
96}

◆ finalize()

StatusCode AddFlowByShifting::finalize ( )

Definition at line 350 of file AddFlowByShifting.cxx.

350 {
351 ATH_MSG_INFO(">>> AddFlowByShifting from finalize <<<");
352 if(m_graph_fluc){
353 delete m_graph_fluc ;
354 m_graph_fluc=nullptr;
355 }
356
357 // End of finalization step
358 return StatusCode::SUCCESS;
359}

◆ fixed_v2()

void AddFlowByShifting::fixed_v2 ( double b,
double eta,
double pt )
private

Definition at line 656 of file AddFlowByShifting.cxx.

657{
658 for(int ihar=0;ihar<Harmonic::NumHar;ihar++){
659 m_v_n[ihar]=0.0;
660 }
661 m_v_n[Harmonic::v2]=0.0500;
662}

◆ fixed_vn()

void AddFlowByShifting::fixed_vn ( double b,
double eta,
double pt )
private

Definition at line 644 of file AddFlowByShifting.cxx.

645{
646 m_v_n[Harmonic::v1]=0.0000;
647 m_v_n[Harmonic::v2]=0.0500;
648 m_v_n[Harmonic::v3]=0.0280;
649 m_v_n[Harmonic::v4]=0.0130;
650 m_v_n[Harmonic::v5]=0.0045;
651 m_v_n[Harmonic::v6]=0.0015;
652}

◆ getContext()

const EventContext & AthAlgorithm::getContext ( ) const
inherited

Deprecated methods (use the ones with EventContext).

Definition at line 90 of file AthAlgorithm.cxx.

90 {
91 return Gaudi::Hive::currentContext();
92}

◆ getRandomEngine()

CLHEP::HepRandomEngine * AddFlowByShifting::getRandomEngine ( const std::string & streamName,
const EventContext & ctx ) const
private

Definition at line 221 of file AddFlowByShifting.cxx.

223{
224 ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, streamName);
225 std::string rngName = name()+streamName;
226 rngWrapper->setSeed( rngName, ctx );
227 return rngWrapper->getEngine(ctx);
228}
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition RNGWrapper.h:154
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition RNGWrapper.h:108
ServiceHandle< IAthRNGSvc > m_rndmSvc

◆ initialize()

StatusCode AddFlowByShifting::initialize ( )

Definition at line 68 of file AddFlowByShifting.cxx.

68 {
69 ATH_MSG_INFO(">>> AddFlowByShifting from Initialize <<<");
70
71 ATH_CHECK(m_rndmSvc.retrieve());
72
73 ATH_MSG_INFO("**********Settings for Afterburner************");
74 ATH_MSG_INFO("McTruthKey : " << m_inkey );
75 ATH_MSG_INFO("McFlowKey : " << m_outkey );
76
77 ATH_MSG_INFO("FlowFunctionName : " << m_flow_function_name );
78 ATH_MSG_INFO("FlowInplementation : " << m_flow_implementation);
79 ATH_MSG_INFO("FlowFluctuations : " << m_flow_fluctuations );
80
81 ATH_MSG_INFO("RandomizePhi : " << m_ranphi_sw );
82
83 ATH_MSG_INFO("FlowEtaSwitch : " << m_floweta_sw );
84 ATH_MSG_INFO("FlowMinEtaCut : " << m_flow_mineta );
85 ATH_MSG_INFO("FlowMaxEtaCut : " << m_flow_maxeta );
86
87 ATH_MSG_INFO("FlowPtSwitch : " << m_flowpt_sw );
88 ATH_MSG_INFO("FlowMinPtCut : " << m_flow_minpt );
89 ATH_MSG_INFO("FlowMaxPtCut : " << m_flow_maxpt );
90
91 ATH_MSG_INFO("FlowV1 : " << m_custom_v1 );
92 ATH_MSG_INFO("FlowV2 : " << m_custom_v2 );
93 ATH_MSG_INFO("FlowV3 : " << m_custom_v3 );
94 ATH_MSG_INFO("FlowV4 : " << m_custom_v4 );
95 ATH_MSG_INFO("FlowV5 : " << m_custom_v5 );
96 ATH_MSG_INFO("FlowV6 : " << m_custom_v6 );
97 ATH_MSG_INFO("FlowBSwitch : " << m_flowb_sw );
98 ATH_MSG_INFO("********************************r*************");
99
100
101 // Select the flow-implementing function based of the function-choice variable
112 else{
113 ATH_MSG_ERROR("Unimplemented option for setting 'FlowFunctionName' : " << m_flow_function_name);
114 return StatusCode::FAILURE;
115 }
116
117
119 if (m_flow_implementation=="approximate"){
121 ATH_MSG_WARNING("'FlowInplementation=\"approximate\"' is obsolete, please switch to 'FlowInplementation=\"exact\"' ");
122 }
123 else if(m_flow_implementation=="exact" ){
125 }
126 else{
127 ATH_MSG_ERROR("Unimplemented option for setting 'FlowInplementation' : " << m_flow_implementation);
128 return StatusCode::FAILURE;
129 }
130
131
132
133 //TGraph storing the v2_RP/delta Vs b_imp values to be used in implementing the EbyE fluctuations
134 //the values below are b_imp-low,b_imp-high, delta/v2_RP for different centralities
135 //underflow and overflow bins are added for smooth extrapolation
137 //Fluctuations for Pb+Pb
138 if(m_flow_function_name=="jjia_minbias_new" ||
139 m_flow_function_name=="jjia_minbias_new_v2only")
140 {
141 //The delta/v2_RP values are taken from Fig15 of EbE vn paper (arXiv:1305.2942)
142 // <0 , 0-1 , 1-2 , 2-3 , 3-4 , 4-5 , 5-10 , 10-15, 15-20, 20-25, 25-30,
143 float b_lo[21]={ -1.00, 0.000, 1.483, 2.098, 2.569, 2.966, 3.317, 4.687, 5.739, 6.627, 7.409,
144 8.117, 8.767, 9.373, 9.943,10.479,10.991,11.479,11.947,15.00 ,100.0};
145 // 30-35, 35-40, 40-45, 45-50, 50-55, 55-60, 60-65, 65-70, 70-
146 float b_hi[21]={ -1.00 , 1.483, 2.098, 2.569, 2.966, 3.317, 4.687, 5.739, 6.627, 7.409, 8.117,//bimp_high
147 8.767, 9.373, 9.943,10.479,10.991,11.479,11.947,12.399,15.00 ,100.0};
148 float val [21]={ 5.600, 5.600, 5.600,1.175 ,0.8253,0.7209,0.5324,0.4431,0.3984,0.3844,0.3847,
149 0.3935,0.4106,0.4310,0.4574,0.4674,0.4873,0.4796,0.4856,0.5130,0.5130};
150 float bimp_vals[21];
151
152 for(int i=0;i<21;i++){
153 bimp_vals[i]=(b_lo[i]+b_hi[i])/2.0f;
154 val [i]=1.0f/val[i];//change to v2_RP/delta
155 val [i]=1.0/val[i];//change to v2_RP/delta
156 }
157
158 m_graph_fluc=new TGraph(21,bimp_vals,val);
159 }
160
161 //Fluctuations for O+O
162 if(m_flow_function_name=="OO_eta_indep")
163 {
164 //The v2{2} and v2{4} values are taken from the OO paper (arXiv:2509.05171)
165 //The v2{4} values beyond the 50-60% bin are put in by hand
166 //The v2{2} values beyond the 75-80% bin are put in by hand
167 //The impact parameters are obtained from HIJING
168
169 //4-particle cumulant v2 (v2{4})
170 // <0, 0-1, 1-2, 2-3, 3-4, 4-5, 5-10, 10-15, 15-20, 20-25, 25-30,
171 // 30-35, 35-40, 40-50, 50-60, 60-80, 80-100, >100,
172 float v2_4 [18]={ 0.0444322, 0.0444322, 0.0476009, 0.0495882, 0.0513053, 0.0527020, 0.0563533, 0.0614435, 0.0650522, 0.0675199, 0.0693970,
173 0.0705456, 0.0706748, 0.0686654, 0.0571383, 0.04 , 0.02 , 0.0 };//last three bins are put in by hand
174 float bimp4[18]={-1 , 0.481843, 0.886609 , 1.13462 , 1.33981 , 1.52064 , 1.95342 , 2.51881 , 2.97665 , 3.37416 , 3.72876 ,
175 4.05377 , 4.35564 , 4.77463 , 5.30719 , 6.08296 , 7.6415 , 15 };
176
177
178 // template-fit v2 (v2{2})
179 // <0, 0-1, 1-2, 2-3, 3-4, 4-5, 5-10, 10-15, 15-20, 20-25, 25-30,
180 // 30-35, 35-40, 40-45, 45-50, 50-55, 55-60, 60-65, 65-70, 70-75, 75-80, 80-100,>100
181 float v2_2 [23]={ 0.0749381, 0.0749381, 0.0782992, 0.0801742, 0.0814646, 0.0826611, 0.0853616, 0.0889407, 0.0913229, 0.0928072, 0.0933774,
182 0.0933299, 0.0926254, 0.0910148, 0.0889322, 0.086161 , 0.0828212, 0.0793132, 0.0755036, 0.0714726, 0.0668264, 0.055 , 0.05};//last two bins are put in by hand
183 float bimp2[23]={-1 , 0.481843, 0.886609 , 1.13462 , 1.33981 , 1.52064 , 1.95342 , 2.51881 , 2.97665 , 3.37416 , 3.72876 ,
184 4.05377 , 4.35564 , 4.63868 , 4.91057 , 5.17773 , 5.43665 , 5.68739 , 5.94258 , 6.20668 , 6.49519 , 7.6415 , 15};
185
186
187 //Evaluate ratio of v2{4}/delta
188 TGraph *graph_v2_4=new TGraph(18,bimp4,v2_4);
189 TGraph *graph_v2_2=new TGraph(23,bimp2,v2_2);
190 float ratio[23]={0};
191 for(int i=0;i<23;i++){
192 double vn_RP=graph_v2_4->Eval(bimp2[i]);
193 double vn_2 =graph_v2_2->Eval(bimp2[i]);
194 double delta=vn_2*vn_2 - vn_RP*vn_RP;
195 if(delta>0){
196 ratio[i]= vn_RP/sqrt(delta/2.0);
197 }
198 else{
199 ATH_MSG_ERROR("vn{2}<vn{4} for b_imp = " << bimp2[i]);
200 return StatusCode::FAILURE;
201 }
202 }
203
204 m_graph_fluc=new TGraph(23,bimp2,ratio);
205 delete graph_v2_4;
206 delete graph_v2_2;
207 }
208 //Fluctuations for Ne+Ne (TODO)
209
210 else{
211 ATH_MSG_ERROR("Flow fluctuations are not implemented for the following case: " << m_flow_function_name);
212 }
213 }
214
215
216 // Initialization terminated
217 return StatusCode::SUCCESS;
218}
#define ATH_CHECK
Evaluate an expression and check for errors.
StringProperty m_flow_function_name
FloatProperty m_flow_mineta
void jjia_minbias_new(double b, double eta, double pt)
void ao_test(double b, double eta, double pt)
StringProperty m_flow_implementation
void p_Pb_cent_eta_indep(double b, double eta, double pt)
FloatProperty m_flow_minpt
IntegerProperty m_flowb_sw
void jjia_minbias_new_v2only(double b, double eta, double pt)
void jjia_minbias_old(double b, double eta, double pt)
void fixed_v2(double b, double eta, double pt)
void OO_eta_indep(double b, double eta, double pt)
void custom_vn(double b, double eta, double pt)
void fixed_vn(double b, double eta, double pt)

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isReEntrant()

virtual bool AthAlgorithm::isReEntrant ( ) const
inlinefinaloverrideprotectedvirtualinherited

Legacy algorithms are not thread-safe.

Definition at line 118 of file AthAlgorithm.h.

118{ return false; }

◆ jjia_minbias_new()

void AddFlowByShifting::jjia_minbias_new ( double b,
double eta,
double pt )
private

Definition at line 602 of file AddFlowByShifting.cxx.

603{
604 pt=pt/1000.0; //convert to GeV
605
606 float a1,a2,a3,a4;
607 a1=0.4397*std::exp(-(b-4.526)*(b-4.526)/72.0) + 0.636;
608 a2=1.916/(b+2) +0.1;
609 a3=4.79*0.0001*(b-0.621)*(b-10.172)*(b-23)+1.2; // this is >0 for b>0
610 a4=0.135*std::exp(-0.5*(b-10.855)*(b-10.855)/4.607/4.607) +0.0120;
611
612 float temp1 = std::pow(pt , a1) / (1+std::exp( (pt-3.0)/a3));
613 float temp2 = std::pow(pt+0.1,-a2) / (1+std::exp(-(pt-4.5)/a3));
614 float temp3 = 0.01 / (1+std::exp(-(pt-4.5)/a3));
615
616 m_v_n[Harmonic::v2] = ( a4*(temp1+temp2) + temp3 )* std::exp(-0.5* eta*eta /6.27/6.27) ;
617
618 float fb=0.97 +1.06*std::exp(-0.5*b*b/3.2/3.2);
619 m_v_n[Harmonic::v3]=std::pow(fb*std::sqrt(m_v_n[1]),3);
620
621 float gb= 1.096 +1.36 *std::exp(-0.5*b*b/3.0/3.0);
622 gb=gb*sqrt(m_v_n[1]);
623 m_v_n[Harmonic::v4]=pow(gb,4);
624 m_v_n[Harmonic::v5]=pow(gb,5);
625 m_v_n[Harmonic::v6]=pow(gb,6);
627}
constexpr int pow(int x)
Definition conifer.h:27

◆ jjia_minbias_new_v2only()

void AddFlowByShifting::jjia_minbias_new_v2only ( double b,
double eta,
double pt )
private

Definition at line 631 of file AddFlowByShifting.cxx.

632{
633 jjia_minbias_new(b, eta, pt);
634 //Set all harmonics except v2 to 0
635 m_v_n[Harmonic::v1] = 0;
636 m_v_n[Harmonic::v3] = 0;
637 m_v_n[Harmonic::v4] = 0;
638 m_v_n[Harmonic::v5] = 0;
639 m_v_n[Harmonic::v6] = 0;
640}

◆ jjia_minbias_old()

void AddFlowByShifting::jjia_minbias_old ( double b,
double eta,
double pt )
private

Definition at line 666 of file AddFlowByShifting.cxx.

667{
668 m_v_n[Harmonic::v1] = 0;
669 m_v_n[Harmonic::v2] = 0.03968 * b
670 * (1 - 2.1/(1 + std::exp(1.357*(pt/1000))))
671 * std::exp(-(eta*eta)/(2*6.37*6.37));
672 m_v_n[Harmonic::v3]=0.0000;
673 m_v_n[Harmonic::v4]=0.0000;
674 m_v_n[Harmonic::v5]=0.0000;
675 m_v_n[Harmonic::v6]=0.0000;
676}

◆ MoveDescendantsToParent()

void AddFlowByShifting::MoveDescendantsToParent ( HepMC::GenParticlePtr parent,
double phishift )
private

Definition at line 389 of file AddFlowByShifting.cxx.

391{
392 // Move the branch of descendant vertices and particles
393 // by phishift to parent particle position
394 auto endvtx = parent->end_vertex();
395 if ( endvtx ) {
396 ATH_MSG_DEBUG("Processing branch of parent particle "<< parent);
397
398 //Added October 2025
399 // --- Rotate the parent’s end vertex itself ---
400 if (std::abs(phishift) > 1e-7) {
401 CLHEP::HepLorentzVector pos(endvtx->position().x(),
402 endvtx->position().y(),
403 endvtx->position().z(),
404 endvtx->position().t());
405 pos.rotateZ(phishift * Gaudi::Units::rad);
406 endvtx->set_position(HepMC::FourVector(pos.x(), pos.y(), pos.z(), pos.t()));
407 }
408
409
410 //Added October 2025
411 // --- Rotate the parent’s immediate daughters (outgoing of endvtx) ---
412 #ifdef HEPMC3
413 for (auto child : endvtx->particles_out())
414 #else
415 for (auto child : *endvtx)
416 #endif
417 {
418 CLHEP::HepLorentzVector p(child->momentum().px(),
419 child->momentum().py(),
420 child->momentum().pz(),
421 child->momentum().e());
422 if (std::abs(phishift) > 1e-7) {
423 p.rotateZ(phishift * Gaudi::Units::rad);
424 child->set_momentum(HepMC::FourVector(p.px(), p.py(), p.pz(), p.e()));
425 }
427 }
428
429
430 // now rotate descendant vertices
431 #ifdef HEPMC3
432 for (HepMC::GenVertexPtr descvtx: HepMC::descendant_vertices(endvtx)) { //}
433 #else
434 for ( HepMC::GenVertex::vertex_iterator
435 descvtxit = endvtx->vertices_begin(HepMC::descendants);
436 descvtxit != endvtx->vertices_end(HepMC::descendants);
437 ++descvtxit) {
438 auto descvtx = (*descvtxit);
439 #endif
440
441 ATH_MSG_DEBUG("Processing vertex " << descvtx);
442
443 // rotate vertex
444 if(std::abs(phishift) > 1e-7) {
445 CLHEP::HepLorentzVector position(descvtx->position().x(),
446 descvtx->position().y(),
447 descvtx->position().z(),
448 descvtx->position().t());
449 position.rotateZ(phishift*Gaudi::Units::rad);
450 descvtx->set_position(HepMC::FourVector( position.x(),position.y(),position.z(),position.t()) );
451 }
452
453 // now rotate their associated particles
454 #ifdef HEPMC3
455 for (auto descpart: descvtx->particles_out())
456 #else
457 for (auto descpart: *descvtx)
458 #endif
459 {
460 CLHEP::HepLorentzVector momentum(descpart->momentum().px(),
461 descpart->momentum().py(),
462 descpart->momentum().pz(),
463 descpart->momentum().e());
464 ATH_MSG_DEBUG("Descendant particle: " << descpart <<
465 " Eta = " << descpart->momentum().pseudoRapidity() <<
466 " Phi = " << descpart->momentum().phi() );
468 // rotate particle
469 if(std::abs(phishift) > 1e-7) {
470 momentum.rotateZ(phishift*Gaudi::Units::rad);
471 descpart->set_momentum( HepMC::FourVector(momentum.px(),momentum.py(),momentum.pz(),momentum.e()) );
472 ATH_MSG_DEBUG(" Phi shift = " << phishift<<
473 " Phi shifted = " << momentum.phi());
474 }
475 }
476 }
477 }
478 return;
479}
HepMC::GenVertex * GenVertexPtr
Definition GenVertex.h:60
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ OO_eta_indep()

void AddFlowByShifting::OO_eta_indep ( double b,
double eta,
double pt )
private

Definition at line 734 of file AddFlowByShifting.cxx.

734 {
735 pt=pt/1000.0; //convert to GeV
736
737
738 //For Testing
739 /*
740 m_v_n[Harmonic::v1]=0;
741 m_v_n[Harmonic::v2]=0.1;
742 m_v_n[Harmonic::v3]=0.05;
743 m_v_n[Harmonic::v4]=0.03;
744 m_v_n[Harmonic::v5]=0;
745 m_v_n[Harmonic::v6]=0;
746 return;
747 */
748
749
750 //pT differential vn for 0-5% centrality
751 static TGraph gr_v2pt;
752 static TGraph gr_v3pt;
753 static TGraph gr_v4pt;
754 //centrality dependent scale-factors for other centralities
755 static TGraph gr_v2_cent_scale;
756 static TGraph gr_v3_cent_scale;
757 static TGraph gr_v4_cent_scale;
758
759 static bool is_initialized=false;
760 if(is_initialized==false){
761 //----------------------------------------------------------------------------------
762 //The pt Dependent v2,v3,v4 for the 0-5% centrality interval from template-fit method
763 //https://atlas.web.cern.ch/Atlas/GROUPS/PHYSICS/PAPERS/HION-2025-02/fig_05.png
764 const int NumPtBins=23;
765 float v2_pt[NumPtBins]={
766 0.0 ,//extrapolation
767 0.049533 ,0.0622719,0.0776591,0.0906141,0.101341 ,0.110451 ,0.117545,
768 0.123217 ,0.126643 ,0.129142 ,0.129176 ,0.128795 ,0.126009 ,0.120966,
769 0.109416 ,0.0966881,0.0825195,0.0708585,0.0615164,0.0508748,
770 0.015 ,0.015 //extrapolation to 1.5% v2 at high-pT
771 };
772 float v3_pt[NumPtBins]={
773 0.0 ,//extrapolation
774 0.0186328,0.0262968,0.0366394,0.0467804,0.0562739,0.0639566,0.0714195,
775 0.0783429,0.0838629,0.0886202,0.0907969,0.0922756,0.0948961,0.0947266,
776 0.0898434,0.0839913,0.0801961,0.0685197,0.0648406,0.0600871,
777 0.00 ,0.00//extrapolation
778 };
779 //----------------------------------------------------
780 //For v3, we use the average of the template and 2PC values
781 float v3_pt_2PC[NumPtBins]={
782 0.0 ,//extrapolation
783 0.0182106,0.0255873,0.0355349,0.0451583,0.0537545,0.0611133,0.0675791,
784 0.0732434,0.0778371,0.0812549,0.0823093,0.0826907,0.082954 ,0.0800712,
785 0.0719686,0.062255 ,0.0498296,0.0370541,0.027638 ,0.0139785,
786 0.00 ,0.00//extrapolation
787 };
788 for(int i=0;i<NumPtBins;i++) v3_pt[i]=(v3_pt[i]+v3_pt_2PC[i])/2.0;
789 //----------------------------------------------------
790
791 float v4_pt[NumPtBins]={
792 0.0 ,//extrapolation
793 0.00446155,0.00710366,0.0117637,0.0158203,0.01931 ,0.0234234,0.0268995,
794 0.0299693 ,0.0321662 ,0.0335182,0.0358789,0.0374195,0.0359359,0.0327255,
795 0.0254762 ,0.0273239 ,0.0212901,0.0152591, -0 ,-0 ,//-ve values replaced by -0
796 0.0 , 0.00//extrapolation
797 };
798 float pt_bins[NumPtBins]={
799 0.0 ,//extrapolation
800 0.55 ,0.7 ,0.9 ,1.1 , 1.3, 1.5, 1.7,
801 1.9 ,2.1 ,2.3 ,2.5 , 2.7, 2.9, 3.25,
802 3.75 ,4.25 ,4.75 ,5.25 , 5.75, 6.5,
803 10.0 ,10000 //extrapolation
804 };
805 gr_v2pt=TGraph(NumPtBins,pt_bins,v2_pt);
806 gr_v3pt=TGraph(NumPtBins,pt_bins,v3_pt);
807 gr_v4pt=TGraph(NumPtBins,pt_bins,v4_pt);
808 gr_v2pt.SetBit(TGraph::kIsSortedX);//For faster return From Eval()
809 gr_v3pt.SetBit(TGraph::kIsSortedX);//For faster return From Eval()
810 gr_v4pt.SetBit(TGraph::kIsSortedX);//For faster return From Eval()
811 //----------------------------------------------------------------------------------
812
813
814 //----------------------------------------------------------------------------------
815 //centrality dependent v2, v3, v4 (template-fit method)
816 //https://atlas.web.cern.ch/Atlas/GROUPS/PHYSICS/PAPERS/HION-2025-02/figaux_03.png
817 const int NumCentBins=23;
818 float v2_cent[NumCentBins]={
819 0.0749381,//underflow
820 0.0749381,0.0782992,0.0801742,0.0814646,0.0826611,0.0853616,0.0889407,
821 0.0913229,0.0928072,0.0933774,0.0933299,0.0926254,0.0910148,0.0889322,
822 0.086161 ,0.0828212,0.0793132,0.0755036,0.0714726,0.0668264,
823 0.055 , 0.05 //80-100 and overflow, put by hand ; using 5% v2 asymptotically
824 };
825 float v3_cent[NumCentBins]={
826 0.0409694,//underflow
827 0.0409694,0.0399241,0.0394262,0.0388545,0.0385726,0.0375281,0.0360179,
828 0.0345174,0.0330085,0.0314149,0.0298081,0.0282141,0.02664 ,0.0253094,
829 0.0239221,0.0220779,0.0213821,0.0203176,0.0175276,0.0151146,
830 0.010 , 0.0 //80-100 and overflow, put by hand; using 0% v3 asymptotically
831 };
832 float v4_cent[NumCentBins]={
833 0.0131927 ,//underflow
834 0.0131927 ,0.0129838,0.0135232 ,0.0132689 ,0.0130435 ,0.0134254 ,0.013706 ,
835 0.0136456 ,0.0136656,0.013245 ,0.0130861 ,0.0125356 ,0.0118006 ,0.0110316,
836 0.00987005,0.0106963,0.00933145,0.00784534,0.00393584,0.00308131,
837 0.003 , 0.0 //80-100 and overflow, put by hand; using 0% v4 asymptotically
838 };
839 //b_imp values for differen centralities
840 float b_imp[NumCentBins]={
841 -1 , //underflow
842 0.481843 ,0.886609 , 1.13462 , 1.33981 , 1.52064 , 1.95342 , 2.51881 ,
843 2.97665 ,3.37416 , 3.72876 , 4.05377 , 4.35564 , 4.63868 , 4.91057 ,
844 5.17773 ,5.43665 , 5.68739 , 5.94258 , 6.20668 , 6.49519 ,
845 7.6415 , 15 , //80-100 and overflow
846 };
847
848 //Integrated v2, v3, v4, for 0-5% centrality bin
849 float vn_0_5[3]={0.078963056, 0.039746672, 0.013202649};
850 //divide by integrated vn for 0-5% centrality
851 for(int i=0;i<NumCentBins;i++){
852 v2_cent[i]/=vn_0_5[0];
853 v3_cent[i]/=vn_0_5[1];
854 v4_cent[i]/=vn_0_5[2];
855 }
856 gr_v2_cent_scale=TGraph(NumCentBins, b_imp, v2_cent);
857 gr_v3_cent_scale=TGraph(NumCentBins, b_imp, v3_cent);
858 gr_v4_cent_scale=TGraph(NumCentBins, b_imp, v4_cent);
859 gr_v2_cent_scale.SetBit(TGraph::kIsSortedX);//For faster return From Eval()
860 gr_v3_cent_scale.SetBit(TGraph::kIsSortedX);//For faster return From Eval()
861 gr_v4_cent_scale.SetBit(TGraph::kIsSortedX);//For faster return From Eval()
862 //----------------------------------------------------------------------------------
863 is_initialized=true;
864 }
865
866
868 m_v_n[Harmonic::v2]=gr_v2pt.Eval(pt) * gr_v2_cent_scale.Eval(b);
869 m_v_n[Harmonic::v3]=gr_v3pt.Eval(pt) * gr_v3_cent_scale.Eval(b);
870 m_v_n[Harmonic::v4]=gr_v4pt.Eval(pt) * gr_v4_cent_scale.Eval(b);
873}

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ p_Pb_cent_eta_indep()

void AddFlowByShifting::p_Pb_cent_eta_indep ( double b,
double eta,
double pt )
private

Definition at line 703 of file AddFlowByShifting.cxx.

704{
705 pt=pt/1000.0; //convert to GeV
706
707 float an_val[4][3];
708
709 an_val[0][0] = 0.1149;
710 an_val[0][1] = 1.181;
711 an_val[0][2] = 0.3767;
712
713 an_val[1][0] = 0.0498;
714 an_val[1][1] = 1.688;
715 an_val[1][2] = 0.5046;
716
717 an_val[2][0] = 0.02095;
718 an_val[2][1] = 2.196;
719 an_val[2][2] = 0.6259;
720
721 an_val[3][0] = 0.00682*0.5;//added in 0.5 factor by hand
722 an_val[3][1] = 4.938;
723 an_val[3][2] = 1.237;
724
726 m_v_n[Harmonic::v2]=an_val[0][0]*std::pow(pt,an_val[0][1])*std::exp(-an_val[0][2]*pt);
727 m_v_n[Harmonic::v3]=an_val[1][0]*std::pow(pt,an_val[1][1])*std::exp(-an_val[1][2]*pt);
728 m_v_n[Harmonic::v4]=an_val[2][0]*std::pow(pt,an_val[2][1])*std::exp(-an_val[2][2]*pt);
729 m_v_n[Harmonic::v5]=an_val[3][0]*std::pow(pt,an_val[3][1])*std::exp(-an_val[3][2]*pt);
731}

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ Set_EbE_Fluctuation_Multipliers()

void AddFlowByShifting::Set_EbE_Fluctuation_Multipliers ( HepMC::GenVertexPtr mainvtx,
float b,
CLHEP::HepRandomEngine * rndmEngine )
private

Definition at line 875 of file AddFlowByShifting.cxx.

875 {
876 for(int ihar=0;ihar<Harmonic::NumHar;ihar++){
877 m_EbE_Multiplier_vn[ihar]=1.0;
878 }
879
880
881 for(int ihar=0;ihar<Harmonic::NumHar;ihar++){
882 float vn_rp=0,delta=0;//BG parameterizations
883
884 //in the following we assume that the vn in the event is sqrt(<vn^2>)
885 //This is because the vn(pT) were tuned to 2PC/EP measurements
886 //then : vn_evt=vn_rp^2 + 2*(delta^2)
887 //which is used together with the "alpha" to get the "vn_rp" and "delta"
888
889 //No EbE fluctuation for v1
890 if (ihar==Harmonic::v1) continue;
891 //v2
892 else if(ihar==Harmonic::v2){
893 //alpha stores ratio of V2_RP over delta
894 float alpha=m_graph_fluc->Eval(b);
895 delta=1.0f/sqrt(2.0f+alpha*alpha); //stores delta /v2{2}
896 vn_rp=alpha*delta ; //stores v2^{RP}/v2{2}
897 }
898 //v3-v6
899 else{
900 vn_rp =0;
901 delta=1.0f/sqrt(2.0f);
902 }
903 float X=CLHEP::RandGaussQ::shoot(rndmEngine,vn_rp,delta);
904 float Y=CLHEP::RandGaussQ::shoot(rndmEngine,0.0 ,delta);
905 m_EbE_Multiplier_vn[ihar]=sqrt(X*X+ Y*Y);
906 ATH_MSG_INFO("EbE_Multiplier_v"<<ihar+1<<"="<<m_EbE_Multiplier_vn[ihar]);
907 }
908}

◆ setFilterPassed()

void AthAlgorithm::setFilterPassed ( bool state) const
inherited

Definition at line 98 of file AthAlgorithm.cxx.

98 {
99 execState( Gaudi::Hive::currentContext() ).setFilterPassed(state);
100}

◆ SetParentToRanPhi()

double AddFlowByShifting::SetParentToRanPhi ( HepMC::GenParticlePtr parent,
CLHEP::HepRandomEngine * rndmEngine )
private

Definition at line 362 of file AddFlowByShifting.cxx.

364{
365 // Set particle to random phi
366 // Return phi shift
368
369 double phi, phishift;
370 CLHEP::HepLorentzVector momentum(parent->momentum().px(),
371 parent->momentum().py(),
372 parent->momentum().pz(),
373 parent->momentum().e());
374 phi = momentum.phi();
375
376 double rannum = CLHEP::RandFlat::shoot(rndmEngine);
377 double ranphi = (rannum-0.5)*2*M_PI;
378 phishift = ranphi - phi;
379
380 momentum.setPhi(ranphi*Gaudi::Units::rad);
381 parent->set_momentum( HepMC::FourVector(momentum.px(),momentum.py(),momentum.pz(),momentum.e()) );
382
383 ATH_MSG_DEBUG("Parent phi randomized = " << momentum.phi());
384
385 return phishift;
386}

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc.

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

◆ vn_func()

double AddFlowByShifting::vn_func ( double x,
void * params )
static

Definition at line 40 of file AddFlowByShifting.cxx.

41{
42 float *par_float = (float*) params;
43 double phi_0 = par_float[0];
44 float *vn = par_float+1;
45 float *psi_n = vn+Harmonic::NumHar;
46 double val=x +2*( vn[Harmonic::v1]*sin(1*(x-psi_n[Harmonic::v1]))/1.0 +
47 vn[Harmonic::v2]*sin(2*(x-psi_n[Harmonic::v2]))/2.0 +
48 vn[Harmonic::v3]*sin(3*(x-psi_n[Harmonic::v3]))/3.0 +
49 vn[Harmonic::v4]*sin(4*(x-psi_n[Harmonic::v4]))/4.0 +
50 vn[Harmonic::v5]*sin(5*(x-psi_n[Harmonic::v5]))/5.0 +
51 vn[Harmonic::v6]*sin(6*(x-psi_n[Harmonic::v6]))/6.0 );
52 return val-phi_0;
53}
#define x

Member Data Documentation

◆ m_custom_v1

FloatProperty AddFlowByShifting::m_custom_v1 {this, "custom_v1" , 0.f }
private

Definition at line 92 of file AddFlowByShifting.h.

92{this, "custom_v1" , 0.f };

◆ m_custom_v2

FloatProperty AddFlowByShifting::m_custom_v2 {this, "custom_v2" , 0.f }
private

Definition at line 93 of file AddFlowByShifting.h.

93{this, "custom_v2" , 0.f };

◆ m_custom_v3

FloatProperty AddFlowByShifting::m_custom_v3 {this, "custom_v3" , 0.f }
private

Definition at line 94 of file AddFlowByShifting.h.

94{this, "custom_v3" , 0.f };

◆ m_custom_v4

FloatProperty AddFlowByShifting::m_custom_v4 {this, "custom_v4" , 0.f }
private

Definition at line 95 of file AddFlowByShifting.h.

95{this, "custom_v4" , 0.f };

◆ m_custom_v5

FloatProperty AddFlowByShifting::m_custom_v5 {this, "custom_v5" , 0.f }
private

Definition at line 96 of file AddFlowByShifting.h.

96{this, "custom_v5" , 0.f };

◆ m_custom_v6

FloatProperty AddFlowByShifting::m_custom_v6 {this, "custom_v6" , 0.f }
private

Definition at line 97 of file AddFlowByShifting.h.

97{this, "custom_v6" , 0.f };

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_EbE_Multiplier_vn

float AddFlowByShifting::m_EbE_Multiplier_vn[Harmonic::NumHar]
private

Definition at line 112 of file AddFlowByShifting.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 121 of file AthAlgorithm.h.

◆ m_flow_fluctuations

BooleanProperty AddFlowByShifting::m_flow_fluctuations {this, "FlowFluctuations" , false }
private

Definition at line 84 of file AddFlowByShifting.h.

84{this, "FlowFluctuations" , false };

◆ m_flow_function

void(AddFlowByShifting::* AddFlowByShifting::m_flow_function) (double b, double eta, double pt)
private

Definition at line 60 of file AddFlowByShifting.h.

◆ m_flow_function_name

StringProperty AddFlowByShifting::m_flow_function_name {this, "FlowFunctionName" , "jjia_minbias_new"}
private

Definition at line 81 of file AddFlowByShifting.h.

81{this, "FlowFunctionName" , "jjia_minbias_new"};

◆ m_flow_implementation

StringProperty AddFlowByShifting::m_flow_implementation {this, "FlowImplementation", "exact" }
private

Definition at line 82 of file AddFlowByShifting.h.

82{this, "FlowImplementation", "exact" };

◆ m_flow_implementation_type

int AddFlowByShifting::m_flow_implementation_type {0}
private

Definition at line 83 of file AddFlowByShifting.h.

83{0};

◆ m_flow_maxeta

FloatProperty AddFlowByShifting::m_flow_maxeta {this, "FlowMaxEtaCut" , 10.0 }
private

Definition at line 86 of file AddFlowByShifting.h.

86{this, "FlowMaxEtaCut" , 10.0 };

◆ m_flow_maxpt

FloatProperty AddFlowByShifting::m_flow_maxpt {this, "FlowMaxPtCut" , 1000000.f }
private

Definition at line 89 of file AddFlowByShifting.h.

89{this, "FlowMaxPtCut" , 1000000.f };

◆ m_flow_mineta

FloatProperty AddFlowByShifting::m_flow_mineta {this, "FlowMinEtaCut" , 0.f }
private

Definition at line 87 of file AddFlowByShifting.h.

87{this, "FlowMinEtaCut" , 0.f };

◆ m_flow_minpt

FloatProperty AddFlowByShifting::m_flow_minpt {this, "FlowMinPtCut" , 0.f }
private

Definition at line 90 of file AddFlowByShifting.h.

90{this, "FlowMinPtCut" , 0.f };

◆ m_flowb_sw

IntegerProperty AddFlowByShifting::m_flowb_sw {this, "FlowBSwitch" , 0 }
private

Definition at line 91 of file AddFlowByShifting.h.

91{this, "FlowBSwitch" , 0 };//currently not used

◆ m_floweta_sw

IntegerProperty AddFlowByShifting::m_floweta_sw {this, "FlowEtaSwitch" , 0 }
private

Definition at line 85 of file AddFlowByShifting.h.

85{this, "FlowEtaSwitch" , 0 };

◆ m_flowpt_sw

IntegerProperty AddFlowByShifting::m_flowpt_sw {this, "FlowPtSwitch" , 0 }
private

Definition at line 88 of file AddFlowByShifting.h.

88{this, "FlowPtSwitch" , 0 };

◆ m_graph_fluc

TGraph* AddFlowByShifting::m_graph_fluc {}
private

Definition at line 71 of file AddFlowByShifting.h.

71{};//TGraph storing the v2_RP/delta Vs b_imp

◆ m_inkey

StringProperty AddFlowByShifting::m_inkey {this, "McTruthKey" , "GEN_EVENT" }
private

Definition at line 78 of file AddFlowByShifting.h.

78{this, "McTruthKey" , "GEN_EVENT" }; //FIXME use Read/WriteHandles

◆ m_outkey

StringProperty AddFlowByShifting::m_outkey {this, "McFlowKey" , "FLOW_EVENT" }
private

Definition at line 79 of file AddFlowByShifting.h.

79{this, "McFlowKey" , "FLOW_EVENT" }; //FIXME use Read/WriteHandles

◆ m_particles_processed

int AddFlowByShifting::m_particles_processed {0}
private

Definition at line 99 of file AddFlowByShifting.h.

99{0};

◆ m_psi_n

float AddFlowByShifting::m_psi_n[Harmonic::NumHar]
private

Definition at line 110 of file AddFlowByShifting.h.

◆ m_ranphi_sw

IntegerProperty AddFlowByShifting::m_ranphi_sw {this, "RandomizePhi" , 0 }
private

Definition at line 80 of file AddFlowByShifting.h.

80{this, "RandomizePhi" , 0 };

◆ m_rndmSvc

ServiceHandle<IAthRNGSvc> AddFlowByShifting::m_rndmSvc {this, "RndmSvc", "AthRNGSvc"}
private

Definition at line 75 of file AddFlowByShifting.h.

75{this, "RndmSvc", "AthRNGSvc"};

◆ m_v_n

float AddFlowByShifting::m_v_n[Harmonic::NumHar]
private

Definition at line 111 of file AddFlowByShifting.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: