00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00015
00016
00017 #include "AlignmentHistograms.h"
00018 #include "NtpAlignmentRecord.h"
00019 #include "AlignmentStrip.h"
00020
00021
00022 #include "MessageService/MsgService.h"
00023 #include "MessageService/MsgFormat.h"
00024 #include "UgliGeometry/UgliGeomHandle.h"
00025 #include "Validity/VldContext.h"
00026
00027
00028 #include "TH1.h"
00029 #include "TH2.h"
00030 #include "TF1.h"
00031 #include "TProfile.h"
00032 #include "TFile.h"
00033 #include "TTree.h"
00034
00035
00036 #include <cassert>
00037 #include <vector>
00038 #include <map>
00039 #include <list>
00040 #include <cmath>
00041 #include <iostream>
00042 #include <string>
00043 #include <sstream>
00044
00045 using namespace std;
00046
00047 CVSID("$Id: AlignmentHistograms.cxx,v 1.6 2009/02/28 21:46:10 gmieg Exp $");
00048
00049 AlignmentHistograms::AlignmentHistograms(TFile *rootfile, const VldContext &vld)
00050 :fRootFile(rootfile),
00051 fnplanes(0),
00052 fnstrips(0),
00053 fNResidualBins(400),
00054 fResidualLimit(0.2),
00055 fResidualStripBinWidth(0.001),
00056 fResidualMdlBinWidth(0.001),
00057 fNResidualBinsStrip(60),
00058 fResidualLimitStrip(0.12),
00059 fNChargeBins(1000),
00060 fChargeLimit(10000.0),
00061 fNTrackChargeBins(2000),
00062 fTrackChargeLimit(100000.0),
00063 fNHitsBins(100),
00064 fTrackResidualRMSBins(1000),
00065 fTrackResidualRMSLimit(0.2),
00066 fNCosBins(600),
00067
00068 fhCharge2dTracksU(0),
00069 fhCharge2dTracksV(0),
00070 fhCharge2dTracksDiffNorm(0),
00071 fhNStrip2dTracksU(0),
00072 fhNStrip2dTracksV(0),
00073 fhNStrip2dTracksDiffNorm(0),
00074 fhSigmaOfTPosVview(0),
00075 fhSigmaOfTPosUview(0),
00076 fhSigmaOfTPosDiffNorm(0),
00077 fChargesInAllHitStrip(0),
00078 fChargevsResidualHitStrips(0),
00079 fResidualAllStrips(0),
00080 fResidualVStrips(0),
00081 fResidualUStrips(0),
00082 fTrackResidualRMSVview(0),
00083 fTrackResidualRMSUview(0),
00084 fChargeRatioOf2dTracks(0),
00085 fhTrackHoughCosU(0),
00086 fhTrackHoughCosV(0),
00087 fhTrackHoughCosZ(0),
00088 fhTrackChargeOverTotalChargeRatio(0),
00089
00090 f2hNumberOfTrackHitsPerStrip(0),
00091 f2hNumberOfTrackHitsPerModule(0),
00092 f2hChargevsResidualHitStrips(0),
00093 f2hResidualvsPlane(0),
00094 f2hMeanChargePlaneStrip(0),
00095 f2hMeanPathCorrChargePlaneStrip(0),
00096
00097 fpTPosSigmavsCosZVview(0),
00098 fpTPosSigmavsCosZUview(0),
00099 fpTPosSigmavsTrackChargeVview(0),
00100 fpTPosSigmavsTrackChargeUview(0),
00101 fpTPosSigmavsTrackNStripsVview(0),
00102 fpTPosSigmavsTrackNStripsUview(0),
00103 fpTPosSigmavsTrackChargeRatioVview(0),
00104 fpTPosSigmavsTrackChargeRatioUview(0),
00105 fp3dTrackChargevsTrackChargeRatio(0),
00106 fp3dTrackChargevsTrackCosz(0),
00107 fp3dTrackNStripsvsCosz(0),
00108 fp3dTrackChargevsNStrips(0),
00109 fp3dTrackChargeRatiovsCosz(0),
00110
00111 fpResidualvsPlane(0),
00112 fpResidualvsCosZVview(0),
00113 fpResidualvsCosZUview(0),
00114 fpResidualvsTPosSigmaVview(0),
00115 fpResidualvsTPosSigmaUview(0),
00116 fpResidualvsStripChargeVview(0),
00117 fpResidualvsStripChargeUview(0),
00118 fpResidualvsTrackChargeVview(0),
00119 fpResidualvsTrackChargeUview(0),
00120 fpResidualvsTrackNStripsVview(0),
00121 fpResidualvsTrackNStripsUview(0),
00122 fpResidualvsTrackChargeRatioVview(0),
00123 fpResidualvsTrackChargeRatioUview(0),
00124 fpMeanStripResponsevsResidual(0)
00125 {
00126
00127 MSG("Align", Msg::kInfo) << "Constructor AlignmentHistograms() " << endl;
00128
00129 if(!fRootFile)
00130 {
00131 MSG("Align", Msg::kFatal) << "ROOT file pointer is zero. Abort()" <<endl;
00132 abort();
00133 }
00134
00135 fRootFile -> cd();
00136
00137 fPlanePlexDirectory = new TDirectory("PlanePlex","PlanePlex");
00138 fResidualSummaryDirectory = new TDirectory("ResidualSummary","ResidualSummary");
00139 fTrackDirectory = new TDirectory("TrackData","TrackData");
00140
00141 UgliGeomHandle ugh(vld);
00142 vector<UgliScintPlnHandle> uph = ugh.GetScintPlnHandleVector();
00143 for(vector<UgliScintPlnHandle>::iterator it = uph.begin(); it != uph.end(); ++it)
00144 {
00145 const int plane = it -> GetPlaneNumber();
00146 if(plane > fnplanes)
00147 fnplanes = plane;
00148
00149 vector<UgliStripHandle> ushv = it -> GetStripHandleVector();
00150 for(vector<UgliStripHandle>::iterator sit = ushv.begin(); sit != ushv.end(); ++sit)
00151 {
00152 const int strip = (sit -> GetSEId()).GetStrip();
00153 if(strip > fnstrips)
00154 fnstrips = strip;
00155 }
00156
00157 const int nstrip = it -> NumberOfStrips();
00158 char name[100], title[100];
00159
00160 sprintf(name,"PlexChargeRatioPlane%03d", plane);
00161 sprintf(title,"cand strip charge over trackv strip charge plane %03d", plane);
00162 TH2D *h_ratio = new TH2D(name, title, nstrip, 0, nstrip, nstrip, 0, nstrip);
00163 h_ratio -> SetDirectory(fPlanePlexDirectory);
00164 SetAxisLabels(h_ratio, "track strip #", "candidate strip #");
00165 f2hPlanePlexChargeRatio[plane] = h_ratio;
00166
00167 sprintf(name,"PlexHitsPlane%03d", plane);
00168 sprintf(title,"Number of entries in each bin plane %03d", plane);
00169 TH2D *h_hits = new TH2D(name, title, nstrip, 0, nstrip, nstrip, 0, nstrip);
00170 h_hits -> SetDirectory(fPlanePlexDirectory);
00171 SetAxisLabels(h_hits, "track strip #", "candidate strip #");
00172 f2hPlanePlexHits[plane] = h_hits;
00173 }
00174
00175 fChargesInAllHitStrip = new TH1D("ChargesInAllHitStrip",
00176 "Charge in all hit strips",
00177 fNChargeBins, 0, fChargeLimit);
00178 SetAxisLabels(fChargesInAllHitStrip, "Raw ADC", 0);
00179
00180
00181 fChargevsResidualHitStrips = new TH1D("ChargevsResidualHitStrips2h", "Charge of hit strip vs fited residual",
00182 2*fNResidualBins , -fResidualLimit, fResidualLimit);
00183 SetAxisLabels(fChargevsResidualHitStrips, "residual (m)", "Raw ADC");
00184
00185 f2hChargevsResidualHitStrips = new TH2D("ChargevsResidualHitStrips", "Charge of hit strip vs fited residual",
00186 2*fNResidualBins , -fResidualLimit, fResidualLimit,
00187 fNChargeBins, 0, fChargeLimit);
00188 SetAxisLabels(f2hChargevsResidualHitStrips, "residual (m)", "Raw ADC");
00189
00190 fResidualSummaryDirectory -> cd();
00191
00192 fResidualAllStrips = new TH1D("ResidualAllStrips", "Residuals of all strips",
00193 2*fNResidualBins , -fResidualLimit, fResidualLimit);
00194 SetAxisLabels(fResidualAllStrips,"residual (m)",0);
00195
00196 fResidualUStrips = new TH1D("ResidualUStrips", "Residuals of U strips",
00197 2*fNResidualBins , -fResidualLimit, fResidualLimit);
00198 SetAxisLabels(fResidualUStrips, "residual (m)",0);
00199
00200 fResidualVStrips = new TH1D("ResidualVStrips",
00201 "Residuals of V strips",
00202 2*fNResidualBins , -fResidualLimit, fResidualLimit);
00203 fResidualVStrips -> GetXaxis() -> SetTitle("residual (m)");
00204 fResidualVStrips -> GetXaxis() -> CenterTitle();
00205
00206 f2hResidualvsPlane = new TH2D("ResidualvsPlane",
00207 "Residual vs plane number, all events",
00208 fnplanes, 0, fnplanes,
00209 2*fNResidualBins , -fResidualLimit, fResidualLimit);
00210 SetAxisLabels(f2hResidualvsPlane, "residual (m)","plane number");
00211
00212 fRootFile -> cd();
00213
00214 f2hNumberOfTrackHitsPerStrip = new TH2D("NumberOfTrackHitsPerStrip", "Strip vs plane for track hits",
00215 fnplanes, 0, fnplanes, fnstrips, 0, fnstrips);
00216 SetAxisLabels(f2hNumberOfTrackHitsPerStrip,"plane number", "strip number");
00217
00218
00219 f2hNumberOfTrackHitsPerModule = new TH2D("NumberOfTrackHitsPerModule",
00220 "Module vs plane for track hits",
00221 fnplanes, 0, fnplanes,
00222 5, 0, 5);
00223 SetAxisLabels(f2hNumberOfTrackHitsPerModule, "plane number", "module number");
00224
00225 fResidualSummaryDirectory -> cd();
00226
00227
00228 fpMeanStripResponsevsResidual = new TProfile("MeanStripResponsevsResidual",
00229 "Response of scintilator vs residual, path length corrected",
00230 2*fNResidualBins , -fResidualLimit, fResidualLimit);
00231 SetAxisLabels(fpMeanStripResponsevsResidual, "residual (m)", "charge (ADC)");
00232
00233
00234 fpResidualvsPlane = new TProfile("ProfileResidualvsPlane", "Residual vs plane number",
00235 fnplanes, 0.0, fnplanes, "s");
00236 SetAxisLabels(fpResidualvsPlane, "residual (m)");
00237
00238
00239 fpResidualvsCosZVview = new TProfile("ResidualvsCosZVview",
00240 "Residual vs cos with Z axis V planes",
00241 100, -1.0, 1.0);
00242 SetAxisLabels(fpResidualvsCosZVview, "residual (m)");
00243
00244 fpResidualvsCosZUview = new TProfile("ResidualvsCosZUview",
00245 "Residual vs cos with Z axis U plane",
00246 100, -1.0, 1.0);
00247 SetAxisLabels(fpResidualvsCosZUview, "residual (m)");
00248
00249
00250 fpResidualvsTPosSigmaVview = new TProfile("ResidualvsTPosSigmaVview",
00251 "Residual vs tpos error V planes",
00252 100, 0, 0.05);
00253 SetAxisLabels(fpResidualvsTPosSigmaVview, "residual (m)","error in tpos (m)");
00254
00255 fpResidualvsTPosSigmaUview = new TProfile("ResidualvsTPosSigmaUview",
00256 "Residual vs tpos error U planes",
00257 100, 0, 0.05);
00258 SetAxisLabels(fpResidualvsTPosSigmaUview, "residual (m)", "error in tpos (m)");
00259
00260
00261 fpResidualvsStripChargeVview = new TProfile("ResidualvsStripChargeVview",
00262 "Residual vs strip charge V planes",
00263 200, 0, 10000);
00264 SetAxisLabels(fpResidualvsStripChargeVview, "residual (m)", "strip charge (ADC)");
00265
00266 fpResidualvsStripChargeUview = new TProfile("ResidualvsStripChargeUview",
00267 "Residual vs strip charge U planes",
00268 200, 0, 10000);
00269 SetAxisLabels(fpResidualvsStripChargeUview, "residual (m)", "strip charge (ADC)");
00270
00271
00272 fpResidualvsTrackChargeVview = new TProfile("ResidualvsTrackChargeVview",
00273 "Residual vs track charge V planes",
00274 100, 0, 60000);
00275 SetAxisLabels(fpResidualvsTrackChargeVview, "residual (m)", "track charge (ADC)");
00276
00277 fpResidualvsTrackChargeUview = new TProfile("ResidualvsTrackChargeUview",
00278 "Residual vs track charge U planes",
00279 100, 0, 60000);
00280 SetAxisLabels(fpResidualvsTrackChargeUview, "residual (m)", "track charge (ADC)");
00281
00282
00283 fpResidualvsTrackNStripsVview = new TProfile("ResidualvsTrackNStripsVview",
00284 "Residual vs # of strips in track V planes",
00285 100, 0.0, 100.0);
00286 SetAxisLabels(fpResidualvsTrackNStripsVview, "residual (m)", "#strips");
00287
00288 fpResidualvsTrackNStripsUview = new TProfile("ResidualvsTrackNStripsUview",
00289 "Residual vs # of strips in track U planes",
00290 100, 0.0, 100.0);
00291 SetAxisLabels(fpResidualvsTrackNStripsUview, "residual (m)", "#strips");
00292
00293
00294 fpResidualvsTrackChargeRatioVview = new TProfile("ResidualvsTrackChargeRatioVview",
00295 "Error in tpos vs # track/cand charge V planes",
00296 100, 0.0, 1.0);
00297 SetAxisLabels(fpResidualvsTrackChargeRatioVview, "error in tpos (m)");
00298
00299 fpResidualvsTrackChargeRatioUview = new TProfile("ResidualvsTrackChargeRatioUview",
00300 "Error in tpos vs # track/cand charge U planes",
00301 100, 0.0, 1.0);
00302 SetAxisLabels(fpResidualvsTrackChargeRatioUview, "error in tpos (m)");
00303
00304 fRootFile -> cd();
00305
00306 }
00307
00308
00309
00310 void AlignmentHistograms::Fill(const AlignmentStrip& astrip, const NtpAlignmentRecord* ntprec)
00311 {
00312 PlexStripEndId plexid(astrip.plexseid);
00313
00314 fChargesInAllHitStrip -> Fill(astrip.charge);
00315 f2hNumberOfTrackHitsPerStrip -> Fill(plexid.GetPlane(), plexid.GetStrip(), 1.0);
00316 f2hNumberOfTrackHitsPerModule -> Fill(plexid.GetPlane(), plexid.GetScintMdlId().GetModule(), 1.0);
00317 fChargevsResidualHitStrips -> Fill(astrip.residual, astrip.charge);
00318 f2hChargevsResidualHitStrips -> Fill(astrip.residual, astrip.charge, 1.0);
00319 fResidualAllStrips -> Fill(astrip.residual);
00320 f2hResidualvsPlane -> Fill(plexid.GetPlane(), astrip.residual);
00321 fpResidualvsPlane -> Fill(plexid.GetPlane(), astrip.residual);
00322 fpMeanStripResponsevsResidual -> Fill(astrip.residual, astrip.charge*fabs(ntprec->hcosz), 1.0);
00323
00324 double sum = ntprec->vcharge + ntprec->ucharge + ntprec->vcandcharge + ntprec->ucandcharge;
00325 double ratio = -1.0;
00326 if(sum>1.0)
00327 ratio = (ntprec->vcharge + ntprec->ucharge)/sum;
00328
00329 if(plexid.GetPlaneView() == PlaneView::kV)
00330 {
00331 fResidualVStrips -> Fill(astrip.residual);
00332 fpResidualvsStripChargeVview -> Fill(astrip.charge, astrip.residual);
00333 fpResidualvsTPosSigmaVview -> Fill(ntprec->vsigmaoftpos, astrip.residual);
00334 fpResidualvsCosZVview -> Fill(ntprec->hcosz, astrip.residual);
00335 fpResidualvsTrackChargeVview -> Fill(ntprec->vcharge, astrip.residual);
00336 fpResidualvsTrackNStripsVview -> Fill(ntprec->ntrackvstrip, astrip.residual);
00337 fpResidualvsTrackChargeRatioVview -> Fill(ratio, astrip.residual);
00338 } else
00339 {
00340 fResidualUStrips -> Fill(astrip.residual);
00341 fpResidualvsStripChargeUview -> Fill(astrip.charge, astrip.residual);
00342 fpResidualvsTPosSigmaUview -> Fill(ntprec->usigmaoftpos, astrip.residual);
00343 fpResidualvsCosZUview -> Fill(ntprec->hcosz, astrip.residual);
00344 fpResidualvsTrackChargeUview -> Fill(ntprec->ucharge, astrip.residual);
00345 fpResidualvsTrackNStripsUview -> Fill(ntprec->ntrackustrip, astrip.residual);
00346 fpResidualvsTrackChargeRatioUview -> Fill(ratio, astrip.residual);
00347 }
00348
00349 FillTrackInfo(ntprec);
00350 FillHits(plexid);
00351 }
00352
00353
00354
00355 void AlignmentHistograms::FillHits(PlexStripEndId &plexid)
00356 {
00357 map<PlexStripEndId, unsigned int>::iterator sit = fNStripHits.find(plexid);
00358 if(sit == fNStripHits.end())
00359 fNStripHits[plexid] = 1;
00360 else
00361 sit->second += 1;
00362
00363 PlexScintMdlId plexmdlid = plexid.GetScintMdlId();
00364 map<PlexScintMdlId, unsigned int>::iterator mit = fNMdlHits.find(plexmdlid);
00365 if(mit == fNMdlHits.end())
00366 fNMdlHits[plexmdlid] = 1;
00367 else
00368 mit->second += 1;
00369 }
00370
00371
00372
00373 void AlignmentHistograms::FillTrackInfo(const NtpAlignmentRecord* ntprec)
00374 {
00375 if(!fhCharge2dTracksV){
00376 fTrackDirectory -> cd();
00377
00378 fp3dTrackChargevsTrackChargeRatio = new TProfile("TrackChargevsTrackChargeRatio",
00379 "3d track charge vs track charge/record charge",
00380 200, 0.0, 1.0);
00381
00382 fp3dTrackChargeRatiovsCosz = new TProfile("TrackChargeRatiovsCosz",
00383 "3d track charge/record charge vs Hough CosZ",
00384 200, -1.0, 1.0);
00385
00386 fp3dTrackChargevsTrackCosz = new TProfile("TrackChargevsTrackCosz",
00387 "3d track charge vs Hough CosZ",
00388 200, -1.0, 1.0);
00389
00390 fp3dTrackChargevsNStrips = new TProfile("TrackChargevsNStrips",
00391 "3d track charge vs # of strips",
00392 100, 0.0, 100.0);
00393
00394 fp3dTrackNStripsvsCosz = new TProfile("TrackNStripsvsCosz",
00395 "3d track # of strip vs Hough CosZ",
00396 200, -1.0, 1.0);
00397
00398 fpTPosSigmavsCosZVview = new TProfile("TPosSigmavsCosZVview",
00399 "Error in tpos vs cosz V planes",
00400 100, -1.0, 1.0);
00401 SetAxisLabels(fpTPosSigmavsCosZVview, "error in tpos (m)");
00402
00403 fpTPosSigmavsCosZUview = new TProfile("TPosSigmavsCosZUview",
00404 "Error in tpos vs cosz U planes",
00405 100, -1.0, 1.0);
00406 SetAxisLabels(fpTPosSigmavsCosZUview, "error in tpos (m)");
00407
00408 fpTPosSigmavsTrackChargeVview = new TProfile("TPosSigmavsTrackChargeVview",
00409 "Error in tpos vs track charge V planes",
00410 1000, 0.0, 100000);
00411 SetAxisLabels(fpTPosSigmavsTrackChargeVview, "error in tpos (m)", "2d track charge (ADC)");
00412
00413 fpTPosSigmavsTrackChargeUview = new TProfile("TPosSigmavsTrackChargeUview",
00414 "Error in tpos vs # track charge U planes",
00415 1000, 0.0, 100000);
00416 SetAxisLabels(fpTPosSigmavsTrackChargeUview, "error in tpos (m)", "2d track charge (ADC)");
00417
00418 fpTPosSigmavsTrackNStripsVview = new TProfile("TPosSigmavsTrackNStripsVview",
00419 "Error in tpos vs # of track V strips",
00420 100, 0.0, 100);
00421 SetAxisLabels(fpTPosSigmavsTrackNStripsVview, "error in tpos (m)", "#strips");
00422
00423 fpTPosSigmavsTrackNStripsUview = new TProfile("TPosSigmavsTrackNStripsUview",
00424 "Error in tpos vs # of track U strips",
00425 100, 0.0, 100);
00426 SetAxisLabels(fpTPosSigmavsTrackNStripsUview, "error in tpos (m)", "#strips");
00427
00428 fpTPosSigmavsTrackChargeRatioVview = new TProfile("TPosSigmavsTrackChargeRatioVview",
00429 "Error in tpos vs # track/record charge V planes",
00430 100, 0.0, 1.0);
00431 SetAxisLabels(fpTPosSigmavsTrackChargeRatioVview, "error in tpos (m)");
00432
00433 fpTPosSigmavsTrackChargeRatioUview = new TProfile("TPosSigmavsTrackChargeRatioUview",
00434 "Error in tpos vs # track/record charge U planes",
00435 100, 0.0, 1.0);
00436 SetAxisLabels(fpTPosSigmavsTrackChargeRatioUview, "error in tpos (m)");
00437
00438 fhTrackChargeOverTotalChargeRatio = new TH1D("TrackChargeOverTotalChargeRatio",
00439 "Ratio of 3d track charge over total record charge",
00440 200, 0.0, 1.0);
00441
00442 fhCharge2dTracksV = new TH1D("Charge2dTracksV",
00443 "Charge in 2d V view tracks",
00444 fNTrackChargeBins, 0, fTrackChargeLimit);
00445 SetAxisLabels(fhCharge2dTracksV, "Raw ADC");
00446
00447 fhCharge2dTracksU = new TH1D("Charge2dTracksU",
00448 "Charge in 2d U view tracks",
00449 fNTrackChargeBins, 0, fTrackChargeLimit);
00450 SetAxisLabels(fhCharge2dTracksU, "Raw ADC");
00451
00452 fhCharge2dTracksDiffNorm = new TH1D("Charge2dTracksDiffNorm",
00453 "(vcharge - ucharge)/(vcharge + ucharge)",
00454 100, -1.0, 1.0);
00455
00456 fhNStrip2dTracksV = new TH1D("NStrip2dTracksV", "Number of strips in 2d V view tracks", 80, 0, 80);
00457 SetAxisLabels(fhNStrip2dTracksV, "Raw ADC");
00458
00459 fhNStrip2dTracksU = new TH1D("NStrip2dTracksU", "Number of strips in 2d U view tracks", 80, 0, 80);
00460 SetAxisLabels(fhNStrip2dTracksU, "Raw ADC");
00461
00462 fhNStrip2dTracksDiffNorm = new TH1D("NStrip2dTracksDiffNorm",
00463 "(vnstrip - unstrip)/(vnstrip + unstrip)",
00464 100, -1.0, 1.0);
00465
00466 fhTrackHoughCosU = new TH1D("TrackHoughCosU", "Residual rms of 2d tracks in V view",
00467 fNCosBins, -1, 1);
00468 fhTrackHoughCosV = new TH1D("TrackHoughCosV",
00469 "Residual rms of 2d tracks in V view",
00470 fNCosBins, -1, 1);
00471 fhTrackHoughCosZ = new TH1D("TrackHoughCosZ",
00472 "Residual rms of 2d tracks in V view",
00473 fNCosBins, -1, 1);
00474 fhSigmaOfTPosVview = new TH1D("SigmaOfTPosVview",
00475 "Error in tpos from fit in V view",
00476 fTrackResidualRMSBins, 0, fTrackResidualRMSLimit);
00477 SetAxisLabels(fhSigmaOfTPosVview, "tpos uncertainty (m)");
00478
00479 fhSigmaOfTPosUview = new TH1D("SigmaOfTPosUview",
00480 "Error in tpos from fit in U view",
00481 fTrackResidualRMSBins, 0, fTrackResidualRMSLimit);
00482 SetAxisLabels(fhSigmaOfTPosUview, "tpos uncertainty (m)");
00483
00484 fTrackResidualRMSVview = new TH1D ("TrackResidualRMSVview",
00485 "Roughly RMS of residuals along V view tracks",
00486 fTrackResidualRMSBins, 0, fTrackResidualRMSLimit);
00487 SetAxisLabels(fTrackResidualRMSVview, "track rms residual (m)");
00488
00489 fhSigmaOfTPosDiffNorm = new TH1D("SigmaOfTPosDiffNorm",
00490 "(vsigma - usigma)/(vsigma + usigma)",
00491 100, -1.0, 1.0);
00492
00493 fTrackResidualRMSUview = new TH1D ("TrackResidualRMSUview",
00494 "Roughly RMS of residuals along U view tracks",
00495 fTrackResidualRMSBins, 0, fTrackResidualRMSLimit);
00496 SetAxisLabels(fTrackResidualRMSUview, "track rms residual (m)");
00497
00498 fChargeRatioOf2dTracks = new TH1D ("ChargeRatioOf2dTracks",
00499 "Ratio of track charge, V over U",
00500 100, 0, 5);
00501 fRootFile->cd();
00502 }
00503
00504
00505 const Double_t &ucharge = ntprec -> ucharge;
00506 const Double_t &vcharge = ntprec -> vcharge;
00507 const Double_t &vcandcharge = ntprec -> vcandcharge;
00508 const Double_t &ucandcharge = ntprec -> ucandcharge;
00509 const Double_t &vnstrip = ntprec -> ntrackvstrip;
00510 const Double_t &unstrip = ntprec -> ntrackustrip;
00511 const Double_t &vsigmaoftpos = ntprec -> vsigmaoftpos;
00512 const Double_t &usigmaoftpos = ntprec -> usigmaoftpos;
00513
00514 fhCharge2dTracksV -> Fill(vcharge);
00515 fhCharge2dTracksU -> Fill(ucharge);
00516 fhNStrip2dTracksV -> Fill(vnstrip);
00517 fhNStrip2dTracksU -> Fill(unstrip);
00518 fhSigmaOfTPosVview -> Fill(vsigmaoftpos);
00519 fhSigmaOfTPosUview -> Fill(usigmaoftpos);
00520 fTrackResidualRMSVview -> Fill(ntprec -> vtrackrms);
00521 fTrackResidualRMSUview -> Fill(ntprec -> utrackrms);
00522 fhTrackHoughCosV -> Fill(ntprec -> hcosv);
00523 fhTrackHoughCosU -> Fill(ntprec -> hcosu);
00524 fhTrackHoughCosZ -> Fill(ntprec -> hcosz);
00525
00526 if(vcharge + ucharge > 0.0)
00527 fhCharge2dTracksDiffNorm -> Fill((vcharge-ucharge)/(vcharge+ucharge));
00528
00529 if(vnstrip + unstrip > 0.0)
00530 fhNStrip2dTracksDiffNorm -> Fill((vnstrip-unstrip)/(vnstrip+unstrip));
00531
00532 if(vsigmaoftpos + usigmaoftpos > 0.0)
00533 fhSigmaOfTPosDiffNorm -> Fill((vsigmaoftpos-usigmaoftpos)/(vsigmaoftpos+usigmaoftpos));
00534
00535 if(ucharge > 1.0)
00536 fChargeRatioOf2dTracks -> Fill(vcharge/ucharge);
00537
00538 const double sum = vcharge + ucharge + vcandcharge + ucandcharge;
00539 if(sum < 1.0){
00540 MSG("Align", Msg::kError) << "Total record charge is less than 1.0."<< endl;
00541 return;
00542 }
00543
00544 const double ratio = (vcharge+ucharge)/sum;
00545 fhTrackChargeOverTotalChargeRatio -> Fill(ratio);
00546
00547
00548 fpTPosSigmavsCosZVview -> Fill(ntprec->hcosz, vsigmaoftpos);
00549 fpTPosSigmavsCosZUview -> Fill(ntprec->hcosz, usigmaoftpos);
00550 fpTPosSigmavsTrackChargeVview -> Fill(ntprec->vcharge, vsigmaoftpos);
00551 fpTPosSigmavsTrackChargeUview -> Fill(ntprec->ucharge, usigmaoftpos);
00552 fpTPosSigmavsTrackNStripsVview -> Fill(vnstrip, vsigmaoftpos);
00553 fpTPosSigmavsTrackNStripsUview -> Fill(unstrip, usigmaoftpos);
00554 fpTPosSigmavsTrackChargeRatioVview -> Fill(ratio, vsigmaoftpos);
00555 fpTPosSigmavsTrackChargeRatioUview -> Fill(ratio, usigmaoftpos);
00556 fp3dTrackChargevsTrackChargeRatio -> Fill(ratio, vcharge+ucharge);
00557 fp3dTrackChargevsTrackCosz -> Fill(ntprec->hcosz, vcharge+ucharge);
00558 fp3dTrackNStripsvsCosz -> Fill(ntprec->hcosz, vnstrip+unstrip);
00559 fp3dTrackChargevsNStrips -> Fill(vnstrip+unstrip, vcharge+ucharge);
00560 fp3dTrackChargeRatiovsCosz -> Fill(ntprec->hcosz, ratio);
00561 }
00562
00563
00564 void AlignmentHistograms::FillPlanePlex(const vector<AlignmentStrip> &track_strips,
00565 const vector<AlignmentStrip> &cand_strips)
00566 {
00567
00568
00569 for(vector<AlignmentStrip>::const_iterator it = track_strips.begin();
00570 it != track_strips.end(); ++it)
00571 {
00572 const AlignmentStrip &track_strip = *it;
00573
00574 if(track_strip.charge < 0.1) continue;
00575
00576 for(vector<AlignmentStrip>::const_iterator cit = cand_strips.begin();
00577 cit != cand_strips.end(); ++cit)
00578 {
00579 const AlignmentStrip &cand_strip = *cit;
00580 if(track_strip.plane == cand_strip.plane)
00581 {
00582 const double ratio = cand_strip.charge/track_strip.charge;
00583 map<int, TH2D *>::iterator fit_r = f2hPlanePlexChargeRatio.find(track_strip.plane);
00584 if(fit_r != f2hPlanePlexChargeRatio.end())
00585 fit_r -> second -> Fill(track_strip.strip, cand_strip.strip, ratio);
00586 map<int, TH2D *>::iterator fit_h = f2hPlanePlexHits.find(track_strip.plane);
00587 if(fit_h != f2hPlanePlexHits.end())
00588 fit_h -> second -> Fill(track_strip.strip, cand_strip.strip, ratio);
00589 }
00590 }
00591 }
00592 }
00593
00594
00595 void AlignmentHistograms::SetAxisLabels(TH1 *h, const char *xlabel, const char *ylabel)
00596 {
00597 MSG("Align", Msg::kVerbose) << "AlignmentHistograms::SetAxisLabels()" << endl;
00598
00599 if(!h) return;
00600
00601 if(xlabel)
00602 {
00603 h -> GetXaxis() -> SetTitle(xlabel);
00604 h -> GetXaxis() -> CenterTitle();
00605 }
00606
00607 if(ylabel)
00608 {
00609 h -> GetYaxis() -> SetTitle(ylabel);
00610 h -> GetYaxis() -> CenterTitle();
00611 }
00612 }
00613
00614
00615
00616 AlignmentHistograms::~AlignmentHistograms()
00617 {
00618 MSG("Align", Msg::kInfo) << "Destructor ~AlignmentHistograms()" << endl;
00619
00620 TTree *stree = new TTree("StripHits","Number of track hits per strip");
00621 stree -> SetDirectory(fRootFile);
00622 Int_t plane, strip, module;
00623 UInt_t plexseid, plexmdlid, nhits;
00624 stree -> Branch("nhits", &nhits, "nhits/i");
00625 stree -> Branch("plane", &plane, "plane/I");
00626 stree -> Branch("strip", &strip, "strip/I");
00627 stree -> Branch("plexseid", &plexseid, "plexseid/i");
00628
00629 for(map<PlexStripEndId, unsigned int>::const_iterator sit = fNStripHits.begin();
00630 sit != fNStripHits.end(); ++sit)
00631 {
00632 PlexStripEndId plexid = sit -> first;
00633 plane = plexid.GetPlane();
00634 strip = plexid.GetStrip();
00635 plexseid = plexid.GetEncoded();
00636 nhits = sit -> second;
00637 stree -> Fill();
00638 }
00639
00640 TTree *mtree = new TTree("MdlHits","Number of track hits per module");
00641 stree -> SetDirectory(fRootFile);
00642 mtree -> Branch("nhits", &nhits, "nhits/i");
00643 mtree -> Branch("plane", &plane, "plane/I");
00644 mtree -> Branch("module", &module, "module/I");
00645 mtree -> Branch("plexmdlid", &plexmdlid, "plexmdlid/i");
00646
00647 for(map<PlexScintMdlId, unsigned int>::const_iterator mit = fNMdlHits.begin();
00648 mit != fNMdlHits.end(); ++mit)
00649 {
00650 PlexScintMdlId plexid = mit -> first;
00651 plane = plexid.GetPlane();
00652 module = plexid.GetModule();
00653 plexmdlid = plexid.GetEncoded();
00654 nhits = mit -> second;
00655 mtree -> Fill();
00656 }
00657 MSG("Align", Msg::kInfo) << "Destructor ~AlignmentHistograms().. Done" << endl;
00658 }