using namespace std;
#include "hrichpaircreatorsim.h"
#include "hdihitmatchsim.h"
#include "hrichcut.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hrichdetector.h"
#include "hcategory.h"
#include "hiterator.h"
#include "hmatrixcatiter.h"
#include "hrichhit.h"
#include <iostream>
#include <iomanip>
#include "hdebug.h"
#include "hades.h"
#include "richdef.h"
#include "hhitmatchsim.h"
#include "hlinearcategory.h"
#include "hrichutilfunc.h"
#include "hrichhistfac.h"
#include "htrackinfo.h"
#include "TH1.h"
#include "TFile.h"
ClassImp(HRichPairCreatorSim)
HRichPairCreatorSim::HRichPairCreatorSim(const Text_t *name,const Text_t *title,const Char_t* filename) :
HRichPairCreator(name,title,filename)
{
pFileName = filename;
}
HRichPairCreatorSim::HRichPairCreatorSim()
{
}
HRichPairCreatorSim::~HRichPairCreatorSim(void) {
}
Bool_t HRichPairCreatorSim::init() {
if (gHades) {
HEvent *event=gHades->getCurrentEvent();
HRuntimeDb *rtdb=gHades->getRuntimeDb();
HSpectrometer *spec=gHades->getSetup();
if (event && rtdb) {
HRichDetector *rich = (HRichDetector*)spec->getDetector("Rich");
if (rich) {
pHitMatchCat=event->getCategory(catMatchHit);
if (!pHitMatchCat) {
Error("init","No HIT MATCH category defined");
return kFALSE;
}
else event->addCategory(catMatchHit, pHitMatchCat, "Rich");
}
pIterMatchHit = (HIterator*)getHitMatchCat()->MakeIterator("native");
pHitDiMatchCat=event->getCategory(catDiMatchHit);
if (!pHitDiMatchCat) {
pHitDiMatchCat=rich->buildLinearCat("HDiHitMatchSim");
cout<<"i have built HDiHitMatchSim category"<<endl;
if (!pHitDiMatchCat) {
Error("init","No HIT DIMATCH SIM category defined");
return kFALSE;
}
else event->addCategory(catDiMatchHit, pHitDiMatchCat, "Rich");
}
pIterDiMatchHit = (HIterator*)getHitDiMatchCat()->MakeIterator("native");
}
}
pHistArray = new TObjArray(10);
pFileOut = new TFile(pFileName,"RECREATE");
initCuts();
initHistos();
initHistosSim();
nCounterProcessedNbEvents=0;
return kTRUE;
}
void HRichPairCreatorSim::initHistosSim()
{
TH1F* hist=HRichHistFac::getHOpeningAngle("MDC_ConvPairs");
pHistArray->Add(hist);
hist=HRichHistFac::getHOpeningAngle("MDC_ConvPairs_UNLIKE");
pHistArray->Add(hist);
hist=HRichHistFac::getHOpeningAngle("KICK_ConvPairs_UNLIKE");
pHistArray->Add(hist);
hist=HRichHistFac::getHOpeningAngle("MDC_DalitzPairs");
pHistArray->Add(hist);
hist=HRichHistFac::getHOpeningAngle("MDC_DalitzPairs_UNLIKE");
pHistArray->Add(hist);
hist=HRichHistFac::getHOpeningAngle("KICK_DalitzPairs_UNLIKE");
pHistArray->Add(hist);
}
Bool_t HRichPairCreatorSim::finalize() {
HRichPairCreator::finalize();
return kTRUE;
}
Int_t HRichPairCreatorSim::execute()
{
if (!HRichPairCreator::execute())
{
if(!selectAndFillPairsSim()) Error("","");;
}
Int_t kReturnValue=0;
return kReturnValue;
}
Int_t HRichPairCreatorSim::selectAndFillPairsSim(void)
{
Int_t ret_val=1;
TObjArray* GEANTconvpairs = new TObjArray(5);
TObjArray* GEANTdalitzpairs = new TObjArray(5);
HDiHitMatchSim *pair=0;
pIterDiMatchHit->Reset();
while((pair = (HDiHitMatchSim *)pIterDiMatchHit->Next()))
{
if(HRichCut::isGEANTPair(pair,(HLinearCategory*)getHitMatchCat(),
"Conversion"))
{
GEANTconvpairs->Add(pair);
}
if(HRichCut::isGEANTPair(pair,(HLinearCategory*)getHitMatchCat(),
"pi0Dalitz"))
{
GEANTdalitzpairs->Add(pair);
}
}
fillHistosGEANTPairs(GEANTconvpairs,"MDC_ConvPairs",
"MDC_ConvPairs_UNLIKE","KICK_ConvPairs_UNLIKE");
fillHistosGEANTPairs(GEANTdalitzpairs,"MDC_DalitzPairs",
"MDC_DalitzPairs_UNLIKE","KICK_DalitzPairs_UNLIKE");
delete GEANTconvpairs;
delete GEANTdalitzpairs;
return ret_val;
}
Int_t HRichPairCreatorSim::fillHistosGEANTPairs(TObjArray* arr,const Char_t* c1,
const Char_t* c2,const Char_t* c3)
{
Int_t ret_val=1;
Int_t max = arr->GetLast()+1;
Int_t *MDCoptuple=new Int_t[max];
Int_t *MDCopUNLIKEtuple=new Int_t[max];
Int_t *KICKopUNLIKEtuple=new Int_t[max];
for (Int_t i=0;i<max;i++) MDCoptuple[i]=MDCopUNLIKEtuple[i]=
KICKopUNLIKEtuple[i]=-2;
for (Int_t i=0;i<max;i++)
{
HDiHitMatchSim *pair = ((HDiHitMatchSim*)(*arr)[i]);
fillOpangMDC(pair,MDCoptuple,max,c1);
if(HRichCut::isUnlikeSignPair(pair)) fillOpangMDC(pair,MDCopUNLIKEtuple,
max,c2);
if(HRichCut::isUnlikeSignPair(pair)) fillOpangKICK(pair,KICKopUNLIKEtuple,
max,c3);
}
delete MDCoptuple;
delete MDCopUNLIKEtuple;
delete KICKopUNLIKEtuple;
return ret_val;
}
Last change: Sat May 22 13:09:41 2010
Last generated: 2010-05-22 13:09
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.