BmnRoot 26.10.0-19-g6979a6c6
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
corrSummator.C
Go to the documentation of this file.
1#include <Rtypes.h>
2#include <TChain.h>
3#include <TClonesArray.h>
4#include <TFile.h>
5#include <TString.h>
6#include <TTree.h>
7#include <TVector3.h>
8R__ADD_INCLUDE_PATH($VMCWORKDIR)
9#include "macro/run/bmnloadlibs.C"
10R__LOAD_LIBRARY(libBmnAlignment.so)
11
13
14void corrSummator(TString in1 = "it0.root", TString in2 = "align.root", TString out = "it1.root")
15{
16 bmnloadlibs(); // load BmnRoot libraries
17
18 TString gPathGemConfig = gSystem->Getenv("VMCWORKDIR");
19
20 TString siConf = "SiliconRunSpring2018.xml";
21 TString gemConf = "GemRunSpring2018.xml";
22
23 TString fnames[2] = {in1, in2};
24
25 BmnGemStripStationSet* GEM = new BmnGemStripStationSet(gPathGemConfig + "/parameters/gem/XMLConfigs/" + gemConf);
26 BmnSiliconStationSet* SI = new BmnSiliconStationSet(gPathGemConfig + "/parameters/silicon/XMLConfigs/" + siConf);
27
28 const Int_t nStatGEM = GEM->GetNStations();
29 const Int_t nStatSI = SI->GetNStations();
30
31 const Int_t nParams = 3;
32
33 Double_t*** corrGEM = new Double_t**[nStatGEM];
34 for (Int_t iStat = 0; iStat < nStatGEM; iStat++) {
35 Int_t nModul = GEM->GetGemStation(iStat)->GetNModules();
36 corrGEM[iStat] = new Double_t*[nModul];
37 for (Int_t iMod = 0; iMod < nModul; iMod++) {
38 corrGEM[iStat][iMod] = new Double_t[nParams];
39 for (Int_t iPar = 0; iPar < nParams; iPar++) {
40 corrGEM[iStat][iMod][iPar] = 0.;
41 }
42 }
43 }
44
45 Double_t*** corrSI = new Double_t**[nStatSI];
46 for (Int_t iStat = 0; iStat < nStatSI; iStat++) {
47 Int_t nModul = SI->GetSiliconStation(iStat)->GetNModules();
48 corrSI[iStat] = new Double_t*[nModul];
49 for (Int_t iMod = 0; iMod < nModul; iMod++) {
50 corrSI[iStat][iMod] = new Double_t[nParams];
51 for (Int_t iPar = 0; iPar < nParams; iPar++) {
52 corrSI[iStat][iMod][iPar] = 0.;
53 }
54 }
55 }
56
57 for (Int_t iFile = 0; iFile < 2; iFile++)
58 ReadFileCorrections(fnames[iFile], corrGEM, corrSI);
59
60 // Prepare output tree
61 TFile* outFile = new TFile(out, "recreate");
62 TTree* outTree = new TTree("cbmsim", "cbmsim");
63 TClonesArray* outClassGEM = new TClonesArray("BmnGemAlignCorrections");
64 TClonesArray* outClassSI = new TClonesArray("BmnSiliconAlignCorrections");
65 outTree->Branch("BmnGemAlignCorrections", &outClassGEM);
66 outTree->Branch("BmnSiliconAlignCorrections", &outClassSI);
67
68 for (Int_t iStat = 0; iStat < nStatGEM; iStat++) {
69 Int_t nModul = GEM->GetGemStation(iStat)->GetNModules();
70 for (Int_t iMod = 0; iMod < nModul; iMod++) {
71 new ((*outClassGEM)[outClassGEM->GetEntriesFast()]) BmnGemAlignCorrections(
72 iStat, iMod, TVector3(corrGEM[iStat][iMod][0], corrGEM[iStat][iMod][1], corrGEM[iStat][iMod][2]));
73 cout << iStat << " " << iMod << " " << corrGEM[iStat][iMod][0] << " " << corrGEM[iStat][iMod][1] << " "
74 << corrGEM[iStat][iMod][2] << endl;
75 }
76 }
77
78 cout << endl;
79
80 for (Int_t iStat = 0; iStat < nStatSI; iStat++) {
81 Int_t nModul = SI->GetSiliconStation(iStat)->GetNModules();
82 for (Int_t iMod = 0; iMod < nModul; iMod++) {
83 new ((*outClassSI)[outClassSI->GetEntriesFast()]) BmnSiliconAlignCorrections(
84 iStat, iMod, TVector3(corrSI[iStat][iMod][0], corrSI[iStat][iMod][1], corrSI[iStat][iMod][2]));
85 cout << iStat << " " << iMod << " " << corrSI[iStat][iMod][0] << " " << corrSI[iStat][iMod][1] << " "
86 << corrSI[iStat][iMod][2] << endl;
87 }
88 }
89
90 outTree->Fill();
91 outTree->Write();
92 outFile->Close();
93}
94
95void ReadFileCorrections(TString fname, Double_t*** corrGEM, Double_t*** corrSI)
96{
97 if (fname == "")
98 return;
99
100 TChain* chGEM = new TChain("cbmsim");
101 chGEM->Add(fname.Data());
102
103 TClonesArray* corrsGEM = NULL;
104 chGEM->SetBranchAddress("BmnGemAlignCorrections", &corrsGEM);
105
106 for (Int_t iEntry = 0; iEntry < chGEM->GetEntries(); iEntry++) {
107 chGEM->GetEntry(iEntry);
108
109 for (Int_t iCorr = 0; iCorr < corrsGEM->GetEntriesFast(); iCorr++) {
110 BmnGemAlignCorrections* alignGEM = (BmnGemAlignCorrections*)corrsGEM->UncheckedAt(iCorr);
111 corrGEM[alignGEM->GetStation()][alignGEM->GetModule()][0] += alignGEM->GetCorrections().X();
112 corrGEM[alignGEM->GetStation()][alignGEM->GetModule()][1] += alignGEM->GetCorrections().Y();
113 corrGEM[alignGEM->GetStation()][alignGEM->GetModule()][2] += alignGEM->GetCorrections().Z();
114 }
115 }
116 cout << endl;
117 delete chGEM;
118
119 TChain* chSI = new TChain("cbmsim");
120 chSI->Add(fname.Data());
121
122 TClonesArray* corrsSI = NULL;
123 chSI->SetBranchAddress("BmnSiliconAlignCorrections", &corrsSI);
124
125 for (Int_t iEntry = 0; iEntry < chSI->GetEntries(); iEntry++) {
126 chSI->GetEntry(iEntry);
127
128 for (Int_t iCorr = 0; iCorr < corrsSI->GetEntriesFast(); iCorr++) {
130 corrSI[alignSI->GetStation()][alignSI->GetModule()][0] += alignSI->GetCorrections().X();
131 corrSI[alignSI->GetStation()][alignSI->GetModule()][1] += alignSI->GetCorrections().Y();
132 corrSI[alignSI->GetStation()][alignSI->GetModule()][2] += alignSI->GetCorrections().Z();
133 }
134 }
135 cout << endl;
136 delete chSI;
137}
int Int_t
double Double_t
#define R__LOAD_LIBRARY(LIBRARY)
#define R__ADD_INCLUDE_PATH(PATH)
R__EXTERN TSystem * gSystem
BmnSiliconStation * GetSiliconStation(Int_t station_num)
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
virtual Int_t Add(const char *name, Long64_t nentries=TTree::kMaxEntries)
Long64_t GetEntries() const override
Int_t GetEntry(Long64_t entry=0, Int_t getall=0) override
void Close(Option_t *option="") override
Int_t GetEntriesFast() const
TObject * UncheckedAt(Int_t i) const
const char * Data() const
virtual Int_t Fill()
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) const override
virtual Int_t Branch(const char *folder, Int_t bufsize=32000, Int_t splitlevel=99)
Double_t Z() const
Double_t Y() const
Double_t X() const
void ReadFileCorrections(TString, Double_t ***, Double_t ***)
void corrSummator(TString in1="it0.root", TString in2="align.root", TString out="it1.root")