// simulation of induced current model iusing e-h transport // 2010.9.30 T. Kondo(KEK) // #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ITHistSvc.h" #include "TH1.h" #include "TProfile.h" #include "AthenaKernel/IAtRndmGenSvc.h" class IAtRndmGenSvc; class ISiPropertiesSvc; ///////////////////////////////////////////////////////////////////////////// class MySCTtscan:public AthAlgorithm { public: MySCTtscan(const std::string& name, ISvcLocator* pSvcLocator); ~MySCTtscan(); StatusCode initialize(); StatusCode execute(); StatusCode finalize(); StatusCode initRandomEngine(); StatusCode holeTransport(double x0, double y0, double* Q_m2, double* Q_m1, double* Q_00, double* Q_p1, double* Q_p2 ); StatusCode electronTransport(double x0, double y0, double* Q_m2, double* Q_m1, double* Q_00, double* Q_p1, double* Q_p2 ); StatusCode oldSCTDigitization(double x0, double y0, double* Q_m2, double* Q_m1, double* Q_00, double* Q_p1, double* Q_p2 ); double Drift_Time(double zhit); double Drift_SurfaceTime(double ysurf); double Amp_response(double time); double Amp_crosstalk(double time); void init_Amp(); void initTransport(); bool electron( double x_e, double y_e, double &vx_e, double &vy_e, double &D_e) ; bool hole( double x_h, double y_h, double &vx_h, double &vy_h, double &D_h); double mud_e(double E) ; void init_mud_e(double T) ; double mud_h(double E) ; void init_mud_h(double T) ; void EField( double x, double y, double &Ex, double &Ey ) ; double induced (int istrip, double x, double y); void initExEyArray(); void initPotentialValue(); double dEdX(int id,double p); double locPhi( double x, double pt); double locPhi(double& stereo, double& pt, double& phi0, double& theta0, double &xlocal); void initLocPhi(); private: //!< Random number service ServiceHandle m_rndmSvc; //!< Random number service //ServiceHandle getRndmSvc() const { return m_rndmSvc; } std::string m_rndmEngineName; //!< Name of random engine, CLHEP::HepRandomEngine *m_rndmEngine; //!< Random number generation engine // ServiceHandle m_siPropertiesSvc; // /** a handle on the Hist/TTree registration service */ ITHistSvc * m_thistSvc; /** Histograms */ TH1F *m_h_hitStrip; TH1F *m_h_pt; TH1F *m_h_ptin; TH1F *m_h_ptsource; TH1F *m_h_locf; TH1F *m_h_hit; TH1F *m_h_nohit; TH1F *m_h_miss; TH1F *m_h_tot_0; TH1F *m_h_tot_0_miss; TH1F *m_h_tot_m10; TH1F *m_h_tot_m10_miss; //------parameters given exterbnally by jobOptions ------------------ int m_model; bool m_isSCTDigiModel; double m_timeOffset; double m_timeOfThreshold; double m_timeOfThreshold_min; double m_timeOfThreshold_max; bool m_isNewPulseShape; double m_felectron; double m_fpion; double m_fkaon; double m_fproton; int m_strip_min; int m_strip_max; double m_locf_min; double m_locf_max; int m_polarity; double m_pt_min; double m_pt_max; double m_ptPower; bool m_isPtPowerWeighting; double m_ptPowerForSampling; int m_layer; double m_radius; double m_tiltAngle; double m_VD; double m_VB; double m_B; double m_T; double m_transportTimeStep; double m_transportTimeMax; double m_x_origin_min; double m_x_origin_max; double m_phi_min; double m_phi_max; double m_zmodule_min; double m_zmodule_max; double m_threshold; double m_crossTalk; int m_ydivision; double m_eh_pairs; bool m_isLandau; int m_coutLevel; bool m_isdEdX; double m_chargeTimeStep; double m_stripTilt; //------parameters mostly fixed but can be changed exterbnally ------------ double m_bulk_depth; double m_strip_pitch; double m_CrossFactor2sides; double m_CrossFactorBack; double m_PeakTime; //------parameters mostly fixed but can be changed exterbnally ------------ double m_tanStrip; double m_ptArea; double m_x_strip0; double m_phi0_min_neg; double m_phi0_max_neg; double m_phi0_min_pos; double m_phi0_max_pos; //-------common parameters ------------------------------------------- double m_kB; double m_e; double m_vs_e; double m_Ec_e ; double m_driftMobility; double m_tanLA; double m_diffusion; double m_beta_e ; double m_vs_h; double m_Ec_h ; double m_beta_h ; int m_event_number; double m_depletion_depth; double m_y_origin_min; double m_NormConstCentral; double m_NormConstNeigh; //----------------------------------------------------------------- double m_PotentialValue[81][115]; double m_ExValue150[17][115]; double m_EyValue150[17][115]; StatusCode m_sc; };