FEDRA emulsion software from the OPERA Collaboration
emtrackan.cpp File Reference
#include <string.h>
#include <iostream>
#include <TROOT.h>
#include <TStyle.h>
#include <TCanvas.h>
#include <TProfile.h>
#include <TEnv.h>
#include <TMath.h>
#include <TRint.h>
#include <TH1F.h>
#include "EdbLog.h"
#include "EdbScanProc.h"
#include "EdbAlignmentV.h"
#include "EdbTrackFitter.h"
#include "EdbCorrectionMapper.h"
#include "EdbCouplesTree.h"
#include "EdbMomentumEstimator.h"
Include dependency graph for emtrackan.cpp:

Functions

void CheckGap (EdbPVRec &ali, const char *suff)
 
void CheckMom (EdbPVRec &ali, TEnv &cenv)
 
void DoGlobalCorr (EdbPVRec &ali, TEnv &cenv)
 
void DoGlobalCorrV2 (EdbPVRec &ali, TEnv &cenv)
 
void GlobalDiff (EdbPVRec &ali, const char *suff)
 
void GlobalEff (EdbPVRec &ali, const char *suff)
 
int main (int argc, char *argv[])
 
bool MakeCorrectionMap (EdbPVRec &ali, TEnv &cenv)
 
void MakeCorrectionMap_test (EdbPVRec &ali, TEnv &cenv)
 
void print_help_message ()
 
bool ReadFunParameters (const char *key)
 
int ReadFunParameters (const char *line, TF1 &fun)
 
void set_default (TEnv &cenv)
 

Variables

bool do_corraff = false
 
bool do_file = false
 
bool do_momentum = false
 
bool do_set = false
 
EdbID idset
 
EdbScanProc sproc
 

Function Documentation

◆ CheckGap()

void CheckGap ( EdbPVRec ali,
const char *  suff = "" 
)
894{
895 int ntr = ali.Ntracks();
896 Log(2,"CheckGap","for %d tracks",ntr);
897 //TH1F hGapN("gapN","GapN", 20, 0, 20 );
898 //TH1F hGapZ("gapZ","GapZ", 200, 0, 20000 );
899 //TH2F hDXfwd("DXfwd","DXfwd vs gap", 20, 0,20, 100, -200.,200. );
900 //TH2F hDYfwd("DYfwd","DYfwd vs gap", 20, 0,20, 100, -200.,200. );
901 //TH2F hDXbwd("DXbwd","DXbwd vs gap", 20, 0,20, 100, -200.,200. );
902 //TH2F hDYbwd("DYbwd","DYbwd vs gap", 20, 0,20, 100, -200.,200. );
903
904 TString name;
905 sproc.MakeFileName(name,idset,"trk.an.root",false);
906 TFile f(name,"UPDATE");
907
908 EdbCouplesTree cpt;
909 cpt.InitCouplesTree("gaps", 0, "WRITE");
910
911 int gapcnt=0;
912 for(int i=0; i<ntr; i++) {
913 EdbTrackP *t = ali.GetTrack(i);
914 int nseg = t->N();
915 for(int j=0; j<nseg-1; j++) {
916 EdbSegP *s = t->GetSegment(j);
917 EdbSegP *sn = t->GetSegment(j+1);
918 //int ngap = sn->ScanID().ePlate - s->ScanID().ePlate;
919 //float dz = sn->Z() - s->Z();
920 //float dxfwd = sn->X() - (s->X() + s->TX()*dz);
921 //float dyfwd = sn->Y() - (s->Y() + s->TY()*dz);
922 //float dxbwd = s->X() - (sn->X() - sn->TX()*dz);
923 //float dybwd = s->Y() - (sn->Y() - sn->TY()*dz);
924
925 cpt.Fill(s,sn,t);
926 gapcnt++;
927 //hGapN.Fill(Abs(ngap));
928 //hGapZ.Fill(Abs(dz));
929 //hDXfwd.Fill( Abs(ngap) , dxfwd );
930 //hDYfwd.Fill( Abs(ngap) , dyfwd );
931 //hDXbwd.Fill( Abs(ngap) , dxbwd );
932 //hDYbwd.Fill( Abs(ngap) , dybwd );
933 }
934 }
935 /*
936 TCanvas *c = new TCanvas(Form("Gap_%s",suff), Form("Gap_%s",suff), 900,900);
937 c->Divide(2,3);
938 c->cd(1)->SetLogy(); hGapN.Draw();
939 c->cd(2)->SetLogy(); hGapZ.Draw();
940 c->cd(3)->SetLogz(); hDXfwd.Draw("colz");
941 c->cd(4)->SetLogz(); hDYfwd.Draw("colz");
942 c->cd(5)->SetLogz(); hDXbwd.Draw("colz");
943 c->cd(6)->SetLogz(); hDYbwd.Draw("colz");
944
945 c->Write();
946 */
947 cpt.Close();
948 Log(2,"CheckGap"," %d gaps saved",gapcnt);
949 //f.Close();
950}
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
FILE * f
Definition: RecDispMC.C:150
Definition: EdbCouplesTree.h:17
bool InitCouplesTree(const char *name="couples", const char *fname=0, Option_t *mode="READ")
Definition: EdbCouplesTree.cxx:79
void Close()
Definition: EdbCouplesTree.cxx:62
Int_t Fill(EdbSegP *s1, EdbSegP *s2, EdbSegP *s=0, EdbSegCouple *cp=0, float xv=0, float yv=0, int pid1=0, int pid2=0)
Definition: EdbCouplesTree.cxx:172
Int_t Ntracks() const
Definition: EdbPVRec.h:203
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1819
Definition: EdbSegP.h:21
Definition: EdbPattern.h:113
EdbID idset
Definition: emtrackan.cpp:80
EdbScanProc sproc
Definition: emtrackan.cpp:81
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
EdbPVRec * ali
Definition: test_oracle.C:9
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24

◆ CheckMom()

