#ifndef HRTEFFICIENCY_H #define HRTEFFICIENCY_H #include #include #include #include #include class HRtMatchingPar; //Manages efficiency in function of p,theta,phi class HRtEfficiencyMatrix : public TObject { public: HRtEfficiencyMatrix(void); ~HRtEfficiencyMatrix(void); void setDimension(UInt_t binsP,UInt_t binsTheta,UInt_t binsPhi); void setPRange(Float_t minP,Float_t maxP); void setThetaRange(Float_t minTheta, Float_t maxTheta); void setPhiRange(Float_t minPhi,Float_t maxPhi); Float_t &binContent(Float_t p, Float_t theta, Float_t phi); Float_t &bin(UInt_t i, UInt_t j, UInt_t k); Float_t &lastBin(void) { return fValue[fBinsTotal]; } Float_t &errBinContent(Float_t p, Float_t theta, Float_t phi); Float_t &errBin(UInt_t i, UInt_t j, UInt_t k); Float_t &errLastBin(void) { return fError[fBinsTotal]; } void computePoissonErrors(void); void divide(HRtEfficiencyMatrix &num,HRtEfficiencyMatrix &den); void multiply(HRtEfficiencyMatrix &num,HRtEfficiencyMatrix &den); Bool_t isCompatible(HRtEfficiencyMatrix &m); Bool_t zero(void); Float_t sum(void); Float_t integral(void); UInt_t getBinsTotal(void) { return fBinsTotal; } UInt_t getBinsTheta(void) { return fBinsTheta; } UInt_t getBinsPhi(void) { return fBinsPhi; } UInt_t getBinsP(void) { return fBinsP; } inline Float_t getP(UInt_t binP); inline Float_t getTheta(UInt_t binTheta); inline Float_t getPhi(UInt_t binPhi); inline Int_t getBinP(Float_t p); inline Int_t getBinTheta(Float_t theta); inline Int_t getBinPhi(Float_t phi); protected: UInt_t fSize; Float_t *fValue; //[fSize] Float_t *fError; //[fSize] UInt_t fBinsP, fBinsTheta, fBinsPhi, fBinsTotal; Float_t fMinP, fMaxP, fBinSizeP; Float_t fMinTheta, fMaxTheta, fBinSizeTheta; Float_t fMinPhi, fMaxPhi, fBinSizePhi; public: ClassDef(HRtEfficiencyMatrix,1) }; class HRtEfficiencyKit : public TObject { public: ~HRtEfficiencyKit(void) {} TGraph *plotEff(TString &var); TGraph *plotCor(TString &var); TGraph *plotEff(TString &var, Float_t var2, Float_t var3); TGraph *plotCor(TString &var, Float_t var2, Float_t var3); Float_t getAverageEfficiency(void); Float_t getEfficiency(void); Float_t getAbsoluteEfficiency(void); Float_t getNoiseLevel(void); Float_t getAbsoluteNoiseLevel(void); void setMatrixDimension(UInt_t binsP,UInt_t binsTheta, UInt_t binsPhi); void setPRange(Float_t minP,Float_t maxP); void setThetaRange(Float_t minTheta, Float_t maxTheta); void setPhiRange(Float_t minPhi,Float_t maxPhi); Bool_t processFile(Text_t fileName[], Stat_t maxEntries=kMaxInt); void setMinValid(Float_t v) { fMinValid = v; } void setMaxValid(Float_t v) { fMaxValid = v; } void printReport(void); protected: TGraph *plot(HRtEfficiencyMatrix &matrix, TString &var, Float_t var2,Float_t var3); TGraph *plot(HRtEfficiencyMatrix &m, TString &var); virtual void preRead(TNtuple *) {} virtual void postRead(void) {} //Llamado para asignar isReconstructed TString bnGeantMomentum; //Branch name TString bnGeantTheta; TString bnGeantPhi; TString bnValidity; TString bnRecMomentum; TString bnRecTheta; TString bnRecPhi; TString stNtuple; //string ntuple name Bool_t isReconstructed; //Indica si la traza sera reconstruida Float_t fMinValid; // Float_t fMaxValid; //Max value of valid. To elliminate correlated noise HRtEfficiencyMatrix fMatchedGood; //Reconstructed tracks which are good HRtEfficiencyMatrix fGeant; HRtEfficiencyMatrix fMatchedTotal; //p,theta,phi are the reconstructed ones HRtEfficiencyMatrix fEfficiency; HRtEfficiencyMatrix fCorrection; public: ClassDef(HRtEfficiencyKit,1) }; //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// class HRtEfficiencyKitMeta : public HRtEfficiencyKit { public: HRtEfficiencyKitMeta(void); ~HRtEfficiencyKitMeta(void) {} void setCutValues(Float_t d,Float_t dkick,Float_t dPhi,Float_t xPull,Float_t dPnorm); protected: void preRead(TNtuple *); void postRead(void); Float_t fMaxD; Float_t fMaxDKick; Float_t fMaxDPhi; Float_t fMaxXPull; Float_t fMaxDPnorm; Float_t fD,fDKick,fXPull,fDPhi,fDPnorm; public: ClassDef(HRtEfficiencyKitMeta,1) }; class HRtEfficiencyKitMeta2 : public HRtEfficiencyKit { public: HRtEfficiencyKitMeta2(void); ~HRtEfficiencyKitMeta2(void) {} void loadParameters(Text_t file[]); protected: void preRead(TNtuple *); void postRead(void); Float_t fD,fDKick,fXPull,fDPhi,fDPnorm; Float_t fMatchVar[4]; HRtMatchingPar *fMatchingPar; TString fParamFile; public: ClassDef(HRtEfficiencyKitMeta2,1) }; class HRtEfficiencyKitMdc : public HRtEfficiencyKit { public: HRtEfficiencyKitMdc(void); ~HRtEfficiencyKitMdc(void) {} void setCutValues(Float_t d,Float_t dkick,Float_t dPhi); protected: void preRead(TNtuple *); void postRead(void); Float_t fMaxD; Float_t fMaxDKick; Float_t fMaxDPhi; Float_t fD,fDKick,fDPhi; public: ClassDef(HRtEfficiencyKitMdc,1) }; class HRtEfficiencyKitMdc2 : public HRtEfficiencyKit { public: HRtEfficiencyKitMdc2(void); ~HRtEfficiencyKitMdc2(void) {} void loadParameters(Text_t file[]); protected: void preRead(TNtuple *); void postRead(void); HRtMatchingPar *fMatchingPar; Float_t fPar[3]; //d, dKick, dphi TString fParamFile; public: ClassDef(HRtEfficiencyKitMdc2,1) }; ////// Inlines ///////////////////////////////////////////////////// Float_t HRtEfficiencyMatrix::getP(UInt_t binP) { return fMinP + binP*fBinSizeP + fBinSizeP/2.; } Float_t HRtEfficiencyMatrix::getTheta(UInt_t binTheta) { return fMinTheta + binTheta*fBinSizeTheta + fBinSizeTheta/2.; } Float_t HRtEfficiencyMatrix::getPhi(UInt_t binPhi) { return fMinPhi + binPhi*fBinSizePhi + fBinSizePhi/2.; } Int_t HRtEfficiencyMatrix::getBinP(Float_t p) { return int(floor((p - fMinP) / fBinSizeP)); } Int_t HRtEfficiencyMatrix::getBinTheta(Float_t theta) { return int(floor((theta - fMinTheta)) / fBinSizeTheta); } Int_t HRtEfficiencyMatrix::getBinPhi(Float_t phi) { return int(floor((phi - fMinPhi)) / fBinSizePhi); } #endif