MarlinTPC  1.2.0
PrimaryIonisationProcessor.h
1 #ifndef PrimaryIonisationProcessor_h
2 #define PrimaryIonisationProcessor_h 1
3 
4 //LCIO
5 #include <EVENT/MCParticle.h>
6 #include <lcio.h>
7 
8 //MARLIN
9 #include "marlin/Processor.h"
10 
11 //C++
12 #include <string>
13 
14 //GSL
15 //#include <gsl/gsl_rng.h>
16 //#include <gsl/gsl_randist.h>
17 
18 namespace marlintpc{
19 
20 /* The following comment is tranfered to doxygen documentation
21  * which begins with a second asterix, or in case of on line comment an extra third slash
22  */
23 
51 class PrimaryIonisationProcessor : public marlin::Processor {
52 
53  public:
54 
55  virtual Processor* newProcessor() { return new PrimaryIonisationProcessor ; }
56 
57 
59  virtual ~PrimaryIonisationProcessor(){ }
60 
63  virtual void init() ;
64 
67  virtual void processRunHeader( lcio::LCRunHeader* run ) ;
68 
71  virtual void processEvent( lcio::LCEvent * evt ) ;
72 
73 
75  virtual void SetParticleParameters(lcio::MCParticle* mcparticle);
76 
78  virtual void InitializeTrackPoint();
79 
81  virtual void CalculateNumberOfElectrons();
82  virtual void CalculateNumberOfClusters();
83  virtual void ReadEPerClusterInfoFile();
84  virtual void ReadClusterDensityFile();
85 
87  virtual void CalculateTrackPointwithBfield();
88 
90  virtual void CalculateTrackPointwithoutBfield();
91  int GetTotalNumberOfElectrons(){return InTPC;}
92 
94  virtual void CalculateClusterDistance();
95 
97  virtual void CalculateEnergyLoss();
98 
100  virtual void RotateToTrack(double x, double y, double z);
101 
103  virtual void RotateToDelta(double x, double y, double z);
104 
106  virtual void MultipleScattering(double phi, double theta);
107  virtual void SetNextStartPoint();
108 
109 
110 
111 
112  protected:
113 
114  // Input/output collection names.
115  std::string _inputCollectionName;
117 
118 
119  std::string clusterdensityfile;
120  std::string eperclusterfile;
121 
122  //For internal bookkeeping
123  int _nRun ;
124  int _nEvt ;
125 
126  //TPC parameters
127  float _TPCRadius;
129  float _BField;
130 
131  float _distance;
132  int _transient;
133 
134  bool _groupElectrons; // flag whether to group electrons at the same position to one hit
135 
139  int Curler;
141  // gsl_rng *r;
142 
145  double aheed[8];
146  int numberofelectrons;
147  double numberofclusters;
148  double clusterdistance;
149 
152  std::vector<double> clusterelectrons[2];
153  double _clusterprobcutoff; // slightly smaller than where the integrated probability is cut off
154 
156  int InTPC;
157  // coordinates and variables for track
159  double xa,ya,za;
161  double xv,yv,zv;
163  double xend,yend,zend, tend;
165  double x_e,y_e,z_e,t_e;
167  double dx,dy,dz,dr;
168 
170  double dp;
171 
172  // particle variables
174  double px,py,pz,pt,p,p_const;
175  double energy;
176  double mass;
177  double charge;
178  int pdg;
179  double delta_x,delta_y,delta_z;
180 } ;
181 
182 }//end of namespace marlintpc
183 
184 #endif
185 
Processor to create primary ionisation from MCParticles passing the TPC.
Definition: PrimaryIonisationProcessor.h:51
float _TPCRadius
Outer radius of the TPC.
Definition: PrimaryIonisationProcessor.h:127
double dp
Definition: PrimaryIonisationProcessor.h:170
virtual void CalculateEnergyLoss()
Definition: PrimaryIonisationProcessor.cc:683
virtual void CalculateClusterDistance()
Definition: PrimaryIonisationProcessor.cc:592
virtual void processRunHeader(lcio::LCRunHeader *run)
Called for every run.
Definition: PrimaryIonisationProcessor.cc:166
virtual void InitializeTrackPoint()
Definition: PrimaryIonisationProcessor.cc:513
float _BField
Magnetic field strength.
Definition: PrimaryIonisationProcessor.h:129
double xend
Definition: PrimaryIonisationProcessor.h:163
virtual void CalculateNumberOfElectrons()
Definition: PrimaryIonisationProcessor.cc:601
std::vector< double > clusterelectrons[2]
For calculation of # electrons per cluster from Parameterisation from HEED.
Definition: PrimaryIonisationProcessor.h:152
double dx
Definition: PrimaryIonisationProcessor.h:167
int Curler
For full simulation of Curler set to 0, otherwise standard 1 means simplified treatment of low moment...
Definition: PrimaryIonisationProcessor.h:139
double px
Definition: PrimaryIonisationProcessor.h:174
virtual void processEvent(lcio::LCEvent *evt)
Called for every event - the working horse.
Definition: PrimaryIonisationProcessor.cc:184
int InTPC
Definition: PrimaryIonisationProcessor.h:156
double aheed[8]
Fitparameters for calculation of # clusters from Parameterisation from HEED.
Definition: PrimaryIonisationProcessor.h:145
virtual void MultipleScattering(double phi, double theta)
Definition: PrimaryIonisationProcessor.cc:747
std::string clusterdensityfile
File with parametrisation of cluster density.
Definition: PrimaryIonisationProcessor.h:119
std::string _outputCollectionName
Name of output collection.
Definition: PrimaryIonisationProcessor.h:116
std::string eperclusterfile
File with parametrisation of electrons per cluster.
Definition: PrimaryIonisationProcessor.h:120
virtual void CalculateTrackPointwithoutBfield()
Definition: PrimaryIonisationProcessor.cc:559
virtual void RotateToDelta(double x, double y, double z)
Definition: PrimaryIonisationProcessor.cc:724
double xv
Definition: PrimaryIonisationProcessor.h:161
virtual void init()
Called at the begin of the job before anything is read.
Definition: PrimaryIonisationProcessor.cc:106
virtual void RotateToTrack(double x, double y, double z)
Definition: PrimaryIonisationProcessor.cc:701
double xa
Definition: PrimaryIonisationProcessor.h:159
virtual void SetParticleParameters(lcio::MCParticle *mcparticle)
Definition: PrimaryIonisationProcessor.cc:490
virtual void CalculateTrackPointwithBfield()
Definition: PrimaryIonisationProcessor.cc:525
double x_e
Definition: PrimaryIonisationProcessor.h:165
std::string _inputCollectionName
Name of input collection.
Definition: PrimaryIonisationProcessor.h:115
float _TPCInnerRadius
Inner radius of the TPC.
Definition: PrimaryIonisationProcessor.h:128