48: FairTask(name, iVerbose),
49 fEventManager(nullptr),
53 fCaloMinEnergyThreshold(caloMinEnergyThreshold),
60 fResetRequiredFlag(kFALSE),
143 if (!IsActive())
return;
146 if (fVerbose > 1) cout <<
"-----[ BmnCaloTowerDraw::Exec() | Type: " << fCaloName <<
" | ]-----------------------------------" << endl;
149 for (UInt_t
i = 0;
i < fNumModules+1;
i++)
155 if (fVerbose > 2) cout <<
"BmnCaloTowerDraw::Exec() | Type: " << fCaloName <<
" | Number of Calo digits = " << nDigits << endl;
157 for (
int i = 0;
i < nDigits;
i++)
162 if (channel < 1 || channel > fNumModules)
continue;
163 Float_t energy = dgt->
GetAmp() * 1e-3;
165 if (fVerbose > 3) cout <<
"BmnCaloTowerDraw::Exec() | Type: " << fCaloName <<
" | Channel = " << channel <<
", Energy = " << energy <<
" GeV" << endl;
167 fEneArr[channel] = energy;
170 for (UInt_t
i = 1;
i < fNumModules+1;
i++)
171 if (fEneArr[
i] > fMaxE) fMaxE = fEneArr[
i];
173 if (fVerbose > 2) cout <<
"BmnCaloTowerDraw::Exec() | Type: " << fCaloName <<
" | Max energy = " << fMaxE <<
" GeV" << endl;
179 if (fResetRequiredFlag)
182 for (UInt_t
i = 0;
i < fNumModules+1;
i++)
187 fResetRequiredFlag = kFALSE;
191 TEvePointSet *q =
new TEvePointSet(GetName(),
fDigitList->GetEntriesFast(), TEvePointSelectorConsumer::kTVT_XYZ);
198 gEve->FullRedraw3D(kFALSE);
203 gGeoManager->cd(fGeoPath.c_str());
205 auto rootNode = gGeoManager->GetCurrentNode();
206 auto rootArr = rootNode->GetVolume()->GetNodes();
208 for (Int_t iModule = 0; iModule < rootArr->GetEntriesFast(); iModule++)
210 auto caloNode = (TGeoNode *) rootArr->UncheckedAt(iModule);
211 auto caloArr = caloNode->GetVolume()->GetNodes();
213 for (Int_t iTower = 0; iTower < caloArr->GetEntriesFast(); iTower++)
215 auto moduleNode = (TGeoNode *) caloArr->UncheckedAt(iTower);
216 TGeoVolume *moduleVolumeCopy;
226 moduleVolumeCopy = (TGeoVolume *) moduleNode->GetVolume()->Clone();
227 fModuleZLen[iTower] = ((TGeoBBox *) moduleVolumeCopy->GetShape())->GetDZ();
228 if (fMaxModuleZLen < fModuleZLen[iTower])
229 fMaxModuleZLen = fModuleZLen[iTower];
233 moduleVolumeCopy = (TGeoVolume *) moduleNode->GetVolume();
235 auto box = (TGeoBBox *) moduleVolumeCopy->GetShape();
236 auto mat = moduleNode->GetMatrix();
238 if (fEneArr[iTower+1] != 0)
240 box->SetBoxDimensions(box->GetDX(), box->GetDY(), fModuleZLen[iTower] * fEneArr[iTower+1] / fMaxE);
241 ((TGeoTranslation *) mat)->SetDz(fModuleZLen[iTower] * fEneArr[iTower+1] / fMaxE - fMaxModuleZLen);
243 moduleNode->SetVisibility(kTRUE);
246 moduleNode->SetVisibility(kFALSE);
249 moduleNode->SetVolume(moduleVolumeCopy);
253 fResetRequiredFlag = kTRUE;