7 #include <FairLogger.h> 
    9 #include <TClonesArray.h> 
   11 #include <TMathBase.h>  
   32    LOG(info) << 
"  Ionization energy of gas: " << 
fEIonize << 
" MeV";
 
   33    LOG(info) << 
"  Fano factor of gas: " << 
fFano;
 
   34    LOG(info) << 
"  Drift velocity: " << 
fVelDrift;
 
   35    LOG(info) << 
"  Longitudal coefficient of diffusion: " << 
fCoefL;
 
   36    LOG(info) << 
"  Transverse coefficient of diffusion: " << 
fCoefT;
 
   37    LOG(info) << 
"  Position of the pad plane (Z): " << 
fDetPadPlane;
 
   42    for (
auto &point : vec) {
 
   43       auto size = array.GetEntriesFast();
 
   50    std::vector<SimPointPtr> ret;
 
   51    for (
int i = 0; i < fMCPointArray.GetEntries(); ++i) {
 
   52       auto mcPoint = 
dynamic_cast<AtMCPoint *
>(fMCPointArray.At(i));
 
   55          ret.push_back(std::move(point));
 
   63       LOG(info) << 
"Skipping point " << pointID << 
". Not in drift volume.";
 
   67    auto trackID = mcPoint.GetTrackID();
 
   72    if (mcPoint.GetEnergyLoss() == 0 || 
fTrackID != trackID) {
 
   80    if (genElectrons > 0) {
 
   81       step = (currentPoint - 
fPrevPoint) / genElectrons;
 
   87    std::vector<SimPointPtr> ret;
 
   90    for (
int i = 0; i < genElectrons; ++i) {
 
   91       auto loc = applyDiffusion(currentPoint + i * step, sigTrans, sigLong);
 
   92       XYZVector locVec(loc.X(), loc.Y(), loc.Z());
 
   93       ret.push_back(std::make_unique<AtSimulatedPoint>(pointID, i, locVec));
 
   94       LOG(debug2) << loc << 
" from " << currentPoint + i * step;
 
  103    auto sigInCm = TMath::Sqrt(
fCoefL * 2 * driftTime);
 
  111    return 10. * TMath::Sqrt(
fCoefT * 2 * driftTime);
 
  116    auto energyLoss = mcPoint.GetEnergyLoss() * 1000.;
 
  117    auto meanElec = energyLoss / 
fEIonize;
 
  118    auto sigElec = TMath::Sqrt(
fFano * meanElec);
 
  119    return gRandom->Gaus(meanElec, sigElec);
 
  125    auto driftTime = TMath::Abs(zInCm) / 
fVelDrift; 
 
  127    return {mcPoint.GetX() * 10., mcPoint.GetY() * 10., driftTime};
 
  133    auto r = gRandom->Gaus(0, sigTrans);
 
  134    auto phi = gRandom->Uniform(0, TMath::TwoPi());
 
  135    auto dz = gRandom->Gaus(0, sigLong);
 
  137    return loc + 
XYZVector(r * TMath::Cos(phi), r * TMath::Sin(phi), dz);