PandaRoot
PndFastSim.h
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndFastSim header file -----
3 // ----- Created 20/11/07 by K. Goetzen -----
4 // -------------------------------------------------------------------------
5 
6 #ifndef PNDFASTSIM_H
7 #define PNDFASTSIM_H 1
8 
9 #include "FairTask.h"
10 #include "PndPersistencyTask.h"
11 #include "TVector3.h"
12 #include "TMatrixD.h"
13 #include <string>
14 #include <list>
15 #include "TString.h"
16 #include "TClonesArray.h"
17 
18 class TObjectArray;
19 class PndFsmTrack;
20 class TRandom3;
21 class TLorentzVector;
22 class PndFsmAbsDet;
23 class PndFsmResponse;
24 class PndFsmDetFactory;
25 class TF1;
26 class TDatabasePDG;
28 
29 typedef std::list<PndFsmAbsDet *> FsmAbsDetList;
30 typedef std::list<PndFsmResponse *> FsmResponseList;
31 
33 
34  public:
35  // typedef std::map<Int_t, Float_t> mapper;
36 
38  PndFastSim(bool persist = true);
39 
41  ~PndFastSim();
42 
43  void Register(); //
44 
46  virtual InitStatus Init();
47 
48  virtual void Finish();
49 
51  virtual void Exec(Option_t *opt);
52 
53  bool AddDetector(std::string name, std::string params = "");
54  bool AddDetector(PndFsmAbsDet *det);
55  void SetVerbosity(int vb) { fVb = vb; }
56  bool EnableSplitoffs(std::string fname = "splitpars.dat");
57  bool MergeNeutralClusters(bool merge = true, double par = 0.389)
58  {
59  fMergeNeutralClusters = merge;
60  fMergeProbPar = par;
61  return true;
62  }
63  void EnableElectronBremsstrahlung(bool brems = true) { fElectronBrems = brems; }
64  void EnablePropagation(bool propagate = true, bool tostartvtx = true, bool usecovmatrix = true, double tolerance = 0.0);
65  void SetUseFlatCov(bool v = true) { fUseFlatCovMatrix = v; };
66 
67  void SetMultFilter(TString type, int min, int max = 1000);
68  void SetInvMassFilter(TString filter, double min, double max, int mult = 1);
69 
70  void SetSeed(unsigned int seed = 65539);
71  // void CreateStructure();
72 
73  private:
74  PndFsmResponse *sumResponse(FsmResponseList respList);
75 
76  int acceptFilters(RhoCandList &l);
77  int chCon(int i);
78  void copyAndSetMass(RhoCandList &l, RhoCandList &nl, int pdg);
79 
80  bool cutAndSmear(PndFsmTrack *t, PndFsmResponse *r);
81  bool cutAndSmear(PndFsmTrack *t);
82 
83  void smearEnergy(PndFsmTrack *t, double dE);
84  void smearMomentum(PndFsmTrack *t, double dp);
85  void smearTheta(PndFsmTrack *t, double dtheta);
86  void smearPhi(PndFsmTrack *t, double dphi);
87  void smearVertex(PndFsmTrack *t, TVector3 dV);
88  void smearM(PndFsmTrack *t, double dm);
89  void smearM2(PndFsmTrack *t, double m2);
90  void smearMvddEdx(PndFsmTrack *t, double dedx);
91  void smearTpcdEdx(PndFsmTrack *t, double dedx);
92  void smearSttdEdx(PndFsmTrack *t, double dedx);
93  void SetFlatCovMatrix(PndFsmTrack *t, double dp = 0., double dtheta = 0., double dphi = 0., double dE = 0., double dx = 0., double dy = 0., double dz = 0.);
94  void UpdateGammaHit(PndFsmTrack *t);
95 
97  TClonesArray *fMcCandidates;
98  TClonesArray *fPidChargedCand;
99  TClonesArray *fPidNeutralCand;
100  TClonesArray *fMicroCandidates;
101  TClonesArray *fPidChargedProb;
102  TClonesArray *fPidNeutralProb;
103 
104  std::map<TString, TClonesArray *> fPidArrayList;
105  // output array EventInfo
106  TClonesArray *fEventInfo;
107 
108  TRandom3 *fRand;
109  int fVb; // verbosity level
110  int evtcnt; // event counter for output
111  TF1 *fspo[5][4];
112  TF1 *fBremsEnergy;
113  bool fGenSplitOffs;
114  bool fMergeNeutralClusters;
115  bool fElectronBrems;
116  double fMergeProbPar;
117  bool fPropagate;
118  bool fToStartVtx;
119  bool fUseCovMatrix;
120  bool fUseFlatCovMatrix;
121  double fTolerance;
122 
123  // filter vars
124  bool fApplyFilter;
125  int fMultMin[6];
126  int fMultMax[6];
127  TString fInvMassFilter;
128  double fInvMassMin;
129  double fInvMassMax;
130  int fInvMassMult;
131  int fCombIndex[5];
132  int fCombMult;
133  bool fChargeConj;
134  int fNAccept;
135 
136  PndFsmDetFactory *fDetFac;
137  std::string fAddedDets;
138  FsmAbsDetList fDetList;
139 
140  TDatabasePDG *fdbPdg;
141 
143  virtual void SetParContainers();
144 
145  bool smearTrack(PndFsmTrack *t, int idx = -1);
146 
147  static TMatrixD fRho;
148  static TMatrixD fEta;
149 
150  ClassDef(PndFastSim, 1);
151 };
152 
153 #endif
bool AddDetector(std::string name, std::string params="")
void SetSeed(unsigned int seed=65539)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:25
std::list< PndFsmResponse * > FsmResponseList
Definition: PndFastSim.h:30
__m128 v
Definition: P4_F32vec4.h:3
unsigned int i
Definition: P4_F32vec4.h:21
void SetUseFlatCov(bool v=true)
Definition: PndFastSim.h:65
bool MergeNeutralClusters(bool merge=true, double par=0.389)
Definition: PndFastSim.h:57
void SetInvMassFilter(TString filter, double min, double max, int mult=1)
void EnableElectronBremsstrahlung(bool brems=true)
Definition: PndFastSim.h:63
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:24
bool EnableSplitoffs(std::string fname="splitpars.dat")
void SetMultFilter(TString type, int min, int max=1000)
void SetVerbosity(int vb)
Definition: PndFastSim.h:55
void Register()
virtual void Finish()
virtual void Exec(Option_t *opt)
virtual InitStatus Init()
PndFastSim(bool persist=true)
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
std::list< PndFsmAbsDet * > FsmAbsDetList
Definition: PndFastSim.h:27
void EnablePropagation(bool propagate=true, bool tostartvtx=true, bool usecovmatrix=true, double tolerance=0.0)