36 gStyle->SetCanvasPreferGL(1);
42 gPathDetectorConfig +=
"/parameters/vsp/XMLConfigs/";
43 gPathDetectorConfig +=
"VSP_Run9.xml";
46 Int_t ViewStationNum = 0;
47 Int_t ViewModuleNum = 3;
67 for (
Int_t ilayer = 0; ilayer < Layers.size(); ++ilayer) {
79 cout <<
"It's the end" <<
"\n";
96 cout <<
"Station[" << istation <<
"], Module[" << imodule <<
"], Layer[" << ilayer <<
"]:\n";
97 cout <<
" nStrips = " << nStrips <<
"\n";
98 cout <<
" firstStripNumber = " << firstStripNumber <<
"\n";
99 cout <<
" lastStripNumber = " << lastStripNumber <<
"\n";
104 new TH1F(layer_textId +
TString(
"_hist1f"), layer_textId, nStrips, firstStripNumber, lastStripNumber + 1);
106 layer_hist1f->
Reset();
109 for (
Int_t istrip = firstStripNumber; istrip <= lastStripNumber; ++istrip) {
111 layer_hist1f->
Fill(istrip, signal);
120 layer_hist1f->
Draw(
"HIST");
135 TLine* line_type1 =
new TLine(0.86, 0.87, 0.88, 0.87);
142 TText* text_type1 =
new TText(0.89, 0.87,
"strip hit (weighted cluster)");
149 TLine* line_type2 =
new TLine(0.86, 0.85, 0.88, 0.85);
156 TText* text_type2 =
new TText(0.89, 0.85,
"MC point position");
163 TText* text_type3a =
new TText(0.86, 0.83,
"v(v)");
164 text_type3a->
SetNDC(
true);
170 TText* text_type3 =
new TText(0.89, 0.83,
"MC number + strip signal");
177 TText* text_type4a =
new TText(0.86, 0.81,
"v(v)");
178 text_type4a->
SetNDC(
true);
185 TText* text_type4 =
new TText(0.89, 0.81,
"pos. + cluster signal");
192 TText* text_type5a =
new TText(0.86, 0.79,
"mc:v");
193 text_type5a->
SetNDC(
true);
200 TText* text_type5 =
new TText(0.89, 0.79,
"MC number");
209 Int_t nClusters = StripClusters.size();
210 cout <<
" nClusters = " << nClusters <<
"\n";
213 vector<Int_t> colors = {3, 2, 5, 6, 7, 8, 29, 38, 41, 30, 43, 42, 45, 46, 0 };
217 for (
Int_t icluster = 0; icluster < nClusters; ++icluster) {
218 cout <<
" cluster[" << icluster <<
"]:\n";
222 cout <<
" nStrips = " << nStrips <<
"\n";
224 for (
Int_t istripInCluster = 0; istripInCluster < nStrips; ++istripInCluster) {
228 cout <<
" stripInCluster[" << istripInCluster <<
"]:\n";
229 cout <<
" strip_num = " << strip_num <<
"\n";
230 cout <<
" signal = " << signal <<
"\n";
234 PaintBin(layer_canv, layer_hist1f, bin, signal, colors[colors[colors.size() - 1]],
238 if (colors[colors.size() - 1] == (colors.size() - 1))
239 colors[colors.size() - 1] = 0;
241 colors[colors.size() - 1]++;
259 TString module_textId =
TString(
"Strip numbers of all clusters in the module: ") +
TString(
"layer_type[")
265 Int_t firstStripNumber = 0;
266 Int_t lastStripNumber = 0;
268 vector<BmnVSPLayer> Layers =
module->GetStripLayers();
269 for (
Int_t ilayer = 0; ilayer < Layers.size(); ++ilayer) {
271 if (layer.
GetType() == layer_type) {
278 nStrips = lastStripNumber - firstStripNumber + 1;
280 TCanvas* module_canv =
new TCanvas(module_textId +
TString(
"_canv"), module_textId, 0, 0, 1800, 1200);
282 TH1F* module_hist1f =
283 new TH1F(module_textId +
TString(
"_hist1f"), module_textId, nStrips, firstStripNumber, lastStripNumber + 1);
285 for (
Int_t ilayer = 0; ilayer < Layers.size(); ++ilayer) {
289 if (layer.
GetType() == layer_type) {
291 Int_t nClusters = StripClusters.size();
293 for (
Int_t icluster = 0; icluster < nClusters; ++icluster) {
297 for (
Int_t istripInCluster = 0; istripInCluster < nStrips; ++istripInCluster) {
301 module_hist1f->
Fill(strip_num);
312 module_hist1f->
Draw(
"hist");
325 TString fVSPLowerClusters_FileName =
"$VMCWORKDIR/macro/run/bmndst";
326 fVSPLowerClusters_FileName += file_prefix;
327 fVSPLowerClusters_FileName +=
".root";
328 TFile* fVSPLowerClusters_File =
new TFile(fVSPLowerClusters_FileName,
"READ");
329 TTree* fVSPLowerClusters_Tree = (
TTree*)fVSPLowerClusters_File->
Get(
"bmndata");
331 fVSPLowerClusters_Tree->
SetBranchAddress(
"BmnVSPLowerCluster", &fVSPLowerClusters_Array);
335 TString fVSPUpperClusters_FileName =
"$VMCWORKDIR/macro/run/bmndst";
336 fVSPUpperClusters_FileName += file_prefix;
337 fVSPUpperClusters_FileName +=
".root";
338 TFile* fVSPUpperClusters_File =
new TFile(fVSPUpperClusters_FileName,
"READ");
339 TTree* fVSPUpperClusters_Tree = (
TTree*)fVSPUpperClusters_File->
Get(
"bmndata");
341 fVSPUpperClusters_Tree->
SetBranchAddress(
"BmnVSPUpperCluster", &fVSPUpperClusters_Array);
344 fVSPLowerClusters_Tree->
GetEntry(event_num);
345 fVSPUpperClusters_Tree->
GetEntry(event_num);
348 TString module_lowerStrips_textId =
TString(
"Branch: Strip numbers of all clusters in the module: ")
353 TString module_upperStrips_textId =
TString(
"Branch: Strip numbers of all clusters in the module: ")
359 Int_t firstStripNumber = 0;
360 Int_t lastStripNumber = 639;
362 TCanvas* module_lowerStrips_canv =
363 new TCanvas(module_lowerStrips_textId +
TString(
"_canv"), module_lowerStrips_textId, 0, 0, 1800, 1200);
364 module_lowerStrips_canv->
SetGrid();
365 TH1F* module_lowerStrips_hist1f =
366 new TH1F(module_lowerStrips_textId +
TString(
"_hist1f"), module_lowerStrips_textId, nStrips, firstStripNumber,
367 lastStripNumber + 1);
369 TCanvas* module_upperStrips_canv =
370 new TCanvas(module_upperStrips_textId +
TString(
"_canv"), module_upperStrips_textId, 0, 0, 1800, 1200);
371 module_upperStrips_canv->
SetGrid();
372 TH1F* module_upperStrips_hist1f =
373 new TH1F(module_upperStrips_textId +
TString(
"_hist1f"), module_upperStrips_textId, nStrips, firstStripNumber,
374 lastStripNumber + 1);
376 for (
Int_t icluster = 0; icluster < fVSPLowerClusters_Array->
GetEntries(); ++icluster) {
382 for (
Int_t istripInCluster = 0; istripInCluster < nStrips; ++istripInCluster) {
383 Int_t strip_num = cluster->
Strips[istripInCluster];
386 module_lowerStrips_hist1f->
Fill(strip_num);
391 for (
Int_t icluster = 0; icluster < fVSPUpperClusters_Array->
GetEntries(); ++icluster) {
397 for (
Int_t istripInCluster = 0; istripInCluster < nStrips; ++istripInCluster) {
398 Int_t strip_num = cluster->
Strips[istripInCluster];
401 module_upperStrips_hist1f->
Fill(strip_num);
406 module_lowerStrips_canv->
cd();
412 module_lowerStrips_hist1f->
Draw(
"hist");
414 module_upperStrips_canv->
cd();
420 module_upperStrips_hist1f->
Draw(
"hist");
428 Double_t x_min_module =
module->GetXMinModule();
429 Double_t x_max_module =
module->GetXMaxModule();
430 Double_t y_min_module =
module->GetYMinModule();
431 Double_t y_max_module =
module->GetYMaxModule();
432 Double_t x_size_module =
module->GetXSize();
433 Double_t y_size_module =
module->GetYSize();
437 Double_t hborder_left, hborder_right, hborder_bottom, hborder_top;
438 if (x_size_module >= y_size_module) {
439 hborder_margin = x_size_module * 0.05;
440 hborder_left = x_min_module - hborder_margin;
441 hborder_right = x_max_module + hborder_margin;
442 hborder_bottom = y_min_module -
fabs(x_size_module - y_size_module) * 0.5 - hborder_margin;
443 hborder_top = y_max_module +
fabs(x_size_module - y_size_module) * 0.5 + hborder_margin;
445 hborder_margin = y_size_module * 0.05;
446 hborder_left = x_min_module -
fabs(x_size_module - y_size_module) * 0.5 - hborder_margin;
447 hborder_right = x_max_module +
fabs(x_size_module - y_size_module) * 0.5 + hborder_margin;
448 hborder_bottom = y_min_module - hborder_margin;
449 hborder_top = y_max_module + hborder_margin;
456 TCanvas* module_canv =
new TCanvas(module_textId +
TString(
"_canv"), module_textId, 0, 0, 1600, 1600);
458 TH2D* module_hist2d =
new TH2D(module_textId +
TString(
"_hist1f"), module_textId, 100, hborder_left, hborder_right,
459 100, hborder_bottom, hborder_top);
470 module_hist2d->
Draw(
"");
474 Double_t x_borders_module[4] = {x_min_module, x_min_module, x_max_module, x_max_module};
475 Double_t y_borders_module[4] = {y_min_module, y_max_module, y_max_module, y_min_module};
476 for (
Int_t ibpoint = 0; ibpoint < 4; ++ibpoint) {
480 x1 = x_borders_module[ibpoint];
481 y1 = y_borders_module[ibpoint];
482 x2 = x_borders_module[ibpoint + 1];
483 y2 = y_borders_module[ibpoint + 1];
485 x1 = x_borders_module[ibpoint];
486 y1 = y_borders_module[ibpoint];
487 x2 = x_borders_module[0];
488 y2 = y_borders_module[0];
490 TLine* border_line =
new TLine(x1, y1, x2, y2);
498 Int_t nRealPointsInModule =
module->GetNRealPoints();
499 for (
Int_t irpoint = 0; irpoint < nRealPointsInModule; ++irpoint) {
501 Double_t x_rpoint =
module->GetRealPointX(irpoint);
502 Double_t y_rpoint =
module->GetRealPointY(irpoint);
503 Int_t mc_index =
module->GetRealPointMC(irpoint);
509 rpoint_marker->
Draw();
513 btext->
SetText(x_rpoint + 0.01, y_rpoint + 0.01, content);
523 Int_t nIntersectionPoints =
module->GetNIntersectionPoints();
524 for (
Int_t ihit = 0; ihit < nIntersectionPoints; ++ihit) {
525 Double_t x_hit =
module->GetIntersectionPointX(ihit);
526 Double_t y_hit =
module->GetIntersectionPointY(ihit);
536 vector<BmnVSPLayer> Layers =
module->GetStripLayers();
537 for (
Int_t ilayer = 0; ilayer < Layers.size(); ++ilayer) {
545 Double_t x_borders_layer[4] = {x_min_layer, x_min_layer, x_max_layer, x_max_layer};
546 Double_t y_borders_layer[4] = {y_min_layer, y_max_layer, y_max_layer, y_min_layer};
547 for (
Int_t ibpoint = 0; ibpoint < 4; ++ibpoint) {
551 x1 = x_borders_layer[ibpoint];
552 y1 = y_borders_layer[ibpoint];
553 x2 = x_borders_layer[ibpoint + 1];
554 y2 = y_borders_layer[ibpoint + 1];
556 x1 = x_borders_layer[ibpoint];
557 y1 = y_borders_layer[ibpoint];
558 x2 = x_borders_layer[0];
559 y2 = y_borders_layer[0];
561 TLine* border_line =
new TLine(x1, y1, x2, y2);
578 if (layer.
GetType() == 0 && ilayer == 0) {
579 cout <<
"strip_pos = " << strip_pos <<
"\n";
580 cout <<
"angle_rad = " << angle_rad <<
"\n";
581 cout <<
"B_val = " << B_val <<
"\n";
585 if (
fabs(B_val) < 1e+6) {
586 x1 = (y_min_layer - B_val) /
TMath::Tan(PiOver2MinusAngleRad);
587 if (x1 < x_min_layer)
589 if (x1 > x_max_layer)
591 y1 =
TMath::Tan(PiOver2MinusAngleRad) * x1 + B_val;
592 if (y1 < y_min_layer)
594 if (y1 > y_max_layer)
597 x2 = (y_max_layer - B_val) /
TMath::Tan(PiOver2MinusAngleRad);
598 if (x2 < x_min_layer)
600 if (x2 > x_max_layer)
602 y2 =
TMath::Tan(PiOver2MinusAngleRad) * x2 + B_val;
603 if (y2 < y_min_layer)
605 if (y2 > y_max_layer)
622 TLine* strip_line =
new TLine(x1, y1, x2, y2);
630 btext->
SetText(x2, y2 + 0.01, content);
657 TBox* b_filled =
new TBox(x1, y1, x2, y2);
660 TBox* b_border =
new TBox(x1, y1, x2, y2);
678 Int_t most_probably_index = -1;
682 for (
Int_t ilink = 0; ilink < n_links; ilink++) {
683 Int_t index =
match.GetLink(ilink).GetIndex();
685 if (weight > max_weight) {
687 most_probably_index = index;
709 cout <<
" nStripHits = " << nStripHits <<
"\n";
712 for (
Int_t iStripHit = 0; iStripHit < nStripHits; ++iStripHit) {
713 cout <<
" stripHit[" << iStripHit <<
"]:\n";
717 cout <<
" strip_hit_pos = " << strip_hit_pos <<
"\n";
718 cout <<
" strip_hit_signal = " << strip_hit_signal <<
"\n";
726 TLine* strip_hit_line =
new TLine(x1_line, y1_line, x2_line, y2_line);
732 strip_hit_line->
Draw();
737 btext->
SetText(x1_line, y1_line, content);
751 Int_t nRealPointsInModule =
module->GetNRealPoints();
754 for (
Int_t irpoint = 0; irpoint < nRealPointsInModule; ++irpoint) {
755 Double_t x =
module->GetRealPointX(irpoint);
756 Double_t y =
module->GetRealPointY(irpoint);
757 Int_t mc_index =
module->GetRealPointMC(irpoint);
759 BmnVSPLayer& layer =
module->GetStripLayer(layer_num);
771 TLine* strip_mc_line =
new TLine(x1_line, y1_line, x2_line, y2_line);
776 strip_mc_line->
Draw();
780 btext->
SetText(x1_line, y1_line, content);
789 if (ilayer == layer_num)
791 BmnVSPLayer& curr_layer =
module->GetStripLayer(ilayer);
793 if (layer_zoneID == curr_layer.
GetZoneID()) {
803 TLine* strip_mc_line =
new TLine(x1_line, y1_line, x2_line, y2_line);
808 strip_mc_line->
Draw();
812 btext->
SetText(x1_line, y1_line, content);
830 station_set->
Reset();
838 TString fVSPMCPoints_FileName =
"$VMCWORKDIR/macro/run/bmnsim";
839 fVSPMCPoints_FileName += file_prefix;
840 fVSPMCPoints_FileName +=
".root";
841 TFile* fVSPMCPoints_File =
new TFile(fVSPMCPoints_FileName,
"READ");
842 TTree* fVSPMCPoints_Tree = (
TTree*)fVSPMCPoints_File->
Get(
"bmndata");
847 fVSPMCPoints_Tree->
GetEntry(event_num);
850 Int_t added_points_cnt = 0;
852 for (
Int_t ipoint = 0; ipoint < n_points; ++ipoint) {
864 Double_t d_eloss = mc_point->GetEnergyLoss() * 1e6;
865 Int_t ref_id = ipoint;
872 if (transf_set && mc_station_num < station_set->GetNStations()) {
873 if (mc_module_num < station_set->GetStation(mc_station_num)->GetNModules()) {
877 Plane3D::Point(-(px + x), (py + y), (pz + z)), mc_station_num, mc_module_num);
882 px = -(loc_direct.
X() - loc_point.
X());
883 py = loc_direct.
Y() - loc_point.
Y();
884 pz = loc_direct.
Z() - loc_point.
Z();
893 cout <<
"------------------------------------\n";
894 cout <<
"LoadDataFromMCPoints:\n " << added_points_cnt <<
" of " << n_points
895 <<
" Monte-Carlo points have been added to the detector\n";
896 cout <<
"------------------------------------\n";
904 station_set->
Reset();
912 TString fVSPDigits_FileName =
"$VMCWORKDIR/macro/run/bmnsim";
913 fVSPDigits_FileName += file_prefix;
914 fVSPDigits_FileName +=
".root";
915 TFile* fVSPDigits_File =
new TFile(fVSPDigits_FileName,
"READ");
916 TTree* fVSPDigits_Tree = (
TTree*)fVSPDigits_File->
Get(
"bmndata");
921 fVSPDigits_Tree->
GetEntry(event_num);
924 Int_t added_digits_cnt = 0;
926 for (
Int_t idigit = 0; idigit < n_digits; idigit++) {
937 cout <<
"------------------------------------\n";
938 cout <<
"LoadDataFromDigits:\n " << added_digits_cnt <<
" of " << n_digits
939 <<
" digits have been added to the detector\n";
940 cout <<
"------------------------------------\n";
friend F32vec4 fabs(const F32vec4 &a)
#define R__ADD_INCLUDE_PATH(PATH)
R__EXTERN TStyle * gStyle
R__EXTERN TSystem * gSystem
Double_t GetStripSignal()
Double_t CalculateStripEquationB(Double_t strip_pos)
Int_t GetFirstStripNumber()
Int_t GetLastStripNumber()
Double_t GetXLeftStripBorderPoint()
Double_t GetStripHitPos(Int_t num)
BmnMatch GetStripMatch(Int_t strip_num)
Double_t ConvertPointToStripPosition(Double_t x, Double_t y)
Double_t GetXRightStripBorderPoint()
vector< StripCluster > GetStripClusters()
Double_t GetStripSignal(Int_t strip_num)
Double_t GetStripHitTotalSignal(Int_t num)
StripNumberingDirection GetStripNumberingOrder()
Bool_t IsPointInsideStripLayer(Double_t x, Double_t y)
Bool_t SetStripSignalInLayerByZoneId(Int_t zone_id, Int_t strip_num, Double_t signal)
vector< BmnVSPLayer > & GetStripLayers()
Bool_t AddPointToDetector(Double_t xcoord, Double_t ycoord, Double_t zcoord, Double_t px, Double_t py, Double_t pz, Double_t dEloss, Int_t refID)
BmnVSPStation * GetStation(Int_t station_num)
void ProcessPointsInDetector()
BmnVSPModule * GetModule(Int_t module_num)
PositionVector3D< Cartesian3D< T >, DefaultCoordinateSystemTag > Point
vector< Double_t > Signals
virtual void SetLabelSize(Float_t size=0.04)
virtual void SetLabelOffset(Float_t offset=0.005)
virtual void SetFillColor(Color_t fcolor)
virtual void SetFillColorAlpha(Color_t fcolor, Float_t falpha)
virtual void SetFillStyle(Style_t fstyle)
virtual void SetLineStyle(Style_t lstyle)
virtual void SetLineWidth(Width_t lwidth)
virtual void SetLineColorAlpha(Color_t lcolor, Float_t lalpha)
virtual void SetLineColor(Color_t lcolor)
virtual void SetMarkerColor(Color_t mcolor=1)
virtual void SetMarkerSize(Size_t msize=1)
virtual void SetTextAlign(Short_t align=11)
virtual void SetTextColorAlpha(Color_t tcolor, Float_t talpha)
virtual void SetTextColor(Color_t tcolor=1)
virtual void SetTextFont(Font_t tfont=62)
virtual void SetTextSize(Float_t tsize=1)
void Draw(Option_t *option="") override
virtual void SetAutoDelete(bool autodel=true)
TVirtualPad * cd(Int_t subpadnumber=0) override
static Int_t GetColor(const char *hexcolor)
T * Get(const char *namecycle)
void Reset(Option_t *option="") override
virtual Double_t GetBinCenter(Int_t bin) const
TObject * FindObject(const char *name) const override
void Draw(Option_t *option="") override
virtual Int_t Fill(const char *name, Double_t w)
virtual Double_t GetBinLowEdge(Int_t bin) const
virtual Double_t GetBinContent(Int_t bin) const
virtual Double_t GetBinWidth(Int_t bin) const
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
virtual Double_t GetMinimum(Double_t minval=-FLT_MAX) const
virtual void SetStats(Bool_t stats=kTRUE)
void Draw(Option_t *option="") override
virtual void SetNDC(Bool_t isNDC=kTRUE)
void Draw(Option_t *option="") override
virtual void SetTitle(const char *title="")
Int_t GetEntries() const override
TObject * At(Int_t idx) const override
virtual void Draw(Option_t *option="")
void SetGrid(Int_t valuex=1, Int_t valuey=1) override
void SetOptStat(Int_t stat=1)
virtual void SetY1NDC(Double_t y1)
virtual void SetY2NDC(Double_t y2)
virtual void SetX1NDC(Double_t x1)
virtual void SetX2NDC(Double_t x2)
static TString Format(const char *fmt,...)
static TString Itoa(Int_t value, Int_t base)
virtual void SetText(Double_t x, Double_t y, const char *text)
virtual void SetNDC(Bool_t isNDC=kTRUE)
virtual TBranch * GetBranch(const char *name)
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
void DrawStripHits(TCanvas *c, TH1F *h, BmnVSPLayer &layer)
void ShowReadoutPlane(BmnVSPModule *module, Int_t imodule, Int_t istation)
void ShowSignalInLayer(BmnVSPModule *module, BmnVSPLayer &layer, Int_t ilayer, Int_t imodule, Int_t istation)
void LoadDataFromMCPoints(BmnVSPStationSet *station_set, BmnVSPTransform *transf_set, Int_t event_num)
void DrawMCMatches(TCanvas *c, TH1F *h, Int_t strip_num, BmnVSPLayer &layer)
void PaintBin(TCanvas *c, TH1F *h, Int_t bin, Double_t bin_height, Int_t fcolor, Int_t bcolor)
void LoadDataFromDigits(BmnVSPStationSet *station_set, BmnVSPTransform *transf_set, Int_t event_num)
void ShowStripNumbersOfClustersInModule(BmnVSPModule *module, Int_t layer_type, Int_t module_num, Int_t station_num)
void DrawMCStripLines(TCanvas *c, TH1F *h, BmnVSPModule *module, Int_t layer_num)
void VSPClusterAnalyser()
void ShowStripNumbersOfClustersInModule_FromBranches(Int_t event_num, Int_t module_num, Int_t station_num)
constexpr Double_t PiOver2()