本文整理汇总了C++中Sensor::SetTimeWindow方法的典型用法代码示例。如果您正苦于以下问题:C++ Sensor::SetTimeWindow方法的具体用法?C++ Sensor::SetTimeWindow怎么用?C++ Sensor::SetTimeWindow使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Sensor
的用法示例。
在下文中一共展示了Sensor::SetTimeWindow方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
//.........这里部分代码省略.........
for(int j=0; j<n_strips_x; j++)
{
const char* name = ("Strip"+to_string(j)).c_str();
Xstrips[j]=Xoffset + Wstrip/2.0;
cmpAmp->AddStripOnPlaneY('z', 0.0, Xoffset, Xoffset + Wstrip, name);
Xoffset += Pitch;
cmpAmp->AddReadout(name);
sensor->AddElectrode(cmpAmp, name);
}
// Ion strip
cmpAmp->AddStripOnPlaneY('z', Htot, -w/2, w/2, "StripIon");
cmpAmp->AddReadout("StripIon");
sensor->AddElectrode(cmpAmp, "StripIon");
// Set constant magnetic field in [Tesla]
cmpDrift->SetMagneticField(MagX, MagY, MagZ);
// Set Time window for signal integration, units in [ns]
double tMin = 0.;
const double tMax = 100.;
const double tStep = 0.05;
const int nTimeBins = int((tMax - tMin) / tStep);
sensor->SetTimeWindow(0., tStep, nTimeBins);
double Ttime[nTimeBins];
for (int i = 0; i < nTimeBins; i++)
Ttime[i]= i * tStep;
//// This canvas will be used to display the drift lines and the field
//TCanvas * c = new TCanvas("c", "c", 10, 10, 1000, 700);
//c->Divide(2,1);
//// Construct object to visualise drift lines
//ViewDrift* viewdrift = new ViewDrift();
//viewdrift->SetArea(-0.2, 0.0, -0.1, 0.2, Htot,0.1 );
//viewdrift->SetClusterMarkerSize(0.1);
//viewdrift->SetCollisionMarkerSize(0.5);
//viewdrift->SetCanvas((TCanvas*)c->cd(1));
//For simulating the electron avalanche we use the class AvalancheMicroscopic
AvalancheMicroscopic* aval = new AvalancheMicroscopic();
//const int aval_size = 0.1;
aval->SetSensor(sensor);
// Switch on signal calculation.
aval->EnableSignalCalculation();
aval->SetTimeWindow(tMin,tMax );
//aval->EnableAvalancheSizeLimit(aval_size);
//aval->EnablePlotting(viewdrift);
aval->EnableDriftLines();
aval->EnableMagneticField();
// Additional optional switches
//aval->EnableExcitationMarkers();
//aval->EnableIonisationMarkers();
示例2: main
int main(int argc, char * argv[]) {
TStopwatch watch;
gRandom = new TRandom3(0); // set random seed
gROOT->ProcessLine(".L loader.c+"); // Initialize struct objects (see dictionaries)
// Gas setup
TString gasmixt[6] = { "C5H12", "CF4", "", "60", "40", "" };
TString output = gasmixt[0] + "-" + gasmixt[1] + "-" + gasmixt[2] + "-" + gasmixt[3] + "-" + gasmixt[4] + "-" + gasmixt[5];
std::string workingdir = "includes/";
workingdir.append("GEM5"); // Name of the working directory which contains the GEM files
workingdir.append("/");
std::string particleType = "mu";
Double_t particleEnergy = 100.e9;
bool debug = true;
Int_t it = 100;
// Load GEM dimensions
GEMconfig g;
loadGEMconfig(workingdir, g);
// Load the field map
ComponentAnsys123* fm = new ComponentAnsys123();
std::string efile = workingdir + "ELIST.lis";
std::string nfile = workingdir + "NLIST.lis";
std::string mfile = workingdir + "MPLIST.lis";
std::string sfile = workingdir + "PRNSOL.lis";
std::string wfile = workingdir + "WSOL.lis";
std::string dfile = workingdir + "WSOLD.lis";
if(!fm->Initialise(efile, nfile, mfile, sfile, "mm")) {
std::cout << "Error while loading the ANSYS field map files." << std::endl;
}
fm->EnableMirrorPeriodicityX();
fm->EnableMirrorPeriodicityY();
if(debug) {
fm->PrintRange();
}
fm->SetWeightingField(wfile, "readout");
fm->SetWeightingField(dfile, "ions");
// Gas setup
MediumMagboltz* gas = new MediumMagboltz();
gas->SetComposition((std::string)gasmixt[0], atof(gasmixt[3]), (std::string)gasmixt[1], atof(gasmixt[4]), (std::string)gasmixt[2], atof(gasmixt[5]));
gas->SetTemperature(293.15);
gas->SetPressure(760.0);
//gas->SetMaxElectronEnergy(200.);
gas->EnableDebugging();
gas->Initialise();
gas->DisableDebugging();
//const double rPenning = 0.57;
//const double lambdaPenning = 0.;
//gas->EnablePenningTransfer(rPenning, lambdaPenning, "ar");
gas->LoadIonMobility(GARFIELD + "Data/IonMobility_Ar+_Ar.txt");
//gas->LoadIonMobility(GARFIELD + "Data/IonMobility_CO2+_CO2");
//Associate the gas with the corresponding field map material.
const int nMaterials = fm->GetNumberOfMaterials();
for(int i=0; i<nMaterials; ++i) {
const double eps = fm->GetPermittivity(i);
if(fabs(eps - 1.) < 1.e-3) fm->SetMedium(i, gas);
}
if(debug) {
fm->PrintMaterials();
}
// Sensor setup
Sensor* sensor = new Sensor();
sensor->AddComponent(fm);
sensor->SetArea(-5.*(g.pitch), -5.*(g.pitch), 0.0, 5.*(g.pitch), 5.*(g.pitch), g.totalT);
// Setup HEED
TrackHeed* heed = new TrackHeed();
heed->SetSensor(sensor);
//heed->DisableDeltaElectronTransport();
heed->SetParticle(particleType);
heed->SetMomentum(particleEnergy);
if(debug) {
heed->EnableDebugging();
}
// Setup electron transport
AvalancheMicroscopic* aval = new AvalancheMicroscopic();
aval->SetSensor(sensor);
//aval->EnableAvalancheSizeLimit(1000);
sensor->AddElectrode(fm, "readout");
sensor->AddElectrode(fm, "ions");
const double tMin = 0.;
const double tMax = 75.;
const double tStep = 0.2;
const int nTimeBins = int((tMax - tMin)/tStep);
sensor->SetTimeWindow(0., tStep, nTimeBins);
aval->EnableSignalCalculation();
ViewSignal* signalView = new ViewSignal();
signalView->SetSensor(sensor);
TH1D* h; // tmp storage of timing histogram
//.........这里部分代码省略.........
示例3: main
//.........这里部分代码省略.........
Xstrip1 = Xoffset + Wstrip/2.0;
cmpAmp->AddStripOnPlaneY('z', 0.0, Xoffset, Xoffset + Wstrip, "Strip1");
Xoffset += (Wstrip + Interpitch); Xstrip2 = Xoffset + Wstrip/2.0;
cmpAmp->AddStripOnPlaneY('z', 0.0, Xoffset, Xoffset + Wstrip, "Strip2");
Xoffset += (Wstrip + Interpitch); Xstrip3 = Xoffset + Wstrip/2.0;
cmpAmp->AddStripOnPlaneY('z', 0.0, Xoffset, Xoffset + Wstrip, "Strip3");
//We want to calculate the signal induced on the strip.
//We have to tell this to the ComponentAnalyticalField
cmpAmp->AddReadout("Strip1");
cmpAmp->AddReadout("Strip2");
cmpAmp->AddReadout("Strip3");
// Set constant magnetic field in [Tesla]
cmpDrift->SetMagneticField(MagX, MagY, MagZ);
//Finally we assemble a Sensor object
Sensor* sensor = new Sensor();
// Calculate the electric field using the Component object cmp
sensor->AddComponent(cmpDrift);
sensor->AddComponent(cmpAmp);
// Request signal calculation for the electrode named with labels above,
// using the weighting field provided by the Component object cmp.
sensor->AddElectrode(cmpAmp, "Strip1");
sensor->AddElectrode(cmpAmp, "Strip2");
sensor->AddElectrode(cmpAmp, "Strip3");
// Set Time window for signal integration, units in [ns]
const double tMin = 0.;
const double tMax = 100.;
const double tStep = 0.05;
const int nTimeBins = int((tMax - tMin) / tStep);
sensor->SetTimeWindow(0., tStep, nTimeBins);
// This canvas will be used to display the drift lines and the field
TCanvas * c = new TCanvas("c", "c", 10, 10, 1000, 700);
c->Divide(2,1);
// Construct object to visualise drift lines
ViewDrift* viewdrift = new ViewDrift();
viewdrift->SetArea(0.0, 0.0, -0.1, 0.2, Htot,0.1 );
viewdrift->SetClusterMarkerSize(0.1);
viewdrift->SetCollisionMarkerSize(0.5);
viewdrift->SetCanvas((TCanvas*)c->cd(1));
//For simulating the electron avalanche we use the class AvalancheMicroscopic
AvalancheMicroscopic* aval = new AvalancheMicroscopic();
const int aval_size = 10;
aval->SetSensor(sensor);
// Switch on signal calculation.
aval->EnableSignalCalculation();
aval->SetTimeWindow(tMin,tMax );
// aval->EnableAvalancheSizeLimit(aval_size);
aval->EnablePlotting(viewdrift);
aval->EnableDriftLines();
aval->EnableMagneticField();
// Additional optional switches
//aval->EnableExcitationMarkers();
//aval->EnableIonisationMarkers();
//Add ionizing particle using Heed
// Here we add a negative pion with some momentum, units in [eV/c]
const double momentum = 300.e+06; // eV/c
TrackHeed* track = new TrackHeed();