#include "CbmKolkataDetectorHitProducerSmearing.h" #include "CbmKolkataDetectorPoint.h" #include "CbmKolkataDetectorHit.h" #include "TClonesArray.h" #include "TRandom.h" // ---- Default constructor ------------------------------------------- CbmKolkataDetectorHitProducerSmearing::CbmKolkataDetectorHitProducerSmearing() :FairTask("CbmKolkataDetectorHitProducerSmearing"), fPointsArray(NULL), fHitsArray(new TClonesArray("CbmKolkataDetectorHit",100)) { fLogger->Debug(MESSAGE_ORIGIN,"Default Constructor of CbmKolkataDetectorHitProducerSmearing"); } // ---- Destructor ---------------------------------------------------- CbmKolkataDetectorHitProducerSmearing::~CbmKolkataDetectorHitProducerSmearing() { fLogger->Debug(MESSAGE_ORIGIN,"Destructor of CbmKolkataDetectorHitProducerSmearing"); fHitsArray->Delete(); delete fHitsArray; } // ---- Initialisation ---------------------------------------------- void CbmKolkataDetectorHitProducerSmearing::SetParContainers() { fLogger->Debug(MESSAGE_ORIGIN,"SetParContainers of CbmKolkataDetectorHitProducerSmearing"); // Load all necessary parameter containers from the runtime data base /* FairRunAna* ana = FairRunAna::Instance(); FairRuntimeDb* rtdb=ana->GetRuntimeDb(); = (*) (rtdb->getContainer("")); */ } // ---- Init ---------------------------------------------------------- InitStatus CbmKolkataDetectorHitProducerSmearing::Init() { fLogger->Debug(MESSAGE_ORIGIN,"Initilization of CbmKolkataDetectorHitProducerSmearing"); // 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("CbmKolkataDetectorPoint"); if ( ! fPointsArray ) { fLogger->Error(MESSAGE_ORIGIN,"No CbmKolkataDetectorPoint array!\n CbmKolkataDetectorHitProducerSmearing will be inactive"); return kERROR; } // Create the TClonesArray for the output data and register // it in the IO manager // fHitsArray = new TClonesArray("CbmKolkataDetectorHit", 100); ioman->Register("CbmKolkataDetectorHit","CbmKolkataDetHit",fHitsArray,kTRUE); // Do whatever else is needed at the initilization stage // Create histograms to be filled // initialize variables return kSUCCESS; } // ---- ReInit ------------------------------------------------------- InitStatus CbmKolkataDetectorHitProducerSmearing::ReInit() { fLogger->Debug(MESSAGE_ORIGIN,"Initilization of CbmKolkataDetectorHitProducerSmearing"); return kSUCCESS; } // ---- Exec ---------------------------------------------------------- void CbmKolkataDetectorHitProducerSmearing::Exec(Option_t* option) { fLogger->Debug(MESSAGE_ORIGIN,"Exec of CbmKolkataDetectorHitProducerSmearing"); fHitsArray->Delete(); // fill the map CbmKolkataDetectorPoint *point = NULL; CbmKolkataDetectorHit *hit = NULL; for(int iPoint = 0; iPoint < fPointsArray->GetEntriesFast(); iPoint++) { point = (CbmKolkataDetectorPoint*) 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]) CbmKolkataDetectorHit(point->GetDetectorID(), iPoint, position, dposition); } } // ---- Finish -------------------------------------------------------- void CbmKolkataDetectorHitProducerSmearing::Finish() { fLogger->Debug(MESSAGE_ORIGIN,"Finish of CbmKolkataDetectorHitProducerSmearing"); } ClassImp(CbmKolkataDetectorHitProducerSmearing)