File indexing completed on 2025-08-05 08:15:12
0001 #include "FieldMapsLaplace.h"
0002 #include "LaplaceSolution.h"
0003 #include <string>
0004 #include <iostream>
0005 #include "TH3F.h"
0006 #include "TAxis.h"
0007 #include "TFile.h"
0008 #include "TMath.h"
0009
0010
0011
0012 void FieldMapsLaplace::ComputeE() {
0013 const float prec=1e-8;
0014
0015
0016
0017 if(fDebug>0) printf("FieldMaps is being computed from Laplace solutions... \n");
0018 LaplaceSolution *laplace_green_solution;
0019 if(0) {
0020 laplace_green_solution = new LaplaceSolution(fLSNameRoot);
0021 } else {
0022 laplace_green_solution = new LaplaceSolution(fInnerRadius/100,fOutterRadius/100,fHalfLength/100);
0023 }
0024 int brprimeINI=0;
0025 int brprimeEND=fNRadialSteps;
0026 if(fRadialBin>-0.5) {
0027 brprimeINI = fRadialBin;
0028 brprimeEND = fRadialBin+1;
0029 }
0030
0031 float dr = (fOutterRadius-fInnerRadius)/fNRadialSteps;
0032 float dphi = TMath::TwoPi()/fNAzimuthalSteps;
0033 float dz = 2.0*fHalfLength/fNLongitudinalSteps;
0034 float dV = dr*dphi*dz;
0035
0036 float e0 = 8.854187817e+1;
0037
0038 for(int br=0; br!=fNRadialSteps; ++br) {
0039 float r = fEr->GetXaxis()->GetBinCenter( br+1 );
0040 if(fDebug>0) printf("FieldMaps: %.2f -> 1\n",float(br)/fNRadialSteps);
0041 for(int bp=0; bp!=fNAzimuthalSteps; ++bp) {
0042 float phi = fEr->GetYaxis()->GetBinCenter( bp+1 );
0043 for(int bz=0; bz!=fNLongitudinalSteps; ++bz) {
0044 float z = fEr->GetZaxis()->GetBinCenter( bz+1 );
0045
0046 if(fDebug>1) printf("FieldMaps: Integral( dvprime Q(rprime) G_E(rprime,[%f,%f,%f]) )",r,phi,z);
0047 float intEr = 0, intEp = 0, intEz = 0;
0048 if(fMirrorZ) if(z>0) continue;
0049
0050
0051 for(int bzprime=0; bzprime!=fNLongitudinalSteps; ++bzprime) {
0052 float zprime = fEr->GetZaxis()->GetBinCenter( bzprime+1 );
0053
0054 if(z*zprime < 0) continue;
0055
0056 for(int brprime=brprimeINI; brprime!=brprimeEND; ++brprime) {
0057 float rprime = fEr->GetXaxis()->GetBinCenter( brprime+1 );
0058 for(int bphiprime=0; bphiprime!=fNAzimuthalSteps; ++bphiprime) {
0059 float phiprime = fEr->GetYaxis()->GetBinCenter( bphiprime+1 );
0060
0061 float charge = ReadCharge(rprime,phiprime,zprime,dr,dphi,dz);
0062 if(TMath::AreEqualAbs( charge, 0, prec )) continue;
0063 float GR = laplace_green_solution->Er(r/100,phi,TMath::Abs(z)/100, rprime/100, phiprime, TMath::Abs(zprime)/100);
0064 float GP = 0;
0065 float GZ = laplace_green_solution->Ez(r/100,phi,TMath::Abs(z)/100, rprime/100, phiprime, TMath::Abs(zprime)/100);
0066 if(!TMath::AreEqualAbs( GR, 0, prec )) intEr += GR*charge;
0067
0068 if(!TMath::AreEqualAbs( GP, 0, prec )) intEp += GP*charge;
0069 if(!TMath::AreEqualAbs( GZ, 0, prec )) intEz += GZ*charge;
0070 }
0071 }
0072 }
0073 if(fDebug>1) printf(" => Er=%f ( similar for Ep=%f, Ez=%f )\n",intEr,intEp,intEz);
0074 float toVperCM = 0.155*1e-4/e0;
0075 fEr->Fill(r,phi,z,intEr*toVperCM);
0076 fEp->Fill(r,phi,z,intEp*toVperCM);
0077 fEz->Fill(r,phi,z,intEz*toVperCM);
0078 }
0079 }
0080 }
0081 if(fDebug>0) printf("[DONE]\n");
0082
0083 }