23 #include "FairRootManager.h"
24 #include "FairRunAna.h"
25 #include "FairRuntimeDb.h"
26 #include "FairDetector.h"
28 #include "FairRuntimeDb.h"
30 #include "TClonesArray.h"
32 #include "TGeoVolume.h"
33 #include "TGeoMatrix.h"
34 #include "TGeoManager.h"
46 fUse_nonuniformity(0), fNonuniformityFile(
""), fPointArray(), fMCTrackArray(), fHitArray(), fVolumeArray(), fMapVersion(0), fEnergyThreshold(0), emcX(), emcY(), emcZ(), fEmcStr(), fMapper(), fDigiPar(), fGeoPar(), fNonuniformityPar(), fDayOne(false)
56 fUse_nonuniformity(0), fNonuniformityFile(
""), fPointArray(), fMCTrackArray(), fHitArray(), fVolumeArray(), fMapVersion(0), fEnergyThreshold(0), emcX(), emcY(), emcZ(), fEmcStr(), fMapper(), fDigiPar(), fGeoPar(), fNonuniformityPar(), fDayOne(false)
71 cout <<
" -I- PndEmcHitProducer INITIALIZATION *********************" << endl;
78 FairRootManager* ioman = FairRootManager::Instance();
80 cout <<
"-E- PndEmcHitProducer::Init: "
81 <<
"RootManager not instantiated!" << endl;
86 fPointArray = (TClonesArray*) ioman->GetObject(
"EmcPoint");
88 cout <<
"-W- PndEmcHitProducer::Init: "
89 <<
"No EmcPoint array!" << endl;
96 cout <<
"-W- PndEmcMakeCluster::Init: "
97 <<
"No MCTrack array! Needed for MC Truth" << endl;
102 fHitArray =
new TClonesArray(
"PndEmcHit");
118 cout <<
"-I- PndEmcHitProducer: Using nonuniform lightoutput" << endl;
122 if(nonuniformityfile==NULL){
123 cout <<
"-E- PndEmcHitProducer: Could not open file " <<
fNonuniformityFile.Data() <<
" for Nonuniformity Information" << endl;
126 nonuniformityfile->GetObject(
"PndEmcDigiNonuniParObject",parObject);
127 if(parObject == NULL){
128 cout <<
"-E- PndEmcHitProducer: Could not get Nonuniformity information from file " <<
fNonuniformityFile.Data() << endl;
137 cout <<
"-I- PndEmcHitProducer: Intialization successfull" << endl;
145 FairRun*
run = FairRun::Instance();
146 if (! run ) Fatal(
"SetParContainers",
"No analysis run");
148 FairRuntimeDb* db = run->GetRuntimeDb();
149 if (! db ) Fatal(
"SetParContainers",
"No runtime database");
160 fDigiPar->setInputVersion(run->GetRunId(),1);
171 std::vector <Int_t> tmplist;
172 std::vector <Int_t> tmplist2;
174 std::sort( newlist.begin(), newlist.end());
176 std::unique_copy( newlist.begin(), newlist.end(), std::back_inserter( tmplist ) );
180 for(Int_t j=tmplist.size()-1; j>=0; j--){
183 Int_t
id = tmplist[j];
186 tmplist2.push_back(
id);
193 tmplist2.push_back(
id);
198 if ( !(node.BeginsWith(
"emc") || node.BeginsWith(
"CrystalVol") || node.BeginsWith(
"Fsc") ) ) {
199 tmplist2.push_back(
id);
204 for(Int_t k=j-1; k>=0; k--){
206 tmplist.erase(tmplist.begin()+j);
214 std::unique_copy( tmplist2.begin(), tmplist2.end(), std::back_inserter( newlist) );
220 if (
fVerbose>1) cout <<
" -I- PndEmcHitProducer POINT EXECUTION *********************" << endl;
222 if (!
fHitArray ) Fatal(
"Exec",
"No DigiArray");
237 map<Int_t, Float_t>::const_iterator
p;
239 std::vector<PndEmcPoint*> fPointList;
256 for (Int_t iPoint = 0; iPoint < nPoints; iPoint++){
268 for (Int_t iPoint=0; iPoint<nPoints; iPoint++)
272 DetId = point->GetDetectorID();
275 fTrackEntering[DetId].AddLinks(point->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MCTrack")));
278 fTrackExiting[DetId].AddLinks(point->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MCTrack")));
280 if(point->GetEnergyLoss() == 0 )
continue;
283 cout <<
" -I- PndEmcHitProducer::Exec" <<
"\t" <<
"Skipping Module 10 (FscFiber)" << endl;
299 printf(
"no TCI found for DetectorID %d\n",DetId);
302 tmpXtal =XtalMap.find(tmpTCI)->second;
303 point->Position(pointvec);
306 distvec = pointvec-frontvec;
307 zpos = distvec.Dot(normvec);
309 energyscalefactor=c[0]+zpos*(c[1]+zpos*c[2]);
310 fTrackEnergy[DetId] += point->GetEnergyLoss() * energyscalefactor;
319 point_time=point->GetTime();
321 if (point_time <
fTrackTime[point->GetDetectorID()]){
322 fTrackTime[point->GetDetectorID()] = point_time;
329 if(point->GetEnergyLoss() >0)
390 Float_t time, std::vector <Int_t> &mctruth, FairMultiLinkedData entering, FairMultiLinkedData exiting)
398 Int_t size = clref.GetEntriesFast();
400 emcY[detID],
emcZ[detID], mctruth, entering, exiting);
414 std::cout<<
"========================================================="<<std::endl;
415 std::cout<<
"PndEmcHitProducer::FinishTask"<<std::endl;
416 std::cout<<
"*********************************************************"<<std::endl;
417 if(
fDayOne) std::cout<<
" DAY 1 Setup active, only 12/16 Slices available "<<std::endl;
421 std::cout<<
"*********************************************************"<<std::endl;
427 if(p->GetDetectorID()>250e6)
return true;
429 if(abs(phi-90)<22.5)
return false;
430 if(abs(phi-270)<22.5)
return false;
431 if(abs(phi+90)<22.5)
return false;
represents a mc hit in an emc crystal
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
Short_t GetModule() const
Double_t val[nBoxes][nFEBox]
map< Int_t, FairMultiLinkedData > fTrackExiting
PndEmcStructure * fEmcStr
creates PndEmcHits from PndEmcPoints
labels push_back("electron")
TClonesArray * fMCTrackArray
const TVector3 & frontCentre() const
represents coordinates of one crystal
static Int_t HowManyPoints
void SetPersistency(Bool_t val=kTRUE)
Int_t GetUse_nonuniformity()
stores crystal index coordinates (x,y) or (theta,phi)
PndEmcTwoCoordIndex * GetTCI(Int_t DetectorId)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
TString fNonuniformityFile
TGeoManager * gGeoManager
map< Int_t, Float_t > fTrackEnergy
Bool_t GetExiting() const
const mapper & GetEmcY() const
TString pt(TString pts, TString exts="px py pz")
const TVector3 & normalToFrontFace() const
void SetStorageOfData(Bool_t val)
virtual void SetParContainers()
static Int_t HowManyHitsAll
virtual void Exec(Option_t *opt)
parameter set of Emc digitisation
static Int_t HowManyHitsAboveThreshold
const PndEmcTciXtalMap & GetTciXtalMap() const
Double_t GetEnergyHitThreshold()
map< Int_t, FairMultiLinkedData > fTrackEntering
void cleansortmclist(std::vector< Int_t > &newlist, TClonesArray *mcTrackArray)
represents the deposited energy of one emc crystal from simulation
bool AcceptDayOne(PndEmcPoint *p)
map< Int_t, std::vector< Int_t > > fTrackMcTruth
TClonesArray * fPointArray
Bool_t GetEntering() const
virtual InitStatus Init()
PndEmcHit * AddHit(Int_t trackID, Int_t detID, Float_t energy, Float_t time, std::vector< Int_t > &mctruth, FairMultiLinkedData entering, FairMultiLinkedData exiting)
PndEmcDigiNonuniformityPar * fNonuniformityPar
std::map< PndEmcTwoCoordIndex *, PndEmcXtal * > PndEmcTciXtalMap
map< Int_t, Float_t > fTrackTime
map< Int_t, std::vector< Int_t > > fPointMatch
TVector3 GetStartVertex() const
static PndEmcStructure * Instance()
Int_t GetMotherID() const
static PndEmcMapper * Instance()
const mapper & GetEmcZ() const
const mapper & GetEmcX() const