using namespace std;
#include "hmdcppevtfilter.h"
#include "TH1.h"
#include "TF1.h"
#include "TROOT.h"
#include "TCanvas.h"
#include "hmdcdef.h"
#include "hmdctrackddef.h"
ClassImp(HMdcPPEvtFilter)
HMdcPPEvtFilter::HMdcPPEvtFilter(const Text_t *name,const Text_t *title, Int_t flagcat) : HReconstructor(name,title) {
flagcategory=flagcat;
initVariables();
}
HMdcPPEvtFilter::HMdcPPEvtFilter(void) : HReconstructor("HMdcPPEvtFilter","HMdcPPEvtFilter"){
flagcategory=0;
initVariables();
}
HMdcPPEvtFilter::~HMdcPPEvtFilter(void){
if (mdcsegiter) delete mdcsegiter;
if (mdcclusiter) delete mdcclusiter;
}
void HMdcPPEvtFilter::initVariables()
{
catmHMdcClus=0;
mdcclus=0;
mdcclusiter=0;
catmHMdcSeg=0;
mdcseg=0;
mdcsegiter=0;
histphidiff=0;
histtanthetamult=0;
histphidiffcut=0;
histtanthetamultcut=0;
histchiphi=0;
histchiphicut=0;
histchitheta=0;
histchithetacut=0;
phimean=180;
tanthetamean=0.65;
phiwidth=20;
tanthetawidth=0.15;
setHistFile(".","pphs_","NEW");
saveHist=saveCanv=savePSFile=kTRUE;
}
void HMdcPPEvtFilter::createHists()
{
sprintf(title, "phi difference");
sprintf(name, "phidifference");
sprintf(xtitle, "phi diff");
sprintf(ytitle, "#");
histphidiff = new TH1F(name, title, 720, 0, 360);
histphidiff -> SetXTitle(xtitle);
histphidiff -> SetYTitle(ytitle);
sprintf(title, "tantheta_tantheta");
sprintf(name, "tantheta_tantheta");
sprintf(xtitle, "tantheta_tantheta");
sprintf(ytitle, "#");
histtanthetamult = new TH1F(name, title, 100, 0.0, 1.0);
histtanthetamult -> SetXTitle(xtitle);
histtanthetamult -> SetYTitle(ytitle);
sprintf(title, "phi difference after cut");
sprintf(name, "phidifferenceaftercut");
sprintf(xtitle, "phi diff after cut");
sprintf(ytitle, "#");
histphidiffcut = new TH1F(name, title, 720, 0, 360);
histphidiffcut -> SetXTitle(xtitle);
histphidiffcut -> SetYTitle(ytitle);
sprintf(title, "tantheta_tantheta after cut");
sprintf(name, "tantheta_tanthetaaftercut");
sprintf(xtitle, "tantheta_tantheta after cut");
sprintf(ytitle, "#");
histtanthetamultcut = new TH1F(name, title, 100, 0.0, 1.0);
histtanthetamultcut -> SetXTitle(xtitle);
histtanthetamultcut -> SetYTitle(ytitle);
if(flagcategory!=0)
{
sprintf(title, "chi2 vs phi");
sprintf(name, "chi2vsphi");
sprintf(xtitle, "phi");
sprintf(ytitle, "chi2");
histchiphi = new TH2F(name, title, 360, 0, 360, 620, -10, 300);
histchiphi -> SetXTitle(xtitle);
histchiphi -> SetYTitle(ytitle);
sprintf(title, "chi2 vs phi after cut");
sprintf(name, "chi2vsphiaftercut");
sprintf(xtitle, "phi");
sprintf(ytitle, "chi2");
histchiphicut = new TH2F(name, title, 360, 0, 360, 620, -10, 300);
histchiphicut -> SetXTitle(xtitle);
histchiphicut -> SetYTitle(ytitle);
sprintf(title, "chi2 vs theta");
sprintf(name, "chi2vstheta");
sprintf(xtitle, "theta");
sprintf(ytitle, "chi2");
histchitheta = new TH2F(name, title, 540, 0, 540, 620, -10, 300);
histchitheta -> SetXTitle(xtitle);
histchitheta -> SetYTitle(ytitle);
sprintf(title, "chi2 vs theta after cut");
sprintf(name, "chi2vsthetaaftercut");
sprintf(xtitle, "theta");
sprintf(ytitle, "chi2");
histchithetacut = new TH2F(name, title, 540, 0, 540, 620, -10, 300);
histchithetacut -> SetXTitle(xtitle);
histchithetacut -> SetYTitle(ytitle);
}
}
void HMdcPPEvtFilter::setThetaCuts(Float_t Theta, Float_t DTheta) {
tanthetamean=Theta;
tanthetawidth=DTheta;
}
void HMdcPPEvtFilter::setPhiCuts(Float_t Phi, Float_t DPhi) {
phimean=Phi;
phiwidth=DPhi;
}
Bool_t HMdcPPEvtFilter::init(void) {
rtdb=gHades->getRuntimeDb();
if(flagcategory==0)
{
catmHMdcClus=gHades->getCurrentEvent()->getCategory(catMdcClus);
if (!catmHMdcClus) {
Error("HMdcPPEvtFilterClusLevel::init()","NO HMDCCLUS FOUND!");
return kFALSE;
}
mdcclusiter=(HIterator *)catmHMdcClus->MakeIterator();
if(!mdcclusiter)
{
return kFALSE;
}
}
else
{
catmHMdcSeg=gHades->getCurrentEvent()->getCategory(catMdcSeg);
if (!catmHMdcSeg) {
Error("HMdcPPEvtFilter::init()","NO HMDCSEG FOUND!");
return kFALSE;
}
mdcsegiter=(HIterator *)catmHMdcSeg->MakeIterator();
if(!mdcsegiter)
{
return kFALSE;
}
}
createHists();
return kTRUE;
}
Bool_t HMdcPPEvtFilter::reinit(void) {
return kTRUE;
}
Int_t HMdcPPEvtFilter::execute(void) {
resetCounters();
resetArrays();
IsElasticFlag=0;
phishift[0]=0;
phishift[1]=60;
phishift[2]=120;
phishift[3]=180;
phishift[4]=240;
phishift[5]=-60;
TrigBit=gHades->getCurrentEvent()->getHeader()->getTBit();
if((TrigBit & (1<<5)) == 0)
{
return kSkipEvent;
}
else
{
if(flagcategory==0)
{
mdcclusiter->Reset();
while ( (mdcclus=(HMdcClus *)mdcclusiter->Next()) != 0 )
{
if((mdcclus->getMod()<2)&&(mdcclus->getMod()>-1))
{
if(multiplicity > 200){
return kSkipEvent;
}
sector[multiplicity]=mdcclus->getSec();
phi[multiplicity]=TMath::RadToDeg()*(mdcclus->getPhi())+phishift[(sector[multiplicity])];
theta[multiplicity]=TMath::RadToDeg()*(mdcclus->getTheta());
multiplicity++;
}
}
}
else
{
mdcsegiter->Reset();
while ( (mdcseg=(HMdcSeg *)mdcsegiter->Next()) != 0 )
{
if((mdcseg->getIOSeg())==0)
{
if(multiplicity > 200){
return kSkipEvent;
}
sector[multiplicity]=mdcseg->getSec();
phi[multiplicity]=TMath::RadToDeg()*(mdcseg->getPhi())+phishift[(sector[multiplicity])];
theta[multiplicity]=TMath::RadToDeg()*(mdcseg->getTheta());
chi2[multiplicity]=mdcseg->getChi2();
histchiphi->Fill(phi[multiplicity],chi2[multiplicity]);
histchitheta->Fill((theta[multiplicity]+(sector[multiplicity])*90),chi2[multiplicity]);
multiplicity++;
}
}
}
if(multiplicity>=2)
{
for(Int_t i=0; i<multiplicity; i++)
{
for(Int_t j=(i+1); j<multiplicity; j++)
{
phidiff=fabs(phi[j]-phi[i]);
tanthetamult=(TMath::Tan(TMath::DegToRad()*theta[j]))*(TMath::Tan(TMath::DegToRad()*theta[i]));
histphidiff->Fill(phidiff);
histtanthetamult->Fill(tanthetamult);
if((fabs(phidiff-phimean)<phiwidth)&&(fabs(tanthetamult-tanthetamean)<tanthetawidth))
{
histphidiffcut->Fill(phidiff);
histtanthetamultcut->Fill(tanthetamult);
if(flagcategory!=0)
{
histchiphicut->Fill(phi[i],chi2[i]);
histchiphicut->Fill(phi[j],chi2[j]);
histchithetacut->Fill((theta[i]+(sector[i])*90),chi2[i]);
histchithetacut->Fill((theta[j]+(sector[j])*90),chi2[j]);
}
IsElasticFlag=1;
}
}
}
}
if((multiplicity<2) || (IsElasticFlag==0))
{
return kSkipEvent;
}
}
return 0;
}
void HMdcPPEvtFilter::setHistFile(const Char_t* dir,const Char_t* suf,const Char_t* option) {
if(dir>0) {
histFileDir=dir;
if(histFileDir.Length()>0 && histFileDir(histFileDir.Length()-1)!='/')
histFileDir+='/';
}
if(suf>0) histFileSuffix=suf;
if(option>0) histFileOption=option;
}
Bool_t HMdcPPEvtFilter::finalize(void) {
canv1 = new TCanvas("canv1","Phi and Theta",140,60,800,900);
canv1->Divide(1,2);
canv1->cd(1);
histphidiff->DrawCopy();
canv1->cd(2);
histtanthetamult->DrawCopy();
canv1->Update();
canv2 = new TCanvas("canv2","Phi and Theta after Cut",140,60,800,900);
canv2->Divide(1,2);
canv2->cd(1);
histphidiffcut->DrawCopy();
canv2->cd(2);
histtanthetamultcut->DrawCopy();
canv2->Update();
if(flagcategory!=0)
{
canv3 = new TCanvas("canv3","Chi2 vs Phi and Theta",140,60,800,900);
canv3->Divide(2,2);
canv3->cd(1);
histchiphi->DrawCopy("colz");
canv3->cd(2);
histchiphicut->DrawCopy("colz");
canv3->cd(3);
histchitheta->DrawCopy("colz");
canv3->cd(4);
histchithetacut->DrawCopy("colz");
canv3->Update();
}
Bool_t fitFlag=kTRUE;
const Char_t* flag=(fitFlag) ? "":"x_";
TFile* file=0;
if(saveHist || saveCanv) file=openHistFile(flag);
if(file) {
if(saveHist) {
if(histphidiff) histphidiff->Write();
if(histtanthetamult) histtanthetamult->Write();
if(histphidiffcut) histphidiffcut->Write();
if(histtanthetamultcut) histtanthetamultcut->Write();
if(flagcategory!=0)
{
if(histchiphi) histchiphi->Write();
if(histchitheta) histchitheta->Write();
if(histchiphicut) histchiphicut->Write();
if(histchithetacut) histchithetacut->Write();
}
}
if(saveCanv) {
canv1->Write();
canv2->Write();
if(flagcategory!=0)
{
canv3->Write();
}
}
file->Close();
delete file;
}
if(savePSFile) {
TString tPsFile=psFile+"(";
canv1->Print(tPsFile.Data());
tPsFile=psFile+")";
canv2->Print(tPsFile.Data());
}
return kTRUE;
}
TFile* HMdcPPEvtFilter::openHistFile(const Char_t* flag) {
histFile=histFileDir+flag+histFileSuffix+flNmWoExt+".root";
TFile* file=new TFile(histFile.Data(),histFileOption.Data());
if(file==0 || file->IsOpen()) {
psFile=histFileDir+flag+histFileSuffix+flNmWoExt+".ps";
return file;
}
printf("File %s already exists!\n",histFile.Data());
const Char_t* ind="123456789";
for(Int_t i=0;i<9;i++){
delete file;
histFile=histFileDir+flag+histFileSuffix+flNmWoExt+"_"+ind[i]+".root";
file=new TFile(histFile.Data(),histFileOption.Data());
if(file==0 || file->IsOpen()) {
psFile=histFileDir+flag+histFileSuffix+flNmWoExt+"_"+ind[i]+".ps";
return file;
}
}
Error("openHistFile","Can not open histograms file!");
delete file;
return 0;
}
Last change: Sat May 22 13:03:04 2010
Last generated: 2010-05-22 13:03
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.