diff --git a/core/detectors/tof/CbmTofDigiBdfPar.cxx b/core/detectors/tof/CbmTofDigiBdfPar.cxx index d791c27b181272fc7b28fdabbaffddaa85454220..aa4e8858dd0d50cac00b0557de7b083fe3d21ef2 100644 --- a/core/detectors/tof/CbmTofDigiBdfPar.cxx +++ b/core/detectors/tof/CbmTofDigiBdfPar.cxx @@ -38,11 +38,13 @@ ClassImp(CbmTofDigiBdfPar) , fdDeadtime(5.0) , fdSignalPropSpeed(0.0) , fiNbSmTypes(0) + , fiNbTrackingStations(0) , fiNbSm() , fiNbRpc() , fiNbGaps() , fdGapSize() , fdSigVel() + , fiTrkStation() , fiNbCh() , fiChType() , fiChOrientation() @@ -109,6 +111,8 @@ void CbmTofDigiBdfPar::putParams(FairParamList* l) { l->add(Form("GapSize%03d", iSmType), fdGapSize[iSmType]); for (Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType++) l->add(Form("SigVel%03d", iSmType), fdSigVel[iSmType]); + for (Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType++) + l->add(Form("TrkStation%03d", iSmType), fiTrkStation[iSmType]); for (Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType++) l->add(Form("NbCh%03d", iSmType), fiNbCh[iSmType]); for (Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType++) @@ -224,6 +228,23 @@ Bool_t CbmTofDigiBdfPar::getParams(FairParamList* l) { } // for( Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType ++) + fiTrkStation.resize(fiNbSmTypes); + for (Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType++) { + fiTrkStation[iSmType].Set(fiNbSm[iSmType] * fiNbRpc[iSmType]); + if (!l->fill(Form("TrkStation%03d", iSmType), &(fiTrkStation[iSmType]))) { + LOG(info) << "CbmTofDigiBdfPar::getParams => parameter " + << Form("TrkStation%03d", iSmType) + << " not found in the text file. " + << "Initialized to 0 "; + for (Int_t iRpc = 0; iRpc < fiNbSm[iSmType] * fiNbRpc[iSmType]; iRpc++) + fiTrkStation[iSmType].SetAt(0, iRpc); + //return kFALSE; + } // if ( ! l->fill( Form("SigVel%03d", iSmType), &(fdSigVel[iSmType]) ) ) + for (Int_t iRpc = 0; iRpc < fiNbSm[iSmType] * fiNbRpc[iSmType]; iRpc++) + fiNbTrackingStations = + TMath::Max(fiNbTrackingStations, fiTrkStation[iSmType][iRpc] + 1); + } // for( Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType ++) + fiNbCh.resize(fiNbSmTypes); for (Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType++) { fiNbCh[iSmType].Set(fiNbRpc[iSmType]); @@ -567,6 +588,18 @@ void CbmTofDigiBdfPar::SetSigVel(Int_t iSmType, LOG(error) << "Invalid SMType " << iSmType; } } +Int_t CbmTofDigiBdfPar::GetTrackingStation(Int_t iSmType, + Int_t iSm, + Int_t iRpc) const { + if (iSmType < fiNbSmTypes) { + if (iSm < fiNbSm[iSmType] && iRpc < fiNbRpc[iSmType]) + return fiTrkStation[iSmType][iSm * fiNbRpc[iSmType] + iRpc]; + else + return 0.0; + } // if( iSmType < fiNbSmTypes ) + else + return 0.0; +} Int_t CbmTofDigiBdfPar::GetNbChan(Int_t iSmType, Int_t iRpc) const { if (iSmType < fiNbSmTypes) { if (iRpc < fiNbRpc[iSmType]) @@ -705,22 +738,26 @@ void CbmTofDigiBdfPar::printParams() { sIndex = " Rpc index |-- "; Int_t iMaxRpcNb = 0; - TString* sGapsNb = new TString[fiNbSmTypes]; - TString* sGapsSz = new TString[fiNbSmTypes]; - TString* sSigVel = new TString[fiNbSmTypes]; - TString* sChNb = new TString[fiNbSmTypes]; - TString* sChType = new TString[fiNbSmTypes]; - TString* sChOrient = new TString[fiNbSmTypes]; + TString* sGapsNb = new TString[fiNbSmTypes]; + TString* sGapsSz = new TString[fiNbSmTypes]; + TString* sSigVel = new TString[fiNbSmTypes]; + TString* sChNb = new TString[fiNbSmTypes]; + TString* sChType = new TString[fiNbSmTypes]; + TString* sChOrient = new TString[fiNbSmTypes]; + TString* sTrkStation = new TString[fiNbSmTypes]; for (Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType++) { sSmNb += Form("%3d ", GetNbSm(iSmType)); sRpcNb += Form("%3d ", GetNbRpc(iSmType)); - sGapsNb[iSmType] = Form(" Nb of Gaps in SM type %3d:|-> ", iSmType); - sGapsSz[iSmType] = Form(" Gap Size(mm) in SM type %3d:|-> ", iSmType); - sSigVel[iSmType] = Form(" SigVel(cm/ps) in SM type %3d:|-> ", iSmType); - sChNb[iSmType] = Form(" Nb of Chan in SM type %3d:|-> ", iSmType); - sChType[iSmType] = Form(" Chan Type in SM type %3d:|-> ", iSmType); - sChOrient[iSmType] = Form(" Chan orient. in SM type %3d:|-> ", iSmType); + sGapsNb[iSmType] = Form(" Nb of Gaps in SM type %3d:|-> ", iSmType); + sGapsSz[iSmType] = Form(" Gap Size(mm) in SM type %3d:|-> ", iSmType); + sSigVel[iSmType] = Form(" SigVel(cm/ps) in SM type %3d:|-> ", iSmType); + sChNb[iSmType] = Form(" Nb of Chan in SM type %3d:|-> ", iSmType); + sChType[iSmType] = Form(" Chan Type in SM type %3d:|-> ", iSmType); + sChOrient[iSmType] = + Form(" Chan Orientation in SM type %3d:|-> ", iSmType); + sTrkStation[iSmType] = + Form(" TrackStations in SM type %3d:|-> ", iSmType); if (iMaxRpcNb < fiNbRpc[iSmType]) iMaxRpcNb = fiNbRpc[iSmType]; @@ -734,10 +771,11 @@ void CbmTofDigiBdfPar::printParams() { sChType[iSmType] += "pad "; else sChType[iSmType] += "str "; - if (1 == GetChanOrient(iSmType, iRpc)) - sChOrient[iSmType] += "hor "; - else - sChOrient[iSmType] += "ver "; + + sChOrient[iSmType] += Form(" %d ", GetChanOrient(iSmType, iRpc)); + for (Int_t iSm = 0; iSm < fiNbSm[iSmType]; iSm++) + sTrkStation[iSmType] += + Form(" %d ", GetTrackingStation(iSmType, iSm, iRpc)); } } // for( Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType ++) for (Int_t iRpc = 0; iRpc < iMaxRpcNb; iRpc++) @@ -753,6 +791,7 @@ void CbmTofDigiBdfPar::printParams() { LOG(info) << sChNb[iSmType]; LOG(info) << sChType[iSmType]; LOG(info) << sChOrient[iSmType]; + LOG(info) << sTrkStation[iSmType]; } // for( Int_t iSmType = 0; iSmType < fiNbSmTypes; iSmType ++) // Beamtime variables diff --git a/core/detectors/tof/CbmTofDigiBdfPar.h b/core/detectors/tof/CbmTofDigiBdfPar.h index ff5a89517f51ce0fb16b098e27c63100dcb640d9..f5d72ae960e65dd8633fe94792e9efecc1169975 100644 --- a/core/detectors/tof/CbmTofDigiBdfPar.h +++ b/core/detectors/tof/CbmTofDigiBdfPar.h @@ -13,6 +13,9 @@ #ifndef CBMTOFDIGIBDFPAR_H #define CBMTOFDIGIBDFPAR_H 1 +#include <CbmTofAddress.h> // for accessors +#include <CbmTofHit.h> // for accessors + #include <Rtypes.h> // for THashConsistencyHolder, ClassDef #include <RtypesCore.h> // for Int_t, Double_t, Bool_t #include <TArrayD.h> // for TArrayD @@ -66,6 +69,13 @@ public: Int_t GetNbDet() const; Int_t GetDetUId(Int_t iDet); Int_t GetDetInd(Int_t iAddr); + Int_t GetTrackingStation(Int_t iSmType, Int_t iSm, Int_t iRpc) const; + Int_t GetTrackingStation(CbmTofHit* pHit) const { + return GetTrackingStation(CbmTofAddress::GetSmType(pHit->GetAddress()), + CbmTofAddress::GetSmId(pHit->GetAddress()), + CbmTofAddress::GetRpcId(pHit->GetAddress())); + }; + Int_t GetNbTrackingStations() const { return fiNbTrackingStations; }; // Beamtime variables TString GetInputFileName() const { return fsBeamInputFile; }; @@ -127,12 +137,15 @@ private: // Geometry variables, text to be generated in the CreateGeometry macros Double_t fdSignalPropSpeed; // -> in parameter? Int_t fiNbSmTypes; // + Int_t fiNbTrackingStations; // TArrayI fiNbSm; // [fiNbSmTypes] TArrayI fiNbRpc; // [fiNbSmTypes] std::vector<TArrayI> fiNbGaps; // [fiNbSmTypes][fiNbRpc] std::vector<TArrayD> fdGapSize; // [fiNbSmTypes][fiNbRpc] std::vector<TArrayD> fdSigVel; // [fiNbSmTypes][fiNbSm*fiNbRpc] // Signal velocity + std::vector<TArrayI> + fiTrkStation; // [fiNbSmTypes][fiNbSm*fiNbRpc] // Signal velocity std::vector<TArrayI> fiNbCh; // [fiNbSmTypes][fiNbRpc] std::vector<TArrayI> fiChType; // [fiNbSmTypes][fiNbRpc] std::vector<TArrayI> diff --git a/reco/detectors/tof/CbmTofFindTracks.cxx b/reco/detectors/tof/CbmTofFindTracks.cxx index 635187cf53ef545153cef7414d66d099dd47a6f5..ec1493a06f54ff429225b8255f047ac281b5f40a 100644 --- a/reco/detectors/tof/CbmTofFindTracks.cxx +++ b/reco/detectors/tof/CbmTofFindTracks.cxx @@ -1042,7 +1042,7 @@ Bool_t CbmTofFindTracks::WriteHistos() { // ----- Public method Exec -------------------------------------------- void CbmTofFindTracks::Exec(Option_t* opt) { if (gLogger->IsLogNeeded(fair::Severity::debug)) { - fDigiBdfPar->printParams(); + fDigiBdfPar->printParams(); } if (!fEventsColl) { // fTofHitArray = (TClonesArray*)fTofHitArrayIn->Clone(); @@ -1171,29 +1171,30 @@ void CbmTofFindTracks::ExecFind(Option_t* /*opt*/) { Int_t iSt = GetStationOfAddr(iDetId); MarkStationFired(iSt); - LOG(debug) << Form( - "Exec found Hit %02d, addr 0x%08x, sta %02d, %02d, HM %02d, X %6.2f(%3.2f) Y " - "%6.2f(%3.2f) Z %6.2f(%3.2f) T %6.2f(%3.2f) (%6.2f)", - iHit, - pHit->GetAddress(), - GetStationOfAddr(iDetId), - fDigiBdfPar->GetTrackingStation(pHit), - fStationHMul[GetStationOfAddr(iDetId)], - pHit->GetX(), - pHit->GetDx(), - pHit->GetY(), - pHit->GetDy(), - pHit->GetZ(), - pHit->GetDz(), - pHit->GetTime(), - pHit->GetTimeError(), - dTcor); + LOG(debug) << Form("Exec found Hit %02d, addr 0x%08x, sta %02d, %02d, HM " + "%02d, X %6.2f(%3.2f) Y " + "%6.2f(%3.2f) Z %6.2f(%3.2f) T %6.2f(%3.2f) (%6.2f)", + iHit, + pHit->GetAddress(), + GetStationOfAddr(iDetId), + fDigiBdfPar->GetTrackingStation(pHit), + fStationHMul[GetStationOfAddr(iDetId)], + pHit->GetX(), + pHit->GetDx(), + pHit->GetY(), + pHit->GetDy(), + pHit->GetZ(), + pHit->GetDz(), + pHit->GetTime(), + pHit->GetTimeError(), + dTcor); } - LOG(debug) << Form("CbmTofFindTracks::Exec NStationsFired %d > %d Min ?, NbStations %d", - GetNStationsFired(), - GetMinNofHits(), - fDigiBdfPar->GetNbTrackingStations()); + LOG(debug) << Form( + "CbmTofFindTracks::Exec NStationsFired %d > %d Min ?, NbStations %d", + GetNStationsFired(), + GetMinNofHits(), + fDigiBdfPar->GetNbTrackingStations()); if (GetNStationsFired() < GetMinNofHits()) { fInspectEvent = kFALSE; // mark event as non trackable