File indexing completed on 2024-04-06 12:30:34
0001 #ifndef GflashHadronShowerProfile_H
0002 #define GflashHadronShowerProfile_H
0003
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005
0006 #include "SimGeneral/GFlash/interface/GflashHistogram.h"
0007 #include "SimGeneral/GFlash/interface/GflashNameSpace.h"
0008 #include "SimGeneral/GFlash/interface/GflashShowino.h"
0009 #include "SimGeneral/GFlash/interface/GflashTrajectory.h"
0010
0011 #include <vector>
0012
0013 class GflashHit;
0014
0015 class GflashHadronShowerProfile {
0016 public:
0017
0018
0019
0020 GflashHadronShowerProfile(const edm::ParameterSet &parSet);
0021 virtual ~GflashHadronShowerProfile();
0022
0023 void initialize(int showerType,
0024 double energy,
0025 double globalTime,
0026 double charge,
0027 Gflash3Vector &position,
0028 Gflash3Vector &momentum);
0029
0030 virtual void loadParameters();
0031 void hadronicParameterization();
0032 GflashShowino *getGflashShowino() { return theShowino; }
0033 std::vector<GflashHit> &getGflashHitList() { return theGflashHitList; };
0034
0035 protected:
0036 double longitudinalProfile();
0037 double hoProfile(double pathLength, double refDepth);
0038 void doCholeskyReduction(double **cc, double **vv, const int ndim);
0039 void getFluctuationVector(double *lowTriangle, double *correlationVector);
0040 void setEnergyScale(double einc, const Gflash3Vector &ssp);
0041
0042 int getNumberOfSpots(Gflash::CalorimeterNumber kCalor);
0043 double medianLateralArm(double depth, Gflash::CalorimeterNumber kCalor);
0044 Gflash3Vector locateHitPosition(GflashTrajectoryPoint &point, double lateralArm);
0045
0046 double fTanh(double einc, const double *par);
0047 double fLnE1(double einc, const double *par);
0048 double depthScale(double ssp, double ssp0, double length);
0049 double gammaProfile(double alpha, double beta, double depth, double lengthUnit);
0050 double twoGammaProfile(double *par, double depth, Gflash::CalorimeterNumber kIndex);
0051
0052
0053
0054 protected:
0055 edm::ParameterSet theParSet;
0056 double theBField;
0057 bool theGflashHcalOuter;
0058
0059 GflashShowino *theShowino;
0060 GflashHistogram *theHisto;
0061
0062 double energyScale[Gflash::kNumberCalorimeter];
0063 double averageSpotEnergy[Gflash::kNumberCalorimeter];
0064 double longEcal[Gflash::NPar];
0065 double longHcal[Gflash::NPar];
0066 double lateralPar[Gflash::kNumberCalorimeter][Gflash::Nrpar];
0067
0068 std::vector<GflashHit> theGflashHitList;
0069 };
0070
0071 #endif