File indexing completed on 2025-08-05 08:15:15
0001 #include <trackbase/ActsGeometry.h>
0002
0003 bool writer = true;
0004
0005 const int nlayers = 7;
0006
0007 namespace
0008 {
0009 template<class T> inline constexpr T square(const T& x) { return x*x;}
0010 template<class T> inline constexpr T get_r(const T&x ,const T&y)
0011 { return std::sqrt(square(x)+square(y)); }
0012 inline const double get_angle(const Acts::Vector3&x, const Acts::Vector3& y)
0013 { return std::acos(x.dot(y)/(x.norm() * y.norm())); }
0014 }
0015
0016 void AnalyzeResiduals(std::string infile, const bool use_helical = false)
0017 {
0018 TFile *file = TFile::Open(infile.c_str());
0019 if(!file)
0020 {
0021 std::cout << "wrong file name" << std::endl;
0022 return;
0023 }
0024 auto tree = (TTree*)file->Get("residualtree");
0025
0026 float px, py, pz, pt, eta, phi, deltapt, quality, pcax, pcay, pcaz;
0027 int nhits, nmaps, nintt, ntpc, nmms, charge;
0028
0029 std::vector<float>* cluslx=0;
0030 std::vector<float>* cluslz=0;
0031 std::vector<float>* cluselx=0;
0032 std::vector<float>* cluselz=0;
0033 std::vector<float>* clusgx=0;
0034 std::vector<float>* clusgy=0;
0035 std::vector<float>* clusgz=0;
0036 std::vector<int>* cluslayer=0;
0037 std::vector<int>* clussize=0;
0038 std::vector<uint32_t>* clushitsetkey = 0;
0039
0040 std::vector<float>* idealsurfcenterx=0;
0041 std::vector<float>* idealsurfcentery=0;
0042 std::vector<float>* idealsurfcenterz=0;
0043 std::vector<float>* idealsurfnormx=0;
0044 std::vector<float>* idealsurfnormy=0;
0045 std::vector<float>* idealsurfnormz=0;
0046 std::vector<float>* missurfcenterx=0;
0047 std::vector<float>* missurfcentery=0;
0048 std::vector<float>* missurfcenterz=0;
0049 std::vector<float>* missurfnormx=0;
0050 std::vector<float>* missurfnormy=0;
0051 std::vector<float>* missurfnormz=0;
0052 std::vector<float>* clusgxideal=0;
0053 std::vector<float>* clusgyideal=0;
0054 std::vector<float>* clusgzideal=0;
0055 std::vector<float>* missurfalpha=0;
0056 std::vector<float>* missurfbeta=0;
0057 std::vector<float>* missurfgamma=0;
0058 std::vector<float>* idealsurfalpha=0;
0059 std::vector<float>* idealsurfbeta=0;
0060 std::vector<float>* idealsurfgamma=0;
0061
0062 std::vector<float>* statelx=0;
0063 std::vector<float>* statelz=0;
0064 std::vector<float>* stateelx=0;
0065 std::vector<float>* stateelz=0;
0066 std::vector<float>* stategx=0;
0067 std::vector<float>* stategy=0;
0068 std::vector<float>* stategz=0;
0069 std::vector<float>* statepx=0;
0070 std::vector<float>* statepy=0;
0071 std::vector<float>* statepz=0;
0072 std::vector<float>* statepl=0;
0073
0074 std::vector<float>* statelxglobderivdx=0;
0075 std::vector<float> *statelxglobderivdy=0;
0076 std::vector<float> *statelxglobderivdz=0;
0077 std::vector<float> *statelxglobderivdalpha=0;
0078 std::vector<float> *statelxglobderivdbeta=0;
0079 std::vector<float> *statelxglobderivdgamma=0;
0080
0081 std::vector<float> *statelxlocderivd0=0;
0082 std::vector<float> *statelxlocderivz0=0;
0083 std::vector<float> *statelxlocderivphi=0;
0084 std::vector<float> *statelxlocderivtheta=0;
0085 std::vector<float> *statelxlocderivqop=0;
0086
0087 std::vector<float> *statelzglobderivdx=0;
0088 std::vector<float> *statelzglobderivdy=0;
0089 std::vector<float> *statelzglobderivdz=0;
0090 std::vector<float> *statelzglobderivdalpha=0;
0091 std::vector<float> *statelzglobderivdbeta=0;
0092 std::vector<float> *statelzglobderivdgamma=0;
0093
0094 std::vector<float> *statelzlocderivd0=0;
0095 std::vector<float> *statelzlocderivz0=0;
0096 std::vector<float> *statelzlocderivphi=0;
0097 std::vector<float> *statelzlocderivtheta=0;
0098 std::vector<float> *statelzlocderivqop=0;
0099
0100 tree->SetBranchAddress("px",&px);
0101 tree->SetBranchAddress("py",&py);
0102 tree->SetBranchAddress("pz",&pz);
0103 tree->SetBranchAddress("pt",&pt);
0104 tree->SetBranchAddress("eta",&eta);
0105 tree->SetBranchAddress("phi",&phi);
0106 tree->SetBranchAddress("deltapt",&deltapt);
0107 tree->SetBranchAddress("quality",&quality);
0108 tree->SetBranchAddress("nhits",&nhits);
0109 tree->SetBranchAddress("nmaps",&nmaps);
0110 tree->SetBranchAddress("nintt",&nintt);
0111 tree->SetBranchAddress("ntpc",&ntpc);
0112 tree->SetBranchAddress("nmms",&nmms);
0113 tree->SetBranchAddress("quality",&quality);
0114 tree->SetBranchAddress("pcax", &pcax);
0115 tree->SetBranchAddress("pcay",&pcay);
0116 tree->SetBranchAddress("pcaz", &pcaz);
0117
0118 tree->SetBranchAddress("clushitsetkey",&clushitsetkey);
0119 tree->SetBranchAddress("cluslx",&cluslx);
0120 tree->SetBranchAddress("cluslz",&cluslz);
0121 tree->SetBranchAddress("cluselx",&cluselx);
0122 tree->SetBranchAddress("cluselz",&cluselz);
0123 tree->SetBranchAddress("clusgx",&clusgx);
0124 tree->SetBranchAddress("clusgy",&clusgy);
0125 tree->SetBranchAddress("clusgz",&clusgz);
0126 tree->SetBranchAddress("cluslayer",&cluslayer);
0127 tree->SetBranchAddress("clussize",&clussize);
0128 tree->SetBranchAddress("idealsurfcenterx",&idealsurfcenterx);
0129 tree->SetBranchAddress("idealsurfcentery",&idealsurfcentery);
0130 tree->SetBranchAddress("idealsurfcenterz",&idealsurfcenterz);
0131 tree->SetBranchAddress("missurfcenterx",&missurfcenterx);
0132 tree->SetBranchAddress("missurfcentery",&missurfcentery);
0133 tree->SetBranchAddress("missurfcenterz",&missurfcenterz);
0134 tree->SetBranchAddress("idealsurfnormx",&idealsurfnormx);
0135 tree->SetBranchAddress("idealsurfnormy",&idealsurfnormy);
0136 tree->SetBranchAddress("idealsurfnormz",&idealsurfnormz);
0137 tree->SetBranchAddress("missurfnormx",&missurfnormx);
0138 tree->SetBranchAddress("missurfnormy",&missurfnormy);
0139 tree->SetBranchAddress("missurfnormz",&missurfnormz);
0140 tree->SetBranchAddress("clusgxideal",&clusgxideal);
0141 tree->SetBranchAddress("clusgyideal", &clusgyideal);
0142 tree->SetBranchAddress("clusgzideal",&clusgzideal);
0143 tree->SetBranchAddress("missurfalpha",&missurfalpha);
0144 tree->SetBranchAddress("missurfbeta",&missurfbeta);
0145 tree->SetBranchAddress("missurfgamma",&missurfgamma);
0146 tree->SetBranchAddress("idealsurfalpha",&idealsurfalpha);
0147 tree->SetBranchAddress("idealsurfbeta",&idealsurfbeta);
0148 tree->SetBranchAddress("idealsurfgamma",&idealsurfgamma);
0149
0150 tree->SetBranchAddress("statelx",&statelx);
0151 tree->SetBranchAddress("statelz",&statelz);
0152 tree->SetBranchAddress("stateelx",&stateelx);
0153 tree->SetBranchAddress("stateelz",&stateelz);
0154 tree->SetBranchAddress("stategx",&stategx);
0155 tree->SetBranchAddress("stategy",&stategy);
0156 tree->SetBranchAddress("stategz",&stategz);
0157 tree->SetBranchAddress("statepx",&statepx);
0158 tree->SetBranchAddress("statepy",&statepy);
0159 tree->SetBranchAddress("statepz",&statepz);
0160 tree->SetBranchAddress("statepl",&statepl);
0161
0162 tree->SetBranchAddress("statelxglobderivdx", &statelxglobderivdx);
0163 tree->SetBranchAddress("statelxglobderivdy", &statelxglobderivdy);
0164 tree->SetBranchAddress("statelxglobderivdz", &statelxglobderivdz);
0165 tree->SetBranchAddress("statelxglobderivdalpha", &statelxglobderivdalpha);
0166 tree->SetBranchAddress("statelxglobderivdbeta", &statelxglobderivdbeta);
0167 tree->SetBranchAddress("statelxglobderivdgamma", &statelxglobderivdgamma);
0168
0169 tree->SetBranchAddress("statelxlocderivd0",&statelxlocderivd0);
0170 tree->SetBranchAddress("statelxlocderivz0",&statelxlocderivz0);
0171 tree->SetBranchAddress("statelxlocderivphi",&statelxlocderivphi);
0172 tree->SetBranchAddress("statelxlocderivtheta",&statelxlocderivtheta);
0173 tree->SetBranchAddress("statelxlocderivqop",&statelxlocderivqop);
0174
0175 tree->SetBranchAddress("statelzglobderivdx", &statelzglobderivdx);
0176 tree->SetBranchAddress("statelzglobderivdy", &statelzglobderivdy);
0177 tree->SetBranchAddress("statelzglobderivdz", &statelzglobderivdz);
0178 tree->SetBranchAddress("statelzglobderivdalpha", &statelzglobderivdalpha);
0179 tree->SetBranchAddress("statelzglobderivdbeta", &statelzglobderivdbeta);
0180 tree->SetBranchAddress("statelzglobderivdgamma", &statelzglobderivdgamma);
0181
0182 tree->SetBranchAddress("statelzlocderivd0",&statelzlocderivd0);
0183 tree->SetBranchAddress("statelzlocderivz0",&statelzlocderivz0);
0184 tree->SetBranchAddress("statelzlocderivphi",&statelzlocderivphi);
0185 tree->SetBranchAddress("statelzlocderivtheta",&statelzlocderivtheta);
0186 tree->SetBranchAddress("statelzlocderivqop",&statelzlocderivqop);
0187
0188 TFile *outfile = new TFile("residualoutfile.root","recreate");
0189
0190 TH2 *h_residuallayerx = new TH2F("residuallayerx",";x residual [mm];layer",1000,-1,1,60,0,60);
0191 TH2 *h_residuallayerz = new TH2F("residuallayerz",";z residual [mm];layer",1000,-1,1,60,0,60);
0192 TH2 *h_residualcluspulllayerx = new TH2F("residualcluspulllayerx",";x residual / clus error;layer",400,-10,10,60,0,60);
0193 TH2 *h_residualcluspulllayerz = new TH2F("residualcluspulllayerz",";z residual / clus error;layer",400,-10,10,60,0,60);
0194 TH2 *h_residualstatepulllayerx = new TH2F("residualstatepulllayerx",";x residual / state error;layer",400,-10,10,60,0,60);
0195 TH2 *h_residualstatepulllayerz = new TH2F("residualstatepulllayerz",";z residual / state error;layer",400,-10,10,60,0,60);
0196
0197
0198 TH2 *h_residualxclusr[nlayers];
0199 TH2 *h_residualxclusphi[nlayers];
0200 TH2 *h_residualgxclusphi[nlayers];
0201 TH2 *h_residualgyclusphi[nlayers];
0202 TH2 *h_residualgzclusphi[nlayers];
0203 TH2 *h_residualxclusz[nlayers];
0204 TH2 *h_residualzclusr[nlayers];
0205 TH2 *h_residualzclusphi[nlayers];
0206 TH2 *h_residualzclusz[nlayers];
0207 TH2 *h_surfradiusdiffvsphi[nlayers];
0208 TH2 *h_surfxdiffvsphi[nlayers];
0209 TH2 *h_surfydiffvsphi[nlayers];
0210 TH2 *h_surfzdiffvsphi[nlayers];
0211 TH2 *h_surfphidiffvsphi[nlayers];
0212 TH2 *h_surfadiffvsphi[nlayers];
0213 TH2 *h_surfbdiffvsphi[nlayers];
0214 TH2 *h_surfgdiffvsphi[nlayers];
0215 TH2 *h_surfadiffvsz[nlayers];
0216 TH2 *h_surfbdiffvsz[nlayers];
0217 TH2 *h_surfgdiffvsz[nlayers];
0218 TH3 *h_residualxclusphiz[nlayers];
0219 TH3 *h_residualzclusphiz[nlayers];
0220
0221 for(int i=0; i<nlayers; i++)
0222 {
0223 int zlow = -105;
0224 int zhigh = 105;
0225 int rlow = 30;
0226 int rhigh = 85;
0227
0228 if(i<3){
0229 zlow = -10; zhigh = 10; rlow = 0; rhigh = 4;
0230 } else if (i < 7) {
0231 zlow = -30; zhigh = 30; rlow = 4; rhigh = 14;
0232 }
0233
0234 ostringstream name;
0235 name.str("");
0236 name << "surfphidiffvsphi_"<<i;
0237 h_surfphidiffvsphi[i] = new TH2F(name.str().c_str(),";Ideal #phi_{surf} [deg]; Ideal - misaligned phi [deg]",120,-180,180,1080,-2,2);
0238
0239 name.str("");
0240 name << "surfadiffvsphi_"<<i;
0241 h_surfadiffvsphi[i] = new TH2F(name.str().c_str(),";Ideal #phi_{surf} [deg]; Ideal - misaligned angle to x axis [mrad]",120,-180,180,100,-10,10);
0242
0243 name.str("");
0244 name << "surfbdiffvsphi_"<<i;
0245 h_surfbdiffvsphi[i] = new TH2F(name.str().c_str(),";Ideal #phi_{surf} [deg]; Ideal - misaligned angle to y axis [mrad]",120,-180,180,100,-10,10);
0246
0247 name.str("");
0248 name << "surfgdiffvsphi_"<<i;
0249 h_surfgdiffvsphi[i] = new TH2F(name.str().c_str(),";Ideal #phi_{surf} [deg]; Ideal - misaligned angle to z axis [mrad]",120,-180,180,100,-10,10);
0250
0251 name.str("");
0252 name << "surfadiffvsz_"<<i;
0253 h_surfadiffvsz[i] = new TH2F(name.str().c_str(),";Ideal z_{surf} [mm]; Ideal - misaligned angle to x axis [mrad]",120,-180,180,100,-10,10);
0254
0255 name.str("");
0256 name << "surfbdiffvsz_"<<i;
0257 h_surfbdiffvsz[i] = new TH2F(name.str().c_str(),";Ideal z_{surf} [mm]; Ideal - misaligned angle to y axis [mrad]",120,-180,180,100,-10,10);
0258
0259 name.str("");
0260 name << "surfgdiffvsz_"<<i;
0261 h_surfgdiffvsz[i] = new TH2F(name.str().c_str(),";Ideal z_{surf} [deg]; Ideal - misaligned angle to z axis [mrad]",120,-180,180,100,-10,10);
0262
0263 name.str("");
0264 name << "surfradiusdiffvsphi_"<<i;
0265 h_surfradiusdiffvsphi[i] = new TH2F(name.str().c_str(),";Ideal #phi_{surf} [deg]; Ideal radius - misalign radius [mm]",120,-180,180,1000,-1,1);
0266
0267 name.str("");
0268 name << "surfxdiffvsphi_"<<i;
0269 h_surfxdiffvsphi[i] = new TH2F(name.str().c_str(),";Ideal #phi_{surf} [deg]; Misalign x - ideal x [mm]",120,-180,180,1000,-1,1);
0270
0271 name.str("");
0272 name << "surfydiffvsphi_"<<i;
0273 h_surfydiffvsphi[i] = new TH2F(name.str().c_str(),";Ideal #phi_{surf} [deg]; Misalign y - ideal y [mm]", 120,-180,180,1000,-1,1);
0274
0275 name.str("");
0276 name << "surfzdiffvsphi_"<<i;
0277 h_surfzdiffvsphi[i] = new TH2F(name.str().c_str(), ";Ideal #phi_{surf} [deg]; Misalign z - ideal z [mm]",120,-180,180,2500,-10,10);
0278
0279 name.str("");
0280 name << "residualxclusphiz_"<<i;
0281
0282 name.str("");
0283 name << "residualzclusphiz_"<<i;
0284
0285
0286 name.str("");
0287 name<<"residualgxclusphi_"<<i;
0288 h_residualgxclusphi[i] = new TH2F(name.str().c_str(),";#phi [deg]; x_{glob} residual [mm]", 180,-180,180,2000,-1,1);
0289
0290 name.str("");
0291 name << "residualgyclusphi_"<<i;
0292 h_residualgyclusphi[i] = new TH2F(name.str().c_str(),";#phi [deg]; y_{glob} residual [mm]",180,-180,180,2000,-1,1);
0293
0294 name.str("");
0295 name << "residualgzclusphi_"<<i;
0296 h_residualgzclusphi[i] = new TH2F(name.str().c_str(),";#phi [deg]; z_{glob} residual [mm]",180,-180,180,2000,-10,10);
0297
0298 name.str("");
0299 name << "residualxclusr_"<<i;
0300 h_residualxclusr[i] = new TH2F(name.str().c_str(),";r [cm]; x residual [mm]",
0301 170,rlow,rhigh,2000,-1,1);
0302 name.str("");
0303 name << "residualxclusphi_"<<i;
0304 h_residualxclusphi[i] = new TH2F(name.str().c_str(),";phi [deg]; x residual [mm]",
0305 180,-180,180,2000,-1,1);
0306 name.str("");
0307 name << "residualxclusz_"<<i;
0308 h_residualxclusz[i] = new TH2F(name.str().c_str(),";z [cm]; x residual [mm]",
0309 210,zlow,zhigh,2000,-1,1);
0310 name.str("");
0311 name<<"residualzclusr_"<<i;
0312 h_residualzclusr[i] = new TH2F(name.str().c_str(),";r [cm]; z residual [mm]",
0313 170,rlow,rhigh,2000,-1,1);
0314 name.str("");
0315 name << "residualzclusphi_"<<i;
0316 h_residualzclusphi[i] = new TH2F(name.str().c_str(),";phi [deg]; z residual [mm]",
0317 180,-180,180,2000,-1,1);
0318 name.str("");
0319 name << "residualzclusz_"<<i;
0320 h_residualzclusz[i] = new TH2F(name.str().c_str(),";z [cm]; z residual [mm]",
0321 210,zlow,zhigh,2000,-1,1);
0322 }
0323
0324
0325
0326 TH2F *h_residualhitsetkeyx = new TH2F("residualhitsetkeyx",";x residual [mm];hitsetkey",1000,-1,1,1200,0,1200);
0327 TH2F *h_residualhitsetkeyz = new TH2F("residualhitsetkeyz",";z residual [mm];hitsetkey",1000,-1,1,1200,0,1200);
0328 TH2F *h_residualcluspullhitsetkeyx = new TH2F("residualcluspullhitsetkeyx",";x residual / clus error;hitsetkey",400,-10,10,1200,0,1200);
0329 TH2F *h_residualcluspullhitsetkeyz = new TH2F("residualcluspullhitsetkeyz",";z residual / clus error;hitsetkey",400,-10,10,1200,0,1200);
0330 TH2F *h_residualstatepullhitsetkeyx = new TH2F("residualstatepullhitsetkeyx",";x residual / state error;hitsetkey",400,-10,10,1200,0,1200);
0331 TH2F *h_residualstatepullhitsetkeyz = new TH2F("residualstatepullhitsetkeyz",";z residual / state error;hitsetkey",400,-10,10,1200,0,1200);
0332
0333 TH2F *h_xresidualgdx = new TH2F("xresidualgdx",";dx_{resid}/dx_{glob};x_{resid} [mm]",1000,-1.3,1.3,1000,-1,1);
0334 TH2F *h_xresidualgdy = new TH2F("xresidualgdy",";dx_{resid}/dy_{glob};x_{resid} [mm]",1000,-1.3,1.3,1000,-1,1);
0335 TH2F *h_xresidualgdz = new TH2F("xresidualgdz",";dx_{resid}/dz_{glob};x_{resid} [mm]",1000,-0.001,0.001,1000,-1,1);
0336 TH2F *h_xresidualdalpha = new TH2F("xresidualdalpha",";dx_{resid}/d#alpha;x_{resid} [mm]",1000,-600,600,1000,-1,1);
0337 TH2F *h_xresidualdbeta = new TH2F("xresidualdbeta",";dx_{resid}/d#beta;x_{resid} [mm]",1000,-600,600,1000,-1,1);
0338 TH2F *h_xresidualdgamma = new TH2F("xresidualdgamma",";dx_{resid}/d#gamma;x_{resid} [mm]",1000,-20,20,1000,-1,1);
0339 TH2F *h_xresidualdd0 = new TH2F("xresidualdd0",";dx_{resid}/dd_{0}; x_{resid} [mm]",1000,0.9,1.1,1000,-1,1);
0340 TH2F *h_xresidualdz0 = new TH2F("xresidualdz0",";dx_{resid}/dz_{0}; x_{resid} [mm]",1000,-0.002,0.002,1000,-1,1);
0341 TH2F *h_xresidualdphi = new TH2F("xresidualdphi",";dx_{resid}/d#phi; x_{resid} [mm]", 1000,-100,100,1000,-1,1);
0342 TH2F *h_xresidualdtheta = new TH2F("xresidualdtheta",";dx_{resid}/d#theta; x_{resid} [mm]",1000,-10,10,1000,-1,1);
0343 TH2F *h_xresidualdqop = new TH2F("xresidualdqop",";dx_{resid}/dqop; x_{resid} [mm]",1000,-20,10,1000,-1,1);
0344
0345
0346 TH2F *h_zresidualgdx = new TH2F("zresidualgdx",";dz_{resid}/dx_{glob};z_{resid} [mm]",1000,-1.3,1.3,1000,-1,1);
0347 TH2F *h_zresidualgdy = new TH2F("zresidualgdy",";dz_{resid}/dy_{glob};z_{resid} [mm]",1000,-1.3,1.3,1000,-1,1);
0348 TH2F *h_zresidualgdz = new TH2F("zresidualgdz",";dz_{resid}/dz_{glob};z_{resid} [mm]",1000,-1.3,1.3,1000,-1,1);
0349 TH2F *h_zresidualdalpha = new TH2F("zresidualdalpha",";dz_{resid}/d#alpha;z_{resid} [mm]",1000,-600,600,1000,-1,1);
0350 TH2F *h_zresidualdbeta = new TH2F("zresidualdbeta",";dz_{resid}/d#beta;z_{resid} [mm]",1000,-600,600,1000,-1,1);
0351 TH2F *h_zresidualdgamma = new TH2F("zresidualdgamma",";dz_{resid}/d#gamma;z_{resid} [mm]",1000,-20,20,1000,-1,1);
0352 TH2F *h_zresidualdd0 = new TH2F("zresidualdd0",";dz_{resid}/dd_{0}; z_{resid} [mm]",1000,-1,1,1000,-1,1);
0353 TH2F *h_zresidualdz0 = new TH2F("zresidualdz0",";dz_{resid}/dz_{0}; z_{resid} [mm]",1000,0.9,1.1,1000,-1,1);
0354 TH2F *h_zresidualdphi = new TH2F("zresidualdphi",";dz_{resid}/d#phi; z_{resid} [mm]", 1000,-100,100,1000,-1,1);
0355 TH2F *h_zresidualdtheta = new TH2F("zresidualdtheta",";dz_{resid}/d#theta; z_{resid} [mm]",5000,-600,10,1000,-1,1);
0356 TH2F *h_zresidualdqop = new TH2F("zresidualdqop",";dz_{resid}/dqop; z_{resid} [mm]",1000,-2,2,1000,-1,1);
0357
0358 TH2F *h_dxdxvsphi = new TH2F("dxdxvsphi",";#phi [deg];dx_{resid}/dx_{glob}",120,-180,180,1000,-1.3,1.3);
0359 TH2F *h_dxdyvsphi = new TH2F("dxdyvsphi",";#phi [deg];dx_{resid}/dy_{glob}",120,-180,180,1000,-1.3,1.3);
0360 TH2F *h_dxdzvsphi = new TH2F("dxdzvsphi",";#phi [deg];dx_{resid}/dz_{glob}",120,-180,180,1000,-0.002,0.002);
0361 TH2F *h_dxdalphavsphi = new TH2F("dxdalphavsphi",";#phi [deg];dx_{resid}/d#alpha",120,-180,180,1000,-600,600);
0362 TH2F *h_dxdbetavsphi = new TH2F("dxdbetavsphi",";#phi [deg];dx_{resid}/d#beta",120,-180,180,1000,-600,600);
0363 TH2F *h_dxdgammavsphi = new TH2F("dxdgammavsphi",";#phi [deg];dx_{resid}/d#gamma",120,-180,180,1000,-20,20);
0364 TH2F *h_dxdd0vsphi = new TH2F("dxdd0vsphi",";#phi [deg];dx_{resid}/dd_{0}",120,-180,180,1000,0.9,1.1);
0365 TH2F *h_dxdz0vsphi = new TH2F("dxdz0vsphi",";#phi [deg];dx_{resid}/dz_{0}",120,-180,180,1000,-0.002,0.002);
0366 TH2F *h_dxdphivsphi = new TH2F("dxdphivsphi",";#phi [deg];dx_{resid}/d#phi",120,-180,180,1000,-100,100);
0367 TH2F *h_dxdthetavsphi = new TH2F("dxdthetavsphi",";#phi [deg];dx_{resid}/d#theta",120,-180,180,1000,-10,10);
0368 TH2F *h_dxdqopvsphi = new TH2F("dxdqopvsphi",";#phi [deg];dx_{resid}/dqop",120,-180,180,1000,-1,1);
0369
0370 TH2F *h_dzdxvsphi = new TH2F("dzdxvsphi",";#phi [deg];dz_{resid}/dx_{glob}",120,-180,180,1000,-1.3,1.3);
0371 TH2F *h_dzdyvsphi = new TH2F("dzdyvsphi",";#phi [deg];dz_{resid}/dy_{glob}",120,-180,180,1000,-1.3,1.3);
0372 TH2F *h_dzdzvsphi = new TH2F("dzdzvsphi",";#phi [deg];dz_{resid}/dz_{glob}",120,-180,180,1000,-1.3,1.3);
0373 TH2F *h_dzdalphavsphi = new TH2F("dzdalphavsphi",";#phi [deg];dz_{resid}/d#alpha",120,-180,180,1000,-600,600);
0374 TH2F *h_dzdbetavsphi = new TH2F("dzdbetavsphi",";#phi [deg];dz_{resid}/d#beta",120,-180,180,1000,-600,600);
0375 TH2F *h_dzdgammavsphi = new TH2F("dzdgammavsphi",";#phi [deg];dz_{resid}/d#gamma",120,-180,180,1000,-20,20);
0376 TH2F *h_dzdd0vsphi = new TH2F("dzdd0vsphi",";#phi [deg];dz_{resid}/dd_{0}",120,-180,180,1000,-1,1);
0377 TH2F *h_dzdz0vsphi = new TH2F("dzdz0vsphi",";#phi [deg];dz_{resid}/dz_{0}",120,-180,180,1000,0.9,1.1);
0378 TH2F *h_dzdphivsphi = new TH2F("dzdphivsphi",";#phi [deg];dz_{resid}/d#phi",120,-180,180,1000,-100,100);
0379 TH2F *h_dzdthetavsphi = new TH2F("dzdthetavsphi",";#phi [deg];dz_{resid}/d#theta",120,-180,180,1000,-10,10);
0380 TH2F *h_dzdqopvsphi = new TH2F("dzdqopvsphi",";#phi [deg];dz_{resid}/dqop",120,-180,180,1000,-1,1);
0381
0382 TH2F *h_dxdxvseta = new TH2F("dxdxvseta",";#eta ;dx_{resid}/dx_{glob}",100,-1,1,1000,-1.3,1.3);
0383 TH2F *h_dxdyvseta = new TH2F("dxdyvseta",";#eta ;dx_{resid}/dy_{glob}",100,-1,1,1000,-1.3,1.3);
0384 TH2F *h_dxdzvseta = new TH2F("dxdzvseta",";#eta ;dx_{resid}/dz_{glob}",100,-1,1,1000,-1.3,1.3);
0385 TH2F *h_dxdalphavseta = new TH2F("dxdalphavseta",";#eta ;dx_{resid}/d#alpha",100,-1,1,1000,-600,600);
0386 TH2F *h_dxdbetavseta = new TH2F("dxdbetavseta",";#eta ;dx_{resid}/d#beta",100,-1,1,1000,-600,600);
0387 TH2F *h_dxdgammavseta = new TH2F("dxdgammavseta",";#eta ;dx_{resid}/d#gamma",100,-1,1,1000,-20,20);
0388 TH2F *h_dxdd0vseta = new TH2F("dxdd0vseta",";#eta ;dx_{resid}/dd_{0}",100,-1,1,1000,0.9,1.1);
0389 TH2F *h_dxdz0vseta = new TH2F("dxdz0vseta",";#eta ;dx_{resid}/dz_{0}",100,-1,1,1000,-0.002,0.002);
0390 TH2F *h_dxdphivseta = new TH2F("dxdphivseta",";#eta ;dx_{resid}/d#phi",100,-1,1,1000,-100,100);
0391 TH2F *h_dxdthetavseta = new TH2F("dxdthetavseta",";#eta ;dx_{resid}/d#theta",100,-1,1,1000,-10,10);
0392 TH2F *h_dxdqopvseta = new TH2F("dxdqopvseta",";#eta ;dx_{resid}/dqop",100,-1,1,1000,-1,1);
0393
0394 TH2F *h_dzdxvseta = new TH2F("dzdxvseta",";#eta ;dz_{resid}/dx_{glob}",100,-1,1,1000,-1.3,1.3);
0395 TH2F *h_dzdyvseta = new TH2F("dzdyvseta",";#eta ;dz_{resid}/dy_{glob}",100,-1,1,1000,-1.3,1.3);
0396 TH2F *h_dzdzvseta = new TH2F("dzdzvseta",";#eta ;dz_{resid}/dz_{glob}",100,-1,1,1000,-1.3,1.3);
0397 TH2F *h_dzdalphavseta = new TH2F("dzdalphavseta",";#eta ;dz_{resid}/d#alpha",100,-1,1,1000,-600,600);
0398 TH2F *h_dzdbetavseta = new TH2F("dzdbetavseta",";#eta ;dz_{resid}/d#beta",100,-1,1,1000,-600,600);
0399 TH2F *h_dzdgammavseta = new TH2F("dzdgammavseta",";#eta ;dz_{resid}/d#gamma",100,-1,1,1000,-20,20);
0400 TH2F *h_dzdd0vseta = new TH2F("dzdd0vseta",";#eta ;dz_{resid}/dd_{0}",100,-1,1,1000,-1,1);
0401 TH2F *h_dzdz0vseta = new TH2F("dzdz0vseta",";#eta ;dz_{resid}/dz_{0}",100,-1,1,1000,0.9,1.1);
0402 TH2F *h_dzdphivseta = new TH2F("dzdphivseta",";#eta ;dz_{resid}/d#phi",100,-1,1,1000,-100,100);
0403 TH2F *h_dzdthetavseta = new TH2F("dzdthetavseta",";#eta ;dz_{resid}/d#theta",100,-1,1,1000,-10,10);
0404 TH2F *h_dzdqopvseta = new TH2F("dzdqopvseta",";#eta ;dz_{resid}/dqop",100,-1,1,1000,-1,1);
0405 TH2F *h_sensorlayercounts = new TH2F("sensorlayercounts",";sensor number; layer",1200,0,1200,58,0,58);
0406
0407 TH2F *h_lowcountsxy = new TH2F("lowcountsxy",";x_{clus} [cm];y_{clus} [cm];",
0408 10000,-20,20,10000,-20,20);
0409
0410 TH2F *h_lowcountsrz = new TH2F("lowcountsrz",";z_{clus} [cm];r_{clus} [cm];",
0411 10000,-40,40,100,0,20);
0412
0413 int badent = 0;
0414 int sensornum = 0;
0415 std::map<uint32_t, int> hitsetkey_sensornum_map, hitsetkey_numcounts_map;
0416 std::cout << "iterating " << tree->GetEntries() << std::endl;
0417 for(int i=0; i<tree->GetEntries(); i++)
0418 {
0419 if(i > 25000)
0420 break;
0421 tree->GetEntry(i);
0422 for(int j=0; j<cluslx->size(); j++)
0423 {
0424 unsigned int layer = cluslayer->at(j);
0425
0426 if(layer > 6) continue;
0427 float xresidual = cluslx->at(j) - statelx->at(j);
0428 float zresidual = cluslz->at(j) - statelz->at(j);
0429
0430 xresidual *= 10;
0431 zresidual *= 10;
0432 float celx = cluselx->at(j);
0433 float celz = cluselz->at(j);
0434 float cgz = clusgz->at(j);
0435 celx *= 10;
0436 celz *= 10;
0437 cgz *= 10;
0438 uint32_t hitsetkey = clushitsetkey->at(j);
0439
0440 auto iter = hitsetkey_sensornum_map.find(hitsetkey);
0441 if(iter == hitsetkey_sensornum_map.end())
0442 {
0443 hitsetkey_sensornum_map.insert(std::make_pair(hitsetkey,sensornum));
0444 hitsetkey_numcounts_map.insert(std::make_pair(hitsetkey, 1));
0445 sensornum++;
0446 }
0447 else
0448 {
0449 hitsetkey_numcounts_map.find(hitsetkey)->second++;
0450 }
0451
0452 int sensornum = hitsetkey_sensornum_map.find(hitsetkey)->second;
0453 if(sensornum > 130)
0454 {
0455 h_lowcountsxy->Fill(clusgx->at(j), clusgy->at(j));
0456 h_lowcountsrz->Fill(clusgz->at(j),sqrt(clusgx->at(j)*clusgx->at(j)+clusgy->at(j)*clusgy->at(j)));
0457 }
0458 h_sensorlayercounts->Fill(sensornum, layer);
0459 TVector3 clusvec;
0460 clusvec.SetXYZ(clusgx->at(j), clusgy->at(j), clusgz->at(j));
0461 float clusphi = clusvec.Phi() * 180 / 3.14159;
0462 float cluseta = clusvec.Eta();
0463 float statelxglobderivdxv = statelxglobderivdx->at(j);
0464
0465 float xresidualcluspull = xresidual / celx;
0466 float zresidualcluspull = zresidual / celz;
0467 float xresidualstatepull = xresidual / (10*stateelx->at(j));
0468 float zresidualstatepull = zresidual / (10*stateelz->at(j));
0469
0470 float statelxglobdx = statelxglobderivdx->at(j);
0471 float statelxglobdy = statelxglobderivdy->at(j);
0472 float statelxglobdz = statelxglobderivdz->at(j);
0473 float statelxglobdalpha = statelxglobderivdalpha->at(j);
0474 float statelxglobdbeta = statelxglobderivdbeta->at(j);
0475 float statelxglobdgamma = statelxglobderivdgamma->at(j);
0476 float statelzglobdx = statelxglobderivdx->at(j);
0477 float statelzglobdy = statelxglobderivdy->at(j);
0478 float statelzglobdz = statelxglobderivdz->at(j);
0479 float statelzglobdalpha = statelzglobderivdalpha->at(j);
0480 float statelzglobdbeta = statelzglobderivdbeta->at(j);
0481 float statelzglobdgamma = statelzglobderivdgamma->at(j);
0482
0483 if(use_helical)
0484 {
0485 statelxglobdalpha *= 10;
0486 statelxglobdbeta *= 10;
0487 statelxglobdgamma *= 10;
0488 statelzglobdalpha *= 10;
0489 statelzglobdbeta *= 10;
0490 statelzglobdgamma *= 10;
0491 }
0492
0493 Acts::Vector3 missurfnorm(missurfnormx->at(j),
0494 missurfnormy->at(j),
0495 missurfnormz->at(j));
0496
0497 Acts::Vector3 idealsurfnorm(idealsurfnormx->at(j),
0498 idealsurfnormy->at(j),
0499 idealsurfnormz->at(j));
0500
0501 float alpha = idealsurfalpha->at(j)-missurfalpha->at(j);
0502 float beta = idealsurfbeta->at(j)-missurfbeta->at(j);
0503 float gamma = idealsurfgamma->at(j)-missurfgamma->at(j);
0504
0505
0506 alpha *= 1000;
0507 beta *=1000;
0508 gamma *=1000;
0509 float idealsurfphi = 180/M_PI*atan2(idealsurfcentery->at(j),
0510 idealsurfcenterx->at(j));
0511 float missurfphi = 180/M_PI*atan2(missurfcentery->at(j),
0512 missurfcenterx->at(j));
0513 h_surfphidiffvsphi[layer]->Fill(idealsurfphi, missurfphi-idealsurfphi);
0514 h_surfadiffvsphi[layer]->Fill(idealsurfphi, alpha);
0515 h_surfbdiffvsphi[layer]->Fill(idealsurfphi, beta);
0516 h_surfgdiffvsphi[layer]->Fill(idealsurfphi, gamma);
0517 h_surfadiffvsz[layer]->Fill(idealsurfcenterz->at(j)*10, alpha);
0518 h_surfbdiffvsz[layer]->Fill(idealsurfcenterz->at(j)*10, beta);
0519 h_surfgdiffvsz[layer]->Fill(idealsurfcenterz->at(j)*10, gamma);
0520
0521 h_surfradiusdiffvsphi[layer]->Fill(idealsurfphi,
0522 get_r(missurfcenterx->at(j),
0523 missurfcentery->at(j))*10 -
0524 get_r(idealsurfcenterx->at(j),
0525 idealsurfcentery->at(j))*10);
0526 h_surfxdiffvsphi[layer]->Fill(idealsurfphi,
0527 missurfcenterx->at(j)*10 -
0528 idealsurfcenterx->at(j)*10);
0529 h_surfydiffvsphi[layer]->Fill(idealsurfphi,
0530 missurfcentery->at(j)*10 -
0531 idealsurfcentery->at(j)*10);
0532
0533 h_surfzdiffvsphi[layer]->Fill(idealsurfphi,
0534 missurfcenterz->at(j)*10 -
0535 idealsurfcenterz->at(j)*10);
0536 h_residualxclusr[layer]->Fill(clusvec.Perp(), xresidual);
0537 h_residualgxclusphi[layer]->Fill(clusphi, (clusgx->at(j) - stategx->at(j))*10);
0538 h_residualgyclusphi[layer]->Fill(clusphi, (clusgy->at(j) - stategy->at(j))*10);
0539
0540 h_residualgzclusphi[layer]->Fill(clusphi, (clusgz->at(j) - stategz->at(j))*10);
0541
0542 h_residualxclusphi[layer]->Fill(clusphi, xresidual);
0543 h_residualxclusz[layer]->Fill(cgz, xresidual);
0544 h_residualzclusr[layer]->Fill(clusvec.Perp(), zresidual);
0545 h_residualzclusphi[layer]->Fill(clusphi, zresidual);
0546 h_residualzclusz[layer]->Fill(cgz, zresidual);
0547
0548
0549
0550 h_dxdxvsphi->Fill(clusphi, statelxglobdx);
0551 h_dxdyvsphi->Fill(clusphi, statelxglobdy);
0552 h_dxdzvsphi->Fill(clusphi, statelxglobdz);
0553 h_dxdalphavsphi->Fill(clusphi, statelxglobdalpha);
0554 h_dxdbetavsphi->Fill(clusphi, statelxglobdbeta);
0555 h_dxdgammavsphi->Fill(clusphi, statelxglobdgamma);
0556 h_dxdd0vsphi->Fill(clusphi,statelxlocderivd0->at(j));
0557 h_dxdz0vsphi->Fill(clusphi,statelxlocderivz0->at(j));
0558 h_dxdphivsphi->Fill(clusphi,statelxlocderivphi->at(j));
0559 h_dxdthetavsphi->Fill(clusphi,statelxlocderivtheta->at(j));
0560 h_dxdqopvsphi->Fill(clusphi,statelxlocderivqop->at(j));
0561
0562 h_dzdxvsphi->Fill(clusphi, statelzglobdx);
0563 h_dzdyvsphi->Fill(clusphi, statelzglobdy);
0564 h_dzdzvsphi->Fill(clusphi, statelzglobdz);
0565 h_dzdalphavsphi->Fill(clusphi, statelzglobdalpha);
0566 h_dzdbetavsphi->Fill(clusphi, statelzglobdbeta);
0567 h_dzdgammavsphi->Fill(clusphi, statelzglobdgamma);
0568 h_dzdd0vsphi->Fill(clusphi,statelzlocderivd0->at(j));
0569 h_dzdz0vsphi->Fill(clusphi,statelzlocderivz0->at(j));
0570 h_dzdphivsphi->Fill(clusphi,statelzlocderivphi->at(j));
0571 h_dzdthetavsphi->Fill(clusphi,statelzlocderivtheta->at(j));
0572 h_dzdqopvsphi->Fill(clusphi,statelzlocderivqop->at(j));
0573
0574 h_dxdxvseta->Fill(cluseta, statelxglobdx);
0575 h_dxdyvseta->Fill(cluseta, statelxglobdy);
0576 h_dxdzvseta->Fill(cluseta, statelxglobdz);
0577 h_dxdalphavseta->Fill(cluseta, statelxglobdalpha);
0578 h_dxdbetavseta->Fill(cluseta, statelxglobdbeta);
0579 h_dxdgammavseta->Fill(cluseta, statelxglobdgamma);
0580 h_dxdd0vseta->Fill(cluseta,statelxlocderivd0->at(j));
0581 h_dxdz0vseta->Fill(cluseta,statelxlocderivz0->at(j));
0582 h_dxdphivseta->Fill(cluseta,statelxlocderivphi->at(j));
0583 h_dxdthetavseta->Fill(cluseta,statelxlocderivtheta->at(j));
0584 h_dxdqopvseta->Fill(cluseta,statelxlocderivqop->at(j));
0585
0586 h_dzdxvseta->Fill(cluseta, statelzglobdx);
0587 h_dzdyvseta->Fill(cluseta, statelzglobdy);
0588 h_dzdzvseta->Fill(cluseta, statelzglobdz);
0589 h_dzdalphavseta->Fill(cluseta, statelzglobdalpha);
0590 h_dzdbetavseta->Fill(cluseta, statelzglobdbeta);
0591 h_dzdgammavseta->Fill(cluseta, statelzglobdgamma);
0592 h_dzdd0vseta->Fill(cluseta,statelzlocderivd0->at(j));
0593 h_dzdz0vseta->Fill(cluseta,statelzlocderivz0->at(j));
0594 h_dzdphivseta->Fill(cluseta,statelzlocderivphi->at(j));
0595 h_dzdthetavseta->Fill(cluseta,statelzlocderivtheta->at(j));
0596 h_dzdqopvseta->Fill(cluseta,statelzlocderivqop->at(j));
0597
0598 h_xresidualgdx->Fill(statelxglobdx,xresidual);
0599 h_xresidualgdy->Fill(statelxglobdy,xresidual);
0600 h_xresidualgdz->Fill(statelxglobdz,xresidual);
0601 h_xresidualdalpha->Fill(statelxglobdalpha,xresidual);
0602 h_xresidualdbeta->Fill(statelxglobdbeta,xresidual);
0603 h_xresidualdgamma->Fill(statelxglobdgamma,xresidual);
0604 h_xresidualdd0->Fill(statelxlocderivd0->at(j),xresidual);
0605 h_xresidualdz0->Fill(statelxlocderivz0->at(j),xresidual);
0606 h_xresidualdphi->Fill(statelxlocderivphi->at(j),xresidual);
0607 h_xresidualdtheta->Fill(statelxlocderivtheta->at(j),xresidual);
0608 h_xresidualdqop->Fill(statelxlocderivqop->at(j),xresidual);
0609
0610 h_zresidualgdx->Fill(statelzglobdx,zresidual);
0611 h_zresidualgdy->Fill(statelzglobdy,zresidual);
0612 h_zresidualgdz->Fill(statelzglobdz,zresidual);
0613 h_zresidualdalpha->Fill(statelzglobdalpha,zresidual);
0614 h_zresidualdbeta->Fill(statelzglobdbeta,zresidual);
0615 h_zresidualdgamma->Fill(statelzglobdgamma,zresidual);
0616 h_zresidualdd0->Fill(statelzlocderivd0->at(j),zresidual);
0617 h_zresidualdz0->Fill(statelzlocderivz0->at(j),zresidual);
0618 h_zresidualdphi->Fill(statelzlocderivphi->at(j),zresidual);
0619 h_zresidualdtheta->Fill(statelzlocderivtheta->at(j),zresidual);
0620 h_zresidualdqop->Fill(statelzlocderivqop->at(j),zresidual);
0621
0622 h_residuallayerx->Fill(xresidual, layer);
0623 h_residuallayerz->Fill(zresidual, layer);
0624 h_residualcluspulllayerx->Fill(xresidualcluspull, layer);
0625 h_residualcluspulllayerz->Fill(zresidualcluspull, layer);
0626 h_residualstatepulllayerx->Fill(xresidualstatepull, layer);
0627 h_residualstatepulllayerz->Fill(zresidualstatepull, layer);
0628
0629 h_residualhitsetkeyx->Fill(xresidual, sensornum);
0630 h_residualhitsetkeyz->Fill(zresidual, sensornum);
0631 h_residualcluspullhitsetkeyx->Fill(xresidualcluspull, sensornum);
0632 h_residualcluspullhitsetkeyz->Fill(zresidualcluspull, sensornum);
0633 h_residualstatepullhitsetkeyx->Fill(xresidualstatepull, sensornum);
0634 h_residualstatepullhitsetkeyz->Fill(zresidualstatepull, sensornum);
0635
0636 }
0637 }
0638 std::cout << "badent " << badent<<std::endl;
0639 for(const auto& [key, counts] : hitsetkey_numcounts_map)
0640 {
0641 std::cout << "hitsetkey " << key << " has " << counts << std::endl;
0642 }
0643
0644 TCanvas *can1 = new TCanvas("can1","can1",300,300,1000,700);
0645 can1->Divide(3,2);
0646 can1->cd(1);
0647 h_xresidualdalpha->Draw();
0648 can1->cd(2);
0649 h_xresidualdbeta->Draw();
0650 can1->cd(3);
0651 h_xresidualdgamma->Draw();
0652 can1->cd(4);
0653 h_xresidualgdx->Draw();
0654 can1->cd(5);
0655 h_xresidualgdy->Draw();
0656 can1->cd(6);
0657 h_xresidualgdz->Draw();
0658
0659
0660 TCanvas *can2 = new TCanvas("can2","can2",300,300,1000,700);
0661 can2->Divide(3,2);
0662 can2->cd(1);
0663 h_xresidualdd0->Draw();
0664 can2->cd(2);
0665 h_xresidualdz0->Draw();
0666 can2->cd(3);
0667 h_xresidualdphi->Draw();
0668 can2->cd(4);
0669 h_xresidualdtheta->Draw();
0670 can2->cd(5);
0671 h_xresidualdqop->Draw();
0672
0673
0674 TCanvas *can3 = new TCanvas("can3","can3",300,300,1000,700);
0675 can3->Divide(3,2);
0676 can3->cd(1);
0677 h_zresidualdalpha->Draw();
0678 can3->cd(2);
0679 h_zresidualdbeta->Draw();
0680 can3->cd(3);
0681 h_zresidualdgamma->Draw();
0682 can3->cd(4);
0683 h_zresidualgdx->Draw();
0684 can3->cd(5);
0685 h_zresidualgdy->Draw();
0686 can3->cd(6);
0687 h_zresidualgdz->Draw();
0688
0689
0690 TCanvas *can4 = new TCanvas("can4","can4",300,300,1000,700);
0691 can4->Divide(3,2);
0692 can4->cd(1);
0693 h_zresidualdd0->Draw();
0694 can4->cd(2);
0695 h_zresidualdz0->Draw();
0696 can4->cd(3);
0697 h_zresidualdphi->Draw();
0698 can4->cd(4);
0699 h_zresidualdtheta->Draw();
0700 can4->cd(5);
0701 h_zresidualdqop->Draw();
0702
0703
0704 TCanvas *can5 = new TCanvas("can5","can5",300,300,1000,700);
0705 can5->Divide(3,2);
0706 can5->cd(1);
0707
0708 h_dxdxvsphi->Draw();
0709 can5->cd(2);
0710 h_dxdyvsphi->Draw();
0711 can5->cd(3);
0712 h_dxdzvsphi->Draw();
0713 can5->cd(4);
0714 h_dxdalphavsphi->Draw();
0715 can5->cd(5);
0716 h_dxdbetavsphi->Draw();
0717 can5->cd(6);
0718 h_dxdgammavsphi->Draw();
0719
0720 TCanvas *can6 = new TCanvas("can6","can6",300,300,1000,700);
0721 can6->Divide(3,2);
0722 can6->cd(1);
0723
0724 h_dxdd0vsphi->Draw();
0725 can6->cd(2);
0726 h_dxdz0vsphi->Draw();
0727 can6->cd(3);
0728 h_dxdphivsphi->Draw();
0729 can6->cd(4);
0730 h_dxdthetavsphi->Draw();
0731 can6->cd(5);
0732 h_dxdqopvsphi->Draw();
0733
0734 TCanvas *can7 = new TCanvas("can7","can7",300,300,1000,700);
0735 can7->Divide(3,2);
0736 can7->cd(1);
0737
0738 h_dzdxvsphi->Draw();
0739 can7->cd(2);
0740 h_dzdyvsphi->Draw();
0741 can7->cd(3);
0742 h_dzdzvsphi->Draw();
0743 can7->cd(4);
0744 h_dzdalphavsphi->Draw();
0745 can7->cd(5);
0746 h_dzdbetavsphi->Draw();
0747 can7->cd(6);
0748 h_dzdgammavsphi->Draw();
0749
0750 TCanvas *can8 = new TCanvas("can8","can8",300,300,1000,700);
0751 can8->Divide(3,2);
0752 can8->cd(1);
0753
0754 h_dzdd0vsphi->Draw();
0755 can8->cd(2);
0756 h_dzdz0vsphi->Draw();
0757 can8->cd(3);
0758 h_dzdphivsphi->Draw();
0759 can8->cd(4);
0760 h_dzdthetavsphi->Draw();
0761 can8->cd(5);
0762 h_dzdqopvsphi->Draw();
0763
0764
0765 TCanvas *can9 = new TCanvas("can9","can9",300,300,1000,700);
0766 can9->Divide(3,2);
0767 can9->cd(1);
0768
0769 h_dxdxvseta->Draw();
0770 can9->cd(2);
0771 h_dxdyvseta->Draw();
0772 can9->cd(3);
0773 h_dxdzvseta->Draw();
0774 can9->cd(4);
0775 h_dxdalphavseta->Draw();
0776 can9->cd(5);
0777 h_dxdbetavseta->Draw();
0778 can9->cd(6);
0779 h_dxdgammavseta->Draw();
0780
0781 TCanvas *can10 = new TCanvas("can10","can10",300,300,1000,700);
0782 can10->Divide(3,2);
0783 can10->cd(1);
0784
0785 h_dxdd0vseta->Draw();
0786 can10->cd(2);
0787 h_dxdz0vseta->Draw();
0788 can10->cd(3);
0789 h_dxdphivseta->Draw();
0790 can10->cd(4);
0791 h_dxdthetavseta->Draw();
0792 can10->cd(5);
0793 h_dxdqopvseta->Draw();
0794
0795 TCanvas *can11 = new TCanvas("can11","can11",300,300,1000,700);
0796 can11->Divide(3,2);
0797 can11->cd(1);
0798
0799 h_dzdxvseta->Draw();
0800 can11->cd(2);
0801 h_dzdyvseta->Draw();
0802 can11->cd(3);
0803 h_dzdzvseta->Draw();
0804 can11->cd(4);
0805 h_dzdalphavseta->Draw();
0806 can11->cd(5);
0807 h_dzdbetavseta->Draw();
0808 can11->cd(6);
0809 h_dzdgammavseta->Draw();
0810
0811 TCanvas *can12 = new TCanvas("can12","can12",300,300,1000,700);
0812 can12->Divide(3,2);
0813 can12->cd(1);
0814
0815 h_dzdd0vseta->Draw();
0816 can12->cd(2);
0817 h_dzdz0vseta->Draw();
0818 can12->cd(3);
0819 h_dzdphivseta->Draw();
0820 can12->cd(4);
0821 h_dzdthetavseta->Draw();
0822 can12->cd(5);
0823 h_dzdqopvseta->Draw();
0824
0825 if(writer)
0826 {
0827 outfile->cd();
0828 h_lowcountsxy->Write();
0829 h_lowcountsrz->Write();
0830 h_residuallayerx->Write();
0831 h_residuallayerz->Write();
0832 h_residualcluspulllayerx->Write();
0833 h_residualcluspulllayerz->Write();
0834 h_residualstatepulllayerx->Write();
0835 h_residualstatepulllayerz->Write();
0836 h_sensorlayercounts->Write();
0837
0838 h_residualhitsetkeyx->Write();
0839 h_residualhitsetkeyz->Write();
0840 h_residualcluspullhitsetkeyx->Write();
0841 h_residualcluspullhitsetkeyz->Write();
0842 h_residualstatepullhitsetkeyx->Write();
0843 h_residualstatepullhitsetkeyz->Write();
0844
0845 h_xresidualgdx->Write();
0846 h_xresidualgdy->Write();
0847 h_xresidualgdz->Write();
0848 h_xresidualdalpha->Write();
0849 h_xresidualdbeta->Write();
0850 h_xresidualdgamma->Write();
0851 h_xresidualdd0->Write();
0852 h_xresidualdz0->Write();
0853 h_xresidualdphi->Write();
0854 h_xresidualdtheta->Write();
0855 h_xresidualdqop->Write();
0856
0857 h_zresidualgdx->Write();
0858 h_zresidualgdy->Write();
0859 h_zresidualgdz->Write();
0860 h_zresidualdalpha->Write();
0861 h_zresidualdbeta->Write();
0862 h_zresidualdgamma->Write();
0863 h_zresidualdd0->Write();
0864 h_zresidualdz0->Write();
0865 h_zresidualdphi->Write();
0866 h_zresidualdtheta->Write();
0867 h_zresidualdqop->Write();
0868
0869 h_dxdxvsphi->Write();
0870 h_dxdyvsphi->Write();
0871 h_dxdzvsphi->Write();
0872 h_dxdalphavsphi->Write();
0873 h_dxdbetavsphi->Write();
0874 h_dxdgammavsphi->Write();
0875 h_dxdd0vsphi->Write();
0876 h_dxdz0vsphi->Write();
0877 h_dxdphivsphi->Write();
0878 h_dxdthetavsphi->Write();
0879 h_dxdqopvsphi->Write();
0880
0881 h_dzdxvsphi->Write();
0882 h_dzdyvsphi->Write();
0883 h_dzdzvsphi->Write();
0884 h_dzdalphavsphi->Write();
0885 h_dzdbetavsphi->Write();
0886 h_dzdgammavsphi->Write();
0887 h_dzdd0vsphi->Write();
0888 h_dzdz0vsphi->Write();
0889 h_dzdphivsphi->Write();
0890 h_dzdthetavsphi->Write();
0891 h_dzdqopvsphi->Write();
0892
0893 h_dxdxvseta->Write();
0894 h_dxdyvseta->Write();
0895 h_dxdzvseta->Write();
0896 h_dxdalphavseta->Write();
0897 h_dxdbetavseta->Write();
0898 h_dxdgammavseta->Write();
0899 h_dxdd0vseta->Write();
0900 h_dxdz0vseta->Write();
0901 h_dxdphivseta->Write();
0902 h_dxdthetavseta->Write();
0903 h_dxdqopvseta->Write();
0904
0905 h_dzdxvseta->Write();
0906 h_dzdyvseta->Write();
0907 h_dzdzvseta->Write();
0908 h_dzdalphavseta->Write();
0909 h_dzdbetavseta->Write();
0910 h_dzdgammavseta->Write();
0911 h_dzdd0vseta->Write();
0912 h_dzdz0vseta->Write();
0913 h_dzdphivseta->Write();
0914 h_dzdthetavseta->Write();
0915 h_dzdqopvseta->Write();
0916
0917
0918 for(int i=0; i<nlayers; i++)
0919 {
0920 h_residualxclusr[i]->Write();
0921 h_residualxclusz[i]->Write();
0922 h_residualgxclusphi[i]->Write();
0923 h_residualgyclusphi[i]->Write();
0924 h_residualgzclusphi[i]->Write();
0925 h_residualzclusr[i]->Write();
0926 h_residualzclusz[i]->Write();
0927 h_residualxclusphi[i]->Write();
0928 h_residualzclusphi[i]->Write();
0929
0930
0931
0932 h_surfradiusdiffvsphi[i]->Write();
0933 h_surfxdiffvsphi[i]->Write();
0934 h_surfphidiffvsphi[i]->Write();
0935 h_surfydiffvsphi[i]->Write();
0936 h_surfzdiffvsphi[i]->Write();
0937 h_surfadiffvsphi[i]->Write();
0938 h_surfbdiffvsphi[i]->Write();
0939 h_surfgdiffvsphi[i]->Write();
0940
0941 h_surfadiffvsz[i]->Write();
0942 h_surfbdiffvsz[i]->Write();
0943 h_surfgdiffvsz[i]->Write();
0944 }
0945
0946 outfile->Write();
0947 outfile->Close();
0948
0949
0950 }
0951
0952
0953
0954 }