///////////////////////////////////////////////////////////////////////////////////////////////////////// // Invariant Mass Spectra // // // // Authors: Omveer Singh (omveer.rs@amu.ac.in), Partha Pratim Bhaduri (partha.bhaduri@vecc.gov.in)// // and Ekata Nandy (ekata@vecc.gov.in) // // // // // ///////////////////////////////////////////////////////////////////////////////////////////////////////// void InvariantMassSpectra( Int_t nEvents=100, TString dataset = "data/test", TString setup = "sis100_muon_jpsi") { TString inFile = dataset + ".analysis.root"; TString outFile =dataset+ "."+ setup + ".invariantmass.root"; // this macro's name for screen output TString myName = "InvariantMassSpectra"; // Specification of cut values Int_t MUCHhits = 11; Int_t STShits = 7; Double_t MUCHchi2 = 1.3; Double_t STSchi2 = 1.2; Double_t Vchi2 = 2; // setting canvas attributes gStyle->SetCanvasColor(10); gStyle->SetFrameFillColor(10); gStyle->SetHistLineWidth(4); gStyle->SetPadColor(10); gStyle->SetStatColor(10); gStyle->SetPalette(1); gStyle->SetPaintTextFormat("2.1f"); // Define trees for plus and minus muons Int_t NofEvent,NofFile; TLorentzVector P1; TTree *Plus = new TTree("Plus","part-"); Plus->Branch("P0", &P1(0), "Px/D:Py:Pz:E", 10000000); Plus->Branch("NofEvent", &NofEvent, "NofEvent/I", 10000000); Plus->Branch("NofFile", &NofFile, "NofFile/I", 10000000); TTree *Minus = new TTree("Minus","part+"); Minus->Branch("P0", &P1(0), "Px/D:Py:Pz:E", 10000000); Minus->Branch("NofEvent", &NofEvent, "NofEvent/I", 10000000); Minus->Branch("NofFile", &NofFile, "NofFile/I", 10000000); //Read Input File TFile *fInputFile = new TFile(inFile,"READ"); if ( ! fInputFile ) { cout << "*** "<Get("cbmsim") ; if (!InputTree) {delete fInputFile; return;} // just a precaution TClonesArray *Mu = new TClonesArray("CbmAnaMuonCandidate"); InputTree->SetBranchAddress("MuCandidates", &Mu); //Event Loop int firstEvent=0; cout<GetEntriesFast(); event++){ InputTree->GetEntry(event); if ( 0 == event%1000 ) cout <GetEntriesFast(); NofEvent=event; //Muon Candidate Loop for (int iPart=0; iPartAt(iPart); //if(mu->GetTrueMu() == 0)continue; if(mu->GetNStsHits() < STShits)continue; if(mu->GetNMuchHits() < MUCHhits)continue; //if(mu->GetChiMuch() > MUCHchi2)continue; //if(mu->GetChiToVertex() > Vchi2)continue; //if(mu->GetChiSTS() > STSchi2)continue; //Int_t NMuHits =mu->GetNMuchHits(); TLorentzVector *Mi = mu->GetMomentumRC(); P1=*Mi; if(mu->GetSign() < 0)Minus->Fill(); else Plus->Fill(); } } fInputFile->Close();// close input file //Set Branch of Tree Plus and Minus Int_t nE1, nE2; TLorentzVector Pplus,Pminus; Plus->SetBranchAddress("P0", &Pplus(0)); Minus->SetBranchAddress("P0", &Pminus(0)); Plus->SetBranchAddress("NofEvent", &nE1); Minus->SetBranchAddress("NofEvent", &nE2); cout<GetEntries() << endl; cout <<"No. of Mu Minus: " << Minus->GetEntries() <GetXaxis())->SetTitle("m_{inv} (GeV/c^{2})"); (invM_sgn->GetYaxis())->SetTitle("counts"); invM_sgn->SetLineColor(kBlack); //Invariant Mass Calculation Loop for(int jPart=0; jPartGetEntries(); jPart++) { Plus->GetEntry(jPart); for(int iPart=0; iPartGetEntries(); iPart++) { Minus->GetEntry(iPart); if(nE1 != nE2)continue; //for same event TLorentzVector M = Pplus + Pminus; invM_sgn->Fill(M.M()); //invariant mass } } // Open output file TFile *output = new TFile(outFile,"recreate"); output->cd(); //Plotting the result TCanvas* can = new TCanvas(); invM_sgn->Draw(); invM_sgn->Write(); //close output file output->Close(); cout<