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()
ClassImp(PndSdsStripHitProducer)
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