123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520 |
- #include <TROOT.h>
- #include <TSystem.h>
- #include <TChain.h>
- #include <TFile.h>
- #include <TString.h>
- #include <iostream>
- //
- // To define cut monitors
- // uncomments line below
- //
- #define MONITORS
- //
- // Constants for analyses
- //
- #define CHARGE_BINS 2
- #define SPH_BINS 10
- //
- // Event information
- //
- const int mPrimVertZbins = 6; // number of z bins for analysis
- const double mPrimVertZ[2] = {-30., 30.}; // redefine values of the vertex Z for each run [cm]
- const double mPrimVertR = 2.; // distance in the XY plane [cm]
- const double mPrimVertVpdVz[2] = {-5., 5.}; // VpdZ - TPCZ difference
- const double mPrimVertXShift = 0.;
- const double mPrimVertYShift = 0.;
- const bool mUseZdcCorrection = true; // valid for AuAu collisions. True for 200GeV only!
- //
- // Track information
- //
- const double mChargedKaonMass = 0.493677;
- const double mChargedPionMass = 0.13957018;
- const int mPosCharge = +1;
- const int mNegCharge = -1;
- const int mTrackType = 1; // primary track
- const int mPythiaKaonCode = 321; // pythia particle code
- const int mPythiaPionCode = 211; // pythia particle code
- const int mTrackNHits[2] = {10, 50}; // number of track hits
- const double mTrackNHitsFit[2] = {5, 50}; // number of track hits used in fit
- const double mTrackDCA[2] = {0., 2.}; // DCA of the track and PV [cm]
- const double mTrackASplitVal = 0.;
- const double mTrackMom[2] = {0.12, 1.55}; // general momentum of the track [GeV/c]
- const double mTrackTransvMom[2] = {0.05, 1.55}; // general transverse momentum of the track [GeV/c]
- const double mTrackEta[2] = { -0.5, 0.5};
- const short mDetectorSelection = 4; // 0-TPC, 1-ToF, 2-TPC+ToF, 3-ToF||TPC, 4-TPC&&TOF(P>Pthr)||TPC(P<Pthr)
- const double mTrackTpcMom[2] = {0.15, 0.55}; // track momentum for TPC idnetification [GeV/c]
- const double mnSigmaElectron[2] = {-1e9, 1e9};
- const double mnSigmaPion[2] = {-1e9, 1e9};
- const double mnSigmaKaon[2] = {-2., 2.};
- const double mnSigmaProton[2] = {-1e9, 1e9};
- const double mTrackTofMom[2] = {0.15, 1.45}; // track momentum for ToF identification [GeV/c]
- const double mPionTofMsqr[2] = {-0.02, 0.062}; // based on p+p data
- const double mKaonTofMsqr[2] = {0.2, 0.32}; // based on p+p data
- const double mTrackTnTMom[2] = {0.15, 1.55};
- const double mTnTNSigmaElectron[2] = {-1e9, 1e9};
- const double mTnTNSigmaPion[2] = {-1e9, 1e9};
- const double mTnTNSigmaKaon[2] = {-2., 2.};
- const double mTnTNSigmaProton[2] = {-1e9, 1e9};
- const double mTTTMomThresh = 0.5; // TPC&&TOF (P>Pthr)||TPC(P<Pthr)
- //
- // Pair information
- //
- const double mFmrCut[2] = {-1.1, 0.1}; // not more than 10% of merged rows
- const double mSplitLevelCut[2] = {-0.5, 0.6}; // splitting level from paper. StHbtPair::quality()
- const double mPairKt[2] = {-1e9., 1e9}; // pair transverse momentum cut
- const double mPairQinv[2] = {-1e9., 1e9}; // pair relative momentum
- const double mAveSep[2] = {5., 5000.}; // average separation of tracks within TPC
- //
- // Histograms values
- //
- const int mPairKtBins = 28; // bin width
- const double mPairKtVal[2] = {0.1, 1.5}; // 50 MeV/c
- const int mQinvBins = 150; // 20 MeV/c^2 bin width
- const double mQinvVal[2] = {0., 3.0}; // redefine for each analysis
- const Char_t *defaultInFile = "test.list";
- const Char_t *defaultOutFile = "oExpKaon_pp200_1D.root";
- void expKaonHBT_pp200_y2012_1D(const Char_t *inFileList = defaultInFile,
- const Char_t *oFileName = defaultOutFile)
- {
- std::cout << "*****************************" << std::endl
- << "* expKaonHBT_pp200_1D *" << std::endl
- << "* Start *" << std::endl
- << "*****************************" << std::endl << std::endl;
- //
- // Load libraries
- //
- std::cout << "Loading libraries..." << std::endl;
- gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
- loadSharedLibraries();
- gSystem->Load("libMinuit");
- gSystem->Load("StRefMultCorr");
- gSystem->Load("StFlowMaker"); // should be placed before HBT
- gSystem->Load("StHbtMaker");
- gSystem->Load("StarClassLibrary");
- gSystem->Load("libgsl");
- gSystem->Load("libgslcblas");
- gSystem->Load("StPicoDstMakerRun12");
- gSystem->Load("StarClassLibrary");
- gSystem->Load("libgsl");
- gSystem->Load("libgslcblas");
- gSystem->Load("libVMC.so");
- gSystem->Load("libStDb_Tables.so");
- gSystem->Load("libgen_Tables.so");
- gSystem->Load("libgeometry_Tables.so");
- gSystem->Load("libsim_Tables.so");
- gSystem->Load("libStarMagField.so");
- gSystem->Load("libSt_db_Maker.so");
- gSystem->Load("libSt_g2t.so");
- gSystem->Load("libSt_geant_Maker.so");
- gSystem->Load("StarGeneratorUtil.so");
- gSystem->Load("StarGeneratorEvent.so");
- gSystem->Load("StarGeneratorBase.so");
- gSystem->Load("StFemtoDstMakerSph");
- std::cout << "Libraries have been successfully loaded" << std::endl;
- //
- // Create chain
- //
- StChain* mChain = new StChain("StChain");
- mChain->SetDebug(0);
- StMuDebug::setLevel(0);
- //
- // Set StHbtMaker and StHbtManager
- //
- StHbtMaker *mHbtMaker = new StHbtMaker();
- mHbtMaker->SetDebug(0);
- StHbtManager *mHbtManager = mHbtMaker->HbtManager();
- //
- // Set StHbtReader
- //
- StHbtFemtoDstReader *femtoReader = new StHbtFemtoDstReader("", inFileList, "root", -1, false);
- femtoReader->AddTrigId(370011); // vpdmb-nobsmd
- femtoReader->AddTrigId(370001); // vpdmb
- femtoReader->AddTrigId(370022); // bbcmb
- femtoReader->AddTrigId(370501); // bht0-vpdmb
- femtoReader->AddTrigId(370511); // bht1-vpdmb
- femtoReader->AddTrigId(370531); // bht2
- femtoReader->AddTrigId(370542); // bht0-bbcmb-tof0
- femtoReader->AddTrigId(370546); // bht1-bbcmb-tof0
- femtoReader->AddTrigId(370522); // bht2-bbcmb
- femtoReader->AddTrigId(370601); // jp0
- femtoReader->AddTrigId(370611); // jp1
- femtoReader->AddTrigId(370621); // jp2
- femtoReader->AddTrigId(370641); // ajp
- femtoReader->AddTrigId(370301); // bbcmb-tof0
- femtoReader->AddTrigId(370361); // tofmult3-vpd
- femtoReader->AddTrigId(370341); // tofmult4
- //
- // Turn on only min-bias triggers
- //
- femtoReader->SetTrigger(370011, 1);
- femtoReader->SetTrigger(370001, 1);
- Long64_t mNEvents = femtoReader->GetNEvents();
- mHbtManager->SetEventReader(femtoReader);
- //
- // Set basic event cut
- //
- gregsEventCut *mBasicEventCut = new gregsEventCut();
- mBasicEventCut->SetCollisionType(0); //0-pp, 1-AuAu
- mBasicEventCut->SetEventMult(0, 45);
- mBasicEventCut->SetVertZPos(mPrimVertZ[0], mPrimVertZ[1]);
- mBasicEventCut->SetVzVpdVzDiff(mPrimVertVpdVz[0],mPrimVertVpdVz[1]);
- mBasicEventCut->SetVertRPos(mPrimVertR);
- //
- // Set basic kaon single-particle cut
- //
- gregsSimpleTrackCut *mBasicTrackCut = new gregsSimpleTrackCut();
- mBasicTrackCut->SetCharge(mPosCharge);
- mBasicTrackCut->SetMass(mChargedKaonMass);
- mBasicTrackCut->SetType(mTrackType);
- mBasicTrackCut->SetNHits(mTrackNHits[0], mTrackNHits[1]);
- mBasicTrackCut->SetNHitsFit(mTrackNHitsFit[0], mTrackNHitsFit[1]);
- mBasicTrackCut->SetAntiSplit(mTrackASplitVal);
- mBasicTrackCut->SetEta(mTrackEta[0], mTrackEta[1]);
- mBasicTrackCut->SetDCA(mTrackDCA[0], mTrackDCA[1]);
- mBasicTrackCut->SetDCAGlobal(mTrackDCA[0], mTrackDCA[1]);
- mBasicTrackCut->SetP(mTrackMom[0], mTrackMom[1]);
- mBasicTrackCut->SetDetectorSelection(mDetectorSelection);
- mBasicTrackCut->SetTpcMomentum(mTrackTpcMom[0], mTrackTpcMom[1]);
- mBasicTrackCut->SetNSigmaElectron(mnSigmaElectron[0],mnSigmaElectron[1]);
- mBasicTrackCut->SetNSigmaPion(mnSigmaPion[0], mnSigmaPion[1]);
- mBasicTrackCut->SetNSigmaKaon(mnSigmaKaon[0], mnSigmaKaon[1]);
- mBasicTrackCut->SetNSigmaProton(mnSigmaProton[0], mnSigmaProton[1]);
- mBasicTrackCut->SetTofMassSqr(mKaonTofMsqr[0],mKaonTofMsqr[1]);
- mBasicTrackCut->SetTofMomentum(mTrackTofMom[0], mTrackTofMom[1]);
- mBasicTrackCut->SetTnTMomentum(mTrackTnTMom[0], mTrackTnTMom[1]);
- mBasicTrackCut->SetTnTNSigmaElectron(mTnTNSigmaElectron[0], mTnTNSigmaElectron[1]);
- mBasicTrackCut->SetTnTNSigmaPion(mTnTNSigmaPion[0], mTnTNSigmaPion[1]);
- mBasicTrackCut->SetTnTNSigmaKaon(mTnTNSigmaKaon[0], mTnTNSigmaKaon[1]);
- mBasicTrackCut->SetTnTNSigmaProton(mTnTNSigmaProton[0], mTnTNSigmaProton[1]);
- mBasicTrackCut->SetTTTMomentumThresh(mTTTMomThresh);
- //
- // Set basic kaon pair cut
- //
- gregsTrackPairCut *mBasicPairCut = new gregsTrackPairCut();
- mBasicPairCut->SetFracOfMergedRow(mFmrCut[0],mFmrCut[1]);
- mBasicPairCut->SetQuality(mSplitLevelCut[0],mSplitLevelCut[1]);
- mBasicPairCut->SetKt(mPairKt[0],mPairKt[1]);
- mBasicPairCut->SetQinv(mPairQinv[0],mPairQinv[1]);
- mBasicPairCut->SetAverageSeparation(mAveSep[0],mAveSep[1]);
- Int_t mLocalCharge, mMultBins, mMultLow, mMultHi, mEvents2Mix, mCurrentPid;
- //
- // The multiplicity analysis matrix is CHARGE_BINS x MULT_BINS, where
- // the first element corresponds to the particle charge: (pos, neg),
- // and the second one corresponds to the RefMult intervals as listed below:
- // Mult: 0-45, 0-2, 3-4, 5-6, 7-8, 9-10, 11-45
- //
- // StHbtAnalysis, cut, CF and monitor declarations
- //
- StHbtVertexMultAnalysis *mKaonMultAnalysis[CHARGE_BINS][SPH_BINS];
- //
- // Cuts
- //
- gregsEventCut *mKaonEventCut[CHARGE_BINS][SPH_BINS];
- gregsSimpleTrackCut *mKaonTrackCut[CHARGE_BINS][SPH_BINS];
- gregsTrackPairCut *mKaonPairCut[CHARGE_BINS][SPH_BINS];
- //
- // CorrFctns
- //
- QinvCorrFctnKt *mKaonQinvMixKtCF[CHARGE_BINS][SPH_BINS];
- QinvCorrFctnOpposHemisphereKt *mKaonQinvOppKtCF[CHARGE_BINS][SPH_BINS];
- QinvCorrFctnRotationKt *mKaonQinvRotKtCF[CHARGE_BINS][SPH_BINS];
- #ifdef MONITORS
- //
- // Cut monitors
- //
- fxtEventCutMonitor *mFxtKaonEventCutMonitorPass[CHARGE_BINS][SPH_BINS];
- fxtTrackCutMonitor *mFxtKaonTrackCutMonitorPass[CHARGE_BINS][SPH_BINS];
- fxtPairCutMonitor *mFxtKaonPairCutMonitorPass[CHARGE_BINS][SPH_BINS];
- fxtEventCutMonitor *mFxtKaonEventCutMonitorFail[CHARGE_BINS][SPH_BINS];
- fxtTrackCutMonitor *mFxtKaonTrackCutMonitorFail[CHARGE_BINS][SPH_BINS];
- fxtPairCutMonitor *mFxtKaonPairCutMonitorFail[CHARGE_BINS][SPH_BINS];
- #endif
- //
- // Analysis creation
- //
- float sphLo, sphHi;
- mMultLow = 0;
- mMultHi = 50;
- mMultBins = 10;
- mEvents2Mix = 10;
- for (Int_t iSph = 0; iSph < SPH_BINS; iSph++)
- {
- //
- // sphLo < sphericity <= sphHi
- //
- switch (iSph)
- {
- case 0: sphLo = -0.1; sphHi = 0.1; break;
- default: sphLo = iSph*0.1; sphHi = (iSph + 1)*0.1;
- }
- for(Int_t iCharge = 0; iCharge < CHARGE_BINS; iCharge++)
- {
- switch(iCharge)
- {
- case 0: mLocalCharge = mPosCharge; break;
- default: mLocalCharge = mNegCharge; break;
- };
- //
- // Create event cut
- //
- mKaonEventCut[iCharge][iSph] = new gregsEventCut(*mBasicEventCut);
- mKaonEventCut[iCharge][iSph]->SetEventMult(mMultLow, mMultHi);
- mKaonEventCut[iCharge][iSph]->SetSphericityCut(sphLo, sphHi);
- #ifdef MONITORS
- mFxtKaonEventCutMonitorPass[iCharge][iSph] =
- new fxtEventCutMonitor("eventKaonPass", Form("_%d_%d", iCharge, iSph));
- mFxtKaonEventCutMonitorFail[iCharge][iSph] =
- new fxtEventCutMonitor("eventKaonFail", Form("_%d_%d", iCharge, iSph));
- mKaonEventCut[iCharge][iSph]->AddCutMonitor(mFxtKaonEventCutMonitorPass[iCharge][iSph],
- mFxtKaonEventCutMonitorFail[iCharge][iSph]);
- #endif
- //
- // Like-sign kaon analysis
- //
- // create analysis
- mKaonMultAnalysis[iCharge][iSph] = new StHbtVertexMultAnalysis(mPrimVertZbins,
- mPrimVertZ[0],
- mPrimVertZ[1],
- mMultBins,
- mMultLow,
- mMultHi);
- mKaonMultAnalysis[iCharge][iSph]->SetEventCut(mKaonEventCut[iCharge][iSph]);
- //
- // Create single-track cuts and add them to the analysis
- //
- mKaonTrackCut[iCharge][iSph] = new gregsSimpleTrackCut(*mBasicTrackCut);
- mKaonTrackCut[iCharge][iSph]->SetCharge(mLocalCharge);
- #ifdef MONITORS
- mFxtKaonTrackCutMonitorPass[iCharge][iSph] =
- new fxtTrackCutMonitor(Form("_trackKaonPass_%d_%d_", iCharge, iSph), mChargedKaonMass);
- mFxtKaonTrackCutMonitorFail[iCharge][iSph] =
- new fxtTrackCutMonitor(Form("_trackKaonFail_%d_%d_", iCharge, iSph), mChargedKaonMass);
- mKaonTrackCut[iCharge][iSph]->AddCutMonitor(mFxtKaonTrackCutMonitorPass[iCharge][iSph],
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]);
- #endif
- mKaonMultAnalysis[iCharge][iSph]->SetFirstParticleCut(mKaonTrackCut[iCharge][iSph]);
- mKaonMultAnalysis[iCharge][iSph]->SetSecondParticleCut(mKaonTrackCut[iCharge][iSph]);
- //
- // Create pair cut
- //
- mKaonPairCut[iCharge][iSph] = new gregsTrackPairCut(*mBasicPairCut);
- #ifdef MONITORS
- mFxtKaonPairCutMonitorPass[iCharge][iSph] =
- new fxtPairCutMonitor(Form("_pairKaonPass_%d_%d_", iCharge, iSph));
- mFxtKaonPairCutMonitorPass[iCharge][iSph]->SetParticleMass(mChargedKaonMass);
- mFxtKaonPairCutMonitorFail[iCharge][iSph] =
- new fxtPairCutMonitor(Form("_pairKaonFail_%d_%d_", iCharge, iSph));
- mFxtKaonPairCutMonitorFail[iCharge][iSph]->SetParticleMass(mChargedKaonMass);
- mKaonPairCut[iCharge][iSph]->AddCutMonitor(mFxtKaonPairCutMonitorPass[iCharge][iSph],
- mFxtKaonPairCutMonitorFail[iCharge][iSph]);
- #endif
- mKaonMultAnalysis[iCharge][iSph]->SetPairCut(mKaonPairCut[iCharge][iSph]);
- //
- // Correlation function initialization
- //
- mKaonQinvMixKtCF[iCharge][iSph] =
- new QinvCorrFctnKt(Form("hKaonQinvMixKt_%d_%d", iCharge, iSph),
- mQinvBins, mQinvVal[0], mQinvVal[1],
- mPairKtBins, mPairKtVal[0], mPairKtVal[1]);
- mKaonQinvOppKtCF[iCharge][iSph] =
- new QinvCorrFctnOpposHemisphereKt(Form("hKaonQinvOppKt_%d_%d", iCharge, iSph),
- mQinvBins, mQinvVal[0], mQinvVal[1],
- mPairKtBins, mPairKtVal[0], mPairKtVal[1],
- mChargedKaonMass, mKaonPairCut[iCharge][iSph]);
- mKaonQinvRotKtCF[iCharge][iSph] =
- new QinvCorrFctnRotationKt(Form("hKaonQinvRotKt_%d_%d", iCharge, iSph),
- mQinvBins, mQinvVal[0], mQinvVal[1],
- mPairKtBins, mPairKtVal[0], mPairKtVal[1],
- mChargedKaonMass, mKaonPairCut[iCharge][iSph]);
- mKaonMultAnalysis[iCharge][iSph]->AddCorrFctn(mKaonQinvMixKtCF[iCharge][iSph]);
- mKaonMultAnalysis[iCharge][iSph]->AddCorrFctn(mKaonQinvOppKtCF[iCharge][iSph]);
- mKaonMultAnalysis[iCharge][iSph]->AddCorrFctn(mKaonQinvRotKtCF[iCharge][iSph]);
- mKaonMultAnalysis[iCharge][iSph]->SetNumEventsToMix(mEvents2Mix); // set number of events to mix
- mHbtManager->AddAnalysis(mKaonMultAnalysis[iCharge][iSph]); // add analysis to the manager
- }
- }
- mChain->Init(); // StChain initialization
- //
- // Start processing
- //
- Int_t iRet = 0;
- Int_t mNEventsProcessed = 0;
- Float_t mPercentCounter = 0.05;
- Float_t mProgress = 0.;
- unsigned int mSubCounter = 1; // time
- time_t mStartTime, mStopTime, mDiffTime; // time
- float mFrac; // time
- mStartTime = time(0); // time
- // mNEvents = 15;
- std::cout << "Total Events: " << mNEvents << std::endl;
- for(Int_t iEvent=0; iEvent < mNEvents; iEvent++)
- {
- mProgress = (Float_t)iEvent/(Float_t)mNEvents;
- mNEventsProcessed++;
- if(mProgress >= mPercentCounter)
- {
- mPercentCounter += 0.05;
- mStopTime = time(0);
- mDiffTime = difftime(mStopTime, mStartTime);
- mFrac = (float)mDiffTime*(float)(mNEvents - iEvent)/(float)iEvent;
- mSubCounter++;
- std::cout << Form("Processing progress: %4.2f%%. Time left: %.1f sec", mProgress*100., mFrac)
- << std::endl;
- }
- mChain->Clear();
- iRet = mChain->Make(iEvent);
- if(iRet!=0)
- {
- std::cout << "[ERROR] - iRet: " << iRet << std::endl;
- break;
- }
- }
- mChain->Finish();
- TFile *oFile = new TFile(oFileName, "RECREATE"); // create output file
- //
- // Write hbt histograms to the file
- //
- std::cout << "Writing histograms to the output file...";
- #ifdef MONITORS
- for(Int_t iCharge = 0; iCharge < CHARGE_BINS; iCharge++)
- {
- for (Int_t iSph = 0; iSph < SPH_BINS; iSph++)
- {
- mFxtKaonEventCutMonitorPass[iCharge][iSph]->VertexZ()->Write();
- mFxtKaonEventCutMonitorPass[iCharge][iSph]->VertexYvsVertexX()->Write();
- mFxtKaonEventCutMonitorPass[iCharge][iSph]->RefMult()->Write();
- mFxtKaonEventCutMonitorPass[iCharge][iSph]->VpdVzDiff()->Write();
- mFxtKaonEventCutMonitorFail[iCharge][iSph]->VertexZ()->Write();
- mFxtKaonEventCutMonitorFail[iCharge][iSph]->VertexYvsVertexX()->Write();
- mFxtKaonEventCutMonitorFail[iCharge][iSph]->RefMult()->Write();
- mFxtKaonEventCutMonitorFail[iCharge][iSph]->VpdVzDiff()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->DCAGlobal()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->Nhits()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->P()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->Pt()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->PtVsNsigmaPion()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->PtVsNsigmaKaon()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->PtVsNsigmaProton()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->PvsDedx()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->Rapidity()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->PseudoRapidity()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->PvsMassSqr()->Write();
- mFxtKaonTrackCutMonitorPass[iCharge][iSph]->PvsInvBeta()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->DCAGlobal()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->Nhits()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->P()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->Pt()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->PtVsNsigmaPion()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->PtVsNsigmaKaon()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->PtVsNsigmaProton()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->PvsDedx()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->Rapidity()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->PseudoRapidity()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->PvsMassSqr()->Write();
- mFxtKaonTrackCutMonitorFail[iCharge][iSph]->PvsInvBeta()->Write();
- mFxtKaonPairCutMonitorPass[iCharge][iSph]->Kt()->Write();
- mFxtKaonPairCutMonitorPass[iCharge][iSph]->Pt1Pt2Qinv()->Write();
- mFxtKaonPairCutMonitorPass[iCharge][iSph]->FMRvsQinv()->Write();
- mFxtKaonPairCutMonitorPass[iCharge][iSph]->SLvsQinv()->Write();
- mFxtKaonPairCutMonitorPass[iCharge][iSph]->AveSepVsQinv()->Write();
- mFxtKaonPairCutMonitorFail[iCharge][iSph]->Kt()->Write();
- mFxtKaonPairCutMonitorFail[iCharge][iSph]->Pt1Pt2Qinv()->Write();
- mFxtKaonPairCutMonitorFail[iCharge][iSph]->FMRvsQinv()->Write();
- mFxtKaonPairCutMonitorFail[iCharge][iSph]->SLvsQinv()->Write();
- mFxtKaonPairCutMonitorFail[iCharge][iSph]->AveSepVsQinv()->Write();
- }
- }
- #endif
- for (Int_t iSph = 0; iSph < SPH_BINS; iSph++)
- {
- for (Int_t iCharge = 0; iCharge < CHARGE_BINS; iCharge++)
- {
- for (Int_t iKt = 0; iKt < mPairKtBins; iKt++)
- {
- mKaonQinvMixKtCF[iCharge][iSph]->Numerator(iKt)->Write();
- mKaonQinvMixKtCF[iCharge][iSph]->Denominator(iKt)->Write();
- mKaonQinvOppKtCF[iCharge][iSph]->Numerator(iKt)->Write();
- mKaonQinvOppKtCF[iCharge][iSph]->Denominator(iKt)->Write();
- mKaonQinvRotKtCF[iCharge][iSph]->Numerator(iKt)->Write();
- mKaonQinvRotKtCF[iCharge][iSph]->Denominator(iKt)->Write();
- }
- }
- }
- std::cout << "\t[DONE]" << std::endl;
- //
- // Write the output file and close it
- //
- std::cout << "Saving the output file...";
- oFile->Close();
- std::cout << "\t[DONE]" << std::endl;
- delete mChain;
- std::cout << "********************************" << std::endl
- << "* expKaonHBT_pp200_1D *" << std::endl
- << "* Finish *" << std::endl
- << "********************************" << std::endl << std::endl;
- }
|