4 UInt_t periodId, UInt_t runId,
6 Double_t ClusterSizeThr,
12 fClusterSizeThr = ClusterSizeThr;
18 FreeVector3D<BmnSigInfo>(fStripGemInfoMC);
19 FreeVector3D<BmnSigInfo>(fStripSilInfoMC);
20 FreeVector3D<BmnSigInfo>(fStripCSCInfoMC);
21 FreeVector3D<BmnSigInfo>(fStripGemInfoEx);
22 FreeVector3D<BmnSigInfo>(fStripSilInfoEx);
23 FreeVector3D<BmnSigInfo>(fStripCSCInfoEx);
24 FreeVector3D<TF1>(fStripGemRescale);
25 FreeVector3D<TF1>(fStripSilRescale);
26 FreeVector3D<TF1>(fStripCSCRescale);
27 delete fGemStationSet;
28 delete fSilStationSet;
29 delete fCscStationSet;
32void BmnRescale::CreateStripVectors() {
33 TString xmlConfFileNameGEM;
34 TString xmlConfFileNameSil;
35 TString xmlConfFileNameCSC;
40 xmlConfFileNameGEM =
"GemRunSpring2018.xml";
41 xmlConfFileNameSil =
"SiliconRunSpring2018.xml";
42 xmlConfFileNameCSC =
"CSCRunSpring2018.xml";
44 xmlConfFileNameGEM =
"GemRunSRCSpring2018.xml";
45 xmlConfFileNameSil =
"SiliconRunSRCSpring2018.xml";
46 xmlConfFileNameCSC =
"CSCRunSRCSpring2018.xml";
50 xmlConfFileNameGEM =
"GemRunSpring2017.xml";
51 xmlConfFileNameSil =
"SiliconRunSpring2017.xml";
54 printf(
"Error! Unknown config!\n");
60 if (xmlConfFileNameGEM.Length() > 0) {
61 xmlConfFileNameGEM = TString(getenv(
"VMCWORKDIR")) +
"/parameters/gem/XMLConfigs/" + xmlConfFileNameGEM;
62 printf(
"xmlConfFileName %s\n", xmlConfFileNameGEM.Data());
64 FillInfoVector<BmnGemStripStationSet, BmnGemStripStation, BmnGemStripModule>(
65 fGemStationSet, fStripGemInfoMC);
66 FillInfoVector<BmnGemStripStationSet, BmnGemStripStation, BmnGemStripModule>(
67 fGemStationSet, fStripGemInfoEx);
69 if (xmlConfFileNameSil.Length() > 0) {
70 xmlConfFileNameSil = TString(getenv(
"VMCWORKDIR")) +
"/parameters/silicon/XMLConfigs/" + xmlConfFileNameSil;
71 printf(
"xmlConfFileName %s\n", xmlConfFileNameSil.Data());
73 FillInfoVector<BmnSiliconStationSet, BmnSiliconStation, BmnSiliconModule>(
74 fSilStationSet, fStripSilInfoMC);
75 FillInfoVector<BmnSiliconStationSet, BmnSiliconStation, BmnSiliconModule>(
76 fSilStationSet, fStripSilInfoEx);
79 if (xmlConfFileNameCSC.Length() > 0) {
80 xmlConfFileNameCSC = TString(getenv(
"VMCWORKDIR")) +
"/parameters/csc/XMLConfigs/" + xmlConfFileNameCSC;
81 printf(
"xmlConfFileName %s\n", xmlConfFileNameCSC.Data());
83 FillInfoVector<BmnCSCStationSet, BmnCSCStation, BmnCSCModule>(
84 fCscStationSet, fStripCSCInfoMC);
85 FillInfoVector<BmnCSCStationSet, BmnCSCStation, BmnCSCModule>(
86 fCscStationSet, fStripCSCInfoEx);
93 TF1 *funcRescale =
new TF1(name,
94 [mc, ex](Double_t *x, Double_t * p) {
95 Double_t r = mc->Eval(x[0]);
96 Double_t
f = ex->GetX(r);
99 }, mc->GetXmin(), mc->GetXmax(), 0);
103BmnStatus BmnRescale::LoadDigitDistributionsFromFile(
105 vector<TString> digiNames,
106 vector<vector<vector<vector<BmnSigInfo* > > > > digiVecs) {
107 vector<TClonesArray*> ars;
108 TChain* chain =
new TChain(
"bmndata");
109 chain->Add(fileName.Data());
110 Long64_t NEventsMC = chain->GetEntries();
111 printf(
"%s recorded entries = %lld\n", fileName.Data(), NEventsMC);
112 for (TString &digiName : digiNames) {
113 TClonesArray* arDigi =
nullptr;
114 chain->SetBranchAddress(digiName.Data(), &arDigi);
115 ars.push_back(arDigi);
117 for (
size_t i = 0;
i < digiVecs.size();
i++)
118 CreateDigitDistributions(chain, ars[
i], digiVecs[
i]);
123BmnStatus BmnRescale::LoadClusterDistributionsFromFile(
125 vector<TString> hitNames,
126 vector<vector<vector<vector<BmnSigInfo* > > > > clusterVecs) {
127 vector<TClonesArray*> hitArr;
128 TChain* chain =
new TChain(
"bmndata");
129 chain->Add(fileName.Data());
130 Long64_t NEvents = chain->GetEntries();
131 printf(
"%s recorded entries = %lld\n", fileName.Data(), NEvents);
132 for (TString &hitName : hitNames) {
133 TClonesArray* arDigi =
nullptr;
134 chain->SetBranchAddress(hitName.Data(), &arDigi);
135 hitArr.push_back(arDigi);
139 CreateClusterDistributions<
145 CreateClusterDistributions<
151 CreateClusterDistributions<
156 BmnCSCLayer>(chain, hitArr[2], fCscStationSet, clusterVecs[2]);
161BmnStatus BmnRescale::LoadClustersOfTrackDistributionsFromFile(
163 TString globalTrackName,
164 vector<TString> subTrackNames,
165 vector<TString> hitNames,
166 vector<vector<vector<vector<BmnSigInfo* > > > > clusterVecs) {
167 TClonesArray* globalTrackArr;
168 vector<TClonesArray*> subTrackArr;
169 vector<TClonesArray*> hitArr;
170 TChain* chain =
new TChain(
"bmndata");
171 chain->Add(fileName.Data());
172 Long64_t NEvents = chain->GetEntries();
173 printf(
"%s recorded entries = %lld\n", fileName.Data(), NEvents);
175 chain->SetBranchAddress(globalTrackName.Data(), &globalTrackArr);
177 for (TString &subTrackName : subTrackNames) {
178 TClonesArray* arDigi =
nullptr;
179 if (subTrackName.Length() > 0)
180 chain->SetBranchAddress(subTrackName.Data(), &arDigi);
181 subTrackArr.push_back(arDigi);
183 for (TString &hitName : hitNames) {
184 TClonesArray* arDigi =
nullptr;
185 chain->SetBranchAddress(hitName.Data(), &arDigi);
186 hitArr.push_back(arDigi);
190 CreateClusterDistributions<
195 BmnGemStripLayer>(chain, globalTrackArr, subTrackArr[0], hitArr[0], fGemStationSet, clusterVecs[0]);
196 CreateClusterDistributions<
201 BmnSiliconLayer>(chain, globalTrackArr, subTrackArr[1], hitArr[1], fSilStationSet, clusterVecs[1]);
202 CreateClusterDistributions<
207 BmnCSCLayer>(chain, globalTrackArr,
nullptr, hitArr[2], fCscStationSet, clusterVecs[2]);
213 if (fileNameMC ==
"" || fileNameEx ==
"") {
214 cout <<
"Files need to be specified!" << endl;
217 TString GlobalTrackName =
"BmnGlobalTrack";
218 vector<TString> mcDigiNames = {
"BmnGemStripDigit",
"BmnSiliconDigit",
"BmnCSCDigit"};
219 auto mcVecs = {fStripGemInfoMC, fStripSilInfoMC, fStripCSCInfoMC};
220 LoadDigitDistributionsFromFile(fileNameMC, mcDigiNames, mcVecs);
222 vector<TString> subTrackNames = {
"BmnGemTrack",
"BmnSiliconTrack",
""};
223 vector<TString> hitNames = {
"BmnGemStripHit",
"BmnSiliconHit",
"BmnCSCHit"};
226 auto expVecs = {fStripGemInfoEx, fStripSilInfoEx, fStripCSCInfoEx};
227 LoadClustersOfTrackDistributionsFromFile(fileNameEx, GlobalTrackName, subTrackNames, hitNames, expVecs);
229 FillRescaleVector<BmnGemStripStationSet, BmnGemStripStation, BmnGemStripModule>(fGemStationSet, fStripGemInfoMC, fStripGemInfoEx, fStripGemRescale);
230 FillRescaleVector<BmnSiliconStationSet, BmnSiliconStation, BmnSiliconModule>(fSilStationSet, fStripSilInfoMC, fStripSilInfoEx, fStripSilRescale);
231 FillRescaleVector<BmnCSCStationSet, BmnCSCStation, BmnCSCModule>(fCscStationSet, fStripCSCInfoMC, fStripCSCInfoEx, fStripCSCRescale);
236void BmnRescale::CreateDigitDistributions(
237 TTree *treeDig, TClonesArray *digits,
238 vector<vector<vector<BmnSigInfo* > > > &infoVec) {
239 printf(
"CreateDigitDistributions started for %s\n", digits->GetClass()->GetName());
241 for (Long64_t
i = 0;
i < treeDig->GetEntries();
i++) {
242 treeDig->GetEntry(
i);
243 for (Int_t iHit = 0; iHit < digits->GetEntriesFast(); iHit++) {
259 for (
size_t iStation = 0; iStation < infoVec.size(); iStation++) {
260 printf(
"iStation %zu\n", iStation);
261 for (
size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
262 printf(
"\tiModule %zu\n", iModule);
263 for (
size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
264 printf(
"\t\tiLayer %zu\n", iLayer);
265 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
266 Double_t minVal = info->
minVal;
267 Double_t maxVal = info->
maxVal;
270 printf(
"\t\t\tMin = %f max = %f\n", minVal, maxVal);
271 TString
name = Form(
"Sig_mc_%s_%zu_%zu_%zu",
272 digits->GetName(), iStation, iModule, iLayer);
273 info->
hSig =
new TH1D(name, name, fNBins,
274 minVal - 0.5 * (maxVal - minVal) / (Double_t) fNBins,
275 maxVal + 0.5 * (maxVal - minVal) / (Double_t) fNBins);
276 name = Form(
"IntSignal_%s_%zu_%zu_%zu",
277 digits->GetName(), iStation, iModule, iLayer);
278 info->
hIntSig =
new TH1D(name, name, fNBins,
279 minVal - 0.5 * (maxVal - minVal) / (Double_t) fNBins,
280 maxVal + 0.5 * (maxVal - minVal) / (Double_t) fNBins);
285 for (Long64_t
i = 0;
i < treeDig->GetEntries();
i++) {
286 treeDig->GetEntry(
i);
287 for (Int_t iHit = 0; iHit < digits->GetEntriesFast(); iHit++) {
297 info->
hSig->Fill(val);
302 for (
size_t iStation = 0; iStation < infoVec.size(); iStation++) {
303 for (
size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
304 for (
size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
305 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
309 for (Int_t
i = 0;
i < fNBins;
i++) {
310 bc += info->
hSig->GetBinContent(
i);
311 info->
hIntSig->SetBinContent(
i, bc);
316 info->
hIntSig->SetLineColor(kRed);
317 info->
func =
new TF1(
318 Form(
"%s_%zu_%zu_%zu", digits->GetName(), iStation, iModule, iLayer),
319 [info, bc](Double_t *x, Double_t * p) {
321 if (x[0] >= info->maxVal) return 1.0;
322 Int_t iBin = info->hIntSig->GetXaxis()->FindBin(x[0]);
323 Int_t jBin = iBin + ((x[0] > info->hIntSig->GetBinCenter(iBin)) ? 1 : -1);
324 Double_t v = info->hIntSig->GetBinContent(iBin) +
325 (info->hIntSig->GetBinContent(jBin) - info->hIntSig->GetBinContent(iBin))*
326 2 * abs(x[0] - info->hIntSig->GetBinCenter(iBin)) /
327 (info->hIntSig->GetBinWidth(iBin) + info->hIntSig->GetBinWidth(jBin));
330 info->
func->SetNpx(fNBins);
331 info->
func->SetLineColor(kBlue);
BmnStatus CreateRescales(TString fileNameMC, TString fileNameEx)
TF1 * GetRescaleFunc(TString name, TF1 *mc, TF1 *ex)
BmnRescale(UInt_t periodId, UInt_t runId, Double_t lowThr=0, Double_t ClusterSizeThr=0, Int_t nBins=1e6)
Double_t GetStripSignal()