5#include <DigiRunHeader.h>
6#include <FairMCEventHeader.h>
27#include "BmnCSCStationSet.h"
28#include "BmnGemStripConfiguration.h"
29#include "BmnGemStripStationSet.h"
30#include "BmnGemStripStationSet_RunSpring2017.h"
31#include "BmnGemStripStationSet_RunSummer2016.h"
32#include "BmnGemStripStationSet_RunWinter2016.h"
33#include "BmnSiliconStationSet.h"
35#include <BmnCSCDigit.h>
38#include <BmnEventHeader.h>
39#include <BmnGemStripDigit.h>
40#include <BmnGemStripHit.h>
41#include <BmnGlobalTrack.h>
43#include <BmnSiliconDigit.h>
44#include <BmnSiliconHit.h>
45#include <DstEventHeader.h>
148 template<
class ClStationSet,
class ClSt,
class ClMod>
153 for (
Int_t iStation = 0; iStation < ss->GetNStations(); iStation++) {
154 ClSt* st = ss->GetStation(iStation);
155 sumMods += st->GetNModules();
156 for (
Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
157 ClMod* mod = st->GetModule(iModule);
158 if (maxLayers < mod->GetNStripLayers())
159 maxLayers = mod->GetNStripLayers();
165 can->Divide(maxLayers, sumMods);
170 vector<TString> digiNames,
171 vector<vector<vector<vector<BmnSigInfo*>>>> digiVecs);
173 vector<TString> clusterNames,
174 vector<vector<vector<vector<BmnSigInfo*>>>> clusterVecs);
177 vector<TString> subTrackNames,
178 vector<TString> hitNames,
179 vector<vector<vector<vector<BmnSigInfo*>>>> clusterVecs);
185 for (
auto& row : vvv)
186 for (
auto& col : row)
196 template<
class ClStationSet,
class ClSt,
class ClMod>
199 for (
Int_t iStation = 0; iStation < ss->GetNStations(); iStation++) {
200 vector<vector<BmnSigInfo*>> rowGEM;
201 ClSt* st = ss->GetStation(iStation);
202 for (
Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
203 vector<BmnSigInfo*> colGEM;
204 ClMod* mod = st->GetModule(iModule);
205 for (
Int_t iLayer = 0; iLayer < mod->GetNStripLayers(); iLayer++) {
209 rowGEM.push_back(colGEM);
211 vvv.push_back(rowGEM);
215 template<
class ClStationSet,
class ClSt,
class ClMod>
217 vector<vector<vector<BmnSigInfo*>>>& vMC,
218 vector<vector<vector<BmnSigInfo*>>>& vEx,
219 vector<vector<vector<TF1*>>>& vRescale)
221 for (
Int_t iStation = 0; iStation < ss->GetNStations(); iStation++) {
222 vector<vector<TF1*>> rowGEM;
223 ClSt* st = ss->GetStation(iStation);
224 for (
Int_t iModule = 0; iModule < st->GetNModules(); iModule++) {
226 ClMod* mod = st->GetModule(iModule);
227 for (
Int_t iLayer = 0; iLayer < mod->GetNStripLayers(); iLayer++) {
229 if ((vMC[iStation][iModule][iLayer]->func) && (vEx[iStation][iModule][iLayer]->func))
230 r =
GetRescaleFunc(
Form(
"rescale_%s", vEx[iStation][iModule][iLayer]->func->GetName()),
231 vMC[iStation][iModule][iLayer]->func, vEx[iStation][iModule][iLayer]->func);
233 printf(
"st %d mod %d l %d func %08X of MC %08X Ex %08X \n", iStation, iModule, iLayer,
234 (UInt_t)(
size_t)r, (UInt_t)(
size_t)vMC[iStation][iModule][iLayer]->func,
235 (UInt_t)(
size_t)vEx[iStation][iModule][iLayer]->func);
237 rowGEM.push_back(colGEM);
239 vRescale.push_back(rowGEM);
253 template<
class ClHit,
class ClStationSet,
class ClSt,
class ClMod,
class ClLay>
259 vector<vector<vector<BmnSigInfo*>>>& infoVec)
261 printf(
"CreateClusterDistributions started for %s\n", gemHits->
GetClass()->
GetName());
280 if ((!subTrack) && (!isCSC))
282 vector<Int_t> vrange;
287 for (
size_t i = 0;
i < vrange.size();
i++)
292 for (
Int_t iHit : vrange) {
293 ClHit* hit =
static_cast<ClHit*
>(gemHits->
UncheckedAt(iHit));
294 Int_t iSt = hit->GetStation();
295 Int_t iMod = hit->GetModule();
298 ClMod* mod = ss->GetStation(iSt)->GetModule(iMod);
301 for (
size_t iLay = 0; iLay < mod->GetStripLayers().size(); iLay++) {
302 ClLay lay = mod->GetStripLayer(iLay);
309 if ((lay.IsPointInsideStripLayer(x * (-1), y))) {
311 Int_t iLayCorr = (isSil && (iSt > 0)) ? (iLay / 2) : iLay;
312 BmnSigInfo* info = infoVec[iSt][iMod][iLayCorr];
314 : hit->GetStripTotalSignalInLowerLayer();
316 : hit->GetClusterSizeInLowerLayer();
332 for (
size_t iStation = 0; iStation < infoVec.size(); iStation++) {
333 printf(
"iStation %zu\n", iStation);
334 for (
size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
335 printf(
"\tiModule %zu\n", iModule);
336 for (
size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
337 printf(
"\t\tiLayer %zu\n", iLayer);
338 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
341 printf(
"\t\t\tMin = %f max = %f\n", minVal, maxVal);
344 TString name =
Form(
"Sig_exp_%s_%zu_%zu_%zu", gemHits->
GetName(), iStation, iModule, iLayer);
347 name =
Form(
"IntSignal_%s_%zu_%zu_%zu", gemHits->
GetName(), iStation, iModule, iLayer);
363 if ((!subTrack) && (!isCSC))
365 vector<Int_t> vrange;
370 for (
size_t i = 0;
i < vrange.size();
i++)
375 for (
Int_t iHit : vrange) {
376 ClHit* hit =
static_cast<ClHit*
>(gemHits->
UncheckedAt(iHit));
378 if (hit->GetFlag() ==
kFALSE)
383 Int_t iSt = hit->GetStation();
384 Int_t iMod = hit->GetModule();
385 ClMod* mod = ss->GetStation(iSt)->GetModule(iMod);
386 for (
size_t iLay = 0; iLay < mod->GetStripLayers().size(); iLay++) {
387 ClLay lay = mod->GetStripLayer(iLay);
390 if (lay.IsPointInsideStripLayer(x * (-1), y)) {
395 Int_t iLayCorr = (isSil && (iSt > 0)) ? (iLay / 2) : iLay;
396 BmnSigInfo* info = infoVec[iSt][iMod][iLayCorr];
400 : hit->GetStripTotalSignalInLowerLayer();
402 : hit->GetClusterSizeInLowerLayer();
417 for (
size_t iStation = 0; iStation < infoVec.size(); iStation++) {
418 for (
size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
419 for (
size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
420 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
433 Form(
"%s_%zu_%zu_%zu", gemHits->
GetName(), iStation, iModule, iLayer),
436 if (x[0] >= info->maxVal)
438 Int_t iBin = info->hIntSig->GetXaxis()->FindBin(x[0]);
439 Int_t jBin = iBin + ((x[0] > info->hIntSig->GetBinCenter(iBin)) ? 1 : -1);
440 Double_t v = info->hIntSig->GetBinContent(iBin)
441 + (info->hIntSig->GetBinContent(jBin) - info->hIntSig->GetBinContent(iBin)) * 2
442 * abs(x[0] - info->hIntSig->GetBinCenter(iBin))
443 / (info->hIntSig->GetBinWidth(iBin) + info->hIntSig->GetBinWidth(jBin));
455 printf(
"Real time %f s,\n CPU time %f s\n", rtime, ctime);
465 template<
class ClHit,
class ClStationSet,
class ClSt,
class ClMod,
class ClLay>
469 vector<vector<vector<BmnSigInfo*>>>& infoVec)
471 printf(
"CreateClusterDistributions started for %s\n", gemHits->
GetClass()->
GetName());
474 printf(
"isGem = %d \n", isGem);
476 printf(
"isSil = %d \n", isSil);
483 ClHit* hit =
static_cast<ClHit*
>(gemHits->
UncheckedAt(iHit));
484 Int_t iSt = hit->GetStation();
485 Int_t iMod = hit->GetModule();
488 ClMod* mod = ss->GetStation(iSt)->GetModule(iMod);
491 for (
size_t iLay = 0; iLay < mod->GetStripLayers().size(); iLay++) {
492 ClLay lay = mod->GetStripLayer(iLay);
499 if ((lay.IsPointInsideStripLayer(x * (-1), y))) {
501 Int_t iLayCorr = (isSil && (iSt > 0)) ? (iLay / 2) : iLay;
502 BmnSigInfo* info = infoVec[iSt][iMod][iLayCorr];
504 : hit->GetStripTotalSignalInLowerLayer();
506 : hit->GetClusterSizeInLowerLayer();
520 for (
size_t iStation = 0; iStation < infoVec.size(); iStation++) {
521 printf(
"iStation %zu\n", iStation);
522 for (
size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
523 printf(
"\tiModule %zu\n", iModule);
524 for (
size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
525 printf(
"\t\tiLayer %zu\n", iLayer);
526 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
529 printf(
"\t\t\tMin = %f max = %f\n", minVal, maxVal);
532 TString name =
Form(
"Sig_exp_%s_%zu_%zu_%zu", gemHits->
GetName(), iStation, iModule, iLayer);
535 name =
Form(
"IntSignal_%s_%zu_%zu_%zu", gemHits->
GetName(), iStation, iModule, iLayer);
545 ClHit* hit =
static_cast<ClHit*
>(gemHits->
UncheckedAt(iHit));
546 Int_t iSt = hit->GetStation();
547 Int_t iMod = hit->GetModule();
548 ClMod* mod = ss->GetStation(iSt)->GetModule(iMod);
549 for (
size_t iLay = 0; iLay < mod->GetStripLayers().size(); iLay++) {
550 ClLay lay = mod->GetStripLayer(iLay);
553 if (lay.IsPointInsideStripLayer(x * (-1), y)) {
554 Int_t iLayCorr = (isSil && (iSt > 0)) ? (iLay / 2) : iLay;
555 BmnSigInfo* info = infoVec[iSt][iMod][iLayCorr];
559 : hit->GetStripTotalSignalInLowerLayer();
561 : hit->GetClusterSizeInLowerLayer();
570 for (
size_t iStation = 0; iStation < infoVec.size(); iStation++) {
571 for (
size_t iModule = 0; iModule < infoVec[iStation].size(); iModule++) {
572 for (
size_t iLayer = 0; iLayer < infoVec[iStation][iModule].size(); iLayer++) {
573 BmnSigInfo* info = infoVec[iStation][iModule][iLayer];
586 Form(
"%s_%zu_%zu_%zu", gemHits->
GetName(), iStation, iModule, iLayer),
589 if (x[0] >= info->maxVal)
591 Int_t iBin = info->hIntSig->GetXaxis()->FindBin(x[0]);
592 Int_t jBin = iBin + ((x[0] > info->hIntSig->GetBinCenter(iBin)) ? 1 : -1);
593 Double_t v = info->hIntSig->GetBinContent(iBin)
594 + (info->hIntSig->GetBinContent(jBin) - info->hIntSig->GetBinContent(iBin)) * 2
595 * abs(x[0] - info->hIntSig->GetBinCenter(iBin))
596 / (info->hIntSig->GetBinWidth(iBin) + info->hIntSig->GetBinWidth(jBin));
char * Form(const char *fmt,...)
BmnStatus
Define status code.
Int_t GetGemTrackIndex() const
Accessors.
BmnRescale - class implementing ADC signal rescaling specific for each strip plane.
BmnStatus CreateRescales(TString fileNameMC, TString fileNameEx)
void CreateStripVectors()
vector< vector< vector< TF1 * > > > GetSilRescaleVector()
static const UInt_t Pad_Width
void FreeVector3D(vector< vector< vector< cl * > > > vvv)
vector< vector< vector< BmnSigInfo * > > > fStripGemInfoEx
TF1 * GetRescaleFunc(TString name, TF1 *mc, TF1 *ex)
void CreateClusterDistributions(TTree *treeDST, TClonesArray *globTracks, TClonesArray *subTracks, TClonesArray *gemHits, ClStationSet *ss, vector< vector< vector< BmnSigInfo * > > > &infoVec)
Template function aimed to create exp cluster signal distribution function (Hits from tracks variant)...
vector< vector< vector< BmnSigInfo * > > > GetSilInfoVectorExp()
vector< vector< vector< TF1 * > > > fStripGemRescale
BmnStatus LoadDigitDistributionsFromFile(TString name, vector< TString > digiNames, vector< vector< vector< vector< BmnSigInfo * > > > > digiVecs)
vector< vector< vector< BmnSigInfo * > > > GetGemInfoVectorExp()
BmnStatus LoadClusterDistributionsFromFile(TString name, vector< TString > clusterNames, vector< vector< vector< vector< BmnSigInfo * > > > > clusterVecs)
vector< vector< vector< TF1 * > > > fStripCSCRescale
void CreateDigitDistributions(TTree *treeDig, TClonesArray *digits, vector< vector< vector< BmnSigInfo * > > > &infoVec)
BmnCSCStationSet * fCscStationSet
void FillInfoVector(ClStationSet *ss, vector< vector< vector< BmnSigInfo * > > > &vvv)
Template function for generating 3D vector of BmnSigInfo objects.
vector< vector< vector< TF1 * > > > GetGemRescaleVector()
TCanvas * GetCanvas(ClStationSet *ss)
void CreateClusterDistributions(TTree *treeDST, TClonesArray *gemHits, ClStationSet *ss, vector< vector< vector< BmnSigInfo * > > > &infoVec)
Template function aimed to create exp cluster signal distribution function (all hits).
vector< vector< vector< BmnSigInfo * > > > fStripCSCInfoEx
static const UInt_t Pad_Height
vector< vector< vector< BmnSigInfo * > > > GetCSCInfoVectorExp()
vector< vector< vector< TF1 * > > > GetCSCRescaleVector()
void FillRescaleVector(ClStationSet *ss, vector< vector< vector< BmnSigInfo * > > > &vMC, vector< vector< vector< BmnSigInfo * > > > &vEx, vector< vector< vector< TF1 * > > > &vRescale)
vector< vector< vector< BmnSigInfo * > > > fStripSilInfoMC
BmnStatus LoadClustersOfTrackDistributionsFromFile(TString fileName, TString globalTrackNames, vector< TString > subTrackNames, vector< TString > hitNames, vector< vector< vector< vector< BmnSigInfo * > > > > clusterVecs)
vector< vector< vector< BmnSigInfo * > > > fStripGemInfoMC
BmnGemStripStationSet * fGemStationSet
BmnRescale(UInt_t periodId, UInt_t runId, Double_t lowThr=0, Double_t ClusterSizeThr=0, Int_t nBins=1e6)
vector< vector< vector< BmnSigInfo * > > > fStripCSCInfoMC
BmnSiliconStationSet * fSilStationSet
vector< vector< vector< TF1 * > > > fStripSilRescale
vector< vector< vector< BmnSigInfo * > > > fStripSilInfoEx
Int_t GetHitIndex(Int_t iHit) const
virtual void SetLineColor(Color_t lcolor)
TClass * GetClass() const
const char * GetName() const override
virtual void SetNpx(Int_t npx=100)
virtual Int_t Fill(const char *name, Double_t w)
virtual void SetBinContent(Int_t bin, Double_t content)
virtual Double_t GetBinContent(Int_t bin) const
virtual void Scale(Double_t c1=1, Option_t *option="")
const char * GetName() const override
Int_t GetEntriesFast() const
TObject * UncheckedAt(Int_t i) const
void Start(Bool_t reset=kTRUE)
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
virtual Long64_t GetEntries() const