using namespace std;
#include "hrichcorrcountersim.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hcategory.h"
#include "hiterator.h"
#include <iostream>
#include <iomanip>
#include "hdebug.h"
#include "hades.h"
#include "richdef.h"
#include "kickdef.h"
#include "hhitmatchheadersim.h"
#include "hhitmatchsim.h"
#include "hlinearcategory.h"
#include "hrichutilfunc.h"
ClassImp(HRichCorrCounterSim)
HRichCorrCounterSim::HRichCorrCounterSim(const Text_t *name,const Text_t *title) :
HRichCorrCounter(name,title)
{
}
HRichCorrCounterSim::HRichCorrCounterSim()
{
}
HRichCorrCounterSim::HRichCorrCounterSim(const Text_t *name,const Text_t *title,const Char_t* filename) :
HRichCorrCounter(name,title)
{
pFileName = filename;
}
HRichCorrCounterSim::~HRichCorrCounterSim(void) {
}
Bool_t HRichCorrCounterSim::init() {
if (gHades) {
HEvent *event=gHades->getCurrentEvent();
HRuntimeDb *rtdb=gHades->getRuntimeDb();
HSpectrometer *spec=gHades->getSetup();
if (event && rtdb) {
HDetector *rich = spec->getDetector("Rich");
if (rich) {
pHitMatchCat=event->getCategory(catMatchHit);
if (!pHitMatchCat)
{
pHitMatchCat=rich->buildCategory(catMatchHit);
if (!pHitMatchCat) {
Error("init","No HIT MATCH category defined");
return kFALSE;
}
else event->addCategory(catMatchHit, pHitMatchCat, "Rich");
}
pIterMatchHit = (HIterator*)getHitMatchCat()->MakeIterator("native");
pHitMatchHeaderCat=event->getCategory(catMatchHitHeader);
if (!pHitMatchHeaderCat)
{
pHitMatchHeaderCat=rich->buildCategory(catMatchHitHeader);
cout<<"i have built hhitmatchheader"<<endl;
if (!pHitMatchHeaderCat) {
Error("init","No HIT MATCH HEADER category defined");
return kFALSE;
}
else event->addCategory(catMatchHitHeader, pHitMatchHeaderCat, "Rich");
}
pIterMatchHitHeader = (HIterator*)getHitMatchHeaderCat()
->MakeIterator("native");
}
fKickTrackCat = gHades->getCurrentEvent()->getCategory(catKickTrack);
if (!fKickTrackCat) {
Error("init","KickTrack not found in input file");
return kFALSE;
}
iterTracks = (HIterator *)fKickTrackCat->MakeIterator("native");
cout<<"itertracks :"<<iterTracks<<endl;
}
}
iniCounters();
pFileOut = new TFile(pFileName,"RECREATE");
iniHistos();
return kTRUE;
}
void HRichCorrCounterSim::iniHistos()
{
HRichCorrCounter::iniHistos();
pHistArray2 = new TObjArray(10);
Int_t dTl=-20;
Int_t dTh= 20;
Int_t dTn= 40;
Int_t opl= 0;
Int_t oph= 50;
Int_t opn= 200;
Int_t medl=1;
Int_t medh=20;
Int_t medn=20;
Int_t mechl=1;
Int_t mechh=15;
Int_t mechn=15;
Int_t moml=1;
Int_t momh=1000;
Int_t momn=100;
Int_t idl=1;
Int_t idh=15;
Int_t idn=15;
pH_ParIdMdcTofdTheta = new TH2F("pH_ParIdMdcTofdTheta","pH_ParIdMdcTofdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_ParIdMdcTofdTheta);
pH_MechMdcTofdTheta = new TH2F("pH_MechMdcTofdTheta","pH_MechMdcTofdTheta",
mechn,mechl,mechh,dTn,dTl,dTh);
pHistArray2->Add(pH_MechMdcTofdTheta);
pH_MedMdcTofdTheta = new TH2F("pH_MedMdcTofdTheta","pH_MedMdcTofdTheta",
medn,medl,medh,dTn,dTl,dTh);
pHistArray2->Add(pH_MedMdcTofdTheta);
pH_MomMdcTofdTheta = new TH2F("pH_MomMdcTofdTheta","pH_MomMdcTofdTheta",
momn,moml,momh,dTn,dTl,dTh);
pHistArray2->Add(pH_MomMdcTofdTheta);
pH_CreaIdMdcTofdTheta = new TH2F("pH_CreaIdMdcTofdTheta","pH_CreaIdMdcTofdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_CreaIdMdcTofdTheta);
pH_ParIdMdcShowerdTheta = new TH2F("pH_ParIdMdcShowerdTheta","pH_ParIdMdcShowerdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_ParIdMdcShowerdTheta);
pH_MechMdcShowerdTheta = new TH2F("pH_MechMdcShowerdTheta","pH_MechMdcShowerdTheta",
mechn,mechl,mechh,dTn,dTl,dTh);
pHistArray2->Add(pH_MechMdcShowerdTheta);
pH_MedMdcShowerdTheta = new TH2F("pH_MedMdcShowerdTheta","pH_MedMdcShowerdTheta",
medn,medl,medh,dTn,dTl,dTh);
pHistArray2->Add(pH_MedMdcShowerdTheta);
pH_MomMdcShowerdTheta = new TH2F("pH_MomMdcShowerdTheta","pH_MomMdcShowerdTheta",
momn,moml,momh,dTn,dTl,dTh);
pHistArray2->Add(pH_MomMdcShowerdTheta);
pH_CreaIdMdcShowerdTheta = new TH2F("pH_CreaIdMdcShowerdTheta","pH_CreaIdMdcShowerdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_CreaIdMdcShowerdTheta);
pH_ParIdMech = new TH2F("pH_ParIdMech","pH_ParIdMech",idn,idl,idh,mechn,mechl,mechh);
pHistArray2->Add(pH_ParIdMech);
pH_ParIdMom = new TH2F("pH_ParIdMom","pH_ParIdMom",idn,idl,idh,momn,moml,momh);
pHistArray2->Add(pH_ParIdMom);
pH_ParIdMed = new TH2F("pH_ParIdMed","pH_ParIdMed",idn,idl,idh,medn,medl,medh);
pHistArray2->Add(pH_ParIdMed);
pH_ParIdCreaId = new TH2F("pH_ParIdCreaId","pH_ParIdCreaId",idn,idl,idh,idn,idl,idh);
pHistArray2->Add(pH_ParIdCreaId);
pH_ele_MechMdcShowerdTheta = new TH2F("pH_ele_MechMdcShowerdTheta","pH_ele_MechMdcShowerdTheta",
mechn,mechl,mechh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_MechMdcShowerdTheta);
pH_ele_MedMdcShowerdTheta = new TH2F("pH_ele_MedMdcShowerdTheta","pH_ele_MedMdcShowerdTheta",
medn,medl,medh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_MedMdcShowerdTheta);
pH_ele_MomMdcShowerdTheta = new TH2F("pH_ele_MomMdcShowerdTheta","pH_ele_MomMdcShowerdTheta",
momn,moml,momh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_MomMdcShowerdTheta);
pH_ele_CreaIdMdcShowerdTheta = new TH2F("pH_ele_CreaIdMdcShowerdTheta","pH_ele_CreaIdMdcShowerdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_CreaIdMdcShowerdTheta);
pH_pos_MechMdcShowerdTheta = new TH2F("pH_pos_MechMdcShowerdTheta","pH_pos_MechMdcShowerdTheta",
mechn,mechl,mechh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_MechMdcShowerdTheta);
pH_pos_MedMdcShowerdTheta = new TH2F("pH_pos_MedMdcShowerdTheta","pH_pos_MedMdcShowerdTheta",
medn,medl,medh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_MedMdcShowerdTheta);
pH_pos_MomMdcShowerdTheta = new TH2F("pH_pos_MomMdcShowerdTheta","pH_pos_MomMdcShowerdTheta",
momn,moml,momh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_MomMdcShowerdTheta);
pH_pos_CreaIdMdcShowerdTheta = new TH2F("pH_pos_CreaIdMdcShowerdTheta","pH_pos_CreaIdMdcShowerdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_CreaIdMdcShowerdTheta);
pH_ele_MechMdcTofdTheta = new TH2F("pH_ele_MechMdcTofdTheta","pH_ele_MechMdcTofdTheta",
mechn,mechl,mechh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_MechMdcTofdTheta);
pH_ele_MedMdcTofdTheta = new TH2F("pH_ele_MedMdcTofdTheta","pH_ele_MedMdcTofdTheta",
medn,medl,medh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_MedMdcTofdTheta);
pH_ele_MomMdcTofdTheta = new TH2F("pH_ele_MomMdcTofdTheta","pH_ele_MomMdcTofdTheta",
momn,moml,momh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_MomMdcTofdTheta);
pH_ele_CreaIdMdcTofdTheta = new TH2F("pH_ele_CreaIdMdcTofdTheta","pH_ele_CreaIdMdcTofdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_ele_CreaIdMdcTofdTheta);
pH_pos_MechMdcTofdTheta = new TH2F("pH_pos_MechMdcTofdTheta","pH_pos_MechMdcTofdTheta",
mechn,mechl,mechh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_MechMdcTofdTheta);
pH_pos_MedMdcTofdTheta = new TH2F("pH_pos_MedMdcTofdTheta","pH_pos_MedMdcTofdTheta",
medn,medl,medh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_MedMdcTofdTheta);
pH_pos_MomMdcTofdTheta = new TH2F("pH_pos_MomMdcTofdTheta","pH_pos_MomMdcTofdTheta",
momn,moml,momh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_MomMdcTofdTheta);
pH_pos_CreaIdMdcTofdTheta = new TH2F("pH_pos_CreaIdMdcTofdTheta","pH_pos_CreaIdMdcTofdTheta",
idn,idl,idh,dTn,dTl,dTh);
pHistArray2->Add(pH_pos_CreaIdMdcTofdTheta);
pH_opangleMDCa = new TH1F("pH_opangleMDCa","pH_opangleMDCa",opn,opl,oph);
pHistArray->Add(pH_opangleMDCa);
pH_opangleMDCDalitz = new TH1F("pH_opangleMDCDalitz","pH_opangleMDCDalitz",opn,opl,oph);
pHistArray->Add(pH_opangleMDCDalitz);
pH_opangleMDCConv = new TH1F("pH_opangleMDCConv","pH_opangleMDCConv",opn,opl,oph);
pHistArray->Add(pH_opangleMDCConv);
pH_opangleMETADalitz = new TH1F("pH_opangleMETADalitz","pH_opangleMETADalitz",opn,opl,oph);
pHistArray->Add(pH_opangleMETADalitz);
pH_opangleMETAConv = new TH1F("pH_opangleMETAConv","pH_opangleMETAConv",opn,opl,oph);
pHistArray->Add(pH_opangleMETAConv);
pH_opangleMETAdThetaDalitz = new TH2F("pH_opangleMETAdThetaDalitz","pH_opangleMETAdThetaDalitz",opn,opl,oph,dTn,dTl,dTh);
pHistArray->Add(pH_opangleMETAdThetaDalitz);
pH_opangleMETAdPhiDalitz = new TH2F("pH_opangleMETAdPhiDalitz","pH_opangleMETAdPhiDalitz",opn,opl,oph,10,-5,5);
pHistArray->Add(pH_opangleMETAdPhiDalitz);
pH_opangleMETAdThetaConv = new TH2F("pH_opangleMETAdThetaConv", "pH_opangleMETAdThetaConv",opn,opl,oph,40,-20,20);
pHistArray->Add(pH_opangleMETAdThetaConv);
pH_opangleMETAdPhiConv = new TH2F("pH_opangleMETAdPhiConv", "pH_opangleMETAdPhiConv",opn,opl,oph,10,-5,5);
pHistArray->Add(pH_opangleMETAdPhiConv);
}
void HRichCorrCounterSim::iniCounters()
{
HRichCorrCounter::iniCounters();
ng_Part=0;
ngNb_ConfTracklet=0;
ngNb_Fakes=0;
fAvrgRichWeight=0.;
fAvrgMdcWeight=0.;
ngGNbRMonly=0;
ngGNbRTSonly=0;
ngGNbMTSonly=0;
ngGNbRMTSonly=0;
ngNb_RW=0;
ngNb_MW=0;
for(Int_t n=0;n<MAXPARIDS;n++)
{
ng_ParId[n]=0;
}
}
Int_t HRichCorrCounterSim::execute()
{
if(HRichCorrCounter::execute())
{
HHitMatchHeaderSim *pHMH = 0;
pIterMatchHitHeader->Reset();
while((pHMH = (HHitMatchHeaderSim *)pIterMatchHitHeader->Next()))
{
pHMH->resetSim();
HHitMatchSim *pHitMatch=0;
pIterMatchHit->Reset();
Int_t nMaxParticles=pHMH->getNbCorrObjs()*MAXPARTICLES;
Int_t *nDParticles=new Int_t[nMaxParticles];
for(Int_t i=0;i<nMaxParticles;i++) nDParticles[i]=-2;
Int_t nl_Part=0;
Int_t nl_RM=0;
Int_t nl_RT_S=0;
Int_t nl_MT_S=0;
Int_t nl_RMT_S=0;
Int_t nGNbRMonly=0;
Int_t nGNbRTSonly=0;
Int_t nGNbMTSonly=0;
Int_t nGNbRMTSonly=0;
Float_t fl_RW=0.;
Float_t fl_MW=0.;
Int_t nlNb_Fakes=0;
Int_t nlNb_ConfTracklet=0;
Int_t nl_ParId[MAXPARIDS];
for(Int_t k=0;k<MAXPARIDS;k++) nl_ParId[k]=0;
while((pHitMatch = (HHitMatchSim *)pIterMatchHit->Next()))
{
HTrackInfo *t = pHitMatch->getTrackInfoObj();
Int_t isFirstGeantNbInTracklet=1;
for(Int_t i=0;i<MAXPARTICLES;i++)
{
Int_t nTrkNb=t->getTrkNb(i);
if (nTrkNb>-1)
{
if(isFirstGeantNbInTracklet) nlNb_ConfTracklet++;
isFirstGeantNbInTracklet=0;
pHitMatch->setFakeFlag(0);
Int_t nParId=t->getParId(i);
if(!pHitMatch->isFake() && (nParId==2 || nParId==3) )
{
pHitMatch->setLeptonFlag(1);
}
Int_t index=fillUniqueIndex(nTrkNb,
nMaxParticles,
nDParticles);
if(index>0)
{
Float_t fRW=t->getRichWeight(i);
Float_t fMW=t->getMdcWeight(i);
Int_t nMatchRM=t->getMatchedRM(i);
Int_t nMatchRT_S=t->getMatchedRT_S(i);
Int_t nMatchMT_S=t->getMatchedMT_S(i);
Int_t nMatchRMT_S=t->getMatchedRMT_S(i);
nl_Part++;
if(nParId<MAXPARIDS) nl_ParId[nParId]+=1;
if(fRW>-1) fl_RW+=fRW;
if(fMW>-1) fl_MW+=fMW;
if(nMatchRM != -1) nl_RM++;
if(nMatchRT_S != -1) nl_RT_S++;
if(nMatchMT_S != -1) nl_MT_S++;
if(nMatchRMT_S != -1) nl_RMT_S++;
if(nMatchRM!=-1 && nMatchRT_S==-1 &&
nMatchMT_S==-1 && nMatchRMT_S==-1 ) nGNbRMonly++;
if(nMatchRM==-1 && nMatchRT_S!=-1 &&
nMatchMT_S==-1 && nMatchRMT_S==-1 ) nGNbRTSonly++;
if(nMatchRM==-1 && nMatchRT_S==-1 &&
nMatchMT_S!=-1 && nMatchRMT_S==-1 ) nGNbMTSonly++;
if(nMatchRM!=-1 && nMatchRT_S!=-1 &&
nMatchMT_S!=-1 && nMatchRMT_S!=-1 ) nGNbRMTSonly++;
}
}
}
if(pHitMatch->isFake()) nlNb_Fakes++;
}
delete nDParticles;
if(nl_Part>0)
{
fl_RW/=nl_Part;
fl_MW/=nl_Part;
}
pHMH->setNbPart(nl_Part);
ng_Part+=nl_Part;
ngNb_ConfTracklet+=nlNb_ConfTracklet;
pHMH->setNbConfTracklets(nlNb_ConfTracklet);
ngNb_Fakes+=nlNb_Fakes;
pHMH->setNbFakes(nlNb_Fakes);
pHMH->setAvrgRichWeight(fl_RW);
if(fl_RW>0.)
{
fAvrgRichWeight+=fl_RW;
ngNb_RW++;
}
pHMH->setAvrgMdcWeight(fl_MW);
if(fl_MW>0.)
{
fAvrgMdcWeight+=fl_MW;
ngNb_MW++;
}
for(Int_t n=0;n<MAXPARIDS;n++)
{
ng_ParId[n]+=nl_ParId[n];
if(nl_ParId[n]>0) pHMH->setParId(n,nl_ParId[n]);
}
pHMH->setGeantNb_RM(nGNbRMonly);
ngGNbRMonly+=nGNbRMonly;
pHMH->setGeantNb_RT_S(nGNbRTSonly);
ngGNbRTSonly+=nGNbRTSonly;
pHMH->setGeantNb_MT_S(nGNbMTSonly);
ngGNbMTSonly+=nGNbMTSonly;
pHMH->setGeantNb_RMT_S(nGNbRMTSonly);
ngGNbRMTSonly+=nGNbRMTSonly;
}
}
fillHistos();
return kFALSE;
}
Bool_t HRichCorrCounterSim::finalize() {
HRichCorrCounter::finalize();
dumpCorrelationStatus();
pFileOut->cd();
HRichUtilFunc::saveHistos(pFileOut,pHistArray2);
pFileOut->Close();
return kTRUE;
}
void HRichCorrCounterSim::dumpCorrelationStatus()
{
HRichCorrCounter::dumpCorrelationStatus();
cout<<"--- SIM INFO ---"<<endl;
cout<<"Nb of GEANT particles :"<<ng_Part<<endl;
cout<<"Particle ID/# ... ";
for(Int_t n=0;n<MAXPARIDS;n++)
{
if(ng_ParId[n]>0) cout<<n<<"/"<<ng_ParId[n]<<" ";
}
cout<<endl;
if(ngNb_RW>0.) cout<<"Avrg Rich Weight :"<<fAvrgRichWeight/ngNb_RW<<endl;
if(ngNb_MW>0.) cout<<"Avrg Mdc Weight :"<<fAvrgMdcWeight/ngNb_MW<<endl;
cout<<"Nb of GEANT confirmed tracklets: "<<ngNb_ConfTracklet<<endl;
cout<<"Nb of fake tracklets: "<<ngNb_Fakes<<endl;
cout<<"Nb of Geant confirmed RM tracklets: "<<ngGNbRMonly<<endl;
cout<<"Nb of Geant confirmed R (T||S) tracklets: "<<ngGNbRTSonly<<endl;
cout<<"Nb of Geant confirmed M (T||S) tracklets: "<<ngGNbMTSonly<<endl;
cout<<"Nb of Geant confirmed RM(T||S) tracklets: "<<ngGNbRMTSonly<<endl;
}
Int_t HRichCorrCounterSim::fillHistos()
{
Int_t nHM = ((HLinearCategory*)getHitMatchCat())->getEntries();
if (nHM==0) return 0;
pIterMatchHit->Reset();
HHitMatchSim* pHM=0;
Int_t *MdcTofUniqueCombiMdc=new Int_t[nHM];
Int_t *MdcTofUniqueCombiTof=new Int_t[nHM];
Int_t *MdcShowerUniqueCombiMdc=new Int_t[nHM];
Int_t *MdcShowerUniqueCombiShower=new Int_t[nHM];
for (Int_t i=0;i<nHM;i++) MdcTofUniqueCombiMdc[i]=MdcTofUniqueCombiTof[i]=MdcShowerUniqueCombiMdc[i]=MdcShowerUniqueCombiShower[i]=-2;
TObjArray *dalitz = new TObjArray(50);
TObjArray *conv = new TObjArray(50);
TObjArray *all = new TObjArray(50);
while(( pHM= (HHitMatchSim *)pIterMatchHit->Next()))
{
fillGeantMdcTofdTheta(pHM,nHM,
MdcTofUniqueCombiMdc,MdcTofUniqueCombiTof);
fillGeantMdcShowerdTheta(pHM,nHM,
MdcShowerUniqueCombiMdc,MdcShowerUniqueCombiShower);
selectConvTrack(conv,pHM);
selectDalitzTrack(dalitz,pHM);
selectAll(all,pHM);
}
calcOpeningAngleMDC(conv,pH_opangleMDCConv);
calcOpeningAngleMDC(dalitz,pH_opangleMDCDalitz);
delete all;
delete dalitz;
delete conv;
delete [] MdcTofUniqueCombiMdc;
delete [] MdcTofUniqueCombiTof;
delete [] MdcShowerUniqueCombiMdc;
delete [] MdcShowerUniqueCombiShower;
return 1;
}
Int_t HRichCorrCounterSim::selectAll(TObjArray* arr,HHitMatchSim* h)
{
Int_t nRInd = h->getRichInd();
Int_t nMInd = h->getMdcInd();
Int_t nTInd = h->getTofInd();
Int_t nSInd = h->getShowInd();
Int_t nRM = h->getMatchedRichMdc();
Int_t nRT = h->getMatchedRichTof();
Int_t nMT = h->getMatchedMdcTof();
Int_t nRS = h->getMatchedRichShower();
Int_t nMS = h->getMatchedMdcShower();
Float_t dThetaRM = TMath::Abs(h->getRichTheta()-h->getMdcTheta());
if (nRInd!=-1 && nTInd!=-1 && nMInd!=-1
&& nRM==1 && nRT==1 && nMT==1 )
{
if (dThetaRM<2.)
{
arr->Add(h);
}
}
else if (nRInd!=-1 && nSInd!=-1 && nMInd!=-1
&& nRM==1 && nRS==1 && nMS==1 )
{
if (dThetaRM<2.)
{
arr->Add(h);
}
}
return 0;
}
Int_t HRichCorrCounterSim::selectDalitzTrack(TObjArray* arr,HHitMatchSim* h)
{
HTrackInfo *trk = h->getTrackInfoObj();
Int_t nRInd = h->getRichInd();
Int_t nMInd = h->getMdcInd();
Int_t nTInd = h->getTofInd();
Int_t nSInd = h->getShowInd();
Int_t nRM = h->getMatchedRichMdc();
Int_t nRT = h->getMatchedRichTof();
Int_t nMT = h->getMatchedMdcTof();
Int_t nRS = h->getMatchedRichShower();
Int_t nMS = h->getMatchedMdcShower();
Float_t dThetaRM = TMath::Abs(h->getRichTheta()-h->getMdcTheta());
if (nRInd!=-1 && nTInd!=-1 && nMInd!=-1
&& nRM==1 && nRT==1 && nMT==1 )
{
for (Int_t k=0;k<MAXPARTICLES;k++)
{
if (trk->getPi0Dalitz(k)==1 && trk->getMatchedRMT_S(k)==1)
{
if (dThetaRM<2.)
{
arr->Add(h);
}
return 0;
}
}
}
else if (nRInd!=-1 && nSInd!=-1 && nMInd!=-1
&& nRM==1 && nRS==1 && nMS==1 )
{
for (Int_t k=0;k<MAXPARTICLES;k++)
{
if (trk->getPi0Dalitz(k)==1 && trk->getMatchedRMT_S(k)==1)
{
if (dThetaRM<2.)
{
arr->Add(h);
}
return 0;
}
}
}
return 0;
}
Int_t HRichCorrCounterSim::selectConvTrack(TObjArray* arr,HHitMatchSim* h)
{
HTrackInfo *trk = h->getTrackInfoObj();
Int_t nRInd = h->getRichInd();
Int_t nMInd = h->getMdcInd();
Int_t nTInd = h->getTofInd();
Int_t nSInd = h->getShowInd();
Int_t nRM = h->getMatchedRichMdc();
Int_t nRT = h->getMatchedRichTof();
Int_t nMT = h->getMatchedMdcTof();
Int_t nRS = h->getMatchedRichShower();
Int_t nMS = h->getMatchedMdcShower();
Float_t dThetaRM = TMath::Abs(h->getRichTheta()-h->getMdcTheta());
if (nRInd!=-1 && nTInd!=-1 && nMInd!=-1
&& nRM==1 && nRT==1 && nMT==1 )
{
for (Int_t k=0;k<MAXPARTICLES;k++)
{
if (trk->getConvLep(k)==1 && trk->getMatchedRMT_S(k)==1)
{
if (dThetaRM<2.)
{
arr->Add(h);
}
return 0;
}
}
}
else if (nRInd!=-1 && nSInd!=-1 && nMInd!=-1
&& nRM==1 && nRS==1 && nMS==1 )
{
for (Int_t k=0;k<MAXPARTICLES;k++)
{
if (trk->getConvLep(k)==1 && trk->getMatchedRMT_S(k)==1)
{
if (dThetaRM<2.)
{
arr->Add(h);
}
return 0;
}
}
}
return 0;
}
Int_t HRichCorrCounterSim::fillGeantMdcTofdTheta(HHitMatchSim* h,Int_t evtsize,Int_t* m,Int_t* t)
{
Int_t mi,ti;
mi=ti=-1;
if (h->getMdcInd() > -1 && h->getTofInd() > -1 &&
h->getMatchedMdcTof() == 1 && h->getMatchedRichMdc()==1 &&
h->getMatchedRichTof()==1)
{
mi = h->getMdcInd();
ti = h->getTofInd();
}
else return 0;
if (checkCombination(mi,ti,m,t,evtsize)==0) return 0;
Float_t mt,tt,rt;
mt=tt=rt=0.;
mt=h->getMdcTheta();
tt=h->getTofTheta();
rt=h->getRichTheta();
Float_t dThetaMT=mt-tt;
Float_t dThetaRM=TMath::Abs(mt-rt);
if (dThetaRM>2.) return 0;
HTrackInfo *trk = h->getTrackInfoObj();
Bool_t isRealTracklet=kFALSE;
Int_t nPartInd=-1;
for (Int_t k=0;k<MAXPARTICLES;k++)
{
if (trk->getPi0Dalitz(k)==1 || trk->getConvLep(k)==1)
{
isRealTracklet=kTRUE;
nPartInd=k;
}
if (isRealTracklet)
{
if (nPartInd>-1)
{
Int_t nPartId = trk->getParId(nPartInd);
Int_t mech = trk->getMech(nPartInd);
Int_t med = trk->getMed(nPartInd);
Float_t mom = trk->getTotMom(nPartInd);
Int_t cId = trk->getCreaId(nPartInd);
pH_ParIdMdcTofdTheta -> Fill(nPartId,dThetaMT);
pH_MechMdcTofdTheta -> Fill(mech,dThetaMT);
pH_MedMdcTofdTheta -> Fill(med,dThetaMT);
pH_MomMdcTofdTheta -> Fill(mom,dThetaMT);
pH_CreaIdMdcTofdTheta -> Fill(cId,dThetaMT);
pH_ParIdMech -> Fill(nPartId,mech);
pH_ParIdMom -> Fill(nPartId,mom);
pH_ParIdMed -> Fill(nPartId,med);
pH_ParIdCreaId -> Fill(nPartId,cId);
if (nPartId==2)
{
pH_pos_MechMdcTofdTheta -> Fill(mech,dThetaMT);
pH_pos_MedMdcTofdTheta -> Fill(med,dThetaMT);
pH_pos_MomMdcTofdTheta -> Fill(mom,dThetaMT);
pH_pos_CreaIdMdcTofdTheta-> Fill(cId,dThetaMT);
}
if (nPartId==3)
{
pH_ele_MechMdcTofdTheta -> Fill(mech,dThetaMT);
pH_ele_MedMdcTofdTheta -> Fill(med,dThetaMT);
pH_ele_MomMdcTofdTheta -> Fill(mom,dThetaMT);
pH_ele_CreaIdMdcTofdTheta-> Fill(cId,dThetaMT);
}
}
}
isRealTracklet=kFALSE;
}
return 1;
}
Int_t HRichCorrCounterSim::fillGeantMdcShowerdTheta(HHitMatchSim* h,Int_t evtsize,Int_t* m,Int_t* s)
{
Int_t mi,si;
mi=si=-1;
if (h->getMdcInd() > -1 && h->getShowInd() > -1 &&
h->getMatchedMdcShower() == 1 && h->getMatchedRichMdc()==1 &&
h->getMatchedRichShower()==1)
{
mi = h->getMdcInd();
si = h->getShowInd();
}
else return 0;
if (checkCombination(mi,si,m,s,evtsize)==0) return 0;
Float_t mt,st,rt;
mt=st=rt=0.;
mt=h->getMdcTheta();
st=h->getShowerTheta();
rt=h->getRichTheta();
Float_t dThetaMS=mt-st;
Float_t dThetaRM=TMath::Abs(mt-rt);
if (dThetaRM>2.) return 0;
HTrackInfo *trk = h->getTrackInfoObj();
Bool_t isRealTracklet=kFALSE;
Int_t nPartInd=-1;
for (Int_t k=0;k<MAXPARTICLES;k++)
{
if (trk->getPi0Dalitz(k)==1 || trk->getConvLep(k)==1)
{
isRealTracklet=kTRUE;
nPartInd=k;
}
if (isRealTracklet)
{
if (nPartInd>-1)
{
Int_t nPartId = trk->getParId(nPartInd);
Int_t mech = trk->getMech(nPartInd);
Int_t med = trk->getMed(nPartInd);
Float_t mom = trk->getTotMom(nPartInd);
Int_t cId = trk->getCreaId(nPartInd);
pH_ParIdMdcShowerdTheta -> Fill(nPartId,dThetaMS);
pH_MechMdcShowerdTheta -> Fill(mech,dThetaMS);
pH_MedMdcShowerdTheta -> Fill(med,dThetaMS);
pH_MomMdcShowerdTheta -> Fill(mom,dThetaMS);
pH_CreaIdMdcShowerdTheta-> Fill(cId,dThetaMS);
pH_ParIdMech -> Fill(nPartId,mech);
pH_ParIdMom -> Fill(nPartId,mom);
pH_ParIdMed -> Fill(nPartId,med);
pH_ParIdCreaId -> Fill(nPartId,cId);
if (nPartId==2)
{
pH_pos_MechMdcShowerdTheta -> Fill(mech,dThetaMS);
pH_pos_MedMdcShowerdTheta -> Fill(med,dThetaMS);
pH_pos_MomMdcShowerdTheta -> Fill(mom,dThetaMS);
pH_pos_CreaIdMdcShowerdTheta-> Fill(cId,dThetaMS);
}
if (nPartId==3)
{
pH_ele_MechMdcShowerdTheta -> Fill(mech,dThetaMS);
pH_ele_MedMdcShowerdTheta -> Fill(med,dThetaMS);
pH_ele_MomMdcShowerdTheta -> Fill(mom,dThetaMS);
pH_ele_CreaIdMdcShowerdTheta-> Fill(cId,dThetaMS);
}
}
}
isRealTracklet=kFALSE;
}
return 1;
}
Int_t HRichCorrCounterSim::fillGeantMdcTofdThetanoGCond(HHitMatchSim* h,Int_t evtsize,Int_t* m,Int_t* t)
{
Int_t mi,ti;
mi=ti=-1;
if (h->getMdcInd() > -1 && h->getTofInd() > -1 &&
h->getMatchedMdcTof() == 1 && h->getMatchedRichMdc()==1 &&
h->getMatchedRichTof()==1)
{
mi = h->getMdcInd();
ti = h->getTofInd();
}
else return 0;
if (checkCombination(mi,ti,m,t,evtsize)==0) return 0;
Float_t mt,tt,rt;
mt=tt=rt=0.;
mt=h->getMdcTheta();
tt=h->getTofTheta();
rt=h->getRichTheta();
HTrackInfo *trk = h->getTrackInfoObj();
Int_t maxNbGPart = trk->getPartNr();
for (Int_t k=0;k<maxNbGPart;k++)
{
if (trk->getTrkNb(k) == -1) Error("fillGeantMdcTofdThetanoGCond","wrong particle number");
Int_t nPartId = trk->getParId(k);
Int_t mech = trk->getMech(k);
Int_t med = trk->getMed(k);
Float_t mom = trk->getTotMom(k);
Int_t cId = trk->getCreaId(k);
Float_t dThetaMT=mt-tt;
Float_t dThetaRM=TMath::Abs(mt-rt);
if (dThetaRM>2.) return 0;
pH_ParIdMdcTofdTheta->Fill(nPartId,dThetaMT);
pH_MechMdcTofdTheta->Fill(mech,dThetaMT);
pH_MedMdcTofdTheta->Fill(med,dThetaMT);
pH_MomMdcTofdTheta->Fill(mom,dThetaMT);
pH_CreaIdMdcTofdTheta->Fill(cId,dThetaMT);
}
return 1;
}
Last change: Sat May 22 13:08:23 2010
Last generated: 2010-05-22 13:08
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.