67 #include "TStopwatch.h" 101 std::vector<Alignable*> &all_DT_chambers,
102 std::vector<Alignable*> &all_CSC_chambers);
197 ,
m_minTrackP(cfg.getParameter<double>(
"minTrackP"))
198 ,
m_maxTrackP(cfg.getParameter<double>(
"maxTrackP"))
199 ,
m_maxDxy(cfg.getParameter<double>(
"maxDxy"))
213 ,
m_twoBin(cfg.getParameter<bool>(
"twoBin"))
221 ,
m_doDT(cfg.getParameter<bool>(
"doDT"))
222 ,
m_doCSC(cfg.getParameter<bool>(
"doCSC"))
274 m_ttree = fs->
make<TTree>(
"mual_ttree",
"mual_ttree");
299 return s.length()==1 && std::isdigit(s[0]);
305 if (!
numeric(s)) assert(
false);
306 return atoi(s.c_str());
316 if (alignableMuon ==
NULL)
317 throw cms::Exception(
"MuonAlignmentFromReference") <<
"doMuon must be set to True" << std::endl;
351 bool made_fitter =
false;
406 throw cms::Exception(
"MuonAlignmentFromReference") <<
"only DTChambers and CSCChambers can be aligned with this module" << std::endl;
412 int index = (*ali)->geomDetId().rawId();
422 std::vector<Alignable*> all_DT_chambers = alignableMuon->
DTChambers();
423 std::vector<Alignable*> all_CSC_chambers = alignableMuon->
CSCChambers();
452 if (
m_debug)
std::cout <<
"JUST BEFORE LOOP OVER trajTrackPairs" << std::endl;
456 for (ConstTrajTrackPairCollection::const_iterator trajtrack = trajtracks.begin(); trajtrack != trajtracks.end(); ++trajtrack)
470 if (
m_debug)
std::cout <<
"JUST BEFORE muonResidualsFromTrack" << std::endl;
480 if (
m_debug)
std::cout <<
"JUST AFTER LOOP OVER trajTrackPairs" << std::endl;
531 std::vector<DetId> chamberIds = mrft.
chamberIds();
539 for (std::vector<DetId>::const_iterator chamberId = chamberIds.begin(); chamberId != chamberIds.end(); ++chamberId)
589 std::cout <<
"processMuonResidualsFromTrack 6DOF dt13->residual() " << dt13->
residual() << std::endl;
599 fitter->second->fill(charge, residdata);
646 std::cout <<
"processMuonResidualsFromTrack 5DOF dt13->residual() " << dt13->
residual() << std::endl;
654 fitter->second->fill(charge, residdata);
678 std::map<Alignable*,MuonResidualsTwoBin*>::const_iterator fitter =
m_fitters.find(ali);
695 std::cout <<
"processMuonResidualsFromTrack 6DOFrphi csc->residual() " << csc->
residual() << std::endl;
703 fitter->second->fill(charge, residdata);
749 <<
"That's all!" << std::endl;
751 TStopwatch stop_watch;
758 if (m_debug)
std::cout <<
"readTmpFiles took "<< stop_watch.CpuTime() <<
" sec" << std::endl;
767 if (m_debug)
std::cout <<
"selectResidualsPeaks took "<< stop_watch.CpuTime() <<
" sec" << std::endl;
775 if (m_debug)
std::cout <<
"correctBField took "<< stop_watch.CpuTime() <<
" sec" << std::endl;
783 if (m_debug)
std::cout <<
"fiducialCuts took "<< stop_watch.CpuTime() <<
" sec" << std::endl;
792 if (m_debug)
std::cout <<
"fillNtuple took "<< stop_watch.CpuTime() <<
" sec" << std::endl;
800 if (m_debug)
std::cout <<
"eraseNotSelectedResiduals took "<< stop_watch.CpuTime() <<
" sec" << std::endl;
809 if (m_debug)
std::cout <<
"fitAndAlign took "<< stop_watch.CpuTime() <<
" sec" << std::endl;
815 if (m_debug)
std::cout <<
"end: MuonAlignmentFromReference::terminate()" << std::endl;
831 report <<
"nan = None; NAN = None" << std::endl;
832 report <<
"nan = 0" << std::endl;
833 report <<
"reports = []" << std::endl;
834 report <<
"class ValErr:" << std::endl
835 <<
" def __init__(self, value, error, antisym):" << std::endl
836 <<
" self.value, self.error, self.antisym = value, error, antisym" << std::endl
838 <<
" def __repr__(self):" << std::endl
839 <<
" if self.antisym == 0.:" << std::endl
840 <<
" return \"%g +- %g\" % (self.value, self.error)" << std::endl
841 <<
" else:" << std::endl
842 <<
" return \"%g +- %g ~ %g\" % (self.value, self.error, self.antisym)" << std::endl
844 <<
"class Report:" << std::endl
845 <<
" def __init__(self, chamberId, postal_address, name):" << std::endl
846 <<
" self.chamberId, self.postal_address, self.name = chamberId, postal_address, name" << std::endl
847 <<
" self.status = \"NOFIT\"" << std::endl
848 <<
" self.fittype = None" << std::endl
850 <<
" def add_parameters(self, deltax, deltay, deltaz, deltaphix, deltaphiy, deltaphiz, loglikelihood, numsegments, sumofweights, redchi2):" << std::endl
851 <<
" self.status = \"PASS\"" << std::endl
852 <<
" self.deltax, self.deltay, self.deltaz, self.deltaphix, self.deltaphiy, self.deltaphiz = deltax, deltay, deltaz, deltaphix, deltaphiy, deltaphiz" << std::endl
853 <<
" self.loglikelihood, self.numsegments, self.sumofweights, self.redchi2 = loglikelihood, numsegments, sumofweights, redchi2" << std::endl
855 <<
" def add_stats(self, median_x, median_y, median_dxdz, median_dydz, mean30_x, mean30_y, mean20_dxdz, mean50_dydz, mean15_x, mean15_y, mean10_dxdz, mean25_dydz, wmean30_x, wmean30_y, wmean20_dxdz, wmean50_dydz, wmean15_x, wmean15_y, wmean10_dxdz, wmean25_dydz, stdev30_x, stdev30_y, stdev20_dxdz, stdev50_dydz, stdev15_x, stdev15_y, stdev10_dxdz, stdev25_dydz):" << std::endl
856 <<
" self.median_x, self.median_y, self.median_dxdz, self.median_dydz, self.mean30_x, self.mean30_y, self.mean20_dxdz, self.mean50_dydz, self.mean15_x, self.mean15_y, self.mean10_dxdz, self.mean25_dydz, self.wmean30_x, self.wmean30_y, self.wmean20_dxdz, self.wmean50_dydz, self.wmean15_x, self.wmean15_y, self.wmean10_dxdz, self.wmean25_dydz, self.stdev30_x, self.stdev30_y, self.stdev20_dxdz, self.stdev50_dydz, self.stdev15_x, self.stdev15_y, self.stdev10_dxdz, self.stdev25_dydz = median_x, median_y, median_dxdz, median_dydz, mean30_x, mean30_y, mean20_dxdz, mean50_dydz, mean15_x, mean15_y, mean10_dxdz, mean25_dydz, wmean30_x, wmean30_y, wmean20_dxdz, wmean50_dydz, wmean15_x, wmean15_y, wmean10_dxdz, wmean25_dydz, stdev30_x, stdev30_y, stdev20_dxdz, stdev50_dydz, stdev15_x, stdev15_y, stdev10_dxdz, stdev25_dydz" << std::endl
858 <<
" def __repr__(self):" << std::endl
859 <<
" return \"<Report %s %s %s>\" % (self.postal_address[0], \" \".join(map(str, self.postal_address[1:])), self.status)"<< std::endl
863 if (m_debug)
std::cout <<
"***** just after report.open" << std::endl;
867 if (m_debug)
std::cout <<
"***** Start loop over alignables" << std::endl;
869 std::vector<bool> selector = (*ali)->alignmentParameters()->selector();
870 bool align_x = selector[0];
871 bool align_y = selector[1];
872 bool align_z = selector[2];
873 bool align_phix = selector[3];
874 bool align_phiy = selector[4];
875 bool align_phiz = selector[5];
876 int numParams = ((align_x ? 1 : 0) + (align_y ? 1 : 0) + (align_z ? 1 : 0) + (align_phix ? 1 : 0) + (align_phiy ? 1 : 0) + (align_phiz ? 1 : 0));
879 std::vector<int> paramIndex;
880 int paramIndex_counter = -1;
881 if (align_x) paramIndex_counter++;
882 paramIndex.push_back(paramIndex_counter);
883 if (align_y) paramIndex_counter++;
884 paramIndex.push_back(paramIndex_counter);
885 if (align_z) paramIndex_counter++;
886 paramIndex.push_back(paramIndex_counter);
887 if (align_phix) paramIndex_counter++;
888 paramIndex.push_back(paramIndex_counter);
889 if (align_phiy) paramIndex_counter++;
890 paramIndex.push_back(paramIndex_counter);
891 if (align_phiz) paramIndex_counter++;
892 paramIndex.push_back(paramIndex_counter);
894 DetId id = (*ali)->geomDetId();
903 if (m_debug)
std::cout <<
"***** loop over alignables 1" << std::endl;
906 char wheel_label[][2]={
"A",
"B",
"C",
"D",
"E"};
914 sprintf(cname,
"MBwh%sst%dsec%02d", wheel_label[chamberId.
wheel()+2], chamberId.
station(), chamberId.
sector());
917 report <<
"reports.append(Report(" <<
id.rawId() <<
", (\"DT\", " 918 << chamberId.
wheel() <<
", " << chamberId.
station() <<
", " << chamberId.
sector() <<
"), \"" << cname <<
"\"))" << std::endl;
924 sprintf(cname,
"ME%s%d%d_%02d", (chamberId.
endcap() == 1 ?
"p" :
"m"), chamberId.
station(), chamberId.
ring(), chamberId.
chamber());
930 report <<
"reports.append(Report(" <<
id.rawId() <<
", (\"CSC\", " 932 <<
"), \"" << cname <<
"\"))" << std::endl;
936 if (m_debug)
std::cout <<
"***** loop over alignables 2" << std::endl;
940 std::map<Alignable*, MuonResidualsTwoBin*>::const_iterator fitter =
m_fitters.find(thisali);
942 if (m_debug)
std::cout <<
"***** loop over alignables 3" << std::endl;
948 TStopwatch stop_watch;
952 if (m_debug)
std::cout <<
"=============================================================================================" << std::endl;
953 if (m_debug)
std::cout <<
"Fitting " << cname << std::endl;
957 report <<
"reports[-1].posNum = " << fitter->second->numResidualsPos() << std::endl;
958 report <<
"reports[-1].negNum = " << fitter->second->numResidualsNeg() << std::endl;
989 if (m_debug)
std::cout <<
"***** loop over alignables 4" << std::endl;
997 if (m_debug)
std::cout <<
"***** loop over alignables 5" << std::endl;
999 bool successful_fit = fitter->second->fit(thisali);
1001 if (m_debug)
std::cout <<
"***** loop over alignables 6 " << fitter->second->type() << std::endl;
1003 double loglikelihood = fitter->second->loglikelihood();
1004 double numsegments = fitter->second->numsegments();
1005 double sumofweights = fitter->second->sumofweights();
1006 double redchi2 = fitter->second->plot(cname, &rootDirectory, thisali);
1010 if (m_debug)
std::cout <<
"***** loop over alignables k5DOF" << std::endl;
1040 double gammaresid_value, gammaresid_error, gammaresid_antisym, gammaresslope_value, gammaresslope_error, gammaresslope_antisym;
1041 gammaresid_value = gammaresid_error = gammaresid_antisym = gammaresslope_value = gammaresslope_error = gammaresslope_antisym = 0.;
1058 report <<
"reports[-1].fittype = \"5DOF\"" << std::endl;
1059 report <<
"reports[-1].add_parameters(ValErr(" << deltax_value <<
", " << deltax_error <<
", " << deltax_antisym <<
"), \\" << std::endl
1060 <<
" None, \\" << std::endl
1061 <<
" ValErr(" << deltaz_value <<
", " << deltaz_error <<
", " << deltaz_antisym <<
"), \\" << std::endl
1062 <<
" ValErr(" << deltaphix_value <<
", " << deltaphix_error <<
", " << deltaphix_antisym <<
"), \\" << std::endl
1063 <<
" ValErr(" << deltaphiy_value <<
", " << deltaphiy_error <<
", " << deltaphiy_antisym <<
"), \\" << std::endl
1064 <<
" ValErr(" << deltaphiz_value <<
", " << deltaphiz_error <<
", " << deltaphiz_antisym <<
"), \\" << std::endl
1065 <<
" " << loglikelihood <<
", " << numsegments <<
", " << sumofweights <<
", " << redchi2 <<
")" << std::endl;
1066 report <<
"reports[-1].sigmaresid = ValErr(" << sigmaresid_value <<
", " << sigmaresid_error <<
", " << sigmaresid_antisym <<
")" << std::endl;
1067 report <<
"reports[-1].sigmaresslope = ValErr(" << sigmaresslope_value <<
", " << sigmaresslope_error <<
", " << sigmaresslope_antisym <<
")" << std::endl;
1072 report <<
"reports[-1].gammaresid = ValErr(" << gammaresid_value <<
", " << gammaresid_error <<
", " << gammaresid_antisym <<
")" << std::endl;
1073 report <<
"reports[-1].gammaresslope = ValErr(" << gammaresslope_value <<
", " << gammaresslope_error <<
", " << gammaresslope_antisym <<
")" << std::endl;
1091 std::stringstream namesimple_x, namesimple_dxdz, nameweighted_x, nameweighted_dxdz;
1092 namesimple_x << cname <<
"_simple_x";
1093 namesimple_dxdz << cname <<
"_simple_dxdz";
1094 nameweighted_x << cname <<
"_weighted_x";
1095 nameweighted_dxdz << cname <<
"_weighted_dxdz";
1106 if (align_x) params[paramIndex[0]] = deltax_value;
1107 if (align_z) params[paramIndex[2]] = deltaz_value;
1108 if (align_phix) params[paramIndex[3]] = deltaphix_value;
1109 if (align_phiy) params[paramIndex[4]] = deltaphiy_value;
1110 if (align_phiz) params[paramIndex[5]] = deltaphiz_value;
1116 if (m_debug)
std::cout <<
"***** loop over alignables k6DOF" << std::endl;
1158 double gammax_value, gammax_error, gammax_antisym, gammay_value, gammay_error, gammay_antisym,
1159 gammadxdz_value, gammadxdz_error, gammadxdz_antisym, gammadydz_value, gammadydz_error, gammadydz_antisym;
1160 gammax_value = gammax_error = gammax_antisym = gammay_value = gammay_error = gammay_antisym = gammadxdz_value
1161 = gammadxdz_error = gammadxdz_antisym = gammadydz_value = gammadydz_error = gammadydz_antisym = 0.;
1185 report <<
"reports[-1].fittype = \"6DOF\"" << std::endl;
1186 report <<
"reports[-1].add_parameters(ValErr(" << deltax_value <<
", " << deltax_error <<
", " << deltax_antisym <<
"), \\" << std::endl
1187 <<
" ValErr(" << deltay_value <<
", " << deltay_error <<
", " << deltay_antisym <<
"), \\" << std::endl
1188 <<
" ValErr(" << deltaz_value <<
", " << deltaz_error <<
", " << deltaz_antisym <<
"), \\" << std::endl
1189 <<
" ValErr(" << deltaphix_value <<
", " << deltaphix_error <<
", " << deltaphix_antisym <<
"), \\" << std::endl
1190 <<
" ValErr(" << deltaphiy_value <<
", " << deltaphiy_error <<
", " << deltaphiy_antisym <<
"), \\" << std::endl
1191 <<
" ValErr(" << deltaphiz_value <<
", " << deltaphiz_error <<
", " << deltaphiz_antisym <<
"), \\" << std::endl
1192 <<
" " << loglikelihood <<
", " << numsegments <<
", " << sumofweights <<
", " << redchi2 <<
")" << std::endl;
1193 report <<
"reports[-1].sigmax = ValErr(" << sigmax_value <<
", " << sigmax_error <<
", " << sigmax_antisym<<
")" << std::endl;
1194 report <<
"reports[-1].sigmay = ValErr(" << sigmay_value <<
", " << sigmay_error <<
", " << sigmay_antisym<<
")" << std::endl;
1195 report <<
"reports[-1].sigmadxdz = ValErr(" << sigmadxdz_value <<
", " << sigmadxdz_error <<
", "<< sigmadxdz_antisym <<
")" << std::endl;
1196 report <<
"reports[-1].sigmadydz = ValErr(" << sigmadydz_value <<
", " << sigmadydz_error <<
", "<< sigmadydz_antisym <<
")" << std::endl;
1201 report <<
"reports[-1].gammax = ValErr(" << gammax_value <<
", " << gammax_error <<
", " << gammax_antisym <<
")" << std::endl;
1202 report <<
"reports[-1].gammay = ValErr(" << gammay_value <<
", " << gammay_error <<
", " << gammay_antisym <<
")" << std::endl;
1203 report <<
"reports[-1].gammadxdz = ValErr(" << gammadxdz_value <<
", " << gammadxdz_error <<
", " << gammadxdz_antisym <<
")" << std::endl;
1204 report <<
"reports[-1].gammadydz = ValErr(" << gammadydz_value <<
", " << gammadydz_error <<
", " << gammadydz_antisym <<
")" << std::endl;
1207 report <<
"reports[-1].add_stats(" 1237 std::stringstream namesimple_x, namesimple_y, namesimple_dxdz, namesimple_dydz, nameweighted_x,
1238 nameweighted_y, nameweighted_dxdz, nameweighted_dydz;
1239 namesimple_x << cname <<
"_simple_x";
1240 namesimple_y << cname <<
"_simple_y";
1241 namesimple_dxdz << cname <<
"_simple_dxdz";
1242 namesimple_dydz << cname <<
"_simple_dydz";
1243 nameweighted_x << cname <<
"_weighted_x";
1244 nameweighted_y << cname <<
"_weighted_y";
1245 nameweighted_dxdz << cname <<
"_weighted_dxdz";
1246 nameweighted_dydz << cname <<
"_weighted_dydz";
1261 if (align_x) params[paramIndex[0]] = deltax_value;
1262 if (align_y) params[paramIndex[1]] = deltay_value;
1263 if (align_z) params[paramIndex[2]] = deltaz_value;
1264 if (align_phix) params[paramIndex[3]] = deltaphix_value;
1265 if (align_phiy) params[paramIndex[4]] = deltaphiy_value;
1266 if (align_phiz) params[paramIndex[5]] = deltaphiz_value;
1272 if (m_debug)
std::cout <<
"***** loop over alignables k6DOFrphi" << std::endl;
1306 double gammaresid_value, gammaresid_error, gammaresid_antisym, gammaresslope_value, gammaresslope_error, gammaresslope_antisym;
1307 gammaresid_value = gammaresid_error = gammaresid_antisym = gammaresslope_value = gammaresslope_error = gammaresslope_antisym = 0.;
1323 report <<
"reports[-1].fittype = \"6DOFrphi\"" << std::endl;
1324 report <<
"reports[-1].add_parameters(ValErr(" << deltax_value <<
", " << deltax_error <<
", " << deltax_antisym <<
"), \\" << std::endl
1325 <<
" ValErr(" << deltay_value <<
", " << deltay_error <<
", " << deltay_antisym <<
"), \\" << std::endl
1326 <<
" ValErr(" << deltaz_value <<
", " << deltaz_error <<
", " << deltaz_antisym <<
"), \\" << std::endl
1327 <<
" ValErr(" << deltaphix_value <<
", " << deltaphix_error <<
", " << deltaphix_antisym <<
"), \\" << std::endl
1328 <<
" ValErr(" << deltaphiy_value <<
", " << deltaphiy_error <<
", " << deltaphiy_antisym <<
"), \\" << std::endl
1329 <<
" ValErr(" << deltaphiz_value <<
", " << deltaphiz_error <<
", " << deltaphiz_antisym <<
"), \\" << std::endl
1330 <<
" " << loglikelihood <<
", " << numsegments <<
", " << sumofweights <<
", " << redchi2 <<
")" << std::endl;
1331 report <<
"reports[-1].sigmaresid = ValErr(" << sigmaresid_value <<
", " << sigmaresid_error <<
", " << sigmaresid_antisym <<
")" << std::endl;
1332 report <<
"reports[-1].sigmaresslope = ValErr(" << sigmaresslope_value <<
", " << sigmaresslope_error <<
", " << sigmaresslope_antisym <<
")" << std::endl;
1337 report <<
"reports[-1].gammaresid = ValErr(" << gammaresid_value <<
", " << gammaresid_error <<
", " << gammaresid_antisym <<
")" << std::endl;
1338 report <<
"reports[-1].gammaresslope = ValErr(" << gammaresslope_value <<
", " << gammaresslope_error <<
", " << gammaresslope_antisym <<
")" << std::endl;
1356 std::stringstream namesimple_x, namesimple_dxdz, nameweighted_x, nameweighted_dxdz;
1357 namesimple_x << cname <<
"_simple_x";
1358 namesimple_dxdz << cname <<
"_simple_dxdz";
1359 nameweighted_x << cname <<
"_weighted_x";
1360 nameweighted_dxdz << cname <<
"_weighted_dxdz";
1371 if (align_x) params[paramIndex[0]] = deltax_value;
1372 if (align_y) params[paramIndex[1]] = deltay_value;
1373 if (align_z) params[paramIndex[2]] = deltaz_value;
1374 if (align_phix) params[paramIndex[3]] = deltaphix_value;
1375 if (align_phiy) params[paramIndex[4]] = deltaphiy_value;
1376 if (align_phiz) params[paramIndex[5]] = deltaphiz_value;
1382 std::vector<Alignable*> oneortwo;
1383 oneortwo.push_back(*ali);
1384 if (thisali != *ali) oneortwo.push_back(thisali);
1389 if (m_debug)
std::cout <<
"MINUIT fit failed!" << std::endl;
1392 report <<
"reports[-1].status = \"MINUITFAIL\"" << std::endl;
1395 for (
int i = 0;
i < numParams;
i++) cov[
i][
i] = 1000.;
1397 std::vector<Alignable*> oneortwo;
1398 oneortwo.push_back(*ali);
1399 if (thisali != *ali) oneortwo.push_back(thisali);
1405 if (m_debug)
std::cout <<
"Too few hits!" << std::endl;
1408 report <<
"reports[-1].status = \"TOOFEWHITS\"" << std::endl;
1411 for (
int i = 0;
i < numParams;
i++) cov[
i][
i] = 1000.;
1413 std::vector<Alignable*> oneortwo;
1414 oneortwo.push_back(*ali);
1415 if (thisali != *ali) oneortwo.push_back(thisali);
1420 (*ali)->setAlignmentParameters(parnew);
1422 (*ali)->alignmentParameters()->setValid(
true);
1424 if (m_debug)
std::cout << cname<<
" fittime= "<< stop_watch.CpuTime() <<
" sec" << std::endl;
1427 if (writeReport) report << std::endl;
1431 if (writeReport) report.close();
1441 file = fopen( (*fileName).c_str(),
"r");
1443 throw cms::Exception(
"MuonAlignmentFromReference") <<
"file \"" << *
fileName <<
"\" can't be opened (doesn't exist?)" << std::endl;
1445 fread(&size,
sizeof(
int), 1, file);
1448 <<
" fitters, but this job has " <<
m_indexes.size() <<
" fitters (probably corresponds to the wrong alignment job)" << std::endl;
1454 unsigned int index_toread;
1455 fread(&index_toread,
sizeof(
unsigned int), 1, file);
1456 if (*
index != index_toread)
1457 throw cms::Exception(
"MuonAlignmentFromReference") <<
"file \"" << *
fileName <<
"\" has index " << index_toread
1458 <<
" at position " << i <<
", but this job is expecting " << *
index <<
" (probably corresponds to the wrong alignment job)" << std::endl;
1459 fitter->
read(file, i);
1472 fwrite(&size,
sizeof(
int), 1, file);
1478 unsigned int index_towrite = *
index;
1479 fwrite(&index_towrite,
sizeof(
unsigned int), 1, file);
1480 fitter->
write(file, i);
1529 int vars_index[10] = {0,1};
1608 sprintf(cname,
"MB%+d/%d/%02d", chamberId.
wheel(), chamberId.
station(), chamberId.
sector());
1613 sprintf(cname,
"ME%s%d/%d/%02d", (chamberId.
endcap() == 1 ?
"+" :
"-"), chamberId.
station(), chamberId.
ring(), chamberId.
chamber());
1692 std::vector<Alignable*> &all_DT_chambers,
1693 std::vector<Alignable*> &all_CSC_chambers)
1695 std::map<Alignable*,bool> already_seen;
1699 bool parsing_error =
false;
1703 if (!barrel && !endcap) parsing_error =
true;
1705 if (!parsing_error && barrel)
1722 else parsing_error =
true;
1725 bool wheel_digit =
false;
1726 while (!parsing_error &&
numeric(
name->substr(index, 1)))
1733 if (!plus) wheel *= -1;
1734 if (!wheel_digit) parsing_error =
true;
1740 bool station_digit =
false;
1741 while (!parsing_error &&
numeric(
name->substr(index, 1)))
1745 station_digit =
true;
1748 if (!station_digit) parsing_error =
true;
1754 bool sector_digit =
false;
1755 while (!parsing_error &&
numeric(
name->substr(index, 1)))
1759 sector_digit =
true;
1762 if (!sector_digit) parsing_error =
true;
1766 bool no_such_chamber =
false;
1768 if (wheel < -2 || wheel > 2) no_such_chamber =
true;
1769 if (station < 1 || station > 4) no_such_chamber =
true;
1770 if (station == 4 && (sector < 1 || sector > 14)) no_such_chamber =
true;
1771 if (station < 4 && (sector < 1 || sector > 12)) no_such_chamber =
true;
1773 if (no_such_chamber)
1774 throw cms::Exception(
"MuonAlignmentFromReference") <<
"reference chamber doesn't exist: " << (*name) << std::endl;
1777 for (std::vector<Alignable*>::const_iterator ali = all_DT_chambers.begin(); ali != all_DT_chambers.end(); ++ali)
1779 if ((*ali)->geomDetId().rawId() ==
id.rawId())
1781 std::map<Alignable*,bool>::const_iterator trial = already_seen.find(*ali);
1782 if (trial == already_seen.end())
1784 reference.push_back(*ali);
1785 already_seen[*ali] =
true;
1792 if (!parsing_error && endcap)
1809 else parsing_error =
true;
1812 bool station_digit =
false;
1813 while (!parsing_error &&
numeric(
name->substr(index, 1)))
1817 station_digit =
true;
1820 if (!plus) station *= -1;
1821 if (!station_digit) parsing_error =
true;
1827 bool ring_digit =
false;
1828 while (!parsing_error &&
numeric(
name->substr(index, 1)))
1835 if (!ring_digit) parsing_error =
true;
1841 bool chamber_digit =
false;
1842 while (!parsing_error &&
numeric(
name->substr(index, 1)))
1846 chamber_digit =
true;
1849 if (!chamber_digit) parsing_error =
true;
1853 bool no_such_chamber =
false;
1855 int endcap = (station > 0 ? 1 : 2);
1856 station =
abs(station);
1857 if (station < 1 || station > 4) no_such_chamber =
true;
1858 if (station == 1 && (ring < 1 || ring > 4)) no_such_chamber =
true;
1859 if (station > 1 && (ring < 1 || ring > 2)) no_such_chamber =
true;
1860 if (station == 1 && (chamber < 1 || chamber > 36)) no_such_chamber =
true;
1861 if (station > 1 && ring == 1 && (chamber < 1 || chamber > 18)) no_such_chamber =
true;
1862 if (station > 1 && ring == 2 && (chamber < 1 || chamber > 36)) no_such_chamber =
true;
1864 if (no_such_chamber)
1865 throw cms::Exception(
"MuonAlignmentFromReference") <<
"reference chamber doesn't exist: " << (*name) << std::endl;
1868 for (std::vector<Alignable*>::const_iterator ali = all_CSC_chambers.begin(); ali != all_CSC_chambers.end(); ++ali)
1870 if ((*ali)->geomDetId().rawId() ==
id.rawId())
1872 std::map<Alignable*,bool>::const_iterator trial = already_seen.find(*ali);
1873 if (trial == already_seen.end())
1875 reference.push_back(*ali);
1876 already_seen[*ali] =
true;
1884 throw cms::Exception(
"MuonAlignmentFromReference") <<
"reference chamber name is malformed: " << (*name) << std::endl;
void initialize(const edm::EventSetup &iSetup, AlignableTracker *alignableTracker, AlignableMuon *alignableMuon, AlignableExtras *extras, AlignmentParameterStore *alignmentParameterStore) override
Call at beginning of job (must be implemented in derived class)
double p() const
momentum vector magnitude
edm::InputTag m_muonCollectionTag
double m_maxTrackerRedChi2
long m_counter_trackerchi2
long m_counter_trackertidtec
std::vector< double * >::const_iterator residualsPos_end() const
align::Alignables CSCChambers()
virtual AlignmentParameters * cloneFromSelected(const AlgebraicVector &par, const AlgebraicSymMatrix &cov) const =0
void setAlignmentPositionError(const align::Alignables &alivec, double valshift, double valrot)
Set Alignment position error.
long m_counter_station123aligning
int m_minNCrossedChambers
int trackerNumHits() const
void selectResidualsPeaks()
long m_counter_station123dt13hits
std::vector< bool >::const_iterator residualsPos_ok_begin() const
T * make(const Args &...args) const
make new ROOT object
void applyParameters(void)
Obsolete: Use AlignableNavigator::alignableDetFromDetId and alignableFromAlignableDet.
std::string m_reportFileName
Interface/Base class for alignment algorithms, each alignment algorithm has to be derived from this c...
long m_counter_trackmomentum
const ConstTrajTrackPairCollection & trajTrackPairs() const
define event information passed to algorithms
std::string m_residualsModel
AlignmentParameterStore * m_alignmentParameterStore
const std::vector< DetId > chamberIds() const
uint32_t rawId() const
get the raw id
void processMuonResidualsFromTrack(MuonResidualsFromTrack &mrft)
int number(std::string s)
MuonResidualsFitter::MuonAlignmentTreeRow m_tree_row
std::vector< unsigned int > m_indexes
std::string chamberPrettyNameFromId(unsigned int idx)
align::Alignables DTChambers()
double pt() const
track transverse momentum
const reco::Track * getTrack()
AlignableDetOrUnitPtr chamberAlignable() const
void startNewLoop() override
AlignableNavigator * m_alignableNavigator
long m_counter_cscaligning
void eraseNotSelectedResiduals()
Abs< T >::type abs(const T &t)
void write(FILE *file, int which=0)
void parseReference(std::vector< Alignable * > &reference, std::vector< Alignable * > &all_DT_chambers, std::vector< Alignable * > &all_CSC_chambers)
virtual ~MuonAlignmentFromReference()
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
long m_counter_station123valid
std::vector< std::string > m_reference
double pz() const
z coordinate of momentum vector
double normalizedChi2() const
long m_counter_station4hits
TFile & file() const
return opened TFile
void run(const edm::EventSetup &iSetup, const EventInfo &eventInfo) override
Run the algorithm (must be implemented in derived class)
CLHEP::HepVector AlgebraicVector
long m_counter_station123
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
void eraseNotSelectedResiduals()
long m_counter_station123dt2hits
long m_counter_totchambers
void read(FILE *file, int which=0)
std::string m_writeTemporaryFile
std::string m_useResiduals
long m_counter_station4aligning
long m_counter_station4valid
std::map< Alignable *, Alignable * > m_me11map
virtual void terminate()
Called at end of job (must be implemented in derived class)
const reco::BeamSpot & beamSpot() const
CLHEP::HepSymMatrix AlgebraicSymMatrix
std::vector< std::string > m_readTemporaryFiles
bool numeric(std::string s)
MuonAlignmentFromReference(const edm::ParameterSet &cfg)
int charge() const
track electric charge
#define DEFINE_EDM_PLUGIN(factory, type, name)
const Point & position() const
position
eventInfo
add run, event number and lumi section
long m_counter_trackerhits
std::vector< double * >::const_iterator residualsPos_begin() const
int station() const
Return the station number.
void selectPeakResiduals(double nsigma, int nvar, int *vars)
Detector det() const
get the detector field from this detid
int wheel() const
Return the wheel number.
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Constructor of the full muon geometry.
const DetId & geomDetId() const
long m_counter_minchambers
const align::Alignables & alignables(void) const
get all alignables
std::vector< ConstTrajTrackPair > ConstTrajTrackPairCollection
std::map< unsigned int, MuonResidualsTwoBin * > m_fitterOrder
std::vector< Alignable * > m_alignables
bool contains_TIDTEC() const
std::map< Alignable *, MuonResidualsTwoBin * > m_fitters
MuonChamberResidual * chamberResidual(DetId chamberId, int type)