16 #include "FairRootManager.h"
18 #include "FairRuntimeDb.h"
19 #include "FairContFact.h"
20 #include "FairGeoNode.h"
21 #include "FairGeoVector.h"
22 #include "FairEventHeader.h"
24 #include "TClonesArray.h"
28 #include "TObjString.h"
29 #include "TGeoManager.h"
35 PndSdsTask(
"SDS Strip Digi Producer(PndSdsStripHitProducer)"),
39 fDigiParameterList(NULL),
40 fChargeDigiParameterList(NULL),
41 fCurrentDigiPar(NULL),
42 fCurrentChargeConverter(NULL),
46 fCurrentStripCalcTop(NULL),
47 fCurrentStripCalcBot(NULL),
50 fOverrideParams(kFALSE),
51 fTimeOrderedDigi(kFALSE),
66 fDigiParameterList(NULL),
67 fChargeDigiParameterList(NULL),
68 fCurrentDigiPar(NULL),
69 fCurrentChargeConverter(NULL),
73 fCurrentStripCalcTop(NULL),
74 fCurrentStripCalcBot(NULL),
77 fOverrideParams(kFALSE),
78 fTimeOrderedDigi(kFALSE),
95 if(0 != it->second)
delete it->second;
99 if(0 != it->second)
delete it->second;
103 if(0 != it->second)
delete it->second;
127 Error(
"SetCalculators()",
"A Digi Parameter Set does not exist properly.");
130 const char* senstype = digipar->GetSensType();
132 Info(
"SetCalculators()",
"Create a Parameter Set for %s sensors",senstype);
133 std::cout<<senstype<<
"#"<<std::endl;
152 if(
fVerbose>1) Info(
"SetParContainers",
"done.");
160 FairRootManager* ioman = FairRootManager::Instance();
167 std::cout <<
"-E- PndSdsStripHitProducer::Init: "
168 <<
"RootManager not instantiated!" << std::endl;
175 std::cout <<
"-E- PndSdsStripHitProducer::Init: "
189 std::cout <<
"-I- PndSdsStripHitProducer: Initialisation successfull with these parameters:" << std::endl;
213 it->second->StartExecute();
227 std::cout<<
" Nr of Points: "<<nPoints<<std::endl;
233 for (Int_t iPoint = 0; iPoint < nPoints; iPoint++)
238 if( !selected ) {
continue; }
245 std::cout<<
"No Point!" << std::endl;
249 std::cout <<
"****Global Point: " << std::endl;
257 posInL.Print();posOutL.Print();
258 std::cout <<
"Energy: " << point->GetEnergyLoss() << std::endl;
263 if (
fVerbose > 2) std::cout <<
"Top Side: " << std::endl;
265 std::vector<PndSdsStrip> topStrips =
267 posOutL.X(), posOutL.Y(), posOutL.Z(),
268 point->GetEnergyLoss());
270 if (topStrips.size() != 0)
272 if (
fVerbose > 1) std::cout <<
"SensorStrips: " << std::endl;
273 for(std::vector<PndSdsStrip>::const_iterator kit=topStrips.begin();
274 kit!= topStrips.end(); ++kit)
281 if (
fVerbose > 1) std::cout << *kit << std::endl;
284 }
else if(
fVerbose>2) std::cout<<
"Top side empty"<<std::endl;
287 if (
fVerbose > 2) std::cout <<
"Bottom Side: " << std::endl;
288 std::vector<PndSdsStrip> botStrips =
290 posOutL.X(), posOutL.Y(), posOutL.Z(),
291 point->GetEnergyLoss());
292 if (botStrips.size() != 0)
294 if (
fVerbose > 2) std::cout <<
" SensorStrips: " << std::endl;
295 for(std::vector<PndSdsStrip>::const_iterator kit=botStrips.begin();
296 kit!= botStrips.end();
306 if (
fVerbose > 2) std::cout << *kit << std::endl;
308 }
else if(
fVerbose>2) std::cout<<
"Bottom side empty"<<std::endl;
314 it->second->EndExecute();
318 if(
fVerbose > 1) std::cout <<
"-I- PndSdsStripHitProducer: EventNr " <<
fEventNr <<
" from " << nPoints <<
" PndSdsMCPoints, "
319 << iStrip <<
" Digis created."<< std::endl;
331 Int_t timeStamp =
DigitizeTime(point->GetTime(), charge);
341 std::vector<Int_t>indices;
342 indices.push_back(iPoint);
345 sensorID, fe, chan, smearedCharge, correctedTimeStamp);
348 tempStrip->ResetLinks();
349 FairEventHeader* evtHeader = (FairEventHeader*)FairRootManager::Instance()->GetObject(
"EventHeader.");
351 tempStrip->AddLink(FairLink(evtHeader->GetInputFileId(), evtHeader->GetMCEntryNumber(),
fInBranchId, iPoint));
352 tempStrip->AddLink(FairLink(-1,
fEventNr,
"EventHeader.", -1));
353 tempStrip->AddLinks(*(point->GetPointerToLinks()));
355 fDataBuffer->FillNewData(tempStrip, timeStamp + 100, point->GetTime() + FairRootManager::Instance()->GetEventTime());
383 if( !(detpath.Contains(
"Strip")) )
391 const char* sensortype = digipar->GetSensType();
392 if(detpath.Contains(sensortype)) {
402 if(
fVerbose>1) Info(
"SelectSensorParams()",
"No valid sensor parameters selected, skipping this point.");
403 std::cout<<
"detector name does not contain a valid parameter name."<<std::endl;
404 std::cout<<
" DetName : "<<detpath<<std::endl;
410 Double_t eventTime = FairRootManager::Instance()->GetEventTime();
TList * fDigiParameterList
Digitization Parameters.
virtual Double_t GetTimeStep()
Int_t CalcFEfromStrip(Int_t stripNr) const
const char * GetSensType() const
virtual void SetParContainers()
Class for digitised strip hits.
virtual void SetParContainers()
virtual InitStatus ReInit()
virtual void FinishTask()
Bool_t fTimeOrderedDigi
parameter to switch to time ordered simulation
Int_t DigitizeTime(Double_t time, Double_t charge)
FairWriteoutBuffer * fDataBuffer
void SetPersistency(Bool_t val=kTRUE)
TVector3 GetPositionOut() const
Class for calculating strip indices from wafer hits.
virtual Double_t GetTimeStamp(Double_t tof, Double_t charge, Double_t MCEventTime)=0
absolute time stamp of a hit in ns (clock is taken into account)
Int_t GetSensorID() const
Int_t fEventNr
EventCounter.
TString GetPath(Int_t shortID)
for a given shortID the path is returned
virtual Double_t DigiValueToCharge(Double_t digi)=0
Converts a given digitized charge into charge in electrons.
virtual ~PndSdsStripHitProducer()
std::map< const char *, PndSdsCalcStrip * > fStripCalcBot
std::map< const char *, PndSdsChargeConversion * > fChargeConverter
PndSdsStripDigiPar * fCurrentDigiPar
virtual void FinishEvent()
std::map< const char *, PndSdsCalcStrip * > fStripCalcTop
Calculator objects.
Digitization Parameter Class for MVD-Strip part.
virtual void SetCalculators()
void AddDigi(Int_t &iStrip, Int_t iPoint, Int_t detID, Int_t sensorID, Int_t fe, Int_t chan, Double_t charge)
PndSdsChargeConversion * fCurrentChargeConverter
TClonesArray * fStripArray
Output array of PndSdsHits.
static PndGeoHandling * Instance()
TVector3 MasterToLocalShortId(const TVector3 &master, const Int_t &shortId)
TVector3 GetPosition() const
virtual void Exec(Option_t *opt)
Int_t CalcChannelfromStrip(Int_t stripNr) const
virtual Double_t ChargeToDigiValue(Double_t Charge)=0
Converts a given charge in electrons into the electronics answer e.g. ToT [ns].
Hit Producer Task for strip detectors.
Bool_t SelectSensorParams(Int_t sensorID)
PndSdsCalcStrip * fCurrentStripCalcBot
virtual Double_t GetTimeWalk(Double_t)
virtual void SetBranchNames()=0
PndSdsCalcStrip * fCurrentStripCalcTop
TList * fChargeDigiParameterList
virtual InitStatus Init()
std::vector< PndSdsStrip > GetStrips(Double_t inx, Double_t iny, Double_t inz, Double_t outx, Double_t outy, Double_t outz, Double_t eLoss)
virtual void Print(const Option_t *opt=0) const
TClonesArray * fPointArray