#include "CbmTrdHitProducerDigi.h" #include "CbmTrdDigiPar.h" #include "CbmTrdRadiator.h" #include "CbmTrdPoint.h" #include "CbmTrdHit.h" #include "CbmTrdDigi.h" #include "CbmTrdModule.h" #include "CbmTrdDigiMatch.h" #include "FairRootManager.h" #include "CbmMCTrack.h" #include "FairRunAna.h" #include "FairRuntimeDb.h" #include "FairBaseParSet.h" #include "TRandom.h" #include "TMath.h" #include "TVector3.h" #include "TClonesArray.h" #include "TGeoManager.h" #include "TGeoVolume.h" #include using std::cout; using std::endl; // ---- Default constructor ------------------------------------------- CbmTrdHitProducerDigi::CbmTrdHitProducerDigi() :FairTask("TrdHitProducer") //:fRef(0) { } // -------------------------------------------------------------------- // ---- Constructor ---------------------------------------------------- CbmTrdHitProducerDigi::CbmTrdHitProducerDigi(const char *name, const char *title) :FairTask(name) { } // -------------------------------------------------------------------- // ---- Destructor ---------------------------------------------------- CbmTrdHitProducerDigi::~CbmTrdHitProducerDigi() { FairRootManager *ioman =FairRootManager::Instance(); ioman->Write(); fHitCollection->Clear("C"); delete fHitCollection; } // -------------------------------------------------------------------- // ---- Initialisation ---------------------------------------------- void CbmTrdHitProducerDigi::SetParContainers() { cout<<" * HitProducer * :: SetParContainers() "<GetRuntimeDb(); fDigiPar = (CbmTrdDigiPar*)(rtdb->getContainer("CbmTrdDigiPar")); } // -------------------------------------------------------------------- // ---- ReInit ------------------------------------------------------- InitStatus CbmTrdHitProducerDigi::ReInit(){ cout<<" * HitProducer * :: ReInit() "<GetRuntimeDb(); fDigiPar = (CbmTrdDigiPar*)(rtdb->getContainer("CbmTrdDigiPar")); return kSUCCESS; } // -------------------------------------------------------------------- // ---- Init ---------------------------------------------------------- InitStatus CbmTrdHitProducerDigi::Init() { cout<<" * HitProducer * :: Init() "<ActivateBranch("TrdDigi"); if ( ! fTrdDigi ) { cout << "-W CbmTrdHitProducerDigi::Init: No TrdDigi array!" << endl; cout << " Task will be inactive" << endl; return kERROR; } fTrdDigiMatch =(TClonesArray *) ioman->ActivateBranch("TrdDigiMatch"); if ( ! fTrdDigi ) { cout << "-W CbmTrdHitProducerDigi::Init: No TrdDigiMatch array!" << endl; cout << " Task will be inactive" << endl; return kERROR; } fMCStack = (TClonesArray*)ioman->ActivateBranch("MCTrack"); fHitCollection = new TClonesArray("CbmTrdHit", 100); ioman->Register("TRDHit","TRD",fHitCollection,kTRUE); // Extract information about the number of TRD stations and // the number of layers per TRD station from the geomanager. // Store the information about the number of layers at the entrance // of subsequent stations in a vector. // This allows to calculate the layer number starting with 1 for the // first layer of the first station at a later stage by only adding // the layer number in the station to the number of layers in // previous stations TGeoVolume *fm=NULL; Int_t stationNr = 1; Int_t totalNrOfLayers = 0; fLayersBeforeStation.push_back(totalNrOfLayers); char volumeName[10]; sprintf(volumeName, "trd%d", stationNr); fm = (TGeoVolume *)gGeoManager->GetListOfVolumes()->FindObject(volumeName); if (fm){ Int_t nrOfLayers = fm->GetNdaughters(); totalNrOfLayers += nrOfLayers; fLayersBeforeStation.push_back(totalNrOfLayers); do { stationNr++; sprintf(volumeName, "trd%d", stationNr); fm = (TGeoVolume *)gGeoManager->GetListOfVolumes()->FindObject(volumeName); if (fm) { nrOfLayers = fm->GetNdaughters(); totalNrOfLayers += nrOfLayers; fLayersBeforeStation.push_back(totalNrOfLayers); } } while (fm); } else { cout << "***************************************" <Clear(); CbmTrdDigi *digi=NULL; CbmTrdDigiMatch *digimatch=NULL; Double_t xHit, yHit, zHit; Double_t xHitErr, yHitErr, zHitErr; Int_t nentries = fTrdDigi->GetEntries(); cout<<" ** "<At(j); // digi->Print(); fCol = digi->GetCol(); fRow = digi->GetRow(); Double_t ELoss = digi-> GetCharge(); fDetId = digi->GetDetId(); /* cout <<"Col: "<Register("TrdHit","Trd", fHitCollection, kTRUE); } // ---- CalculateHitPosition ------------------------------------------ void CbmTrdHitProducerDigi::CalculateHitPosition() { fModuleInfo = fDigiPar->GetModule(fDetId); Int_t detID = fModuleInfo->GetDetectorId(); if (detID != fDetId ){ cout<<" -E- This is wrong!!!!!!!!!!!!!!!!!!!!!"<GetPadSizex(); fpadsizey = fModuleInfo->GetPadSizey(); fsizex = fModuleInfo->GetSizex(); fsizey = fModuleInfo->GetSizey(); if (fModuleInfo->IsRotated()){ Double_t tempx = fsizex; Double_t tempy = fsizey; fsizey = tempx; fsizex = tempy; } Float_t local_point[2]; local_point[0] = ((fCol+0.5) * fpadsizex) - fsizex + (fpadsizex/2); local_point[1] = ((fRow+0.5) * fpadsizey) - fsizey + (fpadsizey/2); /* cout<<"###################################"<GetX(); fPosY=local_point[1]+fModuleInfo->GetY(); fPosZ=fModuleInfo->GetZ(); cout<<"fPosX: "<< fPosX <