10 #include <boost/filesystem.hpp>
24 #include <TClonesArray.h>
26 #include <TGeoManager.h>
54 cout <<
"------------ TESTING --------------\n";
59 cout <<
"------------ DONE --------------\n";
63 double areaPercent = 0;
66 for (
unsigned int i = 0;
i < overlapIDs.size();
i++) {
71 cout <<
"\\AtoB{" << id1 <<
"}{" << id2 <<
"} & " << areaPercent <<
"\n";
80 std::vector<std::vector<double> > data;
84 vector<std::pair<int, int>> idPairs;
85 for (
int i = 0;
i < 400;
i += 10) {
86 idPairs.push_back(make_pair(0 +
i, 5 +
i));
87 idPairs.push_back(make_pair(1 +
i, 8 +
i));
88 idPairs.push_back(make_pair(2 +
i, 8 +
i));
89 idPairs.push_back(make_pair(2 +
i, 9 +
i));
90 idPairs.push_back(make_pair(3 +
i, 6 +
i));
91 idPairs.push_back(make_pair(3 +
i, 7 +
i));
92 idPairs.push_back(make_pair(3 +
i, 8 +
i));
93 idPairs.push_back(make_pair(4 +
i, 7 +
i));
94 idPairs.push_back(make_pair(4 +
i, 9 +
i));
100 for (
size_t i = 0;
i < idPairs.size();
i++) {
102 int id1 = idPairs[
i].first;
103 int id2 = idPairs[
i].second;
115 matrixNameCM = path + matrixNameCM;
116 matrixNamePX = path + matrixNamePX;
141 std::vector<double> result;
142 result.push_back(id1);
143 result.push_back(id2);
144 result.push_back(matrixDif.
val[0][1]);
145 result.push_back(matrixDif.
val[0][3]);
146 result.push_back(matrixDif.
val[1][3]);
147 data.push_back(result);
153 parameters.
path = pdfdir +
"/PXvsCM/";
154 parameters.
title =
"matrixCM*matrixTarget - matrixPX(transformed), #DeltaX)";
155 parameters.
xtitle =
"dX [nm]";
156 parameters.
ytitle =
"entries";
160 parameters.
xMin = -1;
161 parameters.
xMax = -1;
167 parameters.
title =
"matrixCM*matrixTarget - matrixPX(transformed), #DeltaY)";
168 parameters.
xtitle =
"dY [nm]";
169 parameters.
ytitle =
"entries";
173 parameters.
xMin = -1;
174 parameters.
xMax = -1;
180 parameters.
title =
"matrixCM*matrixTarget - matrixPX(transformed), #Delta#alpha";
181 parameters.
xtitle =
"d#alpha [nrad]";
182 parameters.
ytitle =
"entries";
186 parameters.
xMin = -1;
187 parameters.
xMax = -1;
216 std::vector<std::vector<double> > data;
224 for (
auto id1 = 0; id1 < 400; id1 += 10) {
226 for (
auto id2 = id1 + 1; id2 < id1 + 10; id2++) {
241 std::vector<double> result;
242 result.push_back(id1);
243 result.push_back(id2);
244 result.push_back(matrixDif.
val[0][1]);
245 result.push_back(matrixDif.
val[0][3]);
246 result.push_back(matrixDif.
val[1][3]);
248 data.push_back(result);
253 parameters.
bins = 20;
256 parameters.
path = pdfdir +
"/residualsCombined/";
257 inCentimeters ? parameters.
title =
"matrix combined 0-9 CM - Target, #DeltaX" : parameters.
title =
258 "matrix combined 0-9 PX - Target, #DeltaX";
259 parameters.
xtitle =
"dX [#mum]";
260 parameters.
ytitle =
"entries";
264 parameters.
xMin = -1;
265 parameters.
xMax = -1;
271 inCentimeters ? parameters.
title =
"matrix combined 0-9 CM - Target, #DeltaY" : parameters.
title =
272 "matrix combined 0-9 PX - Target, #DeltaY";
273 parameters.
xtitle =
"dY [#mum]";
274 parameters.
ytitle =
"entries";
278 parameters.
xMin = -1;
279 parameters.
xMax = -1;
286 parameters.
title =
"matrix combined 0-9 CM - Target, #Delta#alpha" : parameters.
title =
287 "matrix combined 0-9 PX - Target, #Delta#alpha";
288 parameters.
xtitle =
"d#alpha [#murad]";
289 parameters.
ytitle =
"entries";
293 parameters.
xMin = -1;
294 parameters.
xMax = -1;
310 std::vector<std::vector<double> > data;
319 for (
int i = 0;
i < 400;
i++) {
325 std::vector<double> result;
328 result.push_back(cycle.
val[0][1]);
329 result.push_back(cycle.
val[0][3]);
330 result.push_back(cycle.
val[1][3]);
331 data.push_back(result);
336 parameters.
bins = 20;
339 parameters.
path = pdfdir +
"/cyclicChecks/";
340 inCentimeters ? parameters.
title =
"matrixCM cycle check, #DeltaX" : parameters.
title =
341 "matrixPX cycle check, #DeltaX";
342 parameters.
xtitle =
"dX [#mum]";
343 parameters.
ytitle =
"entries";
347 parameters.
xMin = -1;
348 parameters.
xMax = -1;
354 inCentimeters ? parameters.
title =
"matrixCM cycle check, #DeltaY" : parameters.
title =
355 "matrixPX cycle check, #DeltaY";
356 parameters.
xtitle =
"dY [#mum]";
357 parameters.
ytitle =
"entries";
361 parameters.
xMin = -1;
362 parameters.
xMax = -1;
368 inCentimeters ? parameters.
title =
"matrixCM cycle check, #Delta#alpha" : parameters.
title =
369 "matrixPX cycle check, #Delta#alpha";
370 parameters.
xtitle =
"d#alpha [#murad]";
371 parameters.
ytitle =
"entries";
375 parameters.
xMin = -1;
376 parameters.
xMax = -1;
383 int sensorID1 = sensor1, sensorID2 =
sensor2;
392 double colTest2 = 0, rowTest2 = 0;
394 TH1D
hist(
"Pixel Distances",
"Pixel Distances", 300, -1, -1);
401 for (
int colTest1 = 0; colTest1 < 250; colTest1++) {
402 for (
int rowTest1 = 0; rowTest1 < 250; rowTest1++) {
412 if (colTest2 < 0 || colTest2 > 247) {
415 if (rowTest2 < 0 || rowTest2 > 242) {
429 vector<Matrix> hit2Candidates;
441 for (
size_t i = 0;
i < hit2Candidates.size();
i++) {
457 double coverage = (double) valid / (250.0 * 250.0) * 100;
458 cout <<
"overlap: " << coverage <<
"\n";
460 std::stringstream ss;
461 ss <<
"Pixel Distances Area " << sensorID1 <<
" to " << sensorID2 <<
", " << coverage
463 hist.SetTitle(ss.str().c_str());
466 hist.GetXaxis()->SetTitle(ss.str().c_str());
469 hist.GetYaxis()->SetTitle(ss.str().c_str());
472 filename <<
pdfOutPath <<
"/AreaPixelDistances" << sensor1 <<
"to" << sensor2 <<
".pdf";
476 canvas.Print(filename.str().c_str());
492 double colTest2 = 0, rowTest2 = 0;
496 for (
int colTest1 = 0; colTest1 < 247; colTest1++) {
497 for (
int rowTest1 = 0; rowTest1 < 242; rowTest1++) {
507 if (colTest2 < 0 || colTest2 > 247) {
510 if (rowTest2 < 0 || rowTest2 > 242) {
518 double coverage = (double) valid / (250.0 * 250.0) * 100;
535 std::vector<string> values;
536 int overlapid, noPairs;
537 bool alignerComplete =
true;
539 while (std::getline(*info, line)) {
540 if (line.find(
"aligner") != std::string::npos && alignerComplete) {
543 if (values.size() > 1) {
544 overlapid = std::stoi(values[1]);
546 alignerComplete =
false;
548 }
else if (line.find(
"no of pairs") != std::string::npos) {
551 if (values.size() > 1) {
552 noPairs = std::stoi(values[1]);
554 alignerComplete =
true;
570 vector<string>
files;
575 if (files.size() == 0) {
580 bool tempfilefound =
false;
583 for (
size_t i = 0;
i < availableIds.size();
i++) {
586 tempfilefound =
false;
589 for (
size_t j = 0; j < files.size(); j++) {
590 if (files[j].find(matrixName) != string::npos) {
591 tempfilefound =
true;
596 if (!tempfilefound) {
597 return tempfilefound;
606 TH1D histogram(parameters.
title.c_str(), parameters.
title.c_str(), parameters.
bins, parameters.
xMin,
609 histogram.GetXaxis()->SetTitle(parameters.
xtitle.c_str());
610 histogram.GetYaxis()->SetTitle(parameters.
ytitle.c_str());
612 if (
vec.size() == 0) {
613 cout <<
"Error: nothing read, data empty! (maybe not enough pairs?) \n";
618 double dataPoint = 0.0;
619 for (
size_t iArea = 0; iArea <
vec.size(); iArea++) {
621 histogram.Fill(dataPoint);
624 std::stringstream pathname;
625 pathname << parameters.
path;
633 TCanvas canvas(
"canvas",
"canvas", 800, 600);
636 histogram.Draw(
"HIST TEXT0 SAME");
637 canvas.Print((pathname.str() + parameters.
fileName).c_str());
643 std::vector<std::vector<double> > data;
647 vector<std::pair<int, int>> idPairs;
648 for (
int i = 0;
i < 400;
i += 10) {
649 idPairs.push_back(make_pair(0 +
i, 5 +
i));
650 idPairs.push_back(make_pair(1 +
i, 8 +
i));
651 idPairs.push_back(make_pair(2 +
i, 8 +
i));
652 idPairs.push_back(make_pair(2 +
i, 9 +
i));
653 idPairs.push_back(make_pair(3 +
i, 6 +
i));
654 idPairs.push_back(make_pair(3 +
i, 7 +
i));
655 idPairs.push_back(make_pair(3 +
i, 8 +
i));
656 idPairs.push_back(make_pair(4 +
i, 7 +
i));
657 idPairs.push_back(make_pair(4 +
i, 9 +
i));
668 std::vector<std::vector<double> > dataCM;
669 std::vector<std::vector<double> > dataPX;
672 for (
size_t i = 0;
i < idPairs.size();
i++) {
674 int id1 = idPairs[
i].first;
675 int id2 = idPairs[
i].second;
686 matrixNameCM = path + matrixNameCM;
692 Matrix senToSenCorrTarget;
705 std::vector<double> resultCM;
706 resultCM.push_back(id1);
707 resultCM.push_back(id2);
711 dataCM.push_back(resultCM);
715 for (
size_t i = 0;
i < idPairs.size();
i++) {
717 int id1 = idPairs[
i].first;
718 int id2 = idPairs[
i].second;
730 matrixNamePX = path + matrixNamePX;
738 std::vector<double> resultPX;
744 dataPX.push_back(resultPX);
748 if (dataCM.size() != dataPX.size()) {
749 cout <<
"ERROR. the two data sets are not equally large! exiting!\n";
753 data.reserve(dataCM.size());
755 for (
size_t i = 0;
i < dataCM.size();
i++) {
758 if ((dataCM[
i][0] != dataPX[
i][0]) || (dataCM[
i][1] != dataPX[
i][1])) {
759 cout <<
"ERROR. vectors are not in the same order!\n";
762 std::vector<double> interimData;
763 interimData.push_back(dataCM[i][0]);
764 interimData.push_back(dataCM[i][1]);
765 interimData.push_back(dataPX[i][2] - dataCM[i][2]);
766 interimData.push_back(dataPX[i][3] - dataCM[i][3]);
767 interimData.push_back(dataPX[i][4] - dataCM[i][4]);
769 data.push_back(interimData);
778 parameters.
title =
"PXresiduals - CMresiduals, #DeltaX (0u)";
779 parameters.
xtitle =
"dX [nm]";
780 parameters.
ytitle =
"entries";
784 parameters.
xMin = -1;
785 parameters.
xMax = -1;
791 parameters.
title =
"PXresiduals - CMresiduals, #DeltaY (0u)";
792 parameters.
xtitle =
"dY [nm]";
793 parameters.
ytitle =
"entries";
797 parameters.
xMin = -1;
798 parameters.
xMax = -1;
804 parameters.
title =
"PXresiduals - CMresiduals, #Delta#alpha (0u)";
805 parameters.
xtitle =
"d#alpha [#murad]";
806 parameters.
ytitle =
"entries";
810 parameters.
xMin = -1;
811 parameters.
xMax = -1;
820 std::vector<std::vector<double> > data;
824 vector<std::pair<int, int>> idPairs;
825 for (
int i = 0;
i < 400;
i += 10) {
826 idPairs.push_back(make_pair(0 +
i, 5 +
i));
827 idPairs.push_back(make_pair(1 +
i, 8 +
i));
828 idPairs.push_back(make_pair(2 +
i, 8 +
i));
829 idPairs.push_back(make_pair(2 +
i, 9 +
i));
830 idPairs.push_back(make_pair(3 +
i, 6 +
i));
831 idPairs.push_back(make_pair(3 +
i, 7 +
i));
832 idPairs.push_back(make_pair(3 +
i, 8 +
i));
833 idPairs.push_back(make_pair(4 +
i, 7 +
i));
834 idPairs.push_back(make_pair(4 +
i, 9 +
i));
844 for (
size_t i = 0;
i < idPairs.size();
i++) {
846 int id1 = idPairs[
i].first;
847 int id2 = idPairs[
i].second;
860 matrixNameCM = path + matrixNameCM;
870 Matrix senToSenCorrTarget;
899 matrixNamePX = path + matrixNamePX;
908 std::vector<double> result;
909 result.push_back(id1);
910 result.push_back(id2);
911 result.push_back(matrixDif.
val[0][1]);
912 result.push_back(matrixDif.
val[0][3]);
913 result.push_back(matrixDif.
val[1][3]);
914 result.push_back(matrixDif.
val[2][3]);
915 data.push_back(result);
921 parameters.
path = pdfdir +
"/residuals/";
923 parameters.
title =
"matrixCM - correctionTarget, #DeltaX";
925 parameters.
title =
"matrixPX(transformed) - senToSenTarget, #DeltaX";
927 parameters.
xtitle =
"dX [#mum]";
928 parameters.
ytitle =
"entries";
932 parameters.
xMin = -1;
933 parameters.
xMax = -1;
940 parameters.
title =
"matrixCM - correctionTarget, #DeltaY";
942 parameters.
title =
"matrixPX(transformed) - senToSenTarget, #DeltaY";
944 parameters.
xtitle =
"dY [#mum]";
945 parameters.
ytitle =
"entries";
949 parameters.
xMin = -1;
950 parameters.
xMax = -1;
957 parameters.
title =
"#DeltaZ of HitPairs";
959 parameters.
title =
"#DeltaZ of HitPairs";
961 parameters.
xtitle =
"dZ [pair Steps]";
962 parameters.
ytitle =
"entries";
966 parameters.
xMin = -1;
967 parameters.
xMax = -1;
974 parameters.
title =
"matrixCM - correctionTarget, #Delta#alpha";
976 parameters.
title =
"matrixPX(transformed) - senToSenTarget, #Delta#alpha";
978 parameters.
xtitle =
"d#alpha [#murad]";
979 parameters.
ytitle =
"entries";
983 parameters.
xMin = -1;
984 parameters.
xMax = -1;
1005 std::vector<std::vector<double> > data;
1019 cout <<
"Warning: Not all binary pair files are present. Aborting this run.\n";
1026 double x1, y1, x2, y2, distance;
1034 for (
int i = 0;
i < numberOfPairs;
i++) {
1040 distance =
std::sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
1041 vector<double> datum;
1042 datum.push_back(distance);
1043 data.push_back(datum);
1049 parameters.
path = pdfdir +
"/distHistograms/";
1050 std::stringstream titless;
1051 titless <<
"pair distance on area " << overlapId;
1052 parameters.
title = titless.str();
1053 parameters.
xtitle =
"d [#mum]";
1054 parameters.
ytitle =
"entries";
1056 std::stringstream filenamess;
1057 filenamess << overlapId <<
".pdf";
1058 parameters.
fileName = filenamess.str();
1060 parameters.
xMin = -1;
1061 parameters.
xMax = -1;
std::vector< double > simpleSensorOneX
void plotCMvsPXmatrices()
static std::vector< int > getAvailableOverlapIDs()
void setInCentimeters(bool inCentimeters)
friend F32vec4 sqrt(const F32vec4 &a)
static PndLmdGeometryHelper & getInstance()
static int searchFiles(std::string curr_directory, std::vector< std::string > &list, std::string extension="", bool includeSubDirs=true)
void setBinaryPairFileDirectory(const std::string &binaryPairFileDirectory)
std::map< int, PndLmdSensorAligner > aligners
bool checkForMatrixFiles()
PndLmdAlignManager manager
std::map< int, TString > files
void calculateOverlapingAreas()
double calculateOverlappingArea(int id1, int id2, bool aligned=true)
static bool mkdir(std::string path)
int noOfPairs(int overlapID)
std::map< int, int > matrixInfo
void plotPXvsCMmatricesResiduals()
void calculatePixelDistancesFrontToBack()
std::vector< double > simpleSensorTwoY
static std::vector< std::string > findRegex(std::string source, std::string regex)
void checkCyclicMatrices(bool inCentimeters=true)
bool checkForBinaryFiles()
static std::stringstream * readFile(std::string filename)
std::vector< double > simpleSensorOneY
void histPixelDistances(int sen1, int sen2, bool aligned=true)
void setMatrixOutDir(std::string matrixOutDir)
bool readPairsFromBinaryFiles()
PndLmdGeometryHelper * helper
static std::string makeMatrixFileName(int overlapId=0, bool incentimeters=true)
std::vector< double > simpleSensorTwoX
static Matrix readMatrix(std::string filename)
void checkCombinedMatrices(bool inCentimeters=true)
void createHist(std::vector< std::vector< double > > &vec, histParams ¶meters)
std::string binaryMatPath
int getOverlapIdFromSensorIDs(int id1, int id2)
void plotMatrixresiduals(bool inCentimeters=true)
void histogramPairDistances()