#include "PndAnandDetectorHitProducerSmearing.h" #include "PndAnandDetectorPoint.h" #include "PndAnandDetectorHit.h" #include "TClonesArray.h" #include "TRandom.h" // ---- Default constructor ------------------------------------------- PndAnandDetectorHitProducerSmearing::PndAnandDetectorHitProducerSmearing() : FairTask("PndAnandDetectorHitProducerSmearing"), fPointsArray(NULL), fHitsArray(new TClonesArray("PndAnandDetectorHit",100)) { fLogger->Debug(MESSAGE_ORIGIN,"Defaul Constructor of PndAnandDetectorHitProducerSmearing"); } // ---- Destructor ---------------------------------------------------- PndAnandDetectorHitProducerSmearing::~PndAnandDetectorHitProducerSmearing() { fLogger->Debug(MESSAGE_ORIGIN,"Destructor of PndAnandDetectorHitProducerSmearing"); fHitsArray->Delete(); delete fHitsArray; } // ---- Initialisation ---------------------------------------------- void PndAnandDetectorHitProducerSmearing::SetParContainers() { fLogger->Debug(MESSAGE_ORIGIN,"SetParContainers of PndAnandDetectorHitProducerSmearing"); // Load all necessary parameter containers from the runtime data base /* FairRunAna* ana = FairRunAna::Instance(); FairRuntimeDb* rtdb=ana->GetRuntimeDb(); = (*) (rtdb->getContainer("")); */ } // ---- Init ---------------------------------------------------------- InitStatus PndAnandDetectorHitProducerSmearing::Init() { fLogger->Debug(MESSAGE_ORIGIN,"Initilization of PndAnandDetectorHitProducerSmearing"); // Get a handle from the IO manager FairRootManager* ioman = FairRootManager::Instance(); // Get a pointer to the previous already existing data level fPointsArray = (TClonesArray*) ioman->GetObject("PndAnandDetectorPoint"); if ( ! fPointsArray ) { fLogger->Error(MESSAGE_ORIGIN,"No InputDataLevelName array!\n PndAnandDetectorHitProducerSmearing will be inactive"); return kERROR; } // Create the TClonesArray for the output data and register // it in the IO manager ioman->Register("AnandDetectorHit","PndAnandDetectorHit",fHitsArray,kTRUE); // Do whatever else is needed at the initilization stage // Create histograms to be filled // initialize variables return kSUCCESS; } // ---- ReInit ------------------------------------------------------- InitStatus PndAnandDetectorHitProducerSmearing::ReInit() { fLogger->Debug(MESSAGE_ORIGIN,"Initilization of PndAnandDetectorHitProducerSmearing"); return kSUCCESS; } // ---- Exec ---------------------------------------------------------- void PndAnandDetectorHitProducerSmearing::Exec(Option_t* option) { fLogger->Debug(MESSAGE_ORIGIN,"Exec of PndAnandDetectorHitProducerSmearing"); fHitsArray->Delete(); // fill the map PndAnandDetectorPoint *point = NULL; PndAnandDetectorHit *hit = NULL; for(int iPoint = 0; iPoint < fPointsArray->GetEntriesFast(); iPoint++) { point = (PndAnandDetectorPoint*) fPointsArray->At(iPoint); if(!point) continue; TVector3 position; point->Position(position); TVector3 dposition; // simulate the detector response: smear position with gaussians dposition.SetXYZ(0.05, 0.05, 0.); position.SetXYZ(gRandom->Gaus(position.X(), 0.05), gRandom->Gaus(position.Y(), 0.05), position.Z()); hit = new ((*fHitsArray)[iPoint]) PndAnandDetectorHit(point->GetDetectorID(), iPoint, position, dposition); } } // ---- Finish -------------------------------------------------------- void PndAnandDetectorHitProducerSmearing::Finish() { fLogger->Debug(MESSAGE_ORIGIN,"Finish of PndAnandDetectorHitProducerSmearing"); } ClassImp(PndAnandDetectorHitProducerSmearing)