82 cout <<
"\nBmnGemStripDigitizer::Init()\n ";
84 if (fVerbose && fOnlyPrimary)
85 cout <<
" Only primary particles are processed!!! " << endl;
87 if (fVerbose && fStripMatching)
88 cout <<
" Strip Matching is activated!!! " << endl;
90 cout <<
" Strip Matching is deactivated!!! " << endl;
92 FairRootManager* ioman = FairRootManager::Instance();
94 fBmnGemStripPointsArray = (TClonesArray*)ioman->GetObject(fInputBranchName);
95 if (!fBmnGemStripPointsArray) {
96 cout <<
"BmnGemStripDigitizer::Init(): branch StsPoint not found! Task "
103 fMCTracksArray = (TClonesArray*)ioman->GetObject(
"MCTrack");
105 fBmnGemStripDigitsArray =
new TClonesArray(fOutputDigitsBranchName);
106 ioman->Register(fOutputDigitsBranchName,
"GEM_DIGIT", fBmnGemStripDigitsArray, kTRUE);
108 if (fStripMatching) {
109 fBmnGemStripDigitMatchesArray =
new TClonesArray(
"BmnMatch");
110 ioman->Register(fOutputDigitMatchesBranchName,
"GEM_DIGIT", fBmnGemStripDigitMatchesArray, kTRUE);
113 TString gPathGemConfig = gSystem->Getenv(
"VMCWORKDIR");
114 gPathGemConfig +=
"/parameters/gem/XMLConfigs/";
117 switch (fCurrentConfig) {
119 XMLConfigFile = gPathGemConfig +
"GemRunSpring2017.xml";
121 cout <<
" Current GEM Configuration : RunSpring2017"
126 XMLConfigFile = gPathGemConfig +
"GemRunSpring2018.xml";
128 cout <<
" Current GEM Configuration : RunSpring2018"
134 XMLConfigFile = gPathGemConfig +
"GemRunSRCSpring2018.xml";
136 cout <<
" Current GEM Configuration : GemRunSRCSpring2018"
141 XMLConfigFile = gPathGemConfig +
"GemRunSRC2021.xml";
143 cout <<
" Current GEM Configuration : RunSRC2021"
148 XMLConfigFile = gPathGemConfig +
"GemRun8.xml";
150 cout <<
" Current GEM Configuration : Run8"
155 XMLConfigFile = gPathGemConfig +
"GemRun9.xml";
157 cout <<
" Current GEM Configuration : Run9"
164 if (!gSystem->AccessPathName(XMLConfigFile)) {
166 cout <<
" XMLConfigFile : " << XMLConfigFile <<
"\n";
171 Fatal(
"BmnGemStripDigitizer::Init()",
" !!! Current configuration is not set !!! ");
180 cout <<
"BmnGemStripDigitizer::Init() finished\n\n";
217 FairMCPoint* GemStripPoint;
220 for (Int_t ipoint = 0; ipoint < fBmnGemStripPointsArray->GetEntriesFast(); ipoint++) {
221 GemStripPoint = (FairMCPoint*)fBmnGemStripPointsArray->At(ipoint);
233 Double_t x = -GemStripPoint->GetX();
235 Double_t y = GemStripPoint->GetY();
236 Double_t z = GemStripPoint->GetZ();
238 Double_t px = -GemStripPoint->GetPx();
240 Double_t py = GemStripPoint->GetPy();
241 Double_t pz = GemStripPoint->GetPz();
243 Double_t dEloss = GemStripPoint->GetEnergyLoss() * 1e6;
244 Int_t refId = ipoint;
246 Int_t mc_station_num = ((
CbmStsPoint*)GemStripPoint)->GetStation();
247 Int_t mc_module_num = ((
CbmStsPoint*)GemStripPoint)->GetModule();
253 if (TransfSet && mc_station_num < StationSet->GetNStations()) {
255 if (mc_module_num < station->GetNModules()) {
257 Plane3D::Point loc_point =
260 Plane3D::Point(-(px + x), (py + y), (pz + z)), mc_station_num, mc_module_num);
265 px = -(loc_direct.X() - loc_point.X());
266 py = loc_direct.Y() - loc_point.Y();
267 pz = loc_direct.Z() - loc_point.Z();
288 for (Int_t iStation = 0; iStation < StationSet->
GetNStations(); ++iStation) {
291 for (Int_t iModule = 0; iModule < station->
GetNModules(); ++iModule) {
294 for (Int_t iLayer = 0; iLayer <
module->GetNStripLayers(); ++iLayer) {
297 for (Int_t iStrip = 0; iStrip < layer.
GetNStrips(); ++iStrip) {
300 signal = signal / (120. / 2.0);
313 signal += gRandom->Gaus(0, fSigma);
315 if (signal <= fThresh)
320 new ((*fBmnGemStripDigitsArray)[fBmnGemStripDigitsArray->GetEntriesFast()])
323 if (fStripMatching) {
324 new ((*fBmnGemStripDigitMatchesArray)[fBmnGemStripDigitMatchesArray->GetEntriesFast()])
327 }
else if (fSigma > 0) {
329 signal += gRandom->Gaus(0, fSigma);
337 if (signal <= fThresh)
341 new ((*fBmnGemStripDigitsArray)[fBmnGemStripDigitsArray->GetEntriesFast()])
343 if (fStripMatching) {
344 new ((*fBmnGemStripDigitMatchesArray)[fBmnGemStripDigitMatchesArray->GetEntriesFast()])