diff --git a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx index e4d783ca9b2bc8c9284f41464e5b9662a939b893..96c9ad30d118ba585f15ba3873dfb912a332c576 100644 --- a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx +++ b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx @@ -1,502 +1,395 @@ //---------------------------------------- // -// 2019 A. Senger a.senger@gsi.de +// 2019 A. Senger a.senger@gsi.de // //---------------------------------------- -#define PBINNING 100, 0., 20. -#define THETABINNING 180, 0., 180. -#define PTBINNING 100, 0., 10. -#define YBINNING 100, -2., 6. -#define MBINNING 400, 0., 4. +#define PBINNING 100,0.,20. +#define THETABINNING 180,0.,180. +#define PTBINNING 100,0.,10. +#define YBINNING 100,-2.,6. +#define MBINNING 400,0.,4. #include "CbmAnaDimuonAnalysis.h" +#include "CbmMCTrack.h" +#include "CbmStsTrack.h" +#include "CbmTrackMatchNew.h" +#include "CbmMuchTrack.h" +#include "CbmTrdTrack.h" +#include "CbmTrdHit.h" +#include "CbmTrackMatch.h" +#include "CbmMuchPixelHit.h" #include "CbmAnaMuonCandidate.h" #include "CbmGlobalTrack.h" -#include "CbmGlobalTrackFitterKF.h" -#include "CbmKFTrack.h" -#include "CbmKFVertex.h" -#include "CbmMCTrack.h" -#include "CbmMatch.h" #include "CbmMuchGeoScheme.h" -#include "CbmMuchPixelHit.h" -#include "CbmMuchTrack.h" -#include "CbmStsKFTrackFitter.h" -#include "CbmStsTrack.h" #include "CbmTofHit.h" #include "CbmTofPoint.h" -#include "CbmTrackMatch.h" -#include "CbmTrackMatchNew.h" -#include "CbmTrdHit.h" -#include "CbmTrdTrack.h" -#include "CbmTrdTrackFitterKF.h" +#include "CbmMatch.h" #include "CbmVertex.h" +#include "CbmKFTrack.h" +#include "CbmStsKFTrackFitter.h" +#include "CbmGlobalTrackFitterKF.h" +#include "CbmTrdTrackFitterKF.h" +#include "CbmKFVertex.h" + #include "FairRootManager.h" #include "FairTrackParam.h" -#include "PParticle.h" + #include "TClonesArray.h" -#include "TDirectory.h" -#include "TFile.h" +#include "TMath.h" +#include "TMultiLayerPerceptron.h" +#include "TSystem.h" +#include "TTree.h" +#include "TLorentzVector.h" +#include "TVector3.h" #include "TH2D.h" #include "TH3D.h" -#include "TLorentzVector.h" -#include "TMCProcess.h" -#include "TMath.h" #include "TProfile.h" -#include "TVector3.h" +#include "TMCProcess.h" +#include "TFile.h" +#include "TDirectory.h" + +#include "PParticle.h" + #include "vector" using std::vector; +#include <sys/stat.h> + +#include <iostream> +#include <fstream> +using namespace std; + // ----- Default constructor ------------------------------------------- CbmAnaDimuonAnalysis::CbmAnaDimuonAnalysis(TString name, TString setup) - : FairTask("AnaDimuonAnalysis") - , fEvent(0) - , fMCTracks(NULL) - , fStsTracks(NULL) - , fStsTrackMatches(NULL) - , fMuchTracks(NULL) - , fMuchTrackMatches(NULL) - , fGlobalTracks(NULL) - , fTrdTracks(NULL) - , fTofHit(NULL) - , fMuPlus(new TClonesArray("CbmAnaMuonCandidate", 1)) - , fMuMinus(new TClonesArray("CbmAnaMuonCandidate", 1)) - , fParticles(NULL) - , fInputTree(NULL) - , fPlutoFile(NULL) - , fFitter(NULL) - , fFitterTRD(NULL) - , fFitterGlobal(NULL) - , fVertex(NULL) - , fChi2StsCut(2) - , fChi2MuchCut(3) - , fChi2VertexCut(3) - , fSigmaTofCut(2) - , fMass(0.105658) - , fUseCuts(kTRUE) - , fUseMC(kTRUE) - , fNofMuchCut(11) - , fNofStsCut(7) - , fNofTrdCut(1) - , - // fFileName("histo.root"), - // fEffFileName("eff_histo.root"), - fGeoScheme(NULL) + : FairTask("AnaDimuonAnalysis"), + fEvent(0), + fMCTracks(NULL), + fStsTracks(NULL), + fStsTrackMatches(NULL), + fMuchTracks(NULL), + fMuchTrackMatches(NULL), + fGlobalTracks(NULL), + fTrdTracks(NULL), + fTofHit(NULL), + fMuPlus(new TClonesArray("CbmAnaMuonCandidate",1)), + fMuMinus(new TClonesArray("CbmAnaMuonCandidate",1)), + fParticles(NULL), + fInputTree(NULL), + fPlutoFile(NULL), + fFitter(NULL), + fFitterTRD(NULL), + fFitterGlobal(NULL), + fVertex(NULL), + fChi2StsCut(2), + fChi2MuchCut(3), + fChi2VertexCut(3), + fAnnCut(-1), + fNeurons(0), + fSigmaTofCut(2), + fMass(0.105658), + fUseCuts(kTRUE), + fUseMC(kTRUE), + fNofMuchCut(11), + fNofStsCut(7), + fNofTrdCut(1), +// fFileName("histo.root"), +// fEffFileName("eff_histo.root"), + fGeoScheme(NULL) { - fPlutoFileName = name; - fSetupName = setup; + fPlutoFileName=name; + fSetupName =setup; } // ------------------------------------------------------------------------- // ----- SetParContainers ------------------------------------------------- -void CbmAnaDimuonAnalysis::SetParContainers() {} +void CbmAnaDimuonAnalysis::SetParContainers() +{ +} // ------------------------------------------------------------------------- // ----- Public method Init (abstract in base class) -------------------- -InitStatus CbmAnaDimuonAnalysis::Init() { +InitStatus CbmAnaDimuonAnalysis::Init() +{ // Get and check FairRootManager FairRootManager* fManager = FairRootManager::Instance(); - fMCTracks = (TClonesArray*) fManager->GetObject("MCTrack"); - if (nullptr == fMCTracks) LOG(FATAL) << "No MCTrack in input"; + fMCTracks = (TClonesArray*) fManager->GetObject("MCTrack"); + if(nullptr == fMCTracks) LOG(FATAL) << "No MCTrack in input"; - fStsTracks = (TClonesArray*) fManager->GetObject("StsTrack"); - if (nullptr == fStsTracks) LOG(FATAL) << "No StsTrack in input"; + fStsTracks = (TClonesArray*) fManager->GetObject("StsTrack"); + if(nullptr == fStsTracks) LOG(FATAL) << "No StsTrack in input"; - if (fUseMC) - fStsTrackMatches = (TClonesArray*) fManager->GetObject("StsTrackMatch"); - if (nullptr == fStsTrackMatches && fUseMC) - LOG(FATAL) << "No StsTrackMatch in input"; + if(fUseMC)fStsTrackMatches = (TClonesArray*) fManager->GetObject("StsTrackMatch"); + if(nullptr == fStsTrackMatches && fUseMC) LOG(FATAL) << "No StsTrackMatch in input"; - fMuchTracks = (TClonesArray*) fManager->GetObject("MuchTrack"); - if (nullptr == fMuchTracks) LOG(FATAL) << "No MuchTrack in input"; + fMuchTracks = (TClonesArray*) fManager->GetObject("MuchTrack"); + if(nullptr == fMuchTracks) LOG(FATAL) << "No MuchTrack in input"; - if (fUseMC) - fMuchTrackMatches = (TClonesArray*) fManager->GetObject("MuchTrackMatch"); - if (nullptr == fMuchTrackMatches && fUseMC) - LOG(FATAL) << "No MuchTrackMatch in input"; + if(fUseMC)fMuchTrackMatches = (TClonesArray*) fManager->GetObject("MuchTrackMatch"); + if(nullptr == fMuchTrackMatches && fUseMC) LOG(FATAL) << "No MuchTrackMatch in input"; - fGlobalTracks = (TClonesArray*) fManager->GetObject("GlobalTrack"); - if (nullptr == fGlobalTracks) LOG(FATAL) << "No GlobalTrack in input"; + fGlobalTracks = (TClonesArray*) fManager->GetObject("GlobalTrack"); + if(nullptr == fGlobalTracks) LOG(FATAL) << "No GlobalTrack in input"; - fTrdTracks = (TClonesArray*) fManager->GetObject("TrdTrack"); - if (nullptr == fTrdTracks) LOG(FATAL) << "No TrdTrack in input"; + fTrdTracks = (TClonesArray*) fManager->GetObject("TrdTrack"); + if(nullptr == fTrdTracks) LOG(FATAL) << "No TrdTrack in input"; - fTofHit = (TClonesArray*) fManager->GetObject("TofHit"); - if (nullptr == fTofHit) LOG(FATAL) << "No TofHit in input"; + fTofHit = (TClonesArray*) fManager->GetObject("TofHit"); + if(nullptr == fTofHit) LOG(FATAL) << "No TofHit in input"; fVertex = dynamic_cast<CbmVertex*>(fManager->GetObject("PrimaryVertex.")); - fEvent = 0; - - fManager->Register("MuPlus", "Much", fMuPlus, kTRUE); - fManager->Register("MuMinus", "Much", fMuMinus, kTRUE); - + fEvent=0; + + fManager->Register("MuPlus" ,"Much",fMuPlus,kTRUE); + fManager->Register("MuMinus" ,"Much",fMuMinus,kTRUE); + fGeoScheme = CbmMuchGeoScheme::Instance(); - // fGeoScheme->Init(fDigiFileName); - // fLastStationIndex = fGeoScheme->GetNStations()-1; - // fNLayers = 0; - // for (Int_t i=0;i<=fLastStationIndex;i++){ - // fNLayers+=fGeoScheme->GetLayerSides(i).size()/2; - // } +// fGeoScheme->Init(fDigiFileName); +// fLastStationIndex = fGeoScheme->GetNStations()-1; +// fNLayers = 0; +// for (Int_t i=0;i<=fLastStationIndex;i++){ +// fNLayers+=fGeoScheme->GetLayerSides(i).size()/2; +// } fFitter = new CbmStsKFTrackFitter(); fFitter->Init(); - + fFitterGlobal = new CbmGlobalTrackFitterKF(); fFitterGlobal->Init(); - + fFitterTRD = new CbmTrdTrackFitterKF(); fFitterTRD->Init(); fFitterTRD->SetPid(13); - - YPt_pluto = new TH2D("YPt_pluto", "PLUTO signal", YBINNING, PTBINNING); - - if (fPlutoFileName != "") { - if (fPlutoFileName.Contains("root")) { - fParticles = new TClonesArray("PParticle", 100); - fPlutoFile = new TFile(fPlutoFileName.Data()); - fInputTree = (TTree*) fPlutoFile->Get("data"); - fInputTree->SetBranchAddress("Particles", &fParticles); - for (int iEvent = 0; iEvent < fInputTree->GetEntries(); iEvent++) { - fInputTree->GetEntry(iEvent); - Int_t NofPart = fParticles->GetEntriesFast(); - PParticle* Part1 = (PParticle*) fParticles->At(NofPart - 2); - PParticle* Part2 = (PParticle*) fParticles->At(NofPart - 1); - TLorentzVector mom1 = Part1->Vect4(); - TLorentzVector mom2 = Part2->Vect4(); - TLorentzVector Mom = mom1 + mom2; - YPt_pluto->Fill( - Mom.Rapidity(), Mom.Pt(), 1. / (Double_t) fInputTree->GetEntries()); - } - } + + YPt_pluto = new TH2D("YPt_pluto", "PLUTO signal",YBINNING,PTBINNING); + + if(fPlutoFileName != ""){ + if(fPlutoFileName.Contains("root")){ + fParticles = new TClonesArray("PParticle",100); + fPlutoFile = new TFile(fPlutoFileName.Data()); + fInputTree = (TTree*)fPlutoFile->Get("data"); + fInputTree->SetBranchAddress("Particles", &fParticles); + for(int iEvent = 0;iEvent<fInputTree->GetEntries();iEvent++){ + fInputTree->GetEntry(iEvent); + Int_t NofPart = fParticles->GetEntriesFast(); + PParticle* Part1 = (PParticle*) fParticles->At(NofPart-2); + PParticle* Part2 = (PParticle*) fParticles->At(NofPart-1); + TLorentzVector mom1 = Part1->Vect4(); + TLorentzVector mom2 = Part2->Vect4(); + TLorentzVector Mom = mom1 + mom2; + YPt_pluto->Fill(Mom.Rapidity(),Mom.Pt(),1./(Double_t)fInputTree->GetEntries()); + }} } - + TString title1 = "STS accepted MC signal"; TString title2 = "STS+MUCH accepted MC signal"; TString title3 = "STS+MUCH+TRD accepted MC signal"; TString title4 = "STS+MUCH+TRD+TOF accepted MC signal"; - - YPt_StsAcc = new TH2D("YPt_StsAcc", title1, YBINNING, PTBINNING); + + YPt_StsAcc = new TH2D("YPt_StsAcc", title1,YBINNING,PTBINNING); YPt_StsAcc->GetXaxis()->SetTitle("Y"); YPt_StsAcc->GetYaxis()->SetTitle("P_{t} (GeV/c)"); - - YPt_StsMuchAcc = (TH2D*) YPt_StsAcc->Clone("YPt_StsMuchAcc"); - YPt_StsMuchAcc->SetTitle(title2); - YPt_StsMuchTrdAcc = (TH2D*) YPt_StsAcc->Clone("YPt_StsMuchTrdAcc"); - YPt_StsMuchTrdAcc->SetTitle(title3); - YPt_StsMuchTrdTofAcc = (TH2D*) YPt_StsAcc->Clone("YPt_StsMuchTrdTofAcc"); - YPt_StsMuchTrdTofAcc->SetTitle(title4); - - YPtM = new TH3D( - "YPtM", "Reconstrcuted YPtM spectrum", YBINNING, PTBINNING, MBINNING); - - acc_P[0][0] = new TProfile("signal_accP_Sts", title1, PBINNING); + + YPt_StsMuchAcc = (TH2D*)YPt_StsAcc->Clone("YPt_StsMuchAcc"); YPt_StsMuchAcc->SetTitle(title2); + YPt_StsMuchTrdAcc = (TH2D*)YPt_StsAcc->Clone("YPt_StsMuchTrdAcc"); YPt_StsMuchTrdAcc->SetTitle(title3); + YPt_StsMuchTrdTofAcc= (TH2D*)YPt_StsAcc->Clone("YPt_StsMuchTrdTofAcc"); YPt_StsMuchTrdTofAcc->SetTitle(title4); + + YPtM = new TH3D("YPtM", "Reconstrcuted YPtM spectrum",YBINNING,PTBINNING,MBINNING); + + acc_P[0][0] = new TProfile("signal_accP_Sts",title1,PBINNING); acc_P[0][0]->GetXaxis()->SetTitle("P (GeV/c)"); acc_P[0][0]->GetYaxis()->SetTitle("%"); - - acc_P[1][0] = (TProfile*) acc_P[0][0]->Clone("signal_accP_StsMuch"); - acc_P[1][0]->SetTitle(title2); - acc_P[2][0] = (TProfile*) acc_P[0][0]->Clone("signal_accP_StsMuchTrd"); - acc_P[2][0]->SetTitle(title3); - acc_P[3][0] = (TProfile*) acc_P[0][0]->Clone("signal_accP_StsMuchTrdTof"); - acc_P[3][0]->SetTitle(title4); - - acc_Theta[0][0] = new TProfile("signal_accTheta_Sts", title1, THETABINNING); + + acc_P[1][0] = (TProfile*)acc_P[0][0]->Clone("signal_accP_StsMuch"); acc_P[1][0]->SetTitle(title2); + acc_P[2][0] = (TProfile*)acc_P[0][0]->Clone("signal_accP_StsMuchTrd"); acc_P[2][0]->SetTitle(title3); + acc_P[3][0] = (TProfile*)acc_P[0][0]->Clone("signal_accP_StsMuchTrdTof");acc_P[3][0]->SetTitle(title4); + + acc_Theta[0][0] = new TProfile("signal_accTheta_Sts",title1,THETABINNING); acc_Theta[0][0]->GetXaxis()->SetTitle("#Theta (#circ)"); acc_Theta[0][0]->GetYaxis()->SetTitle("%"); - - acc_Theta[1][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_accTheta_StsMuch"); - acc_Theta[1][0]->SetTitle(title2); - acc_Theta[2][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_accTheta_StsMuchTrd"); - acc_Theta[2][0]->SetTitle(title3); - acc_Theta[3][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_accTheta_StsMuchTrdTof"); - acc_Theta[3][0]->SetTitle(title4); - + + acc_Theta[1][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_accTheta_StsMuch"); acc_Theta[1][0]->SetTitle(title2); + acc_Theta[2][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_accTheta_StsMuchTrd"); acc_Theta[2][0]->SetTitle(title3); + acc_Theta[3][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_accTheta_StsMuchTrdTof");acc_Theta[3][0]->SetTitle(title4); + title1 = "STS accepted MC #mu+"; title2 = "STS+MUCH accepted MC #mu+"; title3 = "STS+MUCH+TRD accepted MC #mu+"; title4 = "STS+MUCH+TRD+TOF accepted MC #mu+"; - - acc_P[0][1] = (TProfile*) acc_P[0][0]->Clone("muPl_accP_Sts"); - acc_P[0][1]->SetTitle(title1); - acc_P[1][1] = (TProfile*) acc_P[0][0]->Clone("muPl_accP_StsMuch"); - acc_P[1][1]->SetTitle(title2); - acc_P[2][1] = (TProfile*) acc_P[0][0]->Clone("muPl_accP_StsMuchTrd"); - acc_P[2][1]->SetTitle(title3); - acc_P[3][1] = (TProfile*) acc_P[0][0]->Clone("muPl_accP_StsMuchTrdTof"); - acc_P[3][1]->SetTitle(title4); - - acc_Theta[0][1] = (TProfile*) acc_Theta[0][0]->Clone("muPl_accTheta_Sts"); - acc_Theta[0][1]->SetTitle(title1); - acc_Theta[1][1] = (TProfile*) acc_Theta[0][0]->Clone("muPl_accTheta_StsMuch"); - acc_Theta[1][1]->SetTitle(title2); - acc_Theta[2][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_accTheta_StsMuchTrd"); - acc_Theta[2][1]->SetTitle(title3); - acc_Theta[3][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_accTheta_StsMuchTrdTof"); - acc_Theta[3][1]->SetTitle(title4); - + + acc_P[0][1] = (TProfile*)acc_P[0][0]->Clone("muPl_accP_Sts"); acc_P[0][1]->SetTitle(title1); + acc_P[1][1] = (TProfile*)acc_P[0][0]->Clone("muPl_accP_StsMuch"); acc_P[1][1]->SetTitle(title2); + acc_P[2][1] = (TProfile*)acc_P[0][0]->Clone("muPl_accP_StsMuchTrd"); acc_P[2][1]->SetTitle(title3); + acc_P[3][1] = (TProfile*)acc_P[0][0]->Clone("muPl_accP_StsMuchTrdTof");acc_P[3][1]->SetTitle(title4); + + acc_Theta[0][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_accTheta_Sts"); acc_Theta[0][1]->SetTitle(title1); + acc_Theta[1][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_accTheta_StsMuch"); acc_Theta[1][1]->SetTitle(title2); + acc_Theta[2][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_accTheta_StsMuchTrd"); acc_Theta[2][1]->SetTitle(title3); + acc_Theta[3][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_accTheta_StsMuchTrdTof");acc_Theta[3][1]->SetTitle(title4); + title1 = "STS accepted MC #mu-"; title2 = "STS+MUCH accepted MC #mu-"; title3 = "STS+MUCH+TRD accepted MC #mu-"; title4 = "STS+MUCH+TRD+TOF accepted MC #mu-"; - - acc_P[0][2] = (TProfile*) acc_P[0][0]->Clone("muMn_accP_Sts"); - acc_P[0][2]->SetTitle(title1); - acc_P[1][2] = (TProfile*) acc_P[0][0]->Clone("muMn_accP_StsMuch"); - acc_P[1][2]->SetTitle(title2); - acc_P[2][2] = (TProfile*) acc_P[0][0]->Clone("muMn_accP_StsMuchTrd"); - acc_P[2][2]->SetTitle(title3); - acc_P[3][2] = (TProfile*) acc_P[0][0]->Clone("muMn_accP_StsMuchTrdTof"); - acc_P[3][2]->SetTitle(title4); - - acc_Theta[0][2] = (TProfile*) acc_Theta[0][0]->Clone("muMn_accTheta_Sts"); - acc_Theta[0][2]->SetTitle(title1); - acc_Theta[1][2] = (TProfile*) acc_Theta[0][0]->Clone("muMn_accTheta_StsMuch"); - acc_Theta[1][2]->SetTitle(title2); - acc_Theta[2][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_accTheta_StsMuchTrd"); - acc_Theta[2][2]->SetTitle(title3); - acc_Theta[3][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_accTheta_StsMuchTrdTof"); - acc_Theta[3][2]->SetTitle(title4); - - TString title0 = - "reconstructed MC signal after primary vertex cut (PVC)"; // PVC: chi2 of STS track in target - title1 = - "reconstructed MC signal after PVC and STS cuts (StsCs)"; // StsCs: chi2 of STS track and number of STS hits - title2 = - "reconstructed MC signal after PVC+StsCs and MUCH cuts (MuchCs)"; // MuchCs: chi2 of MUCH track and number of MUCH hits - title3 = - "reconstructed MC signal after PVC+StsCs+MuchCs and TRD cut (TrdC)"; // TrdC: number of TRD hits - title4 = - "reconstructed MC signal after PVC+StsCs+MuchCs+TrdC and TOF cut"; // TOF: cut using mass distribution from time measurement - - effReco_P[0][0] = (TProfile*) acc_P[0][0]->Clone("signal_effRecoP_VtxSts"); - effReco_P[0][0]->SetTitle(title1); - effReco_P[1][0] = - (TProfile*) acc_P[0][0]->Clone("signal_effRecoP_VtxStsMuch"); - effReco_P[1][0]->SetTitle(title2); - effReco_P[2][0] = - (TProfile*) acc_P[0][0]->Clone("signal_effRecoP_VtxStsMuchTrd"); - effReco_P[2][0]->SetTitle(title3); - effReco_P[3][0] = - (TProfile*) acc_P[0][0]->Clone("signal_effRecoP_VtxStsMuchTrdTof"); - effReco_P[3][0]->SetTitle(title4); - - effReco_Theta[0][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxSts"); - effReco_Theta[0][0]->SetTitle(title1); - effReco_Theta[1][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxStsMuch"); - effReco_Theta[1][0]->SetTitle(title2); - effReco_Theta[2][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxStsMuchTrd"); - effReco_Theta[2][0]->SetTitle(title3); - effReco_Theta[3][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxStsMuchTrdTof"); - effReco_Theta[3][0]->SetTitle(title4); - - eff4pi_P[0][0] = (TProfile*) acc_P[0][0]->Clone("signal_eff4piP_Vtx"); - eff4pi_P[0][0]->SetTitle(title0); - eff4pi_P[1][0] = (TProfile*) acc_P[0][0]->Clone("signal_eff4piP_VtxSts"); - eff4pi_P[1][0]->SetTitle(title1); - eff4pi_P[2][0] = (TProfile*) acc_P[0][0]->Clone("signal_eff4piP_VtxStsMuch"); - eff4pi_P[2][0]->SetTitle(title2); - eff4pi_P[3][0] = - (TProfile*) acc_P[0][0]->Clone("signal_eff4piP_VtxStsMuchTrd"); - eff4pi_P[3][0]->SetTitle(title3); - eff4pi_P[4][0] = - (TProfile*) acc_P[0][0]->Clone("signal_eff4piP_VtxStsMuchTrdTof"); - eff4pi_P[4][0]->SetTitle(title4); - - eff4pi_Theta[0][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_eff4piTheta_Vtx"); - eff4pi_Theta[0][0]->SetTitle(title0); - eff4pi_Theta[1][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxSts"); - eff4pi_Theta[1][0]->SetTitle(title1); - eff4pi_Theta[2][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxStsMuch"); - eff4pi_Theta[2][0]->SetTitle(title2); - eff4pi_Theta[3][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxStsMuchTrd"); - eff4pi_Theta[3][0]->SetTitle(title3); - eff4pi_Theta[4][0] = - (TProfile*) acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxStsMuchTrdTof"); - eff4pi_Theta[4][0]->SetTitle(title4); - - YPt_VtxReco = (TH2D*) YPt_StsAcc->Clone("YPt_VtxReco"); - YPt_VtxReco->SetTitle(title0); - YPt_VtxStsReco = (TH2D*) YPt_StsAcc->Clone("YPt_VtxStsReco"); - YPt_VtxStsReco->SetTitle(title1); - YPt_VtxStsMuchReco = (TH2D*) YPt_StsAcc->Clone("YPt_VtxStsMuchReco"); - YPt_VtxStsMuchReco->SetTitle(title2); - YPt_VtxStsMuchTrdReco = (TH2D*) YPt_StsAcc->Clone("YPt_VtxStsMuchTrdReco"); - YPt_VtxStsMuchTrdReco->SetTitle(title3); - YPt_VtxStsMuchTrdTofReco = - (TH2D*) YPt_StsAcc->Clone("YPt_VtxStsMuchTrdTofReco"); - YPt_VtxStsMuchTrdTofReco->SetTitle(title4); - - title0 = "reconstructed MC #mu+ after primary vertex cut (PVC)"; - title1 = "reconstructed MC #mu+ after PVC and STS cuts (StsCs)"; - title2 = "reconstructed MC #mu+ after PVC+StsCs and MUCH cuts (MuchCs)"; - title3 = "reconstructed MC #mu+ after PVC+StsCs+MuchCs and TRD cut (TrdC)"; - title4 = "reconstructed MC #mu+ after PVC+StsCs+MuchCs+TrdC and TOF cut"; - - effReco_P[0][1] = (TProfile*) acc_P[0][0]->Clone("muPl_effRecoP_VtxSts"); - effReco_P[0][1]->SetTitle(title1); - effReco_P[1][1] = (TProfile*) acc_P[0][0]->Clone("muPl_effRecoP_VtxStsMuch"); - effReco_P[1][1]->SetTitle(title2); - effReco_P[2][1] = - (TProfile*) acc_P[0][0]->Clone("muPl_effRecoP_VtxStsMuchTrd"); - effReco_P[2][1]->SetTitle(title3); - effReco_P[3][1] = - (TProfile*) acc_P[0][0]->Clone("muPl_effRecoP_VtxStsMuchTrdTof"); - effReco_P[3][1]->SetTitle(title4); - - effReco_Theta[0][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxSts"); - effReco_Theta[0][1]->SetTitle(title1); - effReco_Theta[1][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxStsMuch"); - effReco_Theta[1][1]->SetTitle(title2); - effReco_Theta[2][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxStsMuchTrd"); - effReco_Theta[2][1]->SetTitle(title3); - effReco_Theta[3][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxStsMuchTrdTof"); - effReco_Theta[3][1]->SetTitle(title4); - - eff4pi_P[0][1] = (TProfile*) acc_P[0][0]->Clone("muPl_eff4piP_Vtx"); - eff4pi_P[0][1]->SetTitle(title0); - eff4pi_P[1][1] = (TProfile*) acc_P[0][0]->Clone("muPl_eff4piP_VtxSts"); - eff4pi_P[1][1]->SetTitle(title1); - eff4pi_P[2][1] = (TProfile*) acc_P[0][0]->Clone("muPl_eff4piP_VtxStsMuch"); - eff4pi_P[2][1]->SetTitle(title2); - eff4pi_P[3][1] = (TProfile*) acc_P[0][0]->Clone("muPl_eff4piP_VtxStsMuchTrd"); - eff4pi_P[3][1]->SetTitle(title3); - eff4pi_P[4][1] = - (TProfile*) acc_P[0][0]->Clone("muPl_eff4piP_VtxStsMuchTrdTof"); - eff4pi_P[4][1]->SetTitle(title4); - - eff4pi_Theta[0][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_eff4piTheta_Vtx"); - eff4pi_Theta[0][1]->SetTitle(title0); - eff4pi_Theta[1][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxSts"); - eff4pi_Theta[1][1]->SetTitle(title1); - eff4pi_Theta[2][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxStsMuch"); - eff4pi_Theta[2][1]->SetTitle(title2); - eff4pi_Theta[3][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxStsMuchTrd"); - eff4pi_Theta[3][1]->SetTitle(title3); - eff4pi_Theta[4][1] = - (TProfile*) acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxStsMuchTrdTof"); - eff4pi_Theta[4][1]->SetTitle(title4); - - title0 = "reconstructed MC #mu- after primary vertex cut (PVC)"; - title1 = "reconstructed MC #mu- after PVC and STS cuts (StsCs)"; - title2 = "reconstructed MC #mu- after PVC+StsCs and MUCH cuts (MuchCs)"; - title3 = "reconstructed MC #mu- after PVC+StsCs+MuchCs and TRD cut (TrdC)"; - title4 = "reconstructed MC #mu- after PVC+StsCs+MuchCs+TrdC and TOF cut"; - - effReco_P[0][2] = (TProfile*) acc_P[0][0]->Clone("muMn_effRecoP_VtxSts"); - effReco_P[0][2]->SetTitle(title1); - effReco_P[1][2] = (TProfile*) acc_P[0][0]->Clone("muMn_effRecoP_VtxStsMuch"); - effReco_P[1][2]->SetTitle(title2); - effReco_P[2][2] = - (TProfile*) acc_P[0][0]->Clone("muMn_effRecoP_VtxStsMuchTrd"); - effReco_P[2][2]->SetTitle(title3); - effReco_P[3][2] = - (TProfile*) acc_P[0][0]->Clone("muMn_effRecoP_VtxStsMuchTrdTof"); - effReco_P[3][2]->SetTitle(title4); - - effReco_Theta[0][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxSts"); - effReco_Theta[0][2]->SetTitle(title1); - effReco_Theta[1][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxStsMuch"); - effReco_Theta[1][2]->SetTitle(title2); - effReco_Theta[2][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxStsMuchTrd"); - effReco_Theta[2][2]->SetTitle(title3); - effReco_Theta[3][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxStsMuchTrdTof"); - effReco_Theta[3][2]->SetTitle(title4); - - eff4pi_P[0][2] = (TProfile*) acc_P[0][0]->Clone("muMn_eff4piP_Vtx"); - eff4pi_P[0][2]->SetTitle(title0); - eff4pi_P[1][2] = (TProfile*) acc_P[0][0]->Clone("muMn_eff4piP_VtxSts"); - eff4pi_P[1][2]->SetTitle(title1); - eff4pi_P[2][2] = (TProfile*) acc_P[0][0]->Clone("muMn_eff4piP_VtxStsMuch"); - eff4pi_P[2][2]->SetTitle(title2); - eff4pi_P[3][2] = (TProfile*) acc_P[0][0]->Clone("muMn_eff4piP_VtxStsMuchTrd"); - eff4pi_P[3][2]->SetTitle(title3); - eff4pi_P[4][2] = - (TProfile*) acc_P[0][0]->Clone("muMn_eff4piP_VtxStsMuchTrdTof"); - eff4pi_P[4][2]->SetTitle(title4); - - eff4pi_Theta[0][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_eff4piTheta_Vtx"); - eff4pi_Theta[0][2]->SetTitle(title0); - eff4pi_Theta[1][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxSts"); - eff4pi_Theta[1][2]->SetTitle(title1); - eff4pi_Theta[2][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxStsMuch"); - eff4pi_Theta[2][2]->SetTitle(title2); - eff4pi_Theta[3][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxStsMuchTrd"); - eff4pi_Theta[3][2]->SetTitle(title3); - eff4pi_Theta[4][2] = - (TProfile*) acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxStsMuchTrdTof"); - eff4pi_Theta[4][2]->SetTitle(title4); - - BgSup[0] = new TH1D("h0", "all STS tracks", PBINNING); + + acc_P[0][2] = (TProfile*)acc_P[0][0]->Clone("muMn_accP_Sts"); acc_P[0][2]->SetTitle(title1); + acc_P[1][2] = (TProfile*)acc_P[0][0]->Clone("muMn_accP_StsMuch"); acc_P[1][2]->SetTitle(title2); + acc_P[2][2] = (TProfile*)acc_P[0][0]->Clone("muMn_accP_StsMuchTrd"); acc_P[2][2]->SetTitle(title3); + acc_P[3][2] = (TProfile*)acc_P[0][0]->Clone("muMn_accP_StsMuchTrdTof");acc_P[3][2]->SetTitle(title4); + + acc_Theta[0][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_accTheta_Sts"); acc_Theta[0][2]->SetTitle(title1); + acc_Theta[1][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_accTheta_StsMuch"); acc_Theta[1][2]->SetTitle(title2); + acc_Theta[2][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_accTheta_StsMuchTrd"); acc_Theta[2][2]->SetTitle(title3); + acc_Theta[3][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_accTheta_StsMuchTrdTof");acc_Theta[3][2]->SetTitle(title4); + + TString title0 = "reconstructed MC signal after primary vertex cut (PVC)"; // PVC: chi2 of STS track in target + title1 = "reconstructed MC signal after PVC and STS cuts (StsCs)"; // StsCs: chi2 of STS track and number of STS hits + title2 = "reconstructed MC signal after PVC+StsCs and MUCH cuts (MuchCs)"; // MuchCs: chi2 of MUCH track and number of MUCH hits + title3 = "reconstructed MC signal after PVC+StsCs+MuchCs and TRD cut (TrdC)"; // TrdC: number of TRD hits + title4 = "reconstructed MC signal after PVC+StsCs+MuchCs+TrdC and TOF cut"; // TOF: cut using mass distribution from time measurement + + effReco_P[0][0] = (TProfile*)acc_P[0][0]->Clone("signal_effRecoP_VtxSts"); effReco_P[0][0]->SetTitle(title1); + effReco_P[1][0] = (TProfile*)acc_P[0][0]->Clone("signal_effRecoP_VtxStsMuch"); effReco_P[1][0]->SetTitle(title2); + effReco_P[2][0] = (TProfile*)acc_P[0][0]->Clone("signal_effRecoP_VtxStsMuchTrd"); effReco_P[2][0]->SetTitle(title3); + effReco_P[3][0] = (TProfile*)acc_P[0][0]->Clone("signal_effRecoP_VtxStsMuchTrdTof");effReco_P[3][0]->SetTitle(title4); + + effReco_Theta[0][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxSts"); effReco_Theta[0][0]->SetTitle(title1); + effReco_Theta[1][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxStsMuch"); effReco_Theta[1][0]->SetTitle(title2); + effReco_Theta[2][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxStsMuchTrd"); effReco_Theta[2][0]->SetTitle(title3); + effReco_Theta[3][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_effRecoTheta_VtxStsMuchTrdTof");effReco_Theta[3][0]->SetTitle(title4); + + eff4pi_P[0][0] = (TProfile*)acc_P[0][0]->Clone("signal_eff4piP_Vtx"); eff4pi_P[0][0]->SetTitle(title0); + eff4pi_P[1][0] = (TProfile*)acc_P[0][0]->Clone("signal_eff4piP_VtxSts"); eff4pi_P[1][0]->SetTitle(title1); + eff4pi_P[2][0] = (TProfile*)acc_P[0][0]->Clone("signal_eff4piP_VtxStsMuch"); eff4pi_P[2][0]->SetTitle(title2); + eff4pi_P[3][0] = (TProfile*)acc_P[0][0]->Clone("signal_eff4piP_VtxStsMuchTrd"); eff4pi_P[3][0]->SetTitle(title3); + eff4pi_P[4][0] = (TProfile*)acc_P[0][0]->Clone("signal_eff4piP_VtxStsMuchTrdTof");eff4pi_P[4][0]->SetTitle(title4); + + eff4pi_Theta[0][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_eff4piTheta_Vtx"); eff4pi_Theta[0][0]->SetTitle(title0); + eff4pi_Theta[1][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxSts"); eff4pi_Theta[1][0]->SetTitle(title1); + eff4pi_Theta[2][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxStsMuch"); eff4pi_Theta[2][0]->SetTitle(title2); + eff4pi_Theta[3][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxStsMuchTrd"); eff4pi_Theta[3][0]->SetTitle(title3); + eff4pi_Theta[4][0] = (TProfile*)acc_Theta[0][0]->Clone("signal_eff4piTheta_VtxStsMuchTrdTof");eff4pi_Theta[4][0]->SetTitle(title4); + + YPt_VtxReco = (TH2D*)YPt_StsAcc->Clone("YPt_VtxReco"); YPt_VtxReco->SetTitle(title0); + YPt_VtxStsReco = (TH2D*)YPt_StsAcc->Clone("YPt_VtxStsReco"); YPt_VtxStsReco->SetTitle(title1); + YPt_VtxStsMuchReco = (TH2D*)YPt_StsAcc->Clone("YPt_VtxStsMuchReco"); YPt_VtxStsMuchReco->SetTitle(title2); + YPt_VtxStsMuchTrdReco = (TH2D*)YPt_StsAcc->Clone("YPt_VtxStsMuchTrdReco"); YPt_VtxStsMuchTrdReco->SetTitle(title3); + YPt_VtxStsMuchTrdTofReco= (TH2D*)YPt_StsAcc->Clone("YPt_VtxStsMuchTrdTofReco"); YPt_VtxStsMuchTrdTofReco->SetTitle(title4); + + title0 = "reconstructed MC #mu+ after primary vertex cut (PVC)"; + title1 = "reconstructed MC #mu+ after PVC and STS cuts (StsCs)"; + title2 = "reconstructed MC #mu+ after PVC+StsCs and MUCH cuts (MuchCs)"; + title3 = "reconstructed MC #mu+ after PVC+StsCs+MuchCs and TRD cut (TrdC)"; + title4 = "reconstructed MC #mu+ after PVC+StsCs+MuchCs+TrdC and TOF cut"; + + effReco_P[0][1] = (TProfile*)acc_P[0][0]->Clone("muPl_effRecoP_VtxSts"); effReco_P[0][1]->SetTitle(title1); + effReco_P[1][1] = (TProfile*)acc_P[0][0]->Clone("muPl_effRecoP_VtxStsMuch"); effReco_P[1][1]->SetTitle(title2); + effReco_P[2][1] = (TProfile*)acc_P[0][0]->Clone("muPl_effRecoP_VtxStsMuchTrd"); effReco_P[2][1]->SetTitle(title3); + effReco_P[3][1] = (TProfile*)acc_P[0][0]->Clone("muPl_effRecoP_VtxStsMuchTrdTof");effReco_P[3][1]->SetTitle(title4); + + effReco_Theta[0][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxSts"); effReco_Theta[0][1]->SetTitle(title1); + effReco_Theta[1][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxStsMuch"); effReco_Theta[1][1]->SetTitle(title2); + effReco_Theta[2][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxStsMuchTrd"); effReco_Theta[2][1]->SetTitle(title3); + effReco_Theta[3][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_effRecoTheta_VtxStsMuchTrdTof");effReco_Theta[3][1]->SetTitle(title4); + + eff4pi_P[0][1] = (TProfile*)acc_P[0][0]->Clone("muPl_eff4piP_Vtx"); eff4pi_P[0][1]->SetTitle(title0); + eff4pi_P[1][1] = (TProfile*)acc_P[0][0]->Clone("muPl_eff4piP_VtxSts"); eff4pi_P[1][1]->SetTitle(title1); + eff4pi_P[2][1] = (TProfile*)acc_P[0][0]->Clone("muPl_eff4piP_VtxStsMuch"); eff4pi_P[2][1]->SetTitle(title2); + eff4pi_P[3][1] = (TProfile*)acc_P[0][0]->Clone("muPl_eff4piP_VtxStsMuchTrd"); eff4pi_P[3][1]->SetTitle(title3); + eff4pi_P[4][1] = (TProfile*)acc_P[0][0]->Clone("muPl_eff4piP_VtxStsMuchTrdTof");eff4pi_P[4][1]->SetTitle(title4); + + eff4pi_Theta[0][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_eff4piTheta_Vtx"); eff4pi_Theta[0][1]->SetTitle(title0); + eff4pi_Theta[1][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxSts"); eff4pi_Theta[1][1]->SetTitle(title1); + eff4pi_Theta[2][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxStsMuch"); eff4pi_Theta[2][1]->SetTitle(title2); + eff4pi_Theta[3][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxStsMuchTrd"); eff4pi_Theta[3][1]->SetTitle(title3); + eff4pi_Theta[4][1] = (TProfile*)acc_Theta[0][0]->Clone("muPl_eff4piTheta_VtxStsMuchTrdTof");eff4pi_Theta[4][1]->SetTitle(title4); + + title0 = "reconstructed MC #mu- after primary vertex cut (PVC)"; + title1 = "reconstructed MC #mu- after PVC and STS cuts (StsCs)"; + title2 = "reconstructed MC #mu- after PVC+StsCs and MUCH cuts (MuchCs)"; + title3 = "reconstructed MC #mu- after PVC+StsCs+MuchCs and TRD cut (TrdC)"; + title4 = "reconstructed MC #mu- after PVC+StsCs+MuchCs+TrdC and TOF cut"; + + effReco_P[0][2] = (TProfile*)acc_P[0][0]->Clone("muMn_effRecoP_VtxSts"); effReco_P[0][2]->SetTitle(title1); + effReco_P[1][2] = (TProfile*)acc_P[0][0]->Clone("muMn_effRecoP_VtxStsMuch"); effReco_P[1][2]->SetTitle(title2); + effReco_P[2][2] = (TProfile*)acc_P[0][0]->Clone("muMn_effRecoP_VtxStsMuchTrd"); effReco_P[2][2]->SetTitle(title3); + effReco_P[3][2] = (TProfile*)acc_P[0][0]->Clone("muMn_effRecoP_VtxStsMuchTrdTof");effReco_P[3][2]->SetTitle(title4); + + effReco_Theta[0][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxSts"); effReco_Theta[0][2]->SetTitle(title1); + effReco_Theta[1][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxStsMuch"); effReco_Theta[1][2]->SetTitle(title2); + effReco_Theta[2][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxStsMuchTrd"); effReco_Theta[2][2]->SetTitle(title3); + effReco_Theta[3][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_effRecoTheta_VtxStsMuchTrdTof");effReco_Theta[3][2]->SetTitle(title4); + + eff4pi_P[0][2] = (TProfile*)acc_P[0][0]->Clone("muMn_eff4piP_Vtx"); eff4pi_P[0][2]->SetTitle(title0); + eff4pi_P[1][2] = (TProfile*)acc_P[0][0]->Clone("muMn_eff4piP_VtxSts"); eff4pi_P[1][2]->SetTitle(title1); + eff4pi_P[2][2] = (TProfile*)acc_P[0][0]->Clone("muMn_eff4piP_VtxStsMuch"); eff4pi_P[2][2]->SetTitle(title2); + eff4pi_P[3][2] = (TProfile*)acc_P[0][0]->Clone("muMn_eff4piP_VtxStsMuchTrd"); eff4pi_P[3][2]->SetTitle(title3); + eff4pi_P[4][2] = (TProfile*)acc_P[0][0]->Clone("muMn_eff4piP_VtxStsMuchTrdTof");eff4pi_P[4][2]->SetTitle(title4); + + eff4pi_Theta[0][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_eff4piTheta_Vtx"); eff4pi_Theta[0][2]->SetTitle(title0); + eff4pi_Theta[1][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxSts"); eff4pi_Theta[1][2]->SetTitle(title1); + eff4pi_Theta[2][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxStsMuch"); eff4pi_Theta[2][2]->SetTitle(title2); + eff4pi_Theta[3][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxStsMuchTrd"); eff4pi_Theta[3][2]->SetTitle(title3); + eff4pi_Theta[4][2] = (TProfile*)acc_Theta[0][0]->Clone("muMn_eff4piTheta_VtxStsMuchTrdTof");eff4pi_Theta[4][2]->SetTitle(title4); + + BgSup[0] = new TH1D("h0","all STS tracks",PBINNING); BgSup[0]->GetXaxis()->SetTitle("P (GeV/c)"); BgSup[0]->GetYaxis()->SetTitle("suppression"); - title0 = "reconstructed tracks after primary vertex cut (PVC)"; - title1 = "reconstructed tracks after PVC and STS cuts (StsCs)"; - title2 = "reconstructed tracks after PVC+StsCs and MUCH cuts (MuchCs)"; - title3 = "reconstructed tracks after PVC+StsCs+MuchCs and TRD cut (TrdC)"; - title4 = "reconstructed tracks after PVC+StsCs+MuchCs+TrdC and TOF cut"; - - BgSup[1] = (TH1D*) BgSup[0]->Clone("h1"); - BgSup[1]->SetTitle(title0); - BgSup[2] = (TH1D*) BgSup[0]->Clone("h2"); - BgSup[2]->SetTitle(title1); - BgSup[3] = (TH1D*) BgSup[0]->Clone("h3"); - BgSup[3]->SetTitle(title2); - BgSup[4] = (TH1D*) BgSup[0]->Clone("h4"); - BgSup[4]->SetTitle(title3); - BgSup[5] = (TH1D*) BgSup[0]->Clone("h5"); - BgSup[5]->SetTitle(title4); - - TString dir = getenv("VMCWORKDIR"); - TString name = dir + "/parameters/much/TOF8gev_fitParam_sigma" - + std::to_string(fSigmaTofCut) + "." + fSetupName + ".root"; - - TFile* FF = new TFile(name); - - TTree* MinParamMu = (TTree*) FF->Get("MinParam"); - MinParamMu->SetBranchAddress("p0", &p0min); - MinParamMu->SetBranchAddress("p1", &p1min); - MinParamMu->SetBranchAddress("p2", &p2min); - MinParamMu->GetEntry(0); + title0 = "reconstructed tracks after primary vertex cut (PVC)"; + title1 = "reconstructed tracks after PVC and STS cuts (StsCs)"; + title2 = "reconstructed tracks after PVC+StsCs and MUCH cuts (MuchCs)"; + title3 = "reconstructed tracks after PVC+StsCs+MuchCs and TRD cut (TrdC)"; + title4 = "reconstructed tracks after PVC+StsCs+MuchCs+TrdC and TOF cut"; + + BgSup[1] = (TH1D*)BgSup[0]->Clone("h1"); BgSup[1]->SetTitle(title0); + BgSup[2] = (TH1D*)BgSup[0]->Clone("h2"); BgSup[2]->SetTitle(title1); + BgSup[3] = (TH1D*)BgSup[0]->Clone("h3"); BgSup[3]->SetTitle(title2); + BgSup[4] = (TH1D*)BgSup[0]->Clone("h4"); BgSup[4]->SetTitle(title3); + BgSup[5] = (TH1D*)BgSup[0]->Clone("h5"); BgSup[5]->SetTitle(title4); + + TString dir = getenv("VMCWORKDIR"); + TString name= dir + "/parameters/much/TOF8gev_fitParam_sigma" + + std::to_string(fSigmaTofCut) + + "." + fSetupName + + ".root"; + + TFile *FF = new TFile(name); + + TTree *MinParamMu = (TTree*)FF->Get("MinParam"); + MinParamMu->SetBranchAddress("p0", &p0min); + MinParamMu->SetBranchAddress("p1", &p1min); + MinParamMu->SetBranchAddress("p2", &p2min); + MinParamMu->GetEntry(0); + + TTree *MaxParamMu = (TTree*)FF->Get("MaxParam"); + MaxParamMu->SetBranchAddress("p0", &p0max); + MaxParamMu->SetBranchAddress("p1", &p1max); + MaxParamMu->SetBranchAddress("p2", &p2max); + MaxParamMu->GetEntry(0); + + if(fNeurons>0)fFileAnnName = dir + "/parameters/much/muid_ann_" + + std::to_string(fNeurons)+ "_" + + + fSetupName + "_weights.txt"; + else fFileAnnName = dir + "/parameters/much/muid_ann_16_sis100_muon_lmvm_weights.txt"; + + FILE *file = fopen(fFileAnnName.Data(), "r"); + char buffer [100]; + + if(fgets(buffer, 100, file) == NULL){ + LOG(info) << "======================================================"; + LOG(info) << "The ANN weights file " << fFileAnnName << " does not exist"; + + fFileAnnName = dir + "/parameters/much/muid_ann_16_sis100_muon_lmvm_weights.txt"; + + LOG(info) << "The default ANN weights file " << fFileAnnName << " will be used"; + LOG(info) << "======================================================"; + fNeurons = 16; + } - TTree* MaxParamMu = (TTree*) FF->Get("MaxParam"); - MaxParamMu->SetBranchAddress("p0", &p0max); - MaxParamMu->SetBranchAddress("p1", &p1max); - MaxParamMu->SetBranchAddress("p2", &p2max); - MaxParamMu->GetEntry(0); + if(fAnnCut>0)fUseCuts=kFALSE; return kSUCCESS; } @@ -504,673 +397,717 @@ InitStatus CbmAnaDimuonAnalysis::Init() { // ----- Public method Exec -------------------------------------------- -void CbmAnaDimuonAnalysis::Exec(Option_t* /*opt*/) { - Int_t nMCTracks = fMCTracks->GetEntriesFast(); - Int_t nStsTracks = fStsTracks->GetEntriesFast(); - Int_t nMuchTracks = fMuchTracks->GetEntriesFast(); - Int_t nGlobalTracks = fGlobalTracks->GetEntriesFast(); - +void CbmAnaDimuonAnalysis::Exec(Option_t* /*opt*/){ + Int_t nMCTracks = fMCTracks->GetEntriesFast(); + Int_t nStsTracks = fStsTracks->GetEntriesFast(); + Int_t nMuchTracks = fMuchTracks->GetEntriesFast(); + Int_t nGlobalTracks = fGlobalTracks->GetEntriesFast(); + LOG(DEBUG) << "------------------------"; LOG(DEBUG) << GetName() << ": Event " << fEvent; - LOG(DEBUG) << "Number of tracks: MC - " << nMCTracks << ", global - " - << nGlobalTracks << ", STS - " << nStsTracks << ", MUCH - " - << nMuchTracks; + LOG(DEBUG) << "Number of tracks: MC - " << nMCTracks + << ", global - " << nGlobalTracks + << ", STS - " << nStsTracks + << ", MUCH - " << nMuchTracks; LOG(DEBUG) << "------------------------"; - + TLorentzVector pMC1, pMC2, M; - - struct CbmMuon { - Bool_t Mu; - Bool_t Nsts; - Bool_t Nmuch; - Bool_t Ntrd; - Bool_t Ntof; - Bool_t Chi2V; - Bool_t Chi2sts; - Bool_t Chi2much; - CbmMuon() - : Mu(kFALSE) - , Nsts(kFALSE) - , Nmuch(kFALSE) - , Ntrd(kFALSE) - , Ntof(kFALSE) - , Chi2V(kFALSE) - , Chi2sts(kFALSE) - , Chi2much(kFALSE) { - ; - } - }; - - struct CbmMuonMC { - Bool_t Mu; - Bool_t Nsts; - Bool_t Nmuch; - Bool_t Ntrd; - Bool_t Ntof; - CbmMuonMC() - : Mu(kFALSE), Nsts(kFALSE), Nmuch(kFALSE), Ntrd(kFALSE), Ntof(kFALSE) { - ; - } - }; - //----------------- Sort MC tracks for acceptance histograms + + struct CbmMuon{ + Bool_t Mu; + Bool_t Nsts; + Bool_t Nmuch; + Bool_t Ntrd; + Bool_t Ntof; + Bool_t Chi2V; + Bool_t Chi2sts; + Bool_t Chi2much; + CbmMuon() : Mu(kFALSE), Nsts(kFALSE), Nmuch(kFALSE), Ntrd(kFALSE), Ntof(kFALSE), + Chi2V(kFALSE), Chi2sts(kFALSE), Chi2much(kFALSE) {;} +}; + + struct CbmMuonMC{ + Bool_t Mu; + Bool_t Nsts; + Bool_t Nmuch; + Bool_t Ntrd; + Bool_t Ntof; + CbmMuonMC() : Mu(kFALSE), Nsts(kFALSE), Nmuch(kFALSE), Ntrd(kFALSE), Ntof(kFALSE) {;} +}; +//----------------- Sort MC tracks for acceptance histograms CbmMuon muPl_reco; CbmMuon muMn_reco; CbmMuon signal_reco; - + CbmMuonMC muPl_mc; CbmMuonMC muMn_mc; - CbmMuonMC signal_mc; - - for (Int_t iMCTrack = 0; iMCTrack < nMCTracks; iMCTrack++) { + CbmMuonMC signal_mc; + + for(Int_t iMCTrack=0;iMCTrack<nMCTracks;iMCTrack++){ CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTracks->At(iMCTrack); - if (mcTrack->GetGeantProcessId() != kPPrimary) continue; - if (TMath::Abs(mcTrack->GetPdgCode()) != 13) continue; - if (mcTrack->GetCharge() < 0) { - muMn_mc.Mu = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kSts) >= fNofStsCut) { - muMn_mc.Nsts = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kMuch) >= fNofMuchCut) { - muMn_mc.Nmuch = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kTrd) >= fNofTrdCut) { - muMn_mc.Ntrd = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kTof) >= 1) - muMn_mc.Ntof = kTRUE; - } - } - } - } else { - muPl_mc.Mu = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kSts) >= fNofStsCut) { - muPl_mc.Nsts = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kMuch) >= fNofMuchCut) { - muPl_mc.Nmuch = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kTrd) >= fNofTrdCut) { - muPl_mc.Ntrd = kTRUE; - if (mcTrack->GetNPoints(ECbmModuleId::kTof) >= 1) - muPl_mc.Ntof = kTRUE; - } - } + if(mcTrack->GetGeantProcessId()!=kPPrimary)continue; + if(TMath::Abs(mcTrack->GetPdgCode())!=13)continue; + if(mcTrack->GetCharge()<0){ + muMn_mc.Mu=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kSts)>=fNofStsCut){ + muMn_mc.Nsts=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kMuch)>=fNofMuchCut){ + muMn_mc.Nmuch=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kTrd)>=fNofTrdCut){ + muMn_mc.Ntrd=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kTof)>=1)muMn_mc.Ntof=kTRUE; + } + } } - } + }else{ + muPl_mc.Mu=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kSts)>=fNofStsCut){ + muPl_mc.Nsts=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kMuch)>=fNofMuchCut){ + muPl_mc.Nmuch=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kTrd)>=fNofTrdCut){ + muPl_mc.Ntrd=kTRUE; + if(mcTrack->GetNPoints(ECbmModuleId::kTof)>=1)muPl_mc.Ntof=kTRUE; + } + } + } + } } - if (muPl_mc.Mu && muMn_mc.Mu) signal_mc.Mu = kTRUE; - if (muPl_mc.Nsts && muMn_mc.Nsts) signal_mc.Nsts = kTRUE; - if (muPl_mc.Nmuch && muMn_mc.Nmuch) signal_mc.Nmuch = kTRUE; - if (muPl_mc.Ntrd && muMn_mc.Ntrd) signal_mc.Ntrd = kTRUE; - if (muPl_mc.Ntof && muMn_mc.Ntof) signal_mc.Ntof = kTRUE; - //----------------- + if(muPl_mc.Mu && muMn_mc.Mu) signal_mc.Mu=kTRUE; + if(muPl_mc.Nsts && muMn_mc.Nsts) signal_mc.Nsts=kTRUE; + if(muPl_mc.Nmuch && muMn_mc.Nmuch)signal_mc.Nmuch=kTRUE; + if(muPl_mc.Ntrd && muMn_mc.Ntrd) signal_mc.Ntrd=kTRUE; + if(muPl_mc.Ntof && muMn_mc.Ntof) signal_mc.Ntof=kTRUE; +//----------------- fMuPlus->Clear(); fMuMinus->Clear(); - - Int_t iMuPlus = 0; + + Int_t iMuPlus = 0; Int_t iMuMinus = 0; - - for (Int_t iTrack = 0; iTrack < nGlobalTracks; iTrack++) { - - Bool_t analysis = kFALSE; - - //----------------- Global track parameters - + + for (Int_t iTrack=0;iTrack<nGlobalTracks;iTrack++){ + + Bool_t analysis = kFALSE; + +//----------------- Global track parameters + CbmGlobalTrack* globalTrack = (CbmGlobalTrack*) fGlobalTracks->At(iTrack); - // Double_t chi2global = globalTrack->GetChi2()/globalTrack->GetNDF(); - +// Double_t chi2global = globalTrack->GetChi2()/globalTrack->GetNDF(); + Int_t iMuchTrack = globalTrack->GetMuchTrackIndex(); Int_t iStsTrack = globalTrack->GetStsTrackIndex(); Int_t iTrdTrack = globalTrack->GetTrdTrackIndex(); Int_t iTofHit = globalTrack->GetTofHitIndex(); + + if(iStsTrack<0) continue; - if (iStsTrack < 0) continue; - - //----------------- STS track parameters - +//----------------- STS track parameters + CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(iStsTrack); - if (!stsTrack) continue; - - Int_t nStsHits = stsTrack->GetNofHits(); + if(!stsTrack)continue; + + Int_t nStsHits = stsTrack->GetNofHits(); Double_t chi2vertex = fFitter->GetChiToVertex(stsTrack); - Double_t chi2sts = 1000; - if (stsTrack->GetNDF() != 0) - chi2sts = stsTrack->GetChiSq() / stsTrack->GetNDF(); - + Double_t chi2sts = 1000; + if(stsTrack->GetNDF()!=0)chi2sts=stsTrack->GetChiSq()/stsTrack->GetNDF(); + FairTrackParam par; TLorentzVector mom; TVector3 p; - - fFitter->Extrapolate(stsTrack, fVertex->GetZ(), &par); + + fFitter->Extrapolate(stsTrack,fVertex->GetZ(),&par); par.Momentum(p); - mom.SetVectM(p, fMass); - + mom.SetVectM(p,fMass); + Double_t momentum = mom.P(); - + BgSup[0]->Fill(momentum); - - Int_t q = par.GetQp() > 0 ? 1 : -1; - - //----------------- MUCH track parameters - - Int_t nMuchHits = 0; + + Int_t q = par.GetQp()>0 ? 1 : -1; + +//----------------- MUCH track parameters + + Int_t nMuchHits = 0; Double_t chi2much = 1000; - - if (iMuchTrack > -1) { + + if(iMuchTrack > -1){ CbmMuchTrack* muchTrack = (CbmMuchTrack*) fMuchTracks->At(iMuchTrack); - if (muchTrack) { + if(muchTrack){ nMuchHits = muchTrack->GetNofHits(); - if (muchTrack->GetNDF() != 0) - chi2much = muchTrack->GetChiSq() / muchTrack->GetNDF(); + if(muchTrack->GetNDF()!=0)chi2much=muchTrack->GetChiSq()/muchTrack->GetNDF(); } } - - //----------------- TRD track parameters - - Int_t nTrdHits = 0; - Double_t chi2trd = 1000; - - if (iTrdTrack > -1) { + +//----------------- TRD track parameters + + Int_t nTrdHits = 0; + Double_t chi2trd = 1000; + + if (iTrdTrack > -1){ CbmTrdTrack* trdTrack = (CbmTrdTrack*) fTrdTracks->At(iTrdTrack); - if (trdTrack) { - nTrdHits = trdTrack->GetNofHits(); - if (trdTrack->GetNDF() != 0) - chi2trd = - trdTrack->GetChiSq() / trdTrack->GetNDF(); // study of TRD chi2 ! + if(trdTrack){ + nTrdHits = trdTrack->GetNofHits(); + if(trdTrack->GetNDF()!=0)chi2trd=trdTrack->GetChiSq()/trdTrack->GetNDF(); // study of TRD chi2 ! } - } - - //----------------- TOF hit parameters - - Int_t nTofHits = 0; - Double_t mass = -1000; - - if (iTofHit > -1) { - CbmTofHit* th = (CbmTofHit*) fTofHit->At(iTofHit); - if (th) { - nTofHits = 1; - - Double_t time = th->GetTime(); - Double_t beta = - globalTrack->GetLength() * 0.01 / (time * 1e-9 * TMath::C()); - - TVector3 momL; - - FairTrackParam* stpl = (FairTrackParam*) globalTrack->GetParamLast(); - stpl->Momentum(momL); - - if (beta != 0) mass = momL.Mag() * momL.Mag() * (1. / beta / beta - 1.); + } + +//----------------- TOF hit parameters + + Int_t nTofHits = 0; + Double_t mass = -1000; + + if(iTofHit > -1){ + CbmTofHit* th = (CbmTofHit*)fTofHit->At(iTofHit); + if(th){ + nTofHits = 1; + + Double_t time = th->GetTime(); + Double_t beta = globalTrack->GetLength()*0.01/(time*1e-9*TMath::C()); + + TVector3 momL; + + FairTrackParam* stpl = (FairTrackParam*)globalTrack->GetParamLast(); + stpl->Momentum(momL); + + if(beta!=0)mass = momL.Mag()*momL.Mag()*(1./beta/beta-1.); } } - //----------------- STS MC matching - - Int_t isMu = 0; +//----------------- STS MC matching + + Int_t isMu = 0; Int_t stsPDG = 0; - - if (fUseMC) { - - CbmTrackMatchNew* stsMatch = - (CbmTrackMatchNew*) fStsTrackMatches->At(iStsTrack); - - if (stsMatch) { - if (stsMatch->GetNofLinks() != 0) { - int stsMcTrackId = stsMatch->GetMatchedLink().GetIndex(); - CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTracks->At(stsMcTrackId); - if (mcTrack) { - int pdg = TMath::Abs(mcTrack->GetPdgCode()); - stsPDG = pdg; - if (mcTrack->GetGeantProcessId() == kPPrimary && pdg == 13) { - isMu = 1; - if (mcTrack->GetCharge() < 0) { - muMn_reco.Mu = kTRUE; - - if (chi2vertex <= fChi2VertexCut) { - muMn_reco.Chi2V = kTRUE; - - if (nStsHits >= fNofStsCut && chi2sts <= fChi2StsCut) { - muMn_reco.Nsts = kTRUE; - - if (nMuchHits >= fNofMuchCut && chi2much <= fChi2MuchCut) { - muMn_reco.Nmuch = kTRUE; - - if (nTrdHits >= fNofTrdCut) { - muMn_reco.Ntrd = kTRUE; - - if (mass > (p0min + p1min * momentum - + p2min * momentum * momentum) - && mass < (p0max + p1max * momentum - + p2max * momentum * momentum)) - muMn_reco.Ntof = kTRUE; - } - } - } - } - } else { - muPl_reco.Mu = kTRUE; - if (chi2vertex <= fChi2VertexCut) { - muPl_reco.Chi2V = kTRUE; - - if (nStsHits >= fNofStsCut && chi2sts <= fChi2StsCut) { - muPl_reco.Nsts = kTRUE; - - if (nMuchHits >= fNofMuchCut && chi2much <= fChi2MuchCut) { - muPl_reco.Nmuch = kTRUE; - - if (nTrdHits >= fNofTrdCut) { - muPl_reco.Ntrd = kTRUE; - - if (mass > (p0min + p1min * momentum - + p2min * momentum * momentum) - && mass < (p0max + p1max * momentum - + p2max * momentum * momentum)) - muPl_reco.Ntof = kTRUE; - } - } - } - } - } - } - } - } + + if(fUseMC){ + + CbmTrackMatchNew* stsMatch = (CbmTrackMatchNew*) fStsTrackMatches->At(iStsTrack); + + if(stsMatch){ + if (stsMatch->GetNofLinks() != 0){ + int stsMcTrackId = stsMatch->GetMatchedLink().GetIndex(); + CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTracks->At(stsMcTrackId); + if(mcTrack){ + int pdg = TMath::Abs(mcTrack->GetPdgCode()); + stsPDG = pdg; + if(mcTrack->GetGeantProcessId()==kPPrimary && pdg==13){ + isMu=1; + if(mcTrack->GetCharge()<0){ + muMn_reco.Mu=kTRUE; + + if(chi2vertex<=fChi2VertexCut){ + muMn_reco.Chi2V=kTRUE; + + if(nStsHits>=fNofStsCut && chi2sts<=fChi2StsCut){ + muMn_reco.Nsts=kTRUE; + + if(nMuchHits>=fNofMuchCut && chi2much<=fChi2MuchCut){ + muMn_reco.Nmuch=kTRUE; + + if(nTrdHits>=fNofTrdCut){ + muMn_reco.Ntrd=kTRUE; + + if(mass > (p0min+p1min*momentum+p2min*momentum*momentum) && + mass < (p0max+p1max*momentum+p2max*momentum*momentum) && fAnnCut < 0)muMn_reco.Ntof=kTRUE; + } + } + } + } + }else{ + muPl_reco.Mu=kTRUE; + if(chi2vertex<=fChi2VertexCut){ + muPl_reco.Chi2V=kTRUE; + + if(nStsHits>=fNofStsCut && chi2sts<=fChi2StsCut){ + muPl_reco.Nsts=kTRUE; + + if(nMuchHits>=fNofMuchCut && chi2much<=fChi2MuchCut){ + muPl_reco.Nmuch=kTRUE; + + if(nTrdHits>=fNofTrdCut){ + muPl_reco.Ntrd=kTRUE; + + if(mass > (p0min+p1min*momentum+p2min*momentum*momentum) && + mass < (p0max+p1max*momentum+p2max*momentum*momentum) && fAnnCut < 0)muPl_reco.Ntof=kTRUE; + } + } + } + } + } + } } } - if (muPl_reco.Mu && muMn_reco.Mu) signal_reco.Mu = kTRUE; - if (muPl_reco.Chi2V && muMn_reco.Chi2V) signal_reco.Chi2V = kTRUE; - if (muPl_reco.Nsts && muMn_reco.Nsts) signal_reco.Nsts = kTRUE; - if (muPl_reco.Nmuch && muMn_reco.Nmuch) signal_reco.Nmuch = kTRUE; - if (muPl_reco.Ntrd && muMn_reco.Ntrd) signal_reco.Ntrd = kTRUE; - if (muPl_reco.Ntof && muMn_reco.Ntof) signal_reco.Ntof = kTRUE; - - if (chi2vertex <= fChi2VertexCut) { - BgSup[1]->Fill(momentum); - - if (nStsHits >= fNofStsCut && chi2sts <= fChi2StsCut) { - BgSup[2]->Fill(momentum); - - if (nMuchHits >= fNofMuchCut && chi2much <= fChi2MuchCut) { - BgSup[3]->Fill(momentum); - - if (nTrdHits >= fNofTrdCut) { - BgSup[4]->Fill(momentum); - - if (mass > (p0min + p1min * momentum + p2min * momentum * momentum) - && mass - < (p0max + p1max * momentum + p2max * momentum * momentum)) - BgSup[5]->Fill(momentum); - } - } + } + } + if(muPl_reco.Mu && muMn_reco.Mu) signal_reco.Mu=kTRUE; + if(muPl_reco.Chi2V && muMn_reco.Chi2V) signal_reco.Chi2V=kTRUE; + if(muPl_reco.Nsts && muMn_reco.Nsts) signal_reco.Nsts=kTRUE; + if(muPl_reco.Nmuch && muMn_reco.Nmuch) signal_reco.Nmuch=kTRUE; + if(muPl_reco.Ntrd && muMn_reco.Ntrd) signal_reco.Ntrd=kTRUE; + if(muPl_reco.Ntof && muMn_reco.Ntof && fAnnCut < 0) signal_reco.Ntof=kTRUE; + + if(chi2vertex<=fChi2VertexCut){ + BgSup[1]->Fill(momentum); + + if(nStsHits>=fNofStsCut && chi2sts<=fChi2StsCut){ + BgSup[2]->Fill(momentum); + + if(nMuchHits>=fNofMuchCut && chi2much<=fChi2MuchCut){ + BgSup[3]->Fill(momentum); + + if(nTrdHits>=fNofTrdCut){ + BgSup[4]->Fill(momentum); + + if(mass > (p0min+p1min*momentum+p2min*momentum*momentum) && + mass < (p0max+p1max*momentum+p2max*momentum*momentum)&& + fAnnCut < 0)BgSup[5]->Fill(momentum); + } + } + } + } + +//----------------- Muon track candidates + Double_t id = -1; + + if(!fUseCuts && fAnnCut < 0)analysis=kTRUE; + else if(fUseCuts) + { + if(nStsHits >= fNofStsCut && + nMuchHits >= fNofMuchCut && + nTrdHits >= fNofTrdCut && + nTofHits >= 1 && + chi2vertex <= fChi2VertexCut && + chi2sts <= fChi2StsCut && + chi2much <= fChi2MuchCut && + (mass > (p0min+p1min*momentum+p2min*momentum*momentum) && + mass < (p0max+p1max*momentum+p2max*momentum*momentum))) + analysis=kTRUE; + }else if(!fUseCuts && fAnnCut > 0) { + id = CalculateAnnValue(mom.P(), mass, chi2vertex, chi2sts, chi2much, chi2trd, nStsHits, nMuchHits, nTrdHits, nTofHits); + if(id > fAnnCut){ + analysis=kTRUE; + BgSup[5]->Fill(momentum); + if(isMu==1 && q>0)muPl_reco.Ntof=kTRUE; + else if(isMu==1 && q<0)muMn_reco.Ntof=kTRUE; + if(muPl_reco.Ntof && muMn_reco.Ntof)signal_reco.Ntof=kTRUE; } } - - //----------------- Muon track candidates - - if (!fUseCuts) - analysis = kTRUE; - else { - if (nStsHits >= fNofStsCut && nMuchHits >= fNofMuchCut - && nTrdHits >= fNofTrdCut && nTofHits >= 1 - && chi2vertex <= fChi2VertexCut && chi2sts <= fChi2StsCut - && chi2much <= fChi2MuchCut - && (mass > (p0min + p1min * momentum + p2min * momentum * momentum) - && mass - < (p0max + p1max * momentum + p2max * momentum * momentum))) - analysis = kTRUE; - } - - if (!analysis) continue; - - CbmAnaMuonCandidate* mu; - if (q > 0) { - new ((*fMuPlus)[iMuPlus++]) CbmAnaMuonCandidate(); - mu = (CbmAnaMuonCandidate*) (*fMuPlus)[iMuPlus - 1]; - } else { - new ((*fMuMinus)[iMuMinus++]) CbmAnaMuonCandidate(); - mu = (CbmAnaMuonCandidate*) (*fMuMinus)[iMuMinus - 1]; - } - - mu->SetNStsHits(nStsHits); - mu->SetNMuchHits(nMuchHits); - mu->SetNTrdHits(nTrdHits); - mu->SetNTofHits(nTofHits); - - mu->SetChiToVertex(chi2vertex); - mu->SetChiSts(chi2sts); - mu->SetChiMuch(chi2much); - mu->SetChiTrd(chi2trd); - - mu->SetTrueMu(isMu); - mu->SetStsPdg(stsPDG); - mu->SetTofM(mass); - mu->SetSign(q); - mu->SetMomentum(mom); - } - - //----------------- Fill YPtM spectrum + + if(!analysis)continue; + + CbmAnaMuonCandidate* mu; + if(q>0) + { + new((*fMuPlus)[iMuPlus++]) CbmAnaMuonCandidate(); + mu = (CbmAnaMuonCandidate*) (*fMuPlus)[iMuPlus-1]; + } + else + { + new((*fMuMinus)[iMuMinus++]) CbmAnaMuonCandidate(); + mu = (CbmAnaMuonCandidate*) (*fMuMinus)[iMuMinus-1]; + } + + mu->SetNStsHits(nStsHits); + mu->SetNMuchHits(nMuchHits); + mu->SetNTrdHits(nTrdHits); + mu->SetNTofHits(nTofHits); + + mu->SetChiToVertex(chi2vertex); + mu->SetChiSts(chi2sts); + mu->SetChiMuch(chi2much); + mu->SetChiTrd(chi2trd); + + mu->SetTrueMu(isMu); + mu->SetStsPdg(stsPDG); + mu->SetTofM(mass); + mu->SetSign(q); + mu->SetMomentum(mom); + + if(!fUseCuts && fAnnCut < 0)id = CalculateAnnValue(mu); + mu->SetAnnId(id); + } + +//----------------- Fill YPtM spectrum int NofPlus = fMuPlus->GetEntriesFast(); int NofMinus = fMuMinus->GetEntriesFast(); - for (int iPart = 0; iPart < NofPlus; iPart++) { - CbmAnaMuonCandidate* mu_pl = (CbmAnaMuonCandidate*) fMuPlus->At(iPart); - TLorentzVector* P_pl = mu_pl->GetMomentum(); - for (int jPart = 0; jPart < NofMinus; jPart++) { - CbmAnaMuonCandidate* mu_mn = (CbmAnaMuonCandidate*) fMuMinus->At(jPart); - TLorentzVector* P_mn = mu_mn->GetMomentum(); - M = *P_pl + *P_mn; - YPtM->Fill(M.Rapidity(), M.Pt(), M.M()); + for (int iPart=0; iPart<NofPlus; iPart++){ + CbmAnaMuonCandidate *mu_pl = (CbmAnaMuonCandidate*)fMuPlus->At(iPart); + TLorentzVector *P_pl = mu_pl->GetMomentum(); + for (int jPart=0; jPart<NofMinus; jPart++){ + CbmAnaMuonCandidate *mu_mn = (CbmAnaMuonCandidate*)fMuMinus->At(jPart); + TLorentzVector *P_mn = mu_mn->GetMomentum(); + M = *P_pl + *P_mn; + YPtM->Fill(M.Rapidity(),M.Pt(),M.M()); } } - //----------------- Fill acceptance and efficiency spectra for MC signal muons and signal signal - //----------------- Fill YPt spectra for signal signal - - if (fPlutoFileName != "") { +//----------------- Fill acceptance and efficiency spectra for MC signal muons and signal signal +//----------------- Fill YPt spectra for signal signal + + if(fPlutoFileName != ""){ fInputTree->GetEntry(fEvent); - Int_t NofPart = fParticles->GetEntriesFast(); - PParticle* Part1 = (PParticle*) fParticles->At(NofPart - 1); - PParticle* Part2 = (PParticle*) fParticles->At(NofPart - 2); + Int_t NofPart = fParticles->GetEntriesFast(); + PParticle* Part1 = (PParticle*) fParticles->At(NofPart-1); + PParticle* Part2 = (PParticle*) fParticles->At(NofPart-2); TLorentzVector mom1 = Part1->Vect4(); TLorentzVector mom2 = Part2->Vect4(); - - if (muPl_mc.Mu) { - FillProfile(acc_P[0][1], mom2.P(), muPl_mc.Nsts); - FillProfile(acc_P[1][1], mom2.P(), muPl_mc.Nmuch); - FillProfile(acc_P[2][1], mom2.P(), muPl_mc.Ntrd); - FillProfile(acc_P[3][1], mom2.P(), muPl_mc.Ntof); - FillProfile( - acc_Theta[0][1], mom2.Theta() * TMath::RadToDeg(), muPl_mc.Nsts); - FillProfile( - acc_Theta[1][1], mom2.Theta() * TMath::RadToDeg(), muPl_mc.Nmuch); - FillProfile( - acc_Theta[2][1], mom2.Theta() * TMath::RadToDeg(), muPl_mc.Ntrd); - FillProfile( - acc_Theta[3][1], mom2.Theta() * TMath::RadToDeg(), muPl_mc.Ntof); - if (muPl_mc.Nsts) { - FillProfile(effReco_P[0][1], mom2.P(), muPl_reco.Nsts); - FillProfile(effReco_Theta[0][1], - mom2.Theta() * TMath::RadToDeg(), - muPl_reco.Nsts); - } - if (muPl_mc.Nmuch) { - FillProfile(effReco_P[1][1], mom2.P(), muPl_reco.Nmuch); - FillProfile(effReco_Theta[1][1], - mom2.Theta() * TMath::RadToDeg(), - muPl_reco.Nmuch); - } - if (muPl_mc.Ntrd) { - FillProfile(effReco_P[2][1], mom2.P(), muPl_reco.Ntrd); - FillProfile(effReco_Theta[2][1], - mom2.Theta() * TMath::RadToDeg(), - muPl_reco.Ntrd); - } - if (muPl_mc.Ntof) { - FillProfile(effReco_P[3][1], mom2.P(), muPl_reco.Ntof); - FillProfile(effReco_Theta[3][1], - mom2.Theta() * TMath::RadToDeg(), - muPl_reco.Ntof); - } + + if(muPl_mc.Mu){ + FillProfile(acc_P[0][1],mom2.P(),muPl_mc.Nsts); + FillProfile(acc_P[1][1],mom2.P(),muPl_mc.Nmuch); + FillProfile(acc_P[2][1],mom2.P(),muPl_mc.Ntrd); + FillProfile(acc_P[3][1],mom2.P(),muPl_mc.Ntof); + FillProfile(acc_Theta[0][1],mom2.Theta()*TMath::RadToDeg(),muPl_mc.Nsts); + FillProfile(acc_Theta[1][1],mom2.Theta()*TMath::RadToDeg(),muPl_mc.Nmuch); + FillProfile(acc_Theta[2][1],mom2.Theta()*TMath::RadToDeg(),muPl_mc.Ntrd); + FillProfile(acc_Theta[3][1],mom2.Theta()*TMath::RadToDeg(),muPl_mc.Ntof); + if(muPl_mc.Nsts) {FillProfile(effReco_P[0][1],mom2.P(),muPl_reco.Nsts); FillProfile(effReco_Theta[0][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Nsts);} + if(muPl_mc.Nmuch){FillProfile(effReco_P[1][1],mom2.P(),muPl_reco.Nmuch);FillProfile(effReco_Theta[1][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Nmuch);} + if(muPl_mc.Ntrd) {FillProfile(effReco_P[2][1],mom2.P(),muPl_reco.Ntrd); FillProfile(effReco_Theta[2][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Ntrd);} + if(muPl_mc.Ntof) {FillProfile(effReco_P[3][1],mom2.P(),muPl_reco.Ntof); FillProfile(effReco_Theta[3][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Ntof);} } - - if (muPl_reco.Mu) { - FillProfile(eff4pi_P[0][1], mom2.P(), muPl_reco.Chi2V); - FillProfile(eff4pi_P[1][1], mom2.P(), muPl_reco.Nsts); - FillProfile(eff4pi_P[2][1], mom2.P(), muPl_reco.Nmuch); - FillProfile(eff4pi_P[3][1], mom2.P(), muPl_reco.Ntrd); - FillProfile(eff4pi_P[4][1], mom2.P(), muPl_reco.Ntof); - FillProfile( - eff4pi_Theta[0][1], mom2.Theta() * TMath::RadToDeg(), muPl_reco.Chi2V); - FillProfile( - eff4pi_Theta[1][1], mom2.Theta() * TMath::RadToDeg(), muPl_reco.Nsts); - FillProfile( - eff4pi_Theta[2][1], mom2.Theta() * TMath::RadToDeg(), muPl_reco.Nmuch); - FillProfile( - eff4pi_Theta[3][1], mom2.Theta() * TMath::RadToDeg(), muPl_reco.Ntrd); - FillProfile( - eff4pi_Theta[4][1], mom2.Theta() * TMath::RadToDeg(), muPl_reco.Ntof); + + if(muPl_reco.Mu){ + FillProfile(eff4pi_P[0][1],mom2.P(),muPl_reco.Chi2V); + FillProfile(eff4pi_P[1][1],mom2.P(),muPl_reco.Nsts); + FillProfile(eff4pi_P[2][1],mom2.P(),muPl_reco.Nmuch); + FillProfile(eff4pi_P[3][1],mom2.P(),muPl_reco.Ntrd); + FillProfile(eff4pi_P[4][1],mom2.P(),muPl_reco.Ntof); + FillProfile(eff4pi_Theta[0][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Chi2V); + FillProfile(eff4pi_Theta[1][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Nsts); + FillProfile(eff4pi_Theta[2][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Nmuch); + FillProfile(eff4pi_Theta[3][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Ntrd); + FillProfile(eff4pi_Theta[4][1],mom2.Theta()*TMath::RadToDeg(),muPl_reco.Ntof); } - - if (muMn_mc.Mu) { - FillProfile(acc_P[0][2], mom1.P(), muMn_mc.Nsts); - FillProfile(acc_P[1][2], mom1.P(), muMn_mc.Nmuch); - FillProfile(acc_P[2][2], mom1.P(), muMn_mc.Ntrd); - FillProfile(acc_P[3][2], mom1.P(), muMn_mc.Ntof); - FillProfile( - acc_Theta[0][2], mom1.Theta() * TMath::RadToDeg(), muMn_mc.Nsts); - FillProfile( - acc_Theta[1][2], mom1.Theta() * TMath::RadToDeg(), muMn_mc.Nmuch); - FillProfile( - acc_Theta[2][2], mom1.Theta() * TMath::RadToDeg(), muMn_mc.Ntrd); - FillProfile( - acc_Theta[3][2], mom1.Theta() * TMath::RadToDeg(), muMn_mc.Ntof); - if (muMn_mc.Nsts) { - FillProfile(effReco_P[0][2], mom1.P(), muMn_reco.Nsts); - FillProfile(effReco_Theta[0][2], - mom1.Theta() * TMath::RadToDeg(), - muMn_reco.Nsts); + + if(muMn_mc.Mu){ + FillProfile(acc_P[0][2],mom1.P(),muMn_mc.Nsts); + FillProfile(acc_P[1][2],mom1.P(),muMn_mc.Nmuch); + FillProfile(acc_P[2][2],mom1.P(),muMn_mc.Ntrd); + FillProfile(acc_P[3][2],mom1.P(),muMn_mc.Ntof); + FillProfile(acc_Theta[0][2],mom1.Theta()*TMath::RadToDeg(),muMn_mc.Nsts); + FillProfile(acc_Theta[1][2],mom1.Theta()*TMath::RadToDeg(),muMn_mc.Nmuch); + FillProfile(acc_Theta[2][2],mom1.Theta()*TMath::RadToDeg(),muMn_mc.Ntrd); + FillProfile(acc_Theta[3][2],mom1.Theta()*TMath::RadToDeg(),muMn_mc.Ntof); + if(muMn_mc.Nsts) {FillProfile(effReco_P[0][2],mom1.P(),muMn_reco.Nsts); FillProfile(effReco_Theta[0][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Nsts);} + if(muMn_mc.Nmuch){FillProfile(effReco_P[1][2],mom1.P(),muMn_reco.Nmuch);FillProfile(effReco_Theta[1][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Nmuch);} + if(muMn_mc.Ntrd) {FillProfile(effReco_P[2][2],mom1.P(),muMn_reco.Ntrd); FillProfile(effReco_Theta[2][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Ntrd);} + if(muMn_mc.Ntof) {FillProfile(effReco_P[3][2],mom1.P(),muMn_reco.Ntof); FillProfile(effReco_Theta[3][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Ntof);} + } + + if(muMn_reco.Mu){ + FillProfile(eff4pi_P[0][2],mom1.P(),muMn_reco.Chi2V); + FillProfile(eff4pi_P[1][2],mom1.P(),muMn_reco.Nsts); + FillProfile(eff4pi_P[2][2],mom1.P(),muMn_reco.Nmuch); + FillProfile(eff4pi_P[3][2],mom1.P(),muMn_reco.Ntrd); + FillProfile(eff4pi_P[4][2],mom1.P(),muMn_reco.Ntof); + FillProfile(eff4pi_Theta[0][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Chi2V); + FillProfile(eff4pi_Theta[1][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Nsts); + FillProfile(eff4pi_Theta[2][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Nmuch); + FillProfile(eff4pi_Theta[3][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Ntrd); + FillProfile(eff4pi_Theta[4][2],mom1.Theta()*TMath::RadToDeg(),muMn_reco.Ntof); + } + + TLorentzVector Mom = mom1 + mom2; + if(signal_mc.Mu){ + FillProfile(acc_P[0][0],Mom.P(),signal_mc.Nsts); + FillProfile(acc_P[1][0],Mom.P(),signal_mc.Nmuch); + FillProfile(acc_P[2][0],Mom.P(),signal_mc.Ntrd); + FillProfile(acc_P[3][0],Mom.P(),signal_mc.Ntof); + FillProfile(acc_Theta[0][0],Mom.Theta()*TMath::RadToDeg(),signal_mc.Nsts); + FillProfile(acc_Theta[1][0],Mom.Theta()*TMath::RadToDeg(),signal_mc.Nmuch); + FillProfile(acc_Theta[2][0],Mom.Theta()*TMath::RadToDeg(),signal_mc.Ntrd); + FillProfile(acc_Theta[3][0],Mom.Theta()*TMath::RadToDeg(),signal_mc.Ntof); + if(signal_mc.Nsts){ + FillProfile(effReco_P[0][0],Mom.P(),signal_reco.Nsts); FillProfile(effReco_Theta[0][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Nsts); + YPt_StsAcc->Fill(Mom.Rapidity(),Mom.Pt()); } - if (muMn_mc.Nmuch) { - FillProfile(effReco_P[1][2], mom1.P(), muMn_reco.Nmuch); - FillProfile(effReco_Theta[1][2], - mom1.Theta() * TMath::RadToDeg(), - muMn_reco.Nmuch); + if(signal_mc.Nmuch){ + FillProfile(effReco_P[1][0],Mom.P(),signal_reco.Nmuch);FillProfile(effReco_Theta[1][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Nmuch); + YPt_StsMuchAcc->Fill(Mom.Rapidity(),Mom.Pt()); } - if (muMn_mc.Ntrd) { - FillProfile(effReco_P[2][2], mom1.P(), muMn_reco.Ntrd); - FillProfile(effReco_Theta[2][2], - mom1.Theta() * TMath::RadToDeg(), - muMn_reco.Ntrd); - } - if (muMn_mc.Ntof) { - FillProfile(effReco_P[3][2], mom1.P(), muMn_reco.Ntof); - FillProfile(effReco_Theta[3][2], - mom1.Theta() * TMath::RadToDeg(), - muMn_reco.Ntof); + if(signal_mc.Ntrd){ + FillProfile(effReco_P[2][0],Mom.P(),signal_reco.Ntrd); FillProfile(effReco_Theta[2][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Ntrd); + YPt_StsMuchTrdAcc->Fill(Mom.Rapidity(),Mom.Pt()); } + if(signal_mc.Ntof){ + FillProfile(effReco_P[3][0],Mom.P(),signal_reco.Ntof); FillProfile(effReco_Theta[3][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Ntof); + YPt_StsMuchTrdTofAcc->Fill(Mom.Rapidity(),Mom.Pt()); + } } - - if (muMn_reco.Mu) { - FillProfile(eff4pi_P[0][2], mom1.P(), muMn_reco.Chi2V); - FillProfile(eff4pi_P[1][2], mom1.P(), muMn_reco.Nsts); - FillProfile(eff4pi_P[2][2], mom1.P(), muMn_reco.Nmuch); - FillProfile(eff4pi_P[3][2], mom1.P(), muMn_reco.Ntrd); - FillProfile(eff4pi_P[4][2], mom1.P(), muMn_reco.Ntof); - FillProfile( - eff4pi_Theta[0][2], mom1.Theta() * TMath::RadToDeg(), muMn_reco.Chi2V); - FillProfile( - eff4pi_Theta[1][2], mom1.Theta() * TMath::RadToDeg(), muMn_reco.Nsts); - FillProfile( - eff4pi_Theta[2][2], mom1.Theta() * TMath::RadToDeg(), muMn_reco.Nmuch); - FillProfile( - eff4pi_Theta[3][2], mom1.Theta() * TMath::RadToDeg(), muMn_reco.Ntrd); - FillProfile( - eff4pi_Theta[4][2], mom1.Theta() * TMath::RadToDeg(), muMn_reco.Ntof); + if(signal_reco.Mu){ + if(signal_reco.Chi2V)YPt_VtxReco->Fill(Mom.Rapidity(),Mom.Pt()); + if(signal_reco.Nsts) YPt_VtxStsReco->Fill(Mom.Rapidity(),Mom.Pt()); + if(signal_reco.Nmuch)YPt_VtxStsMuchReco->Fill(Mom.Rapidity(),Mom.Pt()); + if(signal_reco.Ntrd) YPt_VtxStsMuchTrdReco->Fill(Mom.Rapidity(),Mom.Pt()); + if(signal_reco.Ntof) YPt_VtxStsMuchTrdTofReco->Fill(Mom.Rapidity(),Mom.Pt()); } - - TLorentzVector Mom = mom1 + mom2; - if (signal_mc.Mu) { - FillProfile(acc_P[0][0], Mom.P(), signal_mc.Nsts); - FillProfile(acc_P[1][0], Mom.P(), signal_mc.Nmuch); - FillProfile(acc_P[2][0], Mom.P(), signal_mc.Ntrd); - FillProfile(acc_P[3][0], Mom.P(), signal_mc.Ntof); - FillProfile( - acc_Theta[0][0], Mom.Theta() * TMath::RadToDeg(), signal_mc.Nsts); - FillProfile( - acc_Theta[1][0], Mom.Theta() * TMath::RadToDeg(), signal_mc.Nmuch); - FillProfile( - acc_Theta[2][0], Mom.Theta() * TMath::RadToDeg(), signal_mc.Ntrd); - FillProfile( - acc_Theta[3][0], Mom.Theta() * TMath::RadToDeg(), signal_mc.Ntof); - if (signal_mc.Nsts) { - FillProfile(effReco_P[0][0], Mom.P(), signal_reco.Nsts); - FillProfile(effReco_Theta[0][0], - Mom.Theta() * TMath::RadToDeg(), - signal_reco.Nsts); - YPt_StsAcc->Fill(Mom.Rapidity(), Mom.Pt()); - } - if (signal_mc.Nmuch) { - FillProfile(effReco_P[1][0], Mom.P(), signal_reco.Nmuch); - FillProfile(effReco_Theta[1][0], - Mom.Theta() * TMath::RadToDeg(), - signal_reco.Nmuch); - YPt_StsMuchAcc->Fill(Mom.Rapidity(), Mom.Pt()); - } - if (signal_mc.Ntrd) { - FillProfile(effReco_P[2][0], Mom.P(), signal_reco.Ntrd); - FillProfile(effReco_Theta[2][0], - Mom.Theta() * TMath::RadToDeg(), - signal_reco.Ntrd); - YPt_StsMuchTrdAcc->Fill(Mom.Rapidity(), Mom.Pt()); - } - if (signal_mc.Ntof) { - FillProfile(effReco_P[3][0], Mom.P(), signal_reco.Ntof); - FillProfile(effReco_Theta[3][0], - Mom.Theta() * TMath::RadToDeg(), - signal_reco.Ntof); - YPt_StsMuchTrdTofAcc->Fill(Mom.Rapidity(), Mom.Pt()); - } - } - if (signal_reco.Mu) { - if (signal_reco.Chi2V) YPt_VtxReco->Fill(Mom.Rapidity(), Mom.Pt()); - if (signal_reco.Nsts) YPt_VtxStsReco->Fill(Mom.Rapidity(), Mom.Pt()); - if (signal_reco.Nmuch) YPt_VtxStsMuchReco->Fill(Mom.Rapidity(), Mom.Pt()); - if (signal_reco.Ntrd) - YPt_VtxStsMuchTrdReco->Fill(Mom.Rapidity(), Mom.Pt()); - if (signal_reco.Ntof) - YPt_VtxStsMuchTrdTofReco->Fill(Mom.Rapidity(), Mom.Pt()); - } - FillProfile(eff4pi_P[0][0], Mom.P(), signal_reco.Chi2V); - FillProfile(eff4pi_P[1][0], Mom.P(), signal_reco.Nsts); - FillProfile(eff4pi_P[2][0], Mom.P(), signal_reco.Nmuch); - FillProfile(eff4pi_P[3][0], Mom.P(), signal_reco.Ntrd); - FillProfile(eff4pi_P[4][0], Mom.P(), signal_reco.Ntof); - FillProfile( - eff4pi_Theta[0][0], Mom.Theta() * TMath::RadToDeg(), signal_reco.Chi2V); - FillProfile( - eff4pi_Theta[1][0], Mom.Theta() * TMath::RadToDeg(), signal_reco.Nsts); - FillProfile( - eff4pi_Theta[2][0], Mom.Theta() * TMath::RadToDeg(), signal_reco.Nmuch); - FillProfile( - eff4pi_Theta[3][0], Mom.Theta() * TMath::RadToDeg(), signal_reco.Ntrd); - FillProfile( - eff4pi_Theta[4][0], Mom.Theta() * TMath::RadToDeg(), signal_reco.Ntof); + FillProfile(eff4pi_P[0][0],Mom.P(),signal_reco.Chi2V); + FillProfile(eff4pi_P[1][0],Mom.P(),signal_reco.Nsts); + FillProfile(eff4pi_P[2][0],Mom.P(),signal_reco.Nmuch); + FillProfile(eff4pi_P[3][0],Mom.P(),signal_reco.Ntrd); + FillProfile(eff4pi_P[4][0],Mom.P(),signal_reco.Ntof); + FillProfile(eff4pi_Theta[0][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Chi2V); + FillProfile(eff4pi_Theta[1][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Nsts); + FillProfile(eff4pi_Theta[2][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Nmuch); + FillProfile(eff4pi_Theta[3][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Ntrd); + FillProfile(eff4pi_Theta[4][0],Mom.Theta()*TMath::RadToDeg(),signal_reco.Ntof); } fEvent++; } // ------------------------------------------------------------------------- -void CbmAnaDimuonAnalysis::FillProfile(TProfile* profile, - Double_t param, - Bool_t trigger) { - if (trigger) - profile->Fill(param, 100); - else - profile->Fill(param, 0); +// used default ANN (16 neurons) weights generated for 8 GeV/c Au beam (UrQMD) and omega->µµ (PLUTO) +// sis100_muon_lmvm setup +// +Double_t CbmAnaDimuonAnalysis::CalculateAnnValue(CbmAnaMuonCandidate* mu){ + + Double_t ID = -1; + Double_t Chi2Vertex, Chi2STS, Chi2MUCH, Chi2TRD; + Int_t NofSTS, NofMUCH, NofTRD, NofTOF, type; + Double_t P, M; + TLorentzVector *PP = mu->GetMomentum(); + M = mu->GetTofM(); + P = PP->P(); + Chi2Vertex = mu->GetChiToVertex(); + Chi2STS = mu->GetChiSts(); + Chi2MUCH = mu->GetChiMuch(); + Chi2TRD = mu->GetChiTrd(); + NofSTS = mu->GetNStsHits(); + NofMUCH = mu->GetNMuchHits(); + NofTRD = mu->GetNTrdHits(); + NofTOF = mu->GetNTofHits(); + + Double_t MUCHchi2 = 10.; + Double_t STSchi2 = 10.; + Double_t Vchi2 = 10.; + + if((Chi2Vertex <= Vchi2 && Chi2Vertex >= 0) && + (Chi2STS <= STSchi2 && Chi2STS >= 0) && + (Chi2MUCH <= MUCHchi2 && Chi2MUCH >= 0) && + NofTOF > 0){ + Double_t params[9]; + + TTree *simu = new TTree("MonteCarlo", "Filtered Monte Carlo Events"); + simu->Branch("P", &P, "P/D"); + simu->Branch("M", &M, "M/D"); + simu->Branch("Chi2Vertex",&Chi2Vertex,"Chi2Vertex/D"); + simu->Branch("Chi2STS", &Chi2STS, "Chi2STS/D"); + simu->Branch("Chi2MUCH", &Chi2MUCH, "Chi2MUCH/D"); + simu->Branch("Chi2TRD", &Chi2TRD, "Chi2TRD/D"); + simu->Branch("NofSTS", &NofSTS, "NofSTS/I"); + simu->Branch("NofMUCH",&NofMUCH,"NofMUCH/I"); + simu->Branch("NofTRD", &NofTRD, "NofTRD/I"); + simu->Branch("type", &type, "type/I"); + + simu->Fill(); + + TMultiLayerPerceptron *mlp = new TMultiLayerPerceptron("@P,@M,@Chi2Vertex,@Chi2STS,@Chi2MUCH,@Chi2TRD,@NofSTS,@NofMUCH,@NofTRD:16:type",simu); + mlp->LoadWeights(fFileAnnName); + + params[0] = P; + params[1] = M; + params[2] = Chi2Vertex; + params[3] = Chi2STS; + params[4] = Chi2MUCH; + params[5] = Chi2TRD; + params[6] = (Double_t)NofSTS; + params[7] = (Double_t)NofMUCH; + params[8] = (Double_t)NofTRD; + ID = mlp->Evaluate(0, params); + + mlp->Delete(); + simu->Delete(); +} + + return ID; +} +// ------------------------------------------------------------------------- +Double_t CbmAnaDimuonAnalysis::CalculateAnnValue(Double_t P, Double_t M, Double_t Chi2Vertex, Double_t Chi2STS, Double_t Chi2MUCH, Double_t Chi2TRD, Int_t NofSTS, Int_t NofMUCH, Int_t NofTRD, Int_t NofTOF){ + + Double_t ID = -1; + + Double_t MUCHchi2 = 10.; + Double_t STSchi2 = 10.; + Double_t Vchi2 = 10.; + + if((Chi2Vertex <= Vchi2 && Chi2Vertex >= 0) && + (Chi2STS <= STSchi2 && Chi2STS >= 0) && + (Chi2MUCH <= MUCHchi2 && Chi2MUCH >= 0) && + NofTOF > 0){ + Int_t type; + Double_t params[9]; + + TTree *simu = new TTree("MonteCarlo", "Filtered Monte Carlo Events"); + simu->Branch("P", &P, "P/D"); + simu->Branch("M", &M, "M/D"); + simu->Branch("Chi2Vertex",&Chi2Vertex,"Chi2Vertex/D"); + simu->Branch("Chi2STS", &Chi2STS, "Chi2STS/D"); + simu->Branch("Chi2MUCH", &Chi2MUCH, "Chi2MUCH/D"); + simu->Branch("Chi2TRD", &Chi2TRD, "Chi2TRD/D"); + simu->Branch("NofSTS", &NofSTS, "NofSTS/I"); + simu->Branch("NofMUCH",&NofMUCH,"NofMUCH/I"); + simu->Branch("NofTRD", &NofTRD, "NofTRD/I"); + simu->Branch("type", &type, "type/I"); + + simu->Fill(); + + TString input; + input.Form("@P,@M,@Chi2Vertex,@Chi2STS,@Chi2MUCH,@Chi2TRD,@NofSTS,@NofMUCH,@NofTRD:%d:type",fNeurons); + TMultiLayerPerceptron *mlp = new TMultiLayerPerceptron(input.Data(),simu); + mlp->LoadWeights(fFileAnnName); + + params[0] = P; + params[1] = M; + params[2] = Chi2Vertex; + params[3] = Chi2STS; + params[4] = Chi2MUCH; + params[5] = Chi2TRD; + + params[6] = (Double_t)NofSTS; + params[7] = (Double_t)NofMUCH; + params[8] = (Double_t)NofTRD; + + ID = mlp->Evaluate(0, params); + + mlp->Delete(); + simu->Delete(); + } + return ID; + +} +// ------------------------------------------------------------------------- +void CbmAnaDimuonAnalysis::FillProfile(TProfile *profile, Double_t param, Bool_t trigger){ + if(trigger)profile->Fill(param,100);else profile->Fill(param,0); } // ----- Public method Finish ------------------------------------------ -void CbmAnaDimuonAnalysis::Finish() { - - if (fPlutoFileName != "") { - TFile* f = new TFile("YPt_histo.root", "recreate"); - - YPt_StsAcc->Scale(1. / (Double_t) fEvent); - YPt_StsMuchAcc->Scale(1. / (Double_t) fEvent); - YPt_StsMuchTrdAcc->Scale(1. / (Double_t) fEvent); - YPt_StsMuchTrdTofAcc->Scale(1. / (Double_t) fEvent); - - YPt_VtxReco->Scale(1. / (Double_t) fEvent); - YPt_VtxStsReco->Scale(1. / (Double_t) fEvent); - YPt_VtxStsMuchReco->Scale(1. / (Double_t) fEvent); - YPt_VtxStsMuchTrdReco->Scale(1. / (Double_t) fEvent); - YPt_VtxStsMuchTrdTofReco->Scale(1. / (Double_t) fEvent); - - YPt_pluto->Write(); - YPt_StsAcc->Write(); - YPt_StsMuchAcc->Write(); - YPt_StsMuchTrdAcc->Write(); - YPt_StsMuchTrdTofAcc->Write(); - +void CbmAnaDimuonAnalysis::Finish(){ + + TString name; + + if(fPlutoFileName != ""){ + + if(fAnnCut > 0)name = Form("YPt_histo_ANN_%1.2f.root", fAnnCut); + else name = "YPt_histo.root"; + + TFile* f = new TFile(name,"recreate"); + + YPt_StsAcc->Scale(1./(Double_t)fEvent); + YPt_StsMuchAcc->Scale(1./(Double_t)fEvent); + YPt_StsMuchTrdAcc->Scale(1./(Double_t)fEvent); + YPt_StsMuchTrdTofAcc->Scale(1./(Double_t)fEvent); + + YPt_VtxReco->Scale(1./(Double_t)fEvent); + YPt_VtxStsReco->Scale(1./(Double_t)fEvent); + YPt_VtxStsMuchReco->Scale(1./(Double_t)fEvent); + YPt_VtxStsMuchTrdReco->Scale(1./(Double_t)fEvent); + YPt_VtxStsMuchTrdTofReco->Scale(1./(Double_t)fEvent); + + YPt_pluto->Write(); + YPt_StsAcc->Write(); + YPt_StsMuchAcc->Write(); + YPt_StsMuchTrdAcc->Write(); + YPt_StsMuchTrdTofAcc->Write(); + + if(fAnnCut < 0){ YPt_VtxReco->Write(); YPt_VtxStsReco->Write(); YPt_VtxStsMuchReco->Write(); YPt_VtxStsMuchTrdReco->Write(); - YPt_VtxStsMuchTrdTofReco->Write(); - - f->Close(); - - TFile* ff = new TFile("eff_histo.root", "recreate"); - TDirectory* dir1 = ff->mkdir("mu Plus"); - dir1->cd(); - - TDirectory* dir1a = dir1->mkdir("accepted mu Plus"); - dir1a->cd(); - for (int j = 0; j < 4; j++) - acc_P[j][1]->Write(); - for (int j = 0; j < 4; j++) - acc_Theta[j][1]->Write(); - - dir1->cd(); - TDirectory* dir1b = dir1->mkdir("reconstructed mu Plus"); - dir1b->cd(); - for (int j = 0; j < 4; j++) - effReco_P[j][1]->Write(); - for (int j = 0; j < 4; j++) - effReco_Theta[j][1]->Write(); - for (int j = 0; j < 5; j++) - eff4pi_P[j][1]->Write(); - for (int j = 0; j < 5; j++) - eff4pi_Theta[j][1]->Write(); - - TDirectory* dir2 = ff->mkdir("mu Minus"); - dir2->cd(); - - TDirectory* dir2a = dir2->mkdir("accepted mu Minus"); - dir2a->cd(); - for (int j = 0; j < 4; j++) - acc_P[j][2]->Write(); - for (int j = 0; j < 4; j++) - acc_Theta[j][2]->Write(); - - dir2->cd(); - TDirectory* dir2b = dir2->mkdir("reconstructed mu Minus"); - dir2b->cd(); - for (int j = 0; j < 4; j++) - effReco_P[j][2]->Write(); - for (int j = 0; j < 4; j++) - effReco_Theta[j][2]->Write(); - for (int j = 0; j < 5; j++) - eff4pi_P[j][2]->Write(); - for (int j = 0; j < 5; j++) - eff4pi_Theta[j][2]->Write(); - - TDirectory* dir3 = ff->mkdir("signal"); - dir3->cd(); + } + YPt_VtxStsMuchTrdTofReco->Write(); - TDirectory* dir3a = dir3->mkdir("accepted signal"); - dir3a->cd(); - for (int j = 0; j < 4; j++) - acc_P[j][0]->Write(); - for (int j = 0; j < 4; j++) - acc_Theta[j][0]->Write(); + f->Close(); - dir3->cd(); - TDirectory* dir3b = dir3->mkdir("reconstructed signal"); - dir3b->cd(); - for (int j = 0; j < 4; j++) - effReco_P[j][0]->Write(); - for (int j = 0; j < 4; j++) - effReco_Theta[j][0]->Write(); - for (int j = 0; j < 5; j++) - eff4pi_P[j][0]->Write(); - for (int j = 0; j < 5; j++) - eff4pi_Theta[j][0]->Write(); - ff->Close(); - // fPlutoFile->Close(); - } else { - TFile* f = new TFile("sup_histo.root", "recreate"); - for (int j = 0; j < 6; j++) - BgSup[j]->Write(); - f->Close(); + if(fAnnCut > 0)name = Form("eff_histo_ANN_%1.2f.root", fAnnCut); + else name = "eff_histo.root"; + TFile* ff = new TFile(name,"recreate"); + + TDirectory *dir1 = ff->mkdir("mu Plus"); + dir1->cd(); + + TDirectory *dir1a = dir1->mkdir("accepted mu Plus"); + dir1a->cd(); + for(int j=0; j<4; j++)acc_P[j][1]->Write(); + for(int j=0; j<4; j++)acc_Theta[j][1]->Write(); + + dir1->cd(); + TDirectory *dir1b = dir1->mkdir("reconstructed mu Plus"); + dir1b->cd(); + if(fAnnCut < 0){ + for(int j=0; j<3; j++)effReco_P[j][1]->Write(); + for(int j=0; j<3; j++)effReco_Theta[j][1]->Write(); + for(int j=0; j<4; j++)eff4pi_P[j][1]->Write(); + for(int j=0; j<4; j++)eff4pi_Theta[j][1]->Write(); } - - TFile* f = new TFile("YPtM.root", "recreate"); - YPtM->Scale(1. / (Double_t) fEvent); + effReco_P[3][1]->Write(); + effReco_Theta[3][1]->Write(); + eff4pi_P[4][1]->Write(); + eff4pi_Theta[4][1]->Write(); + + TDirectory *dir2 = ff->mkdir("mu Minus"); + dir2->cd(); + + TDirectory *dir2a = dir2->mkdir("accepted mu Minus"); + dir2a->cd(); + for(int j=0; j<4; j++)acc_P[j][2]->Write(); + for(int j=0; j<4; j++)acc_Theta[j][2]->Write(); + + dir2->cd(); + TDirectory *dir2b = dir2->mkdir("reconstructed mu Minus"); + dir2b->cd(); + if(fAnnCut < 0){ + for(int j=0; j<3; j++)effReco_P[j][2]->Write(); + for(int j=0; j<3; j++)effReco_Theta[j][2]->Write(); + for(int j=0; j<4; j++)eff4pi_P[j][2]->Write(); + for(int j=0; j<4; j++)eff4pi_Theta[j][2]->Write(); + } + effReco_P[3][2]->Write(); + effReco_Theta[3][2]->Write(); + eff4pi_P[4][2]->Write(); + eff4pi_Theta[4][2]->Write(); + + TDirectory *dir3 = ff->mkdir("signal"); + dir3->cd(); + + TDirectory *dir3a = dir3->mkdir("accepted signal"); + dir3a->cd(); + for(int j=0; j<4; j++)acc_P[j][0]->Write(); + for(int j=0; j<4; j++)acc_Theta[j][0]->Write(); + + dir3->cd(); + TDirectory *dir3b = dir3->mkdir("reconstructed signal"); + dir3b->cd(); + if(fAnnCut < 0){ + for(int j=0; j<3; j++)effReco_P[j][0]->Write(); + for(int j=0; j<3; j++)effReco_Theta[j][0]->Write(); + for(int j=0; j<4; j++)eff4pi_P[j][0]->Write(); + for(int j=0; j<4; j++)eff4pi_Theta[j][0]->Write(); + } + effReco_P[3][0]->Write(); + effReco_Theta[3][0]->Write(); + eff4pi_P[4][0]->Write(); + eff4pi_Theta[4][0]->Write(); + + ff->Close(); + // fPlutoFile->Close(); + }else{ + if(fAnnCut > 0)name = Form("sup_histo_ANN_%1.2f.root", fAnnCut); + else name = "sup_histo.root"; + TFile* f = new TFile(name,"recreate"); + + if(fAnnCut < 0)for(int j=0; j<5; j++)BgSup[j]->Write(); + BgSup[5]->Write(); + f->Close(); + } + + if(fAnnCut > 0)name = Form("YPtM_ANN_%1.2f.root", fAnnCut); + else name = "YPtM.root"; + TFile* f = new TFile(name,"recreate"); + + YPtM->Scale(1./(Double_t)fEvent); YPtM->Write(); f->Close(); }