diff --git a/reco/detectors/much/CbmMuchFindHitsGem.cxx b/reco/detectors/much/CbmMuchFindHitsGem.cxx index 446ab8cc895d828abf1399e53fa91eb91049d51b..9db159d819378270a7fd698a62c9772ab93a51ec 100644 --- a/reco/detectors/much/CbmMuchFindHitsGem.cxx +++ b/reco/detectors/much/CbmMuchFindHitsGem.cxx @@ -22,6 +22,7 @@ #include "TClonesArray.h" //#include "CbmTimeSlice.h" #include "CbmMuchDigi.h" +#include "CbmMuchBeamTimeDigi.h" #include "CbmMuchAddress.h" #include <algorithm> #include <iostream> @@ -59,7 +60,7 @@ CbmMuchFindHitsGem::CbmMuchFindHitsGem(const char* digiFileName, Int_t flag) fFiredPads(), // fDaq(), // fTimeSlice(NULL), - fDigiData(), + // fDigiData(), fuClusters(0) { } @@ -72,6 +73,7 @@ InitStatus CbmMuchFindHitsGem::Init() { // --- Digi Manager for reading digis which were stored in vector fDigiManager = CbmDigiManager::Instance(); + if(bBeamTimeDigi) fDigiManager->UseMuchBeamTimeDigi(); fDigiManager->Init(); // fDigis will not be used now. Just for checking. Need to remove @@ -123,22 +125,24 @@ InitStatus CbmMuchFindHitsGem::Init() { void CbmMuchFindHitsGem::Exec(Option_t*) { TStopwatch timer; timer.Start(); - fDigiData.clear(); + // fDigiData.clear(); // Removing SetDaq functionality as Cluster and Hit Finder algorithm is same for both the Time Based and Event Based mode. //if (fDaq) ; //fDigiData = fTimeSlice->GetMuchData(); // else { - LOG(debug)<<"Start Reading digi from a module "; + //LOG(debug)<<"Start Reading digi from a module "; - for (Int_t iDigi = 0; iDigi < fDigiManager->GetNofDigis(ECbmModuleId::kMuch); iDigi++) { + /*for (Int_t iDigi = 0; iDigi < fDigiManager->GetNofDigis(ECbmModuleId::kMuch); iDigi++) { //Reading digi from CbmDigiManager which stors digis in vector - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + const auto * digi; + if(!bBeamTimeDigi) digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + else digi = (CbmMuchBeamTimeDigi*) fDigiManager->Get<CbmMuchBeamTimeDigi>(iDigi); //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigis->At(iDigi); CbmMuchModule* module = fGeoScheme->GetModuleByDetId(digi->GetAddress()); //AZ //std::cout << module->GetDetectorType() << std::endl; //AZ if (module->GetDetectorType() == 2) continue; //AZ - skip 2-D straws fDigiData.push_back(*digi); - } + }*/ //} // Clear output array @@ -152,9 +156,9 @@ void CbmMuchFindHitsGem::Exec(Option_t*) { //if ( fMode == kCbmTimeslice ){ ProcessData(nullptr); LOG(info) << setw(20) << left << GetName() - << "MuchFindHitsGem: processing time is " << timer.RealTime() - << "Time Slice Number is " << fNofTimeslices - << "s digis " << fDigiManager->GetNofDigis(ECbmModuleId::kMuch) + << ": processing time is " << timer.RealTime() + << " Time Slice Number is " << fNofTimeslices + << " digis " << fDigiManager->GetNofDigis(ECbmModuleId::kMuch) //<< "s digis " << fDigis->GetEntriesFast() << " clusters " << fClusters->GetEntriesFast() << " total hits " << fHits->GetEntriesFast(); @@ -166,17 +170,30 @@ void CbmMuchFindHitsGem::Exec(Option_t*) { for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) { CbmEvent* event = dynamic_cast<CbmEvent*>(fEvents->At(iEvent)); assert(event); + Int_t nDigis = (event ? event->GetNofData(ECbmDataType::kMuchDigi) + : fDigiManager->GetNofDigis(ECbmModuleId::kMuch) ); + //: fDigis->GetEntriesFast() ); + //if (event) LOG(debug)<<" Timeslice "<< fNofTimeslices <<" event : " << event->GetNumber() <<" nDigi : " << nDigis; ProcessData(event); + LOG(debug) << setw(20) << left << GetName() + //<< ": Processing Time for an event is " << timer.RealTime() + << ": Time slice " << fNofTimeslices << " with " << nEvents + << (nEvents == 1 ? " event" : " events") + << " and processing event nubmer " << iEvent + << " digis " << nDigis + //<< "s digis " << fDigis->GetEntriesFast() + << " and created cluster " << event->GetNofData(ECbmDataType::kMuchCluster) + << " and created hit " << event->GetNofData(ECbmDataType::kMuchPixelHit); } //# events - if(fNofTimeslices%100 == 0) LOG(info) << setw(20) << left << GetName() - << " Processing Time is " << timer.RealTime() - << ": Processing time slice " << fNofTimeslices << " with " << nEvents - << (nEvents == 1 ? " event" : " events") - << "s digis " << fDigiManager->GetNofDigis(ECbmModuleId::kMuch) - //<< "s digis " << fDigis->GetEntriesFast() - << " and event wise total " - << " clusters " << fClusters->GetEntriesFast() - << " total hits " << fHits->GetEntriesFast(); + LOG(info) << setw(20) << left << GetName() + << ": Processing Time is " << timer.RealTime() + << ": Time slice " << fNofTimeslices << " with " << nEvents + << (nEvents == 1 ? " event" : " events") + << "s digis " << fDigiManager->GetNofDigis(ECbmModuleId::kMuch) + //<< "s digis " << fDigis->GetEntriesFast() + << " and event wise total " + << " clusters " << fClusters->GetEntriesFast() + << " total hits " << fHits->GetEntriesFast(); } //? event mode fNofTimeslices++; @@ -189,7 +206,7 @@ void CbmMuchFindHitsGem::ProcessData(CbmEvent* event) { EventTimer.Start(); fEvent++; - LOG(debug)<<" Start creating cluster "; + //LOG(debug3)<<" Start creating cluster "; // Find clusters FindClusters(event); Int_t NuOfClusterInEvent = ( event ? event->GetNofData(ECbmDataType::kMuchCluster) : fClusters->GetEntriesFast() ); @@ -233,14 +250,17 @@ void CbmMuchFindHitsGem::FindClusters(CbmEvent* event) { Int_t nDigis = (event ? event->GetNofData(ECbmDataType::kMuchDigi) : fDigiManager->GetNofDigis(ECbmModuleId::kMuch) ); //: fDigis->GetEntriesFast() ); + if (event) LOG(debug2)<<" Timeslice "<< fNofTimeslices <<" event : " << event->GetNumber() <<" nDigi : " << nDigis; if(nDigis<0) return; - LOG(debug)<<" event : " << event->GetNumber() <<" nDigi : " << nDigis; if (fAlgorithm==0){ for (Int_t iDigi = 0; iDigi < nDigis; iDigi++) { UInt_t digiIndex = (event ? event->GetIndex(ECbmDataType::kMuchDigi, iDigi) : iDigi); fDigiIndices.clear(); fDigiIndices.push_back(digiIndex); - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + const CbmMuchDigi * digi; + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(digiIndex)); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(digiIndex)); //const CbmMuchDigi* digi = static_cast<const CbmMuchDigi*>(fDigis->At(digiIndex)); CbmMuchCluster* cluster = new ((*fClusters)[fuClusters++]) CbmMuchCluster(); Int_t address = CbmMuchAddress::GetAddress(CbmMuchAddress::GetStationIndex(digi->GetAddress()), @@ -266,7 +286,11 @@ void CbmMuchFindHitsGem::FindClusters(CbmEvent* event) { for (Int_t iDigi = 0; iDigi < nDigis; iDigi++) { UInt_t digiIndex = (event ? event->GetIndex(ECbmDataType::kMuchDigi, iDigi) : iDigi); - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + //const auto * digi; + const CbmMuchDigi * digi; + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(digiIndex)); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(digiIndex)); //const CbmMuchDigi* digi =static_cast<const CbmMuchDigi*>(fDigis->At(digiIndex)); Double_t time = digi->GetTime(); // Double_t chanid = digi->GetChannelId(); @@ -295,7 +319,11 @@ void CbmMuchFindHitsGem::FindClusters(CbmEvent* event) { fFiredPads.clear(); for (it=slices[s-1];it!=slices[s];it++){ Int_t iDigi = it->second; - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + const CbmMuchDigi * digi; + //const auto * digi; + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(iDigi)); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(iDigi)); //const CbmMuchDigi* digi = static_cast<const CbmMuchDigi*>(fDigis->At(iDigi)); CbmMuchPad* pad = module->GetPad(digi->GetAddress()); pad->SetDigiIndex(iDigi); @@ -307,7 +335,12 @@ void CbmMuchFindHitsGem::FindClusters(CbmEvent* event) { CreateCluster(fFiredPads[p]); if (fDigiIndices.size()==0) continue; //const CbmMuchDigi* digi = static_cast<const CbmMuchDigi*>(fDigis->At(fDigiIndices.front())); - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(fDigiIndices.front()); + //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(fDigiIndices.front()); + //const auto * digi; + const CbmMuchDigi * digi; + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(fDigiIndices.front())); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(fDigiIndices.front())); + CbmMuchCluster* cluster = new ((*fClusters)[fuClusters++]) CbmMuchCluster(); Int_t address = CbmMuchAddress::GetAddress(CbmMuchAddress::GetStationIndex(digi->GetAddress()), CbmMuchAddress::GetLayerIndex(digi->GetAddress()), CbmMuchAddress::GetLayerSideIndex(digi->GetAddress()), @@ -341,16 +374,22 @@ void CbmMuchFindHitsGem::CreateCluster(CbmMuchPad* pad) { // ----- Private method ExecClusteringSimple ---------------------------- void CbmMuchFindHitsGem::ExecClusteringSimple(CbmMuchCluster* cluster,Int_t iCluster, CbmEvent* event) { - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(cluster->GetDigi(0)); - //CbmMuchDigi* digi = static_cast<CbmMuchDigi*>(fDigis->At(cluster->GetDigi(0))); - CbmMuchModule* m = fGeoScheme->GetModuleByDetId(digi->GetAddress()); - CbmMuchModuleGem* module = (CbmMuchModuleGem*) m; - // Int_t iStation = CbmMuchAddress::GetStationIndex(digi->GetAddress()); + //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(cluster->GetDigi(0)); + //const auto * digi; + const CbmMuchDigi * digi; + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(cluster->GetDigi(0))); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(cluster->GetDigi(0))); + //CbmMuchDigi* digi = static_cast<CbmMuchDigi*>(fDigis->At(cluster->GetDigi(0))); + CbmMuchModule* m = fGeoScheme->GetModuleByDetId(digi->GetAddress()); + CbmMuchModuleGem* module = (CbmMuchModuleGem*) m; + // Int_t iStation = CbmMuchAddress::GetStationIndex(digi->GetAddress()); Int_t maxCharge = 0; for (Int_t iDigi = 0; iDigi < cluster->GetNofDigis(); iDigi++) { Int_t digiIndex = cluster->GetDigi(iDigi); - digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + //digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(digiIndex)); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(digiIndex)); //digi = static_cast<CbmMuchDigi*> (fDigis->At(digiIndex)); Int_t charge = digi->GetAdc(); if (charge>maxCharge) maxCharge = charge; @@ -362,7 +401,9 @@ void CbmMuchFindHitsGem::ExecClusteringSimple(CbmMuchCluster* cluster,Int_t iClu fFiredPads.clear(); for (Int_t iDigi = 0; iDigi < cluster->GetNofDigis(); iDigi++) { Int_t digiIndex = cluster->GetDigi(iDigi); - digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + //digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(digiIndex); + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*>(fDigiManager->Get<CbmMuchDigi>(digiIndex)); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(digiIndex)); //digi = static_cast<CbmMuchDigi*> (fDigis->At(digiIndex)); if (digi->GetAdc()<=threshold) continue; CbmMuchPad* pad = module->GetPad(digi->GetAddress()); @@ -394,7 +435,11 @@ void CbmMuchFindHitsGem::ExecClusteringPeaks(CbmMuchCluster* cluster,Int_t iClus // Fill cluster map for (Int_t i=0;i<nDigis;i++){ Int_t iDigi = cluster->GetDigi(i); - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + //const auto * digi; + const CbmMuchDigi * digi; + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(iDigi)); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(iDigi)); //const CbmMuchDigi* digi = static_cast<const CbmMuchDigi*>(fDigis->At(iDigi)); UInt_t address = digi->GetAddress(); CbmMuchModuleGem* module = (CbmMuchModuleGem*) fGeoScheme->GetModuleByDetId(address); @@ -465,7 +510,11 @@ void CbmMuchFindHitsGem::CreateHits(CbmMuchCluster* cluster, Int_t iCluster, Cbm for (Int_t i=0;i<nDigis;i++) { Int_t iDigi = cluster->GetDigi(i); - const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + //const CbmMuchDigi* digi = (CbmMuchDigi*) fDigiManager->Get<CbmMuchDigi>(iDigi); + //const auto * digi; + const CbmMuchDigi * digi; + if(!bBeamTimeDigi) digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchDigi>(iDigi)); + else digi = static_cast<const CbmMuchDigi*> (fDigiManager->Get<CbmMuchBeamTimeDigi>(iDigi)); //const CbmMuchDigi* digi = static_cast<const CbmMuchDigi*>(fDigis->At(iDigi)); if (i==0) { address = CbmMuchAddress::GetElementAddress(digi->GetAddress(),kMuchModule); diff --git a/reco/detectors/much/CbmMuchFindHitsGem.h b/reco/detectors/much/CbmMuchFindHitsGem.h index 2d01684d0658d9ab12793518a05882ca6211e3db..f5ab53af73418ff5d056f7c58d580a73051c0e73 100644 --- a/reco/detectors/much/CbmMuchFindHitsGem.h +++ b/reco/detectors/much/CbmMuchFindHitsGem.h @@ -54,6 +54,8 @@ class CbmMuchFindHitsGem: public FairTask { void SetClusterSeparationTime(Double_t time) { fClusterSeparationTime = time; } // Removing SetDaq functionality as Cluster and Hit Finder algorithm is same for both the Time Based and Event Based mode. // void SetDaq(Bool_t daq) { fDaq = daq; } + // Set functionality for accepting CbmMuchBeamTimeDigi generated from mCBM data. + void SetBeamTimeDigi(Bool_t beam) { bBeamTimeDigi = beam; } private: virtual InitStatus Init(); @@ -88,8 +90,13 @@ class CbmMuchFindHitsGem: public FairTask { // Removing SetDaq functionality as Cluster and Hit Finder algorithm is same for both the Time Based and Event Based mode. //Bool_t fDaq; // To daq or not to daq // TODO //CbmTimeSlice* fTimeSlice; // Time slice object in the DAQ approach - std::vector<CbmMuchDigi> fDigiData; // Vector of digis + // according to the input branch , below need to be used so using auto, such that runtime it will decide + //std::vector<CbmMuchDigi> fDigiData; // Vector of digis + + // No need of fDigiDtata + //std::vector< auto > fDigiData; // Vector of digis UInt_t fuClusters = 0; //Number of Clusters. + Bool_t bBeamTimeDigi = kFALSE; // Boolean for Using Beam Time Digi CbmMuchFindHitsGem(const CbmMuchFindHitsGem&); CbmMuchFindHitsGem operator=(const CbmMuchFindHitsGem&);