//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class TpcPCAlignmentTask // see TpcPCAlignmentTask.hh for details // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Sebastian Neubert TUM (original author) // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "TpcPCAlignmentTask.h" // C/C++ Headers ---------------------- #include #include // Collaborating Class Headers -------- #include "TClonesArray.h" #include "TString.h" #include "TRandom.h" #include "TpcPoint.h" #include "TpcGas.h" #include "TpcPrimaryCluster.h" #include "LinearInterpolPolicy.h" #include "TpcDigiPar.h" #include "TpcAlignmentManager.h" #include "FairRunAna.h" #include "FairRunSim.h" #include "FairRuntimeDb.h" #include "FairMCEventHeader.h" #include "FairEventHeader.h" #include "FairRootManager.h" using std::cout; using std::endl; using std::fabs; using std::floor; // Class Member definitions ----------- TpcPCAlignmentTask::TpcPCAlignmentTask() : FairTask("TPC Clusterizer"), fCopy(false), fPCArray(NULL) { fPCBranchName = "TpcPrimaryCluster"; fPCOutBranchName = "TpcPrimaryCluster"; } TpcPCAlignmentTask::~TpcPCAlignmentTask() {} void TpcPCAlignmentTask::SetParContainers() { std::cout<<"TpcPCAlignmentTask::SetParContainers\n"; // 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 Tpc digitisation parameter container fpar= (TpcDigiPar*) db->getContainer("TpcDigiPar"); if (! fpar ) Fatal("SetParContainers", "TpcDigiPar not found"); } InitStatus TpcPCAlignmentTask::Init() { //Get ROOT Manager FairRootManager* ioman= FairRootManager::Instance(); if(ioman==0){ Error("TpcPCAlignmentTask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection fPCArray=(TClonesArray*) ioman->GetObject(fPCBranchName); if(fPCArray==0) { Error("TpcPCAlignmentTask::Init","PC-array not found!"); return kERROR; } if(fCopy) { fPCOutArray = new TClonesArray(fPCOutBranchName); ioman->Register(fPCOutBranchName,"tpc",fPCOutArray,true); } return kSUCCESS; } void TpcPCAlignmentTask::Exec(Option_t* opt) { // Reset output Arrays if(fCopy && fPCOutArray==0) Fatal("TpcPCAlignmentTask::Exec()","No copy array"); if(fCopy) fPCOutArray->Delete(); unsigned int nPC= fPCArray->GetEntriesFast(); for(unsigned int iPC=0;iPCUncheckedAt(iPC); if(fCopy){ unsigned int nOut= fPCOutArray->GetEntriesFast(); pc=new ((*fPCOutArray)[nOut]) TpcPrimaryCluster(*pc); } TVector3 pos = pc->pos(); pos = TpcAlignmentManager::getInstance()->masterToLocal("tpc",pos); pc->setpos(pos.x(),pos.y(),pos.z()); } return; } ClassImp(TpcPCAlignmentTask)