00001 #ifndef GflashHadronShowerProfile_H 00002 #define GflashHadronShowerProfile_H 00003 00004 #include "SimG4Core/GFlash/interface/GflashNameSpace.h" 00005 #include "SimG4Core/GFlash/interface/GflashTrajectory.h" 00006 #include "CLHEP/Random/RandGaussQ.h" 00007 #include "CLHEP/Random/RandGamma.h" 00008 00009 #include "G4VFastSimulationModel.hh" 00010 #include "G4Step.hh" 00011 #include "G4TouchableHandle.hh" 00012 00013 #include <vector> 00014 00015 class GflashEnergySpot; 00016 class GflashHistogram; 00017 00018 class GflashHadronShowerProfile 00019 { 00020 public: 00021 //------------------------- 00022 // Constructor, destructor 00023 //------------------------- 00024 GflashHadronShowerProfile (G4Region* envelope); 00025 ~GflashHadronShowerProfile (); 00026 00027 Gflash::CalorimeterNumber getCalorimeterNumber(const G4ThreeVector position); 00028 void clearSpotList() { aEnergySpotList.clear(); } 00029 void hadronicParameterization(const G4FastTrack& fastTrack); 00030 std::vector<GflashEnergySpot>& getEnergySpotList() {return aEnergySpotList;}; 00031 00032 private: 00033 void loadParameters(const G4FastTrack& fastTrack); 00034 G4double longitudinalProfile(G4double showerDepth, G4double pathLength, G4double transDepth); 00035 void samplingFluctuation(G4double &de, G4double einc); 00036 inline Gflash::CalorimeterNumber getCalorimeterNumber() {return jCalorimeter;} 00037 G4bool insideSampling(const G4ThreeVector pos); 00038 void doCholeskyReduction(G4double **cc, G4double **vv, const G4int ndim); 00039 void fillFluctuationVector(); 00040 00041 private: 00042 00043 G4int showerType ; 00044 Gflash::CalorimeterNumber jCalorimeter ; 00045 std::vector<GflashEnergySpot> aEnergySpotList; 00046 00047 G4double energyToDeposit; 00048 //lateral and longitudinal parameters 00049 G4double correlationVector[Gflash::NRegion*Gflash::NxN*(Gflash::NxN+1)/2]; //21*3 = 63 00050 G4double longPar[Gflash::NRegion][Gflash::NxN]; 00051 // G4double longPar2[6]; 00052 // G4double longPar3[6]; 00053 G4double lateralPar[4]; 00054 00055 // G4double longSigma1[6]; 00056 G4double longSigma[Gflash::NRegion][Gflash::NxN]; 00057 00058 // GflashMediaMap* theMediaMap; 00059 GflashHistogram* theHisto; 00060 GflashTrajectory* theHelix; 00061 00062 CLHEP::RandGaussQ* theRandGauss; 00063 CLHEP::RandGamma* theRandGamma; 00064 }; 00065 00066 #endif 00067 00068 00069 00070