Read info about hits from reconstructed tracks -------------------------------------—————
72 std::string startStr=
"", momStr=
"", nStr=
"", pathStr=
"", verbStr=
"", outnStr=
"", outrootStr=
"",sectorStr=
"";
74 if( __argc>1 && ( strcmp( __argv[1],
"-help" ) == 0
75 || strcmp( __argv[1],
"--help" ) == 0 ) ){
77 std::cout <<
"This is script for alignment data creation with pixel sensors design \n"
78 <<
"with parameters\n"
80 <<
"-n Number of events \n"
81 <<
"-path path to the file(s) \n"
82 <<
"-out name for output file \n"
83 <<
"-outhist name for output file with residuals histogram \n"
84 <<
"-v verbose Level (if>0, print out some information) \n"
90 while ((optind < (__argc-1) ) && (__argv[optind][0]==
'-')) {
92 std::string sw = __argv[optind];
95 startStr = __argv[optind];
100 sectorStr = __argv[optind];
105 nStr = __argv[optind];
110 pathStr = __argv[optind];
115 momStr = __argv[optind];
120 verbStr = __argv[optind];
125 outnStr= __argv[optind];
130 outrootStr= __argv[optind];
134 std::cout<<
"Unknown switch: "
135 << __argv[optind] <<std::endl;
139 while ( (optind < __argc ) && __argv[optind][0]!=
'-' ) optind++;
142 std::stringstream startSStr(startStr), nSStr(nStr), pathSStr(pathStr), verbSStr(verbStr),sectorSStr(sectorStr);
148 sectorSStr>> sectorPos;
149 cout<<
"For data files will be used path: "<<storePath<<endl;
152 output.open(outnStr.c_str());
153 TFile *
f =
new TFile(outrootStr.c_str(),
"RECREATE");
155 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
156 gSystem->Load(
"libLmdTrk");
169 TChain tdigiHits(
"pndsim");
170 tdigiHits.Add(DigiFile);
172 TString recHit=storePath+
"/Lumi_reco_";
175 TChain tHits(
"pndsim");
178 TString recHitmerged=storePath+
"/Lumi_recoMerged_";
180 recHitmerged +=
".root";
181 TChain tHitsMerged(
"pndsim");
182 tHitsMerged.Add(recHitmerged);
191 TString trkCand = storePath+
"/Lumi_TCand_";
194 TChain tTrkCand(
"pndsim");
195 tTrkCand.Add(trkCand);
197 TString recTrack = storePath+
"/Lumi_Track_";
201 TChain tTrkRec(
"pndsim");
202 tTrkRec.Add(recTrack);
204 TString simMC=storePath+
"/Lumi_MC_";
207 TChain tMC(
"pndsim");
213 TClonesArray* fStripClusterArray;
214 fStripClusterArray =
new TClonesArray(
"PndSdsClusterPixel");
215 tHits.SetBranchAddress(
"LMDPixelClusterCand",&fStripClusterArray);
216 TClonesArray* fStripDigiArray;
217 fStripDigiArray =
new TClonesArray(
"PndSdsDigiPixel");
218 tdigiHits.SetBranchAddress(
"LMDPixelDigis",&fStripDigiArray);
222 TClonesArray* rechit_array=
new TClonesArray(
"PndSdsMergedHit");
223 tHitsMerged.SetBranchAddress(
"LMDHitsMerged",&rechit_array);
229 TClonesArray* trkcand_array=
new TClonesArray(
"PndTrackCand");
230 tTrkCand.SetBranchAddress(
"LMDTrackCand",&trkcand_array);
236 TClonesArray* rec_trk=
new TClonesArray(
"PndTrack");
237 tTrkRec.SetBranchAddress(
"LMDPndTrack",&rec_trk);
241 TClonesArray* true_tracks=
new TClonesArray(
"PndMCTrack");
242 tMC.SetBranchAddress(
"MCTrack",&true_tracks);
244 TClonesArray* true_points=
new TClonesArray(
"PndSdsMCPoint");
245 tMC.SetBranchAddress(
"LMDPoint",&true_points);
250 TObjArray *m_res_x =
new TObjArray;
251 TObjArray *m_res_y =
new TObjArray;
252 TObjArray *m_res_r =
new TObjArray;
254 TObjArray *m_res_mc_x =
new TObjArray;
255 TObjArray *m_res_mc_y =
new TObjArray;
256 TObjArray *m_res_mc_z =
new TObjArray;
258 double misal_scales[3];
259 const double scaleX = 0.05;
260 const double scaleY = 0.05;
261 const double scaleR = 0.05;
266 (scaleX == 0) ? misal_scales[0] = 1. : misal_scales[0] = 1.*scaleX;
267 (scaleY == 0) ? misal_scales[1] = 1. : misal_scales[1] = 1.*scaleY;
268 (scaleR == 0) ? misal_scales[2] = 1. : misal_scales[2] = 1.*scaleR;
273 TH2F *resx =
new TH2F(
"resx",
"residuals vs. x; x, cm;#delta_{x}, cm",100,0,45,100,-5.0e-2,5.0e-2);
274 TH2F *resy =
new TH2F(
"resy",
"residuals vs. y; y, cm;#delta_{y}, cm",100,-15,15,100,-5.0e-2,5.0e-2);
276 TH2F *x_id =
new TH2F(
"x_id",
"x vs. sensor id; id ;x, cm",400,0,400,1e3,0,45);
277 TH2F *y_id =
new TH2F(
"y_id",
"y vs. sensor id; id ;y, cm",400,0,400,1e3,-15,15);
278 TH2F *z_id =
new TH2F(
"z_id",
"z vs. sensor id; id ;z, cm",400,0,400,1e3,-10,60);
279 TNtuple *
nhits =
new TNtuple(
"nhits",
"hitsInfo",
"xrec:yrec:zrec:errxrec:erryrec:errzrec:xmc:ymc:zmc:half:plane:module:side");
284 TH2F *resxy =
new TH2F(
"resxy",
"residuals y vs. residuals x; #delta_{x}, cm; #delta_{y}, cm",5000,-2.5e-1,2.5e-1,5000,-2.5e-1,2.5e-1);
285 TH1I *htrks =
new TH1I(
"trks",
"number of trks/ev",2e1,0,2e1);
329 TString mtx_corr = storePath+
"/matrices_corrected.txt";
330 TString mtx_perfect = storePath+
"/trafo_matrices_lmd.dat";
332 lmddim -> Read_transformation_matrices(mtx_perfect.Data(),
false);
333 lmddim -> Read_transformation_matrices(mtx_corr.Data(),
true);
337 cout<<
"In total there are "<<nEvents<<
" events"<<endl;
339 for (Int_t j=0; j<
nEvents; j++){
341 tTrkCand.GetEntry(j);
344 tHitsMerged.GetEntry(j);
345 tdigiHits.GetEntry(j);
349 const int nRecTrks = rec_trk->GetEntriesFast();
350 icounterALL +=nRecTrks;
353 for (Int_t iN=0; iN<nRecTrks; iN++){
360 TVector3 startlintrk(fFittedTrkP.GetX(),fFittedTrkP.GetY(),fFittedTrkP.GetZ());
361 TVector3 dirlintrk(fFittedTrkP.GetPx(),fFittedTrkP.GetPy(),fFittedTrkP.GetPz());
366 dirlintrk *= 1./dirlintrk.Mag();
370 const int Ntrkcandhits= trkcand->
GetNHits();
372 if(Ntrkcandhits<4)
continue;
378 int trkModules[Ntrkcandhits];
379 int trkHalfs[Ntrkcandhits];
382 for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){
387 int ihalf, iplane, imodule, iside, idie, isensor;
389 lmddim->
Get_sensor_by_id(sensorID, ihalf, iplane, imodule, iside, idie, isensor);
390 trkModules[iHit]=ihalf*5+imodule;
391 trkHalfs[iHit]=ihalf;
393 module1=ihalf*5+imodule;
395 bool flagSector =
true;
397 for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){
398 if(trkModules[iHit]!=sectorPos) flagSector=
false;
402 for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){
403 if(trkHalfs[iHit]!=half1) flagSector=
false;
404 if(trkModules[iHit]!=module1) flagSector=
false;
409 if(!flagSector)
continue;
411 if(iN==0) htrks->Fill(nRecTrks);
412 for (Int_t iHit = 0; iHit < Ntrkcandhits; iHit++){
418 int ihalf, iplane, imodule, iside, idie, isensor;
420 lmddim->
Get_sensor_by_id(sensorID, ihalf, iplane, imodule, iside, idie, isensor);
427 TVector3 mcTop,mcTopOUT;
443 TVector3 mcMid = mcTop+(mcTopOUT-mcTop)*0.5;
450 double trkX = startlintrk.X()+dirlintrk.X()*(HitPos.Z()-startlintrk.Z());
451 double trkY = startlintrk.Y()+dirlintrk.Y()*(HitPos.Z()-startlintrk.Z());
452 double trkR =
sqrt(trkX*trkX+trkY*trkY);
453 double hitR =
sqrt(HitPos.X()*HitPos.X()+HitPos.Y()*HitPos.Y());
458 double resx_d = HitPos.X()-trkX;
459 double resy_d = HitPos.Y()-trkY;
460 resx->Fill(HitPos.X(),resx_d);
461 resy->Fill(HitPos.Y(),resy_d);
462 resxy->Fill(resx_d,resy_d);
466 x_id->Fill(sensorID,HitPos.X());
467 y_id->Fill(sensorID,HitPos.Y());
468 z_id->Fill(sensorID,HitPos.Z());
472 int glModule = iplane;
473 if(sectorPos>10) glModule = ihalf*4*5+(iplane)*5+imodule;
489 nhits->Fill(HitPosLoc.X(),HitPosLoc.Y(),HitPosLoc.Z(),
sqrt(HitErrLoc(0,0)),
sqrt(HitErrLoc(1,1)),
sqrt(HitErrLoc(2,2)),MCHitPosLoc.X(),MCHitPosLoc.Y(),MCHitPosLoc.Z(),ihalf,iplane,imodule,iside);
490 TVector3 ResRecMC = HitPosLoc - MCHitPosLoc;
496 if((Ntrkcandhits-iHit)>1) endtrk=0;
497 if(flagSector && output>0){
498 output<<HitPosLoc.X()<<
" "<<
sqrt(HitErrLoc(0,0))<<
" ";
499 output<<HitPosLoc.Y()<<
" "<<
sqrt(HitErrLoc(1,1))<<
" ";
501 output<<HitPosLoc.Z()<<
" "<<sectorPos<<
" ";
502 output<<glModule<<
" "<<endtrk<<endl;
510 cout<<
"This module has "<<icounter<<
" trks from "<<icounterALL<<endl;
TVector3 GetPosition() const
friend F32vec4 sqrt(const F32vec4 &a)
Int_t GetIndex(int i=0) const
static PndLmdDim * Instance()
PndTrackCandHit GetSortedHit(UInt_t i)
TVector3 Transform_global_to_lmd_local(const TVector3 &point, bool isvector=false, bool aligned=true)
TVector3 GetPositionOut() const
FairParRootFileIo * output
Int_t GetDigiIndex(Int_t i) const
void Get_sensor_by_id(const int sensor_id, int &ihalf, int &iplane, int &imodule, int &iside, int &idie, int &isensor)
TVector3 Transform_lmd_local_to_module_side(const TVector3 &point, int ihalf, int iplane, int imodule, int iside, bool isvector=false, bool aligned=true)
TVector3 GetPosition() const
Data class to store the digi output of a pixel module.
Int_t GetClusterIndex() const
Int_t GetRefIndex() const
Int_t GetSensorID() const
FairTrackParP GetParamFirst()
TMatrixT< double > TMatrixD