using namespace std;
#include "hpiontrackergeompar.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hpiontrackerdetector.h"
#include "hparamlist.h"
#include <iostream>
ClassImp(HPionTrackerDetGeomPar)
ClassImp(HPionTrackerGeomPar)
void HPionTrackerDetGeomPar::print(void)
{
cout<<"Number of strips: "<<numStrips<<'\n';
cout<<"Distance between strips: "<<stripDistance<<'\n';
cout<<"Lab transformation:\n"<<" ";
labTransform.print();
}
HPionTrackerGeomPar::HPionTrackerGeomPar(const Char_t* name, const Char_t* title,
const Char_t* context)
: HParCond(name, title, context) {
numDetectors = 0;
pDetectors = NULL;
}
HPionTrackerGeomPar::~HPionTrackerGeomPar(void) {
clear();
}
void HPionTrackerGeomPar::clear(void) {
if (pDetectors) pDetectors->Delete();
delete pDetectors;
numDetectors = 0;
}
void HPionTrackerGeomPar::putParams(HParamList* l) {
if (!l) return;
TArrayI nStrips(numDetectors);
TArrayF dist(numDetectors);
TArrayD transform(numDetectors*12);
for(Int_t i=0;i<numDetectors;i++) {
HPionTrackerDetGeomPar* p=(HPionTrackerDetGeomPar*)pDetectors->At(i);
nStrips.SetAt(p->getNumStrips(),i);
dist.SetAt(p->getStripDistance(),i);
HGeomTransform& t = p->getLabTransform();
const HGeomRotation& r = t.getRotMatrix();
const HGeomVector& v = t.getTransVector();
for(Int_t k=0;k<9;k++) transform.SetAt(r(k), i*12 + k);
transform.SetAt(v.getX(), i*12 + 9);
transform.SetAt(v.getY(), i*12 + 10);
transform.SetAt(v.getZ(), i*12 + 11);
}
l->add("numDetectors", numDetectors);
l->add("numStrips", nStrips);
l->add("stripDistance", dist);
l->add("labTransform", transform);
}
Bool_t HPionTrackerGeomPar::getParams(HParamList* l) {
if (!l) return kFALSE;
Int_t nDet;
if (!l->fill("numDetectors", &nDet)) return kFALSE;
TArrayI nStrips(nDet);
if (!l->fill("numStrips", &nStrips)) return kFALSE;
if (nStrips.GetSize()!=nDet) {
Error("HPionTrackerGeomPar::getParams(HParamList* l)",
"Array size of numStrips does not fit to number of detectors");
return kFALSE;
}
TArrayF dist(nDet);
if (!l->fill("stripDistance", &dist)) return kFALSE;
if (dist.GetSize()!=nDet) {
Error("HPionTrackerGeomPar::getParams(HParamList* l)",
"Array size of stripDistance does not fit to number of detectors");
return kFALSE;
}
Int_t nData = nDet*12;
Double_t* tValues = new Double_t[nData];
Bool_t rc = l->fill("labTransform",tValues,nData);
if (!rc) {
Error("HPionTrackerGeomPar::getParams(HParamList* l)",
"Array size of labTransform does not fit to number of detectors");
delete [] tValues;
return kFALSE;
}
rc = setNumDetectors(nDet);
if (rc) {
for(Int_t i=0;i<numDetectors;i++) {
HPionTrackerDetGeomPar* p=(HPionTrackerDetGeomPar*)pDetectors->At(i);
p->setNumStrips(nStrips.At(i));
p->setStripDistance(dist.At(i));
HGeomTransform& tLab = p->getLabTransform();
Double_t r[9], v[3];
for(Int_t k=0;k<9;k++) r[k] = tValues[i*12+k];
for(Int_t k=0;k<3;k++) v[k] = tValues[i*12+9+k];
tLab.setRotMatrix(r);
tLab.setTransVector(v);
}
}
delete [] tValues;
return rc;
}
void HPionTrackerGeomPar::printParams(void) {
cout<<"----- Geometry of Pion Tracker detectors ------------------"<<endl;
for(Int_t i=0;i<numDetectors;i++) {
HPionTrackerDetGeomPar* p=(HPionTrackerDetGeomPar*)pDetectors->At(i);
cout<<"Detector number: "<<i<<'\n';
p->print();
cout<<"-------------------------"<<endl;
}
}
Bool_t HPionTrackerGeomPar::setNumDetectors(const Int_t nDet) {
if (nDet > 0) {
Int_t maxDetectors = 0;
HPionTrackerDetector* pDet= (HPionTrackerDetector*)gHades->getSetup()->getDetector("PionTracker");
if (pDet) maxDetectors = (Int_t)((pDet->getMaxModInSetup()-1) / 2) + 1;
if (nDet >= maxDetectors) {
numDetectors = nDet;
pDetectors = new TObjArray(nDet);
for (Int_t i=0;i<nDet;++i) {
pDetectors->AddAt(new HPionTrackerDetGeomPar(),i);
}
return kTRUE;
} else {
Error("HPionTrackerGeomPar::setNumDetectors(const Int_t nDet)",
"Number of detectors too small for number of active modules in the setup");
return kFALSE;
}
}
Error("HPionTrackerGeomPar::setNumDetectors(const Int_t nDet","nDet must be larger than 0");
return kFALSE;
}
HPionTrackerDetGeomPar* HPionTrackerGeomPar::getDetector(const Int_t n) {
if (pDetectors && n<numDetectors) return (HPionTrackerDetGeomPar*)pDetectors->At(n);
return NULL;
}
hpiontrackergeompar.cc:10 hpiontrackergeompar.cc:11 hpiontrackergeompar.cc:12 hpiontrackergeompar.cc:13 hpiontrackergeompar.cc:14 hpiontrackergeompar.cc:15 hpiontrackergeompar.cc:16 hpiontrackergeompar.cc:17 hpiontrackergeompar.cc:18 hpiontrackergeompar.cc:19 hpiontrackergeompar.cc:20 hpiontrackergeompar.cc:21 hpiontrackergeompar.cc:22 hpiontrackergeompar.cc:23 hpiontrackergeompar.cc:24 hpiontrackergeompar.cc:25 hpiontrackergeompar.cc:26 hpiontrackergeompar.cc:27 hpiontrackergeompar.cc:28 hpiontrackergeompar.cc:29 hpiontrackergeompar.cc:30 hpiontrackergeompar.cc:31 hpiontrackergeompar.cc:32 hpiontrackergeompar.cc:33 hpiontrackergeompar.cc:34 hpiontrackergeompar.cc:35 hpiontrackergeompar.cc:36 hpiontrackergeompar.cc:37 hpiontrackergeompar.cc:38 hpiontrackergeompar.cc:39 hpiontrackergeompar.cc:40 hpiontrackergeompar.cc:41 hpiontrackergeompar.cc:42 hpiontrackergeompar.cc:43 hpiontrackergeompar.cc:44 hpiontrackergeompar.cc:45 hpiontrackergeompar.cc:46 hpiontrackergeompar.cc:47 hpiontrackergeompar.cc:48 hpiontrackergeompar.cc:49 hpiontrackergeompar.cc:50 hpiontrackergeompar.cc:51 hpiontrackergeompar.cc:52 hpiontrackergeompar.cc:53 hpiontrackergeompar.cc:54 hpiontrackergeompar.cc:55 hpiontrackergeompar.cc:56 hpiontrackergeompar.cc:57 hpiontrackergeompar.cc:58 hpiontrackergeompar.cc:59 hpiontrackergeompar.cc:60 hpiontrackergeompar.cc:61 hpiontrackergeompar.cc:62 hpiontrackergeompar.cc:63 hpiontrackergeompar.cc:64 hpiontrackergeompar.cc:65 hpiontrackergeompar.cc:66 hpiontrackergeompar.cc:67 hpiontrackergeompar.cc:68 hpiontrackergeompar.cc:69 hpiontrackergeompar.cc:70 hpiontrackergeompar.cc:71 hpiontrackergeompar.cc:72 hpiontrackergeompar.cc:73 hpiontrackergeompar.cc:74 hpiontrackergeompar.cc:75 hpiontrackergeompar.cc:76 hpiontrackergeompar.cc:77 hpiontrackergeompar.cc:78 hpiontrackergeompar.cc:79 hpiontrackergeompar.cc:80 hpiontrackergeompar.cc:81 hpiontrackergeompar.cc:82 hpiontrackergeompar.cc:83 hpiontrackergeompar.cc:84 hpiontrackergeompar.cc:85 hpiontrackergeompar.cc:86 hpiontrackergeompar.cc:87 hpiontrackergeompar.cc:88 hpiontrackergeompar.cc:89 hpiontrackergeompar.cc:90 hpiontrackergeompar.cc:91 hpiontrackergeompar.cc:92 hpiontrackergeompar.cc:93 hpiontrackergeompar.cc:94 hpiontrackergeompar.cc:95 hpiontrackergeompar.cc:96 hpiontrackergeompar.cc:97 hpiontrackergeompar.cc:98 hpiontrackergeompar.cc:99 hpiontrackergeompar.cc:100 hpiontrackergeompar.cc:101 hpiontrackergeompar.cc:102 hpiontrackergeompar.cc:103 hpiontrackergeompar.cc:104 hpiontrackergeompar.cc:105 hpiontrackergeompar.cc:106 hpiontrackergeompar.cc:107 hpiontrackergeompar.cc:108 hpiontrackergeompar.cc:109 hpiontrackergeompar.cc:110 hpiontrackergeompar.cc:111 hpiontrackergeompar.cc:112 hpiontrackergeompar.cc:113 hpiontrackergeompar.cc:114 hpiontrackergeompar.cc:115 hpiontrackergeompar.cc:116 hpiontrackergeompar.cc:117 hpiontrackergeompar.cc:118 hpiontrackergeompar.cc:119 hpiontrackergeompar.cc:120 hpiontrackergeompar.cc:121 hpiontrackergeompar.cc:122 hpiontrackergeompar.cc:123 hpiontrackergeompar.cc:124 hpiontrackergeompar.cc:125 hpiontrackergeompar.cc:126 hpiontrackergeompar.cc:127 hpiontrackergeompar.cc:128 hpiontrackergeompar.cc:129 hpiontrackergeompar.cc:130 hpiontrackergeompar.cc:131 hpiontrackergeompar.cc:132 hpiontrackergeompar.cc:133 hpiontrackergeompar.cc:134 hpiontrackergeompar.cc:135 hpiontrackergeompar.cc:136 hpiontrackergeompar.cc:137 hpiontrackergeompar.cc:138 hpiontrackergeompar.cc:139 hpiontrackergeompar.cc:140 hpiontrackergeompar.cc:141 hpiontrackergeompar.cc:142 hpiontrackergeompar.cc:143 hpiontrackergeompar.cc:144 hpiontrackergeompar.cc:145 hpiontrackergeompar.cc:146 hpiontrackergeompar.cc:147 hpiontrackergeompar.cc:148 hpiontrackergeompar.cc:149 hpiontrackergeompar.cc:150 hpiontrackergeompar.cc:151 hpiontrackergeompar.cc:152 hpiontrackergeompar.cc:153 hpiontrackergeompar.cc:154 hpiontrackergeompar.cc:155 hpiontrackergeompar.cc:156 hpiontrackergeompar.cc:157