/********************************************************** * * PndEmcTestMultiWaveformProducer generates PndEmcMultiWaveforms with * specified energies. * * Author: Christian Hammann, chammann@hiskp.uni-bonn.de * * Date: 14..08.2012 * ********************************************************/ #include "PndEmcTestMultiWaveformProducer.h" #include "FairRootManager.h" #include "TClonesArray.h" #include "TMath.h" #include "PndEmcStructure.h" #include "PndEmcGeoPar.h" #include "PndEmcMultiWaveform.h" #include "PndEmcMapper.h" #include "FairRun.h" #include "FairRuntimeDb.h" #include #include PndEmcTestMultiWaveformProducer::PndEmcTestMultiWaveformProducer():FairTask("EmcTestMultiWaveformProducer"),fAMin(0),fAMax(2048),fAStep(32),fACurrent(0),fTime(100),fSigma(10),fMultiWaveformArray(NULL),fDetId(0){ }; InitStatus PndEmcTestMultiWaveformProducer::Init(){ FairRootManager *ioman = FairRootManager::Instance(); if(ioman == NULL){ return kFATAL; std::cout << "PndEmcTestMultiWaveformProducer could not get ioman" << std::endl; } fMultiWaveformArray = new TClonesArray("PndEmcMultiWaveform"); ioman->Register("EmcMultiWaveform","Emc",fMultiWaveformArray,kTRUE); std::cout << "PndEmcTestMultiWaveformProducer initialized" << std::endl; fGeoPar->SetMapperVersion(1); fGeoPar->InitEmcMapper(); PndEmcMapper::Instance(); PndEmcStructure::Instance(); return kSUCCESS; } void PndEmcTestMultiWaveformProducer::Exec(Option_t *){ fMultiWaveformArray->Delete(); TClonesArray &array = *fMultiWaveformArray; PndEmcMultiWaveform *wave = new(array[0]) PndEmcMultiWaveform(0,fDetId,256,0); std::vector signal; std::cout << "New MultiWaveform for DetId " << fDetId << " with Energy " << fACurrent << " GeV" << std::endl; for(Int_t i=0; i< 256; i++){ signal.push_back(TMath::Gaus(i,fTime,fSigma)*fACurrent); } wave->SetWaveform(signal,256,0); signal.clear(); for(Int_t i=0; i< 256; i++){ signal.push_back(TMath::Gaus(i,fTime,fSigma)*fACurrent/16); } wave->SetWaveform(signal,256,1); wave->SetActiveWaveform(0); fACurrent +=fAStep; if(fACurrent > fAMax){ fACurrent = fAMin; } } void PndEmcTestMultiWaveformProducer::SetParContainers(){ // Get run and runtime database FairRun* run = FairRun::Instance(); if (! run ) Fatal("SetParContainers", "No analysis run"); FairRuntimeDb* db = run->GetRuntimeDb(); if (! db ) Fatal("SetParContainers", "No runtime database"); // Get Emc geometry parameter container fGeoPar = (PndEmcGeoPar*) db->getContainer("PndEmcGeoPar"); } ClassImp(PndEmcTestMultiWaveformProducer)