65 cout <<
"-W- BmnZdcDigiScheme::Init: "
66 <<
"No geometry parameters available!" << endl;
70 cout <<
"-W- BmnZdcDigiScheme::Init: "
71 <<
"No digitization parameters available!" << endl;
78 cout <<
"-W- BmnZdcDigiScheme::Init: "
79 <<
"No sensitive nodes available!" << endl;
85 cout <<
"-W- BmnZdcDigiScheme::Init: "
86 <<
"No passive nodes available!" << endl;
96 cout << endl <<
"-W- BmnZdcDigiScheme::Init: finished." << endl;
108 static TString root_name_copy1 =
"";
109 static Double_t volData[6] = {0, 0, 0, 0, 0, 0};
112 TString shape_name = nod->getShapePointer()->GetName();
113 TString root_name = nod->getRootVolume()->GetName();
117 FairGeoVector pos = nod->getLabTransform()->getTranslation();
119 for (
i = 0;
i < 3;
i++)
120 volData[
i] = pos.getValues(
i);
122 if (root_name != root_name_copy1) {
124 root_name_copy1 = root_name;
126 shape = (
TGeoBBox*)nod->getRootVolume()->GetShape();
129 volData[3] = shape->
GetDX();
130 volData[4] = shape->
GetDY();
131 volData[5] = shape->
GetDZ();
134 volData[3] = nod->getPoint(2)->getZ() / 10.;
135 volData[4] = volData[3];
136 volData[5] = shape->
GetDZ();
142 for (
i = 0;
i < 6;
i++)
143 volInfo->push_back(volData[
i]);
147 tmp =
" root: " + root_name +
", shape: " + shape_name;
148 tmp +=
"X,Y,Z, Dx,Dy,Dz: ";
149 cout << tmp << volData[0] <<
"," << volData[1] <<
"," << volData[2] <<
", " << volData[3] <<
"," << volData[4]
150 <<
"," << volData[5] << endl;
170 TString nod_name = nod->GetName();
171 mother_name = nod->getMother();
178 (*right).push_back(1);
180 (*right).push_back(2);
181 (*right).push_back(nod->getCopyNo());
183 (*right).push_back(nodeNumber);
186 (*left).push_back(nod->getRootVolume()->GetNumber() + 3);
187 (*left).push_back(nod->getCopyNo());
190 tmp =
" mother: " + mother_name +
", me: " + (nod->getName()) +
" ";
191 cout << tmp << (*left)[0] <<
"," << (*left)[1] <<
" : " << (*right)[0] <<
"," << (*right)[1] <<
","
192 << (*right)[2] << endl;
198 cout <<
"-E- BmnZdcDigiScheme::CreateVolInfoElement: Strange for me node: " << nod->GetName()
199 <<
" Node number:" << nodeNumber <<
" Mother:" << mother_name << endl;
210 FairGeoNode* nod = 0;
211 Int_t nodeNumber, zdc_channel = 0;
223 cout <<
"-W- BmnZdcDigiScheme::AddNodes: started. nNodes:" << nPasNodes << endl;
228 for (nodeNumber = 1; nodeNumber < nPasNodes; nodeNumber++) {
230 nod = (FairGeoNode*)
fPasNodes->At(nodeNumber);
233 nod_name = nod->getName();
256 cout <<
"-W- BmnZdcDigiScheme::AddNodes: "
258 <<
"Node number " << nodeNumber <<
" from " << nPasNodes <<
" not found!" << endl;
280 Int_t moduleID, nModules;
282 TString lm_name = nod1->getName();
283 TString last_module_number(&(lm_name[lm_name.
Last(
'#') + 1]));
284 nModules = last_module_number.
Atoi();
286 for (moduleID = 1; moduleID < nModules; moduleID++) {
289 (*left1)[1] = (*left)[1] + moduleID;
291 (*right1)[1] = (*right)[1] + moduleID;
312 Int_t moduleID, nModules;
314 TString lm_name = nod1->getName();
315 TString last_module_number(&(lm_name[lm_name.
Last(
'#') + 1]));
316 nModules = last_module_number.
Atoi();
318 for (moduleID = 1; moduleID < nModules; moduleID++) {
320 nod1 = (FairGeoNode*)
fPasNodes->At(
fPasNodes->GetEntries() - 2 - nModules + moduleID);
322 FairGeoVector pos = nod1->getLabTransform()->getTranslation();
325 (*volInfo1)[0] = pos.getValues(0);
326 (*volInfo1)[1] = pos.getValues(1);
329 (*right1)[1] = (*right)[1] + moduleID;
332 (*right2)[0] = (*right1)[0] + 1;
335 (*volInfo2)[2] = -(*volInfo2)[2];
444 Int_t content[] = {volID, copyNoMotherMother};
449 cout <<
" BmnZdc Volume: " << volID <<
"," << copyNoMotherMother <<
" DigiID: " << pDigiID[0] <<
"," << pDigiID[1]
450 <<
"," << pDigiID[2];
458 cout <<
" X,Y,Z [cm]: " << (*pVolInfo)[0] <<
"," << (*pVolInfo)[1] <<
"," << (*pVolInfo)[2]
459 <<
" Dx,Dy,Dz [cm]: " << (*pVolInfo)[3] <<
"," << (*pVolInfo)[4] <<
"," << (*pVolInfo)[5];
461 cout <<
" (no VolInfo) ";
475 std::map<BmnZdcDigiId_t, BmnZdcVolInfo_t*>::iterator it;
476 std::map<Double_t, Int_t> xmap, ymap, zmap;
490 x = (*((*it).second))[0];
492 xmap[x] = xmap[x] + 1;
496 y = (*((*it).second))[1];
498 ymap[y] = ymap[y] + 1;
502 z = (*((*it).second))[2];
504 zmap[z] = zmap[z] + 1;
530 Int_t content[] = {-1, -1};
537 resultmc[0] = (
gGeoManager->GetMother(2))->GetNumber();
538 resultmc[1] = (
gGeoManager->GetMother(1))->GetMotherVolume()->GetNumber();
552 Int_t content[] = {pMcVolumeNumber, pMotherMotherCopyNumber};
562 module_groupID = digiID[0];
571 cout <<
"*********************************************" << endl;
573 cout <<
"*** BmnZdcDigiScheme:" << endl;
574 cout <<
" BmnZdc Nx,Ny,Nz: " <<
Nx <<
"," <<
Ny <<
"," <<
Nz;
576 std::map<BmnZdcVolId_t, BmnZdcDigiId_t>::iterator it;
581 cout <<
"*********************************************" << endl;
588 Int_t pMotherCopyNumber,
589 Int_t pMotherMotherCopyNumber,
594 Int_t content[] = {pMotherMotherCopyNumber, pMotherCopyNumber, pMcVolumeNumber, pMcCopyNumber};
597 pGroupId = digiID[0];
R__EXTERN TGeoManager * gGeoManager
BmnZdcDigiPar * fZdcDigiPar
Bool_t CreateVolCopyElements(BmnZdcVolId_t *left, BmnZdcDigiId_t *right)
BmnZdcVolInfo_t * GetVolInfo(BmnZdcVolId_t *pVolId)
Bool_t GetVolCenterXYZ(BmnZdcDigiId_t *pDigiId, Double_t &x, Double_t &y, Double_t &z)
Bool_t AddNodes(TObjArray *sensNodes, Int_t pVerbose=0)
Bool_t Init(BmnZdcGeoPar *geoPar, BmnZdcDigiPar *digiPar, Int_t pVerbose=0)
void PrintVolume(Int_t volID, Int_t copyNoMotherMother=1)
void SplitDigiID(BmnZdcDigiId_t digiID, Int_t &module_groupID, Int_t &modID, Int_t &chanID)
static BmnZdcDigiScheme * fInstance
BmnZdcDigiId_t GetDigiId(BmnZdcVolId_t *pVolId)
std::map< BmnZdcDigiId_t, BmnZdcVolInfo_t * > fDigiToVolInfoMap
correspondence for all active volumes (Zdc+ZdcPsd)
Bool_t CreateVolInfoCopyElements(BmnZdcDigiId_t *right, BmnZdcVolInfo_t *volInfo)
Bool_t CalcDimensions(Int_t pGlobalDetectorNumber, Int_t &nx, Int_t &ny, Int_t &nz)
Bool_t GetVolDxDyDz(BmnZdcDigiId_t *pDigiId, Double_t &Dx, Double_t &Dy, Double_t &Dz)
BmnZdcDigiId_t GetDigiIdFromVolumeData(Int_t pMcVolumeNumber, Int_t pMotherMotherCopyNumber)
BmnZdcDigiId_t GetDigiIdFromCoords(Double_t x, Double_t y, Double_t z)
Bool_t IsVolumeExist(BmnZdcVolId_t *pVolId)
Int_t GetChannelID(BmnZdcVolId_t *pVolId)
virtual ~BmnZdcDigiScheme()
BmnZdcVolInfo_t * CreateVolInfoElement(FairGeoNode *nod, Int_t pVerbose)
Int_t GetGroupID(BmnZdcVolId_t *pVolId)
Bool_t GetGroupIdModIdChanId(Int_t pMcVolumeNumber, Int_t pMcCopyNumber, Int_t pMotherCopyNumber, Int_t pMotherMotherCopyNumber, Int_t &pGroupId, Int_t &pChanId, Int_t &pModId)
void GetZdcDimensions(Int_t &nx, Int_t &ny, Int_t &nz)
std::map< BmnZdcVolId_t, BmnZdcDigiId_t > fVolToDigiIdMap
static Bool_t fInitialized
Int_t Nx
correspondence for active volumes
BmnZdcVolId_t * CreateVolElement(FairGeoNode *nod, Int_t nodeNumber, BmnZdcDigiId_t *right, Int_t pVerbose)
static BmnZdcDigiScheme * Instance()
TObjArray * GetGeoPassiveNodes()
TObjArray * GetGeoSensitiveNodes()
virtual Double_t GetDX() const
virtual Double_t GetDZ() const
virtual Double_t GetDY() const
TGeoVolume * GetVolume() const
Ssiz_t Last(char c) const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
std::vector< Double_t > BmnZdcVolInfo_t
std::vector< Int_t > BmnZdcVolId_t
std::vector< Int_t > BmnZdcDigiId_t