void CheckMom ( EdbPVRec ali,
TEnv &  cenv 
)
856{
857 int ntr = ali.Ntracks();
858 Log(2,"Check momentum","for %d tracks",ntr);
859
861
862 //get fitter parameters from TEnv
863 TString line;
864 line=cenv.GetValue("trackan.MomEst.DT","0.0021 0.0054 0");
865 if(ReadFunParameters(line.Data(),mes.eDTsErrorFun)<=0) throw Form("Wrong line for \"trackan.MomEst.DT\":\'%s\'",line.Data());
866 line=cenv.GetValue("trackan.MomEst.DTx","0.0021 0.0093 0");
867 if(ReadFunParameters(line.Data(),mes.eDTxErrorFun)<=0) throw Form("Wrong line for \"trackan.MomEst.DTx\":\'%s\'",line.Data());
868 line=cenv.GetValue("trackan.MomEst.DTy","0.0021 0 0");
869 if(ReadFunParameters(line.Data(),mes.eDTyErrorFun)<=0) throw Form("Wrong line for \"trackan.MomEst.DTy\":\'%s\'",line.Data());
870 mes.eAlg=cenv.GetValue("trackan.MomEst.Alg",0);
871 mes.eX0=cenv.GetValue("trackan.MomEst.X0",5600);
872 mes.eM=cenv.GetValue("trackan.MomEst.M",0.13957);
873 mes.Print();
874 //mes.eDTx0=0.001; mes.eDTx1=0; mes.eDTx2=0;
875 //mes.eDTy0=0.001; mes.eDTy1=0; mes.eDTy2=0;
876
877 TObjArray fitted_tracks;
878
879 for(int i=0; i<ntr; i++) {
880 EdbTrackP *t = ali.GetTrack(i);
881 //int nseg = t->N();
882// Float_t P = mes.PMSang(*t);
883 Float_t P = mes.PMS(*t);
884 t->SetP(P);
885 fitted_tracks.Add(t);
886 }
887
888 EdbDataProc::MakeTracksTree( fitted_tracks, 0., 0., Form("b%s.trk.mom.root", idset.AsString()) );
889}
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2506
char * AsString() const
Definition: EdbID.cxx:26
Definition: EdbMomentumEstimator.h:21
int eAlg
select the algorithm for PMS estimation
Definition: EdbMomentumEstimator.h:25
TF1 eDTxErrorFun
input parameters for PMS_mag
Definition: EdbMomentumEstimator.h:31
TF1 eDTyErrorFun
Definition: EdbMomentumEstimator.h:32
float PMS(EdbTrackP &tr)
Definition: EdbMomentumEstimator.cxx:121
TF1 eDTsErrorFun
Definition: EdbMomentumEstimator.h:33
void Print()
Definition: EdbMomentumEstimator.cxx:90
float eX0
rad length of the media [microns]
Definition: EdbTrackFitter.h:23
float eM
mass of the particle (if negative - use the mass setted in the track)
Definition: EdbTrackFitter.h:24
TEnv cenv("emrec")
bool ReadFunParameters(const char *key)

◆ DoGlobalCorr()

