00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00014
00015 #ifndef CDANALYSIS_H
00016 #define CDANALYSIS_H
00017
00018 #include <map>
00019 #include <string>
00020 #include <vector>
00021 #include <fstream>
00022
00023 class TChain;
00024 class TClonesArray;
00025 class TFile;
00026 class TGraph;
00027 class TProfile;
00028 class TVector3;
00029
00030 #include "Conventions/SimFlag.h"
00031 class MuEnergyLoss;
00032
00033 class CDTrackedHitInfo;
00034 class CDXTalkHitInfo;
00035 class CDTrackerOptions;
00036 class CDTrackInfo;
00037 class CDPIDInfo;
00038
00039 class CDAnalysis : public TObject
00040 {
00041 public:
00042
00043 CDAnalysis();
00044 ~CDAnalysis();
00045
00046
00047 void CleanMuons();
00048 void Bb() const;
00049 void BbVsGminos();
00050 void BbEnVsRange() const;
00051 void BbThkFeVsRange() const;
00052 void ElectronResponse();
00053 void MuonCalorimetry();
00054 void MuonNearFar();
00055 void MuonResponse();
00056 void MuonSampleCuts();
00057 void MuonScatter();
00058 void MuonStVsPl();
00059 void PrintEvent(Int_t event);
00060 void PrintPIDStats();
00061 void StoppingMuonCalibration();
00062 void Template();
00063 void Template2();
00064 void TruthAnalysis();
00065 void TruthEnDep();
00066 void TruthEnDepFe();
00067 void TruthEventLength();
00068 void ValidateMC();
00069 void ValidateReco();
00070 void ValidatePIDInfo();
00071 void ValidateTrkHits();
00072 void ValidateTruth();
00073 void ValidateUnTrkHits();
00074 void ValidateXTalkHits();
00075
00076
00077
00078 static void InputFileName(std::string f);
00079
00080
00081 TGraph* TGraphMap(const std::map<Int_t,Float_t>& m) const;
00082 TGraph* TGraphVect(const std::vector<Double_t>& vX,
00083 const std::vector<Double_t>& vY) const;
00084 void TGraphMinMax(std::vector<TGraph*>& v) const;
00085 Int_t Rnd(Double_t x) const;
00086 void WriteOutHistos() const;
00087 Int_t RunNumber2RunPeriod(Int_t run) const;
00088 Int_t SumMapValues(const std::map<Int_t,Int_t>& mapIn) const;
00089
00090 private:
00091
00092 static std::string fInputFileName;
00093
00094
00095 void CalcAvStripForPSMuonCut(Int_t plane,Int_t strip,Int_t end);
00096 void CalcFirstLastPlane(Int_t plane);
00097 void CalcLastPlaneOnTrk();
00098 void CalcLowUpScint_TofDiff(Double_t time);
00099 void CalcNumPlanesHit(Int_t plane,Float_t pe);
00100 void CalcNumPlanesHitTrk(Int_t plane);
00101 void InitialiseLoopVariables();
00102 void InitialisePidVariables();
00103 void InitialiseHitInfoVariables();
00104 void MakeChain();
00105 void ReadInHitInfo(CDTrackedHitInfo* hitInfo);
00106 void ReadInHitInfo(CDXTalkHitInfo* hitInfo);
00107 void SetLoopVariables(Int_t entry);
00108 void SetRatioScEnToBeamEn();
00109 void SetRootFileObjects();
00110 void SetScEnDepPerMEU();
00111 void SetSigCorPerMEU();
00112
00113
00114 Float_t CalcDistToPlaneCentre(Int_t strip,Float_t transPos) const;
00115 Int_t CalcLastPlaneOnTrkNoXTalk() const;
00116 Int_t CalcLastPlaneTruth() const;
00117 Double_t CalcMeuPLCorrected(std::map<Int_t,Float_t> plEnDep,
00118 std::map<Int_t,Float_t> plPLCor,
00119 Int_t event,
00120 Float_t* GeVPerMeu) const;
00121 Float_t CalcPathLengthCorection(const TVector3& end1,
00122 const TVector3& end2) const;
00123 Bool_t CalcPLCor(const std::map<Int_t,TVector3>& mPlPos,
00124 std::map<Int_t,Float_t>& mPLCor) const;
00125 void CalcXorYandZ(Int_t strip,Int_t plane,
00126 Float_t& x,Float_t& y,Float_t& z) const;
00127 Bool_t CalcXYZ(std::map<Int_t,TVector3>& mPlPos) const;
00128 Bool_t CutByHandOnEventLength() const;
00129 Bool_t CutOnPSMuons() const;
00130 Bool_t CutByHandOnPid() const;
00131 Bool_t CutByHandOnPidForElec() const;
00132 Bool_t CutOnBadCalorimetry(Int_t plane,Int_t strip,Int_t end) const;
00133 Bool_t CutOnBadPedestals(Int_t plane,Int_t strip,Int_t end) const;
00134 Bool_t CutOnDeadChips() const;
00135 Bool_t CutOnEventLength() const;
00136 Bool_t CutOnEventLengthForElec() const;
00137 Bool_t CutOnFiducialVolume() const;
00138 Bool_t CutOnNumHitsPerPlane() const;
00139 Bool_t CutOnNumHitsPerPlane10() const;
00140 Bool_t CutOnNumPlanesHit(Int_t planesHit) const;
00141 Bool_t CutOnOverlap() const;
00142 Bool_t CutOnOverlapForElec() const;
00143 Bool_t CutOnPid() const;
00144 Bool_t CutOnPidForElec() const;
00145 Bool_t CutOnScint_TofDiff() const;
00146 Bool_t CutOnTrackQuality(Bool_t requireGoodTrack=true) const;
00147 Double_t dE_dxIterative(MuEnergyLoss& mat,
00148 Double_t energyRemaining,
00149 Double_t totalThk,Double_t rho,
00150 Double_t energyCutOff,Int_t slices) const;
00151 void DrawResponsePlot(std::string& title,TProfile* prof,
00152 TProfile* profX,TProfile* profT,
00153 const std::map<Int_t,Float_t>& num,
00154 const std::map<Int_t,Float_t>& numX,
00155 const std::map<Int_t,Float_t>& numT,
00156 std::string sXTitle="") const;
00157 void FillProfHisto(TProfile* prof,std::map<Int_t,Float_t>& counter,
00158 const std::map<Int_t,Float_t>& addMe,
00159 Int_t offset=0) const;
00160 void FillEnVsDist(std::map<Int_t,Float_t> plEnDep,
00161 std::map<Int_t,Float_t> plPLCor,Int_t event) const;
00162 void FlipVector(std::vector<Double_t>& v) const;
00163 void GetEvLenMinMax(Int_t& minPlane,Int_t& maxPlane) const;
00164 Int_t GetEventLength() const;
00165 void GetLowUpTimeCuts(Float_t& lowTime,Float_t& upTime) const;
00166 Double_t GetMainParticleEnergy() const;
00167 Double_t GetGreatestMainParticleEnergy(Int_t nEvents=200) const;
00168 Bool_t IsDoubleEnded(Int_t inplane) const;
00169 Bool_t IsGenuineOrXTalk(Int_t inplane) const;
00170 Bool_t IsPlaneGenuine(Int_t inplane) const;
00171 Bool_t IsPlaneSideHit(Int_t inplane,Int_t stripend) const;
00172 Bool_t IsPlaneXTalkOnly(Int_t inplane) const;
00173 Bool_t IsSharedPmtHit(Int_t inplane) const;
00174 Bool_t IsStraightTrack(Double_t mainX1Cut) const;
00175 Bool_t IsStraightTrack_Radius(Double_t radiusCut) const;
00176 std::vector<std::string> MakeFileList();
00177 void NormaliseVector(std::vector<Double_t>& v,Int_t mode=1) const;
00178 TFile* OpenFile(Int_t runNumber,std::string prefix="");
00179 ofstream* OpenTxtFile(Int_t runNumber,std::string prefix);
00180 std::string Pct(Double_t top,Double_t bottom) const;
00181 void PrintBasicInfo(std::string="") const;
00182 Float_t ReCalibrate(Float_t chargeAdc,Int_t plane,
00183 Int_t strip,Int_t stripend) const;
00184 void ScaleMap(std::map<Int_t,Float_t>& m,
00185 const std::map<Int_t,Float_t>& scaleFactor) const;
00186 void ScaleVector(std::vector<Double_t>& v,Double_t scaleFactor) const;
00187 void StandardSanityChecks() const;
00188 Bool_t StraightTrack_Radius(Double_t radiusCut) const;
00189 Float_t TrueDistToPlaneCentre(Int_t strip,Float_t xInStrFrame) const;
00190 Double_t TrueEnDep(Int_t inplane,Int_t event) const;
00191 Double_t TrueEnDepNotSc(Int_t inplane,Int_t event) const;
00192 void TrueHighLowEn(Float_t& highEn,Float_t& lowEn) const;
00193 Int_t TrueNumDigiScintHits(Int_t inplane,Int_t event) const;
00194 Int_t TrueMuonHunter(Int_t event);
00195 Double_t TrueMainPL(Int_t inplane,Int_t event) const;
00196 void TruePLCor(std::map<Int_t,Float_t>& mPLCor,Int_t event) const;
00197 Float_t TrueXInStripFrame(Int_t plane,Int_t strip,Int_t event) const;
00198
00199
00200 TFile* fOutFile;
00201 TChain* fTrackerTree;
00202 TChain* fOptTree;
00203 CDTrackerOptions* fTrkOpt;
00204 CDPIDInfo* fPIDInfo;
00205 CDTrackInfo* fTrackInfo;
00206 TClonesArray* fTrkHitInfo;
00207 TClonesArray* fUnTrkHitInfo;
00208 TClonesArray* fXTalkHits;
00209 TClonesArray* fTruthHitInfo;
00210
00211 Int_t fSnarl;
00212 Int_t fSec;
00213 Int_t fNumDeadChips;
00214 Float_t fTemperature;
00215 Float_t fBeamMomentum;
00216 SimFlag::SimFlag_t fSimFlag;
00217 Int_t fRunNumber;
00218 Int_t fSubRun;
00219 Int_t fStartSnarl;
00220 Int_t fEndSnarl;
00221 Int_t fStartTime;
00222 Int_t fEndTime;
00223 Double_t fMainParticleEnergy;
00224 Int_t fEvents;
00225
00226 Int_t fFirstPlane;
00227 Int_t fLastPlane;
00228 Int_t fLastPlaneOdd;
00229 Int_t fLastPlaneEven;
00230 std::map<Int_t,Int_t> fNumPlanesHitTrk;
00231 std::map<Int_t,Int_t> fNumPlanesHitAll;
00232 std::map<Int_t,Int_t> fNumPlanesHit25;
00233 std::map<Int_t,Int_t> fNumPlanesHitPeCut;
00234 std::map<Int_t,Int_t> fNumPlanesHitPeCut10;
00235 Float_t fNumHitsPerPlane;
00236 Float_t fNumHitsPerPlane25;
00237 Float_t fNumHitsPerPlanePeCut10;
00238 Int_t fStripsFromCentrePeCut;
00239
00240 Float_t fAvStrip;
00241 Float_t fStCount;
00242 Float_t fAvStrip1;
00243 Float_t fStCount1;
00244 Float_t fAvStrip2;
00245 Float_t fStCount2;
00246
00247 Float_t fLowScint_Tof;
00248 Float_t fUpScint_Tof;
00249
00250
00251 Bool_t fTriggerPMT;
00252 Bool_t fFafErr;
00253 Bool_t fSparseErr;
00254 Int_t fTrigSource;
00255
00256 Int_t fKovADC1;
00257 Int_t fKovTimeStamp1;
00258 Int_t fKovADC2;
00259 Int_t fKovTimeStamp2;
00260 Int_t fKovADC3;
00261 Int_t fKovTimeStamp3;
00262
00263 Int_t fSnarlTimeFrame;
00264 ULong_t fSnarlMinTimeStamp;
00265 ULong_t fSnarlMaxTimeStamp;
00266
00267 Int_t fTofTDC0;
00268 Int_t fTofTDC1;
00269 Int_t fTofTDC2;
00270 Int_t fTofADC0;
00271
00272 Int_t fTofADC1;
00273
00274 Int_t fTofADC2;
00275
00276 Int_t fTofADCTimeStamp0;
00277 Int_t fTofADCTimeStamp1;
00278 Int_t fTofADCTimeStamp2;
00279 Int_t fTofTimeStamp;
00280
00281 Int_t fTickSinceLast;
00282
00283
00284 Bool_t fNoOverlap;
00285 Bool_t fInCERTime;
00286 UInt_t fPIDType;
00287 UInt_t fNoOverlapBits;
00288 UInt_t fInCERTimeBits;
00289 Float_t fOLChi2;
00290
00291
00292 Double_t fTime;
00293 Int_t fPlane;
00294 Int_t fResultOdd;
00295 Int_t fResultEven;
00296 Int_t fStrip;
00297 Int_t fStripend;
00298 Float_t fTransPos;
00299
00300
00301 Bool_t fO1;
00302 Bool_t fO2;
00303 Bool_t fE1;
00304 Bool_t fE2;
00305
00306
00307 Float_t fChargeAdc;
00308 Float_t fChargeMip;
00309 Float_t fChargeSigCor;
00310 Float_t fChargeSigLin;
00311 Float_t fChargePe;
00312 Float_t fGain;
00313
00314
00315 Float_t fSigCorsPerMip;
00316 Float_t fSigCorPerMEU;
00317 Float_t fScEnDepPerMEU;
00318 Float_t fRatioScEnToBeamEn;
00319
00320
00321 Float_t fMeuVsEvLenCutM;
00322 Float_t fSigCorVsDistM;
00323 Float_t fPeakLastPlane;
00324 Float_t fPeakPlaneSigCors;
00325
00326
00327 Int_t fMyPiMuCounter;
00328 Int_t fPidPiMuCounter;
00329 Int_t fMyElecCounter;
00330 Int_t fPidElecCounter;
00331 Int_t fBothPiMuCounter;
00332 Int_t fBothElecCounter;
00333
00334 Float_t fAvTemperature;
00335
00336 std::string fS;
00337 Bool_t fDoReCalibration;
00338
00339 ClassDef(CDAnalysis,0)
00340 };
00341
00342 #endif // CDANALYSIS_H