00001
00011 #include "StEEmcPoint.h"
00012 #include "StEEmcUtil/EEmcGeom/EEmcGeomDefs.h"
00013 #include <iostream>
00014
00015 #include "StEvent/StEmcPoint.h"
00016
00017 ClassImp(StEEmcPoint);
00018
00019
00020 StEEmcPoint::StEEmcPoint()
00021 : TObject()
00022 {
00023 mEmcPoint=0;
00024 mRelatives=999;
00025 for ( Int_t i=0;i<4;i++ ) mEnergy[i]=0.;
00026 mResidueU=0.;
00027 mResidueV=0.;
00028 StEEmcClusterVec_t temp;
00029 for ( Int_t i=0;i<4;i++ ) mTowerClusters.push_back(temp);
00030 mKey=-1;
00031 }
00032
00033
00034 StEEmcPoint::StEEmcPoint( const StEEmcPoint &p )
00035 : TObject(p)
00036 {
00037
00038 mPosition = p.mPosition;
00039 for ( Int_t i = 0; i < 4; i++ )
00040 mEnergy[i] = p.mEnergy[i];
00041 mFraction = p.mFraction;
00042 mTowers = p.mTowers;
00043 mWeights = p.mWeights;
00044 mSmdClusters[0] = p.mSmdClusters[0];
00045 mSmdClusters[1] = p.mSmdClusters[1];
00046 mEmcPoint = p.mEmcPoint;
00047 mRelatives = p.mRelatives;
00048 mTowerClusters = p.mTowerClusters;
00049
00050 mSector = p.mSector;
00051 mSigma = p.mSigma;
00052 mU = p.mU;
00053 mV = p.mV;
00054
00055 mResidueU = p.mResidueU;
00056 mResidueV = p.mResidueV;
00057
00058 mKey=p.mKey;
00059
00060 }
00061
00062
00063 StEmcPoint *StEEmcPoint::stemc()
00064 {
00065
00066 StThreeVectorF position( mPosition.X(), mPosition.Y(), mPosition.Z() );
00067
00068 mEmcPoint = new StEmcPoint();
00069 mEmcPoint->setEnergy( energy() );
00070 mEmcPoint->setPosition( position );
00071
00074 StThreeVectorF error( 1.0, 1.0, 1.0 );
00075 mEmcPoint->setPositionError( error );
00076
00080 mEmcPoint->addCluster( kEndcapEmcTowerId, 0 );
00081
00082 mEmcPoint->addCluster( kEndcapSmdUStripId, mSmdClusters[0].stemc() );
00083 mEmcPoint->addCluster( kEndcapSmdVStripId, mSmdClusters[1].stemc() );
00084
00085 return mEmcPoint;
00086
00087 }
00088
00089
00090 Bool_t StEEmcPoint::chiSquare( const StEEmcPoint &other ) const
00091 {
00092
00095
00096 Float_t myChi2 = ( mSmdClusters[0].energy() - mSmdClusters[1].energy() );
00097 myChi2 *= myChi2;
00098
00099 Float_t otherChi2 = ( other.mSmdClusters[0].energy() - other.mSmdClusters[1].energy() );
00100 otherChi2 *= otherChi2;
00101
00102 return myChi2 < otherChi2;
00103
00104 }
00105
00106
00107 void StEEmcPoint::print() const
00108 {
00109
00110 std::cout << "---------------------------------" << std::endl;
00111 std::cout << " X=" << mPosition.X()
00112 << " Y=" << mPosition.Y()
00113 << " energy: T=" << mEnergy[0] << " P=" << mEnergy[1] << " Q=" << mEnergy[2] << " R=" << mEnergy[3]
00114 << " frac=" << mFraction
00115 << std::endl;
00116
00117 for ( UInt_t i=0; i<mTowers.size(); i++ )
00118 mTowers[i].print();
00119
00120 for (UInt_t l = 0;l <= 3;l++) {
00121 const StEEmcClusterVec_t &v = clusters(l);
00122 std::cout << "layer " << l << ": # clusters " << v.size() << std::endl;
00123 for (UInt_t i = 0;i < v.size();i++) {
00124 const StEEmcCluster &c = v[i];
00125 std::cout << "layer " << l << ", cluster " << i << std::endl;
00126 c.print();
00127 }
00128 }
00129
00130 std::cout << "ucluster:" << std::endl;
00131 mSmdClusters[0].print();
00132 std::cout << "vcluster:" << std::endl;
00133 mSmdClusters[1].print();
00134
00135 }