#include #include #include "TF1.h" #include "TH2F.h" #include #include #include #include #include "TFile.h" #include "TTree.h" #include "TH2.h" #include "TCanvas.h" #include "TProfile.h" #include "TF1.h" #include "TGraph.h" #include "TChain.h" #include "TStopwatch.h" #include "TLegend.h" #include "TMultiGraph.h" //#include "TpcPoint.h" //include Paths in rootlogon.C! //#include "CbmMCTrack.h" #include "g_defines.h" #include "SeparationPower.h" #include "SeparationPower.h" string SeparationPower::GetTheOtherParticle(string ParticleName) { string Ret; if( ParticleName==ParticleName1 ) { Ret=ParticleName2; } else if( ParticleName==ParticleName2 ) { Ret=ParticleName1; } return Ret; } void SeparationPower::FillSeparationPower(map > &FitMap) { map >::const_iterator cit; // dedxlog << "FillSeparationPower" << endl; for(cit=FitMap.begin(); cit!=FitMap.end(); cit++) { if(!(cit->second).empty()) { //there are no fits for this Momentum P ostringstream P1; ostringstream P2; P1 << ParticleName1.c_str() << "_" << cit->first; P2 << ParticleName2.c_str() << "_" << cit->first; if( (cit->second).find(P1.str())!=(cit->second).end() && (cit->second).find(P2.str())!=(cit->second).end()) { //find the fit functions for our Particles, (find gives back a iterator, so we need second) FillSeparationPower( ((cit->second).find(P1.str()))->second, ((cit->second).find(P2.str()))->second, cit->first); } } } } void SeparationPower::FillSeparationPower(TF1 *FitFunc1, TF1 *FitFunc2, const Double_t X) { if(FitFunc1 && FitFunc2) { FillSeparationPower(FitFunc1->GetParameter("Mean"), FitFunc2->GetParameter("Mean"), FitFunc1->GetParameter("Sigma"), FitFunc2->GetParameter("Sigma"), X ); } } void SeparationPower::FillSeparationPower(const Double_t Mean1, const Double_t Mean2, const Double_t Sigma1, const Double_t Sigma2, const Double_t X) { if(Sigma1 + Sigma2) { FillSeparationPower(abs(Mean1-Mean2)/(Sigma1+Sigma2), X); // dedxlog << "SeparationPower filled!"; } } void SeparationPower::FillSeparationPower(Double_t const SepPo, const Double_t X) { vSepPo.push_back(SepPo); vP.push_back(X); } void SeparationPower::FillHistogram(TH2F *pHisto) { if(pHisto) { assert(pHisto); assert(vSepPo.size() == vP.size()); // dedxlog << "Attempting to fill (and draw) " << ParticleName1 << "-" << ParticleName2 << endl; vector::const_iterator citX, citY; citY=vSepPo.begin(); for(citX=vP.begin(); citX!=vP.end(); citX++, citY++) { pHisto->Fill(*citX,*citY); //dedxlog << "Fill: x=" << *citX << "Fill: y=" << *citY << endl; } } } TGraph *SeparationPower::CreateGraph() { assert(vSepPo.size() == vP.size()); TGraph *pG=NULL; vector::const_iterator citX, citY; citY=vSepPo.begin(); cout << "vP.size(): " << vP.size() << endl; if(vP.size() != 0) { pG=new TGraph(vP.size()); assert(pG); Int_t i=0; for(citX=vP.begin(); citX!=vP.end(); citX++, citY++) { pG->SetPoint(i++,*citX, *citY); } } return pG; }