//----------------------------------------------- // 2017.7.18 updated // 2016.4.1 for ICM (induced charge model) by Taka Kondo (KEK) //----------------------------------------------- #include "Ramo.h" TProfile *m_h_phi ; TLegend *leg; TLatex *t; void plot_track(){ setupCanvas(1,1); //------------set main parameters and initialization---------------- m_EfieldModel = 2; m_VD = 70.; m_VB = 150.; //----------------- m_coutLevel = 2; // 2(print origin of eh pair and hole/elec results) m_coutLevel = 1; // 0(print ievery 2000 event) m_coutLevel = 3; // 3(print t,x,y of all time steps) m_coutLevel = 0; // 0(print ievery 2000 event) //------------------------------- m_phi_min = -16.; m_phi_max = 8. ; m_eta_min = -1.5 ; m_eta_max = 1.5 ; int TotalEventNumber = 500000; double ymin= 0.9, ymax=2.0; leg = new TLegend(0.7,0.8,0.9,0.9); m_isNewCrossTalk = false; m_isNewCrossTalk = true; //---------digitization models--------------- for (int model=0; model<2; model++) { m_isSCTDigiModel = false; // induced charge model if( model==0) m_isSCTDigiModel = true; // (old) SCT Digitization model initialize(); //----------------- m_h_phi = new TProfile("phi_dist","phi_distrib",48, -16., 8., 0., 20.); //------------------------------------ //------------local_phi and eta samplings ------------- for (int n=0; n GetXaxis()->SetLabelSize(0.04); m_h_phi -> GetYaxis()->SetLabelSize(0.04); m_h_phi -> GetXaxis()->SetTitleSize(0.04); m_h_phi -> GetYaxis()->SetTitleSize(0.04); m_h_phi -> GetXaxis()->SetTitle("Incident angle [#circ]"); m_h_phi -> GetXaxis()->SetTitleOffset(1.0); m_h_phi -> GetYaxis()->SetTitle("New Cluster Width"); m_h_phi -> GetYaxis()->SetTitleOffset(1.1); m_h_phi -> GetYaxis()->SetLabelOffset(0.01); m_h_phi -> SetMaximum(ymax); m_h_phi -> SetMinimum(ymin); m_h_phi -> SetMarkerColor(model+1); if(model==0) m_h_phi -> Draw(); else m_h_phi -> Draw("SAME P"); //---------------------------------- sprintf(m_cid,"Ramo model"); if(m_isSCTDigiModel) sprintf(m_cid,"SCTDigi model"); leg->AddEntry(m_h_phi,m_cid,"p"); } leg->SetFillColor(10);leg->SetBorderSize(0); leg->SetTextSize(0.04); leg->Draw(); sprintf(m_cid,"V_{D}=%5.1fV, V_{B}=%5.1fV",m_VD, m_VB); t=new TLatex(-15.0,(ymax-ymin)*0.9+ymin,m_cid); t->SetTextSize(0.04); t->Draw(); sprintf(m_cid,"Eta ranges : %4.1f - %4.1f ",m_eta_min, m_eta_max); t=new TLatex(-15.0,(ymax-ymin)*0.84+ymin,m_cid); t->SetTextSize(0.04); t->Draw(); sprintf(m_cid,"with original cross-talk shape"); if(m_isNewCrossTalk) sprintf(m_cid,"with new cross-talk shape"); t=new TLatex(-15.0,(ymax-ymin)*0.78+ymin,m_cid); t->SetTextSize(0.04); t->Draw(); //-------------output plot----- sprintf(m_cid,"Lorentz_VD%d_VB%d.png",int(m_VD), int(m_VB)); canvas->Print(m_cid); //---------------------------------------- return; } void execute() { m_eventNumber++ ; //--------------- dE/dX fluctuation ------------------------------ double Landau = 108.; if(m_isLandau) { for (int j=0; j<100; j++) { Landau = gRandom->Landau(72., 11.8) ; if (Landau < 500.) break; } } // eh_pairs = number of eh_pairs per micros double eh_pairs = m_eh_pairs * Landau/108. ; //------------------particle track generation------------------------------ double radian = 180./3.141593; double width = m_phi_max - m_phi_min; double phi = m_phi_min + width * gRandom->Uniform(0.0,1.0); width = m_eta_max - m_eta_min; double eta = m_eta_min + width * gRandom->Uniform(0.0,1.0); double z_theta = 2.* atan(exp(-eta)); width = m_x_origin_max - m_x_origin_min; double x_origin = m_x_origin_min + width * gRandom->Uniform(0.0,1.0); // charge = total eh_pair charges in fC double charge = m_bulk_depth * 1.E4 * eh_pairs *1.6E-19/1.E-15; //cout<<"eh_pairs = "<=0 && jstrip < 21) qstrip[jstrip][it] += Q_m2[it]; // m1 jstrip++; if (jstrip >=0 && jstrip < 21) qstrip[jstrip][it] += Q_m1[it]; // 00 jstrip++; if (jstrip >=0 && jstrip < 21) qstrip[jstrip][it] += Q_00[it]; // p1 jstrip++; if (jstrip >=0 && jstrip < 21) qstrip[jstrip][it] += Q_p1[it]; // p2 jstrip++; if (jstrip >=0 && jstrip < 21) qstrip[jstrip][it] += Q_p2[it]; } // --- end of time bin loop } // -----------------end of one track loop --------------- //-----------------print one track result---------------- if( m_eventNumber < 3 ) { double totalCharge = 0.; for (int it=0; it<50; it++) { sprintf(m_cid,"%d : %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f",it, qstrip[7][it],qstrip[8][it],qstrip[9][it],qstrip[10][it],qstrip[11][it], qstrip[12][it],qstrip[13][it],qstrip[14][it]); cout< 0) pulse[istrip-1][j] += crosstalk; if( istrip < 19) pulse[istrip+1][j] += crosstalk; } } } //------------------------------- if(m_coutLevel>1) { std::cout<<"tbin\ttime\tpulse[8]\tpulse[9]\tpulse[10]\tpulse[11]" <max_clsize) ? cluster_size : max_clsize; } if( m_coutLevel>0 || (m_eventNumber<10 ||fmod(m_eventNumber,2000) == 0)) std::cout<Divide(NX, NY); double rightM = 0.02, leftM = 0.10, topM = 0.07, bottomM=0.08; double gapY=0.03, gapX=0.02; double height[NY], width[NX]; for(int i=0;iGetListOfPrimitives()->FindObject(m_cid); canv[ixy]->SetPad(X1[ix],Y1[iy],X2[ix],Y2[iy]); canv[ixy]->SetFillColor(0); canv[ixy]->SetFrameFillColor(0); canv[ixy]->SetTopMargin(0.); canv[ixy]->SetBottomMargin(gapY); canv[ixy]->SetLeftMargin(0.); canv[ixy]->SetRightMargin(gapX); ixy++; }} }