#include #include #include #include #include #include #include #include #include "Garfield/ViewDrift.hh" #include "Garfield/ViewSignal.hh" #include "Garfield/ViewFEMesh.hh" #include "Garfield/ViewField.hh" #include "Garfield/DriftLineRKF.hh" #include "Garfield/ComponentComsol.hh" #include "Garfield/MediumMagboltz.hh" #include "Garfield/Sensor.hh" #include "Garfield/AvalancheMC.hh" #include "Garfield/AvalancheMicroscopic.hh" #include "Garfield/SolidBox.hh" #include "Garfield/GeometrySimple.hh" #include "Garfield/ComponentConstant.hh" #include "Garfield/TrackSrim.hh" #include "Garfield/Random.hh" #include "Garfield/Plotting.hh" #include "Garfield/TrackHeed.hh" using namespace Garfield; //电流前端电子学卷积函数 double Transferfunction(double t){ /* constexpr double risistance= 100 ; //电阻设置 constexpr double capacitance= 100; //电容设置 */ //constexpr double tau=25;//ns //return exp(-t/tau); constexpr double tau = 160; constexpr double fC_to_mV = 12.7; return fC_to_mV * exp(4) * pow((t / tau), 4) * exp(-4 * t / tau); } //原始电流信号打印到txt文件函数 void printsignaltotxt(Sensor& sensor,const std::string label,const int nTimebins,const double tstep,const double tmin){ char title[60]; sprintf(title,"currentsignal Xe_%.1f_CO2_%.1f_300K_%.2fAtm_%.0fV.txt",85.0,15.0,1.0,1.0); std::ofstream outfile; outfile.open(title,std::ios::out); outfile << "time(ns) "<< "total current "<< "electron current " << "ion current\n"; for(unsigned int i=0;iSetArea(-4.5 * xhalf, -0.42 * xhalf, -0.92* xhalf, 4.5 * xhalf, 0.42 * xhalf, 0.92 * xhalf); meshView->SetCanvas(cd); meshView->SetComponent(&fm); // y-z projection. meshView->SetPlane(1, 0, 0, 0, 0, 0); meshView->SetFillMesh(true); // Set the color of the 304.map ID,不锈钢上色 meshView->SetColor(1, kRed); meshView->EnableAxes(); meshView->SetViewDrift(&driftView); meshView->Plot(); cd->SaveAs("dirftline.jpg");//输出漂移线图片 } // Plot the induced current. ViewSignal signalView; signalView.SetSensor(&sensor); TCanvas* cg = new TCanvas("cg", "", 600, 600); signalView.SetCanvas(cg); signalView.SetLabelY("signal [fc/ns]]"); signalView.PlotSignal("wf"); //电流信号输出 //打印原始总电流,电子电流,离子电流信号到txt文件 printsignaltotxt(sensor,"wf",nbins,tstep,tmin); // Convolute with the transfer function and plot again.感应电压 sensor.SetTransferFunction(Transferfunction); constexpr bool fft = true; sensor.ConvoluteSignals(fft); TCanvas* cv = new TCanvas("cv", "", 600, 600); signalView.SetCanvas(cv); signalView.SetLabelY("signal [mV]"); signalView.PlotSignal("wf"); //导出电压信号 printvol(sensor,"wf",nbins,tstep,tmin); std::cout << "Calculation is finished.\n"; //计算完成标志 app.Run(true); }