diff --git a/reco/detectors/tof/CbmTofEventClusterizer.cxx b/reco/detectors/tof/CbmTofEventClusterizer.cxx index ae5d2287ecb8b0e0454f21f9035a00700fe58660..e66c5dd2389caeb953f3add76bcef339a2ccd598 100644 --- a/reco/detectors/tof/CbmTofEventClusterizer.cxx +++ b/reco/detectors/tof/CbmTofEventClusterizer.cxx @@ -350,7 +350,8 @@ void CbmTofEventClusterizer::Exec(Option_t* option) { if (fEventsColl) { LOG(info) << "CbmTofEventClusterizer::Exec => New timeslice " << iNbTs << " with " << fEventsColl->GetEntriesFast() << " events, " - << fDigiMan->GetNofDigis(ECbmModuleId::kTof) << " TOF digis "; + << fDigiMan->GetNofDigis(ECbmModuleId::kTof) << " TOF digis + " + << fDigiMan->GetNofDigis(ECbmModuleId::kT0) << " T0 digis "; iNbTs++; Int_t iNbHits = 0; @@ -363,6 +364,13 @@ void CbmTofEventClusterizer::Exec(Option_t* option) { fTofDigiVec.clear(); //if (fTofDigisColl) fTofDigisColl->Clear("C"); //Int_t iNbDigis=0; (VF) not used + for (Int_t iDigi = 0; iDigi < tEvent->GetNofData(ECbmDataType::kT0Digi); + iDigi++) { + Int_t iDigiIndex = + static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kT0Digi, iDigi)); + const CbmTofDigi* tDigi = fDigiMan->Get<CbmTofDigi>(iDigiIndex); + fTofDigiVec.push_back(CbmTofDigi(*tDigi)); + } for (Int_t iDigi = 0; iDigi < tEvent->GetNofData(ECbmDataType::kTofDigi); iDigi++) { Int_t iDigiIndex = @@ -516,10 +524,12 @@ Bool_t CbmTofEventClusterizer::RegisterInputs() { fDigiMan = CbmDigiManager::Instance(); fDigiMan->Init(); if (!fDigiMan->IsPresent(ECbmModuleId::kTof)) { - LOG(error) << GetName() << ": No digi input!"; + LOG(error) << GetName() << ": No Tof digi input!"; return kFALSE; } - + if (fDigiMan->IsPresent(ECbmModuleId::kT0)) { + LOG(warn) << GetName() << ": separate T0 digi input!"; + } fTrbHeader = (TTrbHeader*) fManager->GetObject("TofTrbHeader."); if (NULL == fTrbHeader) { LOG(info) << "CbmTofEventClusterizer::RegisterInputs => Could not get " @@ -5405,7 +5415,8 @@ Bool_t CbmTofEventClusterizer::BuildClusters() { pDigi->GetChannel(), (0 == pDigi->GetSide()) ? 1 : 0, pDigi->GetType()); - LOG(debug) << "Duplicated digi at address 0x" << std::hex + LOG(debug) << "Duplicated digi " << fTofDigiVec.size() + << " with address 0x" << std::hex << pDigiN->GetAddress(); } } @@ -5961,7 +5972,7 @@ void CbmTofEventClusterizer::fit_ybox(TH1* h1, << Form(" %6.3f %6.3f %6.3f %6.3f ", fp[0], fp[1], fp[2], fp[3]); } - h1->Fit("YBox", "QM"); + h1->Fit("YBox", "QM0"); double res[10]; double err[10]; @@ -6921,18 +6932,32 @@ Bool_t CbmTofEventClusterizer::BuildHits() { && dWeightedTime == pHitL->GetTime()) { LOG(debug) << "Store Hit twice? " << " fiNbHits " << fiNbHits << ", " - << Form("0x%08x", iDetId); + << Form("0x%08x, MatchCollSize %d, IndRefSize %lu ", + iDetId, fTofDigiMatchColl->GetEntriesFast(),vDigiIndRef.size()); for (UInt_t i = 0; i < vDigiIndRef.size(); i++) { - CbmTofDigi* pDigiC = - &(fTofCalDigiVec->at(vDigiIndRef.at(i))); - LOG(debug) << " Digi " << pDigiC->ToString(); + if(vDigiIndRef.at(i) < (Int_t) fTofCalDigiVec->size()) { + CbmTofDigi* pDigiC = &(fTofCalDigiVec->at(vDigiIndRef.at(i))); + LOG(debug) << " Digi " <<i<<" "<< pDigiC->ToString(); + } else { + LOG(fatal) << "Insufficient CalDigiVec size for i " + << i <<", Ind " << vDigiIndRef.at(i); + } } - CbmMatch* digiMatchL = - (CbmMatch*) fTofDigiMatchColl->At(fiNbHits - 1); - for (Int_t i = 0; i < digiMatchL->GetNofLinks(); - i++) { + + if(NULL == fTofDigiMatchColl) assert("No DigiMatchColl"); + CbmMatch* digiMatchL=NULL; + if( fTofDigiMatchColl->GetEntriesFast() >= fiNbHits-1) { + digiMatchL=(CbmMatch*) fTofDigiMatchColl->At(fiNbHits-1); + }else{ + LOG(fatal) << "DigiMatchColl has insufficient size " + << fTofDigiMatchColl->GetEntriesFast(); + } + + if(NULL != digiMatchL) + for (Int_t i = 0; i < digiMatchL->GetNofLinks(); i++) { CbmLink L0 = digiMatchL->GetLink(i); + LOG(debug) << "report link "<<i<<"("<<digiMatchL->GetNofLinks()<<"), ind "<<L0.GetIndex(); Int_t iDigIndL = L0.GetIndex(); if (iDigIndL >= (Int_t) vDigiIndRef.size()) { if (iDetId != fiBeamRefAddr) { @@ -6949,8 +6974,11 @@ Bool_t CbmTofEventClusterizer::BuildHits() { CbmTofDigi* pDigiC = &(fTofCalDigiVec->at(vDigiIndRef.at(iDigIndL))); LOG(debug) << " DigiL " << pDigiC->ToString(); + } else { + LOG(warn) << "Invalid digMatch Link at Index " << fiNbHits-1; } } + LOG(debug)<< "Current HitsColl length " << fTofHitsColl->GetEntriesFast(); } CbmTofHit* pHit = new CbmTofHit( iDetId, @@ -6958,8 +6986,7 @@ Bool_t CbmTofEventClusterizer::BuildHits() { hitPosErr, //local detector coordinates fiNbHits, // this number is used as reference!! dWeightedTime, - vDigiIndRef - .size(), // number of linked digis = 2*CluSize + vDigiIndRef.size(), // number of linked digis = 2*CluSize //vPtsRef.size(), // flag = number of TofPoints generating the cluster Int_t(dWeightsSum * 10.)); //channel -> Tot //0) ; //channel @@ -7509,10 +7536,11 @@ Bool_t CbmTofEventClusterizer::CalibRawDigis() { << fDigiBdfPar->GetNbChan(pDigi->GetType(), 0); } - if (bAddBeamCounterSideDigi) + if (0) // (bAddBeamCounterSideDigi) if (pCalDigi->GetType() == 5 || pCalDigi->GetType() == 8) { // for Pad counters generate fake digi to mockup a strip + LOG(debug) << "add Pad counter 2. Side digi for 0x" << std::hex << pCalDigi->GetAddress(); fTofCalDigiVec->push_back(CbmTofDigi(*pCalDigi)); CbmTofDigi* pCalDigi2 = &(fTofCalDigiVec->back()); iDigIndCal++;