103 using namespace reco;
140 void writeGlPosRcd(CLHEP::HepVector& d3);
141 inline double CLHEP_dot(
const CLHEP::HepVector&
a,
const CLHEP::HepVector&
b)
143 return a(1)*
b(1)+
a(2)*
b(2)+
a(3)*
b(3);
150 void endJob()
override ;
203 std::vector<AlignTransform>::const_iterator
205 std::vector<AlignTransform>::const_iterator
207 std::vector<AlignTransform>::const_iterator
209 std::vector<AlignTransform>::const_iterator
272 :trackTags_(iConfig.getParameter<
edm::
InputTag>(
"tracks")),
273 muonTags_(iConfig.getParameter<
edm::
InputTag>(
"muons")),
274 gmuonTags_(iConfig.getParameter<
edm::
InputTag>(
"gmuons")),
275 smuonTags_(iConfig.getParameter<
edm::
InputTag>(
"smuons")),
276 propagator_(iConfig.getParameter<
string>(
"Propagator")),
278 cosmicMuonMode_(iConfig.getParameter<
bool>(
"cosmics")),
279 isolatedMuonMode_(iConfig.getParameter<
bool>(
"isolated")),
281 refitMuon_(iConfig.getParameter<
bool>(
"refitmuon")),
282 refitTrack_(iConfig.getParameter<
bool>(
"refittrack")),
284 rootOutFile_(iConfig.getUntrackedParameter<
string>(
"rootOutFile")),
285 txtOutFile_(iConfig.getUntrackedParameter<
string>(
"txtOutFile")),
286 writeDB_(iConfig.getUntrackedParameter<
bool>(
"writeDB")),
287 debug_(iConfig.getUntrackedParameter<
bool>(
"debug")),
290 #ifdef NO_FALSE_FALSE_MODE 293 <<
"Use from GlobalTrackerMuonAlignment_test_cfg.py.";
297 throw cms::Exception(
"BadConfig") <<
"Muon collection can be either cosmic or isolated! " 298 <<
"Please set only one to true.";
335 for(
int i=0;
i<=2;
i++){
337 for(
int j=0; j<=2; j++){
341 Grad = CLHEP::HepVector(6,0);
342 Hess = CLHEP::HepSymMatrix(6,0);
344 GradL = CLHEP::HepVector(6,0);
345 HessL = CLHEP::HepSymMatrix(6,0);
348 TDirectory * dirsave = gDirectory;
351 const bool oldAddDir = TH1::AddDirectoryStatus();
353 TH1::AddDirectory(
true);
357 TH1::AddDirectory(oldAddDir);
370 for(
int i=0;
i<=2;
i++)
371 for(
int j=0; j<=2; j++){
373 InfI(
i,j) +=
Inf(
i,j);}
374 bool ierr = !InfI.Invert();
375 if( ierr ) {
if(alarm)
376 std::cout<<
" Error inverse Inf matrix !!!!!!!!!!!"<<std::endl;}
378 for(
int i=0;
i<=2;
i++)
383 CLHEP::HepVector d3 = CLHEP::solve(
Hess, -
Grad);
385 CLHEP::HepMatrix Errd3 =
Hess.inverse(iEr3);
386 if( iEr3 != 0) {
if(alarm)
387 std::cout<<
" endJob Error inverse Hess matrix !!!!!!!!!!!"<<std::endl;
392 CLHEP::HepVector dLI = CLHEP::solve(
HessL, -
GradL);
394 CLHEP::HepMatrix ErrdLI =
HessL.inverse(iErI);
395 if( iErI != 0) {
if(alarm)
396 std::cout<<
" endJob Error inverse HessL matrix !!!!!!!!!!!"<<std::endl;
413 std::cout<<
" dG "<<d3(1)<<
" "<<d3(2)<<
" "<<d3(3)<<
" "<<d3(4)<<
" " 414 <<d3(5)<<
" "<<d3(6)<<std::endl;;
416 <<
" "<<
sqrt(Errd3(4,4))<<
" "<<
sqrt(Errd3(5,5))<<
" "<<
sqrt(Errd3(6,6))
418 std::cout<<
" dL "<<dLI(1)<<
" "<<dLI(2)<<
" "<<dLI(3)<<
" "<<dLI(4)<<
" " 419 <<dLI(5)<<
" "<<dLI(6)<<std::endl;;
421 <<
" "<<
sqrt(ErrdLI(4,4))<<
" "<<
sqrt(ErrdLI(5,5))<<
" "<<
sqrt(ErrdLI(6,6))
425 CLHEP::HepVector vectorToDb(6,0), vectorErrToDb(6,0);
429 for(
unsigned int i=1;
i<=6;
i++) vectorErrToDb(
i) =
sqrt(ErrdLI(
i,
i));
439 OutGlobalTxt<<vectorToDb(1)<<
" "<<vectorToDb(2)<<
" "<<vectorToDb(3)<<
" "<<vectorToDb(4)<<
" " 440 <<vectorToDb(5)<<
" "<<vectorToDb(6)<<
" muon Global.\n";
441 OutGlobalTxt<<vectorErrToDb(1)<<
" "<<vectorErrToDb(1)<<
" "<<vectorErrToDb(1)<<
" " 442 <<vectorErrToDb(1)<<
" "<<vectorErrToDb(1)<<
" "<<vectorErrToDb(1)<<
" errors.\n";
449 std::cout<<
" Write to the file outglobal.txt done "<<std::endl;
462 double PI = 3.1415927;
463 histo =
new TH1F(
"Pt",
"pt",1000,0,100);
464 histo2 =
new TH1F(
"P",
"P [GeV/c]",400,0.,400.);
465 histo2->GetXaxis()->SetTitle(
"momentum [GeV/c]");
466 histo3 =
new TH1F(
"outerLambda",
"#lambda outer",100,-PI/2.,PI/2.);
467 histo3->GetXaxis()->SetTitle(
"#lambda outer");
468 histo4 =
new TH1F(
"phi",
"#phi [rad]",100,-PI,PI);
469 histo4->GetXaxis()->SetTitle(
"#phi [rad]");
470 histo5 =
new TH1F(
"Rmuon",
"inner muon hit R [cm]",100,0.,800.);
471 histo5->GetXaxis()->SetTitle(
"R of muon [cm]");
472 histo6 =
new TH1F(
"Zmuon",
"inner muon hit Z[cm]",100,-1000.,1000.);
473 histo6->GetXaxis()->SetTitle(
"Z of muon [cm]");
474 histo7 =
new TH1F(
"(Pm-Pt)/Pt",
" (Pmuon-Ptrack)/Ptrack", 100,-2.,2.);
475 histo7->GetXaxis()->SetTitle(
"(Pmuon-Ptrack)/Ptrack");
476 histo8 =
new TH1F(
"chi muon-track",
"#chi^{2}(muon-track)", 1000,0.,1000.);
477 histo8->GetXaxis()->SetTitle(
"#chi^{2} of muon w.r.t. propagated track");
478 histo11 =
new TH1F(
"distance muon-track",
"distance muon w.r.t track [cm]",100,0.,30.);
479 histo11->GetXaxis()->SetTitle(
"distance of muon w.r.t. track [cm]");
480 histo12 =
new TH1F(
"Xmuon-Xtrack",
"Xmuon-Xtrack [cm]",200,-20.,20.);
481 histo12->GetXaxis()->SetTitle(
"Xmuon - Xtrack [cm]");
482 histo13 =
new TH1F(
"Ymuon-Ytrack",
"Ymuon-Ytrack [cm]",200,-20.,20.);
483 histo13->GetXaxis()->SetTitle(
"Ymuon - Ytrack [cm]");
484 histo14 =
new TH1F(
"Zmuon-Ztrack",
"Zmuon-Ztrack [cm]",200,-20.,20.);
485 histo14->GetXaxis()->SetTitle(
"Zmuon-Ztrack [cm]");
486 histo15 =
new TH1F(
"NXmuon-NXtrack",
"NXmuon-NXtrack [rad]",200,-.1,.1);
487 histo15->GetXaxis()->SetTitle(
"N_{X}(muon)-N_{X}(track) [rad]");
488 histo16 =
new TH1F(
"NYmuon-NYtrack",
"NYmuon-NYtrack [rad]",200,-.1,.1);
489 histo16->GetXaxis()->SetTitle(
"N_{Y}(muon)-N_{Y}(track) [rad]");
490 histo17 =
new TH1F(
"NZmuon-NZtrack",
"NZmuon-NZtrack [rad]",200,-.1,.1);
491 histo17->GetXaxis()->SetTitle(
"N_{Z}(muon)-N_{Z}(track) [rad]");
492 histo18 =
new TH1F(
"expected error of Xinner",
"outer hit of inner tracker",100,0,.01);
493 histo18->GetXaxis()->SetTitle(
"expected error of Xinner [cm]");
494 histo19 =
new TH1F(
"expected error of Xmuon",
"inner hit of muon",100,0,.1);
495 histo19->GetXaxis()->SetTitle(
"expected error of Xmuon [cm]");
496 histo20 =
new TH1F(
"expected error of Xmuon-Xtrack",
"muon w.r.t. propagated track",100,0.,10.);
497 histo20->GetXaxis()->SetTitle(
"expected error of Xmuon-Xtrack [cm]");
498 histo21 =
new TH1F(
"pull of Xmuon-Xtrack",
"pull of Xmuon-Xtrack",100,-10.,10.);
499 histo21->GetXaxis()->SetTitle(
"(Xmuon-Xtrack)/expected error");
500 histo22 =
new TH1F(
"pull of Ymuon-Ytrack",
"pull of Ymuon-Ytrack",100,-10.,10.);
501 histo22->GetXaxis()->SetTitle(
"(Ymuon-Ytrack)/expected error");
502 histo23 =
new TH1F(
"pull of Zmuon-Ztrack",
"pull of Zmuon-Ztrack",100,-10.,10.);
503 histo23->GetXaxis()->SetTitle(
"(Zmuon-Ztrack)/expected error");
504 histo24 =
new TH1F(
"pull of PXmuon-PXtrack",
"pull of PXmuon-PXtrack",100,-10.,10.);
505 histo24->GetXaxis()->SetTitle(
"(P_{X}(muon)-P_{X}(track))/expected error");
506 histo25 =
new TH1F(
"pull of PYmuon-PYtrack",
"pull of PYmuon-PYtrack",100,-10.,10.);
507 histo25->GetXaxis()->SetTitle(
"(P_{Y}(muon)-P_{Y}(track))/expected error");
508 histo26 =
new TH1F(
"pull of PZmuon-PZtrack",
"pull of PZmuon-PZtrack",100,-10.,10.);
509 histo26->GetXaxis()->SetTitle(
"(P_{Z}(muon)-P_{Z}(track))/expected error");
510 histo27 =
new TH1F(
"N_x",
"Nx of tangent plane",120,-1.1,1.1);
511 histo27->GetXaxis()->SetTitle(
"normal vector projection N_{X}");
512 histo28 =
new TH1F(
"N_y",
"Ny of tangent plane",120,-1.1,1.1);
513 histo28->GetXaxis()->SetTitle(
"normal vector projection N_{Y}");
514 histo29 =
new TH1F(
"lenght of track",
"lenght of track",200,0.,400);
515 histo29->GetXaxis()->SetTitle(
"lenght of track [cm]");
516 histo30 =
new TH1F(
"lenght of muon",
"lenght of muon",200,0.,800);
517 histo30->GetXaxis()->SetTitle(
"lenght of muon [cm]");
519 histo31 =
new TH1F(
"local chi muon-track",
"#local chi^{2}(muon-track)", 1000,0.,1000.);
520 histo31->GetXaxis()->SetTitle(
"#local chi^{2} of muon w.r.t. propagated track");
521 histo32 =
new TH1F(
"pull of Px/Pz local",
"pull of Px/Pz local",100,-10.,10.);
522 histo32->GetXaxis()->SetTitle(
"local (Px/Pz(muon) - Px/Pz(track))/expected error");
523 histo33 =
new TH1F(
"pull of Py/Pz local",
"pull of Py/Pz local",100,-10.,10.);
524 histo33->GetXaxis()->SetTitle(
"local (Py/Pz(muon) - Py/Pz(track))/expected error");
525 histo34 =
new TH1F(
"pull of X local",
"pull of X local",100,-10.,10.);
526 histo34->GetXaxis()->SetTitle(
"local (Xmuon - Xtrack)/expected error");
527 histo35 =
new TH1F(
"pull of Y local",
"pull of Y local",100,-10.,10.);
528 histo35->GetXaxis()->SetTitle(
"local (Ymuon - Ytrack)/expected error");
530 histo101 =
new TH2F(
"Rtr/mu vs Ztr/mu",
"hit of track/muon",100,-800.,800.,100,0.,600.);
531 histo101->GetXaxis()->SetTitle(
"Z of track/muon [cm]");
532 histo101->GetYaxis()->SetTitle(
"R of track/muon [cm]");
533 histo102 =
new TH2F(
"Ytr/mu vs Xtr/mu",
"hit of track/muon",100,-600.,600.,100,-600.,600.);
534 histo102->GetXaxis()->SetTitle(
"X of track/muon [cm]");
535 histo102->GetYaxis()->SetTitle(
"Y of track/muon [cm]");
568 using namespace reco;
573 double PI = 3.1415927;
595 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"TrackerOnly", tracks);
596 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"StandAlone", muons);
597 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"GlobalMuon", gmuons);
598 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"SelectedMuons", smuons);
601 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"TrackerOnly", tracks);
602 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"StandAlone", muons);
603 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"GlobalMuon", gmuons);
604 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"SelectedMuons", smuons);
615 <<
" runN " << (
int)iEvent.
run() <<std::endl;
616 std::cout <<
" N tracks s/amu gmu selmu "<<tracks->size() <<
" " <<muons->size()
617 <<
" "<<gmuons->size() <<
" " << smuons->size() << std::endl;
618 for (MuonCollection::const_iterator itMuon = smuons->begin();
619 itMuon != smuons->end();
621 std::cout <<
" is isolatValid Matches " << itMuon->isIsolationValid()
622 <<
" " <<itMuon->isMatchesValid() << std::endl;
627 if (tracks->size() != 1)
return;
628 if (muons->size() != 1)
return;
629 if (gmuons->size() != 1)
return;
630 if (smuons->size() != 1)
return;
634 if (smuons->size() > 2)
return;
635 if (tracks->size() != smuons->size())
return;
636 if (muons->size() != smuons->size())
return;
637 if (gmuons->size() != smuons->size())
return;
666 for (std::vector<AlignTransform>::const_iterator
i 677 <<
" angles " <<
iteratorMuonRcd->rotation().eulerAngles() << std::endl;
702 for(MuonCollection::const_iterator itMuon = smuons->begin();
703 itMuon != smuons->end(); ++itMuon) {
706 std::cout<<
" mu gM is GM Mu SaM tM "<<itMuon->isGlobalMuon()<<
" " 707 <<itMuon->isMuon()<<
" "<<itMuon->isStandAloneMuon()
708 <<
" "<<itMuon->isTrackerMuon()<<
" " 723 GlobalPoint pointTrackOut = outerTrackTSOS.globalPosition();
724 float lenghtTrack = (pointTrackOut-pointTrackIn).
mag();
725 GlobalPoint pointMuonIn = innerMuTSOS.globalPosition();
727 float lenghtMuon = (pointMuonOut - pointMuonIn).
mag();
728 GlobalVector momentumTrackOut = outerTrackTSOS.globalMomentum();
730 float distanceInIn = (pointTrackIn - pointMuonIn).
mag();
731 float distanceInOut = (pointTrackIn - pointMuonOut).
mag();
732 float distanceOutIn = (pointTrackOut - pointMuonIn).
mag();
733 float distanceOutOut = (pointTrackOut - pointMuonOut).
mag();
736 std::cout<<
" pointTrackIn "<<pointTrackIn<<std::endl;
737 std::cout<<
" Out "<<pointTrackOut<<
" lenght "<<lenghtTrack<<std::endl;
738 std::cout<<
" point MuonIn "<<pointMuonIn<<std::endl;
739 std::cout<<
" Out "<<pointMuonOut<<
" lenght "<<lenghtMuon<<std::endl;
740 std::cout<<
" momeTrackIn Out "<<momentumTrackIn<<
" "<<momentumTrackOut<<std::endl;
741 std::cout<<
" doi io ii oo "<<distanceOutIn<<
" "<<distanceInOut<<
" " 742 <<distanceInIn<<
" "<<distanceOutOut<<std::endl;
745 if(lenghtTrack < 90.)
continue;
746 if(lenghtMuon < 300.)
continue;
747 if(momentumTrackIn.
mag() < 15. || momentumTrackOut.
mag() < 15.)
continue;
748 if(trackTT.charge() != muTT.charge())
continue;
751 std::cout<<
" passed lenght momentum cuts"<<std::endl;
760 const Surface& refSurface = innerMuTSOS.surface();
762 tpMuLocal(refSurface.
tangentPlane(innerMuTSOS.localPosition()));
763 Nl = tpMuLocal->normalVector();
765 tpMuGlobal(refSurface.
tangentPlane(innerMuTSOS.globalPosition()));
768 const Plane* refPlane =
dynamic_cast<Plane*
>(surf);
772 std::cout<<
" Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 773 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
774 std::cout<<
" global "<<Ng.
x()<<
" "<<Ng.
y()<<
" "<<Ng.
z()<<std::endl;
775 std::cout<<
" lp "<<Nlp.
x()<<
" "<<Nlp.
y()<<
" "<<Nlp.
z()<<std::endl;
782 extrapolationT = alongSmPr.
propagate(outerTrackTSOS, refSurface);
787 std::cout<<
" !!!!!!!!! Catastrophe Out-In extrapolationT.isValid " 800 (innerMuTSOS.globalPosition()).
y(),
801 (innerMuTSOS.globalPosition()).
z());
802 GPm = innerMuTSOS.globalMomentum();
804 (outerTrackTSOS.globalPosition()).
y(),
805 (outerTrackTSOS.globalPosition()).
z());
807 innerMuTSOS.cartesianError().matrix());
817 if((distanceOutIn <= distanceInOut) & (distanceOutIn <= distanceInIn) &
818 (distanceOutIn <= distanceOutOut)){
821 const Surface& refSurface = innerMuTSOS.surface();
823 tpMuGlobal(refSurface.
tangentPlane(innerMuTSOS.globalPosition()));
824 Nl = tpMuGlobal->normalVector();
827 extrapolationT = alongSmPr.
propagate(outerTrackTSOS, refSurface);
832 std::cout<<
" !!!!!!!!! Catastrophe Out-In extrapolationT.isValid " 848 (innerMuTSOS.globalPosition()).
y(),
849 (innerMuTSOS.globalPosition()).
z());
850 GPm = innerMuTSOS.globalMomentum();
852 (outerTrackTSOS.globalPosition()).
y(),
853 (outerTrackTSOS.globalPosition()).
z());
855 innerMuTSOS.cartesianError().matrix());
864 <<Chooser.operator()(*outerTrackTSOS.freeState(), refSurface)
866 Chooser.operator()(*outerTrackTSOS.freeState(), refSurface))
868 std::cout<<
" --- Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 869 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
874 else if((distanceInOut <= distanceInIn) & (distanceInOut <= distanceOutIn) &
875 (distanceInOut <= distanceOutOut)){
881 Nl = tpMuGlobal->normalVector();
884 extrapolationT = oppositeSmPr.
propagate(innerTrackTSOS, refSurface);
888 std::cout<<
" !!!!!!!!! Catastrophe Out-In extrapolationT.isValid " 889 <<
"\a\a\a\a\a\a\a\a"<<extrapolationT.
isValid()
920 <<Chooser.operator()(*innerTrackTSOS.
freeState(), refSurface)
922 Chooser.operator()(*innerTrackTSOS.
freeState(), refSurface))
924 std::cout<<
" --- Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 925 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
929 else if((distanceOutOut <= distanceInOut) & (distanceOutOut <= distanceInIn) &
930 (distanceOutOut <= distanceOutIn)){
939 Nl = tpMuGlobal->normalVector();
942 extrapolationT = alongSmPr.
propagate(outerTrackTSOS, refSurface);
946 std::cout<<
" !!!!!!!!! Catastrophe Out-Out extrapolationT.isValid " 947 <<
"\a\a\a\a\a\a\a\a"<<extrapolationT.
isValid()
966 (outerTrackTSOS.globalPosition()).
y(),
967 (outerTrackTSOS.globalPosition()).
z());
977 <<Chooser.operator()(*outerTrackTSOS.freeState(), refSurface)
979 Chooser.operator()(*outerTrackTSOS.freeState(), refSurface))
981 std::cout<<
" --- Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 982 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
983 std::cout<<
" Nornal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 984 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
989 std::cout<<
" ------- !!!!!!!!!!!!!!! No proper Out - In \a\a\a\a\a\a\a"<<std::endl;
995 if(tsosMuonIf == 0) {
if(info) {
std::cout<<
"No tsosMuon !!!!!!"<<std::endl;
continue;}}
997 if(tsosMuonIf == 1) tsosMuon = muTT.innermostMeasurementState();
998 else tsosMuon = muTT.outermostMeasurementState();
1003 (GRm, GPm, Nl, Rt, Rm, Pm, LPRm, extrapolationT, tsosMuon);
1008 float RelMomResidual = (Pm.
mag() - Pt.mag()) / (Pt.mag() + 1.e-6);;
1011 Vm(0) = resR.
x(); Vm(1) = resR.
y(); Vm(2) = resR.
z();
1012 Vm(3) = resP0.
x(); Vm(4) = resP0.
y(); Vm(5) = resP0.
z();
1013 float Rmuon = Rm.
perp();
1014 float Zmuon = Rm.
z();
1015 float alfa_x = atan2(Nl.
x(),Nl.
y())*57.29578;
1018 std::cout<<
" Nx Ny Nz alfa_x "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" "<<alfa_x<<std::endl;
1024 for(
int i=0;
i<=5;
i++) chi_d += Vm(
i)*Vm(
i)/Cm(
i,
i);
1030 bool ierrLoc = !
m.Invert();
1031 if (ierrLoc &&
debug_ && info) {
1032 std::cout<<
" ==== Error inverting Local covariance matrix ==== "<<std::endl;
1034 double chi_Loc = ROOT::Math::Similarity(Vml,
m);
1036 std::cout<<
" chi_Loc px/pz/err "<<chi_Loc<<
" "<<Vml(1)/
sqrt(Cml(1,1))<<std::endl;
1038 if(Pt.mag() < 15.)
continue;
1039 if(Pm.
mag() < 5.)
continue;
1083 if(Rmuon < 120. || Rmuon > 450.)
continue;
1084 if(Zmuon < -720. || Zmuon > 720.)
continue;
1089 std::cout<<
" .............. passed all cuts"<<std::endl;
1097 CLHEP::HepSymMatrix covLoc(4,0);
1098 for(
int i=1;
i<=4;
i++)
1099 for(
int j=1; j<=
i; j++){
1106 CLHEP::HepMatrix rotLoc (3,3,0);
1119 CLHEP::HepVector posLoc(3);
1128 std::cout<<
" posLoc "<<posLoc.T()<<std::endl;
1129 std::cout<<
" rotLoc "<<rotLoc<<std::endl;
1133 histo->Fill(itMuon->track()->pt());
1137 histo3->Fill((PI/2.-itMuon->track()->outerTheta()));
1138 histo4->Fill(itMuon->track()->phi());
1141 histo7->Fill(RelMomResidual);
1151 if(fabs(Nl.
x()) < 0.98)
histo12->Fill(resR.
x());
1152 if(fabs(Nl.
y()) < 0.98)
histo13->Fill(resR.
y());
1153 if(fabs(Nl.
z()) < 0.98)
histo14->Fill(resR.
z());
1158 if((fabs(Nl.
x()) < 0.98) && (fabs(Nl.
y()) < 0.98) &&(fabs(Nl.
z()) < 0.98))
1164 if(fabs(Nl.
x()) < 0.98)
histo21->Fill(Vm(0)/
sqrt(Cm(0,0)));
1165 if(fabs(Nl.
y()) < 0.98)
histo22->Fill(Vm(1)/
sqrt(Cm(1,1)));
1166 if(fabs(Nl.
z()) < 0.98)
histo23->Fill(Vm(2)/
sqrt(Cm(2,2)));
1182 std::cout<<
" diag 0[ "<<C0(0,0)<<
" "<<C0(1,1)<<
" "<<C0(2,2)<<
" "<<C0(3,3)<<
" " 1183 <<C0(4,4)<<
" "<<C0(5,5)<<
" ]"<<std::endl;
1184 std::cout<<
" diag e[ "<<Ce(0,0)<<
" "<<Ce(1,1)<<
" "<<Ce(2,2)<<
" "<<Ce(3,3)<<
" " 1185 <<Ce(4,4)<<
" "<<Ce(5,5)<<
" ]"<<std::endl;
1186 std::cout<<
" diag 1[ "<<C1(0,0)<<
" "<<C1(1,1)<<
" "<<C1(2,2)<<
" "<<C1(3,3)<<
" " 1187 <<C1(4,4)<<
" "<<C1(5,5)<<
" ]"<<std::endl;
1189 <<
" Pm "<<Pm.
x()<<
" "<<Pm.
y()<<
" "<<Pm.
z()<<std::endl;
1190 std::cout<<
" Rt "<<Rt.x()<<
" "<<Rt.y()<<
" "<<Rt.z()
1191 <<
" Pt "<<Pt.x()<<
" "<<Pt.y()<<
" "<<Pt.z()<<std::endl;
1193 std::cout<<
" resR "<<resR.
x()<<
" "<<resR.
y()<<
" "<<resR.
z()
1194 <<
" resP "<<resP.
x()<<
" "<<resP.
y()<<
" "<<resP.
z()<<std::endl;
1195 std::cout<<
" Rm-t "<<(Rm-Rt).
x()<<
" "<<(Rm-Rt).
y()<<
" "<<(Rm-Rt).
z()
1196 <<
" Pm-t "<<(Pm-
Pt).
x()<<
" "<<(Pm-
Pt).
y()<<
" "<<(Pm-
Pt).
z()<<std::endl;
1199 <<
sqrt(Cm(3,3))<<
" "<<
sqrt(Cm(4,4))<<
" "<<
sqrt(Cm(5,5))<<std::endl;
1200 std::cout<<
" Pmuon Ptrack dP/Ptrack "<<itMuon->outerTrack()->p()<<
" " 1201 <<itMuon->track()->outerP()<<
" " 1202 <<(itMuon->outerTrack()->p() -
1203 itMuon->track()->outerP())/itMuon->track()->outerP()<<std::endl;
1206 std::cout<<
" diag [ "<<Cm(0,0)<<
" "<<Cm(1,1)<<
" "<<Cm(2,2)<<
" "<<Cm(3,3)<<
" " 1207 <<Cm(4,4)<<
" "<<Cm(5,5)<<
" ]"<<std::endl;
1211 for(
int i=0;
i<=5;
i++) Diag[
i] =
sqrt(Cm(
i,
i));
1212 for(
int i=0;
i<=5;
i++)
1213 for(
int j=0; j<=5; j++)
1214 Ro(
i,j) = Cm(
i,j)/Diag[
i]/Diag[j];
1215 std::cout<<
" correlation matrix "<<std::endl;
1219 for(
int i=0;
i<=5;
i++)
1220 for(
int j=0; j<=5; j++)
1223 bool ierr = !CmI.Invert();
1224 if( ierr ) {
if(alarm ||
debug_)
1225 std::cout<<
" Error inverse covariance matrix !!!!!!!!!!!"<<std::endl;
1228 std::cout<<
" inverse cov matrix "<<std::endl;
1231 double chi = ROOT::Math::Similarity(Vm, CmI);
1232 std::cout<<
" chi chi_d "<<chi<<
" "<<chi_d<<std::endl;
1244 using namespace edm;
1245 using namespace reco;
1250 double PI = 3.1415927;
1272 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"TrackerOnly", tracks);
1273 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"StandAlone", muons);
1274 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"GlobalMuon", gmuons);
1275 iEvent.
getByLabel(
"ALCARECOMuAlCalIsolatedMu",
"SelectedMuons", smuons);
1278 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"TrackerOnly", tracks);
1279 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"StandAlone", muons);
1280 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"GlobalMuon", gmuons);
1281 iEvent.
getByLabel(
"ALCARECOMuAlGlobalCosmics",
"SelectedMuons", smuons);
1292 <<
" runN " << (
int)iEvent.
run() <<std::endl;
1293 std::cout <<
" N tracks s/amu gmu selmu "<<tracks->size() <<
" " <<muons->size()
1294 <<
" "<<gmuons->size() <<
" " << smuons->size() << std::endl;
1295 for (MuonCollection::const_iterator itMuon = smuons->begin();
1296 itMuon != smuons->end();
1298 std::cout <<
" is isolatValid Matches " << itMuon->isIsolationValid()
1299 <<
" " <<itMuon->isMatchesValid() << std::endl;
1304 if (tracks->size() != 1)
return;
1305 if (muons->size() != 1)
return;
1306 if (gmuons->size() != 1)
return;
1307 if (smuons->size() != 1)
return;
1311 if (smuons->size() > 2)
return;
1312 if (tracks->size() != smuons->size())
return;
1313 if (muons->size() != smuons->size())
return;
1314 if (gmuons->size() != smuons->size())
return;
1344 for (std::vector<AlignTransform>::const_iterator
i 1359 <<
" angles " <<
iteratorMuonRcd->rotation().eulerAngles() << std::endl;
1384 std::cout<<
" ............... DEFINE FITTER ..................."<<std::endl;
1388 theFitter =
new KFTrajectoryFitter(alongSmPr,
1394 theFitterOp =
new KFTrajectoryFitter(oppositeSmPr,
1407 std::cout<<
"get also the MuonTransientTrackingRecHitBuilder" <<
"\n";
1408 std::cout<<
"get also the TransientTrackingRecHitBuilder" <<
"\n";
1415 for(MuonCollection::const_iterator itMuon = smuons->begin();
1416 itMuon != smuons->end(); ++itMuon) {
1419 std::cout<<
" mu gM is GM Mu SaM tM "<<itMuon->isGlobalMuon()<<
" " 1420 <<itMuon->isMuon()<<
" "<<itMuon->isStandAloneMuon()
1421 <<
" "<<itMuon->isTrackerMuon()<<
" " 1436 GlobalPoint pointTrackOut = outerTrackTSOS.globalPosition();
1437 float lenghtTrack = (pointTrackOut-pointTrackIn).
mag();
1438 GlobalPoint pointMuonIn = innerMuTSOS.globalPosition();
1440 float lenghtMuon = (pointMuonOut - pointMuonIn).
mag();
1441 GlobalVector momentumTrackOut = outerTrackTSOS.globalMomentum();
1443 float distanceInIn = (pointTrackIn - pointMuonIn).
mag();
1444 float distanceInOut = (pointTrackIn - pointMuonOut).
mag();
1445 float distanceOutIn = (pointTrackOut - pointMuonIn).
mag();
1446 float distanceOutOut = (pointTrackOut - pointMuonOut).
mag();
1449 std::cout<<
" pointTrackIn "<<pointTrackIn<<std::endl;
1450 std::cout<<
" Out "<<pointTrackOut<<
" lenght "<<lenghtTrack<<std::endl;
1451 std::cout<<
" point MuonIn "<<pointMuonIn<<std::endl;
1452 std::cout<<
" Out "<<pointMuonOut<<
" lenght "<<lenghtMuon<<std::endl;
1453 std::cout<<
" momeTrackIn Out "<<momentumTrackIn<<
" "<<momentumTrackOut<<std::endl;
1454 std::cout<<
" doi io ii oo "<<distanceOutIn<<
" "<<distanceInOut<<
" " 1455 <<distanceInIn<<
" "<<distanceOutOut<<std::endl;
1458 if(lenghtTrack < 90.)
continue;
1459 if(lenghtMuon < 300.)
continue;
1460 if(innerMuTSOS.globalMomentum().mag() < 5. || outerMuTSOS.
globalMomentum().
mag() < 5.)
continue;
1461 if(momentumTrackIn.
mag() < 15. || momentumTrackOut.
mag() < 15.)
continue;
1462 if(trackTT.charge() != muTT.charge())
continue;
1465 std::cout<<
" passed lenght momentum cuts"<<std::endl;
1479 const Surface& refSurface = innerMuTSOS.surface();
1481 tpMuLocal(refSurface.
tangentPlane(innerMuTSOS.localPosition()));
1482 Nl = tpMuLocal->normalVector();
1484 tpMuGlobal(refSurface.
tangentPlane(innerMuTSOS.globalPosition()));
1487 const Plane* refPlane =
dynamic_cast<Plane*
>(surf);
1491 std::cout<<
" Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 1492 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
1493 std::cout<<
" global "<<Ng.
x()<<
" "<<Ng.
y()<<
" "<<Ng.
z()<<std::endl;
1494 std::cout<<
" lp "<<Nlp.
x()<<
" "<<Nlp.
y()<<
" "<<Nlp.
z()<<std::endl;
1504 extrapolationT = alongSmPr.
propagate(outerTrackTSOS, refSurface);
1509 extrapolationT = alongSmPr.
propagate(trackFittedTSOS, refSurface);
1512 if(!extrapolationT.
isValid()){
1514 std::cout<<
" !!!!!!!!! Catastrophe Out-In extrapolationT.isValid " 1527 (innerMuTSOS.globalPosition()).
y(),
1528 (innerMuTSOS.globalPosition()).
z());
1529 GPm = innerMuTSOS.globalMomentum();
1532 (outerTrackTSOS.globalPosition()).
y(),
1533 (outerTrackTSOS.globalPosition()).
z());
1535 innerMuTSOS.cartesianError().matrix());
1548 if((distanceOutIn <= distanceInOut) & (distanceOutIn <= distanceInIn) &
1549 (distanceOutIn <= distanceOutOut)){
1552 const Surface& refSurface = innerMuTSOS.surface();
1554 tpMuGlobal(refSurface.
tangentPlane(innerMuTSOS.globalPosition()));
1555 Nl = tpMuGlobal->normalVector();
1560 extrapolationT = alongSmPr.
propagate(outerTrackTSOS, refSurface);
1565 extrapolationT = alongSmPr.
propagate(trackFittedTSOS, refSurface);
1568 if(!extrapolationT.
isValid()){
1570 std::cout<<
" !!!!!!!!! Catastrophe Out-In extrapolationT.isValid " 1576 std::cout<<
" extrapolationT.isValid "<<extrapolationT.
isValid()<<std::endl;
1586 (innerMuTSOS.globalPosition()).
y(),
1587 (innerMuTSOS.globalPosition()).
z());
1588 GPm = innerMuTSOS.globalMomentum();
1590 (outerTrackTSOS.globalPosition()).
y(),
1591 (outerTrackTSOS.globalPosition()).
z());
1593 innerMuTSOS.cartesianError().matrix());
1605 <<Chooser.operator()(*outerTrackTSOS.freeState(), refSurface)
1607 Chooser.operator()(*outerTrackTSOS.freeState(), refSurface))
1609 std::cout<<
" --- Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 1610 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
1615 else if((distanceInOut <= distanceInIn) & (distanceInOut <= distanceOutIn) &
1616 (distanceInOut <= distanceOutOut)){
1622 Nl = tpMuGlobal->normalVector();
1627 extrapolationT = oppositeSmPr.
propagate(innerTrackTSOS, refSurface);
1632 extrapolationT = oppositeSmPr.
propagate(trackFittedTSOS, refSurface);
1635 if(!extrapolationT.
isValid()){
1637 std::cout<<
" !!!!!!!!! Catastrophe Out-In extrapolationT.isValid " 1638 <<
"\a\a\a\a\a\a\a\a"<<extrapolationT.
isValid()
1643 std::cout<<
" extrapolationT.isValid "<<extrapolationT.
isValid()<<std::endl;
1672 <<Chooser.operator()(*innerTrackTSOS.
freeState(), refSurface)
1674 Chooser.operator()(*innerTrackTSOS.
freeState(), refSurface))
1676 std::cout<<
" --- Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 1677 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
1681 else if((distanceOutOut <= distanceInOut) & (distanceOutOut <= distanceInIn) &
1682 (distanceOutOut <= distanceOutIn)){
1691 Nl = tpMuGlobal->normalVector();
1694 extrapolationT = alongSmPr.
propagate(outerTrackTSOS, refSurface);
1696 if(!extrapolationT.
isValid()){
1698 std::cout<<
" !!!!!!!!! Catastrophe Out-Out extrapolationT.isValid " 1699 <<
"\a\a\a\a\a\a\a\a"<<extrapolationT.
isValid()
1704 std::cout<<
" extrapolationT.isValid "<<extrapolationT.
isValid()<<std::endl;
1718 (outerTrackTSOS.globalPosition()).
y(),
1719 (outerTrackTSOS.globalPosition()).
z());
1729 <<Chooser.operator()(*outerTrackTSOS.freeState(), refSurface)
1731 Chooser.operator()(*outerTrackTSOS.freeState(), refSurface))
1733 std::cout<<
" --- Nlocal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 1734 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
1735 std::cout<<
" Nornal "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" " 1736 <<
" alfa "<<
int(asin(Nl.
x())*57.29578)<<std::endl;
1741 std::cout<<
" ------- !!!!!!!!!!!!!!! No proper Out - In \a\a\a\a\a\a\a"<<std::endl;
1747 if(tsosMuonIf == 0) {
if(info) {
std::cout<<
"No tsosMuon !!!!!!"<<std::endl;
continue;}}
1749 if(tsosMuonIf == 1) tsosMuon = muTT.innermostMeasurementState();
1750 else tsosMuon = muTT.outermostMeasurementState();
1755 (GRm, GPm, Nl, Rt, Rm, Pm, LPRm, extrapolationT, tsosMuon);
1758 if(!trackFittedTSOS.
isValid()){
1759 if(info)
std::cout<<
" ================= trackFittedTSOS notValid !!!!!!!! "<<std::endl;
1765 if(!muonFittedTSOS.
isValid()){
1766 if(info)
std::cout<<
" ================= muonFittedTSOS notValid !!!!!!!! "<<std::endl;
1781 float RelMomResidual = (Pm.
mag() - Pt.mag()) / (Pt.mag() + 1.e-6);;
1784 Vm(0) = resR.
x(); Vm(1) = resR.
y(); Vm(2) = resR.
z();
1785 Vm(3) = resP0.
x(); Vm(4) = resP0.
y(); Vm(5) = resP0.
z();
1786 float Rmuon = Rm.
perp();
1787 float Zmuon = Rm.
z();
1788 float alfa_x = atan2(Nl.
x(),Nl.
y())*57.29578;
1791 std::cout<<
" Nx Ny Nz alfa_x "<<Nl.
x()<<
" "<<Nl.
y()<<
" "<<Nl.
z()<<
" "<<alfa_x<<std::endl;
1797 for(
int i=0;
i<=5;
i++) chi_d += Vm(
i)*Vm(
i)/Cm(
i,
i);
1803 bool ierrLoc = !
m.Invert();
1804 if (ierrLoc &&
debug_ && info) {
1805 std::cout<<
" ==== Error inverting Local covariance matrix ==== "<<std::endl;
1807 double chi_Loc = ROOT::Math::Similarity(Vml,
m);
1809 std::cout<<
" chi_Loc px/pz/err "<<chi_Loc<<
" "<<Vml(1)/
sqrt(Cml(1,1))<<std::endl;
1811 if(Pt.mag() < 15.)
continue;
1812 if(Pm.
mag() < 5.)
continue;
1827 if(fabs(resR.
x()) > 20.)
continue;
1828 if(fabs(resR.
y()) > 20.)
continue;
1829 if(fabs(resR.
z()) > 20.)
continue;
1830 if(fabs(resR.
mag()) > 30.)
continue;
1831 if(fabs(resP.
x()) > 0.06)
continue;
1832 if(fabs(resP.
y()) > 0.06)
continue;
1833 if(fabs(resP.
z()) > 0.06)
continue;
1834 if(chi_d > 40.)
continue;
1854 if(Rmuon < 120. || Rmuon > 450.)
continue;
1855 if(Zmuon < -720. || Zmuon > 720.)
continue;
1859 std::cout<<
" .............. passed all cuts"<<std::endl;
1867 CLHEP::HepSymMatrix covLoc(4,0);
1868 for(
int i=1;
i<=4;
i++)
1869 for(
int j=1; j<=
i; j++){
1876 CLHEP::HepMatrix rotLoc (3,3,0);
1889 CLHEP::HepVector posLoc(3);
1898 std::cout<<
" posLoc "<<posLoc.T()<<std::endl;
1899 std::cout<<
" rotLoc "<<rotLoc<<std::endl;
1903 histo->Fill(itMuon->track()->pt());
1907 histo3->Fill((PI/2.-itMuon->track()->outerTheta()));
1908 histo4->Fill(itMuon->track()->phi());
1911 histo7->Fill(RelMomResidual);
1921 if(fabs(Nl.
x()) < 0.98)
histo12->Fill(resR.
x());
1922 if(fabs(Nl.
y()) < 0.98)
histo13->Fill(resR.
y());
1923 if(fabs(Nl.
z()) < 0.98)
histo14->Fill(resR.
z());
1928 if((fabs(Nl.
x()) < 0.98) && (fabs(Nl.
y()) < 0.98) &&(fabs(Nl.
z()) < 0.98))
1934 if(fabs(Nl.
x()) < 0.98)
histo21->Fill(Vm(0)/
sqrt(Cm(0,0)));
1935 if(fabs(Nl.
y()) < 0.98)
histo22->Fill(Vm(1)/
sqrt(Cm(1,1)));
1936 if(fabs(Nl.
z()) < 0.98)
histo23->Fill(Vm(2)/
sqrt(Cm(2,2)));
1952 std::cout<<
" diag 0[ "<<C0(0,0)<<
" "<<C0(1,1)<<
" "<<C0(2,2)<<
" "<<C0(3,3)<<
" " 1953 <<C0(4,4)<<
" "<<C0(5,5)<<
" ]"<<std::endl;
1954 std::cout<<
" diag e[ "<<Ce(0,0)<<
" "<<Ce(1,1)<<
" "<<Ce(2,2)<<
" "<<Ce(3,3)<<
" " 1955 <<Ce(4,4)<<
" "<<Ce(5,5)<<
" ]"<<std::endl;
1956 std::cout<<
" diag 1[ "<<C1(0,0)<<
" "<<C1(1,1)<<
" "<<C1(2,2)<<
" "<<C1(3,3)<<
" " 1957 <<C1(4,4)<<
" "<<C1(5,5)<<
" ]"<<std::endl;
1959 <<
" Pm "<<Pm.
x()<<
" "<<Pm.
y()<<
" "<<Pm.
z()<<std::endl;
1960 std::cout<<
" Rt "<<Rt.x()<<
" "<<Rt.y()<<
" "<<Rt.z()
1961 <<
" Pt "<<Pt.x()<<
" "<<Pt.y()<<
" "<<Pt.z()<<std::endl;
1963 std::cout<<
" resR "<<resR.
x()<<
" "<<resR.
y()<<
" "<<resR.
z()
1964 <<
" resP "<<resP.
x()<<
" "<<resP.
y()<<
" "<<resP.
z()<<std::endl;
1965 std::cout<<
" Rm-t "<<(Rm-Rt).
x()<<
" "<<(Rm-Rt).
y()<<
" "<<(Rm-Rt).
z()
1966 <<
" Pm-t "<<(Pm-
Pt).
x()<<
" "<<(Pm-
Pt).
y()<<
" "<<(Pm-
Pt).
z()<<std::endl;
1969 <<
sqrt(Cm(3,3))<<
" "<<
sqrt(Cm(4,4))<<
" "<<
sqrt(Cm(5,5))<<std::endl;
1970 std::cout<<
" Pmuon Ptrack dP/Ptrack "<<itMuon->outerTrack()->p()<<
" " 1971 <<itMuon->track()->outerP()<<
" " 1972 <<(itMuon->outerTrack()->p() -
1973 itMuon->track()->outerP())/itMuon->track()->outerP()<<std::endl;
1976 std::cout<<
" diag [ "<<Cm(0,0)<<
" "<<Cm(1,1)<<
" "<<Cm(2,2)<<
" "<<Cm(3,3)<<
" " 1977 <<Cm(4,4)<<
" "<<Cm(5,5)<<
" ]"<<std::endl;
1981 for(
int i=0;
i<=5;
i++) Diag[
i] =
sqrt(Cm(
i,
i));
1982 for(
int i=0;
i<=5;
i++)
1983 for(
int j=0; j<=5; j++)
1984 Ro(
i,j) = Cm(
i,j)/Diag[
i]/Diag[j];
1985 std::cout<<
" correlation matrix "<<std::endl;
1989 for(
int i=0;
i<=5;
i++)
1990 for(
int j=0; j<=5; j++)
1993 bool ierr = !CmI.Invert();
1994 if( ierr ) {
if(alarm ||
debug_)
1995 std::cout<<
" Error inverse covariance matrix !!!!!!!!!!!"<<std::endl;
1998 std::cout<<
" inverse cov matrix "<<std::endl;
2001 double chi = ROOT::Math::Similarity(Vm, CmI);
2002 std::cout<<
" chi chi_d "<<chi<<
" "<<chi_d<<std::endl;
2022 R_m(0) = Rm.
x(); R_m(1) = Rm.
y(); R_m(2) = Rm.
z();
2023 R_t(0) = Rt.
x(); R_t(1) = Rt.
y(); R_t(2) = Rt.
z();
2024 P_t(0) = Pt.
x(); P_t(1) = Pt.
y(); P_t(2) = Pt.
z();
2025 Norm(0) = Nl.
x(); Norm(1) = Nl.
y(); Norm(2) = Nl.
z();
2027 for(
int i=0;
i<=2;
i++){
2028 if(Cm(
i,
i) > 1.
e-20)
2030 else Wi(
i) = 1.e-10;
2031 dR(
i) = R_m(
i) - R_t(
i);
2034 float PtN = P_t(0)*Norm(0) + P_t(1)*Norm(1) + P_t(2)*Norm(2);
2036 Jac(0,0) = 1. - P_t(0)*Norm(0)/PtN;
2037 Jac(0,1) = - P_t(0)*Norm(1)/PtN;
2038 Jac(0,2) = - P_t(0)*Norm(2)/PtN;
2040 Jac(1,0) = - P_t(1)*Norm(0)/PtN;
2041 Jac(1,1) = 1. - P_t(1)*Norm(1)/PtN;
2042 Jac(1,2) = - P_t(1)*Norm(2)/PtN;
2044 Jac(2,0) = - P_t(2)*Norm(0)/PtN;
2045 Jac(2,1) = - P_t(2)*Norm(1)/PtN;
2046 Jac(2,2) = 1. - P_t(2)*Norm(2)/PtN;
2050 for(
int i=0;
i<=2;
i++)
2051 for(
int j=0; j<=2; j++){
2055 for(
int k=0;
k<=2;
k++){
2056 Itr(
i,j) += Jac(
k,
i)*Wi(
k)*Jac(
k,j);}}
2058 for(
int i=0;
i<=2;
i++)
2059 for(
int j=0; j<=2; j++){
2064 for(
int i=0;
i<=2;
i++)
2065 for(
int k=0;
k<=2;
k++) Gtr(
i) +=
dR(
k)*Wi(
k)*Jac(
k,
i);
2066 for(
int i=0;
i<=2;
i++)
Gfr(
i) += Gtr(
i);
2076 std::cout<<
" Jacobian dr/ddx "<<std::endl;
2106 CLHEP::HepSymMatrix
w(Nd,0);
2107 for (
int i=1;
i <= Nd;
i++)
2108 for (
int j=1; j <= Nd; j++){
2109 if(j <=
i )
w(
i,j) = GCov(
i-1, j-1);
2112 if((
i == j) && (
i<=3) && (GCov(
i-1, j-1) < 1.
e-20))
w(
i,j) = 1.e20;
2113 if(
i != j)
w(
i,j) = 0.;
2119 CLHEP::HepVector V(Nd), Rt(3),
Pt(3), Rm(3), Pm(3), Norm(3);
2120 Rt(1) = GRt.
x(); Rt(2) = GRt.
y(); Rt(3) = GRt.
z();
2121 Pt(1) = GPt.
x();
Pt(2) = GPt.
y();
Pt(3) = GPt.
z();
2122 Rm(1) = GRm.
x(); Rm(2) = GRm.
y(); Rm(3) = GRm.
z();
2123 Pm(1) = GPm.
x(); Pm(2) = GPm.
y(); Pm(3) = GPm.
z();
2124 Norm(1) = GNorm.
x(); Norm(2) = GNorm.
y(); Norm(3) = GNorm.
z();
2126 V = dsum(Rm - Rt, Pm -
Pt) ;
2131 CLHEP::HepMatrix Jac(Nd,Nd,0);
2132 for (
int i=1;
i <= 3;
i++)
2133 for (
int j=1; j <= 3; j++){
2134 Jac(
i,j) = Pm(
i)*Norm(j) / PmN;
2135 if(
i == j ) Jac(
i,j) -= 1.;
2149 CLHEP::HepVector dsda(3);
2150 dsda(1) = (Norm(2)*Rm(3) - Norm(3)*Rm(2)) / PmN;
2151 dsda(2) = (Norm(3)*Rm(1) - Norm(1)*Rm(3)) / PmN;
2152 dsda(3) = (Norm(1)*Rm(2) - Norm(2)*Rm(1)) / PmN;
2155 Jac(1,4) = Pm(1)*dsda(1);
2156 Jac(2,4) = -Rm(3) + Pm(2)*dsda(1);
2157 Jac(3,4) = Rm(2) + Pm(3)*dsda(1);
2159 Jac(1,5) = Rm(3) + Pm(1)*dsda(2);
2160 Jac(2,5) = Pm(2)*dsda(2);
2161 Jac(3,5) = -Rm(1) + Pm(3)*dsda(2);
2163 Jac(1,6) = -Rm(2) + Pm(1)*dsda(3);
2164 Jac(2,6) = Rm(1) + Pm(2)*dsda(3);
2165 Jac(3,6) = Pm(3)*dsda(3);
2167 CLHEP::HepSymMatrix W(Nd,0);
2169 W = w.inverse(ierr);
2170 if(ierr != 0) {
if(alarm)
2171 std::cout<<
" gradientGlobal: inversion of matrix w fail "<<std::endl;
2175 CLHEP::HepMatrix W_Jac(Nd,Nd,0);
2176 W_Jac = Jac.T() * W;
2178 CLHEP::HepVector grad3(Nd);
2181 CLHEP::HepMatrix hess3(Nd,Nd);
2182 hess3 = Jac.T() * W * Jac;
2188 CLHEP::HepVector d3I = CLHEP::solve(
Hess, -
Grad);
2190 CLHEP::HepMatrix Errd3I =
Hess.inverse(iEr3I);
2191 if( iEr3I != 0) {
if(alarm)
2192 std::cout<<
" gradientGlobal error inverse Hess matrix !!!!!!!!!!!"<<std::endl;
2196 std::cout<<
" dG "<<d3I(1)<<
" "<<d3I(2)<<
" "<<d3I(3)<<
" "<<d3I(4)<<
" " 2197 <<d3I(5)<<
" "<<d3I(6)<<std::endl;;
2199 <<
" "<<
sqrt(Errd3I(4,4))<<
" "<<
sqrt(Errd3I(5,5))<<
" "<<
sqrt(Errd3I(6,6))
2203 #ifdef CHECK_OF_DERIVATIVES 2206 CLHEP::HepVector
d(3,0),
a(3,0);
2207 CLHEP::HepMatrix
T(3,3,1);
2209 CLHEP::HepMatrix Ti = T.T();
2216 CLHEP::HepVector r0(3,0), p0(3,0);
2217 r0 = Ti*Rm - Ti*d + s0*(Ti*Pm) - Rt;
2220 double delta = 0.0001;
2230 B =
CLHEP_dot((Rt -Ti*Rm + Ti*d), Norm);
2233 CLHEP::HepVector
r(3,0),
p(3,0);
2234 r = Ti*Rm - Ti*d + s*(Ti*Pm) - Rt;
2237 std::cout<<
" s0 s num dsda("<<ii<<
") "<<s0<<
" "<<s<<
" " 2238 <<(s-s0)/delta<<
" "<<dsda(ii)<<endl;
2240 std::cout<<
" -- An d(r,p)/d("<<ii<<
") "<<Jac(1,ii)<<
" "<<Jac(2,ii)<<
" " 2241 <<Jac(3,ii)<<
" "<<Jac(4,ii)<<
" "<<Jac(5,ii)<<
" " 2242 <<Jac(6,ii)<<std::endl;
2243 std::cout<<
" Nu d(r,p)/d("<<ii<<
") "<<(
r(1)-r0(1))/delta<<
" " 2244 <<(
r(2)-r0(2))/delta<<
" "<<(
r(3)-r0(3))/delta<<
" " 2245 <<(
p(1)-p0(1))/delta<<
" "<<(
p(2)-p0(2))/delta<<
" " 2246 <<(
p(3)-p0(3))/delta<<std::endl;
2248 std::cout<<
" -- An d(r,p)/a("<<ii<<
") "<<Jac(1,ii+3)<<
" "<<Jac(2,ii+3)<<
" " 2249 <<Jac(3,ii+3)<<
" "<<Jac(4,ii+3)<<
" "<<Jac(5,ii+3)<<
" " 2250 <<Jac(6,ii+3)<<std::endl;
2251 std::cout<<
" Nu d(r,p)/a("<<ii<<
") "<<(
r(1)-r0(1))/delta<<
" " 2252 <<(
r(2)-r0(2))/delta<<
" "<<(
r(3)-r0(3))/delta<<
" " 2253 <<(
p(1)-p0(1))/delta<<
" "<<(
p(2)-p0(2))/delta<<
" " 2254 <<(
p(3)-p0(3))/delta<<std::endl;
2267 CLHEP::HepSymMatrix& covLoc,
2268 CLHEP::HepMatrix& rotLoc,
2269 CLHEP::HepVector&
R0,
2281 std::cout<<
" gradientLocal "<<std::endl;
2300 CLHEP::HepVector Rt(3),
Pt(3), Rm(3), Pm(3), Norm(3);
2301 Rt(1) = GRt.
x(); Rt(2) = GRt.
y(); Rt(3) = GRt.
z();
2302 Pt(1) = GPt.
x();
Pt(2) = GPt.
y();
Pt(3) = GPt.
z();
2303 Rm(1) = GRm.
x(); Rm(2) = GRm.
y(); Rm(3) = GRm.
z();
2304 Pm(1) = GPm.
x(); Pm(2) = GPm.
y(); Pm(3) = GPm.
z();
2305 Norm(1) = GNorm.
x(); Norm(2) = GNorm.
y(); Norm(3) = GNorm.
z();
2307 CLHEP::HepVector V(4), Rml(3), Pml(3), Rtl(3), Ptl(3);
2315 Rml = rotLoc * (Rm -
R0);
2316 Rtl = rotLoc * (Rt -
R0);
2320 V(1) = LPRm(0) - Ptl(1)/Ptl(3);
2321 V(2) = LPRm(1) - Ptl(2)/Ptl(3);
2322 V(3) = LPRm(2) - Rtl(1);
2323 V(4) = LPRm(3) - Rtl(2);
2338 CLHEP::HepSymMatrix W = covLoc;
2342 if(ierr != 0) {
if(alarm)
2343 std::cout<<
" gradientLocal: inversion of matrix W fail "<<std::endl;
2355 CLHEP::HepMatrix JacToLoc(4,6,0);
2356 for(
int i=1;
i<=2;
i++)
2357 for(
int j=1; j<=3; j++){
2358 JacToLoc(
i,j+3) = (rotLoc(
i,j) - rotLoc(3,j)*Pml(
i)/Pml(3))/Pml(3);
2359 JacToLoc(
i+2,j) = rotLoc(
i,j);
2366 CLHEP::HepMatrix Jac(6,6,0);
2367 for (
int i=1;
i <= 3;
i++)
2368 for (
int j=1; j <= 3; j++){
2369 Jac(
i,j) = Pm(
i)*Norm(j) / PmN;
2370 if(
i == j ) Jac(
i,j) -= 1.;
2384 CLHEP::HepVector dsda(3);
2385 dsda(1) = (Norm(2)*Rm(3) - Norm(3)*Rm(2)) / PmN;
2386 dsda(2) = (Norm(3)*Rm(1) - Norm(1)*Rm(3)) / PmN;
2387 dsda(3) = (Norm(1)*Rm(2) - Norm(2)*Rm(1)) / PmN;
2390 Jac(1,4) = Pm(1)*dsda(1);
2391 Jac(2,4) = -Rm(3) + Pm(2)*dsda(1);
2392 Jac(3,4) = Rm(2) + Pm(3)*dsda(1);
2394 Jac(1,5) = Rm(3) + Pm(1)*dsda(2);
2395 Jac(2,5) = Pm(2)*dsda(2);
2396 Jac(3,5) = -Rm(1) + Pm(3)*dsda(2);
2398 Jac(1,6) = -Rm(2) + Pm(1)*dsda(3);
2399 Jac(2,6) = Rm(1) + Pm(2)*dsda(3);
2400 Jac(3,6) = Pm(3)*dsda(3);
2403 CLHEP::HepMatrix JacCorLoc(4,6,0);
2404 JacCorLoc = JacToLoc * Jac;
2407 CLHEP::HepMatrix W_Jac(6,4,0);
2408 W_Jac = JacCorLoc.T() * W;
2410 CLHEP::HepVector gradL(6);
2413 CLHEP::HepMatrix hessL(6,6);
2414 hessL = JacCorLoc.T() * W * JacCorLoc;
2419 CLHEP::HepVector dLI = CLHEP::solve(
HessL, -
GradL);
2421 CLHEP::HepMatrix ErrdLI =
HessL.inverse(iErI);
2422 if( iErI != 0) {
if(alarm)
2423 std::cout<<
" gradLocal Error inverse Hess matrix !!!!!!!!!!!"<<std::endl;
2427 std::cout<<
" dL "<<dLI(1)<<
" "<<dLI(2)<<
" "<<dLI(3)<<
" "<<dLI(4)<<
" " 2428 <<dLI(5)<<
" "<<dLI(6)<<std::endl;;
2430 <<
" "<<
sqrt(ErrdLI(4,4))<<
" "<<
sqrt(ErrdLI(5,5))<<
" "<<
sqrt(ErrdLI(6,6))
2444 if(GNorm.
z() > 0.95)
2445 std::cout<<
" Ecap1 N "<<GNorm<<std::endl;
2446 else if(GNorm.
z() < -0.95)
2447 std::cout<<
" Ecap2 N "<<GNorm<<std::endl;
2449 std::cout<<
" Barrel N "<<GNorm<<std::endl;
2450 std::cout<<
" JacCLo(i,"<<i<<
") = {"<<JacCorLoc(1,i)<<
" "<<JacCorLoc(2,i)<<
" " 2451 <<JacCorLoc(3,i)<<
" "<<JacCorLoc(4,i)<<
"}"<<std::endl;
2452 std::cout<<
" rotLoc "<<rotLoc<<std::endl;
2454 std::cout<<
" Pm,l "<<Pm.T()<<
" "<<Pml(1)/Pml(3)<<
" "<<Pml(2)/Pml(3)<<std::endl;
2455 std::cout<<
" Pt,l "<<Pt.T()<<
" "<<Ptl(1)/Ptl(3)<<
" "<<Ptl(2)/Ptl(3)<<std::endl;
2457 std::cout<<
" Cov \n"<<covLoc<<std::endl;
2458 std::cout<<
" W*Cov "<<W*covLoc<<std::endl;
2462 std::cout<<
" JacToLoc "<<JacToLoc<<std::endl;
2466 #ifdef CHECK_OF_JACOBIAN_CARTESIAN_TO_LOCAL 2468 CLHEP::HepVector V0(4,0);
2469 V0(1) = Pml(1)/Pml(3) - Ptl(1)/Ptl(3);
2470 V0(2) = Pml(2)/Pml(3) - Ptl(2)/Ptl(3);
2471 V0(3) = Rml(1) - Rtl(1);
2472 V0(4) = Rml(2) - Rtl(2);
2473 int ii = 3;
float delta = 0.01;
2474 CLHEP::HepVector V1(4,0);
2475 if(ii <= 3) {Rm(ii) +=
delta; Rml = rotLoc * (Rm -
R0);}
2476 else {Pm(ii-3) +=
delta; Pml = rotLoc * Pm;}
2479 V1(1) = Pml(1)/Pml(3) - Ptl(1)/Ptl(3);
2480 V1(2) = Pml(2)/Pml(3) - Ptl(2)/Ptl(3);
2481 V1(3) = Rml(1) - Rtl(1);
2482 V1(4) = Rml(2) - Rtl(2);
2484 if(GNorm.
z() > 0.95)
2485 std::cout<<
" Ecap1 N "<<GNorm<<std::endl;
2486 else if(GNorm.
z() < -0.95)
2487 std::cout<<
" Ecap2 N "<<GNorm<<std::endl;
2489 std::cout<<
" Barrel N "<<GNorm<<std::endl;
2490 std::cout<<
" dldc Num (i,"<<ii<<
") "<<(V1(1)-V0(1))/delta<<
" "<<(V1(2)-V0(2))/delta<<
" " 2491 <<(V1(3)-V0(3))/delta<<
" "<<(V1(4)-V0(4))/delta<<std::endl;
2492 std::cout<<
" dldc Ana (i,"<<ii<<
") "<<JacToLoc(1,ii)<<
" "<<JacToLoc(2,ii)<<
" " 2493 <<JacToLoc(3,ii)<<
" "<<JacToLoc(4,ii)<<std::endl;
2508 CLHEP::HepVector
d(3,0),
a(3,0), Norm(3), Rm0(3), Pm0(3), Rm1(3), Pm1(3),
2511 d(1)=0.0;
d(2)=0.0;
d(3)=0.0;
a(1)=0.0000;
a(2)=0.0000;
a(3)=0.0000;
2525 if((
d(1) == 0.) & (
d(2) == 0.) & (
d(3) == 0.) &
2526 (
a(1) == 0.) & (
a(2) == 0.) & (
a(3) == 0.)){
2530 std::cout<<
" ...... without misalignment "<<std::endl;
2534 Rm0(1) = GRm.
x(); Rm0(2) = GRm.
y(); Rm0(3) = GRm.
z();
2535 Pm0(1) = GPm.
x(); Pm0(2) = GPm.
y(); Pm0(3) = GPm.
z();
2536 Norm(1) = Nl.
x(); Norm(2) = Nl.
y(); Norm(3) = Nl.
z();
2538 CLHEP::HepMatrix
T(3,3,1);
2548 T(1,2) =
c1 * s3 + s1 * s2 * c3;
2549 T(1,3) = s1 * s3 -
c1 * s2 * c3;
2551 T(2,2) =
c1 * c3 - s1 * s2 * s3;
2552 T(2,3) = s1 * c3 +
c1 * s2 * s3;
2559 CLHEP::HepMatrix Ti = T.T();
2560 CLHEP::HepVector di = -Ti *
d;
2562 CLHEP::HepVector ex0(3,0), ey0(3,0), ez0(3,0), ex(3,0), ey(3,0), ez(3,0);
2563 ex0(1) = 1.; ey0(2) = 1.; ez0(3) = 1.;
2564 ex = Ti*ex0; ey = Ti*ey0; ez = Ti*ez0;
2566 CLHEP::HepVector TiN = Ti * Norm;
2572 Rm1(1) =
CLHEP_dot(ex, Rm0 + si*Pm0 - di);
2573 Rm1(2) =
CLHEP_dot(ey, Rm0 + si*Pm0 - di);
2574 Rm1(3) =
CLHEP_dot(ez, Rm0 + si*Pm0 - di);
2584 std::cout<<
" T*Pm0 "<<Pm1.T()<<std::endl;
2588 CLHEP::HepVector Rml = Rm1(1)*ex + Rm1(2)*ey + Rm1(3)*ez + di;
2590 CLHEP::HepVector Rt0(3);
2591 Rt0(1)=Rt.
x(); Rt0(2)=Rt.
y(); Rt0(3)=Rt.
z();
2595 CLHEP::HepVector Rl = Rml + sl*(Ti*Pm1);
2604 CLHEP::HepVector Dr = Ti*Rm1 - Ti*d + s*(Ti*Pm1) - Rm0;
2605 CLHEP::HepVector Dp = Ti*Pm1 - Pm0;
2607 CLHEP::HepVector TiR = Ti * Rm0 + di;
2608 CLHEP::HepVector Ri = T * TiR +
d;
2610 std::cout<<
" --TTi-0 "<<(Ri-Rm0).
T()<<std::endl;
2620 std::cout<<
" -- si sl s "<<si<<
" "<<sl<<
" "<<s<<std::endl;
2623 std::cout<<
" -- Rml-(Rm0+si*Pm0) "<<(Rml - Rm0 - si*Pm0).
T()<<std::endl;
2631 std::cout<<
" --Rl-0 "<<(Rl-Rm0).
T()<<std::endl;
2647 CLHEP::HepVector
d(3,0),
a(3,0), Norm(3), Rm0(3), Pm0(3), Rm1(3), Pm1(3),
2650 d(1)=0.0;
d(2)=0.0;
d(3)=0.0;
a(1)=0.0000;
a(2)=0.0000;
a(3)=0.0000;
2666 if((
d(1) == 0.) & (
d(2) == 0.) & (
d(3) == 0.) &
2667 (
a(1) == 0.) & (
a(2) == 0.) & (
a(3) == 0.)){
2676 std::cout<<
" ...... without misalignment "<<std::endl;
2680 Rm0(1) = GRm.
x(); Rm0(2) = GRm.
y(); Rm0(3) = GRm.
z();
2681 Pm0(1) = GPm.
x(); Pm0(2) = GPm.
y(); Pm0(3) = GPm.
z();
2682 Norm(1) = Nl.
x(); Norm(2) = Nl.
y(); Norm(3) = Nl.
z();
2684 CLHEP::HepMatrix
T(3,3,1);
2694 T(1,2) =
c1 * s3 + s1 * s2 * c3;
2695 T(1,3) = s1 * s3 -
c1 * s2 * c3;
2697 T(2,2) =
c1 * c3 - s1 * s2 * s3;
2698 T(2,3) = s1 * c3 +
c1 * s2 * s3;
2706 CLHEP::HepMatrix Ti = T.T();
2707 CLHEP::HepVector di = -Ti *
d;
2709 CLHEP::HepVector ex0(3,0), ey0(3,0), ez0(3,0), ex(3,0), ey(3,0), ez(3,0);
2710 ex0(1) = 1.; ey0(2) = 1.; ez0(3) = 1.;
2711 ex = Ti*ex0; ey = Ti*ey0; ez = Ti*ez0;
2713 CLHEP::HepVector TiN = Ti * Norm;
2719 Rm1(1) =
CLHEP_dot(ex, Rm0 + si*Pm0 - di);
2720 Rm1(2) =
CLHEP_dot(ey, Rm0 + si*Pm0 - di);
2721 Rm1(3) =
CLHEP_dot(ez, Rm0 + si*Pm0 - di);
2731 CLHEP::HepMatrix Tl(3,3,0);
2745 CLHEP::HepVector
R0(3,0), newR0(3,0), newRl(3,0), newPl(3,0);
2750 newRl = Tl * (Rm1 -
R0);
2753 Vm(0) = newPl(1)/newPl(3);
2754 Vm(1) = newPl(2)/newPl(3);
2758 #ifdef CHECK_DERIVATIVES_LOCAL_VS_ANGLES 2761 int ii = 2;
T(3,1) -=del;
T(1,3) +=del;
2764 CLHEP::HepVector Rm10 = Rm1, Pm10 = Pm1;;
2765 CLHEP::HepMatrix newTl = Tl*
T;
2768 ex = Ti*ex0; ey = Ti*ey0; ez = Ti*ez0;
2771 Rm1(1) =
CLHEP_dot(ex, Rm0 + si*Pm0 - di);
2772 Rm1(2) =
CLHEP_dot(ey, Rm0 + si*Pm0 - di);
2773 Rm1(3) =
CLHEP_dot(ez, Rm0 + si*Pm0 - di);
2776 newRl = Tl * (Rm1 -
R0);
2779 Vm(0) = newPl(1)/newPl(3);
2780 Vm(1) = newPl(2)/newPl(3);
2783 std::cout<<
" ========= dVm/da"<<ii<<
" "<<(Vm-Vm0)*(1./del)<<std::endl;
2789 std::cout<<
" ex "<<(Tl.T()*ex0).
T()<<std::endl;
2790 std::cout<<
" ey "<<(Tl.T()*ey0).
T()<<std::endl;
2791 std::cout<<
" ez "<<(Tl.T()*ez0).
T()<<std::endl;
2794 std::cout<<
" pxyz/p gl 0 "<<(Pm0/Pm0.norm()).
T()<<std::endl;
2795 std::cout<<
" pxyz/p loc0 "<<(Tl*Pm0/(Tl*Pm0).norm()).
T()<<std::endl;
2796 std::cout<<
" pxyz/p glob "<<(Pm1/Pm1.norm()).
T()<<std::endl;
2797 std::cout<<
" pxyz/p loc "<<(newPl/newPl.norm()).
T()<<std::endl;
2802 <<atan2(Pm0(2),Pm0(1))<<
" "<<atan2(Pm1(2),Pm1(1))<<
" " 2803 <<atan2((Tl*Pm0)(2),(Tl*Pm0)(1))<<
" " 2804 <<atan2(newPl(2),newPl(1))<<std::endl;
2805 std::cout<<
" ---- angl Gl Loc "<<atan2(Pm1(2),Pm1(1))-atan2(Pm0(2),Pm0(1))<<
" " 2806 <<atan2(newPl(2),newPl(1))-atan2((Tl*Pm0)(2),(Tl*Pm0)(1))<<
" " 2807 <<atan2(newPl(3),newPl(2))-atan2((Tl*Pm0)(3),(Tl*Pm0)(2))<<
" " 2808 <<atan2(newPl(1),newPl(3))-atan2((Tl*Pm0)(1),(Tl*Pm0)(3))<<
" "<<std::endl;
2812 CLHEP::HepMatrix newTl(3,3,0);
2813 CLHEP::HepVector
R0(3,0), newRl(3,0), newPl(3,0);
2814 newTl = Tl * Ti.T();
2815 newR0 = Ti *
R0 + di;
2826 CLHEP::HepVector Rvc(3,0), Pvc(3,0), Rvg(3,0), Pvg(3,0);
2827 Rvc(1) = Vm(2); Rvc(2) = Vm(3);
2829 sqrt(1 + Vm(0)*Vm(0) + Vm(1)*Vm(1));
2830 Pvc(1) = Pvc(3) * Vm(0);
2831 Pvc(2) = Pvc(3) * Vm(1);
2833 Rvg = newTl.T() * Rvc + newR0;
2834 Pvg = newTl.T() * Pvc;
2836 std::cout<<
" newPl "<<newPl.T()<<std::endl;
2847 std::cout<<
" T*Pm0 "<<Pm1.T()<<std::endl;
2851 CLHEP::HepVector Rml = Rm1(1)*ex + Rm1(2)*ey + Rm1(3)*ez + di;
2853 CLHEP::HepVector Rt0(3);
2854 Rt0(1)=Rt.
x(); Rt0(2)=Rt.
y(); Rt0(3)=Rt.
z();
2858 CLHEP::HepVector Rl = Rml + sl*(Ti*Pm1);
2867 CLHEP::HepVector Dr = Ti*Rm1 - Ti*d + s*(Ti*Pm1) - Rm0;
2868 CLHEP::HepVector Dp = Ti*Pm1 - Pm0;
2870 CLHEP::HepVector TiR = Ti * Rm0 + di;
2871 CLHEP::HepVector Ri = T * TiR +
d;
2873 std::cout<<
" --TTi-0 "<<(Ri-Rm0).
T()<<std::endl;
2883 std::cout<<
" -- si sl s "<<si<<
" "<<sl<<
" "<<s<<std::endl;
2886 std::cout<<
" -- Rml-(Rm0+si*Pm0) "<<(Rml - Rm0 - si*Pm0).
T()<<std::endl;
2894 std::cout<<
" --Rl-0 "<<(Rl-Rm0).
T()<<std::endl;
2910 bool smooth =
false;
2913 std::cout<<
" ......... start of trackFitter ......... "<<std::endl;
2916 this->
debugTrackHit(
" Tracker TransientTrack hits ", alongTTr);
2920 DetId trackDetId =
DetId(alongTr->innerDetId());
2928 for(
unsigned int ihit = recHitAlong.
size()-1; ihit+1>0; ihit--){
2931 recHitAlong.
clear();
2934 std::cout<<
" ... Own recHit.size() "<<recHit.
size()<<
" "<<trackDetId.
rawId()<<std::endl;
2939 if((*i)->isValid()){
2947 <<
" ======> recHitMu "<<std::endl;
2955 std::cout<<
" ...along.... recHitMu.size() "<<recHitMu.size()<<std::endl;
2959 for(
unsigned int ihit = recHitMuAlong.size()-1; ihit+1>0; ihit--){
2960 recHitMu.push_back(recHitMuAlong[ihit]);
2962 recHitMuAlong.clear();
2965 std::cout<<
" ...opposite... recHitMu.size() "<<recHitMu.size()<<std::endl;
2985 std::vector<Trajectory> trajVec;
2987 else trajVec =
theFitterOp->fit(seedT, recHitMu, initialTSOS);
2995 std::cout<<
" . . . . . trajVec.size() "<<trajVec.size()<<std::endl;
2996 if(!trajVec.empty()) this->
debugTrajectory(
" theFitter trajectory ", trajVec[0]);
3000 if(!trajVec.empty()) trackFittedTSOS = trajVec[0].lastMeasurement().updatedState();}
3002 std::vector<Trajectory> trajSVec;
3003 if (!trajVec.empty()){
3007 if(info)
std::cout<<
" . . . . trajSVec.size() "<<trajSVec.size()<<std::endl;
3009 trajSVec[0].geometricalInnermostState());
3010 if(!trajSVec.empty()) trackFittedTSOS = trajSVec[0].geometricalInnermostState();
3024 bool smooth =
false;
3026 if(info)
std::cout<<
" ......... start of muonFitter ........"<<std::endl;
3029 this->
debugTrackHit(
" Muon TransientTrack hits ", alongTTr);
3033 DetId trackDetId =
DetId(alongTr->innerDetId());
3041 for(
unsigned int ihit = recHitAlong.
size()-1; ihit+1>0; ihit--){
3044 recHitAlong.
clear();
3047 std::cout<<
" ... Own recHit.size() DetId==Muon "<<recHit.
size()<<
" "<<trackDetId.
rawId()<<std::endl;
3052 std::cout<<
" ...along.... recHitMu.size() "<<recHitMu.size()<<std::endl;
3056 for(
unsigned int ihit = recHitMuAlong.size()-1; ihit+1>0; ihit--){
3057 recHitMu.push_back(recHitMuAlong[ihit]);
3059 recHitMuAlong.clear();
3062 std::cout<<
" ...opposite... recHitMu.size() "<<recHitMu.size()<<std::endl;
3082 std::vector<Trajectory> trajVec;
3084 else trajVec =
theFitterOp->fit(seedT, recHitMu, initialTSOS);
3092 std::cout<<
" . . . . . trajVec.size() "<<trajVec.size()<<std::endl;
3093 if(!trajVec.empty()) this->
debugTrajectory(
" theFitter trajectory ", trajVec[0]);
3097 if(!trajVec.empty()) trackFittedTSOS = trajVec[0].lastMeasurement().updatedState();}
3099 std::vector<Trajectory> trajSVec;
3100 if (!trajVec.empty()){
3104 if(info)
std::cout<<
" . . . . trajSVec.size() "<<trajSVec.size()<<std::endl;
3106 trajSVec[0].geometricalInnermostState());
3107 if(!trajSVec.empty()) trackFittedTSOS = trajSVec[0].geometricalInnermostState();
3116 std::cout<<
" ------- "<<title<<
" --------"<<std::endl;
3120 std::cout<<
" Hit "<<nHit++<<
" DetId "<<(*i)->geographicalId().det();
3124 if(!(*i)->isValid())
std::cout<<
" not valid "<<std::endl;
3133 std::cout<<
" ------- "<<title<<
" --------"<<std::endl;
3137 std::cout<<
" Hit "<<nHit++<<
" DetId "<<(*i)->geographicalId().det();
3141 if(!(*i)->isValid())
std::cout<<
" not valid "<<std::endl;
3150 std::cout<<
" --- "<<title<<
" --- "<<std::endl;
3182 std::cout<<
" --- "<<title<<
" --- "<<std::endl;
3213 std::cout<<
"\n"<<
" ...... "<<title<<
" ...... "<<std::endl;
3214 if(!traj.
isValid()) {
std::cout<<
" Not valid !!!!!!!! "<<std::endl;
return;}
3217 else std::cout<<
" oppositeToMomentum <<<<"<<std::endl;
3222 std::cout<<
" . . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"<<std::endl;
3240 std::cout<<
" paramVector "<<paramVec.T()<<std::endl;
3242 CLHEP::Hep3Vector colX, colY, colZ;
3244 #ifdef NOT_EXACT_ROTATION_MATRIX 3245 colX = CLHEP::Hep3Vector( 1., -paramVec(6), paramVec(5));
3246 colY = CLHEP::Hep3Vector( paramVec(6), 1., -paramVec(4));
3247 colZ = CLHEP::Hep3Vector(-paramVec(5), paramVec(4), 1.);
3252 colX = CLHEP::Hep3Vector( c2 * c3, -c2 * s3, s2);
3253 colY = CLHEP::Hep3Vector(
c1 * s3 + s1 * s2 * c3,
c1 * c3 - s1 * s2 * s3, -s1 * c2);
3254 colZ = CLHEP::Hep3Vector(s1 * s3 -
c1 * s2 * c3, s1 * c3 +
c1 * s2 * s3,
c1 * c2);
3257 CLHEP::HepVector param0(6,0);
3268 CLHEP::HepEulerAngles angMuGlRcd =
iteratorMuonRcd->rotation().eulerAngles();
3270 std::cout<<
" Old muon Rcd Euler angles "<<angMuGlRcd.phi()<<
" "<<angMuGlRcd.theta()
3271 <<
" "<<angMuGlRcd.psi()<<std::endl;
3273 if((angMuGlRcd.phi() == 0.) && (angMuGlRcd.theta() == 0.) && (angMuGlRcd.psi() == 0.) &&
3274 (posMuGlRcd.x() == 0.) && (posMuGlRcd.y() == 0.) && (posMuGlRcd.z() == 0.)){
3275 std::cout<<
" New muon parameters are stored in Rcd"<<std::endl;
3286 else if((paramVec(1) == 0.) && (paramVec(2) == 0.) && (paramVec(3) == 0.) &&
3287 (paramVec(4) == 0.) && (paramVec(5) == 0.) && (paramVec(6) == 0.)){
3288 std::cout<<
" Old muon parameters are stored in Rcd"<<std::endl;
3296 std::cout<<
" New + Old muon parameters are stored in Rcd"<<std::endl;
3297 CLHEP::Hep3Vector posMuGlRcdThis = CLHEP::Hep3Vector(paramVec(1), paramVec(2), paramVec(3));
3298 CLHEP::HepRotation rotMuGlRcdThis = CLHEP::HepRotation(colX, colY, colZ);
3299 CLHEP::Hep3Vector posMuGlRcdNew = rotMuGlRcdThis * posMuGlRcd + posMuGlRcdThis;
3300 CLHEP::HepRotation rotMuGlRcdNew = rotMuGlRcdThis * rotMuGlRcd;
3326 <<
" " <<
tracker.rotation().eulerAngles() << std::endl;
3330 <<
" " << muon.
rotation().eulerAngles() << std::endl;
3331 std::cout <<
" rotations angles around x,y,z " 3333 <<
" " << -muon.
rotation().yx() <<
" )" << std::endl;
3337 <<
" " <<
ecal.rotation().eulerAngles() << std::endl;
3341 <<
" " <<
hcal.rotation().eulerAngles() << std::endl;
3344 std::cout <<
"Calo (" << calo.rawId() <<
") at " << calo.translation()
3345 <<
" " << calo.rotation().eulerAngles() << std::endl;
3346 std::cout << calo.rotation() << std::endl;
3349 globalPositions->
m_align.push_back(muon);
3352 globalPositions->
m_align.push_back(calo);
3354 std::cout <<
"Uploading to the database..." << std::endl;
3359 throw cms::Exception(
"NotAvailable") <<
"PoolDBOutputService not available";
3369 "GlobalPositionRcd");
const GlobalTrackingGeometry * trackingGeometry_
double CLHEP_dot(const CLHEP::HepVector &a, const CLHEP::HepVector &b)
edm::ESWatcher< GlobalPositionRcd > watchGlobalPositionRcd_
edm::ESHandle< GlobalTrackingGeometry > theTrackingGeometry
RecHitPointer build(const TrackingRecHit *p, edm::ESHandle< GlobalTrackingGeometry > trackingGeometry) const
Call the MuonTransientTrackingRecHit::specificBuild.
void debugTrajectorySOSv(const std::string, TrajectoryStateOnSurface)
KFTrajectorySmoother * theSmootherOp
virtual ConstReferenceCountingPointer< TangentPlane > tangentPlane(const GlobalPoint &) const =0
void gradientGlobalAlg(GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, AlgebraicSymMatrix66 &)
void gradientLocal(GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, CLHEP::HepSymMatrix &, CLHEP::HepMatrix &, CLHEP::HepVector &, AlgebraicVector4 &)
TrackCharge charge() const
const LocalTrajectoryParameters & localParameters() const
virtual example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
#define DEFINE_FWK_MODULE(type)
TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer
GlobalVector normalVector() const
Sin< T >::type sin(const T &t)
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
KFTrajectoryFitter * theFitter
const CartesianTrajectoryError cartesianError() const
CLHEP::HepVector MuGlAngle
void misalignMuon(GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &)
int bunchCrossing() const
std::vector< AlignTransform >::const_iterator iteratorHcalRcd
std::vector< ConstRecHitPointer > RecHitContainer
GlobalPoint globalPosition() const
PreciseFloatType< T, U >::Type dot(const Vector3DBase< U, FrameTag > &v) const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void gradientGlobal(GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, AlgebraicSymMatrix66 &)
std::vector< AlignTransform > m_align
ROOT::Math::SVector< double, 6 > AlgebraicVector6
virtual TrajectoryContainer trajectories(const Trajectory &traj) const
TrajectoryStateOnSurface innermostMeasurementState() const
PropagationDirection const & direction() const
uint32_t rawId() const
get the raw id
AlgebraicVector5 vector() const
const SurfaceType & surface() const
void debugTrackHit(const std::string, reco::TrackRef)
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
edm::ESWatcher< GlobalTrackingGeometryRecord > watchTrackingGeometry_
TrajectoryMeasurement const & lastMeasurement() const
FreeTrajectoryState const * freeState(bool withErrors=true) const
Cos< T >::type cos(const T &t)
KFTrajectoryFitter * theFitterOp
ROOT::Math::SVector< double, 3 > AlgebraicVector3
std::vector< AlignTransform >::const_iterator iteratorMuonRcd
void analyzeTrackTrajectory(const edm::Event &, const edm::EventSetup &)
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
const AlgebraicSymMatrix55 & matrix() const
const MagneticField * magneticField_
const LocalTrajectoryError & localError() const
static const std::string B
TrajectoryStateOnSurface outermostMeasurementState() const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
trackingRecHit_iterator recHitsEnd() const
last iterator to RecHits
const AlgebraicSymMatrix66 & matrix() const
void misalignMuonL(GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, GlobalVector &, AlgebraicVector4 &, TrajectoryStateOnSurface &, TrajectoryStateOnSurface &)
void analyze(const edm::Event &, const edm::EventSetup &) override
GlobalTrackerMuonAlignment(const edm::ParameterSet &)
void writeGlPosRcd(CLHEP::HepVector &d3)
std::vector< AlignTransform >::const_iterator iteratorEcalRcd
~GlobalTrackerMuonAlignment() override
TrajectoryMeasurement const & firstMeasurement() const
void trackFitter(reco::TrackRef, reco::TransientTrack &, PropagationDirection, TrajectoryStateOnSurface &)
KFTrajectorySmoother * theSmoother
ROOT::Math::SVector< double, 5 > AlgebraicVector5
const GlobalTrajectoryParameters & globalParameters() const
const Alignments * globalPositionRcd_
GlobalTrackerMuonAlignment
const TransientTrackingRecHitBuilder * TTRHBuilder
edm::ESWatcher< IdealMagneticFieldRecord > watchMagneticFieldRecord_
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
bool check(const edm::EventSetup &iSetup)
GlobalVector globalMomentum() const
void debugTrajectory(const std::string, Trajectory &)
cond::Time_t currentTime() const
const RotationType & rotation() const
std::vector< AlignTransform >::const_iterator iteratorTrackerRcd
TrajectoryStateOnSurface const & updatedState() const
float pzSign() const
Sign of the z-component of the momentum in the local frame.
ROOT::Math::SVector< double, 4 > AlgebraicVector4
edm::ESWatcher< TrackingComponentsRecord > watchTrackingComponentsRecord_
const PositionType & position() const
void analyzeTrackTrack(const edm::Event &, const edm::EventSetup &)
trackingRecHit_iterator recHitsBegin() const
first iterator to RecHits
AlgebraicVector6 vector() const
void muonFitter(reco::TrackRef, reco::TransientTrack &, PropagationDirection, TrajectoryStateOnSurface &)
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepStd< double, 3, 3 > > AlgebraicMatrix33
MuonTransientTrackingRecHitBuilder * MuRHBuilder
Global3DVector GlobalVector
CLHEP::HepVector MuGlShift
void debugTrajectorySOS(const std::string, TrajectoryStateOnSurface &)