using namespace std;
#include "hpidrichtable.h"
#include "hades.h"
#include "hevent.h"
#include "hcategory.h"
#include "hiterator.h"
#include "hdetector.h"
#include "hspectrometer.h"
#include "hkicktrack.h"
#include "hkicktracksim.h"
#include <iostream>
#include <iomanip>
#include "hrichhit.h"
#include "hrichpad.h"
#include "hrichgeometrypar.h"
#include "kickdef.h"
#include "richdef.h"
#include "hmdcdef.h"
#include "hgeantrich.h"
#include "hruntimedb.h"
#include "TMath.h"
#include "hhitmatchsim.h"
#include "htrackinfo.h"
#include "hrichutilfunc.h"
ClassImp(HPidRichTable)
HPidRichTable::HPidRichTable(void) : HReconstructor("RichPidTable","table")
{
pRichHitMatchPropertiesSingle = new TNtuple("RichHitMatchPropertiesSingle","Properties of single rings in rich",
"pmq:padnr:centroid:locmax:avcharge:theta:phi:sector:openingAngle:dalitz:gamma");
pRichHitMatchPropertiesDouble = new TNtuple("RichHitMatchPropertiesDouble","Properties of Double_t rings in rich",
"pmq:padnr:centroid:locmax:avcharge:theta:phi:sector:dalitz:gamma");
pRichHitMatchPropertiesFake = new TNtuple("RichHitMatchPropertiesFake","Properties of fake rings in rich",
"pmq:padnr:centroid:locmax:avcharge:theta:phi:sector");
}
HPidRichTable::HPidRichTable(const Text_t name[],const Text_t title[]):
HReconstructor( name,title){
pRichHitMatchPropertiesSingle = new TNtuple("RichHitMatchPropertiesSingle","Properties of single rings in rich",
"pmq:padnr:centroid:locmax:avcharge:theta:phi:sector:openingAngle:dalitz:gamma");
pRichHitMatchPropertiesDouble = new TNtuple("RichHitMatchPropertiesDouble","Properties of Double_t rings in rich",
"pmq:padnr:centroid:locmax:avcharge:theta:phi:sector:dalitz:gamma");
pRichHitMatchPropertiesFake = new TNtuple("RichHitMatchPropertiesFake","Properties of fake rings in rich",
"pmq:padnr:centroid:locmax:avcharge:theta:phi:sector");
}
HPidRichTable::~HPidRichTable(void){
delete pRichHitMatchPropertiesSingle;
delete pRichHitMatchPropertiesDouble;
delete pRichHitMatchPropertiesFake;
}
Bool_t HPidRichTable::init(void){
HEvent *pEvent;
HSpectrometer *pSpect;
fGeometryPar = NULL;
if(gHades == NULL)
{
Error("init", "gHades == NULL");
return kFALSE;
}
if((pEvent = gHades->getCurrentEvent()) == NULL)
{
Error("init", "gHades->getCurrentEvent() == NULL");
return kFALSE;
}
if((pSpect = gHades->getSetup()) == NULL)
{
Error("init", "gHades->getSetup() == NULL");
return kFALSE;
}
if((pCatHitMatch = pEvent->getCategory(catMatchHit)) == NULL)
{
Error("init", "No catHitMatch");
return kFALSE;
}
else
pHitMatchIterator = (HIterator *)pCatHitMatch->MakeIterator();
pHitMatchIterator2 = (HIterator *)pCatHitMatch->MakeIterator();
evtCount = 0;
return kTRUE;
}
Bool_t HPidRichTable::reinit(void){
pPadsPar = ((HRichGeometryPar*)fGeometryPar)->getPadsPar();
return kTRUE;
}
Int_t HPidRichTable::execute(void){
evtCount++;
Int_t nCorrelatedLepOnMirror;
Int_t isCorrelatedGeantLepton;
Float_t dThetaRM = 0;
Float_t dThetaRM1 = 0;
Float_t dPhiRM = 0;
Float_t dPhiRM1 = 0;
Float_t ringOpAngle[100];
Int_t counter = 0;
for(Int_t i=0;i<100;i++){
ringOpAngle[i] = 0.;
}
if(evtCount%1000==0) cout<<" processing event "<<evtCount<<endl;
HHitMatchSim* pHitMatchObject = NULL;
HHitMatchSim* pHitMatchObject1 = NULL;
pHitMatchIterator->Reset();
pHitMatchIterator2->Reset();
while((pHitMatchObject= (HHitMatchSim *)pHitMatchIterator->Next())){
dPhiRM = (pHitMatchObject->getRichPhi() - pHitMatchObject->getMdcPhi())*
TMath::Sin(pHitMatchObject->getMdcTheta()/57.3);
dThetaRM = pHitMatchObject->getRichTheta() - pHitMatchObject->getMdcTheta();
pHitMatchIterator2->Reset();
while((pHitMatchObject1= (HHitMatchSim *)pHitMatchIterator2->Next())){
dPhiRM1 = (pHitMatchObject1->getRichPhi() - pHitMatchObject1->getMdcPhi())*
TMath::Sin(pHitMatchObject1->getMdcTheta()/57.3);
dThetaRM1 = pHitMatchObject1->getRichTheta() - pHitMatchObject1->getMdcTheta();
if((pHitMatchObject->getRichInd()==pHitMatchObject1->getRichInd()) &&
((TMath::Abs(dPhiRM))*(TMath::Abs(dThetaRM)))<((TMath::Abs(dPhiRM1))*(TMath::Abs(dThetaRM1)))) {
pHitMatchObject1 ->setMatchedRichMdc(0);
}
}
}
pHitMatchIterator->Reset();
HRichUtilFunc func;
while((pHitMatchObject = ( HHitMatchSim *)pHitMatchIterator->Next()) != NULL ){
if( pHitMatchObject->getMatchedRichMdc())
{
HTrackInfo * trackInfo = pHitMatchObject->getTrackInfoObj();
sector = pHitMatchObject->getSector();
theta = pHitMatchObject->getRichTheta();
phi = pHitMatchObject->getRichPhi();
deltaPhi = (phi - pHitMatchObject->getMdcPhi())* TMath::Sin(pHitMatchObject->getMdcTheta()/57.3);
deltaTheta = theta - pHitMatchObject->getMdcTheta();
pmq = pHitMatchObject->getRingPatMat();
padNr = pHitMatchObject->getRingPadNr();
locMax = pHitMatchObject->getRingLocalMax4();
centroid = pHitMatchObject->getCentroid();
avCharge = (float)(pHitMatchObject->getRingAmplitude())/(float)(pHitMatchObject->getRingPadNr());
nCorrelatedLepOnMirror = pHitMatchObject->getLeptonOnMirror();
isCorrelatedGeantLepton = pHitMatchObject->isGCLepRing();
if(pmq>200 && padNr > 5 && centroid < 2.8 && avCharge >4 && avCharge < 40 &&
deltaTheta >-1.8 && deltaTheta<1.8 &&
deltaPhi >-1.7 &&deltaPhi<1.7){
if(nCorrelatedLepOnMirror==1)
{
counter++;
pHitMatchIterator2->Reset();
while((pHitMatchObject1= (HHitMatchSim *)pHitMatchIterator2->Next())){
if(pHitMatchObject1->getRichInd()!=
pHitMatchObject->getRichInd()){
Float_t tempOpAngle = func.calcOpeningAngleT(theta,phi,pHitMatchObject1->getRichTheta(),pHitMatchObject1->getRichPhi());
if(tempOpAngle<ringOpAngle[counter]|| ringOpAngle[counter]==0) ringOpAngle[counter] = tempOpAngle;
}
}
pRichHitMatchPropertiesSingle->Fill(pmq,padNr,centroid,locMax,avCharge,theta,phi,sector,ringOpAngle[counter],checkDalitz(trackInfo),checkConv(trackInfo));
}
if(nCorrelatedLepOnMirror==2)
{
pRichHitMatchPropertiesDouble->Fill(pmq,padNr,centroid,locMax,avCharge,theta,phi,sector,checkDalitz(trackInfo),checkConv(trackInfo));
}
if(nCorrelatedLepOnMirror==0)
{
pRichHitMatchPropertiesFake->Fill(pmq,padNr,centroid,locMax,avCharge,theta,phi,sector);
}
}
}
}
return 0;
}
Float_t HPidRichTable::checkDalitz(HTrackInfo *tOb){
for(Int_t i = 0;i<5;i++){
if(tOb->getPi0Dalitz(i)==1) return tOb->getRichWeight(i);
}
return 0;
}
Float_t HPidRichTable::checkConv(HTrackInfo *tOb){
for(Int_t i = 0;i<5;i++){
if(tOb->getConvLep(i)==1) return tOb->getRichWeight(i);
}
return 0;
}
Bool_t HPidRichTable::finalize(void){
TFile* out= new TFile("pidNtuples.root","recreate");
out->cd();
pRichHitMatchPropertiesSingle->Write();
pRichHitMatchPropertiesDouble->Write();
pRichHitMatchPropertiesFake->Write();
out->Close();
return kTRUE;
};
Last change: Sat May 22 13:07:25 2010
Last generated: 2010-05-22 13:07
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.