12 #include "FairRootManager.h"
13 #include "FairDetector.h"
15 #include "FairRuntimeDb.h"
17 #include "FairRunAna.h"
18 #include "TClonesArray.h"
27 bool PndMdtHitProducer::PndMdtDigiLess::operator()
33 FairTask(
"MDT Hit Producer") ,fTimeOrderedDigi(kFALSE)
49 cout <<
"-I- PndMdtHitProducer::Init: "
50 <<
"INITIALIZATION *********************" << endl;
56 FairRootManager* ioman = FairRootManager::Instance();
58 cout <<
"-E- PndMdtHitProducer::Init: "
59 <<
"RootManager not instantiated!" << endl;
64 fDigiArray = (TClonesArray*) ioman->GetObject(
"MdgDigi");
66 cout <<
"-W- PndMdtHitProducer::Init: "
67 <<
"No MdtDigi array!" << endl;
70 fBoxArray =
new TClonesArray(
"PndMdtDigi");
74 fBoxArray = (TClonesArray*) ioman->GetObject(
"MdtDigiBox");
76 cout <<
"-W- PndMdtHitProducer::Init: "
77 <<
"No MdtDigiBox array!" << endl;
81 fStripArray = (TClonesArray*) ioman->GetObject(
"MdtDigiStrip");
83 cout <<
"-W- PndMdtHitProducer::Init: "
84 <<
"No MdtDigiStrip array!" << endl;
93 fHitArray =
new TClonesArray(
"PndMdtHit");
95 ioman->Register(
"MdtHit",
"Mdt",
fHitArray,kTRUE);
104 cout <<
"-I- PndMdtHitProducer: Intialization successfull" << endl;
122 static const double fixed_time_length = 100;
123 Double_t fEvtTime = FairRootManager::Instance()->GetEventTime();
127 if(FairRunAna::Instance()->IsTimeStamp()){
128 fDigiArray = FairRootManager::Instance()->GetData(
"TSMdtDigi"
133 cout<<
"------------------------PndMdtHitProducer-------------------------------------------"<<endl;
134 cout<<
"|Event No. #"<<
fEventCounter<<
", time-based simulation,"
135 <<
fDigiArray->GetEntriesFast()<<
" digis in time window ["
138 Int_t fCurrentPosition = 0;
139 for(Int_t idigi=fCurrentPosition; idigi<
fDigiArray->GetEntriesFast(); ++idigi){
143 std::cout<<std::endl;
146 cout<<
"------------------------PndMdtHitProducer-------------------------------------------"<<endl;
150 for(Int_t idigi=0; idigi <
fDigiArray->GetEntriesFast(); ++ idigi){
162 Int_t nBox =
fBoxArray->GetEntriesFast();
164 if (nBox==0 || nStrip==0)
return;
170 for(Int_t istrip=0; istrip < nStrip; ++ istrip)
175 Bool_t isFoundinClusters = kFALSE;
176 for(; cit != cend; ++cit){
181 for(; dit != dend; ++dit)
191 isFoundinClusters = kTRUE;
192 aClu.push_back(stripDigi);
196 if( !isFoundinClusters){
198 aClu.push_back(stripDigi);
199 fStripClusters.push_back(aClu);
204 for(Int_t ibox=0; ibox < nBox; ++ ibox)
207 if (
fVerbose>0) cout<<
"pos 0, "<<ibox<<
", "<<boxDigi->
X()<<
", "<<boxDigi->
Y()<<
", "<<boxDigi->
Z()<<endl;
211 Bool_t isFoundinClusters = kFALSE;
212 for(; cit != cend; ++cit){
217 for(; dit != dend; ++dit){
226 isFoundinClusters = kTRUE;
227 aClu.push_back(boxDigi);
231 if( !isFoundinClusters){
233 aClu.push_back(boxDigi);
234 fBoxClusters.push_back(aClu);
239 std::map<Int_t, Int_t> fLayerMapofBox;
242 for(; cit != cend; ++ cit){
245 size_t idx = aClu.size()/2;
247 while( idx -- ) ++ dit;
248 if (
fVerbose>0) cout<<
"dit pos 1, "<<
fBoxClusterArray->GetEntriesFast()<<
", "<<(*dit)->X()<<
", "<<(*dit)->Y()<<
", "<<(*dit)->Z()<<endl;
254 std::map<Int_t, Int_t> fLayerMapofStrip;
255 cit = fStripClusters.begin();
256 cend = fStripClusters.end();
257 for(; cit != cend; ++ cit){
260 size_t idx = aClu.size()/2;
262 while( idx -- ) ++ dit;
267 std::map<Int_t, Int_t>::iterator mit = fLayerMapofBox.begin();
268 std::map<Int_t, Int_t>::iterator mend = fLayerMapofBox.end();
269 for(; mit != mend; ++mit){
272 mit = fLayerMapofStrip.begin();
273 mend = fLayerMapofStrip.end();
274 for(; mit != mend; ++mit){
286 if (
fVerbose>0) cout<<
"pos 2, "<<iBox<<
", "<<boxDigi->
X()<<
", "<<boxDigi->
Y()<<
", "<<boxDigi->
Z()<<endl;
287 Int_t numStripFound =0 ;
296 if(
TMath::Abs(boxDigi->GetTimeStamp() - stripDigi->GetTimeStamp()) > 3.*14.85)
continue;
302 TVector3 dpos(0.5, 0.5, 0.5);
303 pos.SetX(boxDigi->
X());
304 pos.SetY(boxDigi->
Y());
305 pos.SetZ(stripDigi->
Z());
307 aHit->SetTimeStamp(boxDigi->GetTimeStamp());
313 TVector3 dpos(0.5, 0.5, 0.5);
314 pos.SetX(boxDigi->
X());
315 pos.SetZ(boxDigi->
Z());
316 pos.SetY(stripDigi->
Y());
318 aHit->SetTimeStamp(boxDigi->GetTimeStamp());
322 TVector3 dpos(0.5, 0.5, 0.5);
323 pos.SetX(stripDigi->
X());
324 pos.SetY(boxDigi->
Y());
325 pos.SetZ(boxDigi->
Z());
327 aHit->SetTimeStamp(boxDigi->GetTimeStamp());
341 Int_t nBox =
fBoxArray->GetEntriesFast();
343 if (nBox==0 || nStrip==0)
return;
345 for (Int_t iBox=0; iBox<nBox; iBox++)
348 for (Int_t iStrip=0; iStrip<nStrip; iStrip++)
357 for (
size_t vBox=0; vBox<(vecBox.size()); vBox++)
359 for (
size_t vStrip=0; vStrip<(vecStrip.size()); vStrip++)
361 if (vecBox[vBox]==vecStrip[vStrip])
364 TVector3 dpos(0.5,0.5,0.5);
382 Int_t size = clref.GetEntriesFast();
383 return new(clref[size])
PndMdtHit(detID, stripID, pos, dpos, bIndex, sIndex);
390 std::cout<<
"==================================================="<<std::endl;
391 std::cout<<
"PndMdtHitProducer::FinishTask"<<std::endl;
392 std::cout<<
"***************************************************"<<std::endl;
395 std::cout<<
"Produce hits# "<<
fNumofHits<<std::endl;
396 std::cout<<
"statistics: number of strip digis matching per box digi#"<<std::endl;
397 std::map<Int_t, Int_t>::const_iterator it =
fMatchMap.begin();
398 std::map<Int_t, Int_t>::const_iterator end =
fMatchMap.end();
399 cout<<
"Nmatch\t\t"<<
"Count\t"<<endl;
400 for(; it != end; ++it){
401 cout<< it->first<<
"\t\t"<<it->second<<endl;
403 std::cout<<
"statistics, number of hits per layer"<<std::endl;
404 std::cout<<
"================== Box ========================"<<endl;
405 std::cout<<
"NumHits\t\tCount\t"<<std::endl;
408 for(; mit != mend; ++mit){
409 cout<<mit->first<<
"\t\t"<<mit->second<<std::endl;
411 std::cout<<
"================== strip ========================"<<endl;
414 for(; mit != mend; ++mit){
415 cout<<mit->first<<
"\t\t"<<mit->second<<std::endl;
417 std::cout<<
"***************************************************"<<std::endl;
Int_t fNumofGroupedStripDigis
TClonesArray * fDigiArray
virtual void Print(const Option_t *opt=0) const
ClustersCollection::iterator ClustersColIter
std::map< Int_t, Int_t > fBoxHitMapofLayer
TVector3 GetLabPosition() const
static Int_t LayerID(Int_t iMod, Int_t iOct, Int_t iLayer)
PndMdtHit * AddHit(Int_t detID, Int_t stripID, TVector3 &pos, TVector3 &dpos, Int_t bIndex, Int_t sIndex)
TClonesArray * fStripClusterArray
std::map< Int_t, Int_t > fMatchMap
Short_t GetLayerID() const
TClonesArray * fStripArray
virtual void Exec(Option_t *opt)
SingleCluster::iterator SingleDigiIter
std::map< Int_t, Int_t > fStripHitMapofLayer
virtual void FinishTask()
std::vector< std::vector< PndMdtDigi * > > ClustersCollection
virtual InitStatus Init()
std::vector< PndMdtDigi * > SingleCluster
const std::vector< Int_t > & GetPointList()
Int_t GetDetectorID() const
Short_t GetSector() const
Short_t GetModule() const
Int_t fNumofGroupedBoxDigis
TClonesArray * fBoxClusterArray
virtual void Exec_old(Option_t *opt)