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 <TH3F.h>
#include "EdbLog.h"
#include "EdbScanProc.h"
#include "EdbAlignmentV.h"
#include "EdbTrackFitter.h"
#include "EdbCorrectionMapper.h"
#include "EdbCouplesTree.h"
#include "EdbMomentumEstimator.h"
#include "EdbUnbender.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 DoGlobalCorr3 (EdbPVRec &ali, EdbScanSet &ss, TEnv &cenv, int offset, int step, int cycle)
 
void DoGlobalCorrV2 (EdbPVRec &ali, TEnv &cenv)
 
void FillEfficiency (int plate, EdbSegP *s1, EdbSegP *s2, EdbSegP *s3, float lm[4], TH2F &h13, TH2F &h2)
 
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 = "" 
)
917 {
918  int ntr = ali.Ntracks();
919  Log(2,"CheckGap","for %d tracks",ntr);
920  //TH1F hGapN("gapN","GapN", 20, 0, 20 );
921  //TH1F hGapZ("gapZ","GapZ", 200, 0, 20000 );
922  //TH2F hDXfwd("DXfwd","DXfwd vs gap", 20, 0,20, 100, -200.,200. );
923  //TH2F hDYfwd("DYfwd","DYfwd vs gap", 20, 0,20, 100, -200.,200. );
924  //TH2F hDXbwd("DXbwd","DXbwd vs gap", 20, 0,20, 100, -200.,200. );
925  //TH2F hDYbwd("DYbwd","DYbwd vs gap", 20, 0,20, 100, -200.,200. );
926 
927  TString name;
928  sproc.MakeFileName(name,idset,"trk.an.root",false);
929  TFile f(name,"UPDATE");
930 
931  EdbCouplesTree cpt;
932  cpt.InitCouplesTree("gaps", 0, "WRITE");
933 
934  int gapcnt=0;
935  for(int i=0; i<ntr; i++) {
936  EdbTrackP *t = ali.GetTrack(i);
937  int nseg = t->N();
938  for(int j=0; j<nseg-1; j++) {
939  EdbSegP *s = t->GetSegment(j);
940  EdbSegP *sn = t->GetSegment(j+1);
941  //int ngap = sn->ScanID().ePlate - s->ScanID().ePlate;
942  //float dz = sn->Z() - s->Z();
943  //float dxfwd = sn->X() - (s->X() + s->TX()*dz);
944  //float dyfwd = sn->Y() - (s->Y() + s->TY()*dz);
945  //float dxbwd = s->X() - (sn->X() - sn->TX()*dz);
946  //float dybwd = s->Y() - (sn->Y() - sn->TY()*dz);
947 
948  cpt.Fill(s,sn,t);
949  gapcnt++;
950  //hGapN.Fill(Abs(ngap));
951  //hGapZ.Fill(Abs(dz));
952  //hDXfwd.Fill( Abs(ngap) , dxfwd );
953  //hDYfwd.Fill( Abs(ngap) , dyfwd );
954  //hDXbwd.Fill( Abs(ngap) , dxbwd );
955  //hDYbwd.Fill( Abs(ngap) , dybwd );
956  }
957  }
958  /*
959  * TCanvas *c = new TCanvas(Form("Gap_%s",suff), Form("Gap_%s",suff), 900,900);
960  * c->Divide(2,3);
961  * c->cd(1)->SetLogy(); hGapN.Draw();
962  * c->cd(2)->SetLogy(); hGapZ.Draw();
963  * c->cd(3)->SetLogz(); hDXfwd.Draw("colz");
964  * c->cd(4)->SetLogz(); hDYfwd.Draw("colz");
965  * c->cd(5)->SetLogz(); hDXbwd.Draw("colz");
966  * c->cd(6)->SetLogz(); hDYbwd.Draw("colz");
967  *
968  * c->Write();
969  */
970  cpt.Close();
971  Log(2,"CheckGap"," %d gaps saved",gapcnt);
972  //f.Close();
973 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
FILE * f
Definition: RecDispMC.C:150
EdbPVRec * ali
Definition: align.C:1
TTree * t
Definition: check_shower.C:4
Definition: EdbCouplesTree.h:17
bool InitCouplesTree(const char *name="couples", const char *fname=0, Option_t *mode="READ")
Definition: EdbCouplesTree.cxx:87
void Close()
Definition: EdbCouplesTree.cxx:70
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:200
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
Int_t Ntracks() const
Definition: EdbPVRec.h:203
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1885
Definition: EdbSegP.h:18
Definition: EdbPattern.h:118
EdbID idset
Definition: emtrackan.cpp:83
EdbScanProc sproc
Definition: emtrackan.cpp:84
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
EdbSegP * s
Definition: tlg2pattern.C:32

◆ CheckMom()

void CheckMom ( EdbPVRec ali,
TEnv &  cenv 
)
880 {
881  int ntr = ali.Ntracks();
882  Log(2,"Check momentum","for %d tracks",ntr);
883 
885 
886  //get fitter parameters from TEnv
887  TString line;
888  line=cenv.GetValue("trackan.MomEst.DT","0.0021 0.0054 0");
889  if(ReadFunParameters(line.Data(),mes.eDTsErrorFun)<=0) throw Form("Wrong line for \"trackan.MomEst.DT\":\'%s\'",line.Data());
890  line=cenv.GetValue("trackan.MomEst.DTx","0.0021 0.0093 0");
891  if(ReadFunParameters(line.Data(),mes.eDTxErrorFun)<=0) throw Form("Wrong line for \"trackan.MomEst.DTx\":\'%s\'",line.Data());
892  line=cenv.GetValue("trackan.MomEst.DTy","0.0021 0 0");
893  if(ReadFunParameters(line.Data(),mes.eDTyErrorFun)<=0) throw Form("Wrong line for \"trackan.MomEst.DTy\":\'%s\'",line.Data());
894  mes.eAlg=cenv.GetValue("trackan.MomEst.Alg",0);
895  mes.eX0=cenv.GetValue("trackan.MomEst.X0",5600);
896  mes.eM=cenv.GetValue("trackan.MomEst.M",0.13957);
897  mes.Print();
898  //mes.eDTx0=0.001; mes.eDTx1=0; mes.eDTx2=0;
899  //mes.eDTy0=0.001; mes.eDTy1=0; mes.eDTy2=0;
900 
901  TObjArray fitted_tracks;
902 
903  for(int i=0; i<ntr; i++) {
904  EdbTrackP *t = ali.GetTrack(i);
905  //int nseg = t->N();
906  // Float_t P = mes.PMSang(*t);
907  Float_t P = mes.PMS(*t);
908  t->SetP(P);
909  fitted_tracks.Add(t);
910  }
911 
912  EdbDataProc::MakeTracksTree( fitted_tracks, 0., 0., Form("b%s.trk.mom.root", idset.AsString()) );
913 }
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2511
char * AsString() const
Definition: EdbID.cxx:24
Definition: EdbMomentumEstimator.h:20
int eAlg
Definition: EdbMomentumEstimator.h:24
TF1 eDTxErrorFun
Definition: EdbMomentumEstimator.h:30
TF1 eDTyErrorFun
Definition: EdbMomentumEstimator.h:31
float PMS(EdbTrackP &tr)
Definition: EdbMomentumEstimator.cxx:121
TF1 eDTsErrorFun
Definition: EdbMomentumEstimator.h:32
void Print()
Definition: EdbMomentumEstimator.cxx:90
float eX0
Definition: EdbTrackFitter.h:22
float eM
Definition: EdbTrackFitter.h:23
TEnv cenv("emrec")
struct @7 P
bool ReadFunParameters(const char *key)

◆ DoGlobalCorr()

void DoGlobalCorr ( EdbPVRec ali,
TEnv &  cenv 
)
492 {
493  int ntr = ali.Ntracks();
494  int npat = ali.Npatterns();
495  Log(2,"DoGlobalCorr","with %d tracks and %d patterns",ntr, npat);
496 
497  cenv.Print();
498  bool doRefitLine= cenv.GetValue("trackan.DoRefitLine" , 1);
499  bool doXYcorr = cenv.GetValue("trackan.global.doXYcorr" , 1);
500  bool doTXTYcorr = cenv.GetValue("trackan.global.doTXTYcorr" , 1);
501  bool doZcorr = cenv.GetValue("trackan.global.doZcorr" , 1);
502  bool trFlag = cenv.GetValue("trackan.global.trFlag" , 0);
503  bool noScale = cenv.GetValue("trackan.global.noScale" , 0);
504 
505 
506  GlobalDiff(ali,"before_fit");
507  CheckGap(ali,"before_fit");
508 
509  if(doRefitLine) {
510  EdbTrackFitter fitter;
511  for(int i=0; i<ntr; i++) {
512  EdbTrackP *t = ali.GetTrack(i);
513  fitter.FitTrackLine(*t);
514  }
515  }
516 
517  GlobalDiff(ali,"before_corr");
518 
520 
521  for(int i=0; i<ntr; i++) {
522  EdbTrackP *t = ali.GetTrack(i);
523  if(trFlag!=0) if( trFlag!=t->Flag() ) continue;
524  int nseg = t->N();
525  for(int j=0; j<nseg; j++) {
526  EdbSegP *s = t->GetSegment(j);
527  EdbSegP *sf = t->GetSegmentF(j);
528  cm[s->PID()].FillS(s,sf);
529  }
530  }
531 
532  if(doXYcorr) {
533  for(int i=0; i<npat; i++) {
534  int n=0;
535  if(noScale) n = cm[i].eAl.CalculateAffXYTurn( *(cm[i].eAl.eCorrL[0].GetAffineXY()) );
536  else n = cm[i].eAl.CalculateAffXY( *(cm[i].eAl.eCorrL[0].GetAffineXY()) );
537  Log(2,"CalculateAffXY","%6d %s", n, cm[i].eAl.eCorrL[0].GetAffineXY()->AsString() );
538  }
539 
540  for(int i=0; i<npat; i++) {
541  ali.GetPattern(i)->Transform( cm[i].eAl.eCorrL[0].GetAffineXY() );
542  }
543  GlobalDiff(ali,"afterXY");
544  }
545 
546  if(doTXTYcorr) {
547  for(int i=0; i<npat; i++) {
548  int n = cm[i].eAl.CalculateAffTXTY( *(cm[i].eAl.eCorrL[0].GetAffineTXTY()) );
549  Log(2,"CalculateAffTXTY","%6d %s", n, cm[i].eAl.eCorrL[0].GetAffineTXTY()->AsString() );
550  }
551 
552  for(int i=0; i<npat; i++) {
553  ali.GetPattern(i)->TransformA( cm[i].eAl.eCorrL[0].GetAffineTXTY() );
554  }
555 
556  GlobalDiff(ali,"afterTXTY");
557  }
558 
559  if(doZcorr) {
560  GlobalDiff(ali,"beforeDZ");
561  for(int i=0; i<npat; i++)
562  {
563  float dz = cm[i].eAl.FineCorrZ();
564  cm[i].eAl.eCorrL[0].SetZcorr(dz);
565  printf("%d oldz = %f dz = %f \n",i, ali.GetPattern(i)->Z(), dz );
566  ali.GetPattern(i)->ProjectTo(dz);
567  }
568  GlobalDiff(ali,"afterDZ");
569  }
570 
571  int plate_pid[npat];
572  for(int i=0; i<npat; i++) {
573  plate_pid[i] = ali.GetPattern(i)->ScanID().ePlate;
574  }
575 
576  EdbScanSet *ss =0;
578 
579  for(int i=0; i<npat; i++) {
580  EdbPlateP *plate = ss->GetPlate( plate_pid[i] );
581  plate->ApplyCorrections( cm[i].eAl.eCorrL[0] );
582  }
583 
584  GlobalEff(ali,"a");
585 
587 
588 }
brick dz
Definition: RecDispMC.C:107
Int_t npat
Definition: Xi2HatStartScript.C:33
Int_t CalculateAffXY(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:97
EdbLayer eCorrL[2]
Definition: EdbAlignmentV.h:25
Int_t CalculateAffTXTY(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:98
Int_t CalculateAffXYTurn(EdbAffine2D &aff)
Definition: EdbAlignmentV.h:96
float FineCorrZ()
Definition: EdbAlignmentV.h:91
EdbAlignmentV eAl
Definition: EdbCorrectionMapper.h:14
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:107
EdbID ScanID() const
Definition: EdbPattern.h:339
Int_t Npatterns() const
Definition: EdbPattern.h:380
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1887
Definition: EdbBrick.h:13
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:154
int WriteScanSet(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1467
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1521
Definition: EdbScanSet.h:11
Int_t PID() const
Definition: EdbSegP.h:145
Float_t Z() const
Definition: EdbPattern.h:87
void TransformA(const EdbAffine2D *affA)
Definition: EdbPattern.cxx:367
void ProjectTo(const float dz)
Definition: EdbPattern.cxx:311
Definition: EdbTrackFitter.h:16
int FitTrackLine(EdbTrackP &tr)
Definition: EdbTrackFitter.cxx:519
void GlobalEff(EdbPVRec &ali, const char *suff)
Definition: emtrackan.cpp:772
void CheckGap(EdbPVRec &ali, const char *suff)
Definition: emtrackan.cpp:916
bool do_set
Definition: emtrackan.cpp:79
void GlobalDiff(EdbPVRec &ali, const char *suff)
Definition: emtrackan.cpp:720
bool do_corraff
Definition: emtrackan.cpp:81
ss
Definition: energy.C:62
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1

◆ DoGlobalCorr3()

void DoGlobalCorr3 ( EdbPVRec ali,
EdbScanSet ss,
TEnv &  cenv,
int  offset,
int  step,
int  cycle 
)

◆ DoGlobalCorrV2()

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

◆ FillEfficiency()

void FillEfficiency ( int  plate,
EdbSegP s1,
EdbSegP s2,
EdbSegP s3,
float  lm[4],
TH2F &  h13,
TH2F &  h2 
)
709 {
710  if(s1&&s3)
711  if(s1->IsInside(lm[0],lm[1],lm[2],lm[3]) && s3->IsInside(lm[0],lm[1],lm[2],lm[3]) )
712  {
713  h13.Fill( plate, (s3->Theta()+s1->Theta())/2.);
714  if(s2) if(s2->IsInside(lm[0],lm[1],lm[2],lm[3]) )
715  h2.Fill( plate, s2->Theta() );
716  }
717 }
bool IsInside(float xmin, float xmax, float ymin, float ymax) const
Definition: EdbSegP.cxx:299
Float_t Theta() const
Definition: EdbSegP.h:181
TH1F * h2
Definition: energy.C:19

◆ GlobalDiff()

void GlobalDiff ( EdbPVRec ali,
const char *  suff = "" 
)
721 {
722  int ntr = ali.Ntracks();
723  int npat = ali.Npatterns();
724  float xmin = ali.Xmin();
725  float xmax = ali.Xmax();
726  float ymin = ali.Ymin();
727  float ymax = ali.Ymax();
728 
729  int pmin = 512, pmax=0;
730  for(int i=0; i<npat; i++) {
731  int p = ali.GetPattern(i)->ScanID().ePlate;
732  if(p<pmin) pmin=p;
733  if(p>pmax) pmax=p;
734  }
735 
736  TH2F hDXR("dxr","dxr vs x", (pmax-pmin+3)*100, pmin-1, pmax+2, 200, -200, 200 );
737  TH2F hDYR("dyr","dyr vs y", (pmax-pmin+3)*100, pmin-1, pmax+2, 200, -200, 200 );
738  TH2F hDTXR("dtxr","dtxr vs x", (pmax-pmin+3)*100, pmin-1, pmax+2, 140, -0.07, 0.07 );
739  TH2F hDTYR("dtyr","dtyr vs y", (pmax-pmin+3)*100, pmin-1, pmax+2, 140, -0.07, 0.07 );
740 
741  for(int i=0; i<ntr; i++) {
742  EdbTrackP *t = ali.GetTrack(i);
743  int nseg = t->N();
744  for(int j=0; j<nseg; j++) {
745  EdbSegP *s = t->GetSegment(j);
746  EdbSegP *sf = t->GetSegmentF(j);
747 
748  int plateid = s->ScanID().ePlate;
749  hDXR.Fill( (s->X()-xmin)/(xmax-xmin+1000) + plateid, sf->X()-s->X() );
750  hDYR.Fill( (s->Y()-ymin)/(ymax-ymin+1000) + plateid, sf->Y()-s->Y() );
751  hDTXR.Fill( (s->X()-xmin)/(xmax-xmin+1000) + plateid, sf->TX()-s->TX() );
752  hDTYR.Fill( (s->Y()-ymin)/(ymax-ymin+1000) + plateid, sf->TY()-s->TY() );
753  }
754  }
755 
756  TString name;
757  sproc.MakeFileName(name,idset,"trk.an.root",false);
758  Log(2,"MakeCorrectionMap","%s",name.Data());
759  TFile f(name,"UPDATE");
760 
761  TCanvas *c = new TCanvas(Form("GDiff_%s",suff), Form("global_diff_%s",suff), 800,600);
762  c->Divide(2,2);
763  c->cd(1); hDXR.Draw();
764  c->cd(2); hDYR.Draw();
765  c->cd(3); hDTXR.Draw();
766  c->cd(4); hDTYR.Draw();
767  c->Write();
768  f.Close();
769 }
float Xmin()
Definition: EdbPVRec.cxx:1040
float Xmax()
Definition: EdbPVRec.cxx:1052
float Ymax()
Definition: EdbPVRec.cxx:1076
float Ymin()
Definition: EdbPVRec.cxx:1064
Float_t TX() const
Definition: EdbSegP.h:172
Float_t X() const
Definition: EdbSegP.h:170
Float_t Y() const
Definition: EdbSegP.h:171
EdbID ScanID() const
Definition: EdbSegP.h:157
Float_t TY() const
Definition: EdbSegP.h:173
float xmin
Definition: emthickness.cpp:61
float ymin
Definition: emthickness.cpp:63
float xmax
Definition: emthickness.cpp:61
float ymax
Definition: emthickness.cpp:63
p
Definition: testBGReduction_AllMethods.C:8
new TCanvas()

◆ GlobalEff()

void GlobalEff ( EdbPVRec ali,
const char *  suff = "" 
)
773 {
774  gROOT->SetStyle("Pub");
775 
776  int ntr = ali.Ntracks();
777  int npat = ali.Npatterns();
778  int nseg0 = npat>7 ? 7 : npat;
779 
780  int pmin = 57, pmax=0;
781  for(int i=0; i<npat; i++) {
782  int p = ali.GetPattern(i)->ScanID().ePlate;
783  if(p<pmin) pmin=p;
784  if(p>pmax) pmax=p;
785  }
786 
787  TH1F hAll("all","StartEnd vs plateID", (pmax-pmin+3), pmin-1, pmax+2 );
788  TH1F hStart("start","start", (pmax-pmin+3), pmin-1, pmax+2 );
789  TH1F hEnd("end","end", (pmax-pmin+3), pmin-1, pmax+2 );
790 
791  TH1F hNSeg("nseg","nseg vs plateID", (pmax-pmin+3), pmin-1, pmax+2 );
792 
793  TH1F hHoles("holes","holes vs plateID", (pmax-pmin+3), pmin-1, pmax+2 );
794 
795  TH1F hFillAbs("FillAbs","FillAbs", (pmax-pmin+3), pmin-1, pmax+2 );
796  TH1F hFillReal("FillReal","plates fill factor", (pmax-pmin+3), pmin-1, pmax+2 );
797 
798  TH2F hEff("eff","eff vs theta", 50, 0, 2, 55, 0, 1.1 );
799  TH2F hChi("Chi","Chi vs plateID", (pmax-pmin+3), pmin-1, pmax+2, 100, 0,3 );
800  TH2F hW( "W", "W vs plateID", (pmax-pmin+3), pmin-1, pmax+2, 40, 0,40 );
801 
802  for(int i=0; i<ntr; i++) {
803  EdbTrackP *t = ali.GetTrack(i);
804  int nseg = t->N();
805  for(int j=0; j<nseg; j++) {
806  EdbSegP *s = t->GetSegment(j);
807  int plateid = s->ScanID().ePlate;
808 
809  hNSeg.Fill(plateid);
810  hChi.Fill(plateid,s->Chi2());
811  hW.Fill(plateid,s->W());
812 
813  if(j>0&&j<nseg-1) hFillReal.Fill(plateid);
814  }
815  int pstart = t->GetSegmentFirst()->ScanID().ePlate;
816  int pend = t->GetSegmentLast()->ScanID().ePlate;
817  hStart.Fill(pstart);
818  hEnd.Fill(pend);
819 
820  for(int i=pstart; i<=pend; i++) hHoles.Fill(i);
821  for(int i=pstart+1; i<pend; i++) hFillAbs.Fill(i);
822 
823  if(nseg>=nseg0) { hEff.Fill( t->Theta(), 1.*(t->N()-2)/(t->Npl()-2) ); }
824  }
825 
826  hAll.Add( &hStart ); hAll.Add( &hEnd );
827  hHoles.Add( &hNSeg, -1);
828 
829  TH1F *ratio = (TH1F*)(hFillReal.Clone("ratio"));
830  ratio->Divide(&hFillAbs);
831 
832  TString name;
833  sproc.MakeFileName(name,idset,"trk.an.root",false);
834  TFile f(name,"UPDATE");
835 
836  TCanvas *c = new TCanvas(Form("GEff_%s",suff), Form("global_eff_%s",suff), 900,900);
837  c->Divide(3,3);
838  c->cd(1); hNSeg.Draw();
839  c->cd(4); hHoles.Draw();
840  c->cd(7); { hAll.SetLineColor(kBlack); hAll.Draw(); hStart.SetLineColor(kRed); hStart.Draw("same"); hEnd.SetLineColor(kBlue); hEnd.Draw("same"); }
841  c->cd(2); ratio->Draw();
842  c->cd(5); hChi.ProfileX()->Draw();
843  c->cd(8); hW.ProfileX()->Draw();
844  c->cd(3); hEff.ProfileX()->Draw();
845  c->cd(6); hEff.ProjectionY()->Draw();
846  c->Write();
847 
848  TCanvas *cc = new TCanvas(Form("GTr_%s",suff), Form("global_tr_%s",suff), 900,900);
849  cc->Divide(1,3);
850  cc->cd(1)->SetGrid(); hNSeg.Draw();
851  cc->cd(2)->SetGrid(); { hAll.SetLineColor(kBlack); hAll.Draw(); hStart.SetLineColor(kRed); hStart.Draw("same"); hEnd.SetLineColor(kBlue); hEnd.Draw("same"); }
852  cc->cd(3)->SetGrid(); ratio->Draw();
853  cc->Write();
854 
855  f.Close();
856 }
Float_t Chi2() const
Definition: EdbSegP.h:154
Float_t W() const
Definition: EdbSegP.h:148

◆ main()

int main ( int  argc,
char *  argv[] 
)
88 {
89  if (argc < 2) { print_help_message(); return 0; }
90 
91  TEnv cenv("trackanenv");
93  gEDBDEBUGLEVEL = cenv.GetValue("trackan.EdbDebugLevel" , 1 );
94  const char *outdir = cenv.GetValue("trackan.outdir" , "..");
95 
96  const char *name=0;
97 
98  bool do_global=false;
99  bool do_globV2=false;
100  bool do_cmtest=false;
101 
102  for(int i=1; i<argc; i++ ) {
103  char *key = argv[i];
104  if(!strncmp(key,"-set=",5))
105  {
106  if(strlen(key)>5) if(idset.Set(key+5)) do_set=true;
107  }
108  if(!strncmp(key,"-file=",6))
109  {
110  if(strlen(key)>6) { name=(key+6); do_file=true;}
111  }
112  if(!strncmp(key,"-divide=",8))
113  {
114  if(strlen(key)>8) {
115  int nx=0,ny=0;
116  if(2 == sscanf(key+8,"%dx%d",&nx,&ny) ) {
117  cenv.SetValue("trackan.NX" , nx);
118  cenv.SetValue("trackan.NY" , ny);
119  }
120  }
121  }
122  if(!strncmp(key,"-corraff",8))
123  {
124  do_corraff=true;
125  }
126  else if(!strncmp(key,"-momentum",9))
127  {
128  do_momentum=true;
129  }
130  else if(!strncmp(key,"-global",7))
131  {
132  do_global=true;
133  }
134  else if(!strncmp(key,"-globV2",7))
135  {
136  do_globV2=true;
137  }
138  else if(!strncmp(key,"-cmtest",7))
139  {
140  do_cmtest=true;
141  }
142  else if(!strncmp(key,"-v=",3))
143  {
144  if(strlen(key)>3) gEDBDEBUGLEVEL = atoi(key+3);
145  }
146  }
147 
149  cenv.ReadFile( "trackan.rootrc" ,kEnvLocal);
150  //cenv.SetValue("emtra.outdir" , outdir);
151  cenv.WriteFile("trackan.save.rootrc");
152 
153  const char *cut = cenv.GetValue("trackan.read_cut" , "1");
154 
155  EdbPVRec ali;
156  if(do_set)
158  else if(do_file) sproc.ReadTracksTree( name ,ali, cut );
159 
161  else if(do_global) DoGlobalCorr(ali,cenv);
162  else if(do_globV2) DoGlobalCorrV2(ali,cenv);
163  else if(0) {
165  for(int i=0; i<3; i++) {
166  DoGlobalCorr3(ali, *ss, cenv,0,2, i);
167  DoGlobalCorr3(ali, *ss, cenv,1,2, i);
168  DoGlobalCorr3(ali, *ss, cenv,3,2, i);
169  DoGlobalCorr3(ali, *ss, cenv,4,2, i);
170  }
171  }
172  else if(do_cmtest) MakeCorrectionMap_test(ali,cenv);
173  else MakeCorrectionMap(ali,cenv);
174 
175  //EdbDataProc::MakeTracksTree( *(ali.eTracks), 0., 0., "al.trk.root" );
176 
177  return 0;
178 }
TCut cut
Definition: check_shower.C:6
bool Set(const char *id_string)
Definition: EdbID.cxx:17
Definition: EdbPVRec.h:148
int ReadTracksTree(EdbID id, EdbPVRec &ali, TCut cut="1")
Definition: EdbScanProc.cxx:644
TString eProcDirClient
Definition: EdbScanProc.h:14
const char * outdir
Definition: emrec.cpp:37
int nx
Definition: emthickness.cpp:60
int ny
Definition: emthickness.cpp:62
void DoGlobalCorr(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:491
void set_default(TEnv &cenv)
Definition: emtrackan.cpp:57
void MakeCorrectionMap_test(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:340
bool do_file
Definition: emtrackan.cpp:80
void print_help_message()
Definition: emtrackan.cpp:39
void DoGlobalCorr3(EdbPVRec &ali, EdbScanSet &ss, TEnv &cenv, int offset, int step, int cycle)
bool do_momentum
Definition: emtrackan.cpp:82
void CheckMom(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:879
bool MakeCorrectionMap(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:181
void DoGlobalCorrV2(EdbPVRec &ali, TEnv &cenv)
Definition: emtrackan.cpp:591
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ MakeCorrectionMap()

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

◆ MakeCorrectionMap_test()

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

◆ print_help_message()

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

◆ ReadFunParameters() [1/2]

bool ReadFunParameters ( const char *  key)

◆ ReadFunParameters() [2/2]

int ReadFunParameters ( const char *  line,
TF1 &  fun 
)
859  {
860  const int Npars=10;
861 
862  double p[Npars];
863  int NparsRead=0;
864  std::string lineString(line);
865  size_t pos=0;
866 
867  for (int i = 0; i < Npars; ++i){
868  p[i]=0;
869  if(sscanf(line+pos,"%lg",p+i)<=0)break;
870  NparsRead++;
871  // printf("Read parameter#%d=%g\n",i,p[i]);
872  pos=lineString.find_first_of(' ',pos+1);
873  }
874  fun.SetParameters(p);
875  return NparsRead;
876 }

◆ set_default()

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

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