00001 #ifndef RAD_TRadCor
00002 #define RAD_TRadCor
00003
00004 #include "TVCrossPart.h"
00005 #include "TKinemCut.h"
00006
00007 class TRadCor{
00008 protected:
00009 unsigned int fNPart;
00010 unsigned int fNEvents;
00011 double *fMax;
00012 double *fMin;
00013
00014 double *fSigma;
00015 double *fCross;
00016 double *fCross2;
00017 double *fECross;
00018 double *fECross2;
00019 double *fSM;
00020 double *fSM2;
00021 double *fPart;
00022 unsigned int *fNSim;
00023 unsigned int *fN;
00024 unsigned int *fWN;
00025 bool *fInList;
00026 TVCrossPart *fMatrix;
00027 bool fNew;
00028 double fTheta_Aver_0;
00029
00030
00031 bool fIsSmear;
00032 void SetSpecialCase(unsigned int i){
00033 if ( i == 0 && !fIsSmear )
00034 fMatrix->SetThetaMin(fTheta_Aver_0);
00035 else
00036 fMatrix->SetThetaMin(gCut->ThetaMin());
00037 }
00038 public:
00039 TRadCor();
00040 TRadCor(TVCrossPart*);
00041 ~TRadCor();
00042
00043 void MakeMaximum(const unsigned int&);
00044 void MakeIntegral(const unsigned int&);
00045 void SetCuts(){};
00046 void SetAuxiliaryParameters(){}
00047 double Norm(const unsigned int &);
00048 void SetNEvents(const unsigned int &n){fNEvents = n;}
00049 void MakeAllMaximums();
00050 void MakeAllIntegrals();
00051 void Init();
00052 unsigned int MakeEvent();
00053 void MakePart();
00054 unsigned int GetNPart(){return fNPart;}
00055 double GetMax(unsigned int i){return fMax[i];}
00056 double GetMin(unsigned int i){return fMin[i];}
00057 unsigned int GetNSim(unsigned int i){return fNSim[i];}
00058 unsigned int GetN(unsigned int i){return fN[i];}
00059 unsigned int GetWN(unsigned int i){return fWN[i];}
00060 double GetCross(unsigned int i){return fCross[i];}
00061 double GetECross(unsigned int i){return fECross[i];}
00062 double GetCross2(unsigned int i){return fCross2[i];}
00063 double GetECross2(unsigned int i){return fECross2[i];}
00064 inline void GetEvent(double &p0, double &t0, double &ph0,
00065 double &p1, double &t1, double &ph){
00066 fMatrix->GetEvent(p0, t0, ph0, p1, t1, ph);
00067 }
00068 inline void MakeEvent(double &p0, double &t0, double &ph0,
00069 double &p1, double &t1, double &ph, unsigned int &ipart){
00070 ipart = MakeEvent();
00071 fMatrix->GetEvent(p0, t0, ph0, p1, t1, ph);
00072 }
00073 inline void MakeEvent(double *m, int &n){
00074 MakeEvent();
00075 fMatrix->GetEvent(m,n);
00076 }
00077 inline TVCrossPart *GetCrossPart(){ return fMatrix;}
00078 void SetMType(const bool& x){fNew = x;}
00079 void SetSmear(const bool& x){fIsSmear =x;}
00080 void MakeCrossSection();
00081 void SetPartList(const bool *InList){
00082 for(unsigned int i=0; i<fNPart; i++) fInList[i] = InList[i];
00083 }
00084 };
00085
00086 #endif //#ifndef RAD_TRadCor