void DoGlobalCorr ( EdbPVRec ali,
TEnv &  cenv 
)
478{
479 int ntr = ali.Ntracks();
480 int npat = ali.Npatterns();
481 Log(2,"DoGlobalCorr","with %d tracks and %d patterns",ntr, npat);
482
483 cenv.Print();
484 bool doRefitLine= cenv.GetValue("trackan.DoRefitLine" , 1);
485 bool doXYcorr = cenv.GetValue("trackan.global.doXYcorr" , 1);
486 bool doTXTYcorr = cenv.GetValue("trackan.global.doTXTYcorr" , 1);
487 bool doZcorr = cenv.GetValue("trackan.global.doZcorr" , 1);
488 bool trFlag = cenv.GetValue("trackan.global.trFlag" , 0);
489 bool noScale = cenv.GetValue("trackan.global.noScale" , 0);
490
491
492 GlobalDiff(ali,"before_fit");
493 CheckGap(ali,"before_fit");
494
495 if(doRefitLine) {
496 EdbTrackFitter fitter;
497 for(int i=0; i<ntr; i++) {
498 EdbTrackP *t = ali.GetTrack(i);
499 fitter.FitTrackLine(*t);
500 }
501 }
502
503 GlobalDiff(ali,"before_corr");
504
506
507 for(int i=0; i<ntr; i++) {
508 EdbTrackP *t = ali.GetTrack(i);
509 if(trFlag!=0) if( trFlag!=t->Flag() ) continue;
510 int nseg = t->N();
511 for(int j=0; j<nseg; j++) {
512 EdbSegP *s = t->GetSegment(j);
513 EdbSegP *sf = t->GetSegmentF(j);
514 cm[s->PID()].FillS(s,sf);
515 }
516 }
517
518 if(doXYcorr) {
519 for(int i=0; i<npat; i++) {
520 int n=0;
521 if(noScale) n = cm[i].eAl.CalculateAffXYTurn( *(cm[i].eAl.eCorrL[0].GetAffineXY()) );
522 else n = cm[i].eAl.CalculateAffXY( *(cm[i].eAl.eCorrL[0].GetAffineXY()) );
523 Log(2,"CalculateAffXY","%6d %s", n, cm[i].eAl.eCorrL[0].GetAffineXY()->AsString() );
524 }
525
526 for(int i=0; i<npat; i++) {
527 ali.GetPattern(i)->Transform( cm[i].eAl.eCorrL[0].GetAffineXY() );
528 }
529 GlobalDiff(ali,"afterXY");
530 }
531
532 if(doTXTYcorr) {
533 for(int i=0; i<npat; i++) {
534 int n = cm[i].eAl.CalculateAffTXTY( *(cm[i].eAl.eCorrL[0].GetAffineTXTY()) );
535 Log(2,"CalculateAffTXTY","%6d %s", n, cm[i].eAl.eCorrL[0].GetAffineTXTY()->AsString() );
536 }
537
538 for(int i=0; i<npat; i++) {
539 ali.GetPattern(i)->TransformA( cm[i].eAl.eCorrL[0].GetAffineTXTY() );
540 }
541
542 GlobalDiff(ali,"afterTXTY");
543 }
544
545 if(doZcorr) {
546 GlobalDiff(ali,"beforeDZ");
547 for(int i=0; i<npat; i++)
548 {
549 float dz = cm[i].eAl.FineCorrZ();
550 cm[i].eAl.eCorrL[0].SetZcorr(dz);
551 printf("%d oldz = %f dz = %f \n",i, ali.GetPattern(i)->Z(), dz );
553 }
554 GlobalDiff(ali,"afterDZ");
555 }
556
557 int plate_pid[npat];
558 for(int i=0; i<npat; i++) {
559 plate_pid[i] = ali.GetPattern(i)->ScanID().ePlate;
560 }
561
562 EdbScanSet *ss =0;
564
565 for(int i=0; i<npat; i++) {
566 EdbPlateP *plate = ss->GetPlate( plate_pid[i] );
567 plate->ApplyCorrections( cm[i].eAl.eCorrL[0] );
568 }
569
570 GlobalEff(ali,"a");
571
573
574}
brick dz
Definition: RecDispMC.C:107
Int_t npat
Definition: Xi2HatStartScript.C:33
Int_t CalculateAffXY(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:95
EdbLayer eCorrL[2]
corrections in form of affine transformations - the final output
Definition: EdbAlignmentV.h:25
Int_t CalculateAffTXTY(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:96
Int_t CalculateAffXYTurn(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:94
float FineCorrZ()
Definition: EdbAlignmentV.h:89
EdbAlignmentV eAl
Definition: EdbCorrectionMapper.h:14
to calculate correction map
Definition: EdbCorrectionMapper.h:32
void FillS(EdbSegP *s1, EdbSegP *s2)
Definition: EdbCorrectionMapper.h:65
Int_t ePlate
Definition: EdbID.h:11
void SetZcorr(float zcorr)
Definition: EdbLayer.h:106
EdbID ScanID() const
Definition: EdbPattern.h:326
Int_t Npatterns() const
Definition: EdbPattern.h:366
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1721
Definition: EdbBrick.h:14
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:155
int WriteScanSet(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1428
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1482
Definition: EdbScanSet.h:11
Float_t Z() const
Definition: EdbPattern.h:84
void TransformA(const EdbAffine2D *affA)
Definition: EdbPattern.cxx:324
void ProjectTo(const float dz)
Definition: EdbPattern.cxx:268
Definition: EdbTrackFitter.h:17
int FitTrackLine(EdbTrackP &tr)
Definition: EdbTrackFitter.cxx:520
void GlobalEff(EdbPVRec &ali, const char *suff)
Definition: emtrackan.cpp:747
void CheckGap(EdbPVRec &ali, const char *suff)
Definition: emtrackan.cpp:893
bool do_set
Definition: emtrackan.cpp:76
void GlobalDiff(EdbPVRec &ali, const char *suff)
Definition: emtrackan.cpp:695
bool do_corraff
Definition: emtrackan.cpp:78
ss
Definition: energy.C:62
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1

◆ DoGlobalCorrV2()

void DoGlobalCorrV2 ( EdbPVRec ali,
TEnv &  cenv 
)
579{
580 int ntr = ali.Ntracks();
581 int npat = ali.Npatterns();
582 Log(2,"DoGlobalCorrV2","with %d tracks and %d patterns",ntr, npat);
583 if(npat<2) return;
584
585 cenv.Print();
586 bool doXYcorr = cenv.GetValue("trackan.global.doXYcorr" , 1);
587 bool doTXTYcorr = cenv.GetValue("trackan.global.doTXTYcorr" , 1);
588 bool doZcorr = cenv.GetValue("trackan.global.doZcorr" , 1);
589 bool trFlag = cenv.GetValue("trackan.global.trFlag" , 0);
590 bool noScale = cenv.GetValue("trackan.global.noScale" , 0);
591
593
594 int niterset=1;
595 for( int iii=0; iii<2*niterset; iii++ )
596 {
597 printf("\n ******** iii = %d *********\n",iii);
598 bool go_forward = 1;
599 //bool go_forward = iii%2;
600 for( int ipat=1; ipat<npat; ipat++ )
601 {
602 int id1,id2;
603 if(go_forward) { id1 = ipat-1; id2 = ipat; }
604 else { id1 = npat-ipat; id2 = npat-ipat-1; }
605
606 EdbPattern *p1 = ali.GetPattern(id1); p1->SetPID(id1);
607 EdbPattern *p2 = ali.GetPattern(id2); p2->SetPID(id2);
608 printf("plate: %d->%d pid: %d->%d z: %.1f ->%.1f = %.1f \n", p1->ScanID().ePlate, p2->ScanID().ePlate,p1->PID(), p2->PID(), p1->Z(), p2->Z(), p2->Z()-p1->Z() );
609 TObjArray p1corr;
610 TObjArray p2corr;
611 int ncp=0;
612 for(int itr=0; itr<ntr; itr++) {
613 EdbTrackP *t = ali.GetTrack(itr);
614 if(trFlag!=0) if( trFlag!=t->Flag() ) continue;
615 EdbSegP *s1=0, *s2=0;
616 for(int j=0; j<t->N(); j++) {
617 EdbSegP *s = t->GetSegment(j);
618 if(s->PID()==p1->PID()) s1=s;
619 if(s->PID()==p2->PID()) s2=s;
620 }
621 if(s1&&s2) { p1corr.Add(s1); p2corr.Add(s2); ncp++; }
622 }
623
624 EdbAlignmentV al;
625 for(int i=0; i<ncp; i++)
626 {
627 al.eS[0].Add(p1corr.At(i));
628 al.eS[1].Add(p2corr.At(i));
629 }
630
631 EdbAffine2D aff1to2XYcum;
632 EdbAffine2D aff2to1TXTYcum;
633 float dz01corr=0;
634 float dz01set=p2->Z()-p1->Z();
635
636 for(int iter=0; iter<3; iter++) {
637 printf("***** iter %d\n",iter);
638
639 float dz01 = dz01set;
640 if(doZcorr)
641 {
642 dz01 = al.FineCorrZ( al.eS[0], al.eS[1] );
643 printf("dz(0->1) = %f\n",dz01);
644 }
645
646 p1->ProjectTo( dz01 );
647 EdbAffine2D aff1to2XY;
648 al.CalculateAffXY( al.eS[0], al.eS[1], aff1to2XY);
649 p1->Transform(&aff1to2XY);
650 aff1to2XYcum.Transform(&aff1to2XY);
651 aff1to2XY.Print();
652
653 EdbAffine2D aff2to1TXTY;
654 al.CalculateAffTXTY( al.eS[1], al.eS[0], aff2to1TXTY);
655 p2->TransformA(&aff2to1TXTY);
656 aff2to1TXTY.Print();
657 aff2to1TXTYcum.Transform(&aff2to1TXTY);
658
659 p1->ProjectTo( -dz01 );
660
661 float dz10 = al.FineCorrZ( al.eS[1], al.eS[0] );
662 printf("dz(1->0) = %f\n",dz10);
663
664 dz01corr = dz01-dz01set;
665 printf("dzcorr = %.1f\n",dz01corr);
666 }
667
668 EdbPlateP *plate2 = ss->GetPlate( p2->ScanID().ePlate );
669 plate2->GetAffineTXTY()->Transform(&aff2to1TXTYcum);
670
671 if(go_forward) {
672 for(int ipatu=0; ipatu<ipat; ipatu++)
673 {
674 EdbPlateP *plate = ss->GetPlate( ali.GetPattern(ipatu)->ScanID().ePlate );
675 plate->GetAffineXY()->Transform(&aff1to2XYcum);
676 ali.GetPattern(ipatu)->SetZ( ali.GetPattern(ipatu)->Z() - dz01corr);
677 plate->SetZlayer( plate->Z() - dz01corr, plate->Zmin(), plate->Zmax() );
678 }
679 }
680 else
681 {
682 for(int ipatu=npat-1; ipatu>=ipat; ipatu--)
683 {
684 EdbPlateP *plate = ss->GetPlate( ali.GetPattern(ipatu)->ScanID().ePlate );
685 plate->GetAffineXY()->Transform(&aff1to2XYcum);
686 }
687 }
688
689 }
690 }
692}
Definition: EdbAffine.h:17
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
void Transform(const EdbAffine2D *a)
Definition: EdbAffine.cxx:93
universal basic alignment class
Definition: EdbAlignmentV.h:13
TObjArray eS[2]
"parallel" arrays with the selected combinations of segments
Definition: EdbAlignmentV.h:21
EdbAffine2D * GetAffineTXTY()
Definition: EdbLayer.h:120
Definition: EdbPattern.h:273
void SetPID(int pid)
Definition: EdbPattern.h:310
int PID() const
Definition: EdbPattern.h:320
void SetZ(float z)
Definition: EdbPattern.h:41
EdbSegP * s1
Definition: tlg2couples.C:29
EdbSegP * s2
Definition: tlg2couples.C:30

◆ GlobalDiff()

void GlobalDiff ( EdbPVRec ali,
const char *  suff = "" 
)
696{
697 int ntr = ali.Ntracks();
698 int npat = ali.Npatterns();
699 float xmin = ali.Xmin();
700 float xmax = ali.Xmax();
701 float ymin = ali.Ymin();
702 float ymax = ali.Ymax();
703
704 int pmin = 512, pmax=0;
705 for(int i=0; i<npat; i++) {
706 int p = ali.GetPattern(i)->ScanID().ePlate;
707 if(p<pmin) pmin=p;
708 if(p>pmax) pmax=p;
709 }
710
711 TH2F hDXR("dxr","dxr vs x", (pmax-pmin+3)*100, pmin-1, pmax+2, 200, -200, 200 );
712 TH2F hDYR("dyr","dyr vs y", (pmax-pmin+3)*100, pmin-1, pmax+2, 200, -200, 200 );
713 TH2F hDTXR("dtxr","dtxr vs x", (pmax-pmin+3)*100, pmin-1, pmax+2, 140, -0.07, 0.07 );
714 TH2F hDTYR("dtyr","dtyr vs y", (pmax-pmin+3)*100, pmin-1, pmax+2, 140, -0.07, 0.07 );
715
716 for(int i=0; i<ntr; i++) {
717 EdbTrackP *t = ali.GetTrack(i);
718 int nseg = t->N();
719 for(int j=0; j<nseg; j++) {
720 EdbSegP *s = t->GetSegment(j);
721 EdbSegP *sf = t->GetSegmentF(j);
722
723 int plateid = s->ScanID().ePlate;
724 hDXR.Fill( (s->X()-xmin)/(xmax-xmin+1000) + plateid, sf->X()-s->X() );
725 hDYR.Fill( (s->Y()-ymin)/(ymax-ymin+1000) + plateid, sf->Y()-s->Y() );
726 hDTXR.Fill( (s->X()-xmin)/(xmax-xmin+1000) + plateid, sf->TX()-s->TX() );
727 hDTYR.Fill( (s->Y()-ymin)/(ymax-ymin+1000) + plateid, sf->TY()-s->TY() );
728 }
729 }
730
731 TString name;
732 sproc.MakeFileName(name,idset,"trk.an.root",false);
733 Log(2,"MakeCorrectionMap","%s",name.Data());
734 TFile f(name,"UPDATE");
735
736 TCanvas *c = new TCanvas(Form("GDiff_%s",suff), Form("global_diff_%s",suff), 800,600);
737 c->Divide(2,2);
738 c->cd(1); hDXR.Draw();
739 c->cd(2); hDYR.Draw();
740 c->cd(3); hDTXR.Draw();
741 c->cd(4); hDTYR.Draw();
742 c->Write();
743 f.Close();
744}
float Xmin()
Definition: EdbPVRec.cxx:1044
float Xmax()
Definition: EdbPVRec.cxx:1056
float Ymax()
Definition: EdbPVRec.cxx:1080
float Ymin()
Definition: EdbPVRec.cxx:1068
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
Float_t X() const
Definition: EdbSegP.h:173
Float_t Y() const
Definition: EdbSegP.h:174
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176
p
Definition: testBGReduction_AllMethods.C:8
new TCanvas()

◆ GlobalEff()

void GlobalEff ( EdbPVRec ali,
const char *  suff = "" 
)
748{
749 gROOT->SetStyle("Pub");
750
751 int ntr = ali.Ntracks();
752 int npat = ali.Npatterns();
753 int nseg0 = npat>7 ? 7 : npat;
754
755 int pmin = 57, pmax=0;
756 for(int i=0; i<npat; i++) {
757 int p = ali.GetPattern(i)->ScanID().ePlate;
758 if(p<pmin) pmin=p;
759 if(p>pmax) pmax=p;
760 }
761
762 TH1F hAll("all","StartEnd vs plateID", (pmax-pmin+3), pmin-1, pmax+2 );
763 TH1F hStart("start","start", (pmax-pmin+3), pmin-1, pmax+2 );
764 TH1F hEnd("end","end", (pmax-pmin+3), pmin-1, pmax+2 );
765
766 TH1F hNSeg("nseg","nseg vs plateID", (pmax-pmin+3), pmin-1, pmax+2 );
767
768 TH1F hHoles("holes","holes vs plateID", (pmax-pmin+3), pmin-1, pmax+2 );
769
770 TH1F hFillAbs("FillAbs","FillAbs", (pmax-pmin+3), pmin-1, pmax+2 );
771 TH1F hFillReal("FillReal","plates fill factor", (pmax-pmin+3), pmin-1, pmax+2 );
772
773 TH2F hEff("eff","eff vs theta", 50, 0, 2, 55, 0, 1.1 );
774 TH2F hChi( "Chi","Chi vs plateID", (pmax-pmin+3), pmin-1, pmax+2, 100, 0,3 );
775 TH2F hW( "W", "W vs plateID", (pmax-pmin+3), pmin-1, pmax+2, 40, 0,40 );
776
777 for(int i=0; i<ntr; i++) {
778 EdbTrackP *t = ali.GetTrack(i);
779 int nseg = t->N();
780 for(int j=0; j<nseg; j++) {
781 EdbSegP *s = t->GetSegment(j);
782 int plateid = s->ScanID().ePlate;
783
784 hNSeg.Fill(plateid);
785 hChi.Fill(plateid,s->Chi2());
786 hW.Fill(plateid,s->W());
787
788 if(j>0&&j<nseg-1) hFillReal.Fill(plateid);
789
790 }
791 int pstart = t->GetSegmentFirst()->ScanID().ePlate;
792 int pend = t->GetSegmentLast()->ScanID().ePlate;
793 hStart.Fill(pstart);
794 hEnd.Fill(pend);
795
796 for(int i=pstart; i<=pend; i++) hHoles.Fill(i);
797 for(int i=pstart+1; i<pend; i++) hFillAbs.Fill(i);
798
799 if(nseg>=nseg0) { hEff.Fill( t->Theta(), 1.*(t->N()-2)/(t->Npl()-2) ); }
800 }
801
802 hAll.Add( &hStart ); hAll.Add( &hEnd );
803 hHoles.Add( &hNSeg, -1);
804
805 TH1F *ratio = (TH1F*)(hFillReal.Clone("ratio"));
806 ratio->Divide(&hFillAbs);
807
808 TString name;
809 sproc.MakeFileName(name,idset,"trk.an.root",false);
810 TFile f(name,"UPDATE");
811
812 TCanvas *c = new TCanvas(Form("GEff_%s",suff), Form("global_eff_%s",suff), 900,900);
813 c->Divide(3,3);
814 c->cd(1); hNSeg.Draw();
815 c->cd(4); hHoles.Draw();
816 c->cd(7); { hAll.SetLineColor(kBlack); hAll.Draw(); hStart.SetLineColor(kRed); hStart.Draw("same"); hEnd.SetLineColor(kBlue); hEnd.Draw("same"); }
817 c->cd(2); ratio->Draw();
818 c->cd(5); hChi.ProfileX()->Draw();
819 c->cd(8); hW.ProfileX()->Draw();
820 c->cd(3); hEff.ProfileX()->Draw();
821 c->cd(6); hEff.ProjectionY()->Draw();
822 c->Write();
823
824 TCanvas *cc = new TCanvas(Form("GTr_%s",suff), Form("global_tr_%s",suff), 900,900);
825 cc->Divide(1,3);
826 cc->cd(1)->SetGrid(); hNSeg.Draw();
827 cc->cd(2)->SetGrid(); { hAll.SetLineColor(kBlack); hAll.Draw(); hStart.SetLineColor(kRed); hStart.Draw("same"); hEnd.SetLineColor(kBlue); hEnd.Draw("same"); }
828 cc->cd(3)->SetGrid(); ratio->Draw();
829 cc->Write();
830
831
832 f.Close();
833}

◆ main()

int main ( int  argc,
char *  argv[] 
)
85{
86 if (argc < 2) { print_help_message(); return 0; }
87
88 TEnv cenv("trackanenv");
90 gEDBDEBUGLEVEL = cenv.GetValue("trackan.EdbDebugLevel" , 1 );
91 const char *outdir = cenv.GetValue("trackan.outdir" , "..");
92
93 const char *name=0;
94
95 bool do_global=false;
96 bool do_globV2=false;
97 bool do_cmtest=false;
98
99 for(int i=1; i<argc; i++ ) {
100 char *key = argv[i];
101 if(!strncmp(key,"-set=",5))
102 {
103 if(strlen(key)>5) if(idset.Set(key+5)) do_set=true;
104 }
105 if(!strncmp(key,"-file=",6))
106 {
107 if(strlen(key)>6) { name=(key+6); do_file=true;}
108 }
109 if(!strncmp(key,"-divide=",8))
110 {
111 if(strlen(key)>8) {
112 int nx=0,ny=0;
113 if(2 == sscanf(key+8,"%dx%d",&nx,&ny) ) {
114 cenv.SetValue("trackan.NX" , nx);
115 cenv.SetValue("trackan.NY" , ny);
116 }
117 }
118 }
119 if(!strncmp(key,"-corraff",8))
120 {
121 do_corraff=true;
122 }
123 else if(!strncmp(key,"-momentum",9))
124 {
125 do_momentum=true;
126 }
127 else if(!strncmp(key,"-global",7))
128 {
129 do_global=true;
130 }
131 else if(!strncmp(key,"-globV2",7))
132 {
133 do_globV2=true;
134 }
135 else if(!strncmp(key,"-cmtest",7))
136 {
137 do_cmtest=true;
138 }
139 else if(!strncmp(key,"-v=",3))
140 {
141 if(strlen(key)>3) gEDBDEBUGLEVEL = atoi(key+3);
142 }
143 }
144
146 cenv.ReadFile( "trackan.rootrc" ,kEnvLocal);
147 //cenv.SetValue("emtra.outdir" , outdir);
148 cenv.WriteFile("trackan.save.rootrc");
149
150 const char *cut = cenv.GetValue("trackan.read_cut" , "1");
151
154 else if(do_file) sproc.ReadTracksTree( name ,ali, cut );
155 //ali.Print();
156
158 else if(do_global) DoGlobalCorr(ali,cenv);
159 else if(do_globV2) DoGlobalCorrV2(ali,cenv);
160 else if(do_cmtest) MakeCorrectionMap_test(ali,cenv);
162
163 //EdbDataProc::MakeTracksTree( *(ali.eTracks), 0., 0., "al.trk.root" );
164
165 return 0;
166}
bool Set(const char *id_string)
Definition: EdbID.cxx:19
Definition: EdbPVRec.h:148
int ReadTracksTree(EdbID id, EdbPVRec &ali, TCut cut="1")
Definition: EdbScanProc.cxx:604
TString eProcDirClient
directory path for root data
Definition: EdbScanProc.h:14
const char * outdir
Definition: emrec.cpp:37
void DoGlobalCorr(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:477
void set_default(TEnv &cenv)
Definition: emtrackan.cpp:54
void MakeCorrectionMap_test(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:326
bool do_file
Definition: emtrackan.cpp:77
void print_help_message()
Definition: emtrackan.cpp:36
bool do_momentum
Definition: emtrackan.cpp:79
void CheckMom(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:855
bool MakeCorrectionMap(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:169
void DoGlobalCorrV2(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:578
TCut cut
Definition: check_shower.C:6
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ MakeCorrectionMap()

bool MakeCorrectionMap ( EdbPVRec ali,
TEnv &  cenv 
)
170{
171 float xmin = ali.Xmin();
172 float xmax = ali.Xmax();
173 float ymin = ali.Ymin();
174 float ymax = ali.Ymax();
175
176 EdbPattern *patMin = ali.GetPatternZLowestHighest(1); // get pattern with lowest z
177 EdbPattern *patMax = ali.GetPatternZLowestHighest(0); // get pattern with highest z
178
179 bool direction = 0; // 1-increaseZ, 2-decreaseZ
180 int idstart,idend, step;
181 if(direction) {
182 idstart = patMin->ID();
183 idend = patMax->ID();
184 }
185 else {
186 idstart = patMax->ID();
187 idend = patMin->ID();
188 }
189 step = idstart<idend?1:-1;
190
191 int ref_pl = ali.GetPattern(idend)->ScanID().ePlate;
192
193 int npat = ali.Npatterns();
194 if(npat<2) return 0;
195 if(Abs(idend-idstart)+1 != npat) return 0;
196 int idmap[npat]; int j=idstart;
197 for(int i=0; i<npat; i++) {
198 idmap[i]=j; j+=step;
199 }
200
201 EdbScanSet *ss =0;
203
204 int NX = cenv.GetValue("trackan.NX" , 0);
205 int NY = cenv.GetValue("trackan.NY" , 0);
206
207 int NCPMIN = cenv.GetValue("trackan.NCPmin" , 50);
208
209 EdbCorrectionMapper cmtmp[npat-1];
211
212 for(int i=0; i<npat-1; i++) {
213 EdbPattern *p1 = ali.GetPattern(idmap[i]);
214 EdbPattern *p2 = ali.GetPattern(idmap[i+1]);
215 cm[i].eID1 = p1->ScanID();
216 cm[i].eID2 = p2->ScanID();
217 cm[i].eZ1 = p1->Z();
218 cm[i].eZ2 = p2->Z();
219 cm[i].eNcpMin = NCPMIN;
220
221 if(NX*NY) cm[i].InitMap( NX,xmin, xmax, NY, ymin,ymax);
222 if(NX*NY) cmtmp[i].InitMap( NX,xmin, xmax, NY, ymin,ymax);
223
224 cm[i].eHdty_ty.InitH2( 50,-2,2, 50,-0.1,0.1 );
225 cm[i].eHshr.InitH1( 100, 0.8, 1.2 );
226
227 cm[i].eHdxy.InitH2( 61,-60.5,60.5, 61,-60.5,60.5 );
228 cm[i].eHdtxy.InitH2( 41,-0.105,0.105, 41,-0.105,0.105 );
229 cm[i].eHdz.InitH1( 50,-100,100 );
230
231 cm[i].eHxy1.InitH2(100,xmin, xmax, 100, ymin,ymax);
232 cm[i].eHtxty1.InitH2(100,-2, 2, 100, -2,2);
233 cm[i].eHxy2.InitH2(100,xmin, xmax, 100, ymin,ymax);
234 cm[i].eHtxty2.InitH2(100,-2, 2, 100, -2,2);
235 }
236
237
238 int ntr = ali.Ntracks();
239
240 for(int i=0; i<ntr; i++) {
241 EdbTrackP *t = ali.GetTrack(i);
242 int nseg = t->N();
243 if(nseg<2) continue;
244
245 for(int j=0; j<nseg-1; j++) {
246 EdbSegP *s1,*s2;
247 if(direction) {
248 s1 = t->GetSegment(j);
249 s2 = t->GetSegment(j+1);
250 }
251 else {
252 s2 = t->GetSegment(j);
253 s1 = t->GetSegment(j+1);
254 }
255 if( Abs(s2->PID()-s1->PID())!=1 ) continue;
256
257 cm[idmap[s1->PID()]].Fill(*s1,*s2); // fill general hists
258 cmtmp[idmap[s1->PID()]].AddSegCouple(s1,s2);
259 }
260 }
261
262 //EnrichPoorBins:
263 for(int i=0; i<npat-1; i++) {
264 int nbin = cmtmp[i].eMapAl.Ncell();
265 for(int j=0; j<nbin; j++) {
266 EdbCorrectionBin *bin = cm[i].GetBin(j);
267 EdbCorrectionBin *bint = cmtmp[i].GetBin(j);
268
269 cm[i].AddBin(*bint); bin->AddBin(*bint); // TODO enrichment algorithm is disabled now
270/* if(bint->eAl.Ncp() >= NCPMIN) { cm[i].AddBin(*bint); bin->AddBin(*bint); }
271 else {
272 cm[i].AddBin(*bint);
273 TObjArray arr;
274 int ne = cmtmp[i].eMapAl.SelectObjectsCJ(j,1,arr);
275 for(int ie=0; ie<ne; ie++) {
276 EdbCorrectionBin *bine = (EdbCorrectionBin *)(arr.At(ie));
277 bin->AddBin(*bine);
278 }
279 }*/
280 }
281 if(nbin<1) cm[i].AddBin( cmtmp[i] );
282 }
283
284 for(int i=0; i<npat-1; i++) {
285 cm[i].SetCorrDZ();
286 cm[i].CalculateCorrections();
287 cm[i].MakeCorrectionsTable();
288 }
289
290
291 TString name;
292 sproc.MakeFileName(name,idset,"trk.an.root",false);
293 Log(2,"MakeCorrectionMap","%s",name.Data());
294 TFile f(name,"RECREATE");
295
296 if(ss) {
297 for(int i=0; i<npat-1; i++) {
298 ss->eReferencePlate=ref_pl;
299
300 if(NX*NY) cm[i].UpdateLayerWithLocalCorr( cm[i].eLayer );
301
302 cm[i].eLayer.Print();
303
304 ss->UpdateBrickWithP2P( cm[i].eLayer, cm[i].eID1.ePlate, cm[i].eID2.ePlate );
305
306 gROOT->SetBatch();
307 TCanvas *csum = cm[i].DrawSum(Form("%d",i));
308 csum->Write();
309 TCanvas *cdiff = cm[i].DrawMap(cm[i].eMap, Form("diff_%d",i));
310 cdiff->Write();
311 TCanvas *cabs = cm[i].DrawMap( ss->GetPlate(cm[i].eID1.ePlate)->Map(), Form("%d",i));
312 cabs->Write();
313
314 }
315 }
316 f.Close();
317
318 printf("********************write set\n");
319
321
322 return 1;
323}
corrections bin
Definition: EdbCorrectionMapper.h:11
void AddBin(EdbCorrectionBin &bin)
Definition: EdbCorrectionMapper.cxx:37
EdbLayer eLayer
Definition: EdbCorrectionMapper.h:16
void CalculateCorrections()
Definition: EdbCorrectionMapper.cxx:93
EdbID eID1
Definition: EdbCorrectionMapper.h:47
void AddSegCouple(EdbSegP *s1, EdbSegP *s2)
Definition: EdbCorrectionMapper.cxx:298
TCanvas * DrawMap(EdbCorrectionMap &map, const char *suffix="")
Definition: EdbCorrectionMapper.cxx:167
EdbCell2 eMapAl
working object with local alignments
Definition: EdbCorrectionMapper.h:34
EdbH2 eHtxty1
Definition: EdbCorrectionMapper.h:45
EdbH2 eHdty_ty
Definition: EdbCorrectionMapper.h:42
EdbH1 eHshr
Definition: EdbCorrectionMapper.h:40
void MakeCorrectionsTable()
Definition: EdbCorrectionMapper.cxx:248
EdbH2 eHxy2
Definition: EdbCorrectionMapper.h:44
EdbH1 eHdz
dz
Definition: EdbCorrectionMapper.h:39
void SetCorrDZ()
Definition: EdbCorrectionMapper.cxx:68
int eNcpMin
min number of coincidences to accept correction
Definition: EdbCorrectionMapper.h:50
void UpdateLayerWithLocalCorr(EdbLayer &la)
Definition: EdbCorrectionMapper.cxx:242
EdbH2 eHdtxy
dtxdty
Definition: EdbCorrectionMapper.h:38
EdbH2 eHtxty2
Definition: EdbCorrectionMapper.h:45
float eZ1
Definition: EdbCorrectionMapper.h:48
int InitMap(int nx, float minx, float maxx, int ny, float miny, float maxy)
Definition: EdbCorrectionMapper.cxx:284
TCanvas * DrawSum(const char *suffix)
Definition: EdbCorrectionMapper.cxx:129
EdbH2 eHxy1
Definition: EdbCorrectionMapper.h:44
float eZ2
Definition: EdbCorrectionMapper.h:48
EdbID eID2
Definition: EdbCorrectionMapper.h:47
EdbH2 eHdxy
dxdy
Definition: EdbCorrectionMapper.h:37
void Fill(EdbSegP &s1, EdbSegP &s2)
Definition: EdbCorrectionMapper.cxx:306
EdbCorrectionBin * GetBin(int i)
Definition: EdbCorrectionMapper.h:57
int InitH1(const EdbH1 &h)
Definition: EdbCell1.h:38
int Ncell() const
Definition: EdbCell2.h:49
int InitH2(const EdbH2 &h)
Definition: EdbCell2.cpp:78
void Print()
Definition: EdbLayer.cxx:149
int ID() const
Definition: EdbPattern.h:319
EdbPattern * GetPatternZLowestHighest(Bool_t lowestZ=kTRUE) const
Definition: EdbPattern.cxx:1816
Int_t PID() const
Definition: EdbSegP.h:148

◆ MakeCorrectionMap_test()

void MakeCorrectionMap_test ( EdbPVRec ali,
TEnv &  cenv 
)
327{
328 int NCPMIN = cenv.GetValue("trackan.NCPmin" , 50);
329 int npat = ali.Npatterns();
330 int ntr = ali.Ntracks();
331 int NX = cenv.GetValue("trackan.NX" , 0);
332 int NY = cenv.GetValue("trackan.NY" , 0);
333 Log(2,"MakeCorrectionMap_test","with %d tracks and %d patterns map: %d x %d",ntr, npat, NX,NY);
334 if(npat<2) return;
335 if(ntr<NCPMIN) return;
336 if(!NX*NY) return;
337
339 struct PatPlat{
340 EdbPattern *pat;
341 EdbPlateP *pl;
343 };
344 PatPlat sequence[npat];
345 for( int ipat=0; ipat<npat; ipat++ ) //TODO: select direction here
346 {
347 sequence[ipat].pat = ali.GetPattern(ipat); sequence[ipat].pat->SetPID(ipat);
348 sequence[ipat].pl = ss->GetPlate( sequence[ipat].pat->ScanID().ePlate );
349 }
350
351 float xmin = ali.Xmin();
352 float xmax = ali.Xmax();
353 float ymin = ali.Ymin();
354 float ymax = ali.Ymax();
355 bool trFlag = cenv.GetValue("trackan.global.trFlag" , 0);
356
357 for(int i=0; i<npat-1; i++) {
358 EdbPattern *p1 = sequence[i].pat;
359 EdbPattern *p2 = sequence[i+1].pat;
360 EdbCorrectionMapper &cm = sequence[i].cm;
361 cm.eID1 = p1->ScanID();
362 cm.eID2 = p2->ScanID();
363 cm.eZ1 = p1->Z();
364 cm.eZ2 = p2->Z();
365 cm.eNcpMin = NCPMIN;
366
367 cm.InitMap( NX,xmin, xmax, NY, ymin,ymax);
368 /*
369 cm[i].eHdty_ty.InitH2( 50,-2,2, 50,-0.1,0.1 );
370 cm[i].eHshr.InitH1( 100, 0.8, 1.2 );
371 cm[i].eHdxy.InitH2( 61,-60.5,60.5, 61,-60.5,60.5 );
372 cm[i].eHdtxy.InitH2( 41,-0.105,0.105, 41,-0.105,0.105 );
373 cm[i].eHdz.InitH1( 50,-100,100 );
374 cm[i].eHxy1.InitH2(100,xmin, xmax, 100, ymin,ymax);
375 cm[i].eHtxty1.InitH2(100,-2, 2, 100, -2,2);
376 cm[i].eHxy2.InitH2(100,xmin, xmax, 100, ymin,ymax);
377 cm[i].eHtxty2.InitH2(100,-2, 2, 100, -2,2);
378 */
379 for(int itr=0; itr<ntr; itr++) {
380 EdbTrackP *t = ali.GetTrack(itr);
381 if(trFlag!=0) if( trFlag!=t->Flag() ) continue;
382 EdbSegP *s1=0, *s2=0;
383 for(int j=0; j<t->N(); j++) {
384 EdbSegP *s = t->GetSegment(j);
385 if(s->PID()==p1->PID()) s1=s;
386 if(s->PID()==p2->PID()) s2=s;
387 }
388 if(s1&&s2) { cm.AddSegCouple(s1,s2); }
389 }
390 }
391 sequence[npat-1].cm.InitMap( NX,xmin, xmax, NY, ymin,ymax);
392
393 for(int i=0; i<npat-1; i++)
394 {
395 int nbin = sequence[i].cm.eMapAl.Ncell();
396 for(int j=0;j<nbin; j++)
397 {
398 printf("%s -> %s dz: %f \n",
399 sequence[i].cm.eID1.AsString(),
400 sequence[i].cm.eID2.AsString(),
401 sequence[i].cm.eZ2-sequence[i].cm.eZ1
402 );
403 EdbAlignmentV &al = sequence[i].cm.GetBin(j)->eAl;
404 EdbAlignmentV &aln = sequence[i+1].cm.GetBin(j)->eAl;
405 if(al.Ncp()>=NCPMIN)
406 {
407 al.CalcAffFull(); // update coord of side0 and ang of side1
409 }
410 }
411 }
412
413
414 for(int j=0;j<NX*NY; j++)
415 {
416 for( int i=0; i<npat; i++ ) {
417 EdbAlignmentV &al = sequence[i].cm.GetBin(j)->eAl;
418 EdbLayer *l = sequence[i].cm.eMap.GetLayer(j);
419
420 float dzcorr= al.eCorrL[0].Zcorr()- (sequence[i].cm.eZ2-sequence[i].cm.eZ1);
422 l->SetNcp( al.Ncp() );
423
424 for( int ii=0; ii<=i; ii++ ) {
425 EdbLayer *ll = sequence[ii].cm.eMap.GetLayer(j);
426 ll->GetAffineXY()->Transform( al.eCorrL[0].GetAffineXY() );
427 ll->SetZcorr( ll->Zcorr() + dzcorr );
428 }
429 }
430 }
431
432 for( int i=0; i<npat; i++ ) {
433 printf( Form("\n************** %s -> %s\n",
434 sequence[i].cm.eID1.AsString(),
435 sequence[i].cm.eID2.AsString()) );
436 sequence[i].pl->ApplyCorrectionsLocal(sequence[i].cm.eMap);
437 //sequence[i].pl->Print();
438 }
439
441
442 //ss->Print();
443 /*
444 TString name;
445 sproc.MakeFileName(name,idset,"trk.an.root",false);
446 Log(2,"MakeCorrectionMap","%s",name.Data());
447 TFile f(name,"RECREATE");
448
449 if(ss) {
450 for(int i=0; i<npat-1; i++) {
451 ss->eReferencePlate=ref_pl;
452
453 if(NX*NY) cm[i].UpdateLayerWithLocalCorr( cm[i].eLayer );
454
455 cm[i].eLayer.Print();
456
457 ss->UpdateBrickWithP2P( cm[i].eLayer, cm[i].eID1.ePlate, cm[i].eID2.ePlate );
458
459 gROOT->SetBatch();
460 TCanvas *csum = cm[i].DrawSum(Form("%d",i));
461 csum->Write();
462 TCanvas *cdiff = cm[i].DrawMap(cm[i].eMap, Form("diff_%d",i));
463 cdiff->Write();
464 TCanvas *cabs = cm[i].DrawMap( ss->GetPlate(cm[i].eID1.ePlate)->Map(), Form("%d",i));
465 cabs->Write();
466 }
467 }
468 f.Close();
469
470 printf("********************write set\n");
471
472 if(do_corraff) if(ss) sproc.WriteScanSet(idset,*ss);
473 */
474}
Int_t Ncp()
Functions applied to the selected parallel arrays.
Definition: EdbAlignmentV.h:76
Int_t CalcAffFull()
Definition: EdbAlignmentV.cxx:614
EdbCorrectionMap eMap
result: corrections map
Definition: EdbCorrectionMapper.h:35
Definition: EdbLayer.h:39
float Zcorr() const
Definition: EdbLayer.h:90
EdbAffine2D * GetAffineXY()
Definition: EdbLayer.h:119
void SetNcp(int n)
Definition: EdbLayer.h:95

◆ print_help_message()

void print_help_message ( )
37{
38 cout<< "\nUsage: \n\t emtrackan -set=ID [-corraff -divide=NXxNY -o=DATA_DIRECTORY -v=DEBUG] \n";
39 cout<< "\t emtrackan -file=File [-o=DATA_DIRECTORY -v=DEBUG] \n\n";
40 cout<< "\t Analyse the tracks tree and produce the report file: ID.trk.an.root\n";
41 cout<< "\t\t -corraff - save corrections to set.root file\n";
42 cout<< "\t\t -global - global corrections using long tracks to unbend the full set\n";
43 cout<< "\t\t -globV2 - global corrections using long tracks to unbend the full set NEW!\n";
44 cout<< "\t\t -momentum - tracks momentum estimation\n";
45 cout<< "\t\t -divide=NxM - divide set into into NxM zones and calculate local correction in each zone\n";
46 cout<< "\t\t the following tracking may use this correction if the parameter fedra.track.do_local_corr in track.rootrc is set to 1\n";
47 cout<< "\t\t normally is required several iterations (>3) like emtra.../emtrackan... to converge the local corrections. \n";
48 cout<< "\t\t Map granularity NxM must be the same for all iterations\n";
49 cout<< "\n\t Example: emtrackan -set=700000.0.1.0 -divide=10x10 -corraff -v=2 \n";
50 cout<<endl;
51}

◆ ReadFunParameters() [1/2]

bool ReadFunParameters ( const char *  key)

◆ ReadFunParameters() [2/2]

int ReadFunParameters ( const char *  line,
TF1 &  fun 
)
836 {
837 const int Npars=10;
838
839 double p[Npars];
840 int NparsRead=0;
841 std::string lineString(line);
842 size_t pos=0;
843
844 for (int i = 0; i < Npars; ++i){
845 p[i]=0;
846 if(sscanf(line+pos,"%lg",p+i)<=0)break;
847 NparsRead++;
848 // printf("Read parameter#%d=%g\n",i,p[i]);
849 pos=lineString.find_first_of(' ',pos+1);
850 }
851 fun.SetParameters(p);
852 return NparsRead;
853}

◆ set_default()

void set_default ( TEnv &  cenv)
55{
56 // default parameters for the new linking
57
58 cenv.SetValue("trackan.outdir" , "..");
59 cenv.SetValue("trackan.read_cut" , "1");
60 cenv.SetValue("trackan.NCPmin" , "50");
61 cenv.SetValue("trackan.EdbDebugLevel" , 1 );
62 cenv.SetValue("trackan.DoRefitLine" , 1 );
63 cenv.SetValue("trackan.global.doXYcorr" , 1);
64 cenv.SetValue("trackan.global.doTXTYcorr" , 1);
65 cenv.SetValue("trackan.global.doZcorr" , 1);
66 cenv.SetValue("trackan.MomEst.Alg",0);
67 cenv.SetValue("trackan.MomEst.DT", "0.0021 0.0054 0");
68 cenv.SetValue("trackan.MomEst.DTx","0.0021 0.0093 0");
69 cenv.SetValue("trackan.MomEst.DTy","0.0021 0 0");
70 cenv.SetValue("trackan.MomEst.X0", 5600);
71 cenv.SetValue("trackan.MomEst.M", 0.13957);
72 cenv.SetValue("trackan.global.trFlag", 0);
73 cenv.SetValue("trackan.global.noScale", 0);
74}

Variable Documentation

◆ do_corraff

bool do_corraff = false

◆ do_file

bool do_file = false

◆ do_momentum

bool do_momentum = false

◆ do_set

bool do_set = false

◆ idset

EdbID idset

◆ sproc

EdbScanProc sproc