diff --git a/StPicoDstMaker/StPicoDstMaker.cxx b/StPicoDstMaker/StPicoDstMaker.cxx index f5963b7..ae18f00 100644 --- a/StPicoDstMaker/StPicoDstMaker.cxx +++ b/StPicoDstMaker/StPicoDstMaker.cxx @@ -67,11 +67,12 @@ #include "StPicoDstMaker/StPicoDst.h" -//_____________________________________________________________________________ +//_________________ StPicoDstMaker::StPicoDstMaker(char const* name) : StMaker(name), mMuDst(nullptr), mPicoDst(new StPicoDst()), mEmcCollection(nullptr), mEmcPosition(nullptr), mEmcGeom{}, mEmcIndex{}, + mTpcVpdVzDiffCut(3), mBField(0), mVtxMode(PicoVtxMode::NotSet), // This should always be ::NotSet, do not change it, see ::Init() mInputFileName(), mOutputFileName(), mOutputFile(nullptr), @@ -87,19 +88,22 @@ StPicoDstMaker::StPicoDstMaker(char const* name) : StMaker(name), std::fill_n(mStatusArrays, sizeof(mStatusArrays) / sizeof(mStatusArrays[0]), 1); } -//_____________________________________________________________________________ + +//_________________ StPicoDstMaker::StPicoDstMaker(PicoIoMode ioMode, char const* fileName, char const* name) : StPicoDstMaker(name) { StMaker::m_Mode = ioMode; mInputFileName = fileName; } -//_____________________________________________________________________________ + +//_________________ StPicoDstMaker::~StPicoDstMaker() { delete mChain; delete mPicoDst; } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::clearArrays() { for (int i = 0; i < StPicoArrays::NAllPicoArrays; ++i) @@ -138,7 +142,8 @@ void StPicoDstMaker::SetStatus(char const* branchNameRegex, int enable) if (StMaker::m_Mode == PicoIoMode::IoRead) setBranchAddresses(mChain); } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::setBranchAddresses(TChain* chain) { if (!chain) return; @@ -162,7 +167,8 @@ void StPicoDstMaker::setBranchAddresses(TChain* chain) } mTTree = mChain->GetTree(); } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::streamerOff() { // This is to to save space on the file. No need for TObject bits for this structure. @@ -181,7 +187,8 @@ void StPicoDstMaker::streamerOff() StPicoBEmcPidTraits::Class()->IgnoreTObjectStreamer(); StPicoMtdPidTraits::Class()->IgnoreTObjectStreamer(); } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::createArrays() { for (int i = 0; i < StPicoArrays::NAllPicoArrays; ++i) @@ -191,7 +198,8 @@ void StPicoDstMaker::createArrays() mPicoDst->set(mPicoArrays); } -//_____________________________________________________________________________ + +//_________________ Int_t StPicoDstMaker::Init() { switch (StMaker::m_Mode) @@ -240,22 +248,24 @@ Int_t StPicoDstMaker::Init() return kStOK; } - +//_________________ int StPicoDstMaker::setVtxModeAttr() { - if (strcmp(SAttr("PicoVtxMode"), "PicoVtxDefault") == 0) + mTpcVpdVzDiffCut = DAttr("TpcVpdVzDiffCut"); //Read the Tpc-Vpd cut from the input + + if (strcasecmp(SAttr("PicoVtxMode"), "PicoVtxDefault") == 0) { setVtxMode(PicoVtxMode::Default); LOG_INFO << " PicoVtxDefault is being used " << endm; return kStOK; } - else if (strcmp(SAttr("PicoVtxMode"), "PicoVtxVpd") == 0) + else if (strcasecmp(SAttr("PicoVtxMode"), "PicoVtxVpd") == 0) { setVtxMode(PicoVtxMode::Vpd); LOG_INFO << " PicoVtxVpd is being used " << endm; return kStOK; } - else if (strcmp(SAttr("PicoVtxMode"), "PicoVtxVpdOrDefault") == 0) + else if (strcasecmp(SAttr("PicoVtxMode"), "PicoVtxVpdOrDefault") == 0) { setVtxMode(PicoVtxMode::VpdOrDefault); LOG_INFO << " PicoVtxVpdOrDefault is being used " << endm; @@ -265,7 +275,7 @@ int StPicoDstMaker::setVtxModeAttr() return kStErr; } -//_____________________________________________________________________________ +//_________________ Int_t StPicoDstMaker::InitRun(Int_t const runnumber) { if (StMaker::m_Mode == PicoIoMode::IoWrite) @@ -279,7 +289,7 @@ Int_t StPicoDstMaker::InitRun(Int_t const runnumber) return kStOK; } -//_____________________________________________________________________________ +//_________________ Bool_t StPicoDstMaker::initMtd(Int_t const runnumber) { // Oct. 1st (approx. 273rd day) is the start of a new running year @@ -396,7 +406,7 @@ Bool_t StPicoDstMaker::initMtd(Int_t const runnumber) return kTRUE; } -//_____________________________________________________________________________ +//_________________ Int_t StPicoDstMaker::Finish() { if (StMaker::m_Mode == PicoIoMode::IoRead) @@ -410,7 +420,8 @@ Int_t StPicoDstMaker::Finish() } return kStOK; } -//_____________________________________________________________________________ + +//_________________ Int_t StPicoDstMaker::openRead() { if (!mChain) mChain = new TChain("PicoDst"); @@ -465,7 +476,8 @@ Int_t StPicoDstMaker::openRead() return kStOK; } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::openWrite() { @@ -487,7 +499,8 @@ void StPicoDstMaker::openWrite() mTTree->Branch(StPicoArrays::picoArrayNames[i], &mPicoArrays[i], bufsize, mSplit); } } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::initEmc() { mEmcPosition = new StEmcPosition(); @@ -497,7 +510,8 @@ void StPicoDstMaker::initEmc() mEmcGeom[i] = StEmcGeom::getEmcGeom(detname[i].Data()); } } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::buildEmcIndex() { StEmcDetector* mEmcDet = mMuDst->emcCollection()->detector(kBarrelEmcTowerId); @@ -520,7 +534,8 @@ void StPicoDstMaker::buildEmcIndex() } } } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::finishEmc() { delete mEmcPosition; @@ -528,20 +543,23 @@ void StPicoDstMaker::finishEmc() std::fill_n(mEmcGeom, 4, nullptr); } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::Clear(char const*) { if (StMaker::m_Mode == PicoIoMode::IoRead) return; clearArrays(); } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::closeRead() { delete mChain; mChain = nullptr; } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::closeWrite() { if (StMaker::m_Mode == PicoIoMode::IoWrite) @@ -553,7 +571,8 @@ void StPicoDstMaker::closeWrite() } } } -//_____________________________________________________________________________ + +//_________________ int StPicoDstMaker::Make() { int returnStarCode = kStOK; @@ -567,7 +586,8 @@ int StPicoDstMaker::Make() return returnStarCode; } -//_____________________________________________________________________________ + +//_________________ Int_t StPicoDstMaker::MakeRead() { if (!mChain) @@ -594,7 +614,8 @@ Int_t StPicoDstMaker::MakeRead() return kStOK; } -//_____________________________________________________________________________ + +//_________________ Int_t StPicoDstMaker::MakeWrite() { StMaker::WhiteBoard("muDst", &mMuDst); @@ -660,6 +681,7 @@ Int_t StPicoDstMaker::MakeWrite() return kStOK; } +//_________________ void StPicoDstMaker::fillEventHeader() const { StPicoEvent* event=StPicoDst::event(); @@ -672,7 +694,7 @@ void StPicoDstMaker::fillEventHeader() const header->SetGMTime( (UInt_t) (event->time()) ); } -//_____________________________________________________________________________ +//_________________ void StPicoDstMaker::fillTracks() { // We save primary tracks associated with the selected primary vertex only @@ -748,7 +770,7 @@ void StPicoDstMaker::fillTracks() } } -//_____________________________________________________________________________ +//_________________ bool StPicoDstMaker::getBEMC(const StMuTrack* t, int* id, int* adc, float* ene, float* d, int* nep, int* towid) { *id = -1; @@ -926,13 +948,15 @@ bool StPicoDstMaker::getBEMC(const StMuTrack* t, int* id, int* adc, float* ene, return kTRUE; } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::fillEvent() { int counter = mPicoArrays[StPicoArrays::Event]->GetEntries(); new((*(mPicoArrays[StPicoArrays::Event]))[counter]) StPicoEvent(*mMuDst); } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::fillEmcTrigger() { @@ -1018,15 +1042,14 @@ void StPicoDstMaker::fillEmcTrigger() } } -//_____________________________________________________________________________ +//_________________ void StPicoDstMaker::fillMtdTrigger() { int counter = mPicoArrays[StPicoArrays::MtdTrigger]->GetEntries(); new((*(mPicoArrays[StPicoArrays::MtdTrigger]))[counter]) StPicoMtdTrigger(*mMuDst, mQTtoModule, mQTSlewBinEdge, mQTSlewCorr); } - -//_____________________________________________________________________________ +//_________________ void StPicoDstMaker::fillBTowHits() { for (int i = 0; i < 4800; ++i) @@ -1043,7 +1066,8 @@ void StPicoDstMaker::fillBTowHits() new((*(mPicoArrays[StPicoArrays::BTowHit]))[counter]) StPicoBTowHit(softId, adc, energy); } } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::fillBTofHits() { for (unsigned int i = 0; i < mMuDst->numberOfBTofHit(); ++i) @@ -1056,7 +1080,8 @@ void StPicoDstMaker::fillBTofHits() new((*(mPicoArrays[StPicoArrays::BTofHit]))[counter]) StPicoBTofHit(cellId); } } -//_____________________________________________________________________________ + +//_________________ void StPicoDstMaker::fillMtdHits() { // fill MTD hits @@ -1173,6 +1198,7 @@ void StPicoDstMaker::fillMtdHits() * * Returns `false` otherwise. */ +//_________________ bool StPicoDstMaker::selectVertex() { StMuPrimaryVertex* selectedVertex = nullptr; @@ -1188,6 +1214,7 @@ bool StPicoDstMaker::selectVertex() if(mVtxMode == PicoVtxMode::VpdOrDefault) { mMuDst->setVertexIndex(0); + selectedVertex = mMuDst->primaryVertex(); } StBTofHeader const* mBTofHeader = mMuDst->btofHeader(); @@ -1201,7 +1228,7 @@ bool StPicoDstMaker::selectVertex() StMuPrimaryVertex* vtx = mMuDst->primaryVertex(iVtx); if (!vtx) continue; - if (fabs(vzVpd - vtx->position().z()) < 3.) + if (fabs(vzVpd - vtx->position().z()) < mTpcVpdVzDiffCut) { mMuDst->setVertexIndex(iVtx); selectedVertex = mMuDst->primaryVertex(); diff --git a/StPicoDstMaker/StPicoDstMaker.h b/StPicoDstMaker/StPicoDstMaker.h index 2a9c159..316b7bf 100644 --- a/StPicoDstMaker/StPicoDstMaker.h +++ b/StPicoDstMaker/StPicoDstMaker.h @@ -121,6 +121,7 @@ class StPicoDstMaker : public StMaker /// Selects a primary vertex from `muDst` vertex collection according to the /// vertex selection mode `mVtxMode` specified by the user. bool selectVertex(); + Float_t mTpcVpdVzDiffCut; /// A pointer to the main input source containing all muDst `TObjArray`s /// filled from corresponding muDst branches diff --git a/StPicoEvent/StPicoTrack.cxx b/StPicoEvent/StPicoTrack.cxx index 8f9e7ec..8017fb8 100644 --- a/StPicoEvent/StPicoTrack.cxx +++ b/StPicoEvent/StPicoTrack.cxx @@ -13,8 +13,9 @@ StPicoTrack::StPicoTrack() : TObject(), mId(0), mChi2(std::numeric_limits::max()), - mPMomentum(0., 0., 0.), mGMomentum(0., 0., 0.), mOrigin(0., 0., 0.), - mDedx(0.), mDnDx(0.), mDnDxError(0.), mNHitsFit(0), mNHitsMax(0), mNHitsDedx(0), mCharge(0), + mPMomentum(0., 0., 0.), mGMomentum(0., 0., 0.), mOrigin(0., 0., 0.), + mDedx(0.), /* mDnDx(0.), mDnDxError(0.), */ + mNHitsFit(0), mNHitsMax(0), mNHitsDedx(0), mNSigmaPion(std::numeric_limits::max()), mNSigmaKaon(std::numeric_limits::max()), mNSigmaProton(std::numeric_limits::max()), @@ -49,30 +50,29 @@ StPicoTrack::StPicoTrack(StMuTrack const* const gTrk, StMuTrack const* const pTr mOrigin = gHelix.origin(); mDedx = gTrk->dEdx() * 1.e6; - mDnDx = gTrk->probPidTraits().dNdxFit(); - mDnDxError = gTrk->probPidTraits().dNdxErrorFit(); + //mDnDx = gTrk->probPidTraits().dNdxFit(); + //mDnDxError = gTrk->probPidTraits().dNdxErrorFit(); int flag = gTrk->flag(); if (flag / 100 < 7) // TPC tracks { - mNHitsFit = (Char_t)(gTrk->nHitsFit(kTpcId)); + mNHitsFit = (Char_t)(gTrk->nHitsFit(kTpcId) * gTrk->charge()); mNHitsMax = (UChar_t)(gTrk->nHitsPoss(kTpcId)); } else // FTPC tracks { if (gTrk->helix().momentum(B * kilogauss).pseudoRapidity() > 0.) { - mNHitsFit = (Char_t)(gTrk->nHitsFit(kFtpcWestId)); + mNHitsFit = (Char_t)(gTrk->nHitsFit(kFtpcWestId) * gTrk->charge()); mNHitsMax = (UChar_t)(gTrk->nHitsPoss(kFtpcWestId)); } else { - mNHitsFit = (Char_t)(gTrk->nHitsFit(kFtpcEastId)); + mNHitsFit = (Char_t)(gTrk->nHitsFit(kFtpcEastId) * gTrk->charge()); mNHitsMax = (UChar_t)(gTrk->nHitsPoss(kFtpcEastId)); } } - mNHitsDedx = (Char_t)(gTrk->nHitsDedx()); - mCharge = (Char_t)(gTrk->charge()); + mNHitsDedx = (UChar_t)(gTrk->nHitsDedx()); mNSigmaPion = (fabs(gTrk->nSigmaPion() * 100.) > std::numeric_limits::max()) ? std::numeric_limits::max() : (Short_t)(TMath::Nint(gTrk->nSigmaPion() * 100.)); mNSigmaKaon = (fabs(gTrk->nSigmaKaon() * 100.) > std::numeric_limits::max()) ? std::numeric_limits::max() : (Short_t)(TMath::Nint(gTrk->nSigmaKaon() * 100.)); mNSigmaProton = (fabs(gTrk->nSigmaProton() * 100.) > std::numeric_limits::max()) ? std::numeric_limits::max() : (Short_t)(TMath::Nint(gTrk->nSigmaProton() * 100.)); diff --git a/StPicoEvent/StPicoTrack.h b/StPicoEvent/StPicoTrack.h index 62ae834..3de844c 100644 --- a/StPicoEvent/StPicoTrack.h +++ b/StPicoEvent/StPicoTrack.h @@ -40,16 +40,18 @@ class StPicoTrack : public TObject StThreeVectorF gMom(StThreeVectorF const& pVtx, float B) const; /// origin at DCA to StPicoEvent::mPrimaryVertex StThreeVectorF const& origin() const; - /// dca point to StPicoEvent::mPrimaryVertex in global coordinates + /// dca point to StPicoEvent::mPrimaryVertex in global coordinates . + /// It is the same as origin. To get gDCA = origin(or dcaPoint) + prim.vtx.position StThreeVectorF const& dcaPoint() const; Short_t charge() const; + Int_t nHits() const; //if(isPrimary)? nHitsFit-1 : nHits=nHitsFit Int_t nHitsFit() const; Int_t nHitsMax() const; Int_t nHitsDedx() const; UInt_t hftHitsMap() const; Float_t dEdx() const; - Float_t dNdx() const; - Float_t dNdxError() const; + //Float_t dNdx() const; + //Float_t dNdxError() const; Float_t nSigmaPion() const; Float_t nSigmaKaon() const; Float_t nSigmaProton() const; @@ -87,12 +89,11 @@ class StPicoTrack : public TObject StThreeVectorF mGMomentum; // global momentum at point of DCA to StPicoEvent::mPrimaryVertex StThreeVectorF mOrigin; // origin at dca to primary vertex Float_t mDedx; // dEdx in KeV/cm. - Float_t mDnDx; // fitted dN/dx - Float_t mDnDxError; // fitted dN/dx error - Char_t mNHitsFit; // nHitsFit - TPC - Char_t mNHitsMax; // nHitsMax - TPC + //Float_t mDnDx; // fitted dN/dx + //Float_t mDnDxError; // fitted dN/dx error + Char_t mNHitsFit; // charge * nHitsFit - TPC; if(pTrk) ? nHitsFit=nHits+1 : nHitsFit=nHits + UChar_t mNHitsMax; // nHitsMax - TPC UChar_t mNHitsDedx; // nHitsDedx - TPC - Char_t mCharge; Short_t mNSigmaPion; // nsigmaPi * 100 Short_t mNSigmaKaon; // nsigmaK * 100 Short_t mNSigmaProton; // nsigmaP * 100 @@ -104,7 +105,7 @@ class StPicoTrack : public TObject Short_t mBTofPidTraitsIndex; // index of the BTOF pidTratis in the event Short_t mMtdPidTraitsIndex; // index of the MTD pidTratis in the event - ClassDef(StPicoTrack, 1) + ClassDef(StPicoTrack, 2) }; inline void StPicoTrack::setBEmcPidTraitsIndex(Int_t index) { mBEmcPidTraitsIndex = (Short_t)index; } @@ -118,14 +119,15 @@ inline StThreeVectorF const& StPicoTrack::pMom() const { return mPMomentum; } inline StThreeVectorF const& StPicoTrack::gMom() const { return mGMomentum; } inline StThreeVectorF const& StPicoTrack::origin() const { return mOrigin; } inline StThreeVectorF const& StPicoTrack::dcaPoint() const { return mOrigin; } -inline Short_t StPicoTrack::charge() const { return static_cast(mCharge); } +inline Short_t StPicoTrack::charge() const { return (mNHitsFit > 0) ? 1 : -1; } +inline Int_t StPicoTrack::nHits() const { return ( isPrimary() ) ? (nHitsFit() - 1) : nHitsFit(); } inline Int_t StPicoTrack::nHitsFit() const { return (mNHitsFit > 0) ? (Int_t)mNHitsFit : (Int_t)(-1 * mNHitsFit); } inline Int_t StPicoTrack::nHitsMax() const { return mNHitsMax; } inline Int_t StPicoTrack::nHitsDedx() const { return mNHitsDedx; } inline UInt_t StPicoTrack::hftHitsMap() const { return topologyMap(0) >> 1 & 0x7F; } inline Float_t StPicoTrack::dEdx() const { return mDedx;} -inline Float_t StPicoTrack::dNdx() const { return mDnDx;} -inline Float_t StPicoTrack::dNdxError() const { return mDnDxError;} +//inline Float_t StPicoTrack::dNdx() const { return mDnDx;} +//inline Float_t StPicoTrack::dNdxError() const { return mDnDxError;} inline Float_t StPicoTrack::nSigmaPion() const { return mNSigmaPion / 100.f; } inline Float_t StPicoTrack::nSigmaKaon() const { return mNSigmaKaon / 100.f; } inline Float_t StPicoTrack::nSigmaProton() const { return mNSigmaProton / 100.f; }