4 : fSilHitsArray(nullptr)
5 , fGemHitsArray(nullptr)
6 , fGemHitsArrayFiltered(nullptr)
7 , fSilHitsArrayFiltered(nullptr)
17 cout <<
"======================== RealisticMc init started ====================" << endl;
20 FairRootManager* ioman = FairRootManager::Instance();
22 Fatal(
"Init",
"FairRootManager is not instantiated");
24 fGemHitsArray = (TClonesArray*)ioman->GetObject(
"BmnGemStripHit");
25 fSilHitsArray = (TClonesArray*)ioman->GetObject(
"BmnSiliconHit");
27 fGemHitsArrayFiltered =
new TClonesArray(
"BmnGemStripHit");
28 ioman->Register(
"BmnGemStripHitFiltered",
"BmnGemStripHitFiltered_", fGemHitsArrayFiltered, kFALSE);
30 fSilHitsArrayFiltered =
new TClonesArray(
"BmnSiliconHit");
31 ioman->Register(
"BmnSiliconHitFiltered",
"BmnSiliconHitFiltered_", fSilHitsArrayFiltered, kFALSE);
38 fGemHitsArrayFiltered->Delete();
39 fSilHitsArrayFiltered->Delete();
41 doHitSelection(fGemHitsArray, fGemHitsArrayFiltered);
42 doHitSelection(fSilHitsArray, fSilHitsArrayFiltered);
47void BmnRealisticMc::doHitSelection(TClonesArray* hitsArray, TClonesArray* hitsArrayFiltered)
50 Bool_t isGem = kFALSE, isSilicon = kFALSE;
52 TString className = TString(hitsArray->GetClass()->GetName());
53 TString
detector = (className.Contains(
"BmnGemStripHit")) ?
"GEM"
54 : className.Contains(
"BmnSiliconHit") ?
"SILICON"
66 set<Int_t> digiIndices;
68 for (Int_t iHit = 0; iHit < hitsArray->GetEntriesFast(); iHit++) {
72 digiIndices.insert(idx);
76 map<Int_t, vector<BmnHit>> hitMap;
78 for (
auto idx : digiIndices) {
79 vector<BmnHit> hitVector;
80 hitMap[idx] = hitVector;
84 for (Int_t iHit = 0; iHit < hitsArray->GetEntriesFast(); iHit++) {
91 hitMap.find(idx)->second.push_back(*(
BmnHit*)hit);
95 for (
auto it : hitMap) {
98 Double_t probDigiValue = gRandom->Rndm();
105 Bool_t isSkipped = kFALSE;
110 Int_t hitIdx = it.second.at(Int_t(it.second.size() * gRandom->Rndm())).
GetIndex();
111 hit = (
BmnHit*)hitsArray->UncheckedAt(hitIdx);
116 if (counter > 2. * it.second.size()) {
120 }
while (zone ==
"");
121 }
else if (isSilicon) {
122 Int_t hitIdx = it.second.at(Int_t(it.second.size() * gRandom->Rndm())).GetIndex();
123 hit = (
BmnHit*)hitsArray->UncheckedAt(hitIdx);
143 Bool_t isExcluded = (probDigiValue > probHitValue) ? kTRUE : kFALSE;
146 for (
BmnHit hit0 : it.second) {
147 BmnHit* hitWithSetType = (
BmnHit*)hitsArray->UncheckedAt(hit0.GetIndex());
153 for (
BmnHit hit0 : it.second) {
156 new ((*hitsArrayFiltered)[hitsArrayFiltered->GetEntriesFast()])
BmnGemStripHit(*hitWithSetType);
159 new ((*hitsArrayFiltered)[hitsArrayFiltered->GetEntriesFast()])
BmnSiliconHit(*hitWithSetType);
void SetModule(Int_t mod)
void SetZone(TString zone)
void SetDetector(TString det)
Double_t GetProbability()
void SetStation(Int_t stat)
TString GetGemZone(BmnHit *)
BmnMatch GetDigitNumberMatch()
Short_t GetStation() const
const BmnLink & GetLink(Int_t i) const
virtual void Exec(Option_t *option)
virtual InitStatus Init()