Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

CDAnalysis Class Reference

#include <CDAnalysis.h>

List of all members.

Public Member Functions

 CDAnalysis ()
 ~CDAnalysis ()
void CleanMuons ()
void Bb () const
void BbVsGminos ()
void BbEnVsRange () const
void BbThkFeVsRange () const
void ElectronResponse ()
void MuonCalorimetry ()
void MuonNearFar ()
void MuonResponse ()
void MuonSampleCuts ()
void MuonScatter ()
void MuonStVsPl ()
void PrintEvent (Int_t event)
void PrintPIDStats ()
void StoppingMuonCalibration ()
void Template ()
void Template2 ()
void TruthAnalysis ()
void TruthEnDep ()
void TruthEnDepFe ()
void TruthEventLength ()
void ValidateMC ()
void ValidateReco ()
void ValidatePIDInfo ()
void ValidateTrkHits ()
void ValidateTruth ()
void ValidateUnTrkHits ()
void ValidateXTalkHits ()
TGraph * TGraphMap (const std::map< Int_t, Float_t > &m) const
TGraph * TGraphVect (const std::vector< Double_t > &vX, const std::vector< Double_t > &vY) const
void TGraphMinMax (std::vector< TGraph * > &v) const
Int_t Rnd (Double_t x) const
void WriteOutHistos () const
Int_t RunNumber2RunPeriod (Int_t run) const
Int_t SumMapValues (const std::map< Int_t, Int_t > &mapIn) const

Static Public Member Functions

void InputFileName (std::string f)

Private Member Functions

void CalcAvStripForPSMuonCut (Int_t plane, Int_t strip, Int_t end)
void CalcFirstLastPlane (Int_t plane)
void CalcLastPlaneOnTrk ()
void CalcLowUpScint_TofDiff (Double_t time)
void CalcNumPlanesHit (Int_t plane, Float_t pe)
void CalcNumPlanesHitTrk (Int_t plane)
void InitialiseLoopVariables ()
void InitialisePidVariables ()
void InitialiseHitInfoVariables ()
void MakeChain ()
void ReadInHitInfo (CDTrackedHitInfo *hitInfo)
void ReadInHitInfo (CDXTalkHitInfo *hitInfo)
void SetLoopVariables (Int_t entry)
void SetRatioScEnToBeamEn ()
void SetRootFileObjects ()
void SetScEnDepPerMEU ()
void SetSigCorPerMEU ()
Float_t CalcDistToPlaneCentre (Int_t strip, Float_t transPos) const
Int_t CalcLastPlaneOnTrkNoXTalk () const
Int_t CalcLastPlaneTruth () const
Double_t CalcMeuPLCorrected (std::map< Int_t, Float_t > plEnDep, std::map< Int_t, Float_t > plPLCor, Int_t event, Float_t *GeVPerMeu) const
Float_t CalcPathLengthCorection (const TVector3 &end1, const TVector3 &end2) const
Bool_t CalcPLCor (const std::map< Int_t, TVector3 > &mPlPos, std::map< Int_t, Float_t > &mPLCor) const
void CalcXorYandZ (Int_t strip, Int_t plane, Float_t &x, Float_t &y, Float_t &z) const
Bool_t CalcXYZ (std::map< Int_t, TVector3 > &mPlPos) const
Bool_t CutByHandOnEventLength () const
Bool_t CutOnPSMuons () const
Bool_t CutByHandOnPid () const
Bool_t CutByHandOnPidForElec () const
Bool_t CutOnBadCalorimetry (Int_t plane, Int_t strip, Int_t end) const
Bool_t CutOnBadPedestals (Int_t plane, Int_t strip, Int_t end) const
Bool_t CutOnDeadChips () const
Bool_t CutOnEventLength () const
Bool_t CutOnEventLengthForElec () const
Bool_t CutOnFiducialVolume () const
Bool_t CutOnNumHitsPerPlane () const
Bool_t CutOnNumHitsPerPlane10 () const
Bool_t CutOnNumPlanesHit (Int_t planesHit) const
Bool_t CutOnOverlap () const
Bool_t CutOnOverlapForElec () const
Bool_t CutOnPid () const
Bool_t CutOnPidForElec () const
Bool_t CutOnScint_TofDiff () const
Bool_t CutOnTrackQuality (Bool_t requireGoodTrack=true) const
Double_t dE_dxIterative (MuEnergyLoss &mat, Double_t energyRemaining, Double_t totalThk, Double_t rho, Double_t energyCutOff, Int_t slices) const
void DrawResponsePlot (std::string &title, TProfile *prof, TProfile *profX, TProfile *profT, const std::map< Int_t, Float_t > &num, const std::map< Int_t, Float_t > &numX, const std::map< Int_t, Float_t > &numT, std::string sXTitle="") const
void FillProfHisto (TProfile *prof, std::map< Int_t, Float_t > &counter, const std::map< Int_t, Float_t > &addMe, Int_t offset=0) const
void FillEnVsDist (std::map< Int_t, Float_t > plEnDep, std::map< Int_t, Float_t > plPLCor, Int_t event) const
void FlipVector (std::vector< Double_t > &v) const
void GetEvLenMinMax (Int_t &minPlane, Int_t &maxPlane) const
Int_t GetEventLength () const
void GetLowUpTimeCuts (Float_t &lowTime, Float_t &upTime) const
Double_t GetMainParticleEnergy () const
Double_t GetGreatestMainParticleEnergy (Int_t nEvents=200) const
Bool_t IsDoubleEnded (Int_t inplane) const
Bool_t IsGenuineOrXTalk (Int_t inplane) const
Bool_t IsPlaneGenuine (Int_t inplane) const
Bool_t IsPlaneSideHit (Int_t inplane, Int_t stripend) const
Bool_t IsPlaneXTalkOnly (Int_t inplane) const
Bool_t IsSharedPmtHit (Int_t inplane) const
Bool_t IsStraightTrack (Double_t mainX1Cut) const
Bool_t IsStraightTrack_Radius (Double_t radiusCut) const
std::vector< std::string > MakeFileList ()
void NormaliseVector (std::vector< Double_t > &v, Int_t mode=1) const
TFile * OpenFile (Int_t runNumber, std::string prefix="")
ofstream * OpenTxtFile (Int_t runNumber, std::string prefix)
std::string Pct (Double_t top, Double_t bottom) const
void PrintBasicInfo (std::string="") const
Float_t ReCalibrate (Float_t chargeAdc, Int_t plane, Int_t strip, Int_t stripend) const
void ScaleMap (std::map< Int_t, Float_t > &m, const std::map< Int_t, Float_t > &scaleFactor) const
void ScaleVector (std::vector< Double_t > &v, Double_t scaleFactor) const
void StandardSanityChecks () const
Bool_t StraightTrack_Radius (Double_t radiusCut) const
Float_t TrueDistToPlaneCentre (Int_t strip, Float_t xInStrFrame) const
Double_t TrueEnDep (Int_t inplane, Int_t event) const
Double_t TrueEnDepNotSc (Int_t inplane, Int_t event) const
void TrueHighLowEn (Float_t &highEn, Float_t &lowEn) const
Int_t TrueNumDigiScintHits (Int_t inplane, Int_t event) const
Int_t TrueMuonHunter (Int_t event)
Double_t TrueMainPL (Int_t inplane, Int_t event) const
void TruePLCor (std::map< Int_t, Float_t > &mPLCor, Int_t event) const
Float_t TrueXInStripFrame (Int_t plane, Int_t strip, Int_t event) const

Private Attributes

TFile * fOutFile
TChain * fTrackerTree
TChain * fOptTree
CDTrackerOptionsfTrkOpt
CDPIDInfofPIDInfo
CDTrackInfofTrackInfo
TClonesArray * fTrkHitInfo
TClonesArray * fUnTrkHitInfo
TClonesArray * fXTalkHits
TClonesArray * fTruthHitInfo
Int_t fSnarl
Int_t fSec
Int_t fNumDeadChips
Float_t fTemperature
Float_t fBeamMomentum
SimFlag::SimFlag_t fSimFlag
Int_t fRunNumber
Int_t fSubRun
Int_t fStartSnarl
Int_t fEndSnarl
Int_t fStartTime
Int_t fEndTime
Double_t fMainParticleEnergy
Int_t fEvents
Int_t fFirstPlane
Int_t fLastPlane
Int_t fLastPlaneOdd
Int_t fLastPlaneEven
std::map< Int_t, Int_t > fNumPlanesHitTrk
std::map< Int_t, Int_t > fNumPlanesHitAll
std::map< Int_t, Int_t > fNumPlanesHit25
std::map< Int_t, Int_t > fNumPlanesHitPeCut
std::map< Int_t, Int_t > fNumPlanesHitPeCut10
Float_t fNumHitsPerPlane
Float_t fNumHitsPerPlane25
Float_t fNumHitsPerPlanePeCut10
Int_t fStripsFromCentrePeCut
Float_t fAvStrip
Float_t fStCount
Float_t fAvStrip1
Float_t fStCount1
Float_t fAvStrip2
Float_t fStCount2
Float_t fLowScint_Tof
Float_t fUpScint_Tof
Bool_t fTriggerPMT
Bool_t fFafErr
Bool_t fSparseErr
Int_t fTrigSource
Int_t fKovADC1
Int_t fKovTimeStamp1
Int_t fKovADC2
Int_t fKovTimeStamp2
Int_t fKovADC3
Int_t fKovTimeStamp3
Int_t fSnarlTimeFrame
ULong_t fSnarlMinTimeStamp
ULong_t fSnarlMaxTimeStamp
Int_t fTofTDC0
Int_t fTofTDC1
Int_t fTofTDC2
Int_t fTofADC0
Int_t fTofADC1
Int_t fTofADC2
Int_t fTofADCTimeStamp0
Int_t fTofADCTimeStamp1
Int_t fTofADCTimeStamp2
Int_t fTofTimeStamp
Int_t fTickSinceLast
Bool_t fNoOverlap
Bool_t fInCERTime
UInt_t fPIDType
UInt_t fNoOverlapBits
UInt_t fInCERTimeBits
Float_t fOLChi2
Double_t fTime
Int_t fPlane
Int_t fResultOdd
Int_t fResultEven
Int_t fStrip
Int_t fStripend
Float_t fTransPos
Bool_t fO1
Bool_t fO2
Bool_t fE1
Bool_t fE2
Float_t fChargeAdc
Float_t fChargeMip
Float_t fChargeSigCor
Float_t fChargeSigLin
Float_t fChargePe
Float_t fGain
Float_t fSigCorsPerMip
Float_t fSigCorPerMEU
Float_t fScEnDepPerMEU
Float_t fRatioScEnToBeamEn
Float_t fMeuVsEvLenCutM
Float_t fSigCorVsDistM
Float_t fPeakLastPlane
Float_t fPeakPlaneSigCors
Int_t fMyPiMuCounter
Int_t fPidPiMuCounter
Int_t fMyElecCounter
Int_t fPidElecCounter
Int_t fBothPiMuCounter
Int_t fBothElecCounter
Float_t fAvTemperature
std::string fS
Bool_t fDoReCalibration

Static Private Attributes

std::string fInputFileName = ""


Constructor & Destructor Documentation

CDAnalysis::CDAnalysis  ) 
 

Definition at line 64 of file CDAnalysis.cxx.

References MSG.

00065 {
00066   MSG("CDAnalysis",Msg::kInfo)
00067       <<"Running CDAnalysis Constructor..."<<endl;
00068 
00069   //initialise variables
00070   fOutFile=0;//initialise output file pointer
00071   fTrackerTree=0;
00072   fOptTree=0;
00073   fTrkOpt=0;//tracking options
00074   fPIDInfo=0;
00075   fTrackInfo=0;
00076   fTrkHitInfo=0;
00077   fUnTrkHitInfo=0;
00078   fXTalkHits=0;
00079   fTruthHitInfo=0;
00080   
00081   fSnarl=-1;
00082   fSec=-1;
00083   fNumDeadChips=-1;
00084   fTemperature=-1;
00085   fBeamMomentum=0;
00086   fSimFlag=SimFlag::kUnknown;
00087   fRunNumber=0;
00088   fSubRun=0;
00089   fStartSnarl=0;
00090   fEndSnarl=0;
00091   fStartTime=0;
00092   fEndTime=0;
00093   fMainParticleEnergy=0;
00094   fEvents=-1;
00095 
00096   this->InitialiseLoopVariables();
00097   this->InitialiseHitInfoVariables();
00098   this->InitialisePidVariables();
00099 
00100   //set a default value of 1 so it stays as sigcor
00101   fSigCorsPerMip=1;
00102   fSigCorPerMEU=1;
00103   fScEnDepPerMEU=1;
00104   fRatioScEnToBeamEn=1;
00105   
00106   fMeuVsEvLenCutM=0;
00107   fSigCorVsDistM=0;
00108   fPeakLastPlane=0;
00109   fPeakPlaneSigCors=0;
00110   fMyPiMuCounter=0;
00111   fPidPiMuCounter=0;
00112   fMyElecCounter=0;
00113   fPidElecCounter=0;
00114   fBothPiMuCounter=0;
00115   fBothElecCounter=0;
00116   fAvTemperature=0;
00117 
00118   fS="";//general purpose string
00119   fDoReCalibration=false;//don't do recalibration by default
00120 
00122   //all data members are initialised by this point...
00124 
00125   this->MakeChain();
00126   this->SetRootFileObjects();
00127 
00128   //get the main particle energy
00129   fMainParticleEnergy=this->GetGreatestMainParticleEnergy();
00130   if (fMainParticleEnergy>0){
00131     MSG("CDAnalysis",Msg::kInfo)
00132       <<"Found main energy="<<fMainParticleEnergy<<endl;
00133     MSG("CDAnalysis",Msg::kInfo)
00134       <<"Beam Momentum from file="<<fBeamMomentum<<endl;
00135   }
00136 
00137   //setup some root stuff
00138   //include the under and overflow counts
00139   gStyle->SetOptStat(1111111);
00140   gStyle->SetOptFit(1111);
00141   gStyle->SetPalette(1,(Int_t*)0);
00142 
00143   //do these last in the constructor
00144   //set the values appropriately if possible
00145   this->SetSigCorPerMEU();
00146   this->SetScEnDepPerMEU();
00147   this->SetRatioScEnToBeamEn();
00148 
00149   MSG("CDAnalysis",Msg::kInfo)
00150       <<"Finished CDAnalysis Constructor"<<endl;
00151 }

CDAnalysis::~CDAnalysis  ) 
 

Definition at line 155 of file CDAnalysis.cxx.

References fOutFile, and MSG.

00156 {
00157   MSG("CDAnalysis",Msg::kDebug)
00158       <<"Running CDAnalysis Destructor..."<<endl;
00159   
00160   if (fOutFile){
00161     fOutFile->Close();
00162   }
00163 
00164   MSG("CDAnalysis",Msg::kDebug)
00165       <<"Finished CDAnalysis Destructor"<<endl;
00166 }


Member Function Documentation

void CDAnalysis::Bb  )  const
 

Definition at line 12247 of file CDAnalysis.cxx.

References CDSimpleMC::CalcRatioScToFe(), count, CDSimpleMC::fdE_dxFe, CDSimpleMC::fdE_dxSc, CDSimpleMC::fEn, CDSimpleMC::fEnAlx2Deposited, CDSimpleMC::fEnDeposited, CDSimpleMC::fEnDepositedPl, CDSimpleMC::fEnFeDeposited, CDSimpleMC::fEnRatio, CDSimpleMC::fEnScDeposited, CDSimpleMC::fEnTiO2x2Deposited, FlipVector(), CDSimpleMC::fMomGeV, CDSimpleMC::fMomSc, CDSimpleMC::fMomScGeV, Form(), CDSimpleMC::fX, CDSimpleMC::fXAlx2, CDSimpleMC::fXFe, CDSimpleMC::fXPlanes, CDSimpleMC::fXPlanesRatio, CDSimpleMC::fXSc, CDSimpleMC::fXScPlanes, CDSimpleMC::fXTiO2x2, CDSimpleMC::GetTotalNumScPlanesHit(), legend(), MSG, CDSimpleMC::RunMC(), CDSimpleMC::SetParticleMomentum(), CDSimpleMC::SetThkFe(), and TGraphVect().

12248 {
12249   Float_t sum15_18=0;
12250   Float_t sum15_18Sc=0;
12251   Float_t av15PlanesSc=0;
12252   Float_t avPlanes0to14Sc=0;
12253   Float_t sum15_18Counter=0;
12254   vector<Double_t> eDepositedPl;
12255  
12256   //create simpleMC object
12257   CDSimpleMC mc;
12258   mc.SetThkFe(2.54);
12259   mc.SetParticleMomentum(5000);
12260   //run mc
12261   mc.RunMC();
12262   //get ratios too
12263   mc.CalcRatioScToFe();
12264   /*
12265 //2.5
12266 Using pl=0 in my extra special window, endep=2.00385
12267 Using pl=1 in my extra special window, endep=1.99883
12268 Using pl=2 in my extra special window, endep=1.99371
12269 Using pl=3 in my extra special window, endep=1.98848
12270 Using pl=4 in my extra special window, endep=1.98315
12271 Using pl=5 in my extra special window, endep=1.97771
12272 Using pl=6 in my extra special window, endep=1.97217
12273 Using pl=7 in my extra special window, endep=1.96654
12274 Using pl=8 in my extra special window, endep=1.96082
12275 Using pl=9 in my extra special window, endep=1.95502
12276 Using pl=10 in my extra special window, endep=1.94916
12277 Using pl=11 in my extra special window, endep=1.94325
12278 Using pl=12 in my extra special window, endep=1.93733
12279 Using pl=13 in my extra special window, endep=1.93142
12280 Using pl=14 in my extra special window, endep=1.92558
12281 
12282   //2.54
12283  Using pl=0 in my extra special window, endep=2.00385
12284 Using pl=1 in my extra special window, endep=1.99876
12285 Using pl=2 in my extra special window, endep=1.99355
12286 Using pl=3 in my extra special window, endep=1.98824
12287 Using pl=4 in my extra special window, endep=1.98283
12288 Using pl=5 in my extra special window, endep=1.9773
12289 Using pl=6 in my extra special window, endep=1.97168
12290 Using pl=7 in my extra special window, endep=1.96595
12291 Using pl=8 in my extra special window, endep=1.96014
12292 Using pl=9 in my extra special window, endep=1.95425
12293 Using pl=10 in my extra special window, endep=1.94829
12294 Using pl=11 in my extra special window, endep=1.94229
12295 Using pl=12 in my extra special window, endep=1.93628
12296 Using pl=13 in my extra special window, endep=1.93029
12297 Using pl=14 in my extra special window, endep=1.92439
12298 
12299 //2.5
12300 Using pl=17 in my special window, endep=2.0194
12301 Using pl=18 in my special window, endep=2.01471
12302 Using pl=19 in my special window, endep=2.00992
12303 Using pl=20 in my special window, endep=2.00503
12304 Using pl=21 in my special window, endep=2.00004
12305 Using pl=22 in my special window, endep=1.99494
12306 Using pl=23 in my special window, endep=1.98973
12307 Using pl=24 in my special window, endep=1.98442
12308 Using pl=25 in my special window, endep=1.97901
12309 Using pl=26 in my special window, endep=1.9735
12310 Using pl=27 in my special window, endep=1.96789
12311 Using pl=28 in my special window, endep=1.96219
12312 Using pl=29 in my special window, endep=1.95641
12313 Using pl=30 in my special window, endep=1.95056
12314 Using pl=31 in my special window, endep=1.94466
12315 
12316 //2.54
12317 Using pl=17 in my special window, endep=2.01823
12318 Using pl=18 in my special window, endep=2.01345
12319 Using pl=19 in my special window, endep=2.00856
12320 Using pl=20 in my special window, endep=2.00357
12321 Using pl=21 in my special window, endep=1.99847
12322 Using pl=22 in my special window, endep=1.99326
12323 Using pl=23 in my special window, endep=1.98794
12324 Using pl=24 in my special window, endep=1.98252
12325 Using pl=25 in my special window, endep=1.97699
12326 Using pl=26 in my special window, endep=1.97136
12327 Using pl=27 in my special window, endep=1.96563
12328 Using pl=28 in my special window, endep=1.95981
12329 Using pl=29 in my special window, endep=1.95391
12330 Using pl=30 in my special window, endep=1.94795
12331 Using pl=31 in my special window, endep=1.94195
12332   */
12333 
12334 
12335 
12336   for (UInt_t i=0;i<mc.fEnScDeposited.size();i++){
12337     if (i<=14){
12338       MSG("CDAnalysis",Msg::kInfo)
12339         <<"Using pl="<<i<<" in my extra special window, endep="
12340         <<mc.fEnScDeposited[i]<<endl; 
12341       avPlanes0to14Sc+=mc.fEnScDeposited[i];
12342     }
12343 
12344     if (i>=17 && i<=31){
12345       MSG("CDAnalysis",Msg::kInfo)
12346         <<"Using pl="<<i<<" in my special window, endep="
12347         <<mc.fEnScDeposited[i]<<endl; 
12348       av15PlanesSc+=mc.fEnScDeposited[i];
12349     }
12350   }
12351   //calc the average
12352   av15PlanesSc/=15;
12353   avPlanes0to14Sc/=15;
12354   MSG("CDAnalysis",Msg::kInfo)
12355     <<"Average scint en. dep. for planes 17-31 inclusive="
12356     <<av15PlanesSc<<endl
12357     <<"Average scint en. dep. for planes 0-14 inclusive="
12358     <<avPlanes0to14Sc<<endl;
12359   
12361   //section for sliding window
12363   
12364   vector<TProfile*> pSigCorVsDist;
12365   vector<Int_t> vWindowSize;
12366   vector<Float_t> bigAv;
12367   vector<Int_t> bigAvCounter;
12368   Int_t minEventLength=40;
12369 
12370   //need a new vector for this!!!!
12373   MSG("CDAnalysis",Msg::kInfo) 
12374     <<"size="<<mc.fEnScDeposited.size()<<endl;
12375 
12376   //initialise the profile histos
12377   for (Int_t p=20;p>1;p--){
12378     vWindowSize.push_back(p);
12379     bigAv.push_back(0);
12380     bigAvCounter.push_back(0);
12381   }
12382   
12383   for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
12384        windowSize!=vWindowSize.end();++windowSize){
12385     
12386     string sName=Form("%d",*windowSize);
12387     pSigCorVsDist.push_back
12388       (new TProfile(("pSigCorVsDist"+sName).c_str(),
12389                     ("pSigCorVsDist"+sName).c_str(),100,-2,40));
12390   }
12391 
12392   vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12393   vector<Float_t>::iterator av=bigAv.begin();
12394   vector<Int_t>::iterator count=bigAvCounter.begin();
12395   
12396   //loop over the different window sizes
12397   for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
12398        windowSize!=vWindowSize.end();++windowSize){
12399     MSG("CDAnalysis",Msg::kDebug)
12400       <<"Window size="<<*windowSize<<endl;
12401  
12402     //slide the window along from the end to 40-windowSize
12403     for (Int_t p=0;p<minEventLength-*windowSize;p++){
12404       Int_t lastPlane=mc.fEnScDeposited.size()-1;
12405       Int_t windowStart=lastPlane-p;
12406 
12407       //loop through the hits in the window      
12408       for (Int_t i=0;i<*windowSize;i++){
12409         Int_t plane=windowStart-i;
12410         
12411         (*prof)->Fill(p,mc.fEnScDeposited[plane]);
12412         (*av)+=mc.fEnScDeposited[plane];
12413         (*count)++;
12414 
12415         //calculate the best window value
12416         if (*windowSize==15 && windowStart==lastPlane-18){
12417           MSG("CDAnalysis",Msg::kInfo)
12418             <<"Using pl="<<plane<<" in window"<<endl;
12419           sum15_18+=mc.fEnDepositedPl[plane];
12420           sum15_18Sc+=mc.fEnScDeposited[plane];
12421           sum15_18Counter++;
12422         }
12423       }
12424 
12425       
12426 
12427     }
12428     av++;
12429     count++;
12430     prof++;
12431   }
12432 
12433   //turn on the stats box printing
12434   gStyle->SetOptStat(11);
12435 
12436   TCanvas *cProf=new TCanvas("cProf","Prof",0,0,1200,800);
12437   cProf->SetFillColor(0);
12438   string sName="SlidingWindowBB.ps";
12439   cProf->Print((sName+"[").c_str());
12440   gErrorIgnoreLevel=1;
12441   //plot the unnormalised prof first
12442   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12443        prof!=pSigCorVsDist.end();++prof){      
12444     cProf->Clear();
12445     (*prof)->Draw();
12446     (*prof)->SetTitle("Energy Deposited in Sliding Window");
12447     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
12448     (*prof)->GetYaxis()->SetTitle("Energy Deposited (MeV)");
12449     (*prof)->GetXaxis()->CenterTitle();
12450     (*prof)->GetYaxis()->CenterTitle();
12451     cProf->Print(sName.c_str());
12452   }
12453 
12454   //now normalise the prof
12455   av=bigAv.begin();
12456   count=bigAvCounter.begin();
12457   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12458        prof!=pSigCorVsDist.end();++prof){
12459       
12460     //normalise the prof and scale the axes
12461     MSG("CDAnalysis",Msg::kInfo)
12462       <<"bigCounter="<<*count<<", bigAv="<<*av<<endl;
12463     if (*av>0) (*prof)->Scale((*count)/(*av));
12464     (*prof)->SetMaximum(1.2);
12465     (*prof)->SetMinimum(0.8);
12466       
12467     cProf->Clear();
12468     (*prof)->Draw();
12469     (*prof)->SetTitle("Normalised Energy Deposited in Sliding Window");
12470     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
12471     (*prof)->GetYaxis()->SetTitle("Normalised Energy Deposited");
12472     (*prof)->GetXaxis()->CenterTitle();
12473     (*prof)->GetYaxis()->CenterTitle();
12474     cProf->Print(sName.c_str());
12475     av++;
12476     count++;
12477   }
12478   //close the file
12479   gErrorIgnoreLevel=0;
12480   cProf->Print((sName+"]").c_str());
12481 
12482   TLegend *legend = new TLegend(0.85, 0.7, 0.9, 0.9);
12483   legend->SetBorderSize(0);
12484   legend->SetFillColor(0);
12485   legend->SetTextSize(0.035);
12486 
12487   //now do a few profs on the same plot
12488   TCanvas *cProf2=new TCanvas("cProf2","Prof",0,0,1200,800);
12489   cProf2->SetFillColor(0);
12490   sName="SlidingWindowAll.ps";
12491   //cProf2->Print((sName+"[").c_str());
12492   Int_t counter=0;
12493   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12494        prof!=pSigCorVsDist.end();++prof){
12495 
12496     (*prof)->SetMaximum(1.09);
12497     (*prof)->SetMinimum(0.96);
12498 
12499     //count which prof got to
12500     counter++;
12501 
12502     //decide which profs to draw
12503     static Bool_t firstTime=true;
12504     if (counter==1 || counter==6 || counter==11){ 
12505       if (firstTime) {
12506         (*prof)->Draw();
12507         firstTime=false;
12508       }
12509       else  (*prof)->Draw("sames");
12510 
12511       (*prof)->SetTitle("Normalised Energy Deposited in Sliding Window");
12512       (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
12513       (*prof)->GetYaxis()->SetTitle("Normalised Energy Deposition");
12514       (*prof)->GetXaxis()->CenterTitle();
12515       (*prof)->GetYaxis()->CenterTitle();
12516       static Int_t color=2;
12517       (*prof)->SetLineColor(color);
12518       color+=2;
12519       string sWindowSize=Form("%d",21-counter);
12520       string sGraph=" Window size = ";
12521       sGraph+=sWindowSize;
12522       sGraph+=" planes";
12523       legend->AddEntry((*prof),sGraph.c_str(),"l");
12524     }
12525   }
12526   legend->Draw();
12527 
12528   this->FlipVector(mc.fXScPlanes);
12529   TGraph* eLossSc=TGraphVect(mc.fXScPlanes,mc.fEnScDeposited);
12530   TCanvas *cELossSc=new TCanvas("cELossSc","ELossSc",
12531                                    0,0,1200,800);
12532   cELossSc->SetFillColor(0);
12533   eLossSc->Draw("AP");
12534   eLossSc->SetTitle("Energy Loss in Scintillator");
12535   eLossSc->GetXaxis()->SetTitle("Distance from end of track (planes)");
12536   eLossSc->GetYaxis()->SetTitle("Energy Loss (MeV)");
12537   eLossSc->GetXaxis()->CenterTitle();
12538   eLossSc->GetYaxis()->CenterTitle();
12539   eLossSc->SetMarkerStyle(3);
12540   eLossSc->SetMarkerColor(2);
12541   eLossSc->SetMarkerSize(0.8);
12542 
12543   this->FlipVector(mc.fX);
12544   TGraph* energyLoss=TGraphVect(mc.fX,mc.fEnDeposited);
12545   TCanvas *cEnergyLoss=new TCanvas("cEnergyLoss","EnergyLoss",
12546                                    0,0,1200,800);
12547   cEnergyLoss->SetFillColor(0);
12548   energyLoss->Draw("AP");
12549   energyLoss->SetTitle("Energy Loss in Scintillator and Iron");
12550   energyLoss->GetXaxis()->SetTitle("Distance from end of track (cm)");
12551   energyLoss->GetYaxis()->SetTitle("Energy Loss (MeV)");
12552   energyLoss->GetXaxis()->CenterTitle();
12553   energyLoss->GetYaxis()->CenterTitle();
12554   energyLoss->SetMarkerStyle(3);
12555   energyLoss->SetMarkerColor(2);
12556   energyLoss->SetMarkerSize(0.8);
12557 
12558   this->FlipVector(mc.fXPlanes);
12559   TGraph* energyloss2=TGraphVect(mc.fXPlanes,mc.fEnDeposited);
12560   TCanvas *cEnergyloss2=new TCanvas("cEnergyloss2","Energyloss2",
12561                                    0,0,1200,800);
12562   cEnergyloss2->SetFillColor(0);
12563   energyloss2->Draw("AP");
12564   energyloss2->SetTitle("Energy Loss in Scintillator and Iron");
12565   energyloss2->GetXaxis()->SetTitle("Distance from end of track (planes)");
12566   energyloss2->GetYaxis()->SetTitle("Energy Loss (MeV)");
12567   energyloss2->GetXaxis()->CenterTitle();
12568   energyloss2->GetYaxis()->CenterTitle();
12569   energyloss2->SetMarkerStyle(3);
12570   energyloss2->SetMarkerColor(2);
12571   energyloss2->SetMarkerSize(0.8);
12572 
12573   this->FlipVector(mc.fXFe);
12574   TGraph* gXFevsEn=TGraphVect(mc.fXFe,mc.fEnFeDeposited);
12575   this->FlipVector(mc.fXSc);
12576   TGraph* gXScvsEn=TGraphVect(mc.fXSc,mc.fEnScDeposited);
12577   this->FlipVector(mc.fXAlx2);
12578   TGraph* gXAlx2vsEn=TGraphVect(mc.fXAlx2,mc.fEnAlx2Deposited);
12579   this->FlipVector(mc.fXTiO2x2);
12580   TGraph* gXTiO2x2vsEn=TGraphVect(mc.fXTiO2x2,mc.fEnTiO2x2Deposited);
12581   TCanvas *cEnergyloss3=new TCanvas("cEnergyloss3","Energyloss3",
12582                                     0,0,1200,800);
12583   cEnergyloss3->SetFillColor(0);
12584   cEnergyloss3->Divide(2,1);
12585   cEnergyloss3->cd(1);
12586   gXFevsEn->Draw("AP");
12587   gXFevsEn->SetTitle("Energy Loss in Iron");
12588   gXFevsEn->GetXaxis()->SetTitle("Distance from end of track (cm)");
12589   gXFevsEn->GetYaxis()->SetTitle("Energy Loss (MeV)");
12590   gXFevsEn->GetXaxis()->CenterTitle();
12591   gXFevsEn->GetYaxis()->CenterTitle();
12592   gXFevsEn->SetMarkerStyle(3);
12593   gXFevsEn->SetMarkerColor(2);
12594   gXFevsEn->SetMarkerSize(0.8);
12595   gXFevsEn->SetMinimum(0.00001);
12596   gXFevsEn->SetMaximum(50);
12597 
12598   gXScvsEn->Draw("P");
12599   gXScvsEn->SetTitle("Energy Loss in Scintillator");
12600   gXScvsEn->GetXaxis()->SetTitle("Distance from end of track (cm)");
12601   gXScvsEn->GetYaxis()->SetTitle("Energy Loss (MeV)");
12602   gXScvsEn->GetXaxis()->CenterTitle();
12603   gXScvsEn->GetYaxis()->CenterTitle();
12604   gXScvsEn->SetMarkerStyle(3);
12605   gXScvsEn->SetMarkerColor(3);
12606   gXScvsEn->SetMarkerSize(0.8);
12607 
12608   gXAlx2vsEn->Draw("P");
12609   gXAlx2vsEn->SetTitle("Energy Loss in Aluminium");
12610   gXAlx2vsEn->GetXaxis()->SetTitle("Distance from end of track (cm)");
12611   gXAlx2vsEn->GetYaxis()->SetTitle("Energy Loss (MeV)");
12612   gXAlx2vsEn->GetXaxis()->CenterTitle();
12613   gXAlx2vsEn->GetYaxis()->CenterTitle();
12614   gXAlx2vsEn->SetMarkerStyle(3);
12615   gXAlx2vsEn->SetMarkerColor(4);
12616   gXAlx2vsEn->SetMarkerSize(0.8);
12617 
12618   gXTiO2x2vsEn->Draw("P");
12619   gXTiO2x2vsEn->SetTitle("Energy Loss in TiO2");
12620   gXTiO2x2vsEn->GetXaxis()->SetTitle("Distance from end of track (cm)");
12621   gXTiO2x2vsEn->GetYaxis()->SetTitle("Energy Loss (MeV)");
12622   gXTiO2x2vsEn->GetXaxis()->CenterTitle();
12623   gXTiO2x2vsEn->GetYaxis()->CenterTitle();
12624   gXTiO2x2vsEn->SetMarkerStyle(3);
12625   gXTiO2x2vsEn->SetMarkerColor(6);
12626   gXTiO2x2vsEn->SetMarkerSize(0.8);
12627   cEnergyloss3->SetLogy();
12628   
12629   cEnergyloss3->cd(2);
12630   TGraph* gXScvsEn2=TGraphVect(mc.fXSc,mc.fEnScDeposited);
12631   gXScvsEn2->Draw("AP");
12632   gXScvsEn2->SetTitle("Energy Loss in Scintillator");
12633   gXScvsEn2->GetXaxis()->SetTitle("Distance from end of track (cm)");
12634   gXScvsEn2->GetYaxis()->SetTitle("Energy Loss (MeV)");
12635   gXScvsEn2->GetXaxis()->CenterTitle();
12636   gXScvsEn2->GetYaxis()->CenterTitle();
12637   gXScvsEn2->SetMarkerStyle(3);
12638   gXScvsEn2->SetMarkerColor(3);
12639   gXScvsEn2->SetMarkerSize(0.8);
12640 
12641   TGraph* bbFe=TGraphVect(mc.fEn,mc.fdE_dxFe);
12642   //TGraph* bbAl=TGraphVect(mc.fEn,mc.fdE_dxAl);
12643   TGraph* bbSc=TGraphVect(mc.fEn,mc.fdE_dxSc);
12644   TGraph* bbSc2=TGraphVect(mc.fMomGeV,mc.fdE_dxSc);
12645   TGraph* bbSc3=TGraphVect(mc.fMomScGeV,mc.fEnScDeposited);
12646   TGraph* bbMomVsRange=TGraphVect(mc.fXSc,mc.fMomSc);
12647   TCanvas *cBb=new TCanvas("cBb","Bb",0,0,1200,800);
12648   cBb->SetFillColor(0);
12649   cBb->Divide(2,2);
12650   cBb->cd(1);
12651   bbFe->Draw("AP");
12652   bbFe->SetTitle("dE/dx in Iron");
12653   bbFe->GetXaxis()->SetTitle("Particle Energy");
12654   bbFe->GetYaxis()->SetTitle("dE/dx MeV/(g/cm2)");
12655   bbFe->GetXaxis()->CenterTitle();
12656   bbFe->GetYaxis()->CenterTitle();
12657   bbFe->SetMarkerStyle(3);
12658   bbFe->SetMarkerColor(2);
12659   bbFe->SetMarkerSize(0.8);
12660   cBb->cd(2);
12661   bbMomVsRange->Draw("AP");
12662   bbMomVsRange->SetTitle("Muom Momentum vs Range");
12663   bbMomVsRange->GetXaxis()->SetTitle("Range (cm)");
12664   bbMomVsRange->GetYaxis()->SetTitle("Muon Momentum (MeV/c)");
12665   bbMomVsRange->GetXaxis()->CenterTitle();
12666   bbMomVsRange->GetYaxis()->CenterTitle();
12667   bbMomVsRange->SetMarkerStyle(3);
12668   bbMomVsRange->SetMarkerColor(2);
12669   bbMomVsRange->SetMarkerSize(0.8);
12670       /*
12671   bbAl->Draw("AP");
12672   bbAl->SetTitle("dE/dx in Aluminium");
12673   bbAl->GetXaxis()->SetTitle("Particle Energy");
12674   bbAl->GetYaxis()->SetTitle("dE/dx MeV/(g/cm2)");
12675   bbAl->GetXaxis()->CenterTitle();
12676   bbAl->GetYaxis()->CenterTitle();
12677   bbAl->SetMarkerStyle(3);
12678   bbAl->SetMarkerColor(2);
12679   bbAl->SetMarkerSize(0.8);
12680       */
12681   cBb->cd(3);
12682   bbSc->Draw("AP");
12683   bbSc->SetTitle("dE/dx in Scintillator");
12684   bbSc->GetXaxis()->SetTitle("Particle Energy");
12685   bbSc->GetYaxis()->SetTitle("dE/dx MeV/(g/cm2)");
12686   bbSc->GetXaxis()->CenterTitle();
12687   bbSc->GetYaxis()->CenterTitle();
12688   bbSc->SetMarkerStyle(3);
12689   bbSc->SetMarkerColor(2);
12690   bbSc->SetMarkerSize(0.8);
12691   cBb->cd(4);
12692   bbSc2->Draw("AP");
12693   bbSc2->SetTitle("Bethe-Bloch Curve in Scintillator");
12694   bbSc2->GetXaxis()->SetTitle("Muon Momentum");
12695   bbSc2->GetYaxis()->SetTitle("dE/dx MeV/(g/cm2)");
12696   bbSc2->GetXaxis()->CenterTitle();
12697   bbSc2->GetYaxis()->CenterTitle();
12698   bbSc2->SetMarkerStyle(3);
12699   bbSc2->SetMarkerColor(2);
12700   bbSc2->SetMarkerSize(0.8);
12701   bbSc3->Draw("P");
12702   bbSc3->SetMarkerStyle(8);
12703   bbSc3->SetMarkerColor(3);
12704 
12705   this->FlipVector(mc.fXPlanesRatio);
12706   TGraph* eLossRatio=TGraphVect(mc.fXPlanesRatio,mc.fEnRatio);
12707   TCanvas *cELossRatio=new TCanvas("cELossRatio","ELossRatio",
12708                                    0,0,1200,800);
12709   cELossRatio->SetFillColor(0);
12710   eLossRatio->Draw("AP");
12711   eLossRatio->SetTitle("Energy Loss Ratio Fe/Scint");
12712   eLossRatio->GetXaxis()->SetTitle("Distance from end of track (planes)");
12713   eLossRatio->GetYaxis()->SetTitle("Energy Loss Ratio Fe/Scint");
12714   eLossRatio->GetXaxis()->CenterTitle();
12715   eLossRatio->GetYaxis()->CenterTitle();
12716   eLossRatio->SetMarkerStyle(3);
12717   eLossRatio->SetMarkerColor(2);
12718   eLossRatio->SetMarkerSize(0.8);
12719 
12720   if (sum15_18Counter!=0){
12721     MSG("CDAnalysis",Msg::kInfo) 
12722       <<endl
12723       <<" ** Calibration Summary **"<<endl
12724       <<"Sliding Window 15_18:"<<endl
12725       <<"    Total energy dep in scint and Fe="<<sum15_18<<endl
12726       <<"    Av total energy dep in scint and Fe="
12727       <<sum15_18/sum15_18Counter<<" MeV"
12728       <<endl
12729       <<"    Total energy dep in just scint="<<sum15_18Sc<<endl
12730       <<"    Av total energy dep in just scint="
12731       <<sum15_18Sc/sum15_18Counter<<" MeV"
12732       <<endl;
12733   }
12734 
12735   Double_t totPlanesHit=mc.GetTotalNumScPlanesHit();
12736   MSG("CDAnalysis",Msg::kInfo) 
12737     <<"Total number planes hit="<<totPlanesHit<<endl;
12738 }

void CDAnalysis::BbEnVsRange  )  const
 

Definition at line 13253 of file CDAnalysis.cxx.

References FitFunc(), CDSimpleMC::GetParticleEnergy(), CDSimpleMC::GetTotalNumScPlanesHit(), CDSimpleMC::GetTotalScEnLoss(), MSG, NormaliseVector(), CDSimpleMC::RunMC(), CDSimpleMC::SetParticleMomentum(), and TGraphVect().

13254 {
13255   //create simpleMC object
13256   CDSimpleMC mc;
13257 
13258   vector<Double_t> lastPlane;
13259   vector<Double_t> energyBeam;
13260   vector<Double_t> sumEnDepSc;
13261   vector<Double_t> ratioScToBeam;
13262 
13263   //loop over the different energies
13264   for (Int_t beamP=1400;beamP<2010;beamP+=10){
13265     MSG("CDAnalysis",Msg::kInfo) 
13266       <<"Beam P="<<beamP<<endl;
13267     
13268     //set up and run the MC
13269     mc.SetParticleMomentum(beamP);
13270     mc.RunMC();
13271     
13272     //fill the vectors
13273     energyBeam.push_back(mc.GetParticleEnergy());
13274     lastPlane.push_back(mc.GetTotalNumScPlanesHit());
13275     sumEnDepSc.push_back(mc.GetTotalScEnLoss());
13276     ratioScToBeam.push_back(mc.GetTotalScEnLoss()/
13277                             mc.GetParticleEnergy());
13278   }
13279 
13280   MSG("CDAnalysis",Msg::kDebug)
13281     <<"Vpl size="<<lastPlane.size()
13282     <<", Ven size="<<energyBeam.size()<<endl;
13283   TGraph* gEnBeamVsRange=TGraphVect(lastPlane,energyBeam);
13284   TCanvas *cEnBeamVsRange=new TCanvas("cEnBeamVsRange","EnBeamVsRange",
13285                                    0,0,1200,800);
13286   cEnBeamVsRange->SetFillColor(0);
13287   gEnBeamVsRange->Draw("AP");
13288   gEnBeamVsRange->SetTitle("Energy Vs Range");
13289   gEnBeamVsRange->GetXaxis()->SetTitle("Range (planes)");
13290   gEnBeamVsRange->GetYaxis()->SetTitle("Beam Energy");
13291   gEnBeamVsRange->GetXaxis()->CenterTitle();
13292   gEnBeamVsRange->GetYaxis()->CenterTitle();
13293   gEnBeamVsRange->SetMarkerStyle(3);
13294   gEnBeamVsRange->SetMarkerColor(2);
13295   gEnBeamVsRange->SetMarkerSize(0.8);
13296 
13297   TGraph* gScToBeamVsBeam=TGraphVect(energyBeam,ratioScToBeam);
13298   TCanvas *cScToBeamVsBeam=new TCanvas("cScToBeamVsBeam",
13299                                        "cScToBeamVsBeam",
13300                                        0,0,1200,800);
13301   cScToBeamVsBeam->SetFillColor(0);
13302   gScToBeamVsBeam->Draw("AP");
13303   gScToBeamVsBeam->SetTitle("Ratio Sc to Beam Energy vs Beam Energy");
13304   gScToBeamVsBeam->GetXaxis()->SetTitle("Beam Energy");
13305   gScToBeamVsBeam->GetYaxis()->SetTitle("Ratio Sc to Beam Energy");
13306   gScToBeamVsBeam->GetXaxis()->CenterTitle();
13307   gScToBeamVsBeam->GetYaxis()->CenterTitle();
13308   gScToBeamVsBeam->SetMarkerStyle(3);
13309   gScToBeamVsBeam->SetMarkerColor(2);
13310   gScToBeamVsBeam->SetMarkerSize(0.8);
13311 
13312   vector<Double_t> enRange;
13313   vector<Double_t> gradient;
13314 
13315   MSG("CDAnalysis",Msg::kInfo)
13316     <<"First fit..."<<endl;
13317   for (vector<Double_t>::iterator r=lastPlane.begin();
13318        r!=lastPlane.end()-3;++r){
13319     //for (Float_t fitRangeMin=lastPlane[0];
13320     // fitRangeMin<lastPlane[lastPlane.size()-3]-1;fitRangeMin++){
13321     static Int_t counter=0;
13322     
13323     gEnBeamVsRange->Fit("pol1","q","",*r,1000);
13324     TF1* func=gEnBeamVsRange->GetFunction("pol1");
13325     Double_t funcM=func->GetParameter(1);
13326     MSG("CDAnalysis",Msg::kInfo)
13327       <<"fitMin="<<*r<<", en="<<energyBeam[counter]
13328       <<", m="<<funcM<<endl;
13329 
13330     enRange.push_back(energyBeam[counter]);
13331     gradient.push_back(funcM);
13332 
13333     counter++;
13334   }
13335 
13336   //now fit to a non-straight line
13337   TF1 *form = new TF1("form",FitFunc,0,70,3);
13338   //par[0]*TMath::Power(x[0],par[1]) + par[2];
13339   form->SetParameters(1,1,0);
13340   gEnBeamVsRange->Fit("form","q");
13341 
13342   TGraph* gFitGradVsRange=TGraphVect(enRange,gradient);
13343   TCanvas *cFitGradVsRange=new TCanvas("cFitGradVsRange",
13344                                        "FitGradVsRange",
13345                                        0,0,1200,800);
13346   cFitGradVsRange->SetFillColor(0);
13347   gFitGradVsRange->Draw("AP");
13348   gFitGradVsRange->SetTitle("Fit Gradient Vs Min Beam Energy in Fit");
13349   gFitGradVsRange->GetXaxis()->SetTitle("Min Beam Energy in Fit");
13350   gFitGradVsRange->GetYaxis()->SetTitle("Gradient of EnVsRange");
13351   gFitGradVsRange->GetXaxis()->CenterTitle();
13352   gFitGradVsRange->GetYaxis()->CenterTitle();
13353   gFitGradVsRange->SetMarkerStyle(3);
13354   gFitGradVsRange->SetMarkerColor(2);
13355   gFitGradVsRange->SetMarkerSize(0.8);
13356 
13357   //now plot the normalised one
13358   this->NormaliseVector(gradient);
13359   TGraph* gNormFitGradVsRange=TGraphVect(enRange,gradient);
13360   TCanvas *cNormFitGradVsRange=new TCanvas("cNormFitGradVsRange",
13361                                        "NormFitGradVsRange",
13362                                        0,0,1200,800);
13363   cNormFitGradVsRange->SetFillColor(0);
13364   gNormFitGradVsRange->Draw("AP");
13365   gNormFitGradVsRange->SetTitle("Fit Gradient Vs Min Beam Energy in Fit");
13366   gNormFitGradVsRange->GetXaxis()->SetTitle("Min Beam Energy in Fit");
13367   gNormFitGradVsRange->GetYaxis()->SetTitle("Gradient of EnVsRange");
13368   gNormFitGradVsRange->GetXaxis()->CenterTitle();
13369   gNormFitGradVsRange->GetYaxis()->CenterTitle();
13370   gNormFitGradVsRange->SetMarkerStyle(3);
13371   gNormFitGradVsRange->SetMarkerColor(2);
13372   gNormFitGradVsRange->SetMarkerSize(0.8);
13373 
13374   MSG("CDAnalysis",Msg::kDebug)
13375     <<"Vpl size="<<lastPlane.size()
13376     <<", Ven size="<<sumEnDepSc.size()<<endl;
13377   TGraph* gEnDepScVsRange=TGraphVect(lastPlane,sumEnDepSc);
13378   TCanvas *cEnDepScVsRange=new TCanvas("cEnDepScVsRange",
13379                                        "EnDepScVsRange",0,0,1200,800);
13380   cEnDepScVsRange->SetFillColor(0);
13381   gEnDepScVsRange->Draw("AP");
13382   gEnDepScVsRange->SetTitle("Energy Vs Range");
13383   gEnDepScVsRange->GetXaxis()->SetTitle("Range (planes)");
13384   gEnDepScVsRange->GetYaxis()->SetTitle("Energy Deposited in Sc (MeV)");
13385   gEnDepScVsRange->GetXaxis()->CenterTitle();
13386   gEnDepScVsRange->GetYaxis()->CenterTitle();
13387   gEnDepScVsRange->SetMarkerStyle(3);
13388   gEnDepScVsRange->SetMarkerColor(2);
13389   gEnDepScVsRange->SetMarkerSize(0.8);
13390 
13391   vector<Double_t> enRange2;
13392   vector<Double_t> gradient2;
13393 
13394   MSG("CDAnalysis",Msg::kInfo)
13395     <<"Second fit..."<<endl;
13396   for (vector<Double_t>::iterator r=lastPlane.begin();
13397        r!=lastPlane.end()-3;++r){
13398     //for (Float_t fitRangeMin=lastPlane[0];
13399     // fitRangeMin<lastPlane[lastPlane.size()-3]-1;fitRangeMin++){
13400     static Int_t counter=0;
13401     
13402     gEnDepScVsRange->Fit("pol1","q","",*r,1000);
13403     TF1* func=gEnDepScVsRange->GetFunction("pol1");
13404     Double_t funcM=func->GetParameter(1);
13405     MSG("CDAnalysis",Msg::kInfo)
13406       <<"fitMin="<<*r
13407       <<", m="<<funcM<<endl;
13408 
13409     enRange2.push_back(sumEnDepSc[counter]);
13410     gradient2.push_back(funcM);
13411 
13412     counter++;
13413   }
13414   MSG("CDAnalysis",Msg::kInfo)
13415     <<"Finished second fit..."<<endl;
13416 
13417   TGraph* gFitGradVsRange2=TGraphVect(enRange2,gradient2);
13418   TCanvas *cFitGradVsRange2=new TCanvas("cFitGradVsRange2",
13419                                        "FitGradVsRange2",
13420                                        0,0,1200,800);
13421   cFitGradVsRange2->SetFillColor(0);
13422   gFitGradVsRange2->Draw("AP");
13423   gFitGradVsRange2->SetTitle("Norm Fit Gradient Vs Min Energy Dep Sc in Fit");
13424   gFitGradVsRange2->GetXaxis()->SetTitle("Min Energy Dep Sc in Fit");
13425   gFitGradVsRange2->GetYaxis()->SetTitle("Gradient of EnDepScVsRange");
13426   gFitGradVsRange2->GetXaxis()->CenterTitle();
13427   gFitGradVsRange2->GetYaxis()->CenterTitle();
13428   gFitGradVsRange2->SetMarkerStyle(3);
13429   gFitGradVsRange2->SetMarkerColor(2);
13430   gFitGradVsRange2->SetMarkerSize(0.8);
13431 
13432   MSG("CDAnalysis",Msg::kInfo)
13433     <<"Plotting normalised one..."<<endl;
13434 
13435   //now plot the normalised one
13436   this->NormaliseVector(gradient2);
13437   TGraph* gNormFitGradVsRange2=TGraphVect(enRange2,gradient2);
13438   TCanvas *cNormFitGradVsRange2=new TCanvas("cNormFitGradVsRange2",
13439                                        "NormFitGradVsRange2",
13440                                        0,0,1200,800);
13441   cNormFitGradVsRange2->SetFillColor(0);
13442   gNormFitGradVsRange2->Draw("AP");
13443   gNormFitGradVsRange2->SetTitle("Norm Fit Gradient Vs Min Energy Dep Sc in Fit");
13444   gNormFitGradVsRange2->GetXaxis()->SetTitle("Min Energy Dep Sc in Fit");
13445   gNormFitGradVsRange2->GetYaxis()->SetTitle("Gradient of EnDepScVsRange");
13446   gNormFitGradVsRange2->GetXaxis()->CenterTitle();
13447   gNormFitGradVsRange2->GetYaxis()->CenterTitle();
13448   gNormFitGradVsRange2->SetMarkerStyle(3);
13449   gNormFitGradVsRange2->SetMarkerColor(2);
13450   gNormFitGradVsRange2->SetMarkerSize(0.8);
13451 
13452   TF1 *form2 = new TF1("form2",FitFunc,0,70,3);
13453   form2->SetParameters(1,1,0);
13454   form2->FixParameter(2,0);
13455   //gEnDepScVsRange->Fit("form2","q");
13456 }

void CDAnalysis::BbThkFeVsRange  )  const
 

Definition at line 13214 of file CDAnalysis.cxx.

References CDSimpleMC::GetThkFe(), CDSimpleMC::GetTotalNumScPlanesHit(), MSG, CDSimpleMC::RunMC(), CDSimpleMC::SetThkFe(), and TGraphVect().

13215 {
13216   //create simpleMC object
13217   CDSimpleMC mc;
13218 
13219   vector<Double_t> vPlanesHit;
13220   vector<Double_t> vThkFe;
13221 
13222   //loop over the different energies
13223   for (Double_t thkFe=2.4;thkFe<2.6;thkFe+=0.01){
13224     MSG("CDAnalysis",Msg::kInfo) 
13225       <<"thkFe="<<thkFe<<endl;
13226     
13227     //set up and run the MC
13228     mc.SetThkFe(thkFe);
13229     mc.RunMC();
13230     
13231     //fill the vectors
13232     vThkFe.push_back(mc.GetThkFe());
13233     vPlanesHit.push_back(mc.GetTotalNumScPlanesHit());
13234   }
13235 
13236   TGraph* gThkFeVsRange=TGraphVect(vPlanesHit,vThkFe);
13237   TCanvas *cThkFeVsRange=new TCanvas("cThkFeVsRange","ThkFeVsRange",
13238                                      0,0,1200,800);
13239   cThkFeVsRange->SetFillColor(0);
13240   gThkFeVsRange->Draw("AP");
13241   gThkFeVsRange->SetTitle("Iron Thickness Vs Range");
13242   gThkFeVsRange->GetXaxis()->SetTitle("Range (planes)");
13243   gThkFeVsRange->GetYaxis()->SetTitle("Fe Thk (cm)");
13244   gThkFeVsRange->GetXaxis()->CenterTitle();
13245   gThkFeVsRange->GetYaxis()->CenterTitle();
13246   gThkFeVsRange->SetMarkerStyle(3);
13247   gThkFeVsRange->SetMarkerColor(2);
13248   gThkFeVsRange->SetMarkerSize(0.8);
13249 }

void CDAnalysis::BbVsGminos  ) 
 

Definition at line 12742 of file CDAnalysis.cxx.

References count, CDSimpleMC::fdE_dxFe, CDSimpleMC::fEn, CDSimpleMC::fEnDeposited, CDSimpleMC::fEnDepositedPl, CDSimpleMC::fEnFeDeposited, CDSimpleMC::fEnNotScDeposited, CDSimpleMC::fEnScDeposited, FlipVector(), Form(), fS, CDSimpleMC::fX, CDSimpleMC::fXFePlanes, CDSimpleMC::fXNotScPlanes, CDSimpleMC::fXPlanes, CDSimpleMC::fXScPlanes, CDSimpleMC::GetTotalNumScPlanesHit(), InitialiseLoopVariables(), IsStraightTrack(), legend(), MSG, CDSimpleMC::RunMC(), SetLoopVariables(), TGraphVect(), TrueEnDep(), TrueEnDepNotSc(), and TrueNumDigiScintHits().

12743 {
12744   //create simpleMC object
12745   CDSimpleMC mc;
12746   //run mc
12747   mc.RunMC();
12748 
12749   Float_t sum15_18=0;
12750   Float_t sum15_18Sc=0;
12751   Float_t sum15_18NotSc=0;
12752   Float_t sum15_18All=0;
12753   Float_t sum15_18ScGminos=0;
12754   Float_t sum15_18NotScGminos=0;
12755   Float_t sum15_18AllGminos=0;
12756   Float_t sum15_18Counter=0;
12757   vector<Double_t> eDepositedPl;
12758 
12759   vector<Double_t> tempEnDep(60,0);
12760   vector<Double_t> tempEnDepNotSc(60,0);
12761   vector<Double_t> tempNumDsh(60,0);
12762   vector<Double_t> tempNum(60,0);
12763   vector<TH1F*> hEnDepNotSc;
12764 
12765   for (Int_t pl=0;pl<60;pl++){
12766     fS="Energy Deposition in Iron, plane=";
12767     string sPl=Form("%d",pl);
12768     fS+=sPl;
12769     hEnDepNotSc.push_back(new TH1F(fS.c_str(),fS.c_str(),600,-2,200));
12770     hEnDepNotSc[pl]->SetBit(TH1::kCanRebin);
12771   }
12772 
12776 
12777   this->InitialiseLoopVariables();  
12778   
12779   for(Int_t event=0;event<fEvents;event++){
12780     
12781     this->SetLoopVariables(event);
12782 
12783     //cut on not straight tracks
12784     Double_t mainX1Cut=0.5;
12785     if (!this->IsStraightTrack(mainX1Cut)){
12786       continue;
12787     }
12788 
12789     for (Int_t p=0;p<60;p++){
12790       Double_t enDep=this->TrueEnDep(p,event);
12791       Double_t enDepNotSc=this->TrueEnDepNotSc(p,event);
12792       Int_t numDsh=this->TrueNumDigiScintHits(p,event);
12793       //const Double_t latestT2=hitInfo->GetLatestT2();
12794       //fill the histo
12795       hEnDepNotSc[p]->Fill(1000*enDepNotSc);
12796       
12797       MSG("CDAnalysis",Msg::kVerbose) 
12798         <<", eDepNotSc="<<1000*enDepNotSc<<endl;
12799       
12800       //I'm not averaging zeros here - this is wrong!
12801       if (enDep>0 && enDepNotSc>0){
12802         tempEnDep[p]+=enDep;
12803         tempEnDepNotSc[p]+=enDepNotSc;
12804         tempNumDsh[p]+=numDsh;
12805         tempNum[p]++;
12806       }
12807     }
12808   }//end of for                                       
12809   
12813 
12814   TCanvas *cEnDep=new TCanvas("cEnDep","EnDep",0,0,1200,800);
12815   cEnDep->SetFillColor(0);
12816   cEnDep->Divide(2,3);
12817   cEnDep->cd(1);
12818   hEnDepNotSc[0]->Draw();
12819   cEnDep->cd(2);
12820   hEnDepNotSc[1]->Draw();
12821   cEnDep->cd(3);
12822   hEnDepNotSc[2]->Draw();
12823   cEnDep->cd(4);
12824   hEnDepNotSc[3]->Draw();
12825   cEnDep->cd(5);
12826   hEnDepNotSc[4]->Draw();
12827   cEnDep->cd(6);
12828   hEnDepNotSc[5]->Draw();
12829 
12830   vector<Double_t> eScGminos(60,0);
12831   vector<Double_t> eNotScGminos(60,0);
12832   vector<Double_t> numDshScGminos(60,0);
12833   vector<Double_t> xScGminos(60,0);
12834   Double_t totalEnDep=0;
12835 
12836   for (Int_t p=0;p<60;p++){
12837     if (tempNum[p]>0){
12838       eScGminos[p]=1000.*tempEnDep[p]/tempNum[p];
12839       eNotScGminos[p]=1000.*tempEnDepNotSc[p]/tempNum[p];
12840       numDshScGminos[p]=tempNumDsh[p]/tempNum[p];
12841     }
12842     xScGminos[p]=p;
12843 
12844     //keep a running total
12845     totalEnDep+=eScGminos[p]+eNotScGminos[p];
12846 
12847     MSG("CDAnalysis",Msg::kInfo) 
12848       <<"plane="<<xScGminos[p]
12849       <<", enDep="<<eScGminos[p]
12850       <<", enDepNotSc="<<eNotScGminos[p]
12851       <<", totalEnDep="<<totalEnDep<<endl;
12852   }
12853 
12855   //section for sliding window
12857   
12858   vector<TProfile*> pSigCorVsDist;
12859   vector<Int_t> vWindowSize;
12860   vector<Float_t> bigAv;
12861   vector<Int_t> bigAvCounter;
12862   Int_t minEventLength=40;
12863 
12864   //need a new vector for this!!!!
12867   MSG("CDAnalysis",Msg::kInfo) 
12868     <<"size="<<mc.fEnScDeposited.size()<<endl;
12869 
12870   //initialise the profile histos
12871   for (Int_t p=20;p>1;p--){
12872     vWindowSize.push_back(p);
12873     bigAv.push_back(0);
12874     bigAvCounter.push_back(0);
12875   }
12876   
12877   for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
12878        windowSize!=vWindowSize.end();++windowSize){
12879     
12880     string sName=Form("%d",*windowSize);
12881     pSigCorVsDist.push_back
12882       (new TProfile(("pSigCorVsDist"+sName).c_str(),
12883                     ("pSigCorVsDist"+sName).c_str(),100,-2,40));
12884   }
12885 
12886   vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12887   vector<Float_t>::iterator av=bigAv.begin();
12888   vector<Int_t>::iterator count=bigAvCounter.begin();
12889   
12890   //loop over the different window sizes
12891   for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
12892        windowSize!=vWindowSize.end();++windowSize){
12893     MSG("CDAnalysis",Msg::kDebug)
12894       <<"Window size="<<*windowSize<<endl;
12895  
12896     //slide the window along from the end to 40-windowSize
12897     for (Int_t p=0;p<minEventLength-*windowSize;p++){
12898       Int_t lastPlane=mc.fEnScDeposited.size()-1;
12899       Int_t windowStart=lastPlane-p;
12900 
12901       //loop through the hits in the window      
12902       for (Int_t i=0;i<*windowSize;i++){
12903         Int_t plane=windowStart-i;
12904         
12905         (*prof)->Fill(p,mc.fEnScDeposited[plane]);
12906         (*av)+=mc.fEnScDeposited[plane];
12907         (*count)++;
12908 
12909         //calculate the best window value
12910         if (*windowSize==15 && windowStart==lastPlane-18){
12911           //BB
12912           sum15_18+=mc.fEnDepositedPl[plane];
12913           sum15_18Sc+=mc.fEnScDeposited[plane];
12914           sum15_18NotSc+=mc.fEnNotScDeposited[plane];
12915           sum15_18All+=mc.fEnScDeposited[plane]+
12916             mc.fEnNotScDeposited[plane];
12917 
12918           //gminos
12919           sum15_18ScGminos+=eScGminos[plane];
12920           sum15_18NotScGminos+=eNotScGminos[plane];
12921           sum15_18AllGminos+=eScGminos[plane]+eNotScGminos[plane];
12922 
12923           //general counter
12924           sum15_18Counter++;
12925         }
12926       }
12927     }
12928     av++;
12929     count++;
12930     prof++;
12931   }
12932 
12933   //turn on the stats box printing
12934   gStyle->SetOptStat(11);
12935 
12936   TCanvas *cProf=new TCanvas("cProf","Prof",0,0,1200,800);
12937   cProf->SetFillColor(0);
12938   string sName="SlidingWindowBB.ps";
12939   cProf->Print((sName+"[").c_str());
12940   gErrorIgnoreLevel=1;
12941   //plot the unnormalised prof first
12942   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12943        prof!=pSigCorVsDist.end();++prof){      
12944     cProf->Clear();
12945     (*prof)->Draw();
12946     (*prof)->SetTitle("Energy Deposited in Sliding Window");
12947     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
12948     (*prof)->GetYaxis()->SetTitle("Energy Deposited (MeV)");
12949     (*prof)->GetXaxis()->CenterTitle();
12950     (*prof)->GetYaxis()->CenterTitle();
12951     cProf->Print(sName.c_str());
12952   }
12953 
12954   //now normalise the prof
12955   av=bigAv.begin();
12956   count=bigAvCounter.begin();
12957   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12958        prof!=pSigCorVsDist.end();++prof){
12959       
12960     //normalise the prof and scale the axes
12961     MSG("CDAnalysis",Msg::kInfo)
12962       <<"bigCounter="<<*count<<", bigAv="<<*av<<endl;
12963     if (*av>0) (*prof)->Scale((*count)/(*av));
12964     (*prof)->SetMaximum(1.2);
12965     (*prof)->SetMinimum(0.8);
12966       
12967     cProf->Clear();
12968     (*prof)->Draw();
12969     (*prof)->SetTitle("Normalised Energy Deposited in Sliding Window");
12970     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
12971     (*prof)->GetYaxis()->SetTitle("Normalised Energy Deposited");
12972     (*prof)->GetXaxis()->CenterTitle();
12973     (*prof)->GetYaxis()->CenterTitle();
12974     cProf->Print(sName.c_str());
12975     av++;
12976     count++;
12977   }
12978   //close the file
12979   gErrorIgnoreLevel=0;
12980   cProf->Print((sName+"]").c_str());
12981 
12982   TLegend *legend = new TLegend(0.85, 0.7, 0.9, 0.9);
12983   legend->SetBorderSize(0);
12984   legend->SetFillColor(0);
12985   legend->SetTextSize(0.035);
12986 
12987   //now do a few profs on the same plot
12988   TCanvas *cProf2=new TCanvas("cProf2","Prof",0,0,1200,800);
12989   cProf2->SetFillColor(0);
12990   sName="SlidingWindowAll.ps";
12991   //cProf2->Print((sName+"[").c_str());
12992   Int_t counter=0;
12993   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
12994        prof!=pSigCorVsDist.end();++prof){
12995 
12996     (*prof)->SetMaximum(1.09);
12997     (*prof)->SetMinimum(0.96);
12998 
12999     //count which prof got to
13000     counter++;
13001 
13002     //decide which profs to draw
13003     static Bool_t firstTime=true;
13004     if (counter==1 || counter==6 || counter==11){ 
13005       if (firstTime) {
13006         (*prof)->Draw();
13007         firstTime=false;
13008       }
13009       else  (*prof)->Draw("sames");
13010 
13011       (*prof)->SetTitle("Normalised Energy Deposited in Sliding Window");
13012       (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
13013       (*prof)->GetYaxis()->SetTitle("Normalised Energy Deposition");
13014       (*prof)->GetXaxis()->CenterTitle();
13015       (*prof)->GetYaxis()->CenterTitle();
13016       static Int_t color=2;
13017       (*prof)->SetLineColor(color);
13018       color+=2;
13019       string sWindowSize=Form("%d",21-counter);
13020       string sGraph=" Window size = ";
13021       sGraph+=sWindowSize;
13022       sGraph+=" planes";
13023       legend->AddEntry((*prof),sGraph.c_str(),"l");
13024     }
13025   }
13026   legend->Draw();
13027 
13028   //get the graphs
13029   TGraph* gScBb=TGraphVect(mc.fXScPlanes,mc.fEnScDeposited);
13030   TGraph* gScGminos=TGraphVect(xScGminos,eScGminos);
13031   TGraph* gNumDshScGminos=TGraphVect(xScGminos,numDshScGminos);
13032   
13033   //get canvas
13034   TCanvas *cBbVsGminos=new TCanvas("cBbVsGminos","BbVsGminos",
13035                                    0,0,1200,800);
13036   cBbVsGminos->SetFillColor(0);
13037   cBbVsGminos->Divide(1,3);
13038   cBbVsGminos->cd(1);
13039   gScBb->Draw("AP");
13040   gScBb->SetTitle("Energy Loss in Simple BB MC");
13041   gScBb->GetXaxis()->SetTitle("Plane");
13042   gScBb->GetYaxis()->SetTitle("Energy Loss (MeV)");
13043   gScBb->GetXaxis()->CenterTitle();
13044   gScBb->GetYaxis()->CenterTitle();
13045   gScBb->SetMarkerStyle(3);
13046   gScBb->SetMarkerColor(2);
13047   gScBb->SetMarkerSize(0.8);
13048   cBbVsGminos->cd(2);
13049   gScGminos->Draw("AP");
13050   gScGminos->SetTitle("Energy Loss in GMINOS");
13051   gScGminos->GetXaxis()->SetTitle("Plane");
13052   gScGminos->GetYaxis()->SetTitle("Energy Loss (MeV)");
13053   gScGminos->GetXaxis()->CenterTitle();
13054   gScGminos->GetYaxis()->CenterTitle();
13055   gScGminos->SetMarkerStyle(3);
13056   gScGminos->SetMarkerColor(2);
13057   gScGminos->SetMarkerSize(0.8);
13058   cBbVsGminos->cd(3);
13059   gNumDshScGminos->Draw("AP");
13060   gNumDshScGminos->SetTitle("Num DigiScintHits in GMINOS");
13061   gNumDshScGminos->GetXaxis()->SetTitle("Plane");
13062   gNumDshScGminos->GetYaxis()->SetTitle("Num DigiScintHits");
13063   gNumDshScGminos->GetXaxis()->CenterTitle();
13064   gNumDshScGminos->GetYaxis()->CenterTitle();
13065   gNumDshScGminos->SetMarkerStyle(3);
13066   gNumDshScGminos->SetMarkerColor(2);
13067   gNumDshScGminos->SetMarkerSize(0.8);
13068 
13069   //new graph
13070   TGraph* gNotScBb=TGraphVect(mc.fXNotScPlanes,mc.fEnNotScDeposited);
13071   TGraph* gFeBb=TGraphVect(mc.fXFePlanes,mc.fEnFeDeposited);
13072   TGraph* gNotScGminos=TGraphVect(xScGminos,eNotScGminos);
13073   TCanvas *cBbVsGminos2=new TCanvas("cBbVsGminos2","BbVsGminos2",
13074                                     0,0,1200,800);
13075   cBbVsGminos2->SetFillColor(0);
13076   cBbVsGminos2->Divide(1,2);
13077   cBbVsGminos2->cd(1);
13078   gNotScBb->Draw("AP");
13079   gNotScBb->SetTitle("Energy Loss in Non-Acive Material in BB");
13080   gNotScBb->GetXaxis()->SetTitle("Plane");
13081   gNotScBb->GetYaxis()->SetTitle("Energy Loss (MeV)");
13082   gNotScBb->GetXaxis()->CenterTitle();
13083   gNotScBb->GetYaxis()->CenterTitle();
13084   gNotScBb->SetMarkerStyle(3);
13085   gNotScBb->SetMarkerColor(2);
13086   gNotScBb->SetMarkerSize(0.8);
13087   gFeBb->Draw("P");
13088   gFeBb->SetMarkerStyle(3);
13089   gFeBb->SetMarkerColor(3);
13090   gFeBb->SetMarkerSize(0.8);
13091   cBbVsGminos2->cd(2);
13092   gNotScGminos->Draw("AP");
13093   gNotScGminos->SetTitle("Energy Loss in Non-Acive Material in GMINOS");
13094   gNotScGminos->GetXaxis()->SetTitle("Plane");
13095   gNotScGminos->GetYaxis()->SetTitle("Energy Loss (MeV)");
13096   gNotScGminos->GetXaxis()->CenterTitle();
13097   gNotScGminos->GetYaxis()->CenterTitle();
13098   gNotScGminos->SetMarkerStyle(3);
13099   gNotScGminos->SetMarkerColor(2);
13100   gNotScGminos->SetMarkerSize(0.8);
13101 
13102   //new graph
13103   this->FlipVector(mc.fXScPlanes);
13104   TGraph* eLossSc=TGraphVect(mc.fXScPlanes,mc.fEnScDeposited);
13105   TCanvas *cELossSc=new TCanvas("cELossSc","ELossSc",
13106                                    0,0,1200,800);
13107   cELossSc->SetFillColor(0);
13108   eLossSc->Draw("AP");
13109   eLossSc->SetTitle("Energy Loss in Scintillator");
13110   eLossSc->GetXaxis()->SetTitle("Distance from end of track (planes)");
13111   eLossSc->GetYaxis()->SetTitle("Energy Loss (MeV)");
13112   eLossSc->GetXaxis()->CenterTitle();
13113   eLossSc->GetYaxis()->CenterTitle();
13114   eLossSc->SetMarkerStyle(3);
13115   eLossSc->SetMarkerColor(2);
13116   eLossSc->SetMarkerSize(0.8);
13117 
13118   this->FlipVector(mc.fX);
13119   TGraph* energyLoss=TGraphVect(mc.fX,mc.fEnDeposited);
13120   TCanvas *cEnergyLoss=new TCanvas("cEnergyLoss","EnergyLoss",
13121                                    0,0,1200,800);
13122   cEnergyLoss->SetFillColor(0);
13123   energyLoss->Draw("AP");
13124   energyLoss->SetTitle("Energy Loss in Scintillator and Iron");
13125   energyLoss->GetXaxis()->SetTitle("Distance from end of track (cm)");
13126   energyLoss->GetYaxis()->SetTitle("Energy Loss (MeV)");
13127   energyLoss->GetXaxis()->CenterTitle();
13128   energyLoss->GetYaxis()->CenterTitle();
13129   energyLoss->SetMarkerStyle(3);
13130   energyLoss->SetMarkerColor(2);
13131   energyLoss->SetMarkerSize(0.8);
13132 
13133   this->FlipVector(mc.fXPlanes);
13134   TGraph* energyloss2=TGraphVect(mc.fXPlanes,mc.fEnDeposited);
13135   TCanvas *cEnergyloss2=new TCanvas("cEnergyloss2","Energyloss2",
13136                                    0,0,1200,800);
13137   cEnergyloss2->SetFillColor(0);
13138   energyloss2->Draw("AP");
13139   energyloss2->SetTitle("Energy Loss in Scintillator and Iron");
13140   energyloss2->GetXaxis()->SetTitle("Distance from end of track (planes)");
13141   energyloss2->GetYaxis()->SetTitle("Energy Loss (MeV)");
13142   energyloss2->GetXaxis()->CenterTitle();
13143   energyloss2->GetYaxis()->CenterTitle();
13144   energyloss2->SetMarkerStyle(3);
13145   energyloss2->SetMarkerColor(2);
13146   energyloss2->SetMarkerSize(0.8);
13147   
13148   TGraph* bb=TGraphVect(mc.fEn,mc.fdE_dxFe);
13149   TCanvas *cBb=new TCanvas("cBb","Bb",0,0,1200,800);
13150   cBb->SetFillColor(0);
13151   bb->Draw("AP");
13152   bb->SetMarkerStyle(3);
13153   bb->SetMarkerColor(2);
13154   bb->SetMarkerSize(0.8);
13155 
13156   if (sum15_18Counter!=0){
13157     MSG("CDAnalysis",Msg::kInfo) 
13158       <<endl
13159       <<" ** Calibration Summary **"<<endl
13160       <<"Total number of planes hit in BB="<<mc.GetTotalNumScPlanesHit()
13161       <<endl
13162       <<"Sliding Window 15_18:"<<endl
13163       <<"BB Steel and Scintillator:"<<endl
13164       <<"    Total energy dep="<<sum15_18<<" MeV"<<endl
13165       <<"    Av energy dep="<<sum15_18/sum15_18Counter
13166       <<" MeV"<<endl
13167       <<"GMINOS:"<<endl
13168       <<"    Total energy dep="<<"?"<<" MeV"<<endl
13169       <<"    Av energy dep="<<"?"
13170       <<" MeV"<<endl
13171       <<endl<<endl
13172       <<"BB Non-Active Material:"<<endl
13173       <<"    Total energy dep="<<sum15_18NotSc<<" MeV"<<endl
13174       <<"    Av energy dep="<<sum15_18NotSc/sum15_18Counter
13175       <<" MeV"<<endl
13176       <<"GMINOS:"<<endl
13177       <<"    Total energy dep="<<sum15_18NotScGminos<<" MeV"<<endl
13178       <<"    Av energy dep="<<sum15_18NotScGminos/sum15_18Counter
13179       <<" MeV ("<<100*(sum15_18NotScGminos-sum15_18NotSc)/sum15_18NotSc
13180       <<"%)"<<endl
13181       <<endl<<endl
13182       <<"BB Just Scintillator:"<<endl
13183       <<"    Total energy dep="<<sum15_18Sc<<" MeV"<<endl
13184       <<"    Av energy dep="<<sum15_18Sc/sum15_18Counter
13185       <<" MeV"<<endl
13186       <<"GMINOS:"<<endl
13187       <<"    Total energy dep="<<sum15_18ScGminos<<" MeV"<<endl
13188       <<"    Av energy dep="<<sum15_18ScGminos/sum15_18Counter
13189       <<" MeV ("<<100*(sum15_18ScGminos-sum15_18Sc)/sum15_18Sc<<"%)"
13190       <<endl
13191       <<endl<<endl
13192       <<"BB Total (Active+Passive):"<<endl
13193       <<"    Total energy dep="<<sum15_18All<<" MeV"<<endl
13194       <<"    Av energy dep="<<sum15_18All/sum15_18Counter
13195       <<" MeV"<<endl
13196       <<"GMINOS:"<<endl
13197       <<"    Total energy dep="<<sum15_18AllGminos<<" MeV"<<endl
13198       <<"    Av energy dep="<<sum15_18AllGminos/sum15_18Counter
13199       <<" MeV ("<<100*(sum15_18AllGminos-sum15_18All)/sum15_18All<<"%)"
13200       <<endl<<endl; 
13201   }
13202 }

void CDAnalysis::CalcAvStripForPSMuonCut Int_t  plane,
Int_t  strip,
Int_t  end
[private]
 

Definition at line 1152 of file CDAnalysis.cxx.

References fAvStrip, fAvStrip1, fAvStrip2, fStCount, fStCount1, fStCount2, fStripend, and MAXMSG.

Referenced by StoppingMuonCalibration().

01154 {
01155   if (plane<4){
01156     //calc weighted average strip
01157     fAvStrip=fAvStrip*(fStCount/(fStCount+1))+strip*(1/(fStCount+1));
01158     fStCount++;
01159     MAXMSG("CDAnalysis",Msg::kVerbose,1000)
01160       <<"  strip="<<strip<<", plane="<<plane
01161       <<", fEnd="<<fStripend<<", fAvStrip="<<fAvStrip
01162       <<", fStCount="<<fStCount<<endl;
01163 
01164     //now do each end separately
01165     if (end==1 && plane>0) {
01166       fAvStrip1=fAvStrip1*(fStCount1/(fStCount1+1))+
01167         strip*(1/(fStCount1+1));
01168       fStCount1++;
01169     }
01170     else if (end==2 && plane>0) {
01171       fAvStrip2=fAvStrip2*(fStCount2/(fStCount2+1))+
01172         strip*(1/(fStCount2+1));
01173       fStCount2++;
01174     }
01175   }
01176 }

Float_t CDAnalysis::CalcDistToPlaneCentre Int_t  strip,
Float_t  transPos
const [private]
 

Definition at line 2051 of file CDAnalysis.cxx.

Referenced by StraightTrack_Radius(), ValidateReco(), and ValidateTrkHits().

02053 {
02054   Float_t stripSize=0.041*Munits::m;
02055   Float_t distToPlaneCentre=-1;
02056   //note that strips are numbered from 0  
02057 
02058   //cutting on transPos==0 is ugly since it's an allowed value
02059   //but this is what it is initialised to and it 
02060   //should only cut real values rarely
02061   if (strip<0 || strip>23 || transPos<0 || transPos==0 || 
02062       transPos>23) return distToPlaneCentre;
02063 
02064   Float_t dist1=-1;
02065   Float_t dist2=-1;
02066   Float_t stripsFromCentre1=-1;
02067   Float_t transPosFromCentre1=-1;
02068 
02069   //get distances measured from plane centre in each view
02070   if (strip<=11) stripsFromCentre1=11-strip;
02071   else if (strip>11) stripsFromCentre1=strip-12;
02072   if (transPos<=11) transPosFromCentre1=11-transPos;
02073   else if (transPos>11) transPosFromCentre1=transPos-11;
02074 
02075   //calc real distances
02076   dist1=stripsFromCentre1*stripSize;
02077   dist2=transPosFromCentre1*stripSize;
02078   
02079   //move it to the middle of a strip so 
02080   //you know which strip it's actually in
02081   dist1+=stripSize*0.5;
02082   //transPos is not quantised so don't worry about it here
02083 
02084   //simple bit of trig
02085   if (dist1>0 && dist2>0){
02086     distToPlaneCentre=sqrt(pow(dist1,2)+pow(dist2,2));
02087   }
02088   
02089   return distToPlaneCentre;
02090 }

void CDAnalysis::CalcFirstLastPlane Int_t  plane  )  [private]
 

Definition at line 1205 of file CDAnalysis.cxx.

References fFirstPlane, fLastPlane, fLastPlaneEven, and fLastPlaneOdd.

Referenced by CalcLastPlaneOnTrk(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), StoppingMuonCalibration(), and ValidateReco().

01206 {
01207   if (plane<fFirstPlane) fFirstPlane=plane;
01208   if (plane>fLastPlane) fLastPlane=plane;
01209   if (plane>fLastPlaneOdd && plane%2!=0) fLastPlaneOdd=plane;
01210   if (plane>fLastPlaneEven && plane%2==0) fLastPlaneEven=plane;
01211 }

void CDAnalysis::CalcLastPlaneOnTrk  )  [private]
 

Definition at line 1255 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), CutOnBadPedestals(), fLastPlane, fPlane, fStrip, fStripend, fTrkHitInfo, MSG, ReadInHitInfo(), and StandardSanityChecks().

Referenced by TruthEnDep().

01256 {
01257 
01258   TClonesArray &cTrk=*fTrkHitInfo;
01259   Int_t numTrkHits=fTrkHitInfo->GetEntries();
01260 
01262   //loop over the tracked hits
01264   for (Int_t hit=0;hit<numTrkHits;hit++){
01265     CDTrackedHitInfo *trackedHitInfo=
01266       dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
01267     
01268     this->ReadInHitInfo(trackedHitInfo);
01269     
01270     //cut out the bad channels
01271     if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
01272     
01273     //check the channel's sanity
01274     this->StandardSanityChecks();
01275     
01276     //calculate the first and last planes
01277     this->CalcFirstLastPlane(fPlane);
01278     
01279   }
01281   //end of loop over the tracked hits
01283   
01284   MSG("CDAnalysis",Msg::kVerbose)
01285     <<"CalcLastPlaneOnTrk: fLastPlane="<<fLastPlane<<endl; 
01286 }

Int_t CDAnalysis::CalcLastPlaneOnTrkNoXTalk  )  const [private]
 

Definition at line 1290 of file CDAnalysis.cxx.

References CutOnBadPedestals(), fLastPlane, fTrkHitInfo, fUnTrkHitInfo, fXTalkHits, CDXTalkHitInfo::GetCharge(), CDTrackedHitInfo::GetCharge(), CDXTalkHitInfo::GetEnd(), CDTrackedHitInfo::GetEnd(), CDXTalkHitInfo::GetPlane(), CDTrackedHitInfo::GetPlane(), CDXTalkHitInfo::GetStrip(), CDTrackedHitInfo::GetStrip(), and MSG.

Referenced by FillEnVsDist(), MuonCalorimetry(), MuonResponse(), MuonScatter(), and StoppingMuonCalibration().

01291 {
01292   //get tclones arrays for this snarl
01293   TClonesArray &cTrk=*fTrkHitInfo;
01294   Int_t numTrkHits=fTrkHitInfo->GetEntries();
01295   TClonesArray &cUnTrk = *fUnTrkHitInfo;
01296   Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
01297   TClonesArray &cXTalk = *fXTalkHits;
01298   Int_t numXTalkHits=fXTalkHits->GetEntries();
01299   
01300   map<Int_t,Float_t> planeGreatestPe;
01301   Int_t lastPlane=0;  
01302 
01303   //the untracked and xtalk hits are just used to find the greatest
01304   //pe in each plane; they are not included in the last plane 
01305   //directly
01306 
01308   //loop over the untracked hits in the snarl
01310   for (Int_t hit=0;hit<numUnTrkHits;hit++){
01311     //cast the tclonesarray up to a trackedhitinfo object
01312     CDTrackedHitInfo *hitInfo=
01313       dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
01314     
01315     //get the variables
01316     Int_t plane=hitInfo->GetPlane();
01317     Int_t strip=hitInfo->GetStrip();
01318     Int_t stripend=hitInfo->GetEnd();
01319     Float_t chargePe=hitInfo->GetCharge(CDTrackedHitInfo::kPe);
01320 
01321     //cut out the bad channels
01322     if (this->CutOnBadPedestals(plane,strip,stripend)) continue;
01323     
01324     if (chargePe>planeGreatestPe[fPlane]) planeGreatestPe[plane]=
01325                                             chargePe;
01326   }
01327   
01329   //loop over xtalk hits in the snarl
01331   for (Int_t hit=0;hit<numXTalkHits;hit++){
01332     CDXTalkHitInfo *hitInfo=
01333       dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
01334     
01335     //get the variables
01336     Int_t plane=hitInfo->GetPlane();
01337     Int_t strip=hitInfo->GetStrip();
01338     Int_t stripend=hitInfo->GetEnd();
01339     Float_t chargePe=hitInfo->GetCharge(CDTrackedHitInfo::kPe);
01340 
01341     //cut out the bad channels
01342     if (this->CutOnBadPedestals(plane,strip,stripend)) continue;
01343     
01344     if (chargePe>planeGreatestPe[fPlane]) planeGreatestPe[plane]=
01345                                             chargePe;
01346   }
01347 
01349   //loop over the tracked hits
01351   for (Int_t hit=0;hit<numTrkHits;hit++){
01352     CDTrackedHitInfo* hitInfo=
01353       dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
01354     
01355     //get the variables
01356     Int_t plane=hitInfo->GetPlane();
01357     Int_t strip=hitInfo->GetStrip();
01358     Int_t stripend=hitInfo->GetEnd();
01359     Float_t chargePe=hitInfo->GetCharge(CDTrackedHitInfo::kPe);
01360 
01361     if (plane>lastPlane) lastPlane=plane;
01362 
01363     //cut out the bad channels
01364     if (this->CutOnBadPedestals(plane,strip,stripend)) continue;
01365     
01366     if (chargePe>planeGreatestPe[fPlane]) planeGreatestPe[plane]=
01367                                             chargePe;
01368   }
01370   //end of loop over the tracked hits
01372 
01373   Int_t newLastPlane=lastPlane;
01374   Double_t xtalkLevel=1.7;
01375 
01376   if (fLastPlane>=3){//make sure track is at least 4 planes
01377     if (planeGreatestPe[lastPlane]>xtalkLevel){
01378       //do nothing
01379     }
01380     else if (planeGreatestPe[lastPlane-1]>xtalkLevel){
01381       newLastPlane=lastPlane-1;
01382     }
01383     else if (planeGreatestPe[lastPlane-2]>xtalkLevel){
01384       newLastPlane=lastPlane-2;
01385     }
01386     else{
01387       if (planeGreatestPe[lastPlane-3]<xtalkLevel){
01388         MSG("CDAnalysis",Msg::kDebug)
01389           <<"4th plane with low pe hit"
01390           <<", pe0="<<planeGreatestPe[lastPlane-0]
01391           <<", pe1="<<planeGreatestPe[lastPlane-1]
01392           <<", pe2="<<planeGreatestPe[lastPlane-2]
01393           <<", pe3="<<planeGreatestPe[lastPlane-3]
01394           <<endl;
01395       }
01396       newLastPlane=lastPlane-3;
01397     }
01398   }
01399   
01400   MSG("CDAnalysis",Msg::kVerbose)
01401     <<"CalcLastPlaneOnTrkNoXTalk: lastPlane="<<lastPlane
01402     <<", newLastPlane="<<newLastPlane<<endl; 
01403   
01404   return newLastPlane;
01405 }

Int_t CDAnalysis::CalcLastPlaneTruth  )  const [private]
 

Definition at line 1215 of file CDAnalysis.cxx.

References fLastPlane, fTruthHitInfo, CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), and MSG.

Referenced by TruthEnDep().

01216 {  
01217   if (!fTruthHitInfo) return 0;
01218 
01219   TClonesArray &cTruth = *fTruthHitInfo;
01220   Int_t numTruthHits=fTruthHitInfo->GetEntries();
01221 
01222   Int_t lastPlane=0;
01223 
01224   //loop over the truth hits
01225   for (Int_t hit=0;hit<numTruthHits;hit++){
01226     //cast the tclonesarray up to a truthhitinfo object
01227     CDTruthHitInfo *hitInfo=
01228       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
01229     
01230     Int_t plane=hitInfo->GetPlane();
01231     Int_t pmtTruth1=hitInfo->GetPmtTruth1();
01232     Int_t pmtTruth2=hitInfo->GetPmtTruth2();
01233 
01234     //check either side
01235     Int_t sumTruth=pmtTruth1|pmtTruth2;
01236 
01237     //check if genuine
01238     if ((sumTruth & DigiSignal::kGenuine)==DigiSignal::kGenuine){
01239       //see if bigger
01240       if (plane>lastPlane) lastPlane=plane;
01241     }
01242     MSG("CDAnalysis",Msg::kVerbose)
01243       <<"sumTruth="<<sumTruth<<endl;
01244   }
01245 
01246   MSG("CDAnalysis",Msg::kVerbose)
01247     <<"CalcLastPlaneTruth: LastPlane="<<lastPlane
01248     <<", fLastPlane="<<fLastPlane<<endl; 
01249 
01250   return lastPlane;
01251 }

void CDAnalysis::CalcLowUpScint_TofDiff Double_t  time  )  [private]
 

Definition at line 1180 of file CDAnalysis.cxx.

References fLowScint_Tof, fTofADCTimeStamp1, fUpScint_Tof, and MAXMSG.

Referenced by ElectronResponse(), and StoppingMuonCalibration().

01181 {
01182   Double_t tickInNs=25./16;//ns, va clock tick
01183   Float_t timeDiff=(time*1e9)-(fTofADCTimeStamp1*tickInNs);//ns
01184 
01185   if (fTofADCTimeStamp1<1 || fTofADCTimeStamp1>1e9/tickInNs){
01186     MAXMSG("CDAnalysis",Msg::kWarning,10)
01187       <<"Bad Tof (TTAG) time="<<fTofADCTimeStamp1
01188       <<" ticks, ("<<fTofADCTimeStamp1*tickInNs<<" ns)"<<endl;
01189   }
01190 
01191   if (timeDiff>1000 || timeDiff<-1000){
01192     MAXMSG("CDAnalysis",Msg::kWarning,10)
01193       <<"Bad Scint-Tof (TTAG) time difference="<<timeDiff<<" ns"
01194       <<", time="<<time<<", tof time="<<fTofADCTimeStamp1
01195       <<" ticks, ("<<fTofADCTimeStamp1*tickInNs<<" ns)"<<endl;
01196   }
01197 
01198   //calc highest and lowest scint tof time diff.
01199   if (timeDiff>fUpScint_Tof) fUpScint_Tof=timeDiff;
01200   if (timeDiff<fLowScint_Tof) fLowScint_Tof=timeDiff;
01201 }

Double_t CDAnalysis::CalcMeuPLCorrected std::map< Int_t, Float_t >  plEnDep,
std::map< Int_t, Float_t >  plPLCor,
Int_t  event,
Float_t *  GeVPerMeu
const [private]
 

Definition at line 3777 of file CDAnalysis.cxx.

References GetEventLength(), MAXMSG, and TrueEnDep().

Referenced by StoppingMuonCalibration().

03782 {
03783   if (plEnDep.size()==0 || plPLCor.size()==0){
03784     MAXMSG("CDAnalysis",Msg::kWarning,10000)
03785       <<"Can't CalcMeuPLCorrected, map has size zero"<<endl;
03786     return -1;
03787   }
03788 
03789   Float_t local14_16=0;
03790   Float_t localSigCor=0;//for calc meu without fractions of planes
03791   Float_t localEnDep=0;//for calc meu without fractions of planes
03792   Int_t plCounter=0;
03793   Float_t initValue=-999;
03794   Float_t materialFromTrkEnd=0;
03795   Float_t materialInWindow=0;
03796   const Float_t material01Pl=(2.5+1)*Munits::cm;
03797   const Float_t material16Pl=16*material01Pl;
03798   const Float_t material14Pl=14*material01Pl;
03799   MAXMSG("CDAnalysis",Msg::kInfo,1)
03800     <<"Using 14 pls material="<<material14Pl
03801     <<", 16 plns="<<material16Pl
03802     <<", 1 plns="<<material01Pl<<endl;
03803 
03804   Int_t endPlane=this->GetEventLength();
03805 
03806   //calculate energy deposition in the window
03807   if (endPlane>=0){
03808     MAXMSG("CDAnalysis",Msg::kDebug,100)
03809       <<"Analysing track window, vtxPl=0"
03810       <<", endPl="<<endPlane<<endl;
03811     
03813     //loop over the track
03815     Int_t pl=endPlane;
03816     while (pl!=0){
03817       
03818       Float_t pathLengthCor=initValue;
03819       pathLengthCor=plPLCor[pl];
03820       if (pathLengthCor<1){
03821         MAXMSG("CDAnalysis",Msg::kWarning,1000)
03822           <<"pl="<<pl<<", endPlane="<<endPlane
03823           <<", path len cor wrong="<<pathLengthCor<<endl;
03824         //set default to 1
03825         pathLengthCor=1;
03826       }
03827 
03829       //sum up energy in window
03831       if ((materialFromTrkEnd+
03832            pathLengthCor*material01Pl)>material16Pl && 
03833           //check if window starts within or before this plane
03834           //&& that don't already have whole window of material
03835           materialInWindow<material14Pl){
03836 
03837         //alternatively start window after the plane in which 
03838         //the window should officially start part way through
03839         //if (materialFromTrkEnd>material16Pl && 
03840         //materialInWindow<material14Pl){
03841         
03842         //work out meu without using a fraction of a plane
03843         Float_t plCorEnDep=0;
03844         if (pathLengthCor) plCorEnDep=plEnDep[pl]/pathLengthCor;
03845         localSigCor+=plCorEnDep;
03846         plCounter++;
03847         //do it for the true en dep as well
03848         Float_t trueEnDep=this->TrueEnDep(pl,event);
03849         MAXMSG("CDAnalysis",Msg::kInfo,100)
03850           <<"trueEnDep="<<trueEnDep
03851           <<", PLCor="<<pathLengthCor
03852           <<", sum="<<localEnDep<<endl;
03853         if (pathLengthCor) trueEnDep/=pathLengthCor;
03854         localEnDep+=trueEnDep;
03855 
03856         //check if adding this much energy takes you over
03857         //the required amount of material
03858         if (materialInWindow+pathLengthCor*material01Pl>material14Pl){
03859 
03860           Float_t materialNeeded=material14Pl-materialInWindow;
03861           //calc the fraction of material/energy needed from this plane
03862           Float_t fractNeeded=materialNeeded/
03863             (pathLengthCor*material01Pl);
03864           
03865           MAXMSG("CDAnalysis",Msg::kDebug,100)
03866             <<"Last Chunk: matNeed="<<materialNeeded
03867             <<", matPl="<<pathLengthCor*material01Pl
03868             <<", 14Pl="<<material14Pl
03869             <<", matWin="<<materialInWindow
03870             <<", matTrk="<<materialFromTrkEnd<<endl
03871             <<"fractNeeded="<<fractNeeded<<", en in plane="<<plEnDep[pl]
03872             <<", en used="<<fractNeeded*plEnDep[pl]<<endl;
03873 
03874           //increment the material in window
03875           materialInWindow+=fractNeeded*(pathLengthCor*material01Pl);
03876 
03877           //add the required fraction of energy in this plane to
03878           //the total
03879           local14_16+=fractNeeded*plEnDep[pl];
03880         }
03881         else{
03882           //add the energy in this plane to the total
03883           materialInWindow+=pathLengthCor*material01Pl;
03884 
03885           MAXMSG("CDAnalysis",Msg::kDebug,500)
03886             <<"Window:p="<<pl
03887             <<", matPl="<<pathLengthCor*material01Pl
03888             <<", matWin="<<materialInWindow
03889             <<", matTrk="<<materialFromTrkEnd
03890             <<", plEn="<<plEnDep[pl]
03891             <<endl;
03892 
03893           //increment the energy deposited
03894           local14_16+=plEnDep[pl];
03895         }
03896       }
03897 
03898       MAXMSG("CDAnalysis",Msg::kDebug,1000)
03899         <<"local: matPl="<<pathLengthCor*material01Pl
03900         <<", matTrk="<<materialFromTrkEnd
03901         <<", matWin="<<materialInWindow<<", sumEnDep="<<local14_16
03902         <<"PLCor="<<pathLengthCor
03903         <<endl;
03904 
03905       //sum up material traversed
03906       if (pathLengthCor>0) materialFromTrkEnd+=pathLengthCor*
03907                              material01Pl;
03908       else {
03909         MAXMSG("CDAnalysis",Msg::kInfo,1000)
03910           <<"Ahhh path len cor wrong="<<pathLengthCor<<endl;
03911       }
03912 
03913       //increment the plane
03914       pl--;
03915     }
03916   }
03917 
03918   Float_t winSigCor=0;
03919   if (plCounter){
03920     winSigCor=localSigCor/plCounter;
03921     localEnDep/=plCounter;
03922     //set the output variable
03923     if (GeVPerMeu) *GeVPerMeu=localEnDep;
03924   }
03925 
03926   //meu from fraction of last plane in window
03927   local14_16/=14;
03928 
03929   //decide which to use
03930   Float_t meu=local14_16;
03931   Bool_t useNoFraction=true;
03932   if (useNoFraction) meu=winSigCor;
03933 
03934   //calc fraction of material in window actually obtained
03935   Float_t fractWin=materialInWindow/material14Pl;
03936   
03937   MAXMSG("CDAnalysis",Msg::kInfo,500)
03938     <<"14_16="<<local14_16<<", winSigCor="<<winSigCor
03939     <<", plCounter="<<plCounter<<", fractWin="<<fractWin<<endl;
03940 
03941   //don't return meu when only a fraction of window was obtained
03942   if (fractWin<1) meu=-1;
03943 
03944   return meu;
03945 }

void CDAnalysis::CalcNumPlanesHit Int_t  plane,
Float_t  pe
[private]
 

Definition at line 1125 of file CDAnalysis.cxx.

References fNumPlanesHit25, fNumPlanesHitAll, fNumPlanesHitPeCut, and fNumPlanesHitPeCut10.

Referenced by ElectronResponse(), and StoppingMuonCalibration().

01126 {
01127   //calc the num planes hit
01128   fNumPlanesHitAll[plane]++;
01129 
01130   //calc number of planes hit in first 25
01131   if (plane<25) fNumPlanesHit25[plane]++;
01132 
01133   //calc if pe cut satisfied
01134   if (pe>1.5) {
01135     fNumPlanesHitPeCut[plane]++;
01136 
01137     //only calc planes hit in first 10 planes
01138     if (plane<10) fNumPlanesHitPeCut10[plane]++;
01139   }
01140 }

void CDAnalysis::CalcNumPlanesHitTrk Int_t  plane  )  [private]
 

Definition at line 1144 of file CDAnalysis.cxx.

References fNumPlanesHitTrk.

Referenced by MuonStVsPl().

01145 {
01146   //calc the num planes hit
01147   fNumPlanesHitTrk[plane]++;
01148 }

Float_t CDAnalysis::CalcPathLengthCorection const TVector3 &  end1,
const TVector3 &  end2
const [private]
 

Definition at line 1484 of file CDAnalysis.cxx.

01486 {
01487   //calc pathlength between two points
01488   Float_t x=end1.X()-end2.X();
01489   Float_t y=end1.Y()-end2.Y();
01490   Float_t z=end1.Z()-end2.Z();
01491   Float_t pathLength=sqrt(pow(x,2)+pow(y,2)+pow(z,2));
01492   //calc path length correction
01493   Float_t pathLengthCor=-1;
01494   if (z!=0) pathLengthCor=pathLength/fabs(z);
01495   else cout<<"pathlength cor problem: z="<<z
01496            <<", x="<<x<<", y="<<y<<endl;
01497   return pathLengthCor;
01498 }

Bool_t CDAnalysis::CalcPLCor const std::map< Int_t, TVector3 > &  mPlPos,
std::map< Int_t, Float_t > &  mPLCor
const [private]
 

Definition at line 1600 of file CDAnalysis.cxx.

References GetEventLength(), MAXMSG, and MSG.

Referenced by StoppingMuonCalibration().

01602 {
01603   map<Int_t,TVector3>::const_iterator plPosEndIt=mPlPos.end();
01604 
01605   //Int_t lastPlaneNoXTalk=this->CalcLastPlaneOnTrkNoXTalk();
01606   Int_t lastPlane=this->GetEventLength();
01607   Float_t initValue=-999;
01608  
01609   for (Int_t pl=0;pl<=lastPlane;pl++){
01610     Int_t plVtxSide=pl-2;
01611     Int_t plStopSide=pl+2;
01612     
01613     //protect against going outside allowed ranges
01614     if (plVtxSide<0) plVtxSide=0;
01615     if (plStopSide>lastPlane) plStopSide=lastPlane;
01616 
01617     MAXMSG("CDAnalysis",Msg::kDebug,500)
01618       <<"pl="<<pl<<", plStopSide="<<plStopSide
01619       <<", plVtxSide="<<plVtxSide<<endl;
01620 
01621     //fit track position
01622     TGraph gx_z(3);//min of 3 points
01623     TGraph gy_z(3);
01624     Int_t tmpPl=plStopSide;
01625     Int_t tmpPlVtxSide=plVtxSide+1;
01626     Bool_t posDir=true;//always forward going in caldet
01627     if (posDir) tmpPlVtxSide=plVtxSide-1;
01628     Int_t i=0;
01629     //loop over planes to fit
01630     while (tmpPl!=tmpPlVtxSide){
01631       map<Int_t,TVector3>::const_iterator plPosIt=mPlPos.find(tmpPl);
01632       if (plPosIt!=plPosEndIt){
01633         Float_t x=(plPosIt->second).x();
01634         Float_t y=(plPosIt->second).y();
01635         Float_t z=(plPosIt->second).z();
01636         gx_z.SetPoint(i,z,x);
01637         gy_z.SetPoint(i,z,y);
01638         MAXMSG("CDAnalysis",Msg::kVerbose,500)
01639           <<"Adding point: x="<<x<<", y="<<y<<", z="<<z<<endl;
01640         //count the number of points added
01641         i++;
01642       }
01643       //increment the plane
01644       if (posDir) tmpPl--;
01645       else tmpPl++;
01646     }
01647   
01648     Float_t newPLCor=initValue;
01649     if (i>=3){
01650       gx_z.Fit("pol1","q");
01651       gy_z.Fit("pol1","q");
01652       Float_t mx_z=gx_z.GetFunction("pol1")->GetParameter(1);
01653       Float_t my_z=gy_z.GetFunction("pol1")->GetParameter(1);
01654       //Float_t mx_zErr=gx_z.GetFunction("pol1")->GetParError(1);
01655       //Float_t my_zErr=gy_z.GetFunction("pol1")->GetParError(1);
01656       newPLCor=sqrt(pow(mx_z,2)+pow(my_z,2)+1);
01657       MAXMSG("CDAnalysis",Msg::kDebug,500)
01658         <<"pl="<<pl<<", found plcor="<<newPLCor<<endl;
01659     }
01660     else {
01661       MSG("CDAnalysis",kWarning)
01662         <<"Less than 3 points, can't do local grad. fit"<<endl;
01663       return false;
01664     }
01665 
01666     if (newPLCor!=initValue) mPLCor[pl]=newPLCor;
01667     else MSG("CDAnalysis",kInfo)<<"Bad PLCor"<<endl;
01668 
01669   } 
01670 
01671   return true;
01672 }

void CDAnalysis::CalcXorYandZ Int_t  strip,
Int_t  plane,
Float_t &  x,
Float_t &  y,
Float_t &  z
const [private]
 

Definition at line 1502 of file CDAnalysis.cxx.

Referenced by CalcXYZ().

01504 {
01505   Float_t planePitch=5.94*Munits::cm;
01506   Float_t stripWidth=4.1*Munits::cm;
01507   Float_t stripsFromCentre=strip-11.5;//middle 2 strips 11&12 are 0.5 st
01508   Float_t distFromCentre=stripsFromCentre*stripWidth;
01509   
01510   //calc z
01511   z=plane*planePitch;
01512 
01513   if (plane%2==0){//even, v-view (measure v and y), horizontal strips
01514     x=-1;
01515     y=distFromCentre;
01516   }
01517   else if (plane%2==1){//odd, u-view (measure u and x), vertical strips
01518     x=distFromCentre;;
01519     y=-1;
01520   }
01521 }

Bool_t CDAnalysis::CalcXYZ std::map< Int_t, TVector3 > &  mPlPos  )  const [private]
 

Definition at line 1676 of file CDAnalysis.cxx.

References abs(), CalcXorYandZ(), CutOnBadPedestals(), fLastPlane, fTrkHitInfo, CDTrackedHitInfo::GetEnd(), GetEventLength(), CDTrackedHitInfo::GetPlane(), CDTrackedHitInfo::GetStrip(), and MAXMSG.

Referenced by StoppingMuonCalibration().

01677 {
01678   //get tclones arrays for this snarl
01679   TClonesArray &cTrk=*fTrkHitInfo;
01680   Int_t numTrkHits=fTrkHitInfo->GetEntries();
01681   
01682   if (numTrkHits<2){
01683     MAXMSG("CDAnalysis",Msg::kWarning,100)
01684       <<"CalcXYZ::numTrkHits is bad="<<numTrkHits<<endl;
01685     return false;
01686   }
01687 
01688   //Int_t lastPlaneNoXTalk=this->CalcLastPlaneOnTrkNoXTalk();
01689   Int_t lastPlane=this->GetEventLength();
01690   if (lastPlane<2 || lastPlane>59){
01691     MAXMSG("CDAnalysis",Msg::kWarning,100)
01692       <<"CalcXYZ::last plane is bad="<<lastPlane<<endl;
01693     return false;
01694   }
01695 
01696   Bool_t foundFirstFew=false;
01697   Bool_t unFilledGap=false;
01698   Float_t initValue=-999;
01699   vector<TVector3> plPosition(60);
01700   for (Int_t pl=0;pl<60;pl++){
01701     plPosition[pl]=TVector3(initValue,initValue,initValue);
01702   }
01703 
01705   //loop over the tracked hits
01707   for (Int_t hit=0;hit<numTrkHits;hit++){
01708     CDTrackedHitInfo* hitInfo=
01709       dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
01710     
01711     //get the variables
01712     Int_t plane=hitInfo->GetPlane();
01713     Int_t strip=hitInfo->GetStrip();
01714     Int_t stripend=hitInfo->GetEnd();
01715     //Float_t chargePe=hitInfo->GetCharge(CDTrackedHitInfo::kPe);
01716 
01717     //cut out the bad channels
01718     if (this->CutOnBadPedestals(plane,strip,stripend)) continue;
01719 
01720     Float_t x=initValue;
01721     Float_t y=initValue;
01722     Float_t z=initValue;
01723     this->CalcXorYandZ(strip,plane,x,y,z);
01724 
01725     plPosition[plane]=TVector3(x,y,z);
01726 
01727   }
01729   //end of loop over the tracked hits
01731 
01732   //calc the x and y of the first two planes
01733   //loop and look at more planes if can't find any hits in first few
01734   for (Int_t np=2;np<=5;np++){
01735     //look at first few even planes
01736     Float_t yAvFirstFew=0;
01737     Float_t yAvFirstFewCounter=0;
01738     for (Int_t pl=0;pl<np*2;pl+=2){//even measures v or y
01739       if (plPosition[pl].y()!=initValue){
01740         yAvFirstFew+=plPosition[pl].y();
01741         yAvFirstFewCounter++;
01742       }
01743     }
01744     if (yAvFirstFewCounter>0) yAvFirstFew/=yAvFirstFewCounter;
01745     else yAvFirstFew=initValue;
01746     
01747     //look at first few odd planes
01748     Float_t xAvFirstFew=0;
01749     Float_t xAvFirstFewCounter=0;
01750     for (Int_t pl=1;pl<np*2;pl+=2){//odd measures u or x
01751       if (plPosition[pl].x()!=initValue){
01752         xAvFirstFew+=plPosition[pl].x();
01753         xAvFirstFewCounter++;
01754       }
01755     }
01756     if (xAvFirstFewCounter>0) xAvFirstFew/=xAvFirstFewCounter;
01757     else xAvFirstFew=initValue;
01758     
01759     MAXMSG("CDAnalysis",Msg::kDebug,1000)
01760       <<"num planes="<<np
01761       <<", avX="<<xAvFirstFew<<" ("<<xAvFirstFewCounter<<")"
01762       <<", avY="<<yAvFirstFew<<" ("<<yAvFirstFewCounter<<")"<<endl;
01763 
01764     //now set the TVectors if an average was obtained
01765     if (xAvFirstFew==initValue || yAvFirstFew==initValue){
01766       MAXMSG("CDAnalysis",Msg::kVerbose,100)
01767         <<endl<<"Not found tracked hits with num planes="<<np
01768         <<", looping again..."<<endl<<endl;
01769     }
01770     else{
01771       //set the first 2 planes (what is not measured by that plane)
01772       plPosition[0].SetX(xAvFirstFew);
01773       plPosition[1].SetY(yAvFirstFew);
01774       
01775       //sometimes have to set what should have been measured if 
01776       //it is missing
01777       if (plPosition[0].Y()==initValue || plPosition[1].X()==initValue){
01778         MAXMSG("CDAnalysis",Msg::kDebug,100)
01779           <<endl<<"Having to manually set x or y in first few planes"
01780           <<endl<<endl;
01781         //plPosition[0].Print();
01782         //plPosition[1].Print();
01783       }
01784       if (plPosition[0].Y()==initValue) plPosition[0].SetY(yAvFirstFew);
01785       if (plPosition[1].X()==initValue) plPosition[1].SetX(xAvFirstFew);
01786       foundFirstFew=true;
01787       break;
01788     }
01789   }
01790 
01791   if (!foundFirstFew){
01792     MAXMSG("CDAnalysis",Msg::kDebug,100)
01793       <<endl<<"Not found hits in first few planes ignoring this event"
01794       <<endl<<endl;
01795     return false;
01796   }
01797 
01798   //probably best to do the +/- 2 planes first to fill the gaps
01799   //then do the interpolation into the planes that don't measure
01800   //what is needed.
01801 
01803   //loop and fill the gaps
01805   for (Int_t pl=2;pl<=lastPlane;pl++){
01806 
01807     Bool_t foundGap=false;
01808     
01809     //check for gaps
01810     if (pl%2==0){//even planes, measures v and y
01811       if (plPosition[pl].Y()==initValue) foundGap=true;
01812     }
01813     else if (pl%2==1){//odd planes, measures u and x
01814       if (plPosition[pl].X()==initValue) foundGap=true;
01815     }
01816 
01817     if (foundGap) {
01818       Int_t plPrev=pl-2;
01819       Int_t plNext=pl+2;
01820       Int_t plPrev4=pl-4;
01821       Int_t plNext4=pl+4;
01822       Float_t posPrev=initValue;
01823       Float_t posNext=initValue;
01824       Float_t pos=initValue;
01825       Float_t posPrev4=initValue;
01826       Float_t posNext4=initValue;
01827       Float_t pos4=initValue;
01828 
01829       //protect against going outside allowed ranges
01830       if (plPrev<0) {
01831         if (abs(plPrev%2)==0) plPrev=0;//even
01832         else if (abs(plPrev%2)==1) plPrev=1;//odd
01833       }
01834       if (plNext>59){
01835         if (plNext%2==0) plNext=58;//even
01836         else if (plNext%2==1) plNext=59;//odd
01837       }
01838       if (plPrev4<0) {
01839         if (abs(plPrev4%2)==0) plPrev4=0;//even
01840         else if (abs(plPrev4%2)==1) plPrev4=1;//odd
01841       }
01842       if (plNext4>59){
01843         if (plNext4%2==0) plNext4=58;//even
01844         else if (plNext4%2==1) plNext4=59;//odd
01845       }
01846       
01847       if (pl%2==0){//even planes, measures v and y
01848         //get position
01849         posPrev=plPosition[plPrev].Y();
01850         posNext=plPosition[plNext].Y();
01851         posPrev4=plPosition[plPrev4].Y();
01852         posNext4=plPosition[plNext4].Y();
01853       }
01854       else if (pl%2==1){//odd planes, measures u and x
01855         //get position
01856         posPrev=plPosition[plPrev].X();
01857         posNext=plPosition[plNext].X();
01858         posPrev4=plPosition[plPrev4].X();
01859         posNext4=plPosition[plNext4].X();
01860       }
01861       
01862       if (posPrev==initValue || posNext==initValue){
01863         MAXMSG("CDAnalysis",Msg::kDebug,500)
01864           <<"pl="<<pl<<", not found position"
01865           <<", prev="<<posPrev<<", next="<<posNext
01866           <<endl;
01867       }
01868       else{
01869         //calc the new position
01870         pos=(posPrev+posNext)*0.5;
01871         //MAXMSG("CDAnalysis",Msg::kDebug,1000)
01872         //<<"pl="<<pl
01873         //<<", found positions, prev="<<posPrev<<", next="<<posNext
01874         //<<", pos="<<pos<<endl;
01875       }
01876 
01877       if (posPrev4==initValue || posNext4==initValue){
01878         MAXMSG("CDAnalysis",Msg::kDebug,500)
01879           <<"pl="<<pl<<", not found position"
01880           <<", prev4="<<posPrev4<<", next4="<<posNext
01881           <<endl;
01882       }
01883       else{
01884         //calc the new position
01885         pos4=(posPrev4+posNext4)*0.5;
01886         //MAXMSG("CDAnalysis",Msg::kDebug,1000)
01887         //<<"pl="<<pl
01888         //<<", found positions, prev4="<<posPrev4<<", next4="<<posNext4
01889         //<<", pos4="<<pos4<<endl;
01890       }
01891     
01892       Float_t posToUse=pos;
01893       if (posToUse==initValue) posToUse=pos4;
01894 
01895       if (posToUse!=initValue){
01896         if (pl%2==0){//even planes, measures v and y
01897           //set position
01898           //MAXMSG("CDAnalysis",Msg::kDebug,1000)
01899           //<<"pl="<<pl<<", setting pos="<<posToUse
01900           //<<", y was="<<plPosition[pl].Y()<<endl;
01901           plPosition[pl].SetY(posToUse);
01902         }
01903         else if (pl%2==1){//odd planes, measures u and x
01904           //set position
01905           //MAXMSG("CDAnalysis",Msg::kDebug,1000)
01906           //<<"pl="<<pl<<", setting pos="<<posToUse
01907           //<<", x was="<<plPosition[pl].X()<<endl;
01908           plPosition[pl].SetX(posToUse);
01909         }
01910       }
01911       else{
01912         MAXMSG("CDAnalysis",Msg::kDebug,3000)
01913           <<"pl="<<pl<<", fLastPlane="<<fLastPlane
01914           <<", lastPl="<<lastPlane
01915           <<", not managed to fill gap with first method"<<endl;
01916         unFilledGap=true;
01917       }
01918     }
01919     else{
01920       MAXMSG("CDAnalysis",Msg::kDebug,3000)
01921         <<"pl="<<pl<<", no gap"<<endl;
01922     }
01923   }
01924 
01925   //fill any gaps that failed to get filled above
01926   //simple algorithm to just use the previous x/y value in the track
01927   Float_t lastX=initValue;
01928   Float_t lastY=initValue;
01929   if (unFilledGap){
01930     for (Int_t pl=0;pl<=lastPlane;pl++){
01931       if (pl%2==0){//even planes, measures v and y
01932         if (plPosition[pl].Y()==initValue){
01933           plPosition[pl].SetY(lastY);
01934           //MAXMSG("CDAnalysis",Msg::kVerbose,1000)
01935           //<<"pl="<<pl<<", fLastPlane="<<fLastPlane
01936           //<<", lastPl="<<lastPlane
01937           //<<", filled gap (y="<<lastY<<")"<<endl;
01938         }
01939         //get last position in track
01940         lastY=plPosition[pl].Y();
01941       }
01942       else if (pl%2==1){//odd planes, measures u and x
01943         if (plPosition[pl].X()==initValue){
01944           plPosition[pl].SetX(lastX);
01945           //MAXMSG("CDAnalysis",Msg::kVerbose,1000)
01946           //<<"pl="<<pl<<", fLastPlane="<<fLastPlane
01947           //<<", lastPl="<<lastPlane
01948           //<<", filled gap (x="<<lastX<<")"<<endl;
01949         }
01950         //get last position in track
01951         lastX=plPosition[pl].X();
01952       }
01953     }
01954   }
01955   
01957   //loop and just do the simple calculations 
01958   //+/- 1 plane to calc what is not measured
01960   for (Int_t pl=2;pl<=lastPlane;pl++){
01961     Int_t plPrev=pl-1;
01962     Int_t plNext=pl+1;
01963     Float_t posPrev=initValue;
01964     Float_t posNext=initValue;
01965     Float_t pos=initValue;
01966     
01967     //protect against going outside allowed ranges
01968     if (plPrev<0) {
01969       if (abs(plPrev%2)==0) plPrev=0;//even
01970       else if (abs(plPrev%2)==1) plPrev=1;//odd
01971     }
01972     if (plNext>59){
01973       if (plNext%2==0) plNext=58;//even
01974       else if (plNext%2==1) plNext=59;//odd
01975     }
01976     
01977     if (pl%2==0){//even planes, measures v and y
01978       //get position
01979       posPrev=plPosition[plPrev].X();
01980       posNext=plPosition[plNext].X();
01981     }
01982     else if (pl%2==1){//odd planes, measures u and x
01983       //get position
01984       posPrev=plPosition[plPrev].Y();
01985       posNext=plPosition[plNext].Y();
01986     }
01987     
01988     if (posPrev==initValue || posNext==initValue){
01989       MAXMSG("CDAnalysis",Msg::kDebug,500)
01990         <<"pl="<<pl<<", fLastPlane="<<fLastPlane
01991         <<", lastPl="<<lastPlane
01992         <<", not found position"
01993         <<", prev="<<posPrev<<", next="<<posNext
01994         <<endl;
01995     }
01996     else{
01997       //calc the new position
01998       pos=(posPrev+posNext)*0.5;
01999       MAXMSG("CDAnalysis",Msg::kDebug,1000)
02000         <<"pl="<<pl
02001         <<", found positions, prev="<<posPrev<<", next="<<posNext
02002         <<", pos="<<pos<<endl;
02003     }
02004     
02005     if (pl%2==0){//even planes, measures v and y
02006       //set position
02007       plPosition[pl].SetX(pos);
02008     }
02009     else if (pl%2==1){//odd planes, measures u and x
02010       //set position
02011       plPosition[pl].SetY(pos);
02012     }
02013   }
02014   
02015   //need to do a 3D vector type correction to work out the last plane
02016   //but hack for now - use same x/y as previous plane
02017   Int_t pl=lastPlane;
02018   if (pl%2==0){//even planes, measures v and y
02019     //set position
02020     Float_t lastPlX=plPosition[pl-1].X();
02021     plPosition[pl].SetX(lastPlX);
02022   }
02023   else if (pl%2==1){//odd planes, measures u and x
02024     //set position
02025     Float_t lastPlY=plPosition[pl-1].Y();
02026     plPosition[pl].SetY(lastPlY);
02027   }
02028   
02029   //MAXMSG("CDAnalysis",Msg::kInfo,200)
02030   //<<"fLastPlane="<<fLastPlane
02031   //<<", lastPl="<<lastPlane
02032   //<<endl;
02033   //loop and print positions
02034   //for (Int_t pl=0;pl<60;pl++){
02035   //MAXMSG("CDAnalysis",Msg::kInfo,5000)
02036   //  <<"pl="<<pl<<" (x,y,z)=("<<plPosition[pl].X()
02037   //  <<","<<plPosition[pl].Y()
02038   //  <<","<<plPosition[pl].Z()<<")"<<endl;
02039   //}
02040   
02041   //make map to return (not nice)
02042   for (Int_t pl=0;pl<60;pl++){
02043     mPlPos[pl]=plPosition[pl];
02044   }
02045   
02046   return true;
02047 }

void CDAnalysis::CleanMuons  ) 
 

Definition at line 13551 of file CDAnalysis.cxx.

References Form(), fOutFile, fPIDInfo, fRunNumber, fTime, fTrackInfo, fTrkHitInfo, fUnTrkHitInfo, fXTalkHits, CDXTalkHitInfo::GetCharge(), CDTrackedHitInfo::GetCharge(), CDTrackedHitInfo::GetDxDz(), CDTrackedHitInfo::GetDyDz(), CDTrackedHitInfo::GetDzDs(), CDTrackedHitInfo::GetEnd(), CDPIDInfo::GetFafErr(), CDPIDInfo::GetKovADC1(), CDPIDInfo::GetKovADC2(), CDPIDInfo::GetKovADC3(), CDPIDInfo::GetKovTimeStamp1(), CDPIDInfo::GetKovTimeStamp2(), CDPIDInfo::GetKovTimeStamp3(), CDXTalkHitInfo::GetPlane(), CDTrackedHitInfo::GetPlane(), CDTrackInfo::GetResult(), CDPIDInfo::GetSnarlMaxTimeStamp(), CDPIDInfo::GetSnarlMinTimeStamp(), CDPIDInfo::GetSnarlTimeFrame(), CDPIDInfo::GetSparseErr(), CDXTalkHitInfo::GetStrip(), CDTrackedHitInfo::GetStrip(), CDPIDInfo::GetTickSinceLast(), CDPIDInfo::GetTofADC0(), CDPIDInfo::GetTofADC1(), CDPIDInfo::GetTofADC2(), CDPIDInfo::GetTofADCTimeStamp0(), CDPIDInfo::GetTofADCTimeStamp1(), CDPIDInfo::GetTofADCTimeStamp2(), CDPIDInfo::GetTofTDC0(), CDPIDInfo::GetTofTDC1(), CDPIDInfo::GetTofTDC2(), CDPIDInfo::GetTofTimeStamp(), CDTrackedHitInfo::GetTransPos(), CDPIDInfo::GetTriggerPMT(), CDPIDInfo::GetTrigSource(), CDTrackedHitInfo::GetYPos(), InitialiseLoopVariables(), MAXMSG, MSG, OpenFile(), ReadInHitInfo(), ScaleMap(), SetLoopVariables(), and TGraphMap().

13552 {
13553   MSG("CDAnalysis",Msg::kInfo) 
13554     <<" ** Running CleanMuons method... **"<<endl;
13555 
13556   //open the output file for the histograms
13557   fOutFile=this->OpenFile(fRunNumber,"CleanMuons");
13558 
13559   TH1F *hTime=new TH1F("hTime","hTime",100000,-500-9,500e-9);
13560   hTime->GetXaxis()->SetTitle("Time");
13561   hTime->GetXaxis()->CenterTitle();
13562   hTime->GetYaxis()->SetTitle("");
13563   hTime->GetYaxis()->CenterTitle();
13564   hTime->SetFillColor(0);
13565   //hTime->SetBit(TH1::kCanRebin);
13566 
13567   TH1F *hTime2=new TH1F("hTime2","hTime2",1000000,-1,1);
13568   hTime2->GetXaxis()->SetTitle("Time2");
13569   hTime2->GetXaxis()->CenterTitle();
13570   hTime2->GetYaxis()->SetTitle("");
13571   hTime2->GetYaxis()->CenterTitle();
13572   hTime2->SetFillColor(0);
13573   //hTime2->SetBit(TH1::kCanRebin);
13574 
13575   TProfile2D *hStVsPl1=new TProfile2D("hStVsPl1","StVsPl1",
13576                          67,-2,65,27,-2,25);
13577   hStVsPl1->GetXaxis()->SetTitle("Plane");
13578   hStVsPl1->GetXaxis()->CenterTitle();
13579   hStVsPl1->GetYaxis()->SetTitle("Strip");
13580   hStVsPl1->GetYaxis()->CenterTitle();
13581   hStVsPl1->SetFillColor(0);
13582   hStVsPl1->SetBit(TH1::kCanRebin);
13583 
13584   TProfile2D *hStVsPl2=new TProfile2D("hStVsPl2","StVsPl2",
13585                          67,-2,65,27,-2,25);
13586   hStVsPl2->GetXaxis()->SetTitle("Plane");
13587   hStVsPl2->GetXaxis()->CenterTitle();
13588   hStVsPl2->GetYaxis()->SetTitle("Strip");
13589   hStVsPl2->GetYaxis()->CenterTitle();
13590   hStVsPl2->SetFillColor(0);
13591   hStVsPl2->SetBit(TH1::kCanRebin);
13592 
13593   TH1F *hTofKov1Diff=new TH1F("hTofKov1Diff",
13594                                "hTofKov1Diff",4000,-2,3);
13595   hTofKov1Diff->GetXaxis()->SetTitle("TofTimeStamp");
13596   hTofKov1Diff->GetXaxis()->CenterTitle();
13597   hTofKov1Diff->GetYaxis()->SetTitle("");
13598   hTofKov1Diff->GetYaxis()->CenterTitle();
13599   hTofKov1Diff->SetFillColor(0);
13600   hTofKov1Diff->SetBit(TH1::kCanRebin);
13601 
13602   TH1F *hTofKov3Diff=new TH1F("hTofKov3Diff",
13603                                "hTofKov3Diff",4000,-2,3);
13604   hTofKov3Diff->GetXaxis()->SetTitle("TofTimeStamp");
13605   hTofKov3Diff->GetXaxis()->CenterTitle();
13606   hTofKov3Diff->GetYaxis()->SetTitle("");
13607   hTofKov3Diff->GetYaxis()->CenterTitle();
13608   hTofKov3Diff->SetFillColor(0);
13609   hTofKov3Diff->SetBit(TH1::kCanRebin);
13610 
13611   TH1F *hTofKov1DiffWhole=new TH1F("hTofKov1DiffWhole",
13612                                "hTofKov1DiffWhole",4000,-2,3);
13613   hTofKov1DiffWhole->GetXaxis()->SetTitle("TofTimeStamp");
13614   hTofKov1DiffWhole->GetXaxis()->CenterTitle();
13615   hTofKov1DiffWhole->GetYaxis()->SetTitle("");
13616   hTofKov1DiffWhole->GetYaxis()->CenterTitle();
13617   hTofKov1DiffWhole->SetFillColor(0);
13618   hTofKov1DiffWhole->SetBit(TH1::kCanRebin);
13619 
13620   TH1F *hTofKov3DiffWhole=new TH1F("hTofKov3DiffWhole",
13621                                "hTofKov3DiffWhole",4000,-2,3);
13622   hTofKov3DiffWhole->GetXaxis()->SetTitle("TofTimeStamp");
13623   hTofKov3DiffWhole->GetXaxis()->CenterTitle();
13624   hTofKov3DiffWhole->GetYaxis()->SetTitle("");
13625   hTofKov3DiffWhole->GetYaxis()->CenterTitle();
13626   hTofKov3DiffWhole->SetFillColor(0);
13627   hTofKov3DiffWhole->SetBit(TH1::kCanRebin);
13628 
13629   TH1F *hTofTDC0=new TH1F("hTofTDC0","TofTDC0",400,-2,4000);
13630   hTofTDC0->GetXaxis()->SetTitle("TofTDC0");
13631   hTofTDC0->GetXaxis()->CenterTitle();
13632   hTofTDC0->GetYaxis()->SetTitle("");
13633   hTofTDC0->GetYaxis()->CenterTitle();
13634   hTofTDC0->SetFillColor(0);
13635   hTofTDC0->SetBit(TH1::kCanRebin);
13636 
13637   TH1F *hTofTDC2=new TH1F("hTofTDC2","TofTDC2",400,-2,4000);
13638   hTofTDC2->GetXaxis()->SetTitle("TofTDC2");
13639   hTofTDC2->GetXaxis()->CenterTitle();
13640   hTofTDC2->GetYaxis()->SetTitle("");
13641   hTofTDC2->GetYaxis()->CenterTitle();
13642   hTofTDC2->SetFillColor(0);
13643   hTofTDC2->SetBit(TH1::kCanRebin);
13644 
13645   TH1F *hTofDiff=new TH1F("hTofDiff","TofDiff",1000,0,1000);
13646   hTofDiff->GetXaxis()->SetTitle("TofDiff");
13647   hTofDiff->GetXaxis()->CenterTitle();
13648   hTofDiff->GetYaxis()->SetTitle("");
13649   hTofDiff->GetYaxis()->CenterTitle();
13650   hTofDiff->SetFillColor(0);
13651   //hTofDiff->SetBit(TH1::kCanRebin);
13652 
13653   TH1F *hTofDiffElec=new TH1F("hTofDiffElec","TofDiffElec",1000,0,1000);
13654   hTofDiffElec->GetXaxis()->SetTitle("TofDiff");
13655   hTofDiffElec->GetXaxis()->CenterTitle();
13656   hTofDiffElec->GetYaxis()->SetTitle("");
13657   hTofDiffElec->GetYaxis()->CenterTitle();
13658   hTofDiffElec->SetFillColor(0);
13659   //hTofDiffElec->SetBit(TH1::kCanRebin);
13660 
13661   TH1F *hTofDiffNotElec=new TH1F("hTofDiffNotElec","TofDiffNotElec",
13662                                  1000,0,1000);
13663   hTofDiffNotElec->GetXaxis()->SetTitle("TofDiff");
13664   hTofDiffNotElec->GetXaxis()->CenterTitle();
13665   hTofDiffNotElec->GetYaxis()->SetTitle("");
13666   hTofDiffNotElec->GetYaxis()->CenterTitle();
13667   hTofDiffNotElec->SetFillColor(0);
13668   //hTofDiffNotElec->SetBit(TH1::kCanRebin);
13669 
13670   TH1F *hTofTDC0Whole=new TH1F("hTofTDC0Whole","TofTDC0Whole",
13671                                400,-2,4000);
13672   hTofTDC0Whole->GetXaxis()->SetTitle("TofTDC0");
13673   hTofTDC0Whole->GetXaxis()->CenterTitle();
13674   hTofTDC0Whole->GetYaxis()->SetTitle("");
13675   hTofTDC0Whole->GetYaxis()->CenterTitle();
13676   hTofTDC0Whole->SetFillColor(0);
13677   hTofTDC0Whole->SetBit(TH1::kCanRebin);
13678 
13679   TH1F *hTofTDC2Whole=new TH1F("hTofTDC2Whole","TofTDC2Whole",
13680                                400,-2,4000);
13681   hTofTDC2Whole->GetXaxis()->SetTitle("TofTDC2");
13682   hTofTDC2Whole->GetXaxis()->CenterTitle();
13683   hTofTDC2Whole->GetYaxis()->SetTitle("");
13684   hTofTDC2Whole->GetYaxis()->CenterTitle();
13685   hTofTDC2Whole->SetFillColor(0);
13686   hTofTDC2Whole->SetBit(TH1::kCanRebin);
13687 
13688   TH1F *hTofDiffWhole=new TH1F("hTofDiffWhole","TofDiffWhole",
13689                                1000,-2000,4000);
13690   hTofDiffWhole->GetXaxis()->SetTitle("TofDiff");
13691   hTofDiffWhole->GetXaxis()->CenterTitle();
13692   hTofDiffWhole->GetYaxis()->SetTitle("");
13693   hTofDiffWhole->GetYaxis()->CenterTitle();
13694   hTofDiffWhole->SetFillColor(0);
13695   hTofDiffWhole->SetBit(TH1::kCanRebin);
13696 
13697   TH1F *hKovADC1Whole=new TH1F("hKovADC1Whole","KovADC1Whole",
13698                                400,-5,15000);
13699   hKovADC1Whole->GetXaxis()->SetTitle("KovADC1Whole");
13700   hKovADC1Whole->GetXaxis()->CenterTitle();
13701   hKovADC1Whole->GetYaxis()->SetTitle("");
13702   hKovADC1Whole->GetYaxis()->CenterTitle();
13703   hKovADC1Whole->SetFillColor(0);
13704   hKovADC1Whole->SetBit(TH1::kCanRebin);
13705 
13706   TH1F *hKovADC1=new TH1F("hKovADC1","KovADC1",400,-5,15000);
13707   hKovADC1->GetXaxis()->SetTitle("KovADC1");
13708   hKovADC1->GetXaxis()->CenterTitle();
13709   hKovADC1->GetYaxis()->SetTitle("");
13710   hKovADC1->GetYaxis()->CenterTitle();
13711   hKovADC1->SetFillColor(0);
13712   hKovADC1->SetBit(TH1::kCanRebin);
13713 
13714   TH1F *hKovADC1Cut=new TH1F("hKovADC1Cut","KovADC1Cut",400,-5,15000);
13715   hKovADC1Cut->GetXaxis()->SetTitle("KovADC1Cut");
13716   hKovADC1Cut->GetXaxis()->CenterTitle();
13717   hKovADC1Cut->GetYaxis()->SetTitle("");
13718   hKovADC1Cut->GetYaxis()->CenterTitle();
13719   hKovADC1Cut->SetFillColor(0);
13720   hKovADC1Cut->SetBit(TH1::kCanRebin);
13721 
13722   TH1F *hKovADC3Whole=new TH1F("hKovADC3Whole","KovADC3Whole",
13723                                400,-5,15000);
13724   hKovADC3Whole->GetXaxis()->SetTitle("KovADC3Whole");
13725   hKovADC3Whole->GetXaxis()->CenterTitle();
13726   hKovADC3Whole->GetYaxis()->SetTitle("");
13727   hKovADC3Whole->GetYaxis()->CenterTitle();
13728   hKovADC3Whole->SetFillColor(0);
13729   hKovADC3Whole->SetBit(TH1::kCanRebin);
13730 
13731   TH1F *hKovADC3=new TH1F("hKovADC3","KovADC3",400,-5,15000);
13732   hKovADC3->GetXaxis()->SetTitle("KovADC3");
13733   hKovADC3->GetXaxis()->CenterTitle();
13734   hKovADC3->GetYaxis()->SetTitle("");
13735   hKovADC3->GetYaxis()->CenterTitle();
13736   hKovADC3->SetFillColor(0);
13737   hKovADC3->SetBit(TH1::kCanRebin);
13738 
13739   TH1F *hKovADC3Cut=new TH1F("hKovADC3Cut","KovADC3Cut",400,-5,15000);
13740   hKovADC3Cut->GetXaxis()->SetTitle("KovADC3Cut");
13741   hKovADC3Cut->GetXaxis()->CenterTitle();
13742   hKovADC3Cut->GetYaxis()->SetTitle("");
13743   hKovADC3Cut->GetYaxis()->CenterTitle();
13744   hKovADC3Cut->SetFillColor(0);
13745   hKovADC3Cut->SetBit(TH1::kCanRebin);
13746 
13747   TH1F *hStrip=new TH1F("hStrip","Strips hit",100,-2,30);
13748   hStrip->GetXaxis()->SetTitle("Strip");
13749   hStrip->GetXaxis()->CenterTitle();
13750   hStrip->GetYaxis()->SetTitle("");
13751   hStrip->GetYaxis()->CenterTitle();
13752   hStrip->SetFillColor(0);
13753   hStrip->SetBit(TH1::kCanRebin);
13754 
13755   TH1F *hStripend=new TH1F("hStripend","Stripend hit",120,-2,10);
13756   hStripend->GetXaxis()->SetTitle("Stripend");
13757   hStripend->GetXaxis()->CenterTitle();
13758   hStripend->GetYaxis()->SetTitle("");
13759   hStripend->GetYaxis()->CenterTitle();
13760   hStripend->SetFillColor(0);
13761   hStripend->SetBit(TH1::kCanRebin);
13762 
13763   TH1F *hPlane=new TH1F("hPlane","Planes hit",200,-2,75);
13764   hPlane->GetXaxis()->SetTitle("Plane");
13765   hPlane->GetXaxis()->CenterTitle();
13766   hPlane->GetYaxis()->SetTitle("");
13767   hPlane->GetYaxis()->CenterTitle();
13768   hPlane->SetFillColor(0);
13769   hPlane->SetBit(TH1::kCanRebin);
13770 
13771   TH1F *hNumPlanes=new TH1F("hNumPlanes","NumPlanes hit",200,-2,75);
13772   hNumPlanes->GetXaxis()->SetTitle("NumPlanes");
13773   hNumPlanes->GetXaxis()->CenterTitle();
13774   hNumPlanes->GetYaxis()->SetTitle("");
13775   hNumPlanes->GetYaxis()->CenterTitle();
13776   hNumPlanes->SetFillColor(0);
13777   hNumPlanes->SetBit(TH1::kCanRebin);
13778 
13779   TH1F *hEventLength=new TH1F("hEventLength","EventLength hit",200,-2,75);
13780   hEventLength->GetXaxis()->SetTitle("EventLength");
13781   hEventLength->GetXaxis()->CenterTitle();
13782   hEventLength->GetYaxis()->SetTitle("");
13783   hEventLength->GetYaxis()->CenterTitle();
13784   hEventLength->SetFillColor(0);
13785   hEventLength->SetBit(TH1::kCanRebin);
13786 
13787   TH1F *hChargeSigCor=new TH1F("hChargeSigCor","ChargeSigCor",
13788                                1000,-2,15000);
13789   hChargeSigCor->GetXaxis()->SetTitle("ChargeSigCor");
13790   hChargeSigCor->GetXaxis()->CenterTitle();
13791   hChargeSigCor->GetYaxis()->SetTitle("");
13792   hChargeSigCor->GetYaxis()->CenterTitle();
13793   hChargeSigCor->SetFillColor(0);
13794   hChargeSigCor->SetBit(TH1::kCanRebin);
13795 
13796   TH1F *hChargeSigLin=new TH1F("hChargeSigLin","ChargeSigLin",
13797                                1000,-2,15000);
13798   hChargeSigLin->GetXaxis()->SetTitle("ChargeSigLin");
13799   hChargeSigLin->GetXaxis()->CenterTitle();
13800   hChargeSigLin->GetYaxis()->SetTitle("");
13801   hChargeSigLin->GetYaxis()->CenterTitle();
13802   hChargeSigLin->SetFillColor(0);
13803   hChargeSigLin->SetBit(TH1::kCanRebin);
13804 
13805   TH1F *hChargePe=new TH1F("hChargePe","ChargePe",412,-12,400);
13806   hChargePe->GetXaxis()->SetTitle("ChargePe");
13807   hChargePe->GetXaxis()->CenterTitle();
13808   hChargePe->GetYaxis()->SetTitle("");
13809   hChargePe->GetYaxis()->CenterTitle();
13810   hChargePe->SetFillColor(0);
13811   hChargePe->SetBit(TH1::kCanRebin);
13812 
13813   TH1F *hGain=new TH1F("hGain","Gain",1000,-2,150);
13814   hGain->GetXaxis()->SetTitle("Gain");
13815   hGain->GetXaxis()->CenterTitle();
13816   hGain->GetYaxis()->SetTitle("");
13817   hGain->GetYaxis()->CenterTitle();
13818   hGain->SetFillColor(0);
13819   hGain->SetBit(TH1::kCanRebin);
13820 
13821   TH1F *hAdc=new TH1F("hAdc","Adc",1000,-2,150);
13822   hAdc->GetXaxis()->SetTitle("Adc");
13823   hAdc->GetXaxis()->CenterTitle();
13824   hAdc->GetYaxis()->SetTitle("");
13825   hAdc->GetYaxis()->CenterTitle();
13826   hAdc->SetFillColor(0);
13827   hAdc->SetBit(TH1::kCanRebin);
13828 
13829   TH1F *hdzds=new TH1F("hdzds","dzds",400,-2,2);
13830   hdzds->GetXaxis()->SetTitle("dzds");
13831   hdzds->GetXaxis()->CenterTitle();
13832   hdzds->GetYaxis()->SetTitle("");
13833   hdzds->GetYaxis()->CenterTitle();
13834   hdzds->SetFillColor(0);
13835   hdzds->SetBit(TH1::kCanRebin);
13836 
13837   TH1F *hdsdz=new TH1F("hdsdz","dsdz",400,-2,10);
13838   hdsdz->GetXaxis()->SetTitle("dsdz");
13839   hdsdz->GetXaxis()->CenterTitle();
13840   hdsdz->GetYaxis()->SetTitle("");
13841   hdsdz->GetYaxis()->CenterTitle();
13842   hdsdz->SetFillColor(0);
13843   hdsdz->SetBit(TH1::kCanRebin);
13844 
13845   TH1F *hdydz=new TH1F("hdydz","dydz",400,-5,5);
13846   hdydz->GetXaxis()->SetTitle("dydz");
13847   hdydz->GetXaxis()->CenterTitle();
13848   hdydz->GetYaxis()->SetTitle("");
13849   hdydz->GetYaxis()->CenterTitle();
13850   hdydz->SetFillColor(0);
13851   hdydz->SetBit(TH1::kCanRebin);
13852 
13853   TH1F *hdxdz=new TH1F("hdxdz","dxdz",400,-10,10);
13854   hdxdz->GetXaxis()->SetTitle("dxdz");
13855   hdxdz->GetXaxis()->CenterTitle();
13856   hdxdz->GetYaxis()->SetTitle("");
13857   hdxdz->GetYaxis()->CenterTitle();
13858   hdxdz->SetFillColor(0);
13859   hdxdz->SetBit(TH1::kCanRebin);
13860 
13861   TH1F *hdyds=new TH1F("hdyds","dyds",400,-3,3);
13862   hdyds->GetXaxis()->SetTitle("dyds");
13863   hdyds->GetXaxis()->CenterTitle();
13864   hdyds->GetYaxis()->SetTitle("");
13865   hdyds->GetYaxis()->CenterTitle();
13866   hdyds->SetFillColor(0);
13867   hdyds->SetBit(TH1::kCanRebin);
13868 
13869   TH1F *hdxds=new TH1F("hdxds","dxds",400,-3,3);
13870   hdxds->GetXaxis()->SetTitle("dxds");
13871   hdxds->GetXaxis()->CenterTitle();
13872   hdxds->GetYaxis()->SetTitle("");
13873   hdxds->GetYaxis()->CenterTitle();
13874   hdxds->SetFillColor(0);
13875   hdxds->SetBit(TH1::kCanRebin);
13876 
13877   TH1F *hTransPos=new TH1F("hTransPos","TransPos",1000,-2,35);
13878   hTransPos->GetXaxis()->SetTitle("TransPos");
13879   hTransPos->GetXaxis()->CenterTitle();
13880   hTransPos->GetYaxis()->SetTitle("");
13881   hTransPos->GetYaxis()->CenterTitle();
13882   hTransPos->SetFillColor(0);
13883   hTransPos->SetBit(TH1::kCanRebin);
13884 
13885   TH1F *hYPos=new TH1F("hYPos","YPos",1000,-8,8);
13886   hYPos->GetXaxis()->SetTitle("YPos");
13887   hYPos->GetXaxis()->CenterTitle();
13888   hYPos->GetYaxis()->SetTitle("");
13889   hYPos->GetYaxis()->CenterTitle();
13890   hYPos->SetFillColor(0);
13891   hYPos->SetBit(TH1::kCanRebin);
13892 
13893   TH1F *hEvenResult=new TH1F("hEvenResult","EvenResult",100,-5,5);
13894   hEvenResult->GetXaxis()->SetTitle("EvenResult");
13895   hEvenResult->GetXaxis()->CenterTitle();
13896   hEvenResult->GetYaxis()->SetTitle("");
13897   hEvenResult->GetYaxis()->CenterTitle();
13898   hEvenResult->SetFillColor(0);
13899   hEvenResult->SetBit(TH1::kCanRebin);
13900 
13901   TH1F *hOddResult=new TH1F("hOddResult","OddResult",100,-5,5);
13902   hOddResult->GetXaxis()->SetTitle("OddResult");
13903   hOddResult->GetXaxis()->CenterTitle();
13904   hOddResult->GetYaxis()->SetTitle("");
13905   hOddResult->GetYaxis()->CenterTitle();
13906   hOddResult->SetFillColor(0);
13907   hOddResult->SetBit(TH1::kCanRebin);
13908 
13909   TProfile* pSigCorVsPlane=new TProfile("pSigCorVsPlane",
13910                                         "pSigCorVsPlane",
13911                                         65,-1,64);
13912   TProfile* pSigCorVsOsPlane=new TProfile("pSigCorVsOsPlane",
13913                                          "pSigCorVsOsPlane",
13914                                          70,5,75);
13915 
13916   Bool_t triggerPMT;            //Did the triggerPMT fire?
13917   Bool_t fafErr;                //Faf errors?
13918   Bool_t sparseErr;             //sparse errors?
13919   Int_t trigSource;             //trigger source
13920   Int_t kovADC1;                //Cerenkov ADC value
13921   Int_t kovTimeStamp1;          //Cerenkov TimeStamp
13922   Int_t kovADC2;
13923   Int_t kovTimeStamp2;
13924   Int_t kovADC3;
13925   Int_t kovTimeStamp3;
13926   Int_t snarlTimeFrame;         //Event TimeFrame
13927   ULong_t snarlMinTimeStamp;  //event minimum timetimestamp
13928   ULong_t snarlMaxTimeStamp;  //event maximum timestamp
13929   Int_t tofTDC0;                //TOF tdc0 value
13930   Int_t tofTDC1;                //TOF tdc1 value
13931   Int_t tofTDC2;                //TOF tdc2 value
13932   Int_t tofADC0;                //TOF ADC0 value (not always present) 
13933                                //______Context depends on the run
13934   Int_t tofADC1;                //TOF ADC1 value (not always present) 
13935                                //Used for tof system testing
13936   Int_t tofADC2;                //TOF ADC1 value (not always present) 
13937                                //Used for tof system testing
13938   Int_t tofADCTimeStamp0;       //tof adc timestamps
13939   Int_t tofADCTimeStamp1;
13940   Int_t tofADCTimeStamp2;  
13941   Int_t tofTimeStamp;           //time stamp of TOF readout
13942   Int_t tickSinceLast;          //Ticks since last snarl
13943 
13944   map<Int_t,Float_t> totalSigCor;
13945   map<Int_t,Float_t> totalNum;
13946   map<Int_t,Float_t> totalSigCorOffSet;
13947   map<Int_t,Float_t> totalNumOffSet;
13948   map<Int_t,Float_t> totalSigCor2;
13949   map<Int_t,Float_t> totalNum2;
13950   map<Int_t,Float_t> totalSigCorOffSet2;
13951   map<Int_t,Float_t> totalNumOffSet2;
13952   map<Int_t,Float_t> totalSigCor3;
13953   map<Int_t,Float_t> totalNum3;
13954   map<Int_t,Float_t> totalSigCorOffSet3;
13955   map<Int_t,Float_t> totalNumOffSet3;
13956   vector<TProfile*> pSigCorVsDist;
13957   vector<Int_t> vWindowSize;
13958 
13962   
13963   this->InitialiseLoopVariables();  
13964   
13965   for(Int_t event=0;event<fEvents;event++){
13966     
13967     this->SetLoopVariables(event);
13968 
13969     if (!fPIDInfo){
13970       MAXMSG("CDAnalysis",Msg::kWarning,100)
13971         <<"No PID info: fPIDInfo="<<fPIDInfo<<endl;
13972       continue;
13973     }
13974 
13975     triggerPMT=fPIDInfo->GetTriggerPMT();
13976     fafErr=fPIDInfo->GetFafErr() ;
13977     sparseErr=fPIDInfo->GetSparseErr();
13978     trigSource=fPIDInfo->GetTrigSource();
13979     kovADC1=fPIDInfo->GetKovADC1() ;
13980     kovTimeStamp1=fPIDInfo->GetKovTimeStamp1();
13981     kovADC2=fPIDInfo->GetKovADC2();
13982     kovTimeStamp2=fPIDInfo->GetKovTimeStamp2();
13983     kovADC3=fPIDInfo->GetKovADC3();
13984     kovTimeStamp3=fPIDInfo->GetKovTimeStamp3(); 
13985     snarlTimeFrame=fPIDInfo->GetSnarlTimeFrame();
13986     snarlMinTimeStamp=fPIDInfo->GetSnarlMinTimeStamp();
13987     snarlMaxTimeStamp=fPIDInfo->GetSnarlMaxTimeStamp();
13988     tofTDC0=fPIDInfo->GetTofTDC0();
13989     tofTDC1=fPIDInfo->GetTofTDC1();
13990     tofTDC2=fPIDInfo->GetTofTDC2();
13991     tofADC0=fPIDInfo->GetTofADC0();
13992     tofADC1=fPIDInfo->GetTofADC1();
13993     tofADC2=fPIDInfo->GetTofADC2();
13994     tofADCTimeStamp0=fPIDInfo->GetTofADCTimeStamp0();
13995     tofADCTimeStamp1=fPIDInfo->GetTofADCTimeStamp1();
13996     tofADCTimeStamp2=fPIDInfo->GetTofADCTimeStamp2();
13997     tofTimeStamp=fPIDInfo->GetTofTimeStamp();//don't use
13998     tickSinceLast=fPIDInfo->GetTickSinceLast();
13999     
14000     hKovADC3Whole->Fill(kovADC3);
14001     hKovADC1Whole->Fill(kovADC1);
14002     hTofTDC0Whole->Fill(tofTDC0);
14003     hTofTDC2Whole->Fill(tofTDC2);
14004     hTofDiffWhole->Fill(tofTDC2-tofTDC0);
14005     hTofKov1DiffWhole->Fill(tofADCTimeStamp1-kovTimeStamp1);
14006     hTofKov3DiffWhole->Fill(tofADCTimeStamp1-kovTimeStamp3);
14007 
14008     //if (this->CutOnPidForElec()) continue;
14009 
14010     hEvenResult->Fill(fTrackInfo->GetResult(0));
14011     hOddResult->Fill(fTrackInfo->GetResult(1));
14012 
14013     hTofTDC0->Fill(tofTDC0);
14014     hTofTDC2->Fill(tofTDC2);
14015     hTofDiff->Fill(tofTDC2-tofTDC0);
14016     if (kovADC1>500 && kovADC3>500) hTofDiffElec->Fill(tofTDC2-tofTDC0);
14017     else hTofDiffNotElec->Fill(tofTDC2-tofTDC0);
14018     hTofKov1Diff->Fill(tofADCTimeStamp1-kovTimeStamp1);
14019     hTofKov3Diff->Fill(tofADCTimeStamp1-kovTimeStamp3);
14020 
14021     MSG("CDAnalysis",Msg::kVerbose)//diff is the lemo
14022       <<"ttof="<<tofTimeStamp
14023       <<", tofADCTimeStamp1="<<tofADCTimeStamp1<<endl;
14024 
14025     map<Int_t,Int_t> numPlanesHit;
14026     map<Int_t,Int_t> numPlanesHit1;
14027     map<Int_t,Int_t> numPlanesHit2;
14028     Int_t firstPlane=999999;
14029     Int_t lastPlane=-1;
14030     Int_t lastPlaneOdd=-1;
14031     Int_t lastPlaneEven=-1;
14032     map<Int_t,Float_t> planeSigCor;
14033     map<Int_t,Float_t> planeSigCorX;
14034     map<Int_t,Float_t> planeSigCorT;
14035 
14036     //get tclones arrays for this snarl
14037     TClonesArray &cTrk=*fTrkHitInfo;
14038     Int_t numTrkHits=fTrkHitInfo->GetEntries();
14039     TClonesArray &cUnTrk = *fUnTrkHitInfo;
14040     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
14041     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
14042     TClonesArray &cXTalk = *fXTalkHits;
14043     Int_t numXTalkHits=fXTalkHits->GetEntries();
14044           
14045     //look for untracked big events
14046     if (numTrkHits<2 && numXTalkHits+numUnTrkHits>100){
14047       MSG("CDAnalysis",Msg::kDebug)
14048         <<"Event="<<event
14049         <<", Num hits: trk="<<numTrkHits<<", unTrk="<<numUnTrkHits
14050         <<", xtalk="<<numXTalkHits<<endl;
14051     }
14052 
14054     //loop over the untracked hits in the snarl
14056     for (Int_t hit=0;hit<numUnTrkHits;hit++){
14057       CDTrackedHitInfo *hitInfo=(CDTrackedHitInfo*) cUnTrk[hit];
14058 
14059       this->ReadInHitInfo(hitInfo);
14060 
14061       Float_t chargeSigCor=hitInfo->GetCharge
14062         (CDTrackedHitInfo::kSigCorr);
14063       Int_t plane=hitInfo->GetPlane();
14064       Int_t strip=hitInfo->GetStrip();
14065 
14066       //cut out the strips with bad pedestals
14067       if ((plane==21 || plane==41) && strip==19) continue;
14068       //cut out the negative adcs
14069       if (strip==13 && plane==40) continue;
14070 
14071       hTime->Fill(fTime-tofTimeStamp);
14072       hTime2->Fill(fTime-tofTimeStamp);
14073 
14074       //add up the charge of the hits in each plane
14075       planeSigCorX[plane]+=chargeSigCor;
14076       planeSigCorT[plane]+=chargeSigCor;
14077     }
14078 
14080     //loop over xtalk hits in the snarl
14082     for (Int_t hit=0;hit<numXTalkHits;hit++){
14083       CDXTalkHitInfo *hitInfo=(CDXTalkHitInfo*) cXTalk[hit];
14084 
14085       this->ReadInHitInfo(hitInfo);      
14086 
14087       Float_t chargeSigCor=hitInfo->GetCharge
14088         (CDTrackedHitInfo::kSigCorr);
14089       Int_t plane=hitInfo->GetPlane();
14090       Int_t strip=hitInfo->GetStrip();
14091       
14092       //cut out the strips with bad pedestals
14093       if ((plane==21 || plane==41) && strip==19) continue;
14094       //cut out the negative adcs
14095       if (strip==13 && plane==40) continue;
14096 
14097       hTime->Fill(fTime-tofTimeStamp);
14098       hTime2->Fill(fTime-tofTimeStamp);
14099 
14100       //add up the charge of the hits in each plane
14101       planeSigCorX[plane]+=chargeSigCor;
14102       planeSigCorT[plane]+=chargeSigCor;
14103     }
14104 
14106     //loop over the tracked hits
14108     for (Int_t hit=0;hit<numTrkHits;hit++){
14109       CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) cTrk[hit];
14110           
14111       this->ReadInHitInfo(trackedHitInfo);
14112 
14113       Int_t plane=trackedHitInfo->GetPlane();
14114       Int_t strip=trackedHitInfo->GetStrip();
14115       Int_t stripend=trackedHitInfo->GetEnd();
14116 
14117       Float_t chargeSigCor=trackedHitInfo->GetCharge
14118         (CDTrackedHitInfo::kSigCorr);
14119       Float_t chargeSigLin=trackedHitInfo->GetCharge
14120         (CDTrackedHitInfo::kSigLin);
14121       Float_t chargePe=trackedHitInfo->GetCharge
14122         (CDTrackedHitInfo::kPe);
14123       Float_t gain = chargeSigLin/chargePe;
14124       Float_t adc=trackedHitInfo->GetCharge
14125         (CDTrackedHitInfo::kAdc);
14126 
14127       hTime->Fill(fTime-tofTimeStamp);
14128       hTime2->Fill(fTime-tofTimeStamp);
14129 
14130       if (stripend==1) hStVsPl1->Fill(plane,strip,adc);
14131       if (stripend==2) hStVsPl2->Fill(plane,strip,adc);
14132 
14133       //cut out the strips with bad pedestals
14134       if ((plane==21 || plane==41) && strip==19) continue;
14135       //cut out the negative adcs
14136       if (strip==13 && plane==40) continue;
14137 
14138       if (adc<0 && !(strip==13 && plane==40)){
14139         MSG("CDAnalysis",Msg::kInfo)
14140           <<"Event="<<event<<", adc="<<adc<<" ("<<plane<<":"<<strip
14141           <<")"<<endl;
14142       }
14143       else if (adc<0){
14144         MSG("CDAnalysis",Msg::kInfo)
14145           <<"Event="<<event<<", adc="<<adc<<" ("<<plane<<":"<<strip
14146           <<")"<<endl;
14147       }
14148 
14149       hPlane->Fill(plane);
14150       hStrip->Fill(strip);
14151       hStripend->Fill(stripend);
14152 
14153       //count the number of planes hit
14154       numPlanesHit[plane]++;
14155       if (stripend==1) numPlanesHit1[plane]++;
14156       if (stripend==2) numPlanesHit2[plane]++;
14157       if (plane<firstPlane) firstPlane=plane;
14158       if (plane>lastPlane) lastPlane=plane;
14159       if (plane>lastPlaneOdd && plane%2!=0) lastPlaneOdd=plane;
14160       if (plane>lastPlaneEven && plane%2==0) lastPlaneEven=plane;
14161 
14162       //add up the charge of the tracked hits in each plane
14163       planeSigCor[plane]+=chargeSigCor;
14164       planeSigCorT[plane]+=chargeSigCor;
14165 
14166       hChargeSigCor->Fill(chargeSigCor);
14167       hChargeSigLin->Fill(chargeSigLin);
14168       hChargePe->Fill(chargePe);
14169       hGain->Fill(gain);
14170       hAdc->Fill(adc);
14171 
14172       Float_t dzds = trackedHitInfo->GetDzDs();
14173       Float_t dsdz = 1./dzds;
14174       Float_t dydz = trackedHitInfo->GetDyDz();
14175       Float_t dxdz = trackedHitInfo->GetDxDz();
14176       Float_t dyds = trackedHitInfo->GetDyDz()*
14177         trackedHitInfo->GetDzDs();
14178       Float_t dxds = trackedHitInfo->GetDxDz()*
14179         trackedHitInfo->GetDzDs();
14180       Float_t TransPos = trackedHitInfo->GetTransPos();
14181       Float_t YPos = trackedHitInfo->GetYPos();
14182 
14183       hdzds->Fill(dzds);
14184       hdsdz->Fill(dsdz);
14185       hdydz->Fill(dydz);
14186       hdxdz->Fill(dxdz);
14187       hdyds->Fill(dyds);
14188       hdxds->Fill(dxds);
14189       hTransPos->Fill(TransPos);
14190       hYPos->Fill(YPos);
14191     }
14192         
14193     if (firstPlane<0 || firstPlane>59) continue;
14194 
14195     hNumPlanes->Fill(numPlanesHit.size());
14196 
14197     if (firstPlane>=0 && firstPlane<60){
14198       hEventLength->Fill(lastPlane-firstPlane+1);
14199     }
14200 
14201     Float_t pl1Pl2=0;
14202     if (numPlanesHit2.size()>0) pl1Pl2=1.*numPlanesHit1.size()/
14203                                   numPlanesHit2.size();
14204 
14205     if (firstPlane<60 && numPlanesHit.size()>40 && planeSigCor[1]>800 && planeSigCor[2]>800){
14206 
14207       MSG("CDAnalysis",Msg::kVerbose)
14208         <<"Special: ev="<<event
14209         <<", firstPl="<<firstPlane
14210         <<", lastPl="<<lastPlane
14211         <<", nPl="<<numPlanesHit.size()
14212         <<", nPl1="<<numPlanesHit1.size()
14213         <<", nPl2="<<numPlanesHit2.size()
14214         <<", Pl1/Pl2="<<pl1Pl2<<endl;
14215     }
14216 
14217     if (pl1Pl2>2 || pl1Pl2<1./2){
14218       MSG("CDAnalysis",Msg::kVerbose)
14219         <<"1 sided: ev="<<event
14220         <<", firstPl="<<firstPlane
14221         <<", lastPl="<<lastPlane
14222         <<", nPl="<<numPlanesHit.size()
14223         <<", nPl1="<<numPlanesHit1.size()
14224         <<", nPl2="<<numPlanesHit2.size()
14225         <<", Pl1/Pl2="<<pl1Pl2<<endl;
14226     }
14227 
14228     static Int_t counter=0;
14229     counter++;
14230 
14231     if (counter<80){
14232       MSG("CDAnalysis",Msg::kDebug)
14233         <<"Event="<<event
14234         <<", numPlanes="<<numPlanesHit.size()
14235         <<", kov1="<<kovADC1
14236         <<", kov3="<<kovADC3
14237         <<endl;
14238     }
14239 
14240     if (kovADC1>100){
14241       MSG("CDAnalysis",Msg::kDebug)
14242         <<"High Kov Event="<<event
14243         <<", numPlanes="<<numPlanesHit.size()
14244         <<", kov1="<<kovADC1
14245         <<", kov3="<<kovADC3
14246         <<endl;
14247     }
14248 
14249     if (numPlanesHit.size()>40){
14250       hKovADC3->Fill(kovADC3);
14251       hKovADC1->Fill(kovADC1);
14252     }
14253     else{
14254       hKovADC3Cut->Fill(kovADC3);
14255       hKovADC1Cut->Fill(kovADC1);
14256     }
14257 
14258     //make cuts
14259     if (numPlanesHit.size()<40) continue;
14260     if (firstPlane<0 || firstPlane>59) continue;
14261     if (lastPlane>57) continue;//cut out through going muons, no 58,59
14262 
14263     if (numPlanesHit[lastPlane-1]==0){
14264       MSG("CDAnalysis",Msg::kDebug)
14265         <<"Missing lastPlane-1, event="<<event
14266         <<", numPlanes="<<numPlanesHit.size()
14267         <<", kov1="<<kovADC1
14268         <<", kov3="<<kovADC3
14269         <<endl;
14270     }
14271 
14273     //section for response
14275 
14276     const Int_t reNormPlane=70;
14277     Int_t planeOffset=reNormPlane-lastPlane;
14278 
14279     for (map<Int_t,Float_t>::iterator sig=planeSigCor.begin();
14280          sig!=planeSigCor.end();++sig){
14281       totalSigCor[sig->first]+=sig->second;
14282       totalNum[sig->first]++;
14283       pSigCorVsPlane->Fill(sig->first,sig->second);
14284 
14285       totalSigCorOffSet[sig->first+planeOffset]+=sig->second;
14286       totalNumOffSet[sig->first+planeOffset]++;
14287       pSigCorVsOsPlane->Fill(sig->first+planeOffset,sig->second);
14288     }
14289 
14290     for (map<Int_t,Float_t>::iterator sig=planeSigCorX.begin();
14291          sig!=planeSigCorX.end();++sig){
14292       totalSigCor2[sig->first]+=sig->second;
14293       totalNum2[sig->first]++;
14294 
14295       totalSigCorOffSet2[sig->first+planeOffset]+=sig->second;
14296       totalNumOffSet2[sig->first+planeOffset]++;
14297     }
14298 
14299     for (map<Int_t,Float_t>::iterator sig=planeSigCorT.begin();
14300          sig!=planeSigCorT.end();++sig){
14301       totalSigCor3[sig->first]+=sig->second;
14302       totalNum3[sig->first]++;
14303 
14304       totalSigCorOffSet3[sig->first+planeOffset]+=sig->second;
14305       totalNumOffSet3[sig->first+planeOffset]++;
14306     }
14307 
14309     //section for sliding window
14311     Int_t minEventLength=40;
14312     if (lastPlane<minEventLength) continue;
14313 
14314     MSG("CDAnalysis",Msg::kDebug)
14315       <<"Event="<<event
14316       <<", firstPl="<<firstPlane
14317       <<", lastPl="<<lastPlane
14318       <<", lastPlOdd="<<lastPlaneOdd
14319       <<", lastPlEven="<<lastPlaneEven
14320       <<", numPlanes="<<numPlanesHit.size()<<endl;
14321 
14322     //initialise the profile histos
14323     static Bool_t firstTime=true;
14324     if (firstTime){
14325       for (Int_t p=20;p>1;p--){
14326         vWindowSize.push_back(p);
14327       }
14328 
14329       for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
14330            windowSize!=vWindowSize.end();++windowSize){
14331         
14332         string sName=Form("%d",*windowSize);
14333         pSigCorVsDist.push_back
14334           (new TProfile(("pSigCorVsDist"+sName).c_str(),
14335                         ("pSigCorVsDist"+sName).c_str(),100,-2,40));
14336       }
14337     }
14338     firstTime=false;
14339 
14340     vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
14341 
14342     for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
14343          windowSize!=vWindowSize.end();++windowSize){
14344       
14345       for (Int_t p=0;p<minEventLength-*windowSize;p++){
14346         Int_t windowStart=lastPlane-p;
14347 
14348         Float_t avSigCor=0;
14349         Int_t numUsed=0;
14350         
14351         for (Int_t i=0;i<*windowSize;i++){
14352           Int_t plane=windowStart-i;
14353           
14354           MSG("CDAnalysis",Msg::kVerbose)
14355             <<"Event="<<event
14356             <<", winStart="<<windowStart
14357             <<", plane="<<plane<<endl;
14358           
14359           //cut out planes that are greater than the last plane
14360           //in the view - ie the zeros at the end
14361           Bool_t doZeroCorrection=false;
14362           if (doZeroCorrection && 
14363               ((plane%2==0 && plane>lastPlaneEven) || 
14364                (plane%2!=0 && plane>lastPlaneOdd))){
14365             MSG("CDAnalysis",Msg::kVerbose)
14366               <<"Not using: Event="<<event
14367               <<", pl="<<plane
14368               <<", sigCor="<<planeSigCor[plane]
14369               <<", lastPlane="<<lastPlane
14370               <<", lastPlSig="<<planeSigCor[lastPlane]
14371               <<", lastPlOdd="<<lastPlaneOdd
14372               <<", lastPlEven="<<lastPlaneEven
14373               <<endl;
14374           }
14375           else{
14376             avSigCor+=planeSigCor[plane];
14377             numUsed++;
14378             }
14379         }
14380         
14381         //find average
14382         if (numUsed>0) avSigCor/=numUsed;
14383         (*prof)->Fill(p,avSigCor);
14384         
14385         MSG("CDAnalysis",Msg::kDebug)
14386           <<"Event="<<event
14387           <<", winStart="<<windowStart
14388           <<", avSigCor="<<avSigCor<<endl;
14389       }
14390       prof++;
14391     }
14392   }//end of for                                       
14393   
14397 
14398   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
14399   
14400   TCanvas *cProf=new TCanvas("cProf","Prof",0,0,1200,800);
14401   cProf->SetFillColor(0);
14402   string sName="SlidingWindow.ps";
14403   cProf->Print((sName+"[").c_str());
14404   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
14405        prof!=pSigCorVsDist.end();++prof){
14406     cProf->Clear();
14407     (*prof)->Draw();
14408     (*prof)->SetTitle("Average SigCor in Sliding Window");
14409     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
14410     (*prof)->GetYaxis()->SetTitle("Average SigCor");
14411     (*prof)->GetXaxis()->CenterTitle();
14412     (*prof)->GetYaxis()->CenterTitle();
14413     cProf->Print(sName.c_str());
14414   }
14415   cProf->Print((sName+"]").c_str());
14416 
14417   this->ScaleMap(totalSigCorOffSet,totalNumOffSet);
14418   TGraph* gPlaneVsAvSigCorOS=this->TGraphMap(totalSigCorOffSet);
14419   TGraph* gPlaneVsNumOS=this->TGraphMap(totalNumOffSet);
14420   this->ScaleMap(totalSigCor,totalNum);
14421   TGraph* gPlaneVsAvSigCor=this->TGraphMap(totalSigCor);
14422   TGraph* gPlaneVsNum=this->TGraphMap(totalNum);
14423 
14424   this->ScaleMap(totalSigCorOffSet2,totalNumOffSet2);
14425   TGraph* gPlaneVsAvSigCorOS2=this->TGraphMap(totalSigCorOffSet2);
14426   TGraph* gPlaneVsNumOS2=this->TGraphMap(totalNumOffSet2);
14427   this->ScaleMap(totalSigCor2,totalNum2);
14428   TGraph* gPlaneVsAvSigCor2=this->TGraphMap(totalSigCor2);
14429   TGraph* gPlaneVsNum2=this->TGraphMap(totalNum2);
14430 
14431   this->ScaleMap(totalSigCorOffSet3,totalNumOffSet3);
14432   TGraph* gPlaneVsAvSigCorOS3=this->TGraphMap(totalSigCorOffSet3);
14433   TGraph* gPlaneVsNumOS3=this->TGraphMap(totalNumOffSet3);
14434   this->ScaleMap(totalSigCor3,totalNum3);
14435   TGraph* gPlaneVsAvSigCor3=this->TGraphMap(totalSigCor3);
14436   TGraph* gPlaneVsNum3=this->TGraphMap(totalNum3);
14437 
14438   TCanvas *cSigCorVsPlane=new TCanvas("cSigCorVsPlane","SigCorVsPlane",
14439                                       0,0,1200,800);
14440   cSigCorVsPlane->SetFillColor(0);
14441   cSigCorVsPlane->Divide(1,2);
14442   cSigCorVsPlane->cd(1);
14443   pSigCorVsPlane->Draw();
14444   pSigCorVsPlane->SetTitle("Energy Deposition (SigCor)");
14445   pSigCorVsPlane->GetXaxis()->SetTitle("Plane");
14446   pSigCorVsPlane->GetYaxis()->SetTitle("Average SigCor");
14447   pSigCorVsPlane->GetXaxis()->CenterTitle();
14448   pSigCorVsPlane->GetYaxis()->CenterTitle();
14449   pSigCorVsPlane->SetMarkerStyle(3);
14450   pSigCorVsPlane->SetMarkerColor(2);
14451   pSigCorVsPlane->SetMarkerSize(0.2);
14452   pSigCorVsPlane->SetLineColor(2);
14453   cSigCorVsPlane->cd(2);
14454   gPlaneVsNum->Draw("AP");
14455   gPlaneVsNum->SetTitle("Number hits");
14456   gPlaneVsNum->GetXaxis()->SetTitle("Normalised plane");
14457   gPlaneVsNum->GetYaxis()->SetTitle("Num hits");
14458   gPlaneVsNum->GetXaxis()->CenterTitle();
14459   gPlaneVsNum->GetYaxis()->CenterTitle();
14460   gPlaneVsNum->SetMarkerStyle(3);
14461   gPlaneVsNum->SetMarkerColor(2);
14462   gPlaneVsNum->SetMarkerSize(0.8);
14463 
14464   TCanvas *cSigCorVsPlane2=new TCanvas("cSigCorVsPlane2",
14465                                        "SigCorVsPlane2",
14466                                        0,0,1200,800);
14467   cSigCorVsPlane2->SetFillColor(0);
14468   cSigCorVsPlane2->Divide(1,2);
14469   cSigCorVsPlane2->cd(1);
14470   pSigCorVsOsPlane->Draw();
14471   pSigCorVsOsPlane->SetTitle("Energy Deposition (SigCor)");
14472   pSigCorVsOsPlane->GetXaxis()->SetTitle("Plane");
14473   pSigCorVsOsPlane->GetYaxis()->SetTitle("Average SigCor");
14474   pSigCorVsOsPlane->GetXaxis()->CenterTitle();
14475   pSigCorVsOsPlane->GetYaxis()->CenterTitle();
14476   pSigCorVsOsPlane->SetMarkerStyle(3);
14477   pSigCorVsOsPlane->SetMarkerColor(3);
14478   pSigCorVsOsPlane->SetMarkerSize(0.4);
14479   pSigCorVsOsPlane->SetLineColor(3);
14480   cSigCorVsPlane2->cd(2);
14481   gPlaneVsNumOS->Draw("AP");
14482   gPlaneVsNumOS->SetTitle("Number hits");
14483   gPlaneVsNumOS->GetXaxis()->SetTitle("Normalised plane");
14484   gPlaneVsNumOS->GetYaxis()->SetTitle("Num hits");
14485   gPlaneVsNumOS->GetXaxis()->CenterTitle();
14486   gPlaneVsNumOS->GetYaxis()->CenterTitle();
14487   gPlaneVsNumOS->SetMarkerStyle(3);
14488   gPlaneVsNumOS->SetMarkerColor(2);
14489   gPlaneVsNumOS->SetMarkerSize(0.8);
14490 
14491   TCanvas *cResponseOS=new TCanvas("cResponseOS","ResponseOS",
14492                                    0,0,1200,800);
14493   cResponseOS->SetFillColor(0);
14494   cResponseOS->Divide(1,2);
14495   cResponseOS->cd(1);
14496   gPlaneVsAvSigCorOS->Draw("AP");
14497   gPlaneVsAvSigCorOS->SetTitle("Muon Energy Deposition");
14498   gPlaneVsAvSigCorOS->GetXaxis()->SetTitle("Normalised plane");
14499   gPlaneVsAvSigCorOS->GetYaxis()->SetTitle("Average SigCor");
14500   gPlaneVsAvSigCorOS->GetXaxis()->CenterTitle();
14501   gPlaneVsAvSigCorOS->GetYaxis()->CenterTitle();
14502   gPlaneVsAvSigCorOS->SetMarkerStyle(3);
14503   gPlaneVsAvSigCorOS->SetMarkerColor(2);
14504   gPlaneVsAvSigCorOS->SetMarkerSize(0.8);
14505   gPlaneVsAvSigCorOS2->Draw("P");
14506   gPlaneVsAvSigCorOS2->SetMarkerStyle(3);
14507   gPlaneVsAvSigCorOS2->SetMarkerColor(3);
14508   gPlaneVsAvSigCorOS2->SetMarkerSize(0.8);
14509   gPlaneVsAvSigCorOS3->Draw("P");
14510   gPlaneVsAvSigCorOS3->SetMarkerStyle(3);
14511   gPlaneVsAvSigCorOS3->SetMarkerColor(4);
14512   gPlaneVsAvSigCorOS3->SetMarkerSize(0.8);
14513   cResponseOS->cd(2);
14514   gPlaneVsNumOS->Draw("AP");
14515   gPlaneVsNumOS->SetTitle("Number hits");
14516   gPlaneVsNumOS->GetXaxis()->SetTitle("Normalised plane");
14517   gPlaneVsNumOS->GetYaxis()->SetTitle("Num hits");
14518   gPlaneVsNumOS->GetXaxis()->CenterTitle();
14519   gPlaneVsNumOS->GetYaxis()->CenterTitle();
14520   gPlaneVsNumOS->SetMarkerStyle(3);
14521   gPlaneVsNumOS->SetMarkerColor(2);
14522   gPlaneVsNumOS->SetMarkerSize(0.8);
14523   gPlaneVsNumOS2->Draw("P");
14524   gPlaneVsNumOS2->SetMarkerStyle(3);
14525   gPlaneVsNumOS2->SetMarkerColor(3);
14526   gPlaneVsNumOS2->SetMarkerSize(0.8);
14527   gPlaneVsNumOS3->Draw("P");
14528   gPlaneVsNumOS3->SetMarkerStyle(3);
14529   gPlaneVsNumOS3->SetMarkerColor(4);
14530   gPlaneVsNumOS3->SetMarkerSize(0.8);
14531 
14532   TCanvas *cResponse=new TCanvas("cResponse","Response",
14533                                    0,0,1200,800);
14534   cResponse->SetFillColor(0);
14535   cResponse->Divide(1,2);
14536   cResponse->cd(1);
14537   gPlaneVsAvSigCor->Draw("AP");
14538   gPlaneVsAvSigCor->SetTitle("Muon Energy Deposition");
14539   gPlaneVsAvSigCor->GetXaxis()->SetTitle("Plane");
14540   gPlaneVsAvSigCor->GetYaxis()->SetTitle("Average SigCor");
14541   gPlaneVsAvSigCor->GetXaxis()->CenterTitle();
14542   gPlaneVsAvSigCor->GetYaxis()->CenterTitle();
14543   gPlaneVsAvSigCor->SetMarkerStyle(3);
14544   gPlaneVsAvSigCor->SetMarkerColor(2);
14545   gPlaneVsAvSigCor->SetMarkerSize(0.8);
14546   gPlaneVsAvSigCor2->Draw("P");
14547   gPlaneVsAvSigCor2->SetMarkerStyle(3);
14548   gPlaneVsAvSigCor2->SetMarkerColor(3);
14549   gPlaneVsAvSigCor2->SetMarkerSize(0.8);
14550   gPlaneVsAvSigCor3->Draw("P");
14551   gPlaneVsAvSigCor3->SetMarkerStyle(3);
14552   gPlaneVsAvSigCor3->SetMarkerColor(4);
14553   gPlaneVsAvSigCor3->SetMarkerSize(0.8);
14554   cResponse->cd(2);
14555   gPlaneVsNum->Draw("AP");
14556   gPlaneVsNum->SetTitle("Number hits");
14557   gPlaneVsNum->GetXaxis()->SetTitle("Plane");
14558   gPlaneVsNum->GetYaxis()->SetTitle("Num hits");
14559   gPlaneVsNum->GetXaxis()->CenterTitle();
14560   gPlaneVsNum->GetYaxis()->CenterTitle();
14561   gPlaneVsNum->SetMarkerStyle(3);
14562   gPlaneVsNum->SetMarkerColor(2);
14563   gPlaneVsNum->SetMarkerSize(0.8);
14564   gPlaneVsNum2->Draw("P");
14565   gPlaneVsNum2->SetMarkerStyle(3);
14566   gPlaneVsNum2->SetMarkerColor(3);
14567   gPlaneVsNum2->SetMarkerSize(0.8);
14568   gPlaneVsNum3->Draw("P");
14569   gPlaneVsNum3->SetMarkerStyle(3);
14570   gPlaneVsNum3->SetMarkerColor(4);
14571   gPlaneVsNum3->SetMarkerSize(0.8);
14572 
14573   /*
14574   TCanvas *cResults=new TCanvas("cResults","Results",0,0,1200,800);
14575   cResults->SetFillColor(0);
14576   cResults->Divide(2,2);
14577   cResults->cd(1);
14578   hEvenResult->Draw();
14579   cResults->cd(2);
14580   hOddResult->Draw();
14581   */
14582 
14583   TCanvas *cKov=new TCanvas("cKov","Kov",0,0,1200,800);
14584   cKov->SetFillColor(0);
14585   cKov->Divide(3,2);
14586   cKov->cd(1);
14587   hKovADC3->Draw();
14588   cKov->cd(2);
14589   hKovADC3Cut->Draw();
14590   cKov->cd(5);
14591   hKovADC1->Draw();
14592   cKov->cd(4);
14593   hKovADC1Cut->Draw();
14594   cKov->cd(3);
14595   hKovADC3Whole->Draw();
14596   cKov->cd(6);
14597   hKovADC1Whole->Draw();
14598 
14599   TCanvas *cTof=new TCanvas("cTof","Tof",0,0,1200,800);
14600   cTof->SetFillColor(0);
14601   hTofDiffNotElec->Draw();
14602   hTofDiffNotElec->SetLineColor(2);
14603   hTofDiffNotElec->SetLineWidth(3);
14604   hTofDiffElec->Draw("sames");
14605   hTofDiffElec->SetLineWidth(3);
14606 
14607   TCanvas *cTofAll=new TCanvas("cTofAll","cTofAll",0,0,1200,800);
14608   cTofAll->SetFillColor(0);
14609   cTofAll->Divide(3,2);
14610   cTofAll->cd(1);
14611   hTofTDC0->Draw();
14612   cTofAll->cd(2);
14613   hTofTDC2->Draw();
14614   cTofAll->cd(3);
14615   hTofDiff->Draw();
14616   cTofAll->cd(4);
14617   hTofTDC0Whole->Draw();
14618   cTofAll->cd(5);
14619   hTofTDC2Whole->Draw();
14620   cTofAll->cd(6);
14621   hTofDiffWhole->Draw();
14622 
14623   TCanvas *cTofKovDiff=new TCanvas("cTofKovDiff","TofKovDiff",
14624                                    0,0,1200,800);
14625   cTofKovDiff->SetFillColor(0);
14626   cTofKovDiff->Divide(2,2);
14627   cTofKovDiff->cd(1);
14628   hTofKov1Diff->Draw();
14629   cTofKovDiff->cd(2);
14630   hTofKov3Diff->Draw();
14631   cTofKovDiff->cd(3);
14632   hTofKov1DiffWhole->Draw();
14633   cTofKovDiff->cd(4);
14634   hTofKov3DiffWhole->Draw();
14635 
14636   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
14637   cGeom->SetFillColor(0);
14638   cGeom->Divide(2,3);
14639   cGeom->cd(1);
14640   hPlane->Draw();
14641   cGeom->cd(2);
14642   hStrip->Draw();
14643   cGeom->cd(3);
14644   hStripend->Draw();
14645   cGeom->cd(4);
14646   hNumPlanes->Draw();
14647   cGeom->cd(5);
14648   hEventLength->Draw();
14649 
14650   /*
14651   TCanvas *cHits=new TCanvas("cHits","Hits",0,0,1200,800);
14652   cHits->SetFillColor(0);
14653   cHits->Divide(2,3);
14654   cHits->cd(1);
14655   hChargeSigCor->Draw();
14656   cHits->cd(2);
14657   hChargeSigLin->Draw();
14658   cHits->cd(3);
14659   hChargePe->Draw();
14660   cHits->cd(4);
14661   hGain->Draw();
14662   cHits->cd(5);
14663   hAdc->Draw();
14664   */
14665 
14666   TCanvas *cStVsPl=new TCanvas("cStVsPl","StVsPl",0,0,1200,800);
14667   cStVsPl->SetFillColor(0);
14668   cStVsPl->Divide(1,2);
14669   cStVsPl->cd(1);
14670   hStVsPl1->Draw("colz");
14671   cStVsPl->cd(2);
14672   hStVsPl2->Draw("colz");
14673 
14674   TCanvas *cTime=new TCanvas("cTime","Time",0,0,1200,800);
14675   cTime->SetFillColor(0);
14676   cTime->Divide(2,3);
14677   cTime->cd(1);
14678   hTime->Draw();
14679   cTime->cd(2);
14680   hTime2->Draw();
14681   cTime->cd(3);
14682 
14683   cTime->cd(4);
14684 
14685   cTime->cd(5);
14686 
14687 
14688   /*
14689  TCanvas *cAngles=new TCanvas("cAngles","Angles",0,0,1200,800);
14690   cAngles->SetFillColor(0);
14691   cAngles->Divide(3,2);
14692   cAngles->cd(1);
14693   hdzds->Draw();
14694   cAngles->cd(2);
14695   hdsdz->Draw();
14696   cAngles->cd(3);
14697   hdydz->Draw();
14698   cAngles->cd(4);
14699   hdxdz->Draw();
14700   cAngles->cd(5);
14701   hdyds->Draw();
14702   cAngles->cd(6);
14703   hdxds->Draw();
14704 
14705   TCanvas *cPos=new TCanvas("cPos","Pos",0,0,1200,800);
14706   cPos->SetFillColor(0);
14707   cPos->Divide(2,1);
14708   cPos->cd(1);
14709   hTransPos->Draw();
14710   cPos->cd(2);
14711   hYPos->Draw();
14712   */
14713 
14714   MSG("CDAnalysis",Msg::kInfo) 
14715     <<" ** Finished CleanMuons method **"<<endl;
14716 }

Bool_t CDAnalysis::CutByHandOnEventLength  )  const [private]
 

Definition at line 3026 of file CDAnalysis.cxx.

References fBeamMomentum, fLastPlane, fMainParticleEnergy, fRunNumber, fSimFlag, MAXMSG, and MSG.

03027 {
03028   //set default to not cut
03029   Bool_t cutThisOne=false;
03030 
03031   Int_t minPlane=0;
03032   Int_t maxPlane=60;
03033 
03034   if (fSimFlag==SimFlag::kData){
03035     
03036     //might want to tighten these up to boost the signal to noise ratio
03037     
03038     if (fRunNumber==70709 ||
03039         fRunNumber==71266 ||
03040         fRunNumber==100161 ||
03041         fRunNumber==100270){//1.8
03042       //cut out through going muons, no 58,59
03043       minPlane=42;
03044       maxPlane=57;
03045       if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
03046     }
03047     else if (fRunNumber==100243){//1.6
03048       minPlane=40;
03049       maxPlane=49;
03050       if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
03051     }
03052     else if (fRunNumber==100131){//1.4
03053       minPlane=35;
03054       maxPlane=44;
03055       if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
03056     }
03057     else if (fRunNumber==70579){//1.0 GeV run
03058       //hack - these are 1.8 cuts
03059       if (fLastPlane<42 || fLastPlane>57) cutThisOne=true;
03060     }
03061   }
03062   else if (fSimFlag==SimFlag::kMC){
03063     
03064     if (fMainParticleEnergy>1.3 && fMainParticleEnergy<1.5){
03065       minPlane=35;
03066       maxPlane=44;
03067       if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
03068     }
03069     else if (fMainParticleEnergy>1.5 && fMainParticleEnergy<1.7){
03070       minPlane=40;
03071       maxPlane=49;
03072       if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
03073     }
03074     else if (fMainParticleEnergy>1.7 && fMainParticleEnergy<1.9){
03075       minPlane=42;
03076       maxPlane=57;
03077       if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
03078     }
03079     else if (fMainParticleEnergy>1.9){
03080       minPlane=44;
03081       maxPlane=58;//last but one, so didn't exit
03082       if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
03083     }
03084     else{
03085       MAXMSG("CDAnalysis",Msg::kInfo,10)
03086         <<"No event length cut for this particle energy="
03087         <<fMainParticleEnergy<<endl;
03088     }
03089   }
03090 
03091   if (cutThisOne){
03092     MAXMSG("CDAnalysis",Msg::kInfo,1)
03093       <<"Using 'by hand' event length cuts to pass muons: "
03094       <<minPlane<<"<Plane<"<<maxPlane
03095       <<", fBeamMomentum="<<fBeamMomentum<<endl;
03096   }
03097 
03098   MSG("CDAnalysis",Msg::kDebug)
03099     <<"fLastPlane="<<fLastPlane<<", cut this one="<<cutThisOne<<endl;
03100 
03101   return cutThisOne;
03102 }

Bool_t CDAnalysis::CutByHandOnPid  )  const [private]
 

Definition at line 2602 of file CDAnalysis.cxx.

References fKovADC1, fKovADC3, fRunNumber, fSimFlag, fTofADCTimeStamp1, fTofTDC0, fTofTDC2, and MAXMSG.

Referenced by PrintPIDStats(), and ValidatePIDInfo().

02603 {
02604   //set default to not cut
02605   Bool_t cutThisOne=false;
02606 
02607   //only have pid for real data so return if not data
02608   if (fSimFlag!=SimFlag::kData) return false;
02609 
02610   Bool_t muonKovADC1=false;
02611   Bool_t muonKovADC3=false;
02612   Bool_t goodTof=false;
02613   Bool_t muonInTime=false;
02614 
02615   if (fRunNumber==70579){//a 1 GeV run
02616     if (fKovADC3<500) muonKovADC3=true;
02617     if (fKovADC1<300) muonKovADC1=true;//not an electron ADC
02618     if (fTofTDC2-fTofTDC0>340 && fTofTDC2-fTofTDC0<500) goodTof=true;
02619 
02620     //don't analyse if not a muon
02621     if (!muonKovADC1) cutThisOne=true;
02622     if (!muonKovADC3) cutThisOne=true;
02623     
02624     //don't analyse if bad tof
02625     if (!goodTof) cutThisOne=true;
02626   }
02627   else if (fRunNumber==70709){
02628     //string particleSelection="muons";
02629     string particleSelection="notElectrons";
02630     //string particleSelection="notElectronsNoCkv";
02631 
02632     if (particleSelection=="muons"){
02633       MAXMSG("CDAnalysis",Msg::kWarning,1)
02634         <<"Applying cut: "<<particleSelection<<endl;
02635       
02636       if (fKovADC3<1400 && fKovADC3>0) muonKovADC3=true;//muon ADC
02637       if (fKovADC1<500) muonKovADC1=true;//not an electron ADC
02638       if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<450) goodTof=true;
02639       //Tof in time with muon triggering kov
02640       if ((fTofADCTimeStamp1-fKovTimeStamp3)<-78 &&
02641           (fTofADCTimeStamp1-fKovTimeStamp3)>-96) muonInTime=true;
02642       
02643       //don't analyse if not a muon
02644       if (!muonKovADC1) cutThisOne=true;
02645       if (!muonKovADC3) cutThisOne=true;
02646       
02647       //don't analyse if bad tof
02648       if (!goodTof) cutThisOne=true;
02649       
02650       //don't analyse if tof not in time with kov set to muons
02651       if (!muonInTime) cutThisOne=true;
02652     }
02653     else if (particleSelection=="notElectrons"){
02654       MAXMSG("CDAnalysis",Msg::kWarning,1)
02655         <<"Applying cut: "<<particleSelection<<endl;
02656       
02657       if (fKovADC3<1400) muonKovADC3=true;//not an electron ADC
02658       if (fKovADC1<500) muonKovADC1=true;//not an electron ADC
02659       if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<450) goodTof=true;
02660       
02661       //don't analyse if not a muon
02662       if (!muonKovADC1) cutThisOne=true;
02663       if (!muonKovADC3) cutThisOne=true;
02664       
02665       //don't analyse if bad tof
02666       if (!goodTof) cutThisOne=true;
02667 
02668       //don't want the muon in time cut
02669     }
02670   }
02671   else if (fRunNumber==71266){
02672     if (fKovADC3<1400) muonKovADC3=true;//not an electron ADC
02673     if (fKovADC1<1000) muonKovADC1=true;//not an electron ADC
02674     if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<450) goodTof=true;
02675 
02676     //don't analyse if not a muon
02677     if (!muonKovADC1) cutThisOne=true;
02678     if (!muonKovADC3) cutThisOne=true;
02679     
02680     //don't analyse if bad tof
02681     if (!goodTof) cutThisOne=true;
02682   }
02683   else if (fRunNumber==100131){
02684     if (fKovADC3<1000) muonKovADC3=true;
02685     if (fKovADC1<500) muonKovADC1=true;//not an electron ADC
02686     if (fTofTDC2-fTofTDC0>370 && fTofTDC2-fTofTDC0<525) goodTof=true;
02687 
02688     //don't analyse if not a muon
02689     if (!muonKovADC1) cutThisOne=true;
02690     if (!muonKovADC3) cutThisOne=true;
02691     
02692     //don't analyse if bad tof
02693     if (!goodTof) cutThisOne=true;
02694   }
02695   else if (fRunNumber==100161){
02696 
02697     //string particleSelection="muons";
02698     string particleSelection="notElectrons";
02699     //string particleSelection="notElectronsNoCkv";
02700 
02701     if (particleSelection=="muons"){
02702       MAXMSG("CDAnalysis",Msg::kWarning,1)
02703         <<"Applying cut: "<<particleSelection<<endl;
02704 
02705       if (fKovADC3<850 && fKovADC3>0) muonKovADC3=true;
02706       if (fKovADC1<400) muonKovADC1=true;//not an electron ADC
02707       if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<490) goodTof=true;
02708       //Tof in time with muon triggering kov
02709       if ((fTofADCTimeStamp1-fKovTimeStamp3)<-24 &&
02710           (fTofADCTimeStamp1-fKovTimeStamp3)>-45) muonInTime=true;
02711       
02712       //don't analyse if not a muon
02713       if (!muonKovADC1) cutThisOne=true;
02714       if (!muonKovADC3) cutThisOne=true;
02715       
02716       //don't analyse if bad tof
02717       if (!goodTof) cutThisOne=true;
02718       
02719       //don't analyse if tof not in time with kov set to muons
02720       if (!muonInTime) cutThisOne=true;
02721     }
02722     else if (particleSelection=="notElectrons"){
02723       MAXMSG("CDAnalysis",Msg::kWarning,1)
02724         <<"Applying cut: "<<particleSelection<<endl;
02725 
02726       if (fKovADC3<850) muonKovADC3=true;
02727       if (fKovADC1<400) muonKovADC1=true;//not an electron ADC
02728       if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<490) goodTof=true;
02729 
02730       //don't analyse if not a muon
02731       if (!muonKovADC1) cutThisOne=true;
02732       if (!muonKovADC3) cutThisOne=true;
02733       
02734       //don't analyse if bad tof
02735       if (!goodTof) cutThisOne=true;
02736 
02737       //don't want the muon in time cut
02738     }
02739     else if (particleSelection=="notElectronsNoCkv"){
02740       MAXMSG("CDAnalysis",Msg::kWarning,1)
02741         <<"Applying cut: "<<particleSelection<<endl;
02742 
02743       if (fKovADC3<100) muonKovADC3=true;
02744       if (fKovADC1<100) muonKovADC1=true;//not an electron ADC
02745       if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<490) goodTof=true;
02746 
02747       //don't analyse if not a muon
02748       if (!muonKovADC1) cutThisOne=true;
02749       if (!muonKovADC3) cutThisOne=true;
02750       
02751       //don't analyse if bad tof
02752       if (!goodTof) cutThisOne=true;
02753 
02754       //don't want the muon in time cut
02755     }
02756   }
02757   else if (fRunNumber==100243){
02758     if (fKovADC3<900) muonKovADC3=true;
02759     if (fKovADC1<1000) muonKovADC1=true;//not an electron ADC
02760     if (fTofTDC2-fTofTDC0>350 && fTofTDC2-fTofTDC0<490) goodTof=true;
02761 
02762     //don't analyse if not a muon
02763     if (!muonKovADC1) cutThisOne=true;
02764     if (!muonKovADC3) cutThisOne=true;
02765     
02766     //don't analyse if bad tof
02767     if (!goodTof) cutThisOne=true;
02768     
02769   }
02770   else if (fRunNumber==100270){
02771     if (fKovADC3<1100) muonKovADC3=true;
02772     if (fKovADC1<500) muonKovADC1=true;//not an electron ADC
02773     if (fTofTDC2-fTofTDC0>360 && fTofTDC2-fTofTDC0<525) goodTof=true;
02774 
02775     //don't analyse if not a muon
02776     if (!muonKovADC1) cutThisOne=true;
02777     if (!muonKovADC3) cutThisOne=true;
02778     
02779     //don't analyse if bad tof
02780     if (!goodTof) cutThisOne=true;    
02781   }
02782 
02783   if (cutThisOne){
02784     MAXMSG("CDAnalysis",Msg::kInfo,1)
02785       <<"Applying 'by hand' cut on pid"<<endl;
02786   }
02787 
02788   return cutThisOne;
02789 }

Bool_t CDAnalysis::CutByHandOnPidForElec  )  const [private]
 

Definition at line 2472 of file CDAnalysis.cxx.

References fKovADC1, fKovADC3, fRunNumber, fSimFlag, fTofADCTimeStamp1, fTofTDC0, fTofTDC2, and MAXMSG.

Referenced by PrintPIDStats(), and ValidatePIDInfo().

02473 {
02474   //set default to not cut
02475   Bool_t cutThisOne=false;
02476 
02477   //only have pid for real data so return if not data
02478   if (fSimFlag!=SimFlag::kData) return false;
02479 
02480   string particleSelection="for electrons";
02481   MAXMSG("CDAnalysis",Msg::kInfo,1)
02482     <<"Applying cut: "<<particleSelection<<endl;
02483 
02484   Bool_t elecKovADC1=false;
02485   Bool_t elecKovADC3=false;
02486   Bool_t goodTof=false;
02487   Bool_t elecInTime=false;
02488 
02489   if (fRunNumber==70579){//a 1 GeV run
02490 
02491     if (fTofTDC2-fTofTDC0>340 && fTofTDC2-fTofTDC0<500) goodTof=true;
02492 
02493     //don't analyse if not a elec
02494     if (!elecKovADC1) cutThisOne=true;
02495     if (!elecKovADC3) cutThisOne=true;
02496     
02497     //don't analyse if bad tof
02498     if (!goodTof) cutThisOne=true;
02499   }
02500   else if (fRunNumber==70709){
02501     MAXMSG("CDAnalysis",Msg::kInfo,1)
02502       <<"Applying cut: "<<particleSelection<<endl;
02503 
02504     if (fKovADC3>2000 && fKovADC3<3500) elecKovADC3=true;//elec ADC
02505     if (fKovADC1>1000 && fKovADC1<2500) elecKovADC1=true;
02506     if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<450) goodTof=true;
02507     //Tof in time with elec triggering kov
02508     if ((fTofADCTimeStamp1-fKovTimeStamp3)<-80 &&
02509         (fTofADCTimeStamp1-fKovTimeStamp3)>-85 &&
02510         (fTofADCTimeStamp1-fKovTimeStamp1)<-30 &&
02511         (fTofADCTimeStamp1-fKovTimeStamp1)>-40) elecInTime=true;
02512     
02513     //don't analyse if not a elec
02514     if (!elecKovADC1) cutThisOne=true;
02515     if (!elecKovADC3) cutThisOne=true;
02516     
02517     //don't analyse if bad tof
02518     if (!goodTof) cutThisOne=true;
02519     
02520     //don't analyse if tof not in time with kov set to elecs
02521     if (!elecInTime) cutThisOne=true;
02522 
02523   }
02524   else if (fRunNumber==71266){
02525 
02526   }
02527   else if (fRunNumber==100131){
02528 
02529   }
02530   else if (fRunNumber==100161){
02531 
02532     MAXMSG("CDAnalysis",Msg::kInfo,1)
02533       <<"Applying cut: "<<particleSelection<<endl;
02534 
02535     if (fKovADC3>1600 && fKovADC3<2100) elecKovADC3=true;//elec ADC
02536     if (fKovADC1>1100 && fKovADC1<3100) elecKovADC1=true;
02537     if (fTofTDC2-fTofTDC0>385 && fTofTDC2-fTofTDC0<470) goodTof=true;
02538     //Tof in time with elec triggering kov
02539     if ((fTofADCTimeStamp1-fKovTimeStamp3)<-20 &&
02540         (fTofADCTimeStamp1-fKovTimeStamp3)>-30 &&
02541         (fTofADCTimeStamp1-fKovTimeStamp1)<-50 &&
02542         (fTofADCTimeStamp1-fKovTimeStamp1)>-62) elecInTime=true;
02543     
02544     //don't analyse if not a elec
02545     if (!elecKovADC1) cutThisOne=true;
02546     if (!elecKovADC3) cutThisOne=true;
02547     
02548     //don't analyse if bad tof
02549     if (!goodTof) cutThisOne=true;
02550     
02551     //don't analyse if tof not in time with kov set to elecs
02552     if (!elecInTime) cutThisOne=true;
02553 
02554 
02555   }
02556   else if (fRunNumber==100243){
02557 
02558     
02559   }
02560   else if (fRunNumber==100270){
02561 
02562   }
02563   
02564   if (cutThisOne){
02565     MAXMSG("CDAnalysis",Msg::kInfo,1)
02566       <<"Applying 'by hand' cut on pid to pass only electrons"<<endl;
02567   }
02568 
02569   return cutThisOne;
02570 }

Bool_t CDAnalysis::CutOnBadCalorimetry Int_t  plane,
Int_t  strip,
Int_t  end
const [private]
 

Definition at line 2348 of file CDAnalysis.cxx.

References fPlane, fSimFlag, and MAXMSG.

Referenced by ElectronResponse(), and StoppingMuonCalibration().

02350 {
02351   //only have bad channels in real data so return if not data
02352   if (fSimFlag!=SimFlag::kData) return false;
02353 
02354   Bool_t cutThisOne=false;
02355 
02356   //cut out the strips with bad calorimetry
02357   //do this for all run periods to be consistent
02358   if (fPlane==0 || fPlane==35) cutThisOne=true;
02359   
02360   if (cutThisOne){
02361     MAXMSG("CDAnalysis",Msg::kInfo,6)
02362       <<"Applying cut to bad calorimetry:"
02363       <<" (pl="<<plane<<", str="<<strip<<", end="<<end<<")"<<endl;
02364   }
02365   
02366   return cutThisOne;
02367 }

Bool_t CDAnalysis::CutOnBadPedestals Int_t  plane,
Int_t  strip,
Int_t  end
const [private]
 

Definition at line 2310 of file CDAnalysis.cxx.

References fRunNumber, fSimFlag, and MAXMSG.

Referenced by CalcLastPlaneOnTrk(), CalcLastPlaneOnTrkNoXTalk(), CalcXYZ(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), StoppingMuonCalibration(), and Template2().

02312 {
02313   //only have bad channels in real data so return if not data
02314   if (fSimFlag!=SimFlag::kData) return false;
02315 
02316   Bool_t cutThisOne=false;
02317 
02318   //cut out the strips with bad pedestals
02319   //not sure exactly for which run number the problem was fixed
02320   //had gone away by 71266
02321   if (fRunNumber>=70000 && fRunNumber<=70888){
02322     if ((plane==21 || plane==41) && strip==19) cutThisOne=true;
02323   }
02324   else if (fRunNumber>40000 && fRunNumber<60000){
02325     //cut out the strips with bad pedestals
02326     if ((plane==21 || plane==41) && strip==19 && end==1){
02327       cutThisOne=true;
02328     }
02329     if ((plane==20 || plane==40) && strip==4 && end==2){
02330       cutThisOne=true;
02331     }
02332   }    
02333   
02334   //not sure about this, MK reported it bad
02335   //in the 30000s and 40000s (i.e. T11) 38,10,2 was bad
02336   
02337   if (cutThisOne){
02338     MAXMSG("CDAnalysis",Msg::kInfo,6)
02339       <<"Applying cut to bad pedestal channel:"
02340       <<" (pl="<<plane<<", str="<<strip<<", end="<<end<<")"<<endl;
02341   }
02342   
02343   return cutThisOne;
02344 }

Bool_t CDAnalysis::CutOnDeadChips  )  const [private]
 

Definition at line 2292 of file CDAnalysis.cxx.

References fNumDeadChips, and MAXMSG.

Referenced by ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), PrintPIDStats(), StoppingMuonCalibration(), and Template2().

02293 {
02294   Bool_t cutThisOne=false;
02295 
02296   //check if dead chips
02297   if (fNumDeadChips>0) cutThisOne=true;
02298 
02299   if (cutThisOne){
02300     MAXMSG("CDAnalysis",Msg::kInfo,1)
02301       <<"Applying cut on dead chips:"
02302       <<" numDeadChips="<<fNumDeadChips<<endl;
02303   }
02304   
02305   return cutThisOne;
02306 }

Bool_t CDAnalysis::CutOnEventLength  )  const [private]
 

Definition at line 2996 of file CDAnalysis.cxx.

References fBeamMomentum, fLastPlane, GetEventLength(), GetEvLenMinMax(), MAXMSG, and MSG.

Referenced by MuonCalorimetry(), MuonNearFar(), MuonResponse(), StoppingMuonCalibration(), and TruthEnDep().

02997 {
02998   //set default to not cut
02999   Bool_t cutThisOne=false;
03000 
03001   Int_t lastPlane=this->GetEventLength();
03002   
03003   Int_t minPlane=0;
03004   Int_t maxPlane=60;
03005   this->GetEvLenMinMax(minPlane,maxPlane);
03006 
03007   //new cuts are now inclusive so it's 31<=Pl<=45
03008   if (lastPlane<minPlane || lastPlane>maxPlane) cutThisOne=true;
03009 
03010   if (cutThisOne){
03011     MAXMSG("CDAnalysis",Msg::kInfo,1)
03012       <<"Using event length cuts to pass muons: "
03013       <<minPlane<<"<=Plane<="<<maxPlane
03014       <<" (lastPlane="<<lastPlane<<")"
03015       <<", fBeamMomentum="<<fBeamMomentum<<endl;
03016   }
03017 
03018   MSG("CDAnalysis",Msg::kDebug)
03019     <<"fLastPlane="<<fLastPlane<<", cut this one="<<cutThisOne<<endl;
03020 
03021   return cutThisOne;
03022 }

Bool_t CDAnalysis::CutOnEventLengthForElec  )  const [private]
 

Definition at line 2870 of file CDAnalysis.cxx.

References fNumPlanesHitAll, and MAXMSG.

Referenced by ElectronResponse().

02871 {
02872   //set default to not cut
02873   Bool_t cutThisOne=false;
02874 
02875   //Int_t minPlane=0;
02876   Int_t maxPlane=20;
02877 
02878   //old cut
02879   //if (fLastPlane<minPlane || fLastPlane>maxPlane) cutThisOne=true;
02880 
02881   //new cut - number of planes hit allows for a noise hit in the
02882   //back of the detector but will cut out muons sucessfully
02883   Int_t numPlanes=fNumPlanesHitAll.size();
02884   if (numPlanes>maxPlane) cutThisOne=true;
02885 
02886   if (cutThisOne){
02887     MAXMSG("CDAnalysis",Msg::kInfo,1)
02888       <<"Using event length cuts for electrons: "
02889       <<"Num hit planes<="<<maxPlane<<endl;
02890   }
02891 
02892   return cutThisOne;
02893 }

Bool_t CDAnalysis::CutOnFiducialVolume  )  const [private]
 

Definition at line 2224 of file CDAnalysis.cxx.

References fStripsFromCentrePeCut, and MAXMSG.

Referenced by StoppingMuonCalibration().

02225 {
02226   Bool_t cutThisOne=false;
02227 
02228   Int_t stripsFromCentreCut=10;
02229 
02230   if (fStripsFromCentrePeCut>=stripsFromCentreCut) cutThisOne=true;
02231 
02232   if (cutThisOne){
02233     MAXMSG("CDAnalysis",Msg::kInfo,1)
02234       <<"Applying cut on fiducial volume:"<<endl
02235       <<" stripsFromCentre<"<<stripsFromCentreCut
02236       <<" (fStripsFromCentrePeCut="<<fStripsFromCentrePeCut<<")"
02237       <<endl;
02238   }
02239   
02240   return cutThisOne;
02241 }

Bool_t CDAnalysis::CutOnNumHitsPerPlane  )  const [private]
 

Definition at line 2245 of file CDAnalysis.cxx.

References fNumHitsPerPlane, and MAXMSG.

Referenced by StoppingMuonCalibration().

02246 {
02247   Bool_t cutThisOne=false;
02248 
02249   Float_t hitsPerPlLowCut=1.7;
02250   Float_t hitsPerPlCut=2.9;
02251 
02252   if (fNumHitsPerPlane<hitsPerPlLowCut ||
02253       fNumHitsPerPlane>hitsPerPlCut) cutThisOne=true;
02254 
02255   if (cutThisOne){
02256     MAXMSG("CDAnalysis",Msg::kInfo,1)
02257       <<"Applying cut on hits per plane:"
02258       <<" numHitsPerPlane<"<<hitsPerPlCut<<" and >"<<hitsPerPlLowCut
02259       <<" (fNumHitsPerPlane="<<fNumHitsPerPlane<<")"<<endl
02260       <<endl;
02261   }
02262   
02263   return cutThisOne;
02264 }

Bool_t CDAnalysis::CutOnNumHitsPerPlane10  )  const [private]
 

Definition at line 2268 of file CDAnalysis.cxx.

References fNumHitsPerPlanePeCut10, and MAXMSG.

Referenced by StoppingMuonCalibration().

02269 {
02270   Bool_t cutThisOne=false;
02271 
02272   Float_t hitsPerPlPeCut10LowCut=1.1;
02273   Float_t hitsPerPlPeCut10Cut=2.7;
02274 
02275   if (fNumHitsPerPlanePeCut10<hitsPerPlPeCut10LowCut ||
02276       fNumHitsPerPlanePeCut10>hitsPerPlPeCut10Cut) cutThisOne=true;
02277 
02278   if (cutThisOne){
02279     MAXMSG("CDAnalysis",Msg::kInfo,1)
02280       <<"Applying cut on hits per plane:"
02281       <<" numHitsPerPlanePeCut10<"<<hitsPerPlPeCut10Cut
02282       <<" and >"<<hitsPerPlPeCut10LowCut
02283       <<" (fNumHitsPerPlanePeCut10="<<fNumHitsPerPlanePeCut10<<")"
02284       <<endl;
02285   }
02286   
02287   return cutThisOne;
02288 }

Bool_t CDAnalysis::CutOnNumPlanesHit Int_t  planesHit  )  const [private]
 

Definition at line 2934 of file CDAnalysis.cxx.

References fBeamMomentum, fLastPlane, GetEvLenMinMax(), MAXMSG, and MSG.

Referenced by StoppingMuonCalibration().

02935 {
02936   //set default to not cut
02937   Bool_t cutThisOne=false;
02938 
02939   Int_t minPlane=0;
02940   Int_t maxPlane=60;
02941 
02942   this->GetEvLenMinMax(minPlane,maxPlane);
02943 
02944   //new cuts are now inclusive so it's 31<=Pl<=45
02945   if (planesHit<minPlane || planesHit>maxPlane) cutThisOne=true;
02946 
02947   if (cutThisOne){
02948     MAXMSG("CDAnalysis",Msg::kInfo,1)
02949       <<"Using num planes hit cut to pass muons: "
02950       <<minPlane<<"<=Plane<="<<maxPlane
02951       <<", fBeamMomentum="<<fBeamMomentum<<endl;
02952   }
02953 
02954   MSG("CDAnalysis",Msg::kDebug)
02955     <<"fLastPlane="<<fLastPlane<<", cut this one="<<cutThisOne<<endl;
02956 
02957   return cutThisOne;
02958 }

Bool_t CDAnalysis::CutOnOverlap  )  const [private]
 

Definition at line 2400 of file CDAnalysis.cxx.

References fOLChi2, fSimFlag, and MAXMSG.

Referenced by StoppingMuonCalibration().

02401 {
02402   //set default to not cut
02403   Bool_t cutThisOne=false;
02404 
02405   //only have pid for real data so return if not data
02406   if (fSimFlag!=SimFlag::kData) return false;
02407 
02408   //if (!fNoOverlap){ //not no overlap=overlap
02409   //cutThisOne=true;
02410   //}
02411   Float_t olChi2Threshold=1.1;
02412   if (fOLChi2>olChi2Threshold) cutThisOne=true;
02413 
02414   if (cutThisOne){
02415     MAXMSG("CDAnalysis",Msg::kInfo,1)
02416       <<"Applying cut on overlap, OLChi2<"<<olChi2Threshold
02417       <<endl;
02418   }
02419 
02420   return cutThisOne;
02421 }

Bool_t CDAnalysis::CutOnOverlapForElec  )  const [private]
 

Definition at line 2425 of file CDAnalysis.cxx.

References fOLChi2, fSimFlag, and MAXMSG.

Referenced by ElectronResponse().

02426 {
02427   //set default to not cut
02428   Bool_t cutThisOne=false;
02429 
02430   //only have pid for real data so return if not data
02431   if (fSimFlag!=SimFlag::kData) return false;
02432 
02433   Float_t olChi2Threshold=1.1;
02434   if (fOLChi2>olChi2Threshold) cutThisOne=true;
02435 
02436   if (cutThisOne){
02437     MAXMSG("CDAnalysis",Msg::kInfo,1)
02438       <<"Applying cut on overlap for elec, OLChi2<"<<olChi2Threshold
02439       <<endl;
02440   }
02441 
02442   return cutThisOne;
02443 }

Bool_t CDAnalysis::CutOnPid  )  const [private]
 

Definition at line 2574 of file CDAnalysis.cxx.

References fPIDType, fSimFlag, and MAXMSG.

Referenced by MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), PrintPIDStats(), StoppingMuonCalibration(), Template2(), and ValidatePIDInfo().

02575 {
02576   //set default to not cut
02577   Bool_t cutThisOne=false;
02578 
02579   //only have pid for real data so return if not data
02580   if (fSimFlag!=SimFlag::kData) return false;
02581 
02582   Bool_t muonOrPion=fPIDType & (CalDetParticleType::kMuon |
02583                                 CalDetParticleType::kPion);
02584 
02585   if (!muonOrPion){ 
02586     cutThisOne=true;
02587   }
02588   if (!fInCERTime){ 
02589     cutThisOne=true;
02590   }
02591 
02592   if (cutThisOne){
02593     MAXMSG("CDAnalysis",Msg::kInfo,1)
02594       <<"Applying cut on pid to pass only pions and muons"<<endl;
02595   }
02596 
02597   return cutThisOne;
02598 }

Bool_t CDAnalysis::CutOnPidForElec  )  const [private]
 

Definition at line 2447 of file CDAnalysis.cxx.

References fPIDType, fSimFlag, and MAXMSG.

Referenced by ElectronResponse(), PrintPIDStats(), and ValidatePIDInfo().

02448 {
02449   //set default to not cut
02450   Bool_t cutThisOne=false;
02451 
02452   //only have pid for real data so return if not data
02453   if (fSimFlag!=SimFlag::kData) return false;
02454 
02455   if (fPIDType!=CalDetParticleType::kElectron){ 
02456     cutThisOne=true;
02457   }
02458   if (!fInCERTime){ 
02459     cutThisOne=true;
02460   }
02461 
02462   if (cutThisOne){
02463     MAXMSG("CDAnalysis",Msg::kInfo,1)
02464       <<"Applying cut on pid to pass only electrons"<<endl;
02465   }
02466 
02467   return cutThisOne;
02468 }

Bool_t CDAnalysis::CutOnPSMuons  )  const [private]
 

Definition at line 2962 of file CDAnalysis.cxx.

Referenced by StoppingMuonCalibration().

02963 {
02964   //set default to not cut
02965   Bool_t cutThisOne=false;
02966 
02967   if (fAvStrip<9|| fAvStrip>13){
02968     cutThisOne=true;
02969   }
02970 
02971   return cutThisOne;
02972 }

Bool_t CDAnalysis::CutOnScint_TofDiff  )  const [private]
 

Definition at line 2793 of file CDAnalysis.cxx.

References fLowScint_Tof, fUpScint_Tof, GetLowUpTimeCuts(), and MAXMSG.

Referenced by ElectronResponse(), and StoppingMuonCalibration().

02794 {
02795   //set default to not cut
02796   Bool_t cutThisOne=false;
02797 
02798   Float_t lowTime=-1000000;
02799   Float_t upTime=1000000;
02800   
02801   this->GetLowUpTimeCuts(lowTime,upTime);
02802   
02803   if (fLowScint_Tof<lowTime || fUpScint_Tof>upTime) cutThisOne=true;
02804 
02805   if (cutThisOne){
02806     MAXMSG("CDAnalysis",Msg::kInfo,10)
02807       <<"Using TOF-scint diff. cut: "
02808       <<lowTime<<" -> "<<upTime<<" ns"
02809       <<" (t="<<fLowScint_Tof<<" -> "<<fUpScint_Tof<<" ns)"
02810       <<endl;
02811   }
02812 
02813   return cutThisOne;
02814 }

Bool_t CDAnalysis::CutOnTrackQuality Bool_t  requireGoodTrack = true  )  const [private]
 

Definition at line 2371 of file CDAnalysis.cxx.

References fFirstPlane, and MAXMSG.

Referenced by MuonCalorimetry(), MuonNearFar(), MuonResponse(), and StoppingMuonCalibration().

02372 {
02373   //set default to not cut
02374   Bool_t cutThisOne=false;
02375 
02376   //look if a good first plane was found
02377   //this is a good indication of tracking success
02378   Bool_t goodFirstPlane=(fFirstPlane>=0 && fFirstPlane<59);
02379   if (requireGoodTrack){
02380     if (!goodFirstPlane) cutThisOne=true;
02381   }
02382 
02383   //don't do this as not necessary for MEU calibration
02384   //cut on the trackers opinion of what's a good track
02385   //Bool_t goodInBothViews=(fResultEven==1 && fResultOdd==1);
02386   //if (requireGoodTrack){
02387   //  if (!goodInBothViews) cutThisOne=true;
02388   //}
02389 
02390   if (cutThisOne){
02391     MAXMSG("CDAnalysis",Msg::kInfo,1)
02392       <<"Applying cut to track quality"<<endl;
02393   }
02394 
02395   return cutThisOne;
02396 }

Double_t CDAnalysis::dE_dxIterative MuEnergyLoss mat,
Double_t  energyRemaining,
Double_t  totalThk,
Double_t  rho,
Double_t  energyCutOff,
Int_t  slices
const [private]
 

calculate energy deposited in material by iterating over small slices and calculating energy remaining at each stage

Definition at line 12210 of file CDAnalysis.cxx.

References MuEnergyLoss::dE_dx(), MSG, and s().

12215 {
12218 
12219   Double_t totalEnergyDeposited=0;
12220   Double_t sliceThk=totalThk/slices;
12221 
12222   for (Int_t s=0;s<slices;s++){
12223 
12224     if (energyRemaining<energyCutOff){
12225       MSG("CDAnalysis",Msg::kInfo) 
12226         <<"All energy lost at slice "<<s+1<<"/"<<slices
12227         <<" ("<<100.*s*sliceThk/totalThk<<"% through material)"<<endl;
12228       return -1;
12229     }
12230 
12231     //calculate energy deposited in the slice
12232     //Double_t energyDeposited=mat.dE_dx(energyRemaining)*rho*sliceThk;
12233     double e=energyRemaining;
12234     Double_t energyDeposited=mat.dE_dx
12235       (e,Process::eIonization)*rho*sliceThk;
12236     totalEnergyDeposited+=energyDeposited;
12237 
12238     //increment the energy remaining
12239     energyRemaining-=energyDeposited;
12240   }
12241 
12242   return totalEnergyDeposited;
12243 }

void CDAnalysis::DrawResponsePlot std::string &  title,
TProfile *  prof,
TProfile *  profX,
TProfile *  profT,
const std::map< Int_t, Float_t > &  num,
const std::map< Int_t, Float_t > &  numX,
const std::map< Int_t, Float_t > &  numT,
std::string  sXTitle = ""
const [private]
 

Definition at line 13460 of file CDAnalysis.cxx.

References legend(), and TGraphMap().

Referenced by MuonNearFar(), MuonResponse(), and StoppingMuonCalibration().

13466 {
13467 
13468   TLegend *legend = new TLegend(0.85, 0.7, 0.9, 0.9);
13469   legend->SetBorderSize(0);
13470   legend->SetFillColor(0);
13471   legend->SetTextSize(0.035);
13472   string sGraph="Tracked hits";
13473   legend->AddEntry(prof,sGraph.c_str(),"p");
13474   sGraph="Untracked hits";
13475   legend->AddEntry(profX,sGraph.c_str(),"p");
13476   sGraph="All hits";
13477   legend->AddEntry(profT,sGraph.c_str(),"p");
13478 
13479   //default x axis title
13480   if (sXTitle=="") sXTitle="Plane";
13481 
13482   //make the graphs
13483   TGraph* gNum=this->TGraphMap(num);
13484   TGraph* gNumX=this->TGraphMap(numX);
13485   TGraph* gNumT=this->TGraphMap(numT);
13486 
13487   //create the canvas and plot
13488   TCanvas *cResponse=new TCanvas(title.c_str(),title.c_str(),
13489                                  0,0,1200,800);
13490   cResponse->SetFillColor(0);
13491   cResponse->Divide(1,2);
13492   cResponse->cd(1);
13493   prof->Draw("AP");
13494   prof->SetTitle(title.c_str());
13495   prof->GetXaxis()->SetTitle(sXTitle.c_str());
13496   prof->GetYaxis()->SetTitle("Average SigCor");
13497   prof->GetXaxis()->CenterTitle();
13498   prof->GetYaxis()->CenterTitle();
13499   prof->SetMarkerStyle(3);
13500   prof->SetMarkerColor(2);
13501   prof->SetMarkerSize(0.8);
13502   profX->Draw("same");
13503   profX->SetMarkerStyle(3);
13504   profX->SetMarkerColor(3);
13505   profX->SetMarkerSize(0.8);
13506   profT->Draw("same");
13507   profT->SetMarkerStyle(3);
13508   profT->SetMarkerColor(4);
13509   profT->SetMarkerSize(0.8);
13510 
13511   //draw the legend
13512   legend->Draw();
13513 
13514   //do second canvas
13515   TLegend *legend2 = new TLegend(0.85, 0.7, 0.9, 0.9);
13516   legend2->SetBorderSize(0);
13517   legend2->SetFillColor(0);
13518   legend2->SetTextSize(0.035);
13519   sGraph="Tracked hits";
13520   legend2->AddEntry(gNum,sGraph.c_str(),"p");
13521   sGraph="Untracked hits";
13522   legend2->AddEntry(gNumX,sGraph.c_str(),"p");
13523   sGraph="All hits";
13524   legend2->AddEntry(gNumT,sGraph.c_str(),"p");
13525 
13526   cResponse->cd(2);
13527   gNumT->Draw("AP");
13528   gNumT->SetTitle("Number hits");
13529   gNumT->GetXaxis()->SetTitle(sXTitle.c_str());
13530   gNumT->GetYaxis()->SetTitle("Num hits");
13531   gNumT->GetXaxis()->CenterTitle();
13532   gNumT->GetYaxis()->CenterTitle();
13533   gNumT->SetMarkerStyle(3);
13534   gNumT->SetMarkerColor(4);
13535   gNumT->SetMarkerSize(0.8);
13536   gNumX->Draw("P");
13537   gNumX->SetMarkerStyle(3);
13538   gNumX->SetMarkerColor(3);
13539   gNumX->SetMarkerSize(0.8);
13540   gNum->Draw("P");
13541   gNum->SetMarkerStyle(3);
13542   gNum->SetMarkerColor(2);
13543   gNum->SetMarkerSize(0.8);
13544 
13545   //draw the legend
13546   legend2->Draw();
13547 }

void CDAnalysis::ElectronResponse  ) 
 

Definition at line 11096 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), CalcLowUpScint_TofDiff(), CalcNumPlanesHit(), CutOnBadCalorimetry(), CutOnBadPedestals(), CutOnDeadChips(), CutOnEventLengthForElec(), CutOnOverlapForElec(), CutOnPidForElec(), CutOnScint_TofDiff(), fChargeAdc, fChargePe, fChargeSigCor, fKovADC1, fKovADC2, fKovADC3, fKovTimeStamp1, fKovTimeStamp3, fNumPlanesHitAll, fOLChi2, fOutFile, fPlane, fRunNumber, fSigCorPerMEU, fStrip, fStripend, fTime, fTofADCTimeStamp1, fTofTDC0, fTofTDC2, fTrkHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), MAXMSG, MSG, OpenFile(), ReadInHitInfo(), ReCalibrate(), SetLoopVariables(), and StandardSanityChecks().

Referenced by StoppingMuonCalibration().

11097 {
11098   MSG("CDAnalysis",Msg::kInfo) 
11099     <<" ** Running ElectronResponse method... **"<<endl;
11100 
11101   //open the output file for the histograms if not already done
11102   if (!fOutFile) fOutFile=this->OpenFile(fRunNumber,"ElecRes");
11103 
11104   TH1F *hNumPlanesAll_Elec=new TH1F("hNumPlanesAll_Elec",
11105                                     "NumPlanesAll_Elec hit",77,-2,75);
11106   hNumPlanesAll_Elec->GetXaxis()->SetTitle("Number of Planes Hit");
11107   hNumPlanesAll_Elec->GetXaxis()->CenterTitle();
11108   hNumPlanesAll_Elec->GetYaxis()->SetTitle("");
11109   hNumPlanesAll_Elec->GetYaxis()->CenterTitle();
11110   hNumPlanesAll_Elec->SetFillColor(0);
11111   hNumPlanesAll_Elec->SetBit(TH1::kCanRebin);
11112 
11113   TH1F *hNumPlanesAllN_Elec=new TH1F("hNumPlanesAllN_Elec",
11114                                     "NumPlanesAllN_Elec hit",77,-2,75);
11115   hNumPlanesAllN_Elec->GetXaxis()->SetTitle("Number of Planes Hit");
11116   hNumPlanesAllN_Elec->GetXaxis()->CenterTitle();
11117   hNumPlanesAllN_Elec->GetYaxis()->SetTitle("");
11118   hNumPlanesAllN_Elec->GetYaxis()->CenterTitle();
11119   hNumPlanesAllN_Elec->SetFillColor(0);
11120   hNumPlanesAllN_Elec->SetBit(TH1::kCanRebin);
11121   
11122   TH1F *hSumSigCor_Elec=new TH1F("hSumSigCor_Elec","hSumSigCor_Elec",
11123                                  500,-2,100000);
11124   hSumSigCor_Elec->SetTitle("Sum of Corrected ADCs in Event");
11125   hSumSigCor_Elec->GetXaxis()->
11126     SetTitle("Sum of Corrected ADCs in Event");
11127   hSumSigCor_Elec->GetXaxis()->CenterTitle();
11128   hSumSigCor_Elec->GetYaxis()->SetTitle("");
11129   hSumSigCor_Elec->GetYaxis()->CenterTitle();
11130   hSumSigCor_Elec->SetFillColor(0);
11131   //hSumSigCor_Elec->SetBit(TH1::kCanRebin);
11132 
11133   TH1F *hSumMeu_Elec=new TH1F("hSumMeu_Elec","hSumMeu_Elec",500,-2,400);
11134   hSumMeu_Elec->SetTitle("Sum of MEUs in Event");
11135   hSumMeu_Elec->GetXaxis()->SetTitle("Sum of MEUs in Event");
11136   hSumMeu_Elec->GetXaxis()->CenterTitle();
11137   hSumMeu_Elec->GetYaxis()->SetTitle("");
11138   hSumMeu_Elec->GetYaxis()->CenterTitle();
11139   hSumMeu_Elec->SetFillColor(0);
11140   //hSumMeu_Elec->SetBit(TH1::kCanRebin);
11141 
11142   TH1F *hSumMip_Elec=new TH1F("hSumMip_Elec","hSumMip_Elec",500,-2,400);
11143   hSumMip_Elec->SetTitle("Sum of Cosmic-MIPs in Event");
11144   hSumMip_Elec->GetXaxis()->SetTitle("Sum of Cosmic-MIPs in Event");
11145   hSumMip_Elec->GetXaxis()->CenterTitle();
11146   hSumMip_Elec->GetYaxis()->SetTitle("");
11147   hSumMip_Elec->GetYaxis()->CenterTitle();
11148   hSumMip_Elec->SetFillColor(0);
11149   //hSumMip_Elec->SetBit(TH1::kCanRebin);
11150 
11151   TH1F *hSigCor_Elec=new TH1F("hSigCor_Elec","hSigCor_Elec",
11152                               5000,-2,10000);
11153   hSigCor_Elec->SetTitle("Corrected ADCs");
11154   hSigCor_Elec->GetXaxis()->SetTitle("Corrected ADCs");
11155   hSigCor_Elec->GetXaxis()->CenterTitle();
11156   hSigCor_Elec->GetYaxis()->SetTitle("");
11157   hSigCor_Elec->GetYaxis()->CenterTitle();
11158   hSigCor_Elec->SetFillColor(0);
11159   hSigCor_Elec->SetBit(TH1::kCanRebin);
11160 
11161   TH1F *hOLChi2_Elec=new TH1F("hOLChi2_Elec","hOLChi2_Elec",
11162                                200,0,10);
11163   hOLChi2_Elec->GetXaxis()->SetTitle("OLChi2");
11164   hOLChi2_Elec->GetXaxis()->CenterTitle();
11165   hOLChi2_Elec->GetYaxis()->SetTitle("");
11166   hOLChi2_Elec->GetYaxis()->CenterTitle();
11167   hOLChi2_Elec->SetFillColor(0);
11168   hOLChi2_Elec->SetLineWidth(3);
11169   //hOLChi2_Elec->SetBit(TH1::kCanRebin);
11170   
11171   TH1F *hOLChi2_ElecN_1=new TH1F("hOLChi2_ElecN_1","hOLChi2_ElecN_1",
11172                                200,0,10);
11173   hOLChi2_ElecN_1->GetXaxis()->SetTitle("OLChi2");
11174   hOLChi2_ElecN_1->GetXaxis()->CenterTitle();
11175   hOLChi2_ElecN_1->GetYaxis()->SetTitle("");
11176   hOLChi2_ElecN_1->GetYaxis()->CenterTitle();
11177   hOLChi2_ElecN_1->SetFillColor(0);
11178   hOLChi2_ElecN_1->SetLineWidth(3);
11179   hOLChi2_ElecN_1->SetLineColor(2);
11180   //hOLChi2_ElecN_1->SetBit(TH1::kCanRebin);
11181 
11182   TH1F *hOLChi2_ElecN=new TH1F("hOLChi2_ElecN","hOLChi2_ElecN",
11183                                200,0,10);
11184   hOLChi2_ElecN->GetXaxis()->SetTitle("OLChi2");
11185   hOLChi2_ElecN->GetXaxis()->CenterTitle();
11186   hOLChi2_ElecN->GetYaxis()->SetTitle("");
11187   hOLChi2_ElecN->GetYaxis()->CenterTitle();
11188   hOLChi2_ElecN->SetFillColor(0);
11189   hOLChi2_ElecN->SetLineWidth(3);
11190   hOLChi2_ElecN->SetLineColor(4);
11191   //hOLChi2_ElecN->SetBit(TH1::kCanRebin);
11192 
11193   TH1F *hKovADC1_Elec=new TH1F("hKovADC1_Elec","KovADC1_Elec",
11194                                400,-5,10000);
11195   hKovADC1_Elec->GetXaxis()->SetTitle("KovADC1");
11196   hKovADC1_Elec->GetXaxis()->CenterTitle();
11197   hKovADC1_Elec->GetYaxis()->SetTitle("");
11198   hKovADC1_Elec->GetYaxis()->CenterTitle();
11199   hKovADC1_Elec->SetFillColor(0);
11200   hKovADC1_Elec->SetBit(TH1::kCanRebin);
11201 
11202   TH1F *hKovADC1_ElecN_1=new TH1F("hKovADC1_ElecN_1","KovADC1_ElecN_1",
11203                                 400,-5,10000);
11204   hKovADC1_ElecN_1->GetXaxis()->SetTitle("KovADC1");
11205   hKovADC1_ElecN_1->GetXaxis()->CenterTitle();
11206   hKovADC1_ElecN_1->GetYaxis()->SetTitle("");
11207   hKovADC1_ElecN_1->GetYaxis()->CenterTitle();
11208   hKovADC1_ElecN_1->SetFillColor(0);
11209   hKovADC1_ElecN_1->SetLineColor(2);
11210   hKovADC1_ElecN_1->SetBit(TH1::kCanRebin);
11211 
11212   TH1F *hKovADC1_ElecN=new TH1F("hKovADC1_ElecN","KovADC1_ElecN",
11213                                 400,-5,10000);
11214   hKovADC1_ElecN->GetXaxis()->SetTitle("KovADC1");
11215   hKovADC1_ElecN->GetXaxis()->CenterTitle();
11216   hKovADC1_ElecN->GetYaxis()->SetTitle("");
11217   hKovADC1_ElecN->GetYaxis()->CenterTitle();
11218   hKovADC1_ElecN->SetFillColor(0);
11219   hKovADC1_ElecN->SetLineColor(4);
11220   hKovADC1_ElecN->SetBit(TH1::kCanRebin);
11221 
11222   TH1F *hKovADC2_Elec=new TH1F("hKovADC2_Elec","KovADC2_Elec",
11223                                400,-5,10000);
11224   hKovADC2_Elec->GetXaxis()->SetTitle("KovADC2");
11225   hKovADC2_Elec->GetXaxis()->CenterTitle();
11226   hKovADC2_Elec->GetYaxis()->SetTitle("");
11227   hKovADC2_Elec->GetYaxis()->CenterTitle();
11228   hKovADC2_Elec->SetFillColor(0);
11229   hKovADC2_Elec->SetBit(TH1::kCanRebin);
11230 
11231   TH1F *hKovADC2_ElecN_1=new TH1F("hKovADC2_ElecN_1","KovADC2_ElecN_1",
11232                                 400,-5,10000);
11233   hKovADC2_ElecN_1->GetXaxis()->SetTitle("KovADC2");
11234   hKovADC2_ElecN_1->GetXaxis()->CenterTitle();
11235   hKovADC2_ElecN_1->GetYaxis()->SetTitle("");
11236   hKovADC2_ElecN_1->GetYaxis()->CenterTitle();
11237   hKovADC2_ElecN_1->SetFillColor(0);
11238   hKovADC2_ElecN_1->SetLineColor(2);
11239   hKovADC2_ElecN_1->SetBit(TH1::kCanRebin);
11240 
11241   TH1F *hKovADC2_ElecN=new TH1F("hKovADC2_ElecN","KovADC2_ElecN",
11242                                 400,-5,10000);
11243   hKovADC2_ElecN->GetXaxis()->SetTitle("KovADC2");
11244   hKovADC2_ElecN->GetXaxis()->CenterTitle();
11245   hKovADC2_ElecN->GetYaxis()->SetTitle("");
11246   hKovADC2_ElecN->GetYaxis()->CenterTitle();
11247   hKovADC2_ElecN->SetFillColor(0);
11248   hKovADC2_ElecN->SetLineColor(4);
11249   hKovADC2_ElecN->SetBit(TH1::kCanRebin);
11250 
11251   TH1F *hKovADC3_Elec=new TH1F("hKovADC3_Elec","KovADC3_Elec",
11252                                400,-5,10000);
11253   hKovADC3_Elec->GetXaxis()->SetTitle("KovADC3");
11254   hKovADC3_Elec->GetXaxis()->CenterTitle();
11255   hKovADC3_Elec->GetYaxis()->SetTitle("");
11256   hKovADC3_Elec->GetYaxis()->CenterTitle();
11257   hKovADC3_Elec->SetFillColor(0);
11258   hKovADC3_Elec->SetBit(TH1::kCanRebin);
11259 
11260   TH1F *hKovADC3_ElecN_1=new TH1F("hKovADC3_ElecN_1","KovADC3_ElecN_1",
11261                                 400,-5,10000);
11262   hKovADC3_ElecN_1->GetXaxis()->SetTitle("KovADC3");
11263   hKovADC3_ElecN_1->GetXaxis()->CenterTitle();
11264   hKovADC3_ElecN_1->GetYaxis()->SetTitle("");
11265   hKovADC3_ElecN_1->GetYaxis()->CenterTitle();
11266   hKovADC3_ElecN_1->SetFillColor(0);
11267   hKovADC3_ElecN_1->SetLineColor(2);
11268   hKovADC3_ElecN_1->SetBit(TH1::kCanRebin);
11269 
11270   TH1F *hKovADC3_ElecN=new TH1F("hKovADC3_ElecN","KovADC3_ElecN",
11271                                 400,-5,10000);
11272   hKovADC3_ElecN->GetXaxis()->SetTitle("KovADC3");
11273   hKovADC3_ElecN->GetXaxis()->CenterTitle();
11274   hKovADC3_ElecN->GetYaxis()->SetTitle("");
11275   hKovADC3_ElecN->GetYaxis()->CenterTitle();
11276   hKovADC3_ElecN->SetFillColor(0);
11277   hKovADC3_ElecN->SetLineColor(4);
11278   hKovADC3_ElecN->SetBit(TH1::kCanRebin);
11279 
11280   TH1F *hTofDiff_Elec=new TH1F("hTofDiff_Elec","hTofDiff_Elec",
11281                                400,-4000,4000);
11282   hTofDiff_Elec->GetXaxis()->SetTitle("TOF");
11283   hTofDiff_Elec->GetXaxis()->CenterTitle();
11284   hTofDiff_Elec->GetYaxis()->SetTitle("");
11285   hTofDiff_Elec->GetYaxis()->CenterTitle();
11286   hTofDiff_Elec->SetFillColor(0);
11287   hTofDiff_Elec->SetBit(TH1::kCanRebin);
11288 
11289   TH1F *hTofDiff_ElecN_1=new TH1F("hTofDiff_ElecN_1","hTofDiff_ElecN_1",
11290                                 400,-4000,4000);
11291   hTofDiff_ElecN_1->GetXaxis()->SetTitle("TOF");
11292   hTofDiff_ElecN_1->GetXaxis()->CenterTitle();
11293   hTofDiff_ElecN_1->GetYaxis()->SetTitle("");
11294   hTofDiff_ElecN_1->GetYaxis()->CenterTitle();
11295   hTofDiff_ElecN_1->SetFillColor(0);
11296   hTofDiff_ElecN_1->SetLineColor(2);
11297   hTofDiff_ElecN_1->SetBit(TH1::kCanRebin);
11298 
11299   TH1F *hTofDiff_ElecN=new TH1F("hTofDiff_ElecN","hTofDiff_ElecN",
11300                                 400,-4000,4000);
11301   hTofDiff_ElecN->GetXaxis()->SetTitle("TOF");
11302   hTofDiff_ElecN->GetXaxis()->CenterTitle();
11303   hTofDiff_ElecN->GetYaxis()->SetTitle("");
11304   hTofDiff_ElecN->GetYaxis()->CenterTitle();
11305   hTofDiff_ElecN->SetFillColor(0);
11306   hTofDiff_ElecN->SetLineColor(4);
11307   hTofDiff_ElecN->SetBit(TH1::kCanRebin);
11308 
11309   TH1F *hTofKov1Diff_Elec=new TH1F("hTofKov1Diff_Elec",
11310                                    "hTofKov1Diff_Elec",4000,-2,3);
11311   hTofKov1Diff_Elec->GetXaxis()->SetTitle("Tof-Ckv time");
11312   hTofKov1Diff_Elec->GetXaxis()->CenterTitle();
11313   hTofKov1Diff_Elec->GetYaxis()->SetTitle("");
11314   hTofKov1Diff_Elec->GetYaxis()->CenterTitle();
11315   hTofKov1Diff_Elec->SetFillColor(0);
11316   hTofKov1Diff_Elec->SetBit(TH1::kCanRebin);
11317 
11318   TH1F *hTofKov1DiffN_1_Elec=new TH1F("hTofKov1DiffN_1_Elec",
11319                                    "hTofKov1DiffN_1_Elec",4000,-2,3);
11320   hTofKov1DiffN_1_Elec->GetXaxis()->SetTitle("Tof-Ckv time");
11321   hTofKov1DiffN_1_Elec->GetXaxis()->CenterTitle();
11322   hTofKov1DiffN_1_Elec->GetYaxis()->SetTitle("");
11323   hTofKov1DiffN_1_Elec->GetYaxis()->CenterTitle();
11324   hTofKov1DiffN_1_Elec->SetFillColor(0);
11325   hTofKov1DiffN_1_Elec->SetBit(TH1::kCanRebin);
11326 
11327   TH1F *hTofKov1DiffN_Elec=new TH1F("hTofKov1DiffN_Elec",
11328                                    "hTofKov1DiffN_Elec",4000,-2,3);
11329   hTofKov1DiffN_Elec->GetXaxis()->SetTitle("Tof-Ckv time");
11330   hTofKov1DiffN_Elec->GetXaxis()->CenterTitle();
11331   hTofKov1DiffN_Elec->GetYaxis()->SetTitle("");
11332   hTofKov1DiffN_Elec->GetYaxis()->CenterTitle();
11333   hTofKov1DiffN_Elec->SetFillColor(0);
11334   hTofKov1DiffN_Elec->SetBit(TH1::kCanRebin);
11335 
11336   TH1F *hTofKov3Diff_Elec=new TH1F("hTofKov3Diff_Elec",
11337                                    "hTofKov3Diff_Elec",4000,-2,3);
11338   hTofKov3Diff_Elec->GetXaxis()->SetTitle("Tof - Ckv time");
11339   hTofKov3Diff_Elec->GetXaxis()->CenterTitle();
11340   hTofKov3Diff_Elec->GetYaxis()->SetTitle("");
11341   hTofKov3Diff_Elec->GetYaxis()->CenterTitle();
11342   hTofKov3Diff_Elec->SetFillColor(0);
11343   hTofKov3Diff_Elec->SetBit(TH1::kCanRebin);
11344 
11345   TH1F *hTofKov3DiffN_1_Elec=new TH1F("hTofKov3DiffN_1_Elec",
11346                                    "hTofKov3DiffN_1_Elec",4000,-2,3);
11347   hTofKov3DiffN_1_Elec->GetXaxis()->SetTitle("Tof - Ckv time");
11348   hTofKov3DiffN_1_Elec->GetXaxis()->CenterTitle();
11349   hTofKov3DiffN_1_Elec->GetYaxis()->SetTitle("");
11350   hTofKov3DiffN_1_Elec->GetYaxis()->CenterTitle();
11351   hTofKov3DiffN_1_Elec->SetFillColor(0);
11352   hTofKov3DiffN_1_Elec->SetBit(TH1::kCanRebin);
11353 
11354   TH1F *hTofKov3DiffN_Elec=new TH1F("hTofKov3DiffN_Elec",
11355                                    "hTofKov3DiffN_Elec",4000,-2,3);
11356   hTofKov3DiffN_Elec->GetXaxis()->SetTitle("Tof - Ckv time");
11357   hTofKov3DiffN_Elec->GetXaxis()->CenterTitle();
11358   hTofKov3DiffN_Elec->GetYaxis()->SetTitle("");
11359   hTofKov3DiffN_Elec->GetYaxis()->CenterTitle();
11360   hTofKov3DiffN_Elec->SetFillColor(0);
11361   hTofKov3DiffN_Elec->SetBit(TH1::kCanRebin);
11362 
11366   
11367   this->InitialiseLoopVariables();  
11368   
11369   for(Int_t event=0;event<fEvents;event++){
11370     
11371     this->SetLoopVariables(event);
11372 
11373     //do this cut before everything
11374     if (this->CutOnDeadChips()) continue;
11375     //don't cut on pid here anymore
11376 
11377     //fill histos before any cuts
11378     hOLChi2_Elec->Fill(fOLChi2);
11379     hKovADC1_Elec->Fill(fKovADC1);
11380     hKovADC2_Elec->Fill(fKovADC2);
11381     hKovADC3_Elec->Fill(fKovADC3);
11382     hTofDiff_Elec->Fill(fTofTDC2-fTofTDC0); 
11383     hTofKov1Diff_Elec->Fill(fTofADCTimeStamp1-fKovTimeStamp1);
11384     hTofKov3Diff_Elec->Fill(fTofADCTimeStamp1-fKovTimeStamp3);
11385  
11386     Double_t sumSigCor=0;
11387     Double_t sumMip=0;
11388 
11389     //get tclones arrays for this snarl
11390     TClonesArray &cTrk=*fTrkHitInfo;
11391     Int_t numTrkHits=fTrkHitInfo->GetEntries();
11392     TClonesArray &cUnTrk = *fUnTrkHitInfo;
11393     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
11394     TClonesArray &cXTalk = *fXTalkHits;
11395     Int_t numXTalkHits=fXTalkHits->GetEntries();
11396 
11398     //loop over the untracked hits in the snarl
11400     for (Int_t hit=0;hit<numUnTrkHits;hit++){
11401       //cast the tclonesarray up to a trackedhitinfo object
11402       CDTrackedHitInfo *hitInfo=
11403         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
11404 
11405       this->ReadInHitInfo(hitInfo);
11406 
11407       //cut out the bad channels
11408       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
11409 
11410       //check the channel's sanity
11411       this->StandardSanityChecks();
11412       
11413       //calc the scint hits time difference compared to tof
11414       this->CalcLowUpScint_TofDiff(fTime);
11415 
11416       //calculate the first and last planes
11417       this->CalcFirstLastPlane(fPlane);
11418       this->CalcNumPlanesHit(fPlane,fChargePe);
11419 
11420       //cut out the channels not to be used in calorimetry
11421       if (this->CutOnBadCalorimetry(fPlane,fStrip,fStripend)) continue;
11422 
11423       //do the calibration again with latest tables, temperatures,etc
11424       fChargeSigCor=this->ReCalibrate(fChargeAdc,
11425                                       fPlane,fStrip,fStripend);
11426 
11427       sumSigCor+=fChargeSigCor;
11428       sumMip+=fChargeMip;
11429       hSigCor_Elec->Fill(fChargeSigCor);
11430     }
11431 
11433     //loop over xtalk hits in the snarl
11435     for (Int_t hit=0;hit<numXTalkHits;hit++){
11436       CDXTalkHitInfo *hitInfo=
11437         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
11438 
11439       this->ReadInHitInfo(hitInfo);
11440       
11441       //cut out the bad channels
11442       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
11443 
11444       //check the channel's sanity
11445       this->StandardSanityChecks();
11446 
11447       //calc the scint hits time difference compared to tof
11448       this->CalcLowUpScint_TofDiff(fTime);
11449 
11450       //calculate the first and last planes
11451       this->CalcFirstLastPlane(fPlane);
11452       this->CalcNumPlanesHit(fPlane,fChargePe);
11453 
11454       //cut out the channels not to be used in calorimetry
11455       if (this->CutOnBadCalorimetry(fPlane,fStrip,fStripend)) continue;
11456 
11457       //do the calibration again with latest tables, temperatures,etc
11458       fChargeSigCor=this->ReCalibrate(fChargeAdc,
11459                                       fPlane,fStrip,fStripend);
11460 
11461       sumSigCor+=fChargeSigCor;
11462       sumMip+=fChargeMip;
11463       hSigCor_Elec->Fill(fChargeSigCor);
11464     }
11465 
11467     //loop over the tracked hits
11469     for (Int_t hit=0;hit<numTrkHits;hit++){
11470       CDTrackedHitInfo *trackedHitInfo=
11471         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
11472           
11473       this->ReadInHitInfo(trackedHitInfo);
11474 
11475       //cut out the bad channels
11476       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
11477 
11478       //check the channel's sanity
11479       this->StandardSanityChecks();
11480 
11481       //calc the scint hits time difference compared to tof
11482       this->CalcLowUpScint_TofDiff(fTime);
11483 
11484       //calculate the first and last planes
11485       this->CalcFirstLastPlane(fPlane);
11486       this->CalcNumPlanesHit(fPlane,fChargePe);
11487 
11488       //cut out the channels not to be used in calorimetry
11489       if (this->CutOnBadCalorimetry(fPlane,fStrip,fStripend)) continue;
11490 
11491       //do the calibration again with latest tables, temperatures,etc
11492       fChargeSigCor=this->ReCalibrate(fChargeAdc,
11493                                       fPlane,fStrip,fStripend);
11494 
11495       sumSigCor+=fChargeSigCor;
11496       sumMip+=fChargeMip;
11497       hSigCor_Elec->Fill(fChargeSigCor);
11498     }
11500     //end of loop over the tracked hits
11502 
11503     //fill histos for all data
11504     hNumPlanesAll_Elec->Fill(fNumPlanesHitAll.size());
11505 
11506     if (!this->CutOnPidForElec() &&
11507         !this->CutOnEventLengthForElec() && 
11508         !this->CutOnScint_TofDiff()){
11509       hOLChi2_ElecN_1->Fill(fOLChi2);
11510     }
11511 
11512     if (!this->CutOnEventLengthForElec() && 
11513         !this->CutOnOverlapForElec() &&
11514         !this->CutOnScint_TofDiff()){
11515       hKovADC1_ElecN_1->Fill(fKovADC1);
11516       hKovADC2_ElecN_1->Fill(fKovADC2);
11517       hKovADC3_ElecN_1->Fill(fKovADC3);
11518       hTofDiff_ElecN_1->Fill(fTofTDC2-fTofTDC0); 
11519       hTofKov1DiffN_1_Elec->Fill(fTofADCTimeStamp1-fKovTimeStamp1);
11520       hTofKov3DiffN_1_Elec->Fill(fTofADCTimeStamp1-fKovTimeStamp3);
11521     }
11522 
11523     //::elec cuts 
11524     //cut on pid for electrons
11525     if (this->CutOnPidForElec()) continue;
11526     //make event length cuts
11527     if (this->CutOnEventLengthForElec()) continue;
11528     //make overlap cut
11529     if (this->CutOnOverlapForElec()) continue;
11530     //cut on the time difference between scint hits and tof hit
11531     if (this->CutOnScint_TofDiff()) continue;
11532     
11533     //fill pid histos
11534     hOLChi2_ElecN->Fill(fOLChi2);
11535     hKovADC1_ElecN->Fill(fKovADC1);
11536     hKovADC2_ElecN->Fill(fKovADC2);
11537     hKovADC3_ElecN->Fill(fKovADC3);
11538     hTofDiff_ElecN->Fill(fTofTDC2-fTofTDC0); 
11539     hTofKov1DiffN_Elec->Fill(fTofADCTimeStamp1-fKovTimeStamp1);
11540     hTofKov3DiffN_Elec->Fill(fTofADCTimeStamp1-fKovTimeStamp3);
11541 
11542     //fill histo after cuts
11543     hNumPlanesAllN_Elec->Fill(fNumPlanesHitAll.size());
11544     
11545     MAXMSG("CDAnalysis",Msg::kDebug,10)
11546       <<"Event passing plane cuts="<<event<<endl;
11547 
11548     //fill when one-sided (near-only) readout in a sensible way
11549     if (fRunNumber>=100000) hSumMip_Elec->Fill(sumMip);
11550     if (fRunNumber<100000) hSumMip_Elec->Fill(sumMip/2);
11551 
11552     hSumSigCor_Elec->Fill(sumSigCor);
11553     hSumMeu_Elec->Fill(sumSigCor/fSigCorPerMEU);
11554 
11555   }//end of for                                       
11556   
11560 
11561   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
11562 
11563   //turn off the stats box printing
11564   //gStyle->SetOptStat(0);
11565   gStyle->SetOptStat(1111111);
11566 
11567   TCanvas *cGeom_Elec=new TCanvas("cGeom_Elec","cGeom_Elec",
11568                                   0,0,1200,800);
11569   cGeom_Elec->SetFillColor(0);
11570   //cGeom_Elec->Divide(2,3);
11571   cGeom_Elec->cd(1);
11572   hNumPlanesAll_Elec->Draw();
11573   hNumPlanesAllN_Elec->SetLineColor(2);
11574   hNumPlanesAllN_Elec->Draw("sames");
11575 
11576   TCanvas *cEnDep_Elec=new TCanvas("cEnDep_Elec","cEnDep_Elec",
11577                                    0,0,1200,800);
11578   cEnDep_Elec->SetFillColor(0);
11579   cEnDep_Elec->Divide(2,3);
11580   cEnDep_Elec->cd(1);
11581   hSigCor_Elec->Draw();
11582   cEnDep_Elec->cd(2);
11583   hSumSigCor_Elec->Draw();
11584   cEnDep_Elec->cd(3);
11585   hSumMeu_Elec->Draw();
11586   cEnDep_Elec->cd(4);
11587   hSumMip_Elec->Draw();
11588 
11589   MSG("CDAnalysis",Msg::kInfo) 
11590     <<" ** Finished ElectronResponse method **"<<endl;
11591 }

void CDAnalysis::FillEnVsDist std::map< Int_t, Float_t >  plEnDep,
std::map< Int_t, Float_t >  plPLCor,
Int_t  event
const [private]
 

Definition at line 3949 of file CDAnalysis.cxx.

References CalcLastPlaneOnTrkNoXTalk(), Form(), MAXMSG, MSG, TrueEnDep(), and TruePLCor().

Referenced by StoppingMuonCalibration().

03952 {
03953   if (plEnDep.size()==0 || plPLCor.size()==0){
03954     MAXMSG("CDAnalysis",Msg::kWarning,10000)
03955       <<"Can't FillEnVsDist, map has size zero"<<endl;
03956     return;
03957   }
03958 
03959   Float_t materialFromTrkEnd=0;
03960   Float_t trueMaterialFromTrkEnd=0;
03961   Int_t planesFromTrkEnd=0;
03962   const Float_t material01Pl=(5.94)*Munits::cm;//including air gap
03963   Float_t initValue=-999;
03964   
03965   
03966   //static Int_t event=-999;
03967   map<Int_t,Float_t> truePLCor;
03968   this->TruePLCor(truePLCor,event);
03969   //event++;
03970 
03971   static TProfile* pEnVsDist=0;
03972   static TProfile* pEnVsDistAll=0;
03973   static TProfile* pEnVsDistAll2=0;
03974   static TProfile* pEnVsDist0=0;
03975   static TProfile* pTrueEnVsDist0=0;
03976   static TProfile* pTrueEnPLCVsDist0=0;
03977   static TProfile* pTrueEnPLCVsDist0270=0;
03978   static TProfile* pTrueEnPLCVsDist0290=0;
03979   static TProfile* pTrueEnPLCVsDist0310=0;
03980   static TProfile* pEnVsPlane0=0;
03981   static TProfile* pTrueEnVsPlane0=0;
03982   static TProfile* pEnVsDistNoEnd=0;
03983   static TProfile* pEnVsDistNoEnd4951=0;
03984   static TProfile* pEnVsDistNoEnd40=0;
03985   static TProfile* pEnVsDistNoEnd250=0;
03986   static TProfile* pEnVsDistNoEnd270=0;
03987   static TProfile* pEnVsDistNoEnd290=0;
03988   static TProfile* pEnVsDistNoEnd290a=0;
03989   static TProfile* pEnVsDistNoEnd290b=0;
03990   static TProfile* pEnVsDistNoEnd310=0;
03991   static TProfile* pEnVsDistNoEndTrue=0;
03992   static TProfile* pEnVsDistNoEndTrue2=0;
03993   static TProfile* pPLCorVsPlane290=0;
03994   static TProfile* pPLCorVsPlaneTrue=0;
03995   static TH1F* hMatFromTrkEnd=0;
03996   static TH1F* hMatFromTrkEndTrue=0;
03997   static TH1F* hSigCorPLC=0;
03998 
03999   static vector<TH1F*> meuSigCorNoPLCorHistos(60);
04000   static vector<TH1F*> meuSigCorPLCorHistos(60);
04001   static vector<TH1F*> meuSigCorNoPLCorPerpHistos(60);
04002   static vector<TH1F*> meuSigCorPLCorPerpHistos(60);
04003   static vector<TH1F*> meuSigCorNoPLCorZerosHistos(60);
04004   static vector<TH1F*> meuSigCorPLCorZerosHistos(60);
04005 
04006   if (pEnVsDist==0) {
04007     pEnVsDist=new TProfile("pEnVsDist","pEnVsDist",60,0,
04008                            (60*material01Pl)/Munits::cm);
04009     pEnVsDistAll=new TProfile("pEnVsDistAll","pEnVsDistAll",60,0,
04010                               (60*material01Pl)/Munits::cm);
04011     pEnVsDistAll2=new TProfile("pEnVsDistAll2","pEnVsDistAll2",60,0,
04012                                (60*material01Pl)/Munits::cm);
04013     pEnVsDistNoEnd=new TProfile("pEnVsDistNoEnd","pEnVsDistNoEnd",60,0,
04014                                 (60*material01Pl)/Munits::cm);
04015     pEnVsDist0=new TProfile("pEnVsDist0","pEnVsDist0",60,0,
04016                             (60*material01Pl)/Munits::cm);
04017     pEnVsPlane0=new TProfile("pEnVsPlane0","pEnVsPlane0",60,0,60);
04018     pTrueEnVsDist0=new TProfile("pTrueEnVsDist0","pTrueEnVsDist0",60,0,
04019                                 (60*material01Pl)/Munits::cm);
04020     pTrueEnPLCVsDist0=new TProfile("pTrueEnPLCVsDist0",
04021                                    "pTrueEnPLCVsDist0",
04022                                    60,0,(60*material01Pl)/Munits::cm);
04023     pTrueEnPLCVsDist0270=new TProfile("pTrueEnPLCVsDist0270",
04024                                    "pTrueEnPLCVsDist0270",
04025                                    60,0,(60*material01Pl)/Munits::cm);
04026     pTrueEnPLCVsDist0290=new TProfile("pTrueEnPLCVsDist0290",
04027                                    "pTrueEnPLCVsDist0290",
04028                                    60,0,(60*material01Pl)/Munits::cm);
04029     pTrueEnPLCVsDist0310=new TProfile("pTrueEnPLCVsDist0310",
04030                                    "pTrueEnPLCVsDist0310",
04031                                    60,0,(60*material01Pl)/Munits::cm);
04032     pTrueEnVsPlane0=new TProfile("pTrueEnVsPlane0","pTrueEnVsPlane0",
04033                                  60,0,60);
04034     pEnVsDistNoEnd4951=new TProfile("pEnVsDistNoEnd4951",
04035                                     "pEnVsDistNoEnd4951",60,0,
04036                                     (60*material01Pl)/Munits::cm);
04037     pEnVsDistNoEnd40=new TProfile("pEnVsDistNoEnd40",
04038                                   "pEnVsDistNoEnd40",60,0,
04039                                   (60*material01Pl)/Munits::cm);
04040     pEnVsDistNoEnd250=new TProfile("pEnVsDistNoEnd250",
04041                                    "pEnVsDistNoEnd250",60,0,
04042                                    (60*material01Pl)/Munits::cm);
04043     pEnVsDistNoEnd270=new TProfile("pEnVsDistNoEnd270",
04044                                    "pEnVsDistNoEnd270",60,0,
04045                                    (60*material01Pl)/Munits::cm);
04046     pEnVsDistNoEnd290=new TProfile("pEnVsDistNoEnd290",
04047                                    "pEnVsDistNoEnd290",60,0,
04048                                    (60*material01Pl)/Munits::cm);
04049     pEnVsDistNoEnd290a=new TProfile("pEnVsDistNoEnd290a",
04050                                    "pEnVsDistNoEnd290a",60,0,
04051                                   (60*material01Pl)/Munits::cm);
04052     pEnVsDistNoEnd290b=new TProfile("pEnVsDistNoEnd290b",
04053                                    "pEnVsDistNoEnd290b",60,0,
04054                                   (60*material01Pl)/Munits::cm);
04055     pEnVsDistNoEnd310=new TProfile("pEnVsDistNoEnd310",
04056                                    "pEnVsDistNoEnd310",60,0,
04057                                    (60*material01Pl)/Munits::cm);
04058     pEnVsDistNoEndTrue=new TProfile("pEnVsDistNoEndTrue",
04059                                     "pEnVsDistNoEndTrue",60,0,
04060                                     (60*material01Pl)/Munits::cm);
04061     pEnVsDistNoEndTrue2=new TProfile("pEnVsDistNoEndTrue2",
04062                                      "pEnVsDistNoEndTrue2",60,0,
04063                                      (60*material01Pl)/Munits::cm);
04064     hMatFromTrkEnd=new TH1F("hMatFromTrkEnd","hMatFromTrkEnd",200,0,4);
04065     hMatFromTrkEndTrue=new TH1F("hMatFromTrkEndTrue",
04066                                 "hMatFromTrkEndTrue",200,0,4);
04067     hSigCorPLC=new TH1F("hSigCorPLC","hSigCorPLC",5000,-100,20000);
04068     pPLCorVsPlane290=new TProfile("pPLCorVsPlane290",
04069                                   "pPLCorVsPlane290",60,0,60);
04070     pPLCorVsPlaneTrue=new TProfile("pPLCorVsPlaneTrue",
04071                                    "pPLCorVsPlaneTrue",60,0,60);
04072 
04073     for (Int_t i=0;i<60;i++){
04074       string sNameSigCorNoPLCor="hMeuSigCorNoPLCorPlane";
04075       string sNameSigCorPLCor="hMeuSigCorPLCorPlane";
04076       string sNameSigCorNoPLCorPerp="hMeuSigCorNoPLCorPerpPlane";
04077       string sNameSigCorPLCorPerp="hMeuSigCorPLCorPerpPlane";
04078       string sNameSigCorNoPLCorZeros="hMeuSigCorNoPLCorZerosPlane";
04079       string sNameSigCorPLCorZeros="hMeuSigCorPLCorZerosPlane";
04080       //string sNameAdc="hAdcNoPLCorPlane";
04081       string sNum=Form("%d",i);
04082       sNameSigCorNoPLCor+=sNum;
04083       sNameSigCorPLCor+=sNum;
04084       sNameSigCorNoPLCorPerp+=sNum;
04085       sNameSigCorPLCorPerp+=sNum;
04086       sNameSigCorNoPLCorZeros+=sNum;
04087       sNameSigCorPLCorZeros+=sNum;
04088       
04089       meuSigCorNoPLCorHistos[i]=new TH1F
04090         (sNameSigCorNoPLCor.c_str(),sNameSigCorNoPLCor.c_str(),
04091          300,-2,3000);
04092       meuSigCorPLCorHistos[i]=new TH1F
04093         (sNameSigCorPLCor.c_str(),sNameSigCorPLCor.c_str(),
04094          300,-2,3000);
04095 
04096       meuSigCorNoPLCorPerpHistos[i]=new TH1F
04097         (sNameSigCorNoPLCorPerp.c_str(),sNameSigCorNoPLCorPerp.c_str(),
04098          300,-2,3000);
04099       meuSigCorPLCorPerpHistos[i]=new TH1F
04100         (sNameSigCorPLCorPerp.c_str(),sNameSigCorPLCorPerp.c_str(),
04101          300,-2,3000);
04102       
04103       meuSigCorNoPLCorZerosHistos[i]=new TH1F
04104         (sNameSigCorNoPLCorZeros.c_str(),
04105          sNameSigCorNoPLCorZeros.c_str(),
04106          300,-2,3000);
04107       meuSigCorPLCorZerosHistos[i]=new TH1F
04108         (sNameSigCorPLCorZeros.c_str(),
04109          sNameSigCorPLCorZeros.c_str(),
04110          300,-2,3000);
04111     }
04112 
04113     MSG("CDAnalysis",Msg::kInfo)
04114       <<"Creating TProfile, pEnVsDist, max bin="
04115       <<(60*material01Pl)/Munits::cm<<endl;
04116   }
04117 
04118   //Int_t endPlane=this->GetEventLength();
04119   Int_t endPlane=this->CalcLastPlaneOnTrkNoXTalk();
04120   Int_t planeToStopBefore=0;//have to change length cuts too!!!
04121 
04122   //calculate energy deposition in the window
04123   if (endPlane>=0){
04124     MAXMSG("CDAnalysis",Msg::kInfo,100)
04125       <<"Filling histo, vtxPl=0"
04126       <<", endPl="<<endPlane<<endl;
04127     
04129     //loop over the track
04131     Int_t pl=endPlane;
04132     while (pl!=planeToStopBefore){//cut out the first x planes (en dep is low, !d-ray)
04133       
04134       Float_t pathLengthCor=initValue;
04135       pathLengthCor=plPLCor[pl];
04136       Float_t truePathLengthCor=truePLCor[pl];
04137       //might be beyond plane end so use reco PLCor
04138       if (truePathLengthCor<1) truePathLengthCor=pathLengthCor;
04139       if (pl==endPlane){
04140         //cap the very last plane
04141         if (truePathLengthCor>3) {
04142           MAXMSG("CDAnalysis",Msg::kWarning,1000)
04143             <<"Capping the last plane PLCor"<<endl;
04144           truePathLengthCor=3;
04145         }
04146       }
04147 
04148       if (pathLengthCor<1){
04149         MAXMSG("CDAnalysis",Msg::kWarning,1000)
04150           <<"pl="<<pl<<", endPlane="<<endPlane
04151           <<", path len cor wrong="<<pathLengthCor<<endl;
04152         //set default to 1
04153         pathLengthCor=1;
04154       }
04155 
04156       Float_t meuSigCor=0;
04157       if (pathLengthCor) meuSigCor=plEnDep[pl]/pathLengthCor;
04158       Float_t meuSigCorTrue=0;
04159       if (truePathLengthCor) meuSigCorTrue=plEnDep[pl]/
04160                                truePathLengthCor;
04161       Float_t plMaterial=pathLengthCor*material01Pl;
04162       Float_t truePlMaterial=truePathLengthCor*material01Pl;
04163 
04164       //plot the value half way through the range of dE/dx it 
04165       //effectively integrates over
04166       Float_t toPlotMaterial=plMaterial*0.5+materialFromTrkEnd;
04167       Float_t trueToPlotMaterial=truePlMaterial*0.5+
04168         trueMaterialFromTrkEnd;
04169 
04170       Float_t trueEnDep=this->TrueEnDep(pl,event);
04171       Float_t trueEnDepPLC=-1;
04172       if (truePathLengthCor) {
04173         trueEnDepPLC=trueEnDep/truePathLengthCor;
04174       }
04175       
04176       //fill the histograms for each individual plane
04177       if (pl<60 && pl>=0) {
04178         //fill both with and without the pathlength correction
04179         //fill as a function of planes from track end point
04180         meuSigCorNoPLCorHistos[planesFromTrkEnd]->Fill(plEnDep[pl]);
04181         meuSigCorPLCorHistos[planesFromTrkEnd]->Fill(meuSigCor);
04182 
04183         //fill as a function of distance from track end point
04184         //distance in units of "perpendicular planes"
04185         Int_t planesFromTrkEndPerp=
04186           static_cast<Int_t>(materialFromTrkEnd/material01Pl);
04187         MAXMSG("CDAnalysis",Msg::kInfo,1000)
04188           <<"pl="<<pl<<", endPlane="<<endPlane
04189           <<", plFrTrkEnd="<<planesFromTrkEnd
04190           <<", plFrTrkEndPerp="<<planesFromTrkEndPerp
04191           <<", matFrTrkEnd="<<materialFromTrkEnd
04192           <<", material01Pl="<<material01Pl<<endl;
04193         if (planesFromTrkEndPerp<60 && planesFromTrkEndPerp>=0) {
04194           meuSigCorNoPLCorPerpHistos[planesFromTrkEndPerp]->
04195             Fill(plEnDep[pl]);
04196           meuSigCorPLCorPerpHistos[planesFromTrkEndPerp]->
04197             Fill(meuSigCor);
04198         }
04199         else cout<<"ahhh, planesFromTrkEndPerp="
04200                  <<planesFromTrkEndPerp<<endl;
04201 
04202         //fill as a function of plane number
04203         meuSigCorNoPLCorZerosHistos[pl]->Fill(plEnDep[pl]);
04204         meuSigCorPLCorZerosHistos[pl]->Fill(meuSigCor);
04205       }
04206       else cout<<"ahhh, pl="<<pl<<endl;
04207 
04208       //fill plot of PLC energy deposition
04209       hSigCorPLC->Fill(meuSigCor);
04210       pEnVsDistAll->Fill((materialFromTrkEnd/Munits::cm),meuSigCor);
04211       if (meuSigCor<7000) pEnVsDistAll2->Fill
04212                             ((materialFromTrkEnd/Munits::cm),meuSigCor);
04213 
04214       //put a check on the crazy brems
04215       //can get high landau-tail events in individual planes
04216       if (meuSigCor<5000){
04217         pEnVsDist->Fill((toPlotMaterial/Munits::cm),meuSigCor);
04218         
04219         //fill using 0 for the first pl, 
04220         //don't try and get an average position
04221         pEnVsDist0->Fill((materialFromTrkEnd/Munits::cm),meuSigCor);
04222         pEnVsPlane0->Fill(pl,meuSigCor);
04223         pTrueEnVsDist0->Fill((materialFromTrkEnd/Munits::cm),trueEnDep);
04224         pTrueEnPLCVsDist0->Fill((materialFromTrkEnd/Munits::cm),
04225                                 trueEnDepPLC);
04226         pTrueEnVsPlane0->Fill(pl,trueEnDep);
04227         
04228         if (pl!=endPlane) {
04229           pEnVsDistNoEnd->Fill((toPlotMaterial/Munits::cm),meuSigCor);
04230           if (truePLCor.size()>0){
04231             pEnVsDistNoEndTrue->Fill((trueToPlotMaterial/Munits::cm),
04232                                      meuSigCorTrue);
04233             //make one with same positions as reco but true enDep
04234             pEnVsDistNoEndTrue2->Fill((toPlotMaterial/Munits::cm),
04235                                       meuSigCorTrue);
04236           }
04237         }
04238       }
04239 
04240       if (meuSigCor<5000 && endPlane>=49 && endPlane<=51){
04241         if (pl!=endPlane) {
04242           pEnVsDistNoEnd4951->Fill((toPlotMaterial/Munits::cm),
04243                                    meuSigCor);
04244         }
04245       }
04246 
04247       if (meuSigCor<5000 && endPlane>40){
04248         if (pl!=endPlane) {
04249           pEnVsDistNoEnd40->Fill((toPlotMaterial/Munits::cm),
04250                                  meuSigCor);
04251         }
04252       }
04253 
04254       //sum up material traversed
04255       materialFromTrkEnd+=plMaterial;
04256       trueMaterialFromTrkEnd+=truePlMaterial;
04257       planesFromTrkEnd++;
04258 
04259       MAXMSG("CDAnalysis",Msg::kInfo,500)
04260         <<"Window:p="<<pl
04261         <<", matPl="<<pathLengthCor*material01Pl
04262         <<", matTrk="<<materialFromTrkEnd
04263         <<", plEn="<<plEnDep[pl]
04264         <<endl;
04265 
04266       //increment the plane
04267       pl--;
04268     }
04269     hMatFromTrkEnd->Fill(materialFromTrkEnd);
04270     hMatFromTrkEndTrue->Fill(trueMaterialFromTrkEnd);
04271     Float_t totalMaterial=materialFromTrkEnd;
04272     materialFromTrkEnd=0;
04273     trueMaterialFromTrkEnd=0;
04274     
04276     //2nd loop over the track
04278     pl=endPlane;
04279     while (pl!=planeToStopBefore){//cut out the first x planes (en dep is low, !d-ray)
04280       
04281       Float_t pathLengthCor=initValue;
04282       pathLengthCor=plPLCor[pl];
04283       Float_t truePathLengthCor=truePLCor[pl];
04284       //might be beyond plane end so use reco PLCor
04285       if (truePathLengthCor<1) truePathLengthCor=pathLengthCor;
04286       if (pl==endPlane){
04287         //cap the very last plane
04288         if (truePathLengthCor>3) {
04289           MAXMSG("CDAnalysis",Msg::kWarning,1000)
04290             <<"Capping the last plane PLCor"<<endl;
04291           truePathLengthCor=3;
04292         }
04293       }
04294 
04295       if (pathLengthCor<1){
04296         MAXMSG("CDAnalysis",Msg::kWarning,1000)
04297           <<"pl="<<pl<<", endPlane="<<endPlane
04298           <<", path len cor wrong="<<pathLengthCor<<endl;
04299         //set default to 1
04300         pathLengthCor=1;
04301       }
04302 
04303       Float_t meuSigCor=0;
04304       if (pathLengthCor) meuSigCor=plEnDep[pl]/pathLengthCor;
04305       Float_t meuSigCorTrue=0;
04306       if (truePathLengthCor) meuSigCorTrue=plEnDep[pl]/
04307                                truePathLengthCor;
04308       Float_t plMaterial=pathLengthCor*material01Pl;
04309       Float_t truePlMaterial=truePathLengthCor*material01Pl;
04310 
04311       //plot the value half way through the range of dE/dx it 
04312       //effectively integrates over
04313       Float_t toPlotMaterial=plMaterial*0.5+materialFromTrkEnd;
04314       //Float_t trueToPlotMaterial=truePlMaterial*0.5+
04315       //trueMaterialFromTrkEnd;
04316 
04317       Float_t trueEnDep=this->TrueEnDep(pl,event);
04318       Float_t trueEnDepPLC=-1;
04319       if (truePathLengthCor) {
04320         trueEnDepPLC=trueEnDep/truePathLengthCor;
04321       }
04322 
04323       //put a check on the crazy brems and cut out the really steep ones
04324       //can also get high landau-tail events in individual planes
04325       if (meuSigCor<5000 && totalMaterial>2.49 && totalMaterial<2.61){
04326         if (pl!=endPlane) {
04327           pEnVsDistNoEnd250->Fill((toPlotMaterial/Munits::cm),
04328                                   meuSigCor);
04329         }
04330       }
04331       if (meuSigCor<5000 && totalMaterial>2.7 && totalMaterial<2.9){
04332         if (pl!=endPlane) {
04333           pEnVsDistNoEnd270->Fill((toPlotMaterial/Munits::cm),
04334                                   meuSigCor);
04335           pTrueEnPLCVsDist0270->Fill((materialFromTrkEnd/Munits::cm),
04336                                      trueEnDepPLC);
04337         }
04338       }
04339       //was 2.8->3.0 when pl!=1
04340       if (meuSigCor<5000 && totalMaterial>2.9 && totalMaterial<3.1){
04341         if (pl!=endPlane) {
04342           pPLCorVsPlane290->Fill(pl,pathLengthCor);
04343           pTrueEnPLCVsDist0290->Fill((materialFromTrkEnd/Munits::cm),
04344                                      trueEnDepPLC);
04345           pPLCorVsPlaneTrue->Fill(pl,truePathLengthCor);
04346           pEnVsDistNoEnd290->Fill((toPlotMaterial/Munits::cm),
04347                                   meuSigCor);
04348         }
04349       }
04350       if (meuSigCor<5000 && totalMaterial>3.1 && totalMaterial<3.3){
04351         if (pl!=endPlane) {
04352           pEnVsDistNoEnd310->Fill((toPlotMaterial/Munits::cm),
04353                                   meuSigCor);
04354           pTrueEnPLCVsDist0310->Fill((materialFromTrkEnd/Munits::cm),
04355                                      trueEnDepPLC);
04356         }
04357       }
04358 
04359       if (meuSigCor<5000 && totalMaterial>2.95 && totalMaterial<3.05){
04360         if (pl!=endPlane) {
04361           pEnVsDistNoEnd290a->Fill((toPlotMaterial/Munits::cm),
04362                                    meuSigCor);
04363         }
04364       }
04365 
04366 
04367       if (meuSigCor<5000 && totalMaterial>2.96 && totalMaterial<3.03){
04368         if (pl!=endPlane) {
04369           pEnVsDistNoEnd290b->Fill((toPlotMaterial/Munits::cm),
04370                                   meuSigCor);
04371         }
04372       }
04373 
04374       //sum up material traversed
04375       materialFromTrkEnd+=plMaterial;
04376       trueMaterialFromTrkEnd+=truePlMaterial;
04377 
04378       //increment the plane
04379       pl--;
04380     }
04381   }
04382 }

void CDAnalysis::FillProfHisto TProfile *  prof,
std::map< Int_t, Float_t > &  counter,
const std::map< Int_t, Float_t > &  addMe,
Int_t  offset = 0
const [private]
 

Definition at line 3106 of file CDAnalysis.cxx.

References MSG.

Referenced by MuonNearFar(), MuonResponse(), and StoppingMuonCalibration().

03110 {
03111   if (prof){
03112     for (map<Int_t,Float_t>::const_iterator it=addMe.begin();
03113          it!=addMe.end();++it){
03114       Int_t key=it->first;
03115       if (offset!=0) key=offset-(it->first);
03116 
03117       prof->Fill(key,it->second);
03118       counter[key]++;
03119     }
03120   }
03121   else{
03122     MSG("CDAnalysis",Msg::kWarning)
03123       <<"TProfile not initialised"<<endl;
03124   }
03125 }

void CDAnalysis::FlipVector std::vector< Double_t > &  v  )  const [private]
 

Definition at line 2158 of file CDAnalysis.cxx.

References MSG.

Referenced by Bb(), and BbVsGminos().

02159 {
02160   MSG("CDAnalysis",Msg::kDebug) 
02161     <<" ** Running FlipVector method... **"<<endl;
02162 
02163   vector<Double_t> tempV=v;
02164 
02165   for (UInt_t i=0;i<v.size();i++) v[i]=tempV[v.size()-1-i];
02166 
02167   MSG("CDAnalysis",Msg::kDebug) 
02168     <<" ** Finished FlipVector method **"<<endl;
02169 }

Int_t CDAnalysis::GetEventLength  )  const [private]
 

Definition at line 2976 of file CDAnalysis.cxx.

References fLastPlane, fNumPlanesHitAll, and MAXMSG.

Referenced by CalcMeuPLCorrected(), CalcPLCor(), CalcXYZ(), CutOnEventLength(), StoppingMuonCalibration(), and TruePLCor().

02977 {
02978   Int_t lastPlane=fLastPlane;
02979   
02980   //if there was no track then a last plane is not found
02981   //in this case use the number of planes hit
02982   //this will be fairly rare for muons
02983   if (lastPlane==-1) {
02984     MAXMSG("CDAnalysis",Msg::kInfo,1)
02985       <<"GetEventLength::Using num planes hit in event length:"
02986       <<" fLastPlane="<<fLastPlane
02987       <<", numPlanesHit="<<fNumPlanesHitAll.size()<<endl;
02988     lastPlane=fNumPlanesHitAll.size();
02989   }
02990   
02991   return lastPlane;
02992 }

void CDAnalysis::GetEvLenMinMax Int_t &  minPlane,
Int_t &  maxPlane
const [private]
 

Definition at line 2897 of file CDAnalysis.cxx.

References fBeamMomentum, and MAXMSG.

Referenced by CutOnEventLength(), CutOnNumPlanesHit(), StoppingMuonCalibration(), and WriteOutHistos().

02898 {
02899   //I don't understand abs. Sometimes it just returns an int!!
02900   //e.g. in a root macro
02901   Float_t aBeamP=fabs(fBeamMomentum);
02902   
02903   //new cuts are now inclusive so it's 31<=Pl<=45
02904 
02905   if (fabs(fBeamMomentum)>1.3 && fabs(fBeamMomentum)<1.5){
02906     minPlane=31;//minPlane=35;
02907     maxPlane=45;//maxPlane=44;
02908   }
02909   else if (fabs(fBeamMomentum)>1.5 && fabs(fBeamMomentum)<1.7){
02910     minPlane=35;//minPlane=40;
02911     maxPlane=51;//maxPlane=49;
02912   }
02913   else if (fabs(fBeamMomentum)>1.7 && fabs(fBeamMomentum)<1.9){
02914     minPlane=39;//minPlane=42;
02915     maxPlane=56;//maxPlane=57;
02916   }
02917   else if (fabs(fBeamMomentum)>1.9){
02918     minPlane=44;//minPlane=44;
02919     maxPlane=57;//maxPlane=58;
02920   }
02921   else{
02922     MAXMSG("CDAnalysis",Msg::kInfo,10)
02923       <<"No event length cut for this particle energy="
02924       <<fBeamMomentum<<endl;
02925     assert(false);
02926   }
02927   MAXMSG("CDAnalysis",Msg::kInfo,1)
02928     <<"Set Ev. Len min="<<minPlane<<", max="<<maxPlane
02929     <<", aBeamP="<<aBeamP<<endl;
02930 }

Double_t CDAnalysis::GetGreatestMainParticleEnergy Int_t  nEvents = 200  )  const [private]
 

Definition at line 3755 of file CDAnalysis.cxx.

References fTrackerTree, and GetMainParticleEnergy().

03756 {
03757   Double_t mainEnergy=0;
03758 
03759   if (nEvents>fEvents) nEvents=fEvents;
03760 
03761   for(Int_t event=0;event<nEvents;event++){
03762     
03763     //get the snarl/event
03764     fTrackerTree->GetEvent(event); 
03765     
03766     Double_t mEn=this->GetMainParticleEnergy();
03767     
03768     //select the greatest one
03769     if (mEn>mainEnergy) mainEnergy=mEn;
03770   }
03771 
03772   return mainEnergy;
03773 }

void CDAnalysis::GetLowUpTimeCuts Float_t &  lowTime,
Float_t &  upTime
const [private]
 

Definition at line 2818 of file CDAnalysis.cxx.

References fRunNumber, fSimFlag, MAXMSG, and run().

Referenced by CutOnScint_TofDiff(), and StoppingMuonCalibration().

02820 {
02821   //this works in ns rather naughtily!
02822   lowTime=-1000000;
02823   upTime=1000000;
02824 
02825   Int_t run=fRunNumber;
02826 
02827   //set the time gate here so that you get the same for each run 
02828   //period
02829   Int_t lowTimeLimit=35;
02830   Int_t upTimeLimit=295;
02831   Int_t peak=-1;
02832   
02833   //only have timing issues for real data
02834   if (fSimFlag==SimFlag::kData) {
02835     if (run>=40000 && run<50000){
02836       //just for interest: the peak is 180 ns into the 600 ns varc gate
02837       peak=-125;//ns
02838       lowTime=peak-lowTimeLimit;//was -175;
02839       upTime=peak+upTimeLimit;//was 135;
02840     }
02841     else if (run>=50000 && run<60000){
02842       //just for interest: the peak is 280 ns into the 600 ns varc gate
02843       peak=30;//ns
02844       lowTime=peak-lowTimeLimit;
02845       upTime=peak+upTimeLimit;
02846     }
02847     else if (run>=70000 && run<80000){
02848       //just for interest: the peak is 220 ns into the 600 ns varc gate
02849       peak=5;//ns
02850       lowTime=peak-lowTimeLimit;//-30;//-50;
02851       upTime=peak+upTimeLimit;//300;//260;
02852     }
02853     else{
02854       MAXMSG("CDAnalysis",Msg::kInfo,10)
02855         <<"No time cuts cut for this run="<<fRunNumber<<endl;
02856     }
02857   }
02858   else{
02859     MAXMSG("CDAnalysis",Msg::kInfo,1)
02860       <<"MC data so no sensible timing cuts to set"<<endl;
02861   }
02862 
02863   MAXMSG("CDAnalysis",Msg::kInfo,1)
02864     <<"Set time cuts:  low="<<lowTime<<" ns, upper="<<upTime<<" ns"
02865     <<endl;
02866 }

Double_t CDAnalysis::GetMainParticleEnergy  )  const [private]
 

Definition at line 3722 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetMainPartEn(), and MSG.

Referenced by GetGreatestMainParticleEnergy().

03723 {
03724   if (!fTruthHitInfo) return 0;
03725 
03726   Double_t mainEnergy=0;
03727 
03728   TClonesArray &cTruth = *fTruthHitInfo;
03729   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03730   
03731   //loop over the truth hits
03732   for (Int_t hit=0;hit<numTruthHits;hit++){
03733     //cast the tclonesarray up to a truthhitinfo object
03734     CDTruthHitInfo *hitInfo=
03735       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03736     
03737     Double_t en=hitInfo->GetMainPartEn();
03738 
03739     MSG("CDAnalysis",Msg::kDebug)
03740       <<"en="<<en<<endl;
03741 
03742     //find the greatest energy
03743     if (en>mainEnergy) {
03744       mainEnergy=en;
03745       MSG("CDAnalysis",Msg::kDebug)
03746         <<"mainEnergy="<<mainEnergy<<endl;
03747     }
03748   }
03749  
03750   return mainEnergy;
03751 }

void CDAnalysis::InitialiseHitInfoVariables  )  [private]
 

Definition at line 249 of file CDAnalysis.cxx.

References fChargeAdc, fChargeMip, fChargePe, fChargeSigCor, fChargeSigLin, fE1, fE2, fGain, fO1, fO2, fPlane, fResultEven, fResultOdd, fStrip, fStripend, fTime, and fTransPos.

Referenced by ReadInHitInfo().

00250 {
00251   fTime=0;
00252 
00253   fPlane=-1;
00254   fResultOdd=-1;
00255   fResultEven=-1;
00256   fStrip=-1;
00257   fStripend=-1;
00258   fTransPos=-1;
00259 
00260   fO1=false;
00261   fO2=false;
00262   fE1=false;
00263   fE2=false;
00264 
00265   fChargeAdc=-1;
00266   fChargeMip=-1;
00267   fChargeSigCor=-1;
00268   fChargeSigLin=-1;
00269   fChargePe=-1;
00270   fGain=-1;
00271 }

void CDAnalysis::InitialiseLoopVariables  )  [private]
 

Definition at line 170 of file CDAnalysis.cxx.

References fAvStrip, fAvStrip1, fAvStrip2, fFirstPlane, fLastPlane, fLastPlaneEven, fLastPlaneOdd, fLowScint_Tof, fNumHitsPerPlane, fNumHitsPerPlane25, fNumHitsPerPlanePeCut10, fNumPlanesHit25, fNumPlanesHitAll, fNumPlanesHitPeCut, fNumPlanesHitPeCut10, fNumPlanesHitTrk, fStCount, fStCount1, fStCount2, fStripsFromCentrePeCut, fUpScint_Tof, and MSG.

Referenced by BbVsGminos(), CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), PrintPIDStats(), SetLoopVariables(), StoppingMuonCalibration(), Template(), Template2(), TruthAnalysis(), TruthEnDep(), TruthEnDepFe(), TruthEventLength(), ValidateMC(), ValidatePIDInfo(), ValidateReco(), ValidateTrkHits(), ValidateTruth(), ValidateUnTrkHits(), and ValidateXTalkHits().

00171 {
00172   MSG("CDAnalysis",Msg::kDebug)<<"Initialising loop variables..."<<endl;
00173 
00174   fFirstPlane=69;
00175   fLastPlane=-1;
00176   fLastPlaneOdd=-1;
00177   fLastPlaneEven=-1;
00178 
00179   fNumPlanesHitAll.clear();
00180   fNumPlanesHit25.clear();
00181   fNumPlanesHitTrk.clear();
00182   fNumPlanesHitPeCut.clear();
00183   fNumPlanesHitPeCut10.clear();
00184 
00185   fNumHitsPerPlane=-1;
00186   fNumHitsPerPlane25=-1;
00187   fNumHitsPerPlanePeCut10=-1;
00188   fStripsFromCentrePeCut=-1;
00189 
00190   //variables to calc av strip for ps muon cut
00191   fAvStrip=-1;
00192   fStCount=0;
00193   fAvStrip1=-1;
00194   fStCount1=0;
00195   fAvStrip2=-1;
00196   fStCount2=0;
00197 
00198   fLowScint_Tof=1e9;
00199   fUpScint_Tof=-1e9;
00200 
00201   MSG("CDAnalysis",Msg::kDebug)<<"Initialisation complete"<<endl;
00202 }

void CDAnalysis::InitialisePidVariables  )  [private]
 

Definition at line 206 of file CDAnalysis.cxx.

References fFafErr, fInCERTime, fInCERTimeBits, fKovADC1, fKovADC2, fKovADC3, fKovTimeStamp1, fKovTimeStamp2, fKovTimeStamp3, fNoOverlap, fNoOverlapBits, fOLChi2, fPIDType, fSnarlMaxTimeStamp, fSnarlMinTimeStamp, fSnarlTimeFrame, fSparseErr, fTickSinceLast, fTofADC0, fTofADC1, fTofADC2, fTofADCTimeStamp0, fTofADCTimeStamp1, fTofADCTimeStamp2, fTofTDC0, fTofTDC1, fTofTDC2, fTofTimeStamp, fTriggerPMT, and fTrigSource.

Referenced by SetLoopVariables().

00207 {
00208   //these are the SI variables
00209   fTriggerPMT=-1;
00210   fFafErr=-1;
00211   fSparseErr=-1;
00212   fTrigSource=-1;
00213 
00214   fKovADC1=-1;
00215   fKovTimeStamp1=-1;
00216   fKovADC2=-1;
00217   fKovTimeStamp2=-1;
00218   fKovADC3=-1;
00219   fKovTimeStamp3=-1;
00220 
00221   fSnarlTimeFrame=-1;
00222   fSnarlMinTimeStamp=0;
00223   fSnarlMaxTimeStamp=0;
00224 
00225   fTofTDC0=-1;
00226   fTofTDC1=-1;
00227   fTofTDC2=-1;
00228   fTofADC0=-1;
00229   fTofADC1=-1;
00230   fTofADC2=-1;
00231   fTofADCTimeStamp0=-1;
00232   fTofADCTimeStamp1=-1;
00233   fTofADCTimeStamp2=-1;
00234   fTofTimeStamp=-1;//don't use this, use fTofADCTimeStamp1==TTAG
00235 
00236   fTickSinceLast=-1;
00237 
00238   //these are the PID variables
00239   fNoOverlap=kFALSE;
00240   fInCERTime=kFALSE;
00241   fPIDType=0;
00242   fNoOverlapBits=0; 
00243   fInCERTimeBits=0; 
00244   fOLChi2=0;
00245 }

void CDAnalysis::InputFileName std::string  f  )  [static]
 

Definition at line 372 of file CDAnalysis.cxx.

References fInputFileName, and MSG.

00373 {
00374   MSG("CDAnalysis",Msg::kInfo)
00375     <<"Running with input file name="<<f<<endl;
00376   fInputFileName=f;
00377 }

Bool_t CDAnalysis::IsDoubleEnded Int_t  inplane  )  const [private]
 

Definition at line 3292 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), and MSG.

Referenced by MuonResponse().

03293 {
03294   if (!fTruthHitInfo) return true;
03295 
03296   TClonesArray &cTruth = *fTruthHitInfo;
03297   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03298   
03299   Bool_t doubleEnded=false;
03300 
03301   //loop over the truth hits
03302   for (Int_t hit=0;hit<numTruthHits;hit++){
03303     //cast the tclonesarray up to a truthhitinfo object
03304     CDTruthHitInfo *hitInfo=
03305       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03306     
03307     Int_t plane=hitInfo->GetPlane();
03308     
03309     if (plane!=inplane) continue;
03310     
03311     Int_t pmtTruth1=hitInfo->GetPmtTruth1();
03312     Int_t pmtTruth2=hitInfo->GetPmtTruth2();
03313 
03314     if (pmtTruth1 && pmtTruth2) doubleEnded=true;
03315 
03316     MSG("CDAnalysis",Msg::kVerbose)
03317       <<"doubleEnded="<<doubleEnded<<endl;
03318   }
03319 
03320   return doubleEnded;
03321 }

Bool_t CDAnalysis::IsGenuineOrXTalk Int_t  inplane  )  const [private]
 

Definition at line 3325 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), and MSG.

Referenced by MuonResponse().

03326 {
03327   if (!fTruthHitInfo) return true;
03328 
03329   TClonesArray &cTruth = *fTruthHitInfo;
03330   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03331   
03332   Int_t sumTruth=DigiSignal::kUnknown;
03333 
03334   //loop over the truth hits
03335   for (Int_t hit=0;hit<numTruthHits;hit++){
03336     //cast the tclonesarray up to a truthhitinfo object
03337     CDTruthHitInfo *hitInfo=
03338       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03339     
03340     Int_t plane=hitInfo->GetPlane();
03341     
03342     if (plane!=inplane) continue;
03343     
03344     Int_t pmtTruth1=hitInfo->GetPmtTruth1();
03345     Int_t pmtTruth2=hitInfo->GetPmtTruth2();
03346 
03347     //add up the bits
03348     sumTruth|=pmtTruth1;
03349     sumTruth|=pmtTruth2;
03350   }
03351   
03352   MSG("CDAnalysis",Msg::kVerbose)
03353     <<"sumTruth(GenOrXTalk)="<<sumTruth<<endl;
03354 
03355   Bool_t genuineBit=((sumTruth & DigiSignal::kGenuine)==
03356                      DigiSignal::kGenuine);
03357   Bool_t optXTalkBit=((sumTruth & DigiSignal::kCrosstalkOptical)==
03358                       DigiSignal::kCrosstalkOptical);
03359   Bool_t xTalkBit=((sumTruth & DigiSignal::kCrosstalk)==
03360                    DigiSignal::kCrosstalk);
03361 
03362   if (genuineBit || optXTalkBit) return true;
03363   else if (xTalkBit){
03364     MSG("CDAnalysis",Msg::kDebug)
03365       <<" **** Only non-optXTalk, sumTruth="<<sumTruth<<endl;
03366     return false;
03367   }
03368   else{
03369     MSG("CDAnalysis",Msg::kDebug)
03370       <<"Not genuine or xtalk, sumTruth="<<sumTruth<<endl;
03371     return false;
03372   }
03373 }

Bool_t CDAnalysis::IsPlaneGenuine Int_t  inplane  )  const [private]
 

Definition at line 3175 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), MAXMSG, and MSG.

Referenced by MuonResponse().

03176 {
03177   if (!fTruthHitInfo) return true;
03178 
03179   MAXMSG("CDAnalysis",Msg::kInfo,1)
03180     <<"Running IsPlaneGenuine(), fTruthHitInfo="<<fTruthHitInfo<<endl;
03181 
03182   TClonesArray &cTruth = *fTruthHitInfo;
03183   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03184   
03185   Int_t sumTruth=DigiSignal::kUnknown;
03186 
03187   //loop over the truth hits
03188   for (Int_t hit=0;hit<numTruthHits;hit++){
03189     //cast the tclonesarray up to a truthhitinfo object
03190     CDTruthHitInfo *hitInfo=
03191       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03192     
03193     Int_t plane=hitInfo->GetPlane();
03194 
03195     if (plane!=inplane) continue;
03196 
03197     Int_t pmtTruth1=hitInfo->GetPmtTruth1();
03198     Int_t pmtTruth2=hitInfo->GetPmtTruth2();
03199 
03200     //add up the bits
03201     sumTruth|=pmtTruth1;
03202     sumTruth|=pmtTruth2;
03203 
03204     MSG("CDAnalysis",Msg::kVerbose)
03205       <<"sumTruth="<<sumTruth<<endl;
03206   }
03207 
03208   //check if genuine or not
03209   Bool_t genuineBit=((sumTruth & DigiSignal::kGenuine)==
03210                      DigiSignal::kGenuine);
03211   
03212   if (genuineBit) return true;
03213   else return false;
03214 }

Bool_t CDAnalysis::IsPlaneSideHit Int_t  inplane,
Int_t  stripend
const [private]
 

Definition at line 3251 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), and MSG.

Referenced by MuonResponse().

03252 {
03253   if (!fTruthHitInfo) return true;
03254 
03255   TClonesArray &cTruth = *fTruthHitInfo;
03256   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03257   
03258   Bool_t planeSideHit=false;
03259 
03260   //loop over the truth hits
03261   for (Int_t hit=0;hit<numTruthHits;hit++){
03262     //cast the tclonesarray up to a truthhitinfo object
03263     CDTruthHitInfo *hitInfo=
03264       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03265     
03266     Int_t plane=hitInfo->GetPlane();
03267     
03268     if (plane!=inplane) continue;
03269 
03270     Int_t pmtTruth1=hitInfo->GetPmtTruth1();
03271     Int_t pmtTruth2=hitInfo->GetPmtTruth2();
03272     
03273 
03274     if (pmtTruth1 && stripEnd==StripEnd::kEast){
03275       planeSideHit=true;
03276       break;//only need the one hit
03277     }
03278     if (pmtTruth2 && stripEnd==StripEnd::kWest){
03279       planeSideHit=true;
03280       break;//only need the one hit
03281     }
03282   }
03283 
03284   MSG("CDAnalysis",Msg::kVerbose)
03285     <<"planeSideHit="<<planeSideHit<<endl;
03286 
03287   return planeSideHit;
03288 }

Bool_t CDAnalysis::IsPlaneXTalkOnly Int_t  inplane  )  const [private]
 

Definition at line 3129 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), and MSG.

Referenced by MuonResponse().

03130 {
03131   if (!fTruthHitInfo) return false;
03132 
03133   TClonesArray &cTruth = *fTruthHitInfo;
03134   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03135   
03136   Int_t sumTruth=DigiSignal::kUnknown;
03137 
03138   //loop over the truth hits
03139   for (Int_t hit=0;hit<numTruthHits;hit++){
03140     //cast the tclonesarray up to a truthhitinfo object
03141     CDTruthHitInfo *hitInfo=
03142       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03143     
03144     Int_t plane=hitInfo->GetPlane();
03145 
03146     if (plane!=inplane) continue;
03147 
03148     Int_t pmtTruth1=hitInfo->GetPmtTruth1();
03149     Int_t pmtTruth2=hitInfo->GetPmtTruth2();
03150 
03151     //add up the bits
03152     sumTruth|=pmtTruth1;
03153     sumTruth|=pmtTruth2;
03154 
03155     MSG("CDAnalysis",Msg::kVerbose)
03156       <<"sumTruth="<<sumTruth<<endl;
03157   }
03158 
03159   //check if genuine or not
03160   Bool_t genuineBit=((sumTruth & DigiSignal::kGenuine)==
03161                      DigiSignal::kGenuine);
03162   Bool_t optXTalkBit=((sumTruth & DigiSignal::kCrosstalkOptical)==
03163                       DigiSignal::kCrosstalkOptical);
03164   Bool_t xTalkBit=((sumTruth & DigiSignal::kCrosstalk)==
03165                    DigiSignal::kCrosstalk);
03166   
03167   if (genuineBit || sumTruth==0) return false;
03168   else if (optXTalkBit) return true;
03169   else if (xTalkBit) return true;
03170   else return false;
03171 }

Bool_t CDAnalysis::IsSharedPmtHit Int_t  inplane  )  const [private]
 

Definition at line 3218 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetVaChip1(), CDTruthHitInfo::GetVaChip2(), and MSG.

Referenced by MuonResponse().

03219 {
03220   if (!fTruthHitInfo) return true;
03221 
03222   TClonesArray &cTruth = *fTruthHitInfo;
03223   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03224   
03225   Bool_t sharedPmtHit=false;
03226 
03227   //loop over the truth hits
03228   for (Int_t hit=0;hit<numTruthHits;hit++){
03229     //cast the tclonesarray up to a truthhitinfo object
03230     CDTruthHitInfo *hitInfo=
03231       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03232     
03233     Int_t plane=hitInfo->GetPlane();
03234     
03235     if (plane!=inplane) continue;
03236     
03237     Int_t vaChip1=hitInfo->GetVaChip1();
03238     Int_t vaChip2=hitInfo->GetVaChip2();
03239 
03240     if (vaChip1==1 || vaChip2==1) sharedPmtHit=true;
03241 
03242     MSG("CDAnalysis",Msg::kVerbose)
03243       <<"sharedPmtHit="<<sharedPmtHit<<endl;
03244   }
03245 
03246   return sharedPmtHit;
03247 }

Bool_t CDAnalysis::IsStraightTrack Double_t  mainX1Cut  )  const [private]
 

Definition at line 3466 of file CDAnalysis.cxx.

References abs(), fTruthHitInfo, CDTruthHitInfo::GetMainParticle(), and CDTruthHitInfo::GetMainX1().

Referenced by BbVsGminos(), and TruthEnDep().

03467 {
03468   if (!fTruthHitInfo) return true;
03469 
03470   TClonesArray &cTruth = *fTruthHitInfo;
03471   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03472   
03473   //set default return value to true
03474   Bool_t straight=true;
03475 
03476   //loop over the truth hits
03477   for (Int_t hit=0;hit<numTruthHits;hit++){
03478     //cast the tclonesarray up to a truthhitinfo object
03479     CDTruthHitInfo *hitInfo=
03480       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03481     
03482     Int_t mainParticle=hitInfo->GetMainParticle();
03483     Double_t mainX1=hitInfo->GetMainX1();
03484     Int_t muon=13;
03485 
03486     //test for straight tracks
03487     if (abs(mainParticle)==muon && 
03488         (mainX1>mainX1Cut || mainX1<-1*mainX1Cut)){
03489       straight=false;
03490       break;
03491     }
03492   }
03493 
03494   //return result
03495   return straight;
03496 }

Bool_t CDAnalysis::IsStraightTrack_Radius Double_t  radiusCut  )  const [private]
 

Definition at line 3412 of file CDAnalysis.cxx.

References abs(), fTruthHitInfo, CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetStrip(), MAXMSG, TrueDistToPlaneCentre(), and TrueXInStripFrame().

Referenced by ValidateReco().

03413 {
03414   if (!fTruthHitInfo) return true;
03415 
03416   //this method will get called once per event so use event to satisfy
03417   //the TrueXInStripFrame method used below
03418   //bit of a hack but it should work fine
03419   static Int_t event=0;
03420   event++;
03421 
03422   //check if positive
03423   if (radiusCut<0) radiusCut=radiusCut-2*radiusCut;
03424 
03425   TClonesArray &cTruth = *fTruthHitInfo;
03426   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03427   
03428   //set default return value to true
03429   Bool_t straight=true;
03430 
03431   //loop over the truth hits
03432   for (Int_t hit=0;hit<numTruthHits;hit++){
03433     //cast the tclonesarray up to a truthhitinfo object
03434     CDTruthHitInfo *hitInfo=
03435       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03436     
03437     Int_t mainParticle=hitInfo->GetMainParticle();
03438     Int_t plane=hitInfo->GetPlane();
03439     Int_t strip=hitInfo->GetStrip();
03440     Int_t muon=13;
03441 
03442     if (abs(mainParticle)!=muon) continue;
03443 
03444     Float_t trueX=this->TrueXInStripFrame(plane,strip,event);   
03445     Float_t radiusTrue=this->TrueDistToPlaneCentre(strip,trueX);
03446     MAXMSG("CDAnalysis",Msg::kVerbose,300)
03447       <<"trueX="<<trueX<<", trueRadius="<<radiusTrue
03448       <<", striaght="<<straight<<", radiusCut="<<radiusCut<<endl;
03449 
03450     //test for straight tracks
03451     if (radiusTrue>radiusCut){
03452       straight=false;
03453       break;
03454     }
03455   }
03456 
03457   MAXMSG("CDAnalysis",Msg::kVerbose,100)
03458     <<"Returning straight="<<straight<<endl;
03459 
03460   //return result
03461   return straight;
03462 }

void CDAnalysis::MakeChain  )  [private]
 

Definition at line 445 of file CDAnalysis.cxx.

References fOptTree, fTrackerTree, MakeFileList(), and MSG.

00446 {
00447   //get the files to open
00448   vector<string> fileList=this->MakeFileList();
00449 
00450   //create a chain with TrackerTree
00451   fTrackerTree=new TChain("TrackerTree");
00452   fOptTree=new TChain("TrackerOptions");
00453 
00454   Int_t nf=0;
00455   //add the files to the chain
00456   for (vector<string>::iterator file=fileList.begin();
00457        file!=fileList.end();++file){
00458     
00459     //test if file already exists
00460     ifstream openOk((*file).c_str()); 
00461 
00462     //check if a wildcard was used because ifstream can't open wildcards
00463     Int_t stars=(*file).find("*");
00464     Int_t quest=(*file).find("?");
00465 
00466     //check if file existed
00467     if (!openOk && !(quest>=0 || stars>=0)){
00468       MSG("CDAnalysis",Msg::kInfo)
00469         <<endl<<endl
00470         <<"***********************************************************"
00471         <<endl<<"Can't find file="<<*file<<endl
00472         <<"Note: you can't use '~/'. It has to be the full path"<<endl
00473         <<"***********************************************************"
00474         <<endl<<endl
00475         <<"Exiting here!"<<endl;
00476       exit(0);
00477     }
00478     
00479     MSG("CDAnalysis",Msg::kInfo)<<"Adding file="<<*file<<endl;
00480     nf+=fTrackerTree->Add((*file).c_str());
00481     fOptTree->Add((*file).c_str());
00482   }
00483 
00484   if(nf==0){
00485     MSG("CDAnalysis",Msg::kFatal)
00486       <<endl<<endl
00487       <<"*************************************************************"
00488       <<endl<<"No Tracker*.root files found"<<endl
00489       <<"Please set CDDATA to the directory containing the"
00490       <<" Tracker*.root files"<<endl
00491       <<"Or give the txt file containing the files to be input"<<endl
00492       <<"Note: If more than one file is found they will be"
00493       <<" concatenated in a TChain and treated as one"<<endl
00494       <<"*************************************************************"
00495       <<endl<<endl<<"Program will exit here"<<endl;
00496     exit(0);
00497   }
00498     
00499   MSG("CDAnalysis",Msg::kInfo) 
00500     <<"Tracker Tree information:"<<endl;
00501   fTrackerTree->Show(0);
00502   MSG("CDAnalysis",Msg::kInfo) 
00503     <<"Options Tree information:"<<endl;
00504   fOptTree->Show(0);
00505   //fTrackerTree->Print()
00506   
00507   MSG("CDAnalysis",Msg::kInfo)
00508     <<endl<<"Analysing "<<nf<<" file(s). Reading from disk..."<<endl;
00509 }

vector< string > CDAnalysis::MakeFileList  )  [private]
 

Check the fInputFileName first then check the env variable

Definition at line 381 of file CDAnalysis.cxx.

References fInputFileName, and MSG.

Referenced by MakeChain().

00382 {
00384 
00385   vector<string> fileList;
00386   
00387   if (fInputFileName!=""){
00388     ifstream inputFile(fInputFileName.c_str());
00389 
00390     //check if file exists
00391     if (inputFile){
00392       //variables to hold input from file
00393       string file="";
00394    
00395       //read in from the text file and fill objects
00396       while(inputFile>>file) {
00397         MSG("CDAnalysis",Msg::kDebug)
00398           <<"Found input file name="<<file<<endl;
00399         fileList.push_back(file);
00400       }
00401       MSG("CDAnalysis",Msg::kDebug)
00402         <<"Files names found in txt file="<<fileList.size()<<endl;
00403     }
00404     else{
00405       MSG("CDAnalysis",Msg::kFatal)
00406         <<endl<<endl
00407         <<"***********************************************************"
00408         <<endl<<"Input txt file of file names does not exist!"<<endl
00409         <<"InputFileName="<<fInputFileName<<endl
00410         <<"***********************************************************"
00411         <<endl<<endl<<"Program will exit here"<<endl;
00412       exit(0);
00413     }
00414   }
00415   //return the fileList if files were found
00416   if (fileList.size()>0) return fileList;
00417   
00418   //Check the env variable to find files
00419   char* envVariable=getenv("CDDATA");
00420   if (envVariable==NULL){
00421     MSG("CDAnalysis",Msg::kFatal)
00422       <<endl<<endl
00423       <<"*************************************************************"
00424       <<endl<<"Environmental variable CDDATA not set!"<<endl
00425       <<"Please set CDDATA to the directory containing the"
00426       <<" Tracker*.root files"<<endl
00427       <<"Note: If more than one file is found they will be"
00428       <<" concatenated and treated as one"<<endl
00429       <<"*************************************************************"
00430       <<endl<<endl<<"Program will exit here"<<endl;
00431     exit(0);
00432   }
00433   string sEnv=envVariable;
00434   MSG("CDAnalysis",Msg::kInfo)
00435     <<"Looking for Tracker*.root files using the env variable"<<endl
00436     <<"CDDATA="<<sEnv<<endl;
00437   sEnv+="/Tracker*.root";
00438   fileList.push_back(sEnv);
00439 
00440   return fileList;
00441 }

void CDAnalysis::MuonCalorimetry  ) 
 

Definition at line 10514 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), CalcLastPlaneOnTrkNoXTalk(), CutOnBadPedestals(), CutOnDeadChips(), CutOnEventLength(), CutOnPid(), CutOnTrackQuality(), fLastPlane, fOutFile, fPlane, fRatioScEnToBeamEn, fRunNumber, fScEnDepPerMEU, fSigCorPerMEU, fStrip, fStripend, fTrkHitInfo, fTruthHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), MSG, OpenFile(), ReadInHitInfo(), SetLoopVariables(), and StandardSanityChecks().

10515 {
10516   MSG("CDAnalysis",Msg::kInfo) 
10517     <<" ** Running MuonCalorimetry method... **"<<endl;
10518 
10519   //open the output file for the histograms
10520   fOutFile=this->OpenFile(fRunNumber,"MuonCal");
10521 
10522   TH1F *hSigCorTotal=new TH1F("hSigCorTotal","hSigCorTotal",1000,-2,75);
10523   hSigCorTotal->GetXaxis()->SetTitle("SigCors");
10524   hSigCorTotal->GetXaxis()->CenterTitle();
10525   hSigCorTotal->GetYaxis()->SetTitle("");
10526   hSigCorTotal->GetYaxis()->CenterTitle();
10527   hSigCorTotal->SetFillColor(0);
10528   hSigCorTotal->SetBit(TH1::kCanRebin);
10529 
10530   TH1F *hSigCorTotalTight=new TH1F("hSigCorTotalTight",
10531                                    "hSigCorTotalTight",1000,-2,75);
10532   hSigCorTotalTight->GetXaxis()->SetTitle("SigCors");
10533   hSigCorTotalTight->GetXaxis()->CenterTitle();
10534   hSigCorTotalTight->GetYaxis()->SetTitle("");
10535   hSigCorTotalTight->GetYaxis()->CenterTitle();
10536   hSigCorTotalTight->SetFillColor(0);
10537   hSigCorTotalTight->SetBit(TH1::kCanRebin);
10538 
10539   TH1F *hSigCorTotalPeak=new TH1F("hSigCorTotalPeak",
10540                                   "hSigCorTotalPeak",1000,-2,75);
10541   hSigCorTotalPeak->GetXaxis()->SetTitle("SigCors");
10542   hSigCorTotalPeak->GetXaxis()->CenterTitle();
10543   hSigCorTotalPeak->GetYaxis()->SetTitle("");
10544   hSigCorTotalPeak->GetYaxis()->CenterTitle();
10545   hSigCorTotalPeak->SetFillColor(0);
10546   hSigCorTotalPeak->SetBit(TH1::kCanRebin);
10547 
10548   TH1F *hEventLength=new TH1F("hEventLength","hEventLength hit",
10549                               77,-2,75);
10550   hEventLength->GetXaxis()->SetTitle("Event Length (planes)");
10551   hEventLength->GetXaxis()->CenterTitle();
10552   hEventLength->GetYaxis()->SetTitle("");
10553   hEventLength->GetYaxis()->CenterTitle();
10554   hEventLength->SetFillColor(0);
10555   hEventLength->SetBit(TH1::kCanRebin);
10556 
10557   TH1F *hEventLength2=new TH1F("hEventLength2","hEventLength",77,-2,75);
10558   hEventLength2->GetXaxis()->SetTitle("Event Length (planes)");
10559   hEventLength2->GetXaxis()->CenterTitle();
10560   hEventLength2->GetYaxis()->SetTitle("");
10561   hEventLength2->GetYaxis()->CenterTitle();
10562   hEventLength2->SetFillColor(0);
10563   hEventLength2->SetBit(TH1::kCanRebin);
10564 
10565   TH1F *hEventLength3=new TH1F("hEventLength3","hEventLength",77,-2,75);
10566   hEventLength3->SetTitle("Event Track Length");
10567   hEventLength3->GetXaxis()->SetTitle("Event Length (planes)");
10568   hEventLength3->GetXaxis()->CenterTitle();
10569   hEventLength3->GetYaxis()->SetTitle("");
10570   hEventLength3->GetYaxis()->CenterTitle();
10571   hEventLength3->SetFillColor(0);
10572   hEventLength3->SetBit(TH1::kCanRebin);
10573 
10574   TH1F *hMainEn=new TH1F("hMainEn","hMainEn",2000,-1,2);
10575   hMainEn->GetXaxis()->SetTitle("Beam Energy");
10576   hMainEn->GetXaxis()->CenterTitle();
10577   hMainEn->GetYaxis()->SetTitle("");
10578   hMainEn->GetYaxis()->CenterTitle();
10579   hMainEn->SetFillColor(0);
10580   hMainEn->SetBit(TH1::kCanRebin);
10581 
10582   TProfile* pEnVsRange=new TProfile("pEnVsRange","pEnVsRange",
10583                                     62,0,62);
10584   pEnVsRange->SetTitle
10585     ("Beam Energy from Calorimetry vs Range");
10586   pEnVsRange->GetXaxis()->SetTitle("Range (planes)");
10587   pEnVsRange->GetXaxis()->CenterTitle();
10588   pEnVsRange->GetYaxis()->SetTitle("Beam Energy");
10589   pEnVsRange->GetYaxis()->CenterTitle();
10590   pEnVsRange->SetFillColor(0);
10591 
10595   
10596   this->InitialiseLoopVariables();  
10597   
10598   for(Int_t event=0;event<fEvents;event++){
10599     
10600     this->SetLoopVariables(event);
10601 
10602     if (this->CutOnDeadChips()) continue;
10603     if (this->CutOnPid()) continue;
10604 
10605     Double_t sigCorTotal=0;
10606 
10607     //get the main particle energy
10608     hMainEn->Fill(this->GetMainParticleEnergy());
10609 
10610     //get tclones arrays for this snarl
10611     TClonesArray &cTrk=*fTrkHitInfo;
10612     Int_t numTrkHits=fTrkHitInfo->GetEntries();
10613     TClonesArray &cUnTrk = *fUnTrkHitInfo;
10614     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
10615     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
10616     TClonesArray &cXTalk = *fXTalkHits;
10617     Int_t numXTalkHits=fXTalkHits->GetEntries();
10618     //TClonesArray &cTruth = *fTruthHitInfo;
10619     Int_t numTruthHits=0;
10620     if (fTruthHitInfo) numTruthHits=fTruthHitInfo->GetEntries();
10621 
10623     //loop over the untracked hits in the snarl
10625     for (Int_t hit=0;hit<numUnTrkHits;hit++){
10626       //cast the tclonesarray up to a trackedhitinfo object
10627       CDTrackedHitInfo *hitInfo=
10628         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
10629 
10630       this->ReadInHitInfo(hitInfo);
10631 
10632       //cut out the bad channels
10633       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
10634 
10635       //check the channel's sanity
10636       this->StandardSanityChecks();
10637 
10638       if (fPlane==0) continue;
10639       //sum the sigcor in the event
10640       //make up for no plane 0 with 2 times plane 1
10641       else if (fPlane==1) sigCorTotal+=2*fChargeSigCor;
10642       else sigCorTotal+=fChargeSigCor;
10643     }
10644 
10646     //loop over xtalk hits in the snarl
10648     for (Int_t hit=0;hit<numXTalkHits;hit++){
10649       CDXTalkHitInfo *hitInfo=
10650         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
10651 
10652       this->ReadInHitInfo(hitInfo);
10653       
10654       //cut out the bad channels
10655       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
10656 
10657       //check the channel's sanity
10658       this->StandardSanityChecks();
10659 
10660       if (fPlane==0) continue;
10661       //sum the sigcor in the event
10662       //make up for no plane 0 with 2 times plane 1
10663       else if (fPlane==1) sigCorTotal+=2*fChargeSigCor;
10664       else sigCorTotal+=fChargeSigCor;
10665     }
10666 
10668     //loop over the tracked hits
10670     for (Int_t hit=0;hit<numTrkHits;hit++){
10671       CDTrackedHitInfo *trackedHitInfo=
10672         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
10673           
10674       this->ReadInHitInfo(trackedHitInfo);
10675 
10676       //cut out the bad channels
10677       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
10678 
10679       //check the channel's sanity
10680       this->StandardSanityChecks();
10681 
10682       //calculate the first and last planes
10683       this->CalcFirstLastPlane(fPlane);
10684 
10685       if (fPlane==0) continue;
10686       //sum the sigcor in the event
10687       //make up for no plane 0 with 2 times plane 1
10688       else if (fPlane==1) sigCorTotal+=2*fChargeSigCor;
10689       else sigCorTotal+=fChargeSigCor;
10690     }
10692     //end of loop over the tracked hits
10694 
10695     hEventLength->Fill(fLastPlane+1);
10696 
10697     //make sure that the first plane makes sense and was actually set
10698     if (fFirstPlane<0 || fFirstPlane>59) continue;
10699 
10700     //calculate the event energy
10701     Double_t eventEn=(fScEnDepPerMEU/fSigCorPerMEU)*sigCorTotal*
10702       (1/fRatioScEnToBeamEn);
10703     //calc the last plane on the track with no xtalk
10704     Int_t lastPlaneNoXTalk=this->CalcLastPlaneOnTrkNoXTalk();
10705     hEventLength3->Fill(lastPlaneNoXTalk+1);
10706 
10707     //fill the prof
10708     pEnVsRange->Fill(lastPlaneNoXTalk+1,eventEn);
10709 
10710     //make event length cuts
10711     if (this->CutOnEventLength()) continue;
10712     //make track quality cuts
10713     if (this->CutOnTrackQuality()) continue;
10714 
10715     //fill the total sigcor histo
10716     hSigCorTotal->Fill(sigCorTotal);
10717 
10718     //fill event length plots for those passing cuts
10719     hEventLength2->Fill(fLastPlane+1);
10720 
10721     //look at a certain part of the spectrum
10722     if (lastPlaneNoXTalk+1>=50 && lastPlaneNoXTalk+1<53){//50,51,52
10723       //fill the total sigcor histo
10724       hSigCorTotalTight->Fill(sigCorTotal);
10725     }
10726     
10727     if (lastPlaneNoXTalk+1==51){
10728       //fill the total sigcor histo
10729       hSigCorTotalPeak->Fill(sigCorTotal);
10730     }
10731   }//end of for                                       
10732   
10736 
10737   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
10738 
10739   //turn off the stats box printing
10740   gStyle->SetOptStat(0);
10741 
10742 
10743   //turn off the stats box printing
10744   //gStyle->SetOptStat(0);
10745   gStyle->SetOptStat(1111111);
10746 
10747   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
10748   cGeom->SetFillColor(0);
10749   cGeom->Divide(2,2);
10750   cGeom->cd(1);
10751   hEventLength->Draw();
10752   cGeom->cd(2);
10753   hEventLength2->Draw();
10754   cGeom->cd(3);
10755   hEventLength3->Draw();
10756   cGeom->cd(3);
10757 
10758   TCanvas *cEnVsRange=new TCanvas("cEnVsRange","EnVsRange",
10759                                   0,0,1200,800);
10760   cEnVsRange->SetFillColor(0);
10761   cEnVsRange->Divide(1,2);
10762   cEnVsRange->cd(1);
10763   pEnVsRange->Draw();
10764   cEnVsRange->cd(2);
10765   hEventLength3->Draw();
10766 
10767   TCanvas *cSigCor=new TCanvas("cSigCor","SigCor",0,0,1200,800);
10768   cSigCor->SetFillColor(0);
10769   cSigCor->Divide(2,2);
10770   cSigCor->cd(1);
10771   hSigCorTotal->Draw();
10772   cSigCor->cd(2);
10773   hSigCorTotalTight->Draw();
10774   cSigCor->cd(3);
10775   hSigCorTotalPeak->Draw();
10776   cSigCor->cd(4);
10777   hMainEn->Draw();
10778 
10779   MSG("CDAnalysis",Msg::kInfo) 
10780     <<endl
10781     <<"Mean sigCorTotal="<<hSigCorTotal->GetMean()<<endl
10782     <<"Ratio ScEn to BeamEn="<<fRatioScEnToBeamEn
10783     <<" ("<<1/fRatioScEnToBeamEn<<")"<<endl
10784     <<"GeV per SigCor="<<fScEnDepPerMEU/fSigCorPerMEU<<endl
10785     <<"Beam energy from Calorimetry (lose)="
10786     <<((fScEnDepPerMEU/fSigCorPerMEU)*
10787     hSigCorTotal->GetMean()*(1/fRatioScEnToBeamEn))/
10788     Munits::gigaelectronvolt<<" "<<Munits::base_energy_name<<endl
10789     <<"Beam energy from Calorimetry (tight)="
10790     <<((fScEnDepPerMEU/fSigCorPerMEU)*
10791     hSigCorTotalTight->GetMean()*(1/fRatioScEnToBeamEn))/
10792     Munits::gigaelectronvolt<<" "<<Munits::base_energy_name<<endl
10793     <<"Beam energy from Calorimetry (peak)="
10794     <<((fScEnDepPerMEU/fSigCorPerMEU)*
10795     hSigCorTotalPeak->GetMean()*(1/fRatioScEnToBeamEn))/
10796     Munits::gigaelectronvolt<<" "<<Munits::base_energy_name<<endl<<endl;
10797 
10798   MSG("CDAnalysis",Msg::kInfo) 
10799     <<" ** Finished MuonCalorimetry method **"<<endl;
10800 }

void CDAnalysis::MuonNearFar  ) 
 

Definition at line 6152 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), count, CutOnBadPedestals(), CutOnDeadChips(), CutOnEventLength(), CutOnPid(), CutOnTrackQuality(), DrawResponsePlot(), fChargeAdc, fChargePe, fChargeSigCor, FillProfHisto(), fLastPlane, fLastPlaneEven, fLastPlaneOdd, Form(), fOutFile, fPlane, fRunNumber, fStrip, fStripend, fTrkHitInfo, fTruthHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), MAXMSG, MSG, OpenFile(), ReadInHitInfo(), SetLoopVariables(), and StandardSanityChecks().

06153 {
06154   MSG("CDAnalysis",Msg::kInfo) 
06155     <<" ** Running MuonNearFar method... **"<<endl;
06156 
06157   //open the output file for the histograms
06158   fOutFile=this->OpenFile(fRunNumber,"MuonNF");
06159 
06160   TH1F *h15_18All=new TH1F("h15_18All","h15_18All",1000,-2,75);
06161   h15_18All->GetXaxis()->SetTitle("SigCors");
06162   h15_18All->GetXaxis()->CenterTitle();
06163   h15_18All->GetYaxis()->SetTitle("");
06164   h15_18All->GetYaxis()->CenterTitle();
06165   h15_18All->SetFillColor(0);
06166   h15_18All->SetBit(TH1::kCanRebin);
06167 
06168   TH1F *h15_18=new TH1F("h15_18","h15_18",1000,-2,75);
06169   h15_18->GetXaxis()->SetTitle("SigCors");
06170   h15_18->GetXaxis()->CenterTitle();
06171   h15_18->GetYaxis()->SetTitle("");
06172   h15_18->GetYaxis()->CenterTitle();
06173   h15_18->SetFillColor(0);
06174   h15_18->SetBit(TH1::kCanRebin);
06175 
06176   TH1F *h15_18_O1=new TH1F("h15_18_O1","h15_18_O1",1000,-2,75);
06177   h15_18_O1->GetXaxis()->SetTitle("SigCors");
06178   h15_18_O1->GetXaxis()->CenterTitle();
06179   h15_18_O1->GetYaxis()->SetTitle("");
06180   h15_18_O1->GetYaxis()->CenterTitle();
06181   h15_18_O1->SetFillColor(0);
06182   h15_18_O1->SetBit(TH1::kCanRebin);
06183 
06184   TH1F *h15_18_E1=new TH1F("h15_18_E1","h15_18_E1",1000,-2,75);
06185   h15_18_E1->GetXaxis()->SetTitle("SigCors");
06186   h15_18_E1->GetXaxis()->CenterTitle();
06187   h15_18_E1->GetYaxis()->SetTitle("");
06188   h15_18_E1->GetYaxis()->CenterTitle();
06189   h15_18_E1->SetFillColor(0);
06190   h15_18_E1->SetBit(TH1::kCanRebin);
06191 
06192   TH1F *h15_18_O2=new TH1F("h15_18_O2","h15_18_O2",1000,-2,75);
06193   h15_18_O2->GetXaxis()->SetTitle("SigCors");
06194   h15_18_O2->GetXaxis()->CenterTitle();
06195   h15_18_O2->GetYaxis()->SetTitle("");
06196   h15_18_O2->GetYaxis()->CenterTitle();
06197   h15_18_O2->SetFillColor(0);
06198   h15_18_O2->SetBit(TH1::kCanRebin);
06199 
06200   TH1F *h15_18_E2=new TH1F("h15_18_E2","h15_18_E2",1000,-2,75);
06201   h15_18_E2->GetXaxis()->SetTitle("SigCors");
06202   h15_18_E2->GetXaxis()->CenterTitle();
06203   h15_18_E2->GetYaxis()->SetTitle("");
06204   h15_18_E2->GetYaxis()->CenterTitle();
06205   h15_18_E2->SetFillColor(0);
06206   h15_18_E2->SetBit(TH1::kCanRebin);
06207 
06208   //sum of all strip ends, normal and offset planes
06209   //tracked
06210   TProfile* pSigCorVsPlane=new TProfile("pSigCorVsPlane",
06211                                         "pSigCorVsPlane",
06212                                         62,0,62);
06213   TProfile* pSigCorVsOsPlane=new TProfile("pSigCorVsOsPlane",
06214                                           "pSigCorVsOsPlane",
06215                                           62,0,62);
06216 
06217   //xtalk + untracked hits
06218   TProfile* pSigCorVsPlaneX=new TProfile("pSigCorVsPlaneX",
06219                                          "pSigCorVsPlaneX",
06220                                          62,0,62);
06221   TProfile* pSigCorVsOsPlaneX=new TProfile("pSigCorVsOsPlaneX",
06222                                            "pSigCorVsOsPlaneX",
06223                                            62,0,62);
06224 
06225   //total
06226   TProfile* pSigCorVsPlaneT=new TProfile("pSigCorVsPlaneT",
06227                                          "pSigCorVsPlaneT",
06228                                          62,0,62);
06229   TProfile* pSigCorVsOsPlaneT=new TProfile("pSigCorVsOsPlaneT",
06230                                            "pSigCorVsOsPlaneT",
06231                                            62,0,62);
06232 
06233   //individual strip ends
06234   //tracked
06235   TProfile* pSigCorVsPlaneO1=new TProfile("pSigCorVsPlaneO1",
06236                                           "pSigCorVsPlaneO1",
06237                                           62,0,62);
06238   TProfile* pSigCorVsPlaneO2=new TProfile("pSigCorVsPlaneO2",
06239                                           "pSigCorVsPlaneO2",
06240                                           62,0,62);
06241   TProfile* pSigCorVsPlaneE1=new TProfile("pSigCorVsPlaneE1",
06242                                           "pSigCorVsPlaneE1",
06243                                           62,0,62);
06244   TProfile* pSigCorVsPlaneE2=new TProfile("pSigCorVsPlaneE2",
06245                                           "pSigCorVsPlaneE2",
06246                                           62,0,62);
06247   //xtalk + untracked hits
06248   TProfile* pSigCorVsPlaneO1X=new TProfile("pSigCorVsPlaneO1X",
06249                                           "pSigCorVsPlaneO1X",
06250                                           62,0,62);
06251   TProfile* pSigCorVsPlaneO2X=new TProfile("pSigCorVsPlaneO2X",
06252                                           "pSigCorVsPlaneO2X",
06253                                           62,0,62);
06254   TProfile* pSigCorVsPlaneE1X=new TProfile("pSigCorVsPlaneE1X",
06255                                           "pSigCorVsPlaneE1X",
06256                                           62,0,62);
06257   TProfile* pSigCorVsPlaneE2X=new TProfile("pSigCorVsPlaneE2X",
06258                                           "pSigCorVsPlaneE2X",
06259                                           62,0,62);
06260   //total
06261   TProfile* pSigCorVsPlaneO1T=new TProfile("pSigCorVsPlaneO1T",
06262                                           "pSigCorVsPlaneO1T",
06263                                           62,0,62);
06264   TProfile* pSigCorVsPlaneO2T=new TProfile("pSigCorVsPlaneO2T",
06265                                           "pSigCorVsPlaneO2T",
06266                                           62,0,62);
06267   TProfile* pSigCorVsPlaneE1T=new TProfile("pSigCorVsPlaneE1T",
06268                                           "pSigCorVsPlaneE1T",
06269                                           62,0,62);
06270   TProfile* pSigCorVsPlaneE2T=new TProfile("pSigCorVsPlaneE2T",
06271                                           "pSigCorVsPlaneE2T",
06272                                           62,0,62);
06273 
06274   //individual strip ends - offset planes
06275   //tracked
06276   TProfile* pSigCorVsOsPlaneO1=new TProfile("pSigCorVsOsPlaneO1",
06277                                             "pSigCorVsOsPlaneO1",
06278                                             62,0,62);
06279   TProfile* pSigCorVsOsPlaneO2=new TProfile("pSigCorVsOsPlaneO2",
06280                                             "pSigCorVsOsPlaneO2",
06281                                             62,0,62);
06282   TProfile* pSigCorVsOsPlaneE1=new TProfile("pSigCorVsOsPlaneE1",
06283                                             "pSigCorVsOsPlaneE1",
06284                                             62,0,62);
06285   TProfile* pSigCorVsOsPlaneE2=new TProfile("pSigCorVsOsPlaneE2",
06286                                             "pSigCorVsOsPlaneE2",
06287                                             62,0,62);
06288 
06289   //xtalk + untracked hits
06290   TProfile* pSigCorVsOsPlaneO1X=new TProfile("pSigCorVsOsPlaneO1X",
06291                                              "pSigCorVsOsPlaneO1X",
06292                                              62,0,62);
06293   TProfile* pSigCorVsOsPlaneO2X=new TProfile("pSigCorVsOsPlaneO2X",
06294                                             "pSigCorVsOsPlaneO2X",
06295                                             62,0,62);
06296   TProfile* pSigCorVsOsPlaneE1X=new TProfile("pSigCorVsOsPlaneE1X",
06297                                             "pSigCorVsOsPlaneE1X",
06298                                             62,0,62);
06299   TProfile* pSigCorVsOsPlaneE2X=new TProfile("pSigCorVsOsPlaneE2X",
06300                                             "pSigCorVsOsPlaneE2X",
06301                                             62,0,62);
06302   //total
06303   TProfile* pSigCorVsOsPlaneO1T=new TProfile("pSigCorVsOsPlaneO1T",
06304                                             "pSigCorVsOsPlaneO1T",
06305                                             62,0,62);
06306   TProfile* pSigCorVsOsPlaneO2T=new TProfile("pSigCorVsOsPlaneO2T",
06307                                             "pSigCorVsOsPlaneO2T",
06308                                             62,0,62);
06309   TProfile* pSigCorVsOsPlaneE1T=new TProfile("pSigCorVsOsPlaneE1T",
06310                                             "pSigCorVsOsPlaneE1T",
06311                                             62,0,62);
06312   TProfile* pSigCorVsOsPlaneE2T=new TProfile("pSigCorVsOsPlaneE2T",
06313                                             "pSigCorVsOsPlaneE2T",
06314                                             62,0,62);
06315 
06316 
06317   //near/far differences
06318   TProfile* pNearFarOdd=new TProfile("pNearFarOdd",
06319                                      "pNearFarOdd",62,0,62);
06320   TProfile* pNearFarEven=new TProfile("pNearFarEven",
06321                                       "pNearFarEven",62,0,62);
06322 
06323 
06324   vector<TProfile*> pSigCorVsDist;
06325   vector<Int_t> vWindowSize;
06326   vector<Float_t> bigAv;
06327   vector<Int_t> bigAvCounter;
06328   Float_t sum15_18=0;
06329   Float_t sum15_18Counter=0;
06330   Float_t sum15_18Mip=0;
06331   Float_t sum15_18MipCounter=0;
06332   Float_t sumSigCorTotal=0;
06333   Float_t sumSigCorTotalCounter=0;
06334   Float_t sumMipTotal=0;
06335   Float_t sumMipTotalCounter=0;
06336 
06337   //variables to calculate the energy dep for different stripends
06338   Float_t sum15_18_O1=0;
06339   Float_t sum15_18CounterO1=0;
06340   Float_t sum15_18_O2=0;
06341   Float_t sum15_18CounterO2=0;
06342   Float_t sum15_18_E1=0;
06343   Float_t sum15_18CounterE1=0;
06344   Float_t sum15_18_E2=0;
06345   Float_t sum15_18CounterE2=0;
06346 
06347   //num maps for all stripends
06348   map<Int_t,Float_t> num;
06349   map<Int_t,Float_t> numX;
06350   map<Int_t,Float_t> numT;
06351   map<Int_t,Float_t> numOs;
06352   map<Int_t,Float_t> numOsX;
06353   map<Int_t,Float_t> numOsT;
06354 
06355   //non-offset num maps for individual stripends
06356   map<Int_t,Float_t> numO1;
06357   map<Int_t,Float_t> numO1X;
06358   map<Int_t,Float_t> numO1T;
06359   map<Int_t,Float_t> numO2;
06360   map<Int_t,Float_t> numO2X;
06361   map<Int_t,Float_t> numO2T;
06362   map<Int_t,Float_t> numE1;
06363   map<Int_t,Float_t> numE1X;
06364   map<Int_t,Float_t> numE1T;
06365   map<Int_t,Float_t> numE2;
06366   map<Int_t,Float_t> numE2X;
06367   map<Int_t,Float_t> numE2T;
06368 
06369   //offset num maps for individual stripends
06370   map<Int_t,Float_t> numOsO1;
06371   map<Int_t,Float_t> numOsO1X;
06372   map<Int_t,Float_t> numOsO1T;
06373   map<Int_t,Float_t> numOsO2;
06374   map<Int_t,Float_t> numOsO2X;
06375   map<Int_t,Float_t> numOsO2T;
06376   map<Int_t,Float_t> numOsE1;
06377   map<Int_t,Float_t> numOsE1X;
06378   map<Int_t,Float_t> numOsE1T;
06379   map<Int_t,Float_t> numOsE2;
06380   map<Int_t,Float_t> numOsE2X;
06381   map<Int_t,Float_t> numOsE2T;
06382 
06383   Int_t noTrackCounter=0;
06384   Int_t passPidCounter=0;
06385  
06389   
06390   this->InitialiseLoopVariables();  
06391   
06392   for(Int_t event=0;event<fEvents;event++){
06393     
06394     this->SetLoopVariables(event);
06395 
06396     if (this->CutOnDeadChips()) continue;
06397     if (this->CutOnPid()) continue;
06398 
06399     //cut on not straight tracks
06400     //Double_t mainX1Cut=0.5;
06401     //if (!this->IsStraightTrack(mainX1Cut)){
06402     //continue;
06403     //}
06404 
06405     //count the number of events passing the pid
06406     passPidCounter++;
06407 
06408     map<Int_t,Int_t> numPlanesHit;
06409     map<Int_t,Int_t> numPlanesHit1;
06410     map<Int_t,Int_t> numPlanesHit2;
06411     map<Int_t,Int_t> numPlanesHitAll;
06412     map<Int_t,Float_t> planeSigCor;
06413     map<Int_t,Float_t> planeSigCorX;
06414     map<Int_t,Float_t> planeSigCorT;
06415     map<Int_t,Float_t> planeSigCorO1;    
06416     map<Int_t,Float_t> planeSigCorO1X;
06417     map<Int_t,Float_t> planeSigCorO1T;
06418     map<Int_t,Float_t> planeSigCorO2;
06419     map<Int_t,Float_t> planeSigCorO2X;
06420     map<Int_t,Float_t> planeSigCorO2T;
06421     map<Int_t,Float_t> planeSigCorE1;
06422     map<Int_t,Float_t> planeSigCorE1X;
06423     map<Int_t,Float_t> planeSigCorE1T;
06424     map<Int_t,Float_t> planeSigCorE2;
06425     map<Int_t,Float_t> planeSigCorE2X;
06426     map<Int_t,Float_t> planeSigCorE2T;
06427 
06428     map<Int_t,Float_t> planeMip;
06429     map<Int_t,Float_t> planeMipX;
06430     map<Int_t,Float_t> planeMipT;
06431 
06432     map<Int_t,Float_t> planePe;
06433     map<Int_t,Float_t> planeGreatestPe;
06434 
06435     //get tclones arrays for this snarl
06436     TClonesArray &cTrk=*fTrkHitInfo;
06437     Int_t numTrkHits=fTrkHitInfo->GetEntries();
06438     TClonesArray &cUnTrk = *fUnTrkHitInfo;
06439     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
06440     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
06441     TClonesArray &cXTalk = *fXTalkHits;
06442     Int_t numXTalkHits=fXTalkHits->GetEntries();
06443     //TClonesArray &cTruth = *fTruthHitInfo;
06444     Int_t numTruthHits=0;
06445     if (fTruthHitInfo) numTruthHits=fTruthHitInfo->GetEntries();
06446 
06447     //look for untracked big events
06448     if (numTrkHits<2 && numXTalkHits+numUnTrkHits>1){
06449       MSG("CDAnalysis",Msg::kDebug)
06450         <<"Event="<<event
06451         <<", Num hits: trk="<<numTrkHits<<", unTrk="<<numUnTrkHits
06452         <<", xtalk="<<numXTalkHits<<", truth="<<numTruthHits
06453         <<endl;
06454       noTrackCounter++;
06455       //continue;
06456     }
06457 
06459     //loop over the untracked hits in the snarl
06461     for (Int_t hit=0;hit<numUnTrkHits;hit++){
06462       //cast the tclonesarray up to a trackedhitinfo object
06463       CDTrackedHitInfo *hitInfo=
06464         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
06465 
06466       this->ReadInHitInfo(hitInfo);
06467 
06468       if (fPlane==0 && fChargeSigCor>1000){
06469         MSG("CDAnalysis",Msg::kDebug)
06470           <<"XTalk Event="<<event
06471           <<", fPlane="<<fPlane
06472           <<", fStrip="<<fStrip
06473           <<", fStripend="<<fStripend
06474           <<", fChargeAdc="<<fChargeAdc
06475           <<", fSigCor="<<fChargeSigCor<<endl;
06476       }
06477 
06478       //cut out the bad channels
06479       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
06480 
06481       //count the number of planes hit
06482       numPlanesHitAll[fPlane]++;
06483 
06484       //check the channel's sanity
06485       this->StandardSanityChecks();
06486 
06487       //add up the charge of the hits in each plane
06488       planeSigCorX[fPlane]+=fChargeSigCor;
06489       planeSigCorT[fPlane]+=fChargeSigCor;
06490       planeMipX[fPlane]+=fChargeMip;
06491       planeMipT[fPlane]+=fChargeMip;
06492       if (fO1) planeSigCorO1X[fPlane]+=fChargeSigCor;
06493       if (fO2) planeSigCorO2X[fPlane]+=fChargeSigCor;
06494       if (fE1) planeSigCorE1X[fPlane]+=fChargeSigCor;
06495       if (fE2) planeSigCorE2X[fPlane]+=fChargeSigCor;
06496       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
06497       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
06498       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
06499       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
06500 
06501       if (fChargePe>planeGreatestPe[fPlane]) planeGreatestPe[fPlane]=
06502                                                fChargePe;
06503     }
06504 
06506     //loop over xtalk hits in the snarl
06508     for (Int_t hit=0;hit<numXTalkHits;hit++){
06509       CDXTalkHitInfo *hitInfo=
06510         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
06511 
06512       this->ReadInHitInfo(hitInfo);
06513       
06514       //cut out the bad channels
06515       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
06516 
06517       //count the number of planes hit
06518       numPlanesHitAll[fPlane]++;
06519 
06520       //check the channel's sanity
06521       this->StandardSanityChecks();
06522 
06523       //add up the charge of the hits in each plane
06524       planeSigCorX[fPlane]+=fChargeSigCor;
06525       planeSigCorT[fPlane]+=fChargeSigCor;
06526       planeMipX[fPlane]+=fChargeMip;
06527       planeMipT[fPlane]+=fChargeMip;
06528       if (fO1) planeSigCorO1X[fPlane]+=fChargeSigCor;
06529       if (fO2) planeSigCorO2X[fPlane]+=fChargeSigCor;
06530       if (fE1) planeSigCorE1X[fPlane]+=fChargeSigCor;
06531       if (fE2) planeSigCorE2X[fPlane]+=fChargeSigCor;
06532       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
06533       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
06534       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
06535       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
06536 
06537       if (fChargePe>planeGreatestPe[fPlane]) planeGreatestPe[fPlane]=
06538                                                fChargePe;
06539     }
06540 
06541     Bool_t lastPlaneO1Hit=false;
06542     Bool_t lastPlaneO2Hit=false;
06543     Bool_t lastPlaneE1Hit=false;
06544     Bool_t lastPlaneE2Hit=false;
06545     Int_t previousfLastPlane=-1;
06546 
06548     //loop over the tracked hits
06550     for (Int_t hit=0;hit<numTrkHits;hit++){
06551       CDTrackedHitInfo *trackedHitInfo=
06552         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
06553           
06554       this->ReadInHitInfo(trackedHitInfo);
06555 
06556       //cut out the bad channels
06557       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
06558 
06559       //check the channel's sanity
06560       this->StandardSanityChecks();
06561 
06562       //calculate the first and last planes
06563       this->CalcFirstLastPlane(fPlane);
06564 
06565       //count the number of planes hit
06566       numPlanesHit[fPlane]++;
06567       numPlanesHitAll[fPlane]++;
06568 
06569      if (fLastPlane==fPlane && fPlane%2==0){
06570 
06571         //check if a new last plane has been found
06572         if (fLastPlane!=previousfLastPlane){
06573           lastPlaneE1Hit=false;
06574           lastPlaneE2Hit=false;
06575         }
06576         previousfLastPlane=fLastPlane;
06577 
06578         //check which stripend to set to true
06579         if (fStripend==1) lastPlaneE1Hit=true;
06580         if (fStripend==2) lastPlaneE2Hit=true;
06581 
06582         //set the hits in the other plane to be false
06583         lastPlaneO1Hit=false;
06584         lastPlaneO2Hit=false;
06585         MSG("CDAnalysis",Msg::kVerbose)
06586           <<"ev="<<event
06587           <<", last="<<fLastPlane
06588           <<", pl="<<fPlane
06589           <<", se="<<fStripend
06590           <<", E1="<<lastPlaneE1Hit
06591           <<", E2="<<lastPlaneE2Hit
06592           <<", O1="<<lastPlaneO1Hit
06593           <<", O2="<<lastPlaneO2Hit<<endl;
06594       }
06595       else if (fLastPlane==fPlane && fPlane%2==1){
06596 
06597         //check if a new last plane has been found
06598         if (fLastPlane!=previousfLastPlane){
06599           lastPlaneO1Hit=false;
06600           lastPlaneO2Hit=false;
06601         }
06602         previousfLastPlane=fLastPlane;
06603 
06604         //check which stripend to set to true
06605         if (fStripend==1) lastPlaneO1Hit=true;
06606         if (fStripend==2) lastPlaneO2Hit=true;
06607 
06608         //set the hits in the other plane to be false
06609         lastPlaneE1Hit=false;
06610         lastPlaneE2Hit=false;
06611 
06612         MSG("CDAnalysis",Msg::kVerbose)
06613           <<"ev="<<event
06614           <<", last="<<fLastPlane
06615           <<", pl="<<fPlane
06616           <<", se="<<fStripend
06617           <<", E1="<<lastPlaneE1Hit
06618           <<", E2="<<lastPlaneE2Hit
06619           <<", O1="<<lastPlaneO1Hit
06620           <<", O2="<<lastPlaneO2Hit<<endl;
06621       }
06622 
06623       //add up the charge of the hits in each plane
06624       planeSigCor[fPlane]+=fChargeSigCor;
06625       planeSigCorT[fPlane]+=fChargeSigCor;
06626       planeMip[fPlane]+=fChargeMip;
06627       planeMipT[fPlane]+=fChargeMip;
06628       if (fChargePe>planeGreatestPe[fPlane]) planeGreatestPe[fPlane]=
06629                                                fChargePe;
06630       planePe[fPlane]+=fChargePe;
06631       if (fO1) planeSigCorO1[fPlane]+=fChargeSigCor;
06632       if (fO2) planeSigCorO2[fPlane]+=fChargeSigCor;
06633       if (fE1) planeSigCorE1[fPlane]+=fChargeSigCor;
06634       if (fE2) planeSigCorE2[fPlane]+=fChargeSigCor;
06635       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
06636       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
06637       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
06638       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
06639     }
06641     //end of loop over the tracked hits
06643 
06644     //make sure that the first plane makes sense and was actually set
06645     if (fFirstPlane<0 || fFirstPlane>59) continue;
06646 
06647     //calc the last plane on the track with no xtalk
06648     //Int_t lastPlaneNoXTalk=this->CalcLastPlaneOnTrkNoXTalk();
06649 
06650     //make event length cuts
06651     if (this->CutOnEventLength()) continue;
06652     //make track quality cuts
06653     if (this->CutOnTrackQuality()) continue;
06654 
06656     //section for response
06658     const Int_t os=fLastPlane;
06659 
06660     //must fill the profs before looping over the maps because
06661     //zeros will get added to the maps at the window stage!
06662     //fill profs for all stripends
06663     this->FillProfHisto(pSigCorVsPlane,num,planeSigCor);
06664     this->FillProfHisto(pSigCorVsPlaneX,numX,planeSigCorX);
06665     this->FillProfHisto(pSigCorVsPlaneT,numT,planeSigCorT);
06666     //offset
06667     this->FillProfHisto(pSigCorVsOsPlane,numOs,planeSigCor,os);
06668     this->FillProfHisto(pSigCorVsOsPlaneX,numOsX,planeSigCorX,os);
06669     this->FillProfHisto(pSigCorVsOsPlaneT,numOsT,planeSigCorT,os);
06670 
06671     //fill non-offset profs for individual stripends
06672     this->FillProfHisto(pSigCorVsPlaneO1,numO1,planeSigCorO1);
06673     this->FillProfHisto(pSigCorVsPlaneO1X,numO1X,planeSigCorO1X);
06674     this->FillProfHisto(pSigCorVsPlaneO1T,numO1T,planeSigCorO1T);
06675     this->FillProfHisto(pSigCorVsPlaneO2,numO2,planeSigCorO2);
06676     this->FillProfHisto(pSigCorVsPlaneO2X,numO2X,planeSigCorO2X);
06677     this->FillProfHisto(pSigCorVsPlaneO2T,numO2T,planeSigCorO2T);
06678     this->FillProfHisto(pSigCorVsPlaneE1,numE1,planeSigCorE1);
06679     this->FillProfHisto(pSigCorVsPlaneE1X,numE1X,planeSigCorE1X);
06680     this->FillProfHisto(pSigCorVsPlaneE1T,numE1T,planeSigCorE1T);
06681     this->FillProfHisto(pSigCorVsPlaneE2,numE2,planeSigCorE2);
06682     this->FillProfHisto(pSigCorVsPlaneE2X,numE2X,planeSigCorE2X);
06683     this->FillProfHisto(pSigCorVsPlaneE2T,numE2T,planeSigCorE2T);
06684 
06685     //fill offset profs for individual stripends
06686     this->FillProfHisto(pSigCorVsOsPlaneO1,numOsO1,planeSigCorO1,os);
06687     this->FillProfHisto(pSigCorVsOsPlaneO1X,numOsO1X,planeSigCorO1X,os);
06688     this->FillProfHisto(pSigCorVsOsPlaneO1T,numOsO1T,planeSigCorO1T,os);
06689     this->FillProfHisto(pSigCorVsOsPlaneO2,numOsO2,planeSigCorO2,os);
06690     this->FillProfHisto(pSigCorVsOsPlaneO2X,numOsO2X,planeSigCorO2X,os);
06691     this->FillProfHisto(pSigCorVsOsPlaneO2T,numOsO2T,planeSigCorO2T,os);
06692     this->FillProfHisto(pSigCorVsOsPlaneE1,numOsE1,planeSigCorE1,os);
06693     this->FillProfHisto(pSigCorVsOsPlaneE1X,numOsE1X,planeSigCorE1X,os);
06694     this->FillProfHisto(pSigCorVsOsPlaneE1T,numOsE1T,planeSigCorE1T,os);
06695     this->FillProfHisto(pSigCorVsOsPlaneE2,numOsE2,planeSigCorE2,os);
06696     this->FillProfHisto(pSigCorVsOsPlaneE2X,numOsE2X,planeSigCorE2X,os);
06697     this->FillProfHisto(pSigCorVsOsPlaneE2T,numOsE2T,planeSigCorE2T,os);
06698 
06700     //section for total event sigcor and mips
06702     Float_t localSumSigCorTotal=0;
06703     Float_t localSumSigCorTotalCounter=0;
06704     for (map<Int_t,Float_t>::iterator sig=planeSigCorT.begin();
06705          sig!=planeSigCorT.end();++sig){
06706       localSumSigCorTotal+=sig->second;
06707       localSumSigCorTotalCounter++;
06708     }
06709 
06710     //add total of this event to the sum of all events 
06711     if (localSumSigCorTotalCounter!=0){
06712       sumSigCorTotal+=localSumSigCorTotal;
06713       sumSigCorTotalCounter++;
06714     }
06715 
06716     Float_t localSumMipTotal=0;
06717     Float_t localSumMipTotalCounter=0;
06718     for (map<Int_t,Float_t>::iterator sig=planeMipT.begin();
06719          sig!=planeMipT.end();++sig){
06720       localSumMipTotal+=sig->second;
06721       localSumMipTotalCounter++;
06722     }
06723 
06724     //add total of this event to the sum of all events 
06725     if (localSumMipTotalCounter!=0){
06726       sumMipTotal+=localSumMipTotal;
06727       sumMipTotalCounter++;
06728     }
06729 
06731     //section for sliding window
06733     Int_t minEventLength=35;
06734     if (fLastPlane<minEventLength) continue;
06735 
06736     //initialise the profile histos
06737     static Bool_t firstTime=true;
06738     if (firstTime){
06739       for (Int_t p=15;p>1;p--){
06740         vWindowSize.push_back(p);
06741         bigAv.push_back(0);
06742         bigAvCounter.push_back(0);
06743       }
06744 
06745       for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
06746            windowSize!=vWindowSize.end();++windowSize){
06747         
06748         string sName=Form("%d",*windowSize);
06749         pSigCorVsDist.push_back
06750           (new TProfile(("pSigCorVsDist"+sName).c_str(),
06751                         ("pSigCorVsDist"+sName).c_str(),100,-2,40));
06752       }
06753     }
06754     firstTime=false;
06755 
06756     vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
06757     vector<Float_t>::iterator av=bigAv.begin();
06758     vector<Int_t>::iterator count=bigAvCounter.begin();
06759     Float_t localSum15_18=0;
06760     Float_t localSum15_18Counter=0;
06761     Float_t localSum15_18Mip=0;
06762     Float_t localSum15_18MipCounter=0;
06763 
06764     Float_t localSum15_18_O1=0;
06765     Float_t localSum15_18CounterO1=0;
06766     Float_t localSum15_18_O2=0;
06767     Float_t localSum15_18CounterO2=0;
06768     Float_t localSum15_18_E1=0;
06769     Float_t localSum15_18CounterE1=0;
06770     Float_t localSum15_18_E2=0;
06771     Float_t localSum15_18CounterE2=0;
06772     Bool_t oneMoreEvenPlane=false;
06773 
06774     //loop over the different window sizes
06775     for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
06776          windowSize!=vWindowSize.end();++windowSize){
06777       
06778       Float_t localSumO1=0;
06779       Float_t localSumCounterO1=0;
06780       Float_t localSumO2=0;
06781       Float_t localSumCounterO2=0;
06782       Float_t localSumE1=0;
06783       Float_t localSumCounterE1=0;
06784       Float_t localSumE2=0;
06785       Float_t localSumCounterE2=0;
06786 
06787       //slide the window along from the end to 40-windowSize
06788       for (Int_t p=0;p<minEventLength-*windowSize;p++){
06789         Int_t windowStart=fLastPlane-p;
06790 
06791         MSG("CDAnalysis",Msg::kVerbose)
06792           <<"Window size="<<*windowSize
06793           <<", window start="<<windowStart
06794           <<endl;
06795 
06796         //loop through the hits in the window
06797         for (Int_t i=0;i<*windowSize;i++){
06798           Int_t plane=windowStart-i;
06799           
06800           //cut out planes that are greater than the last plane
06801           //in the view - ie the zeros at the end
06802           Bool_t doZeroCorrection=false;
06803           if (doZeroCorrection && 
06804               ((plane%2==0 && plane>fLastPlaneEven) || 
06805                (plane%2!=0 && plane>fLastPlaneOdd))){
06806             MSG("CDAnalysis",Msg::kVerbose)
06807               <<"Not using: Event="<<event
06808               <<", pl="<<plane
06809               <<", sigCor="<<planeSigCorT[plane]
06810               <<", fLastPlane="<<fLastPlane
06811               <<", fLastPlSig="<<planeSigCorT[fLastPlane]
06812               <<", fLastPlOdd="<<fLastPlaneOdd
06813               <<", fLastPlEven="<<fLastPlaneEven
06814               <<endl;
06815           }
06816           else{
06817 
06818             //calculate the best window value
06819             //if fLP=48 then the first plane included is 30
06820             //this is actually the 19th from the end of the track
06821             if (*windowSize==15 && windowStart==fLastPlane-18){
06822               localSum15_18+=planeSigCorT[plane];//total including xtalk
06823               localSum15_18Counter++;
06824               localSum15_18Mip+=planeMipT[plane];//total including xtalk
06825               localSum15_18MipCounter++;
06826 
06827               //a 15 plane window means 7 even and 8 odd or vice versa!
06828               if (windowStart%2==0) oneMoreEvenPlane=true;
06829 
06830               //look at the individual stripends
06831               if (plane%2==0){//even
06832                 localSum15_18_E1+=planeSigCorE1T[plane];
06833                 localSum15_18CounterE1++;
06834                 localSum15_18_E2+=planeSigCorE2T[plane];
06835                 localSum15_18CounterE2++;
06836               }
06837               else if (plane%2==1){//odd
06838                 localSum15_18_O1+=planeSigCorO1T[plane];
06839                 localSum15_18CounterO1++;
06840                 localSum15_18_O2+=planeSigCorO2T[plane];
06841                 localSum15_18CounterO2++;
06842               }
06843             }
06844 
06845 
06846             if (*windowSize==15){
06847               //look at the individual stripends
06848               if (plane%2==0){//even
06849                 localSumE1+=planeSigCorE1T[plane];
06850                 localSumCounterE1++;
06851                 localSumE2+=planeSigCorE2T[plane];
06852                 localSumCounterE2++;
06853               }
06854               else if (plane%2==1){//odd
06855                 localSumO1+=planeSigCorO1T[plane];
06856                 localSumCounterO1++;
06857                 localSumO2+=planeSigCorO2T[plane];
06858                 localSumCounterO2++;
06859               }
06860             }
06861 
06862             (*prof)->Fill(p,planeSigCorT[plane]);
06863             (*av)+=planeSigCorT[plane];
06864             (*count)++;
06865           }
06866         }
06867 
06868         //calculate the near/far differences
06869         if (*windowSize==15){
06870 
06871           //a 15 plane window means 7 even and 8 odd or vice versa!
06872           Bool_t moreEven=false;
06873           if (windowStart%2==0) moreEven=true;
06874           Float_t divEven=1;
06875           Float_t divOdd=1;
06876 
06877           if (moreEven) {divEven=8; divOdd=7;}
06878           else {divEven=7; divOdd=8;}
06879 
06880           MAXMSG("CDAnalysis",Msg::kVerbose,70)
06881             <<"WindowStart="<<windowStart<<", moreEven="<<moreEven
06882             <<", divEven="<<divEven<<", divOdd="<<divOdd
06883             <<endl;
06884     
06885           Float_t largestOdd=localSumO1/divOdd;
06886           Float_t largestEven=localSumE1/divEven;
06887           
06888           if (localSumO2/divOdd>localSumO1/divOdd){
06889             largestOdd=localSumO2/divOdd;
06890           }
06891           if (localSumE2/divEven>localSumE1/divEven){
06892             largestEven=localSumE2/divEven;
06893           }
06894 
06895           //protect fpe
06896           if (largestOdd>0){
06897             Float_t diffNearFarOdd=100*(localSumO1/divOdd-
06898                                         localSumO2/divOdd)/largestOdd;
06899             pNearFarOdd->Fill(p,diffNearFarOdd);
06900           }
06901           if (largestEven>0){
06902             Float_t diffNearFarEven=100*(localSumE1/divEven-
06903                                          localSumE2/divEven
06904                                          )/largestEven;
06905             pNearFarEven->Fill(p,diffNearFarEven);
06906           }      
06907         }
06908       }
06909       av++;
06910       count++;
06911       prof++;
06912     }
06913 
06914     if (localSum15_18Counter!=0){
06915       h15_18All->Fill(localSum15_18);
06916       h15_18->Fill(localSum15_18/15);
06917       sum15_18+=localSum15_18;//add this event's energy on to total
06918       sum15_18Counter++;
06919       sum15_18Mip+=localSum15_18Mip;
06920       sum15_18MipCounter++;
06921     }
06922     else{
06923       MAXMSG("CDAnalysis",Msg::kInfo,40)
06924         <<"Event="<<event<<", strange 15_18="<<localSum15_18
06925         <<", counter="<<localSum15_18Counter<<endl;
06926     }
06927 
06928     Float_t divEven=1;
06929     Float_t divOdd=1;
06930     
06931     if (oneMoreEvenPlane) {divEven=8; divOdd=7;}
06932     else {divEven=7; divOdd=8;}
06933     
06934     h15_18_O1->Fill(localSum15_18_O1/divOdd);
06935     sum15_18_O1+=localSum15_18_O1/divOdd;
06936     sum15_18CounterO1++;
06937     h15_18_O2->Fill(localSum15_18_O2/divOdd);
06938     sum15_18_O2+=localSum15_18_O2/divOdd;
06939     sum15_18CounterO2++;
06940     
06941     h15_18_E1->Fill(localSum15_18_E1/divEven);
06942     sum15_18_E1+=localSum15_18_E1/divEven;
06943     sum15_18CounterE1++;
06944     h15_18_E2->Fill(localSum15_18_E2/divEven);
06945     sum15_18_E2+=localSum15_18_E2/divEven;
06946     sum15_18CounterE2++;
06947 
06948   }//end of for                                       
06949   
06953 
06954   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
06955 
06956   //turn off the stats box printing
06957   gStyle->SetOptStat(0);
06958 
06959   //all stripends
06960   string sTitle="Energy Deposition (SigCor, all Stripends)";
06961   string sXTitle="Distance from end of track (planes)";
06962   this->DrawResponsePlot(sTitle,pSigCorVsPlane,pSigCorVsPlaneX,
06963                          pSigCorVsPlaneT,num,numX,numT);
06964   sTitle="Energy Deposition Vs Distance (SigCor, all Stripends)";
06965   this->DrawResponsePlot(sTitle,pSigCorVsOsPlane,pSigCorVsOsPlaneX,
06966                          pSigCorVsOsPlaneT,numOs,numOsX,numOsT,sXTitle);
06967 
06968   //non-offset planes
06969   sTitle="Energy Deposition (SigCor in Odd Planes FD stripend)";
06970   this->DrawResponsePlot(sTitle,pSigCorVsPlaneO1,pSigCorVsPlaneO1X,
06971                          pSigCorVsPlaneO1T,numO1,numO1X,numO1T);
06972 
06973   sTitle="Energy Deposition (SigCor in Odd Planes ND stripend)";
06974   this->DrawResponsePlot(sTitle,pSigCorVsPlaneO2,pSigCorVsPlaneO2X,
06975                          pSigCorVsPlaneO2T,numO2,numO2X,numO2T);
06976 
06977   sTitle="Energy Deposition (SigCor in Even Planes FD stripend)";
06978   this->DrawResponsePlot(sTitle,pSigCorVsPlaneE1,pSigCorVsPlaneE1X,
06979                          pSigCorVsPlaneE1T,numE1,numE1X,numE1T);
06980 
06981   sTitle="Energy Deposition (SigCor in Even Planes ND stripend)";
06982   this->DrawResponsePlot(sTitle,pSigCorVsPlaneE2,pSigCorVsPlaneE2X,
06983                          pSigCorVsPlaneE2T,numE2,numE2X,numE2T);
06984 
06985   //offset planes
06986   sTitle="Energy Deposition Vs Distance (SigCor in Odd Planes FD stripend)";
06987   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneO1,pSigCorVsOsPlaneO1X,
06988                          pSigCorVsOsPlaneO1T,numOsO1,numOsO1X,numOsO1T,
06989                          sXTitle);
06990 
06991   sTitle="Energy Deposition Vs Distance (SigCor in Odd Planes ND stripend)";
06992   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneO2,pSigCorVsOsPlaneO2X,
06993                          pSigCorVsOsPlaneO2T,numOsO2,numOsO2X,numOsO2T,
06994                          sXTitle);
06995 
06996   sTitle="Energy Deposition Vs Distance (SigCor in Even Planes FD stripend)";
06997   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneE1,pSigCorVsOsPlaneE1X,
06998                          pSigCorVsOsPlaneE1T,numOsE1,numOsE1X,numOsE1T,
06999                          sXTitle);
07000 
07001   sTitle="Energy Deposition Vs Distance (SigCor in Even Planes ND stripend)";
07002   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneE2,pSigCorVsOsPlaneE2X,
07003                          pSigCorVsOsPlaneE2T,numOsE2,numOsE2X,numOsE2T,
07004                          sXTitle);
07005 
07006   //turn on the stats box printing
07007   gStyle->SetOptStat(111111);
07008 
07009   TCanvas *c15_18=new TCanvas("c15_18","15_18",0,0,1200,800);
07010   c15_18->SetFillColor(0);
07011   c15_18->Divide(2,3);
07012   c15_18->cd(1);
07013   h15_18->Draw();
07014   c15_18->cd(2);
07015   h15_18All->Draw();
07016   c15_18->cd(3);
07017   h15_18_O1->Draw();
07018   c15_18->cd(4);
07019   h15_18_O2->Draw();
07020   c15_18->cd(5);
07021   h15_18_E1->Draw();
07022   c15_18->cd(6);
07023   h15_18_E2->Draw();
07024 
07025   TCanvas *cNearFar=new TCanvas("cNearFar","NearFar",0,0,1200,800);
07026   cNearFar->SetFillColor(0);
07027   cNearFar->Divide(2,3);
07028   cNearFar->cd(1);
07029   pNearFarOdd->Draw();
07030   cNearFar->cd(2);
07031   pNearFarEven->Draw();
07032 
07033   if (sum15_18Counter!=0){
07034     MSG("CDAnalysis",Msg::kInfo) 
07035       <<endl
07036       <<" ** Calibration Summary **"<<endl
07037       <<"SigCor in sliding window 15_18:"<<endl
07038       <<"    SigCor dep="<<sum15_18<<" (N="<<sum15_18Counter<<")"<<endl
07039       <<"    Av SigCor dep="<<sum15_18/sum15_18Counter
07040       <<" +/- "<<100*(h15_18->GetRMS()/sqrt(h15_18->GetEntries()))/
07041       h15_18->GetMean()<<"%"<<endl
07042       <<"    Av SigCor dep per plane="<<(sum15_18/sum15_18Counter)/15
07043       <<" +/- "<<100*(h15_18->GetRMS()/sqrt(h15_18->GetEntries()))/
07044       h15_18->GetMean()<<"%"<<endl
07045       <<"MIPs in sliding window 15_18:"<<endl
07046       <<"    MIPs dep="<<sum15_18Mip
07047       <<" (N="<<sum15_18MipCounter<<")"<<endl
07048       <<"    Av MIPs dep="<<sum15_18Mip/sum15_18MipCounter
07049       <<endl;
07050     if (sumSigCorTotalCounter!=0){
07051       MSG("CDAnalysis",Msg::kInfo) 
07052         <<"SigCor of whole event:"<<endl
07053         <<"    Sum of SigCor dep="<<sumSigCorTotal
07054         <<" (N="<<sumSigCorTotalCounter<<")"<<endl
07055         <<"    Av sigCor dep="
07056         <<sumSigCorTotal/sumSigCorTotalCounter<<endl
07057         <<"    1 sigCor="
07058         <<1800/(sumSigCorTotal/sumSigCorTotalCounter)<<" MeV"
07059         <<endl;
07060     }
07061     if (sumMipTotalCounter!=0){
07062       MSG("CDAnalysis",Msg::kInfo) 
07063         <<"MIPs of whole event:"<<endl
07064         <<"    Sum of MIPs dep="<<sumMipTotal
07065         <<" (N="<<sumMipTotalCounter<<")"<<endl
07066         <<"    Av MIPs dep="
07067         <<sumMipTotal/sumMipTotalCounter<<endl
07068         <<"    1 MIP="
07069         <<1800/(sumMipTotal/sumMipTotalCounter)<<" MeV"<<endl
07070         <<"    1 GeV="
07071         <<(sumMipTotal/sumMipTotalCounter)/1.8<<" MIPs"
07072         <<endl<<endl;
07073     }
07074   }
07075 
07076   if (sum15_18CounterO1!=0 && sum15_18CounterE1!=0){
07077     MSG("CDAnalysis",Msg::kInfo) 
07078       <<endl
07079       <<"SigCor in sliding window 15_18 in stripend 1:"<<endl
07080       <<" Odd planes:"<<endl
07081       <<"    SigCor dep="<<sum15_18_O1
07082       <<" (N="<<sum15_18CounterO1<<")"<<endl
07083       <<"    Av SigCor dep="<<sum15_18_O1/sum15_18CounterO1
07084       <<" +/- "<<h15_18_O1->GetRMS()/sqrt(h15_18_O1->GetEntries())
07085       <<" ("<<100*((h15_18_O1->GetRMS()/
07086                    sqrt(h15_18_O1->GetEntries()))/
07087                    h15_18_O1->GetMean())<<"%)"
07088       <<endl
07089       <<" Even planes:"<<endl
07090       <<"    SigCor dep="<<sum15_18_E1
07091       <<" (N="<<sum15_18CounterE1<<")"<<endl
07092       <<"    Av SigCor dep="<<sum15_18_E1/sum15_18CounterE1
07093       <<" +/- "<<h15_18_E1->GetRMS()/sqrt(h15_18_E1->GetEntries())
07094       <<" ("<<100*((h15_18_E1->GetRMS()/
07095                    sqrt(h15_18_E1->GetEntries()))/
07096                    h15_18_E1->GetMean())<<"%)"<<endl
07097       <<endl;
07098   }
07099   if (sum15_18CounterO2!=0 && sum15_18CounterE2!=0){
07100     MSG("CDAnalysis",Msg::kInfo) 
07101       <<endl
07102       <<"SigCor in sliding window 15_18 in stripend 2:"<<endl
07103       <<" Odd planes:"<<endl
07104       <<"    SigCor dep="<<sum15_18_O2
07105       <<" (N="<<sum15_18CounterO2<<")"<<endl
07106       <<"    Av SigCor dep="<<sum15_18_O2/sum15_18CounterO2
07107       <<" +/- "<<h15_18_O2->GetRMS()/sqrt(h15_18_O2->GetEntries())
07108       <<" ("<<100*((h15_18_O2->GetRMS()/
07109                    sqrt(h15_18_O2->GetEntries()))/
07110                    h15_18_O2->GetMean())<<"%)"
07111       <<endl
07112       <<" Even planes:"<<endl
07113       <<"    SigCor dep="<<sum15_18_E2
07114       <<" (N="<<sum15_18CounterE2<<")"<<endl
07115       <<"    Av SigCor dep="<<sum15_18_E2/sum15_18CounterE2
07116       <<" +/- "<<h15_18_E2->GetRMS()/sqrt(h15_18_E2->GetEntries())
07117       <<" ("<<100*((h15_18_E2->GetRMS()/
07118                    sqrt(h15_18_E2->GetEntries()))/
07119                    h15_18_E2->GetMean())<<"%)"<<endl
07120       <<endl;
07121   }
07122 
07123   //calculate the differences between near/far
07124   if (sum15_18CounterO2!=0 && sum15_18CounterE2!=0 &&
07125       sum15_18CounterO1!=0 && sum15_18CounterE1!=0){
07126 
07127     Float_t largestOdd=sum15_18_O1/sum15_18CounterO1;
07128     Float_t largestEven=sum15_18_E1/sum15_18CounterE1;
07129     Float_t diffOdd=sum15_18_O1/sum15_18CounterO1-
07130       sum15_18_O2/sum15_18CounterO2;
07131     Float_t diffEven=sum15_18_E1/sum15_18CounterE1-
07132       sum15_18_E2/sum15_18CounterE2;
07133 
07134     if (sum15_18_O2/sum15_18CounterO2>sum15_18_O1/sum15_18CounterO1) {
07135       largestOdd=sum15_18_O2/sum15_18CounterO2;
07136     }
07137     if (sum15_18_E2/sum15_18CounterE2>sum15_18_E1/sum15_18CounterE1) {
07138       largestEven=sum15_18_E2/sum15_18CounterE2;
07139     }
07140     
07141     MSG("CDAnalysis",Msg::kInfo) 
07142       <<endl
07143       <<"Difference between stripend 1 and 2 (1-2/largest):"<<endl
07144       <<" Odd planes:"<<endl
07145       <<"    Difference="<<diffOdd<<" ("<<100*diffOdd/largestOdd<<"%)"
07146       <<endl
07147       <<" Even planes:"<<endl
07148       <<"    Difference="<<diffEven<<" ("
07149       <<100*diffEven/largestEven<<"%)"
07150       <<endl;
07151   }
07152 
07153   MSG("CDAnalysis",Msg::kInfo) 
07154     <<" ** Finished MuonNearFar method **"<<endl;
07155 
07156 }

void CDAnalysis::MuonResponse  ) 
 

Definition at line 4746 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), CalcLastPlaneOnTrkNoXTalk(), count, CutOnBadPedestals(), CutOnDeadChips(), CutOnEventLength(), CutOnPid(), CutOnTrackQuality(), DrawResponsePlot(), fChargeAdc, fChargePe, fChargeSigCor, fFirstPlane, FillProfHisto(), fKovADC3, fLastPlane, fLastPlaneEven, fLastPlaneOdd, Form(), fOutFile, fPlane, fRatioScEnToBeamEn, fRunNumber, fScEnDepPerMEU, fSigCorPerMEU, fStrip, fStripend, fTrkHitInfo, fTruthHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), IsDoubleEnded(), IsGenuineOrXTalk(), IsPlaneGenuine(), IsPlaneSideHit(), IsPlaneXTalkOnly(), IsSharedPmtHit(), MAXMSG, MSG, OpenFile(), Pct(), ReadInHitInfo(), SetLoopVariables(), and StandardSanityChecks().

04747 {
04748   MSG("CDAnalysis",Msg::kInfo) 
04749     <<" ** Running MuonResponse method... **"<<endl;
04750 
04751   //open the output file for the histograms
04752   fOutFile=this->OpenFile(fRunNumber,"MuonRes");
04753 
04754   TH2F *hPeVsRange=new TH2F("hPeVsRange","PeVsRange",
04755                             20,40,60,50,0,10);
04756   hPeVsRange->GetXaxis()->SetTitle("Last Plane");
04757   hPeVsRange->GetXaxis()->CenterTitle();
04758   hPeVsRange->GetYaxis()->SetTitle("Greatest PE Value");
04759   hPeVsRange->GetYaxis()->CenterTitle();
04760   hPeVsRange->SetFillColor(0);
04761   //hPeVsRange->SetBit(TH1::kCanRebin);
04762 
04763   TH2F *hPeVsRangeGen=new TH2F("hPeVsRangeGen","PeVsRangeGen",
04764                             20,40,60,50,0,10);
04765   hPeVsRangeGen->GetXaxis()->SetTitle("Last Plane");
04766   hPeVsRangeGen->GetXaxis()->CenterTitle();
04767   hPeVsRangeGen->GetYaxis()->SetTitle("Greatest PE Value");
04768   hPeVsRangeGen->GetYaxis()->CenterTitle();
04769   hPeVsRangeGen->SetFillColor(0);
04770   //hPeVsRangeGen->SetBit(TH1::kCanRebin);
04771 
04772   TH2F *hPeVsRangeGen2=new TH2F("hPeVsRangeGen2","PeVsRangeGen2",
04773                             20,40,60,50,0,10);
04774   hPeVsRangeGen2->GetXaxis()->SetTitle("Last Plane");
04775   hPeVsRangeGen2->GetXaxis()->CenterTitle();
04776   hPeVsRangeGen2->GetYaxis()->SetTitle("Greatest PE Value");
04777   hPeVsRangeGen2->GetYaxis()->CenterTitle();
04778   hPeVsRangeGen2->SetFillColor(0);
04779   //hPeVsRangeGen2->SetBit(TH1::kCanRebin);
04780 
04781   TH2F *hPeVsRangeGen3=new TH2F("hPeVsRangeGen3","PeVsRangeGen3",
04782                             20,40,60,50,0,10);
04783   hPeVsRangeGen3->GetXaxis()->SetTitle("Last Plane");
04784   hPeVsRangeGen3->GetXaxis()->CenterTitle();
04785   hPeVsRangeGen3->GetYaxis()->SetTitle("Greatest PE Value");
04786   hPeVsRangeGen3->GetYaxis()->CenterTitle();
04787   hPeVsRangeGen3->SetFillColor(0);
04788   //hPeVsRangeGen3->SetBit(TH1::kCanRebin);
04789 
04790   TH2F *hPeVsRangeXTalk=new TH2F("hPeVsRangeXTalk","PeVsRangeXTalk",
04791                             20,40,60,50,0,10);
04792   hPeVsRangeXTalk->GetXaxis()->SetTitle("Last Plane");
04793   hPeVsRangeXTalk->GetXaxis()->CenterTitle();
04794   hPeVsRangeXTalk->GetYaxis()->SetTitle("Greatest PE Value");
04795   hPeVsRangeXTalk->GetYaxis()->CenterTitle();
04796   hPeVsRangeXTalk->SetFillColor(0);
04797   //hPeVsRangeXTalk->SetBit(TH1::kCanRebin);
04798 
04799   TH2F *hPeVsRangeXTalk2=new TH2F("hPeVsRangeXTalk2","PeVsRangeXTalk2",
04800                             20,40,60,50,0,10);
04801   hPeVsRangeXTalk2->GetXaxis()->SetTitle("Last Plane");
04802   hPeVsRangeXTalk2->GetXaxis()->CenterTitle();
04803   hPeVsRangeXTalk2->GetYaxis()->SetTitle("Greatest PE Value");
04804   hPeVsRangeXTalk2->GetYaxis()->CenterTitle();
04805   hPeVsRangeXTalk2->SetFillColor(0);
04806   //hPeVsRangeXTalk2->SetBit(TH1::kCanRebin);
04807 
04808   TH2F *hPeVsRangeXTalk3=new TH2F("hPeVsRangeXTalk3","PeVsRangeXTalk3",
04809                             20,40,60,50,0,10);
04810   hPeVsRangeXTalk3->GetXaxis()->SetTitle("Last Plane");
04811   hPeVsRangeXTalk3->GetXaxis()->CenterTitle();
04812   hPeVsRangeXTalk3->GetYaxis()->SetTitle("Greatest PE Value");
04813   hPeVsRangeXTalk3->GetYaxis()->CenterTitle();
04814   hPeVsRangeXTalk3->SetFillColor(0);
04815   //hPeVsRangeXTalk3->SetBit(TH1::kCanRebin);
04816 
04817   TH1F *hNumPlanes=new TH1F("hNumPlanes","NumPlanes hit",77,-2,75);
04818   hNumPlanes->GetXaxis()->SetTitle("Number of Planes Hit");
04819   hNumPlanes->GetXaxis()->CenterTitle();
04820   hNumPlanes->GetYaxis()->SetTitle("");
04821   hNumPlanes->GetYaxis()->CenterTitle();
04822   hNumPlanes->SetFillColor(0);
04823   hNumPlanes->SetBit(TH1::kCanRebin);
04824 
04825   TH1F *h15_18All=new TH1F("h15_18All","h15_18All",1000,-2,75);
04826   h15_18All->GetXaxis()->SetTitle("SigCors");
04827   h15_18All->GetXaxis()->CenterTitle();
04828   h15_18All->GetYaxis()->SetTitle("");
04829   h15_18All->GetYaxis()->CenterTitle();
04830   h15_18All->SetFillColor(0);
04831   h15_18All->SetBit(TH1::kCanRebin);
04832 
04833   TH1F *h15_18=new TH1F("h15_18","h15_18",1000,-2,75);
04834   h15_18->GetXaxis()->SetTitle("SigCors");
04835   h15_18->GetXaxis()->CenterTitle();
04836   h15_18->GetYaxis()->SetTitle("");
04837   h15_18->GetYaxis()->CenterTitle();
04838   h15_18->SetFillColor(0);
04839   h15_18->SetBit(TH1::kCanRebin);
04840 
04841   TH1F *hSigCorTotal=new TH1F("hSigCorTotal","hSigCorTotal",1000,-2,75);
04842   hSigCorTotal->GetXaxis()->SetTitle("SigCors");
04843   hSigCorTotal->GetXaxis()->CenterTitle();
04844   hSigCorTotal->GetYaxis()->SetTitle("");
04845   hSigCorTotal->GetYaxis()->CenterTitle();
04846   hSigCorTotal->SetFillColor(0);
04847   hSigCorTotal->SetBit(TH1::kCanRebin);
04848 
04849   TH1F *hSigCorTotalTight=new TH1F("hSigCorTotalTight",
04850                                    "hSigCorTotalTight",1000,-2,75);
04851   hSigCorTotalTight->GetXaxis()->SetTitle("SigCors");
04852   hSigCorTotalTight->GetXaxis()->CenterTitle();
04853   hSigCorTotalTight->GetYaxis()->SetTitle("");
04854   hSigCorTotalTight->GetYaxis()->CenterTitle();
04855   hSigCorTotalTight->SetFillColor(0);
04856   hSigCorTotalTight->SetBit(TH1::kCanRebin);
04857 
04858   TH1F *hSigCorTotalPeak=new TH1F("hSigCorTotalPeak",
04859                                   "hSigCorTotalPeak",1000,-2,75);
04860   hSigCorTotalPeak->GetXaxis()->SetTitle("SigCors");
04861   hSigCorTotalPeak->GetXaxis()->CenterTitle();
04862   hSigCorTotalPeak->GetYaxis()->SetTitle("");
04863   hSigCorTotalPeak->GetYaxis()->CenterTitle();
04864   hSigCorTotalPeak->SetFillColor(0);
04865   hSigCorTotalPeak->SetBit(TH1::kCanRebin);
04866 
04867   TH1F *hNumPlanesAll=new TH1F("hNumPlanesAll","NumPlanesAll hit",
04868                                77,-2,75);
04869   hNumPlanesAll->GetXaxis()->SetTitle("Number of Planes Hit");
04870   hNumPlanesAll->GetXaxis()->CenterTitle();
04871   hNumPlanesAll->GetYaxis()->SetTitle("");
04872   hNumPlanesAll->GetYaxis()->CenterTitle();
04873   hNumPlanesAll->SetFillColor(0);
04874   hNumPlanesAll->SetBit(TH1::kCanRebin);
04875 
04876   TH1F *hNumPlanesMu=new TH1F("hNumPlanesMu","hNumPlanesMu hit",
04877                               77,-2,75);
04878   hNumPlanesMu->GetXaxis()->SetTitle("Number of Planes Hit");
04879   hNumPlanesMu->GetXaxis()->CenterTitle();
04880   hNumPlanesMu->GetYaxis()->SetTitle("");
04881   hNumPlanesMu->GetYaxis()->CenterTitle();
04882   hNumPlanesMu->SetFillColor(0);
04883   hNumPlanesMu->SetLineColor(2);
04884   hNumPlanesMu->SetBit(TH1::kCanRebin);
04885   
04886   TH1F *hFirstPlane=new TH1F("hFirstPlane","FirstPlane hit",77,-2,75);
04887   hFirstPlane->GetXaxis()->SetTitle("First Plane Hit");
04888   hFirstPlane->GetXaxis()->CenterTitle();
04889   hFirstPlane->GetYaxis()->SetTitle("");
04890   hFirstPlane->GetYaxis()->CenterTitle();
04891   hFirstPlane->SetFillColor(0);
04892   hFirstPlane->SetBit(TH1::kCanRebin);
04893 
04894   TH1F *hEventLength=new TH1F("hEventLength","EventLength hit",
04895                               77,-2,75);
04896   hEventLength->GetXaxis()->SetTitle("Event Length (planes)");
04897   hEventLength->GetXaxis()->CenterTitle();
04898   hEventLength->GetYaxis()->SetTitle("");
04899   hEventLength->GetYaxis()->CenterTitle();
04900   hEventLength->SetFillColor(0);
04901   hEventLength->SetBit(TH1::kCanRebin);
04902 
04903   TH1F *hEventLength2=new TH1F("hEventLength2","EventLength",77,-2,75);
04904   hEventLength2->GetXaxis()->SetTitle("Event Length (planes)");
04905   hEventLength2->GetXaxis()->CenterTitle();
04906   hEventLength2->GetYaxis()->SetTitle("");
04907   hEventLength2->GetYaxis()->CenterTitle();
04908   hEventLength2->SetFillColor(0);
04909   hEventLength2->SetBit(TH1::kCanRebin);
04910 
04911   TH1F *hEventLength3=new TH1F("hEventLength3","EventLength",77,-2,75);
04912   hEventLength3->GetXaxis()->SetTitle("Event Length (planes)");
04913   hEventLength3->GetXaxis()->CenterTitle();
04914   hEventLength3->GetYaxis()->SetTitle("");
04915   hEventLength3->GetYaxis()->CenterTitle();
04916   hEventLength3->SetFillColor(0);
04917   hEventLength3->SetBit(TH1::kCanRebin);
04918 
04919   TH2F *hCkvAdcVsRange=new TH2F("hCkvAdcVsRange","CkvAdcVsRange",
04920                                 20,40,60,100,-1,1500);
04921   hCkvAdcVsRange->GetXaxis()->SetTitle("Last Plane");
04922   hCkvAdcVsRange->GetXaxis()->CenterTitle();
04923   hCkvAdcVsRange->GetYaxis()->SetTitle("Ckv ADC");
04924   hCkvAdcVsRange->GetYaxis()->CenterTitle();
04925   hCkvAdcVsRange->SetFillColor(0);
04926   hCkvAdcVsRange->SetBit(TH1::kCanRebin);
04927 
04928   //sum of all strip ends, normal and offset planes
04929   //tracked
04930   TProfile* pSigCorVsPlane=new TProfile("pSigCorVsPlane",
04931                                         "pSigCorVsPlane",
04932                                         62,0,62);
04933   TProfile* pSigCorVsOsPlane=new TProfile("pSigCorVsOsPlane",
04934                                           "pSigCorVsOsPlane",
04935                                           62,0,62);
04936 
04937   //xtalk + untracked hits
04938   TProfile* pSigCorVsPlaneX=new TProfile("pSigCorVsPlaneX",
04939                                          "pSigCorVsPlaneX",
04940                                          62,0,62);
04941   TProfile* pSigCorVsOsPlaneX=new TProfile("pSigCorVsOsPlaneX",
04942                                            "pSigCorVsOsPlaneX",
04943                                            62,0,62);
04944 
04945   //total
04946   TProfile* pSigCorVsPlaneT=new TProfile("pSigCorVsPlaneT",
04947                                          "pSigCorVsPlaneT",
04948                                          62,0,62);
04949   TProfile* pSigCorVsOsPlaneT=new TProfile("pSigCorVsOsPlaneT",
04950                                            "pSigCorVsOsPlaneT",
04951                                            62,0,62);
04952 
04953   //individual strip ends
04954   //tracked
04955   TProfile* pSigCorVsPlaneO1=new TProfile("pSigCorVsPlaneO1",
04956                                           "pSigCorVsPlaneO1",
04957                                           62,0,62);
04958   TProfile* pSigCorVsPlaneO2=new TProfile("pSigCorVsPlaneO2",
04959                                           "pSigCorVsPlaneO2",
04960                                           62,0,62);
04961   TProfile* pSigCorVsPlaneE1=new TProfile("pSigCorVsPlaneE1",
04962                                           "pSigCorVsPlaneE1",
04963                                           62,0,62);
04964   TProfile* pSigCorVsPlaneE2=new TProfile("pSigCorVsPlaneE2",
04965                                           "pSigCorVsPlaneE2",
04966                                           62,0,62);
04967   //xtalk + untracked hits
04968   TProfile* pSigCorVsPlaneO1X=new TProfile("pSigCorVsPlaneO1X",
04969                                           "pSigCorVsPlaneO1X",
04970                                           62,0,62);
04971   TProfile* pSigCorVsPlaneO2X=new TProfile("pSigCorVsPlaneO2X",
04972                                           "pSigCorVsPlaneO2X",
04973                                           62,0,62);
04974   TProfile* pSigCorVsPlaneE1X=new TProfile("pSigCorVsPlaneE1X",
04975                                           "pSigCorVsPlaneE1X",
04976                                           62,0,62);
04977   TProfile* pSigCorVsPlaneE2X=new TProfile("pSigCorVsPlaneE2X",
04978                                           "pSigCorVsPlaneE2X",
04979                                           62,0,62);
04980   //total
04981   TProfile* pSigCorVsPlaneO1T=new TProfile("pSigCorVsPlaneO1T",
04982                                           "pSigCorVsPlaneO1T",
04983                                           62,0,62);
04984   TProfile* pSigCorVsPlaneO2T=new TProfile("pSigCorVsPlaneO2T",
04985                                           "pSigCorVsPlaneO2T",
04986                                           62,0,62);
04987   TProfile* pSigCorVsPlaneE1T=new TProfile("pSigCorVsPlaneE1T",
04988                                           "pSigCorVsPlaneE1T",
04989                                           62,0,62);
04990   TProfile* pSigCorVsPlaneE2T=new TProfile("pSigCorVsPlaneE2T",
04991                                           "pSigCorVsPlaneE2T",
04992                                           62,0,62);
04993 
04994   //individual strip ends - offset planes
04995   //tracked
04996   TProfile* pSigCorVsOsPlaneO1=new TProfile("pSigCorVsOsPlaneO1",
04997                                             "pSigCorVsOsPlaneO1",
04998                                             62,0,62);
04999   TProfile* pSigCorVsOsPlaneO2=new TProfile("pSigCorVsOsPlaneO2",
05000                                             "pSigCorVsOsPlaneO2",
05001                                             62,0,62);
05002   TProfile* pSigCorVsOsPlaneE1=new TProfile("pSigCorVsOsPlaneE1",
05003                                             "pSigCorVsOsPlaneE1",
05004                                             62,0,62);
05005   TProfile* pSigCorVsOsPlaneE2=new TProfile("pSigCorVsOsPlaneE2",
05006                                             "pSigCorVsOsPlaneE2",
05007                                             62,0,62);
05008 
05009   //xtalk + untracked hits
05010   TProfile* pSigCorVsOsPlaneO1X=new TProfile("pSigCorVsOsPlaneO1X",
05011                                              "pSigCorVsOsPlaneO1X",
05012                                              62,0,62);
05013   TProfile* pSigCorVsOsPlaneO2X=new TProfile("pSigCorVsOsPlaneO2X",
05014                                             "pSigCorVsOsPlaneO2X",
05015                                             62,0,62);
05016   TProfile* pSigCorVsOsPlaneE1X=new TProfile("pSigCorVsOsPlaneE1X",
05017                                             "pSigCorVsOsPlaneE1X",
05018                                             62,0,62);
05019   TProfile* pSigCorVsOsPlaneE2X=new TProfile("pSigCorVsOsPlaneE2X",
05020                                             "pSigCorVsOsPlaneE2X",
05021                                             62,0,62);
05022   //total
05023   TProfile* pSigCorVsOsPlaneO1T=new TProfile("pSigCorVsOsPlaneO1T",
05024                                             "pSigCorVsOsPlaneO1T",
05025                                             62,0,62);
05026   TProfile* pSigCorVsOsPlaneO2T=new TProfile("pSigCorVsOsPlaneO2T",
05027                                             "pSigCorVsOsPlaneO2T",
05028                                             62,0,62);
05029   TProfile* pSigCorVsOsPlaneE1T=new TProfile("pSigCorVsOsPlaneE1T",
05030                                             "pSigCorVsOsPlaneE1T",
05031                                             62,0,62);
05032   TProfile* pSigCorVsOsPlaneE2T=new TProfile("pSigCorVsOsPlaneE2T",
05033                                             "pSigCorVsOsPlaneE2T",
05034                                             62,0,62);
05035 
05036   TProfile* pEnVsRange=new TProfile("pEnVsRange","pEnVsRange",
05037                                     62,0,62);
05038 
05039   vector<TProfile*> pSigCorVsDist;
05040   vector<TProfile*> pSigCorVsDistN;
05041   vector<Int_t> vWindowSize;
05042   vector<Float_t> bigAv;
05043   vector<Int_t> bigAvCounter;
05044   Float_t sum15_18=0;
05045   Float_t sum15_18Counter=0;
05046   Float_t sum15_18Mip=0;
05047   Float_t sum15_18MipCounter=0;
05048   Float_t sumSigCorTotal=0;
05049   Float_t sumSigCorTotalCounter=0;
05050   Float_t sumMipTotal=0;
05051   Float_t sumMipTotalCounter=0;
05052 
05053   Int_t lastPlaneOddCounter=0;
05054   Int_t lastPlaneEvenCounter=0;
05055   Int_t lastPlaneO1Counter=0;
05056   Int_t lastPlaneO2Counter=0;
05057   Int_t lastPlaneE1Counter=0;
05058   Int_t lastPlaneE2Counter=0;
05059   Int_t lastPlaneOBothCounter=0;
05060   Int_t lastPlaneEBothCounter=0;
05061 
05062   Int_t totalCounter=0;
05063   Int_t firstPlaneInPairCounter=0;
05064   Int_t sharedPmtCounter=0;
05065   Int_t sharedPmtXTalkCounter=0;
05066   Int_t side1Counter=0;
05067   Int_t side1XTalkCounter=0;
05068   Int_t side2Counter=0;
05069   Int_t side2XTalkCounter=0;
05070   Int_t doubleCounter=0;
05071   Int_t doubleXTalkCounter=0;
05072   Int_t notGenuineOrXTalkCounter=0;
05073 
05074   //num maps for all stripends
05075   map<Int_t,Float_t> num;
05076   map<Int_t,Float_t> numX;
05077   map<Int_t,Float_t> numT;
05078   map<Int_t,Float_t> numOs;
05079   map<Int_t,Float_t> numOsX;
05080   map<Int_t,Float_t> numOsT;
05081 
05082   //non-offset num maps for individual stripends
05083   map<Int_t,Float_t> numO1;
05084   map<Int_t,Float_t> numO1X;
05085   map<Int_t,Float_t> numO1T;
05086   map<Int_t,Float_t> numO2;
05087   map<Int_t,Float_t> numO2X;
05088   map<Int_t,Float_t> numO2T;
05089   map<Int_t,Float_t> numE1;
05090   map<Int_t,Float_t> numE1X;
05091   map<Int_t,Float_t> numE1T;
05092   map<Int_t,Float_t> numE2;
05093   map<Int_t,Float_t> numE2X;
05094   map<Int_t,Float_t> numE2T;
05095 
05096   //offset num maps for individual stripends
05097   map<Int_t,Float_t> numOsO1;
05098   map<Int_t,Float_t> numOsO1X;
05099   map<Int_t,Float_t> numOsO1T;
05100   map<Int_t,Float_t> numOsO2;
05101   map<Int_t,Float_t> numOsO2X;
05102   map<Int_t,Float_t> numOsO2T;
05103   map<Int_t,Float_t> numOsE1;
05104   map<Int_t,Float_t> numOsE1X;
05105   map<Int_t,Float_t> numOsE1T;
05106   map<Int_t,Float_t> numOsE2;
05107   map<Int_t,Float_t> numOsE2X;
05108   map<Int_t,Float_t> numOsE2T;
05109 
05110   Int_t noTrackCounter=0;
05111   Int_t passPidCounter=0;
05112  
05116   
05117   this->InitialiseLoopVariables();  
05118   
05119   for(Int_t event=0;event<fEvents;event++){
05120     
05121     this->SetLoopVariables(event);
05122 
05123     if (this->CutOnDeadChips()) continue;
05124     if (this->CutOnPid()) continue;
05125     //cut on not straight tracks
05126     //Double_t mainX1Cut=0.5;
05127     //if (!this->IsStraightTrack(mainX1Cut)){
05128     //continue;
05129     //}
05130 
05131     //count the number of events passing the pid
05132     passPidCounter++;
05133 
05134     map<Int_t,Int_t> numPlanesHit;
05135     map<Int_t,Int_t> numPlanesHit1;
05136     map<Int_t,Int_t> numPlanesHit2;
05137     map<Int_t,Int_t> numPlanesHitAll;
05138     map<Int_t,Float_t> planeSigCor;
05139     map<Int_t,Float_t> planeSigCorX;
05140     map<Int_t,Float_t> planeSigCorT;
05141     map<Int_t,Float_t> planeSigCorO1;    
05142     map<Int_t,Float_t> planeSigCorO1X;
05143     map<Int_t,Float_t> planeSigCorO1T;
05144     map<Int_t,Float_t> planeSigCorO2;
05145     map<Int_t,Float_t> planeSigCorO2X;
05146     map<Int_t,Float_t> planeSigCorO2T;
05147     map<Int_t,Float_t> planeSigCorE1;
05148     map<Int_t,Float_t> planeSigCorE1X;
05149     map<Int_t,Float_t> planeSigCorE1T;
05150     map<Int_t,Float_t> planeSigCorE2;
05151     map<Int_t,Float_t> planeSigCorE2X;
05152     map<Int_t,Float_t> planeSigCorE2T;
05153 
05154     map<Int_t,Float_t> planeMip;
05155     map<Int_t,Float_t> planeMipX;
05156     map<Int_t,Float_t> planeMipT;
05157 
05158     map<Int_t,Float_t> planePe;
05159     map<Int_t,Float_t> planeGreatestPe;
05160 
05161     Double_t sigCorTotal=0;
05162 
05163     //get tclones arrays for this snarl
05164     TClonesArray &cTrk=*fTrkHitInfo;
05165     Int_t numTrkHits=fTrkHitInfo->GetEntries();
05166     TClonesArray &cUnTrk = *fUnTrkHitInfo;
05167     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
05168     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
05169     TClonesArray &cXTalk = *fXTalkHits;
05170     Int_t numXTalkHits=fXTalkHits->GetEntries();
05171     //TClonesArray &cTruth = *fTruthHitInfo;
05172     Int_t numTruthHits=0;
05173     if (fTruthHitInfo) numTruthHits=fTruthHitInfo->GetEntries();
05174 
05175     //look for untracked big events
05176     if (numTrkHits<2 && numXTalkHits+numUnTrkHits>1){
05177       MSG("CDAnalysis",Msg::kDebug)
05178         <<"Event="<<event
05179         <<", Num hits: trk="<<numTrkHits<<", unTrk="<<numUnTrkHits
05180         <<", xtalk="<<numXTalkHits<<", truth="<<numTruthHits
05181         <<endl;
05182       noTrackCounter++;
05183       //continue;
05184     }
05185 
05187     //loop over the untracked hits in the snarl
05189     for (Int_t hit=0;hit<numUnTrkHits;hit++){
05190       //cast the tclonesarray up to a trackedhitinfo object
05191       CDTrackedHitInfo *hitInfo=
05192         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
05193 
05194       this->ReadInHitInfo(hitInfo);
05195 
05196       if (fPlane==0 && fChargeSigCor>1000){
05197         MSG("CDAnalysis",Msg::kDebug)
05198           <<"XTalk Event="<<event
05199           <<", fPlane="<<fPlane
05200           <<", fStrip="<<fStrip
05201           <<", fStripend="<<fStripend
05202           <<", fChargeAdc="<<fChargeAdc
05203           <<", fSigCor="<<fChargeSigCor<<endl;
05204       }
05205 
05206       //cut out the bad channels
05207       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
05208 
05209       //count the number of planes hit
05210       numPlanesHitAll[fPlane]++;
05211 
05212       //check the channel's sanity
05213       this->StandardSanityChecks();
05214 
05215       //add up the charge of the hits in each plane
05216       planeSigCorX[fPlane]+=fChargeSigCor;
05217       planeSigCorT[fPlane]+=fChargeSigCor;
05218       planeMipX[fPlane]+=fChargeMip;
05219       planeMipT[fPlane]+=fChargeMip;
05220       if (fO1) planeSigCorO1X[fPlane]+=fChargeSigCor;
05221       if (fO2) planeSigCorO2X[fPlane]+=fChargeSigCor;
05222       if (fE1) planeSigCorE1X[fPlane]+=fChargeSigCor;
05223       if (fE2) planeSigCorE2X[fPlane]+=fChargeSigCor;
05224       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
05225       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
05226       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
05227       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
05228 
05229       if (fChargePe>planeGreatestPe[fPlane]) planeGreatestPe[fPlane]=
05230                                                fChargePe;
05231 
05232       if (fPlane==0) continue;
05233       //sum the sigcor in the event
05234       //make up for no plane 0 with 2 times plane 1
05235       else if (fPlane==1) sigCorTotal+=2*fChargeSigCor;
05236       else sigCorTotal+=fChargeSigCor;
05237     }
05238 
05240     //loop over xtalk hits in the snarl
05242     for (Int_t hit=0;hit<numXTalkHits;hit++){
05243       CDXTalkHitInfo *hitInfo=
05244         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
05245 
05246       this->ReadInHitInfo(hitInfo);
05247       
05248       //cut out the bad channels
05249       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
05250 
05251       //count the number of planes hit
05252       numPlanesHitAll[fPlane]++;
05253 
05254       //check the channel's sanity
05255       this->StandardSanityChecks();
05256 
05257       //add up the charge of the hits in each plane
05258       planeSigCorX[fPlane]+=fChargeSigCor;
05259       planeSigCorT[fPlane]+=fChargeSigCor;
05260       planeMipX[fPlane]+=fChargeMip;
05261       planeMipT[fPlane]+=fChargeMip;
05262       if (fO1) planeSigCorO1X[fPlane]+=fChargeSigCor;
05263       if (fO2) planeSigCorO2X[fPlane]+=fChargeSigCor;
05264       if (fE1) planeSigCorE1X[fPlane]+=fChargeSigCor;
05265       if (fE2) planeSigCorE2X[fPlane]+=fChargeSigCor;
05266       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
05267       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
05268       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
05269       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
05270 
05271       if (fChargePe>planeGreatestPe[fPlane]) planeGreatestPe[fPlane]=
05272                                                fChargePe;
05273 
05274       if (fPlane==0) continue;
05275       //sum the sigcor in the event
05276       //make up for no plane 0 with 2 times plane 1
05277       else if (fPlane==1) sigCorTotal+=2*fChargeSigCor;
05278       else sigCorTotal+=fChargeSigCor;
05279     }
05280 
05281     Bool_t lastPlaneO1Hit=false;
05282     Bool_t lastPlaneO2Hit=false;
05283     Bool_t lastPlaneE1Hit=false;
05284     Bool_t lastPlaneE2Hit=false;
05285     Int_t previousfLastPlane=-1;
05286 
05288     //loop over the tracked hits
05290     for (Int_t hit=0;hit<numTrkHits;hit++){
05291       CDTrackedHitInfo *trackedHitInfo=
05292         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
05293           
05294       this->ReadInHitInfo(trackedHitInfo);
05295 
05296       //cut out the bad channels
05297       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
05298 
05299       //check the channel's sanity
05300       this->StandardSanityChecks();
05301 
05302       //calculate the first and last planes
05303       this->CalcFirstLastPlane(fPlane);
05304 
05305       //count the number of planes hit
05306       numPlanesHit[fPlane]++;
05307       numPlanesHitAll[fPlane]++;
05308 
05309       if (fLastPlane==fPlane && fPlane%2==0){
05310 
05311         //check if a new last plane has been found
05312         if (fLastPlane!=previousfLastPlane){
05313           lastPlaneE1Hit=false;
05314           lastPlaneE2Hit=false;
05315         }
05316         previousfLastPlane=fLastPlane;
05317 
05318         //check which stripend to set to true
05319         if (fStripend==1) lastPlaneE1Hit=true;
05320         if (fStripend==2) lastPlaneE2Hit=true;
05321 
05322         //set the hits in the other plane to be false
05323         lastPlaneO1Hit=false;
05324         lastPlaneO2Hit=false;
05325         MSG("CDAnalysis",Msg::kVerbose)
05326           <<"ev="<<event
05327           <<", last="<<fLastPlane
05328           <<", pl="<<fPlane
05329           <<", se="<<fStripend
05330           <<", E1="<<lastPlaneE1Hit
05331           <<", E2="<<lastPlaneE2Hit
05332           <<", O1="<<lastPlaneO1Hit
05333           <<", O2="<<lastPlaneO2Hit<<endl;
05334       }
05335       else if (fLastPlane==fPlane && fPlane%2==1){
05336 
05337         //check if a new last plane has been found
05338         if (fLastPlane!=previousfLastPlane){
05339           lastPlaneO1Hit=false;
05340           lastPlaneO2Hit=false;
05341         }
05342         previousfLastPlane=fLastPlane;
05343 
05344         //check which stripend to set to true
05345         if (fStripend==1) lastPlaneO1Hit=true;
05346         if (fStripend==2) lastPlaneO2Hit=true;
05347 
05348         //set the hits in the other plane to be false
05349         lastPlaneE1Hit=false;
05350         lastPlaneE2Hit=false;
05351 
05352         MSG("CDAnalysis",Msg::kVerbose)
05353           <<"ev="<<event
05354           <<", last="<<fLastPlane
05355           <<", pl="<<fPlane
05356           <<", se="<<fStripend
05357           <<", E1="<<lastPlaneE1Hit
05358           <<", E2="<<lastPlaneE2Hit
05359           <<", O1="<<lastPlaneO1Hit
05360           <<", O2="<<lastPlaneO2Hit<<endl;
05361       }
05362 
05363       //add up the charge of the hits in each plane
05364       planeSigCor[fPlane]+=fChargeSigCor;
05365       planeSigCorT[fPlane]+=fChargeSigCor;
05366       planeMip[fPlane]+=fChargeMip;
05367       planeMipT[fPlane]+=fChargeMip;
05368       if (fChargePe>planeGreatestPe[fPlane]) planeGreatestPe[fPlane]=
05369                                                fChargePe;
05370       planePe[fPlane]+=fChargePe;
05371       if (fO1) planeSigCorO1[fPlane]+=fChargeSigCor;
05372       if (fO2) planeSigCorO2[fPlane]+=fChargeSigCor;
05373       if (fE1) planeSigCorE1[fPlane]+=fChargeSigCor;
05374       if (fE2) planeSigCorE2[fPlane]+=fChargeSigCor;
05375       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
05376       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
05377       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
05378       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
05379 
05380       if (fPlane==0) continue;
05381       //sum the sigcor in the event
05382       //make up for no plane 0 with 2 times plane 1
05383       else if (fPlane==1) sigCorTotal+=2*fChargeSigCor;
05384       else sigCorTotal+=fChargeSigCor;
05385     }
05387     //end of loop over the tracked hits
05389 
05390     //fill histos for all data
05391     hNumPlanes->Fill(numPlanesHit.size());
05392     hNumPlanesAll->Fill(numPlanesHitAll.size());
05393     hEventLength->Fill(fLastPlane+1);
05394 
05395     //make sure that the first plane makes sense and was actually set
05396     if (fFirstPlane<0 || fFirstPlane>59) continue;
05397 
05398     //calculate the event energy
05399     Double_t eventEn=(fScEnDepPerMEU/fSigCorPerMEU)*sigCorTotal*
05400       (1/fRatioScEnToBeamEn);
05401     //calc the last plane on the track with no xtalk
05402     Int_t lastPlaneNoXTalk=this->CalcLastPlaneOnTrkNoXTalk();
05403 
05404     //fill the prof
05405     pEnVsRange->Fill(lastPlaneNoXTalk+1,eventEn);
05406 
05407     if (fLastPlane%2==1) lastPlaneOddCounter++;
05408     if (fLastPlane%2==0) lastPlaneEvenCounter++;
05409 
05410     //work out which stripends in the last plane were hit
05411     if (lastPlaneE1Hit || lastPlaneE2Hit){
05412       if (lastPlaneE1Hit && !lastPlaneE2Hit) lastPlaneE1Counter++;
05413       else if (!lastPlaneE1Hit && lastPlaneE2Hit) lastPlaneE2Counter++;
05414       else lastPlaneEBothCounter++;
05415     }
05416     else if (lastPlaneO1Hit || lastPlaneO2Hit){
05417       if (lastPlaneO1Hit && !lastPlaneO2Hit) lastPlaneO1Counter++;
05418       else if (!lastPlaneO1Hit && lastPlaneO2Hit) lastPlaneO2Counter++;
05419       else lastPlaneOBothCounter++;
05420     }
05421     else{
05422       MSG("CDAnalysis",Msg::kInfo)
05423         <<"Nothing hit!"<<endl;
05424 
05425       MSG("CDAnalysis",Msg::kInfo)
05426         <<"ev="<<event
05427         <<", Num hits: trk="<<numTrkHits<<", unTrk="<<numUnTrkHits
05428         <<", xtalk="<<numXTalkHits
05429         <<", E1="<<lastPlaneE1Hit
05430         <<", E2="<<lastPlaneE2Hit
05431         <<", O1="<<lastPlaneO1Hit
05432         <<", O2="<<lastPlaneO2Hit<<endl;
05433     }
05434 
05435     MSG("CDAnalysis",Msg::kVerbose)<<"New event="<<event<<endl;
05436 
05437     totalCounter++;
05438     //look for the second of a pair of shared pmts
05439     if ((fLastPlane==26 || fLastPlane==27 ||
05440          fLastPlane==30 || fLastPlane==31 ||
05441          fLastPlane==34 || fLastPlane==35 ||
05442          fLastPlane==38 || fLastPlane==39 ||
05443          fLastPlane==42 || fLastPlane==43 ||
05444          fLastPlane==46 || fLastPlane==47 ||
05445          fLastPlane==50 || fLastPlane==51 ||
05446          fLastPlane==54 || fLastPlane==55 ||
05447          fLastPlane==58 || fLastPlane==59)){
05448       //fLastPlaneOdd
05449       //fLastPlaneEven
05450       
05451       if (this->IsDoubleEnded(fLastPlane)){
05452         doubleCounter++;
05453         if (this->IsPlaneXTalkOnly(fLastPlane)){
05454           doubleXTalkCounter++;
05455         }
05456       }
05457       else if (this->IsPlaneSideHit(fLastPlane,StripEnd::kEast)){
05458         side1Counter++;
05459 
05460         if (this->IsPlaneXTalkOnly(fLastPlane)){
05461           side1XTalkCounter++;
05462         }
05463 
05464         if (this->IsSharedPmtHit(fLastPlane)){
05465           sharedPmtCounter++;
05466           if (this->IsPlaneXTalkOnly(fLastPlane)){
05467             sharedPmtXTalkCounter++;
05468           }
05469         }
05470       }
05471       else if (this->IsPlaneSideHit(fLastPlane,StripEnd::kWest)){
05472         side2Counter++;
05473          
05474         if (this->IsPlaneXTalkOnly(fLastPlane)){
05475           side2XTalkCounter++;
05476         }
05477  
05478         if (this->IsSharedPmtHit(fLastPlane)){
05479           sharedPmtCounter++;
05480           if (this->IsPlaneXTalkOnly(fLastPlane)){
05481             sharedPmtXTalkCounter++;
05482           }
05483           MSG("CDAnalysis",Msg::kWarning)
05484             <<"This should not happen at CalDet!"<<endl;
05485         }
05486       }
05487       
05488       MSG("CDAnalysis",Msg::kVerbose)
05489         <<"Shared="<<sharedPmtCounter
05490         <<" ("<<sharedPmtXTalkCounter<<")"
05491         <<", 2end="<<doubleCounter
05492         <<" ("<<doubleXTalkCounter<<")"
05493         <<", end1="<<side1Counter
05494         <<" ("<<side1XTalkCounter<<")"
05495         <<", end2="<<side2Counter
05496         <<" ("<<side2XTalkCounter<<")"
05497         <<endl;
05498     }
05499     else{
05500       firstPlaneInPairCounter++;
05501     }
05502 
05503     if (!this->IsGenuineOrXTalk(fLastPlane)){
05504       notGenuineOrXTalkCounter++;
05505     }
05506 
05507     //make event length cuts
05508     if (this->CutOnEventLength()) continue;
05509     //make track quality cuts
05510     if (this->CutOnTrackQuality()) continue;
05511 
05512     MAXMSG("CDAnalysis",Msg::kInfo,10)
05513       <<"Event passing plane cuts="<<event<<endl;
05514 
05515     //fill the total sigcor histo
05516     hSigCorTotal->Fill(sigCorTotal);
05517 
05518     //fill event length plots for those passing cuts
05519     hFirstPlane->Fill(fFirstPlane);
05520     hEventLength2->Fill(fLastPlane+1);
05521     hEventLength3->Fill(lastPlaneNoXTalk+1);
05522 
05523     //look at a certain part of the spectrum
05524     if (lastPlaneNoXTalk+1>50 && lastPlaneNoXTalk+1<53){
05525       //fill the total sigcor histo
05526       hSigCorTotalTight->Fill(sigCorTotal);
05527     }
05528     
05529     if (lastPlaneNoXTalk+1==51){
05530       //fill the total sigcor histo
05531       hSigCorTotalPeak->Fill(sigCorTotal);
05532     }
05533 
05534     //look at pe versus range
05535     hPeVsRange->Fill(fLastPlane+1,planeGreatestPe[fLastPlane]);
05536     if (this->IsPlaneGenuine(fLastPlane)){
05537       hPeVsRangeGen->Fill(fLastPlane+1,planeGreatestPe[fLastPlane]);
05538     }
05539     else{
05540       hPeVsRangeXTalk->Fill(fLastPlane+1,planeGreatestPe[fLastPlane]);
05541 
05542       //now look at second from last plane
05543       if (this->IsPlaneGenuine(fLastPlane-1)){
05544         hPeVsRangeGen2->Fill(fLastPlane+1-1,
05545                                planeGreatestPe[fLastPlane-1]);
05546       }
05547       else{
05548         hPeVsRangeXTalk2->Fill(fLastPlane+1-1,
05549                                planeGreatestPe[fLastPlane-1]);
05550 
05551         //now look at third from last plane
05552         if (this->IsPlaneGenuine(fLastPlane-2)){
05553           hPeVsRangeGen3->Fill(fLastPlane+1-2,
05554                                planeGreatestPe[fLastPlane-2]);
05555         }
05556         else{
05557           hPeVsRangeXTalk3->Fill(fLastPlane+1-2,
05558                                  planeGreatestPe[fLastPlane-2]);
05559         }
05560       }
05561     }
05562 
05563     hCkvAdcVsRange->Fill(fLastPlane+1,fKovADC3);
05564 
05566     //section for response
05568 
05569     //const Int_t reNormPlane=70;
05570     //Int_t planeOffset=reNormPlane-fLastPlane;
05571     const Int_t os=fLastPlane;
05572 
05573     //do nasty hack for plane 40 - very nasty!!!!
05574     //if (fRunNumber==70709 || fRunNumber==70705){
05575     //planeSigCor[40]=planeSigCor[38];
05576       //don't do xtalk since if pl 38 has zero xtalk then you will make
05577       //the map bigger and will average a zero!!!!
05578       //planeSigCorX[40]=planeSigCorX[38];
05579       //planeSigCorT[40]=planeSigCorT[38];
05580     //}
05581     //do nasty hack for plane 35 - very nasty!!!!
05582     if (fRunNumber>40000 && fRunNumber<60000){
05583       planeSigCor[35]=planeSigCor[37];
05584       planeSigCorT[35]=planeSigCorT[37];
05585     }
05586     //do nasty hack for plane 35 - very nasty!!!!
05587     else if (fRunNumber>100000 && fRunNumber<110000){
05588       //map<Int_t,Float_t> tmp=planeSigCor;
05589       //map<Int_t,Float_t> tmpT=planeSigCor;
05590       //if (tmp[15]!=0){
05591         //planeSigCor[13]=planeSigCor[15];
05592       //}
05593 
05594       //if (tmpT[15]!=0){
05595         //planeSigCorT[13]=planeSigCorT[15];
05596       //}
05597     }
05598 
05599     //fill profs for all stripends
05600     this->FillProfHisto(pSigCorVsPlane,num,planeSigCor);
05601     this->FillProfHisto(pSigCorVsPlaneX,numX,planeSigCorX);
05602     this->FillProfHisto(pSigCorVsPlaneT,numT,planeSigCorT);
05603     //offset
05604     this->FillProfHisto(pSigCorVsOsPlane,numOs,planeSigCor,os);
05605     this->FillProfHisto(pSigCorVsOsPlaneX,numOsX,planeSigCorX,os);
05606     this->FillProfHisto(pSigCorVsOsPlaneT,numOsT,planeSigCorT,os);
05607 
05608     //fill non-offset profs for individual stripends
05609     this->FillProfHisto(pSigCorVsPlaneO1,numO1,planeSigCorO1);
05610     this->FillProfHisto(pSigCorVsPlaneO1X,numO1X,planeSigCorO1X);
05611     this->FillProfHisto(pSigCorVsPlaneO1T,numO1T,planeSigCorO1T);
05612     this->FillProfHisto(pSigCorVsPlaneO2,numO2,planeSigCorO2);
05613     this->FillProfHisto(pSigCorVsPlaneO2X,numO2X,planeSigCorO2X);
05614     this->FillProfHisto(pSigCorVsPlaneO2T,numO2T,planeSigCorO2T);
05615     this->FillProfHisto(pSigCorVsPlaneE1,numE1,planeSigCorE1);
05616     this->FillProfHisto(pSigCorVsPlaneE1X,numE1X,planeSigCorE1X);
05617     this->FillProfHisto(pSigCorVsPlaneE1T,numE1T,planeSigCorE1T);
05618     this->FillProfHisto(pSigCorVsPlaneE2,numE2,planeSigCorE2);
05619     this->FillProfHisto(pSigCorVsPlaneE2X,numE2X,planeSigCorE2X);
05620     this->FillProfHisto(pSigCorVsPlaneE2T,numE2T,planeSigCorE2T);
05621 
05622     //fill offset profs for individual stripends
05623     this->FillProfHisto(pSigCorVsOsPlaneO1,numOsO1,planeSigCorO1,os);
05624     this->FillProfHisto(pSigCorVsOsPlaneO1X,numOsO1X,planeSigCorO1X,os);
05625     this->FillProfHisto(pSigCorVsOsPlaneO1T,numOsO1T,planeSigCorO1T,os);
05626     this->FillProfHisto(pSigCorVsOsPlaneO2,numOsO2,planeSigCorO2,os);
05627     this->FillProfHisto(pSigCorVsOsPlaneO2X,numOsO2X,planeSigCorO2X,os);
05628     this->FillProfHisto(pSigCorVsOsPlaneO2T,numOsO2T,planeSigCorO2T,os);
05629     this->FillProfHisto(pSigCorVsOsPlaneE1,numOsE1,planeSigCorE1,os);
05630     this->FillProfHisto(pSigCorVsOsPlaneE1X,numOsE1X,planeSigCorE1X,os);
05631     this->FillProfHisto(pSigCorVsOsPlaneE1T,numOsE1T,planeSigCorE1T,os);
05632     this->FillProfHisto(pSigCorVsOsPlaneE2,numOsE2,planeSigCorE2,os);
05633     this->FillProfHisto(pSigCorVsOsPlaneE2X,numOsE2X,planeSigCorE2X,os);
05634     this->FillProfHisto(pSigCorVsOsPlaneE2T,numOsE2T,planeSigCorE2T,os);
05635 
05637     //section for total event sigcor and mips
05639     Float_t localSumSigCorTotal=0;
05640     Float_t localSumSigCorTotalCounter=0;
05641     for (map<Int_t,Float_t>::iterator sig=planeSigCorT.begin();
05642          sig!=planeSigCorT.end();++sig){
05643       localSumSigCorTotal+=sig->second;
05644       localSumSigCorTotalCounter++;
05645     }
05646 
05647     //add total of this event to the sum of all events 
05648     if (localSumSigCorTotalCounter!=0){
05649       sumSigCorTotal+=localSumSigCorTotal;
05650       sumSigCorTotalCounter++;
05651     }
05652 
05653     Float_t localSumMipTotal=0;
05654     Float_t localSumMipTotalCounter=0;
05655     for (map<Int_t,Float_t>::iterator sig=planeMipT.begin();
05656          sig!=planeMipT.end();++sig){
05657       localSumMipTotal+=sig->second;
05658       localSumMipTotalCounter++;
05659     }
05660 
05661     //add total of this event to the sum of all events 
05662     if (localSumMipTotalCounter!=0){
05663       sumMipTotal+=localSumMipTotal;
05664       sumMipTotalCounter++;
05665     }
05666 
05668     //section for sliding window
05670     Int_t minEventLength=35;
05671     if (fLastPlane<minEventLength) continue;
05672 
05673     //initialise the profile histos
05674     static Bool_t firstTime=true;
05675     if (firstTime){
05676       for (Int_t p=15;p>1;p--){
05677         vWindowSize.push_back(p);
05678         bigAv.push_back(0);
05679         bigAvCounter.push_back(0);
05680       }
05681 
05682       for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
05683            windowSize!=vWindowSize.end();++windowSize){
05684         
05685         string sName=Form("%d",*windowSize);
05686         pSigCorVsDist.push_back
05687           (new TProfile(("pSigCorVsDist"+sName).c_str(),
05688                         ("pSigCorVsDist"+sName).c_str(),100,-2,40));
05689       }
05690     }
05691     firstTime=false;
05692 
05693     vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
05694     vector<Float_t>::iterator av=bigAv.begin();
05695     vector<Int_t>::iterator count=bigAvCounter.begin();
05696     Float_t localSum15_18=0;
05697     Float_t localSum15_18Counter=0;
05698     Float_t localSum15_18Mip=0;
05699     Float_t localSum15_18MipCounter=0;
05700 
05701     //loop over the different window sizes
05702     for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
05703          windowSize!=vWindowSize.end();++windowSize){
05704       
05705       //slide the window along from the end to 40-windowSize
05706       for (Int_t p=0;p<minEventLength-*windowSize;p++){
05707         Int_t windowStart=fLastPlane-p;
05708 
05709         MSG("CDAnalysis",Msg::kVerbose)
05710           <<"Window size="<<*windowSize
05711           <<", window start="<<windowStart
05712           <<endl;
05713 
05714         //loop through the hits in the window
05715         for (Int_t i=0;i<*windowSize;i++){
05716           Int_t plane=windowStart-i;
05717           
05718           //cut out planes that are greater than the last plane
05719           //in the view - ie the zeros at the end
05720           Bool_t doZeroCorrection=false;
05721           if (doZeroCorrection && 
05722               ((plane%2==0 && plane>fLastPlaneEven) || 
05723                (plane%2!=0 && plane>fLastPlaneOdd))){
05724             MSG("CDAnalysis",Msg::kVerbose)
05725               <<"Not using: Event="<<event
05726               <<", pl="<<plane
05727               <<", sigCor="<<planeSigCorT[plane]
05728               <<", fLastPlane="<<fLastPlane
05729               <<", fLastPlSig="<<planeSigCorT[fLastPlane]
05730               <<", fLastPlOdd="<<fLastPlaneOdd
05731               <<", fLastPlEven="<<fLastPlaneEven
05732               <<endl;
05733           }
05734           else{
05735 
05736             //calculate the best window value
05737             //if fLP=48 then the first plane included is 30
05738             //this is actually the 19th from the end of the track
05739             if (*windowSize==15 && windowStart==fLastPlane-18){
05740               localSum15_18+=planeSigCorT[plane];//total including xtalk
05741               localSum15_18Counter++;
05742               localSum15_18Mip+=planeMipT[plane];//total including xtalk
05743               localSum15_18MipCounter++;
05744 
05745               if (plane%2==0){//even
05746                 
05747               }
05748               else if (plane%2==1){//odd
05749 
05750               }
05751 
05752             }
05753 
05754             (*prof)->Fill(p,planeSigCorT[plane]);
05755             (*av)+=planeSigCorT[plane];
05756             (*count)++;
05757           }
05758         }
05759       }
05760       av++;
05761       count++;
05762       prof++;
05763     }
05764 
05765     if (localSum15_18Counter!=0){
05766       h15_18All->Fill(localSum15_18);
05767       h15_18->Fill(localSum15_18/15);
05768       sum15_18+=localSum15_18;//add this event's energy on to total
05769       sum15_18Counter++;
05770       sum15_18Mip+=localSum15_18Mip;
05771       sum15_18MipCounter++;
05772     }
05773 
05774     if (localSum15_18Counter==0 || localSum15_18<200){
05775       MAXMSG("CDAnalysis",Msg::kInfo,40)
05776         <<"Event="<<event<<", strange 15_18="<<localSum15_18
05777         <<", counter="<<localSum15_18Counter<<endl;
05778     }
05779 
05780   }//end of for                                       
05781   
05785 
05786   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
05787 
05788   //turn off the stats box printing
05789   gStyle->SetOptStat(0);
05790 
05791   //all stripends
05792   string sTitle="Energy Deposition (SigCor, all Stripends)";
05793   string sXTitle="Distance from end of track (planes)";
05794   this->DrawResponsePlot(sTitle,pSigCorVsPlane,pSigCorVsPlaneX,
05795                          pSigCorVsPlaneT,num,numX,numT);
05796   sTitle="Energy Deposition Vs Distance (SigCor, all Stripends)";
05797   this->DrawResponsePlot(sTitle,pSigCorVsOsPlane,pSigCorVsOsPlaneX,
05798                          pSigCorVsOsPlaneT,numOs,numOsX,numOsT,sXTitle);
05799 
05800   //non-offset planes
05801   sTitle="Energy Deposition (SigCor in Odd Planes FD stripend)";
05802   this->DrawResponsePlot(sTitle,pSigCorVsPlaneO1,pSigCorVsPlaneO1X,
05803                          pSigCorVsPlaneO1T,numO1,numO1X,numO1T);
05804 
05805   sTitle="Energy Deposition (SigCor in Odd Planes ND stripend)";
05806   this->DrawResponsePlot(sTitle,pSigCorVsPlaneO2,pSigCorVsPlaneO2X,
05807                          pSigCorVsPlaneO2T,numO2,numO2X,numO2T);
05808 
05809   sTitle="Energy Deposition (SigCor in Even Planes FD stripend)";
05810   this->DrawResponsePlot(sTitle,pSigCorVsPlaneE1,pSigCorVsPlaneE1X,
05811                          pSigCorVsPlaneE1T,numE1,numE1X,numE1T);
05812 
05813   sTitle="Energy Deposition (SigCor in Even Planes ND stripend)";
05814   this->DrawResponsePlot(sTitle,pSigCorVsPlaneE2,pSigCorVsPlaneE2X,
05815                          pSigCorVsPlaneE2T,numE2,numE2X,numE2T);
05816 
05817   //offset planes
05818   sTitle="Energy Deposition Vs Distance (SigCor in Odd Planes FD stripend)";
05819   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneO1,pSigCorVsOsPlaneO1X,
05820                          pSigCorVsOsPlaneO1T,numOsO1,numOsO1X,numOsO1T,
05821                          sXTitle);
05822 
05823   sTitle="Energy Deposition Vs Distance (SigCor in Odd Planes ND stripend)";
05824   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneO2,pSigCorVsOsPlaneO2X,
05825                          pSigCorVsOsPlaneO2T,numOsO2,numOsO2X,numOsO2T,
05826                          sXTitle);
05827 
05828   sTitle="Energy Deposition Vs Distance (SigCor in Even Planes FD stripend)";
05829   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneE1,pSigCorVsOsPlaneE1X,
05830                          pSigCorVsOsPlaneE1T,numOsE1,numOsE1X,numOsE1T,
05831                          sXTitle);
05832 
05833   sTitle="Energy Deposition Vs Distance (SigCor in Even Planes ND stripend)";
05834   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneE2,pSigCorVsOsPlaneE2X,
05835                          pSigCorVsOsPlaneE2T,numOsE2,numOsE2X,numOsE2T,
05836                          sXTitle);
05837 
05838 
05839   //turn on the stats box printing
05840   gStyle->SetOptStat(11);
05841 
05842   TCanvas *cProf=new TCanvas("cProf","Prof",0,0,1200,800);
05843   cProf->SetFillColor(0);
05844   string sName="SlidingWindow.ps";
05845   cProf->Print((sName+"[").c_str());
05846   gErrorIgnoreLevel=1;
05847   //plot the unnormalised prof first
05848   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
05849        prof!=pSigCorVsDist.end();++prof){      
05850     cProf->Clear();
05851     (*prof)->Draw();
05852     (*prof)->SetTitle("Average SigCor in Sliding Window");
05853     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
05854     (*prof)->GetYaxis()->SetTitle("Average SigCor");
05855     (*prof)->GetXaxis()->CenterTitle();
05856     (*prof)->GetYaxis()->CenterTitle();
05857     cProf->Print(sName.c_str());
05858   }
05859 
05860   //now normalise the prof
05861   vector<Float_t>::iterator av=bigAv.begin();
05862   vector<Int_t>::iterator count=bigAvCounter.begin();
05863   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
05864        prof!=pSigCorVsDist.end();++prof){
05865       
05866     //normalise the prof and scale the axes
05867     MSG("CDAnalysis",Msg::kDebug)
05868       <<"bigCounter="<<*count<<", bigAv="<<*av<<endl;
05869 
05870     //pSigCorVsDistN.push_back
05871     //(new TProfile(("pSigCorVsDistN"+sName).c_str(),
05872     //      ("pSigCorVsDistN"+sName).c_str(),100,-2,40));
05873     if (*av>0) (*prof)->Scale((*count)/(*av));
05874     (*prof)->SetMaximum(1.2);
05875     (*prof)->SetMinimum(0.8);
05876       
05877     cProf->Clear();
05878     (*prof)->Draw();
05879     (*prof)->SetTitle("Average SigCor in Sliding Window");
05880     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
05881     (*prof)->GetYaxis()->SetTitle("Average SigCor");
05882     (*prof)->GetXaxis()->CenterTitle();
05883     (*prof)->GetYaxis()->CenterTitle();
05884     cProf->Print(sName.c_str());
05885     av++;
05886     count++;
05887   }
05888   //close the file
05889   gErrorIgnoreLevel=0;
05890   cProf->Print((sName+"]").c_str());
05891 
05892   //now do a few profs on the same plot
05893   TCanvas *cProf2=new TCanvas("cProf2","Prof",0,0,1200,800);
05894   cProf2->SetFillColor(0);
05895   sName="SlidingWindowAll.ps";
05896   //cProf2->Print((sName+"[").c_str());
05897   Int_t counter=0;
05898   for (vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
05899        prof!=pSigCorVsDist.end();++prof){
05900 
05901     (*prof)->SetMaximum(1.09);
05902     (*prof)->SetMinimum(0.96);
05903 
05904     //count which prof got to
05905     counter++;
05906 
05907     //decide which profs to draw
05908     static Bool_t firstTime=true;
05909     if (counter==1 || counter==6 || counter==11){ 
05910       if (firstTime) {
05911         (*prof)->Draw();
05912         firstTime=false;
05913       }
05914       else  (*prof)->Draw("sames");
05915 
05916       (*prof)->SetTitle("Average SigCor in Sliding Window");
05917       (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
05918       (*prof)->GetYaxis()->SetTitle("Average SigCor");
05919       (*prof)->GetXaxis()->CenterTitle();
05920       (*prof)->GetYaxis()->CenterTitle();
05921       static Int_t color=2;
05922       (*prof)->SetLineColor(color);
05923       color+=2;
05924     }
05925   }
05926 
05927   //turn off the stats box printing
05928   //gStyle->SetOptStat(0);
05929   gStyle->SetOptStat(1111111);
05930 
05931   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
05932   cGeom->SetFillColor(0);
05933   cGeom->Divide(2,3);
05934   cGeom->cd(1);
05935   hEventLength2->Draw();
05936   cGeom->cd(2);
05937   hEventLength3->Draw();
05938   cGeom->cd(3);
05939   hFirstPlane->Draw();
05940   cGeom->cd(4);
05941   hEventLength->Draw();
05942   cGeom->cd(5);
05943   hNumPlanes->Draw();
05944   cGeom->cd(6);
05945   hNumPlanesAll->Draw();
05946   hNumPlanesMu->Draw("same");
05947  
05948   /*
05949   TCanvas *cCkv=new TCanvas("cCkv","Ckv",0,0,1200,800);
05950   cCkv->SetFillColor(0);
05951   cCkv->Divide(2,2);
05952   cCkv->cd(1);
05953   hCkvAdcVsRange->Draw("colz");
05954   hCkvAdcVsRange->Draw("profsame");
05955   cCkv->cd(2);
05956   TProfile* p=hCkvAdcVsRange->ProfileX();
05957   p->Draw();
05958   cCkv->cd(3);
05959   hCkvAdcVsRange->Draw("colz");
05960   p->Draw("sames");
05961   */
05962 
05963   TCanvas *c15_18=new TCanvas("c15_18","15_18",0,0,1200,800);
05964   c15_18->SetFillColor(0);
05965   c15_18->Divide(2,3);
05966   c15_18->cd(1);
05967   h15_18->Draw();
05968   c15_18->cd(2);
05969   h15_18All->Draw();
05970   c15_18->cd(3);
05971   hSigCorTotal->Draw();
05972   c15_18->cd(4);
05973   hSigCorTotalTight->Draw();
05974   c15_18->cd(5);
05975   hSigCorTotalPeak->Draw();
05976   c15_18->cd(6);
05977   pEnVsRange->Draw();
05978 
05979   MSG("CDAnalysis",Msg::kInfo) 
05980     <<endl
05981     <<"Mean sigCorTotal="<<hSigCorTotal->GetMean()<<endl
05982     <<"Ratio ScEn to BeamEn="<<fRatioScEnToBeamEn
05983     <<" ("<<1/fRatioScEnToBeamEn<<")"<<endl
05984     <<"GeV per SigCor="<<fScEnDepPerMEU/fSigCorPerMEU<<endl
05985     <<"Beam energy from Calorimetry (lose)="
05986     <<((fScEnDepPerMEU/fSigCorPerMEU)*
05987     hSigCorTotal->GetMean()*(1/fRatioScEnToBeamEn))/
05988     Munits::gigaelectronvolt<<" "<<Munits::base_energy_name<<endl
05989     <<"Beam energy from Calorimetry (tight)="
05990     <<((fScEnDepPerMEU/fSigCorPerMEU)*
05991     hSigCorTotalTight->GetMean()*(1/fRatioScEnToBeamEn))/
05992     Munits::gigaelectronvolt<<" "<<Munits::base_energy_name<<endl
05993     <<"Beam energy from Calorimetry (peak)="
05994     <<((fScEnDepPerMEU/fSigCorPerMEU)*
05995     hSigCorTotalPeak->GetMean()*(1/fRatioScEnToBeamEn))/
05996     Munits::gigaelectronvolt<<" "<<Munits::base_energy_name<<endl<<endl;
05997 
05998   /*
05999   TCanvas *cXtalk=new TCanvas("cXtalk","Xtalk",0,0,1200,800);
06000   cXtalk->SetFillColor(0);
06001   cXtalk->Divide(3,3);
06002   cXtalk->cd(1);
06003   hPeVsRange->Draw("colz");
06004   cXtalk->cd(2);
06005   hPeVsRangeGen->Draw("colz");
06006   cXtalk->cd(3);
06007   hPeVsRangeXTalk->Draw("colz");
06008 
06009   cXtalk->cd(5);
06010   hPeVsRangeGen2->Draw("colz");
06011   cXtalk->cd(6);
06012   hPeVsRangeXTalk2->Draw("colz");
06013   cXtalk->cd(8);
06014   hPeVsRangeGen3->Draw("colz");
06015   cXtalk->cd(9);
06016   hPeVsRangeXTalk3->Draw("colz");
06017   */
06018 
06019   Int_t oddEvenSum=lastPlaneEvenCounter+lastPlaneOddCounter;
06020   Float_t oddPercent=-1;
06021   Float_t evenPercent=-1;
06022   if (oddEvenSum) oddPercent=100.*lastPlaneOddCounter/oddEvenSum;
06023   if (oddEvenSum) evenPercent=100.*lastPlaneEvenCounter/oddEvenSum;
06024 
06025   MSG("CDAnalysis",Msg::kInfo) 
06026     <<"Last plane, odd="<<lastPlaneOddCounter<<" ("<<oddPercent<<"%)"
06027     <<", even="<<lastPlaneEvenCounter<<" ("<<evenPercent<<"%)"<<endl;
06028 
06029   Int_t totalSum=lastPlaneE1Counter+lastPlaneE2Counter+
06030     lastPlaneO1Counter+lastPlaneO2Counter+
06031     lastPlaneEBothCounter+lastPlaneOBothCounter;
06032   Float_t e1Percent=-1;
06033   Float_t e2Percent=-1;
06034   Float_t o1Percent=-1;
06035   Float_t o2Percent=-1;
06036   Float_t eBothPercent=-1;
06037   Float_t oBothPercent=-1;
06038   if (totalSum) o1Percent=100.*lastPlaneO1Counter/totalSum;
06039   if (totalSum) o2Percent=100.*lastPlaneO2Counter/totalSum;
06040   if (totalSum) e1Percent=100.*lastPlaneE1Counter/totalSum;
06041   if (totalSum) e2Percent=100.*lastPlaneE2Counter/totalSum;
06042   if (totalSum) eBothPercent=100.*lastPlaneEBothCounter/totalSum;
06043   if (totalSum) oBothPercent=100.*lastPlaneOBothCounter/totalSum;
06044 
06045   Float_t totalPercent=o1Percent+o2Percent+e1Percent+e2Percent+
06046     oBothPercent+eBothPercent;
06047 
06048   MSG("CDAnalysis",Msg::kInfo) 
06049     <<"Last Plane:"<<endl
06050     <<"  Total number hits="<<totalSum<<endl
06051     <<"  Hits on both sides of plane:"<<endl
06052     <<"    Odd="<<lastPlaneOBothCounter<<" ("<<oBothPercent<<"%)"<<endl
06053     <<"    Even="<<lastPlaneEBothCounter<<" ("<<eBothPercent<<"%)"<<endl
06054     <<"  Hits on only one side of plane:"<<endl
06055     <<"    Odd-ND="<<lastPlaneO2Counter<<" ("<<o2Percent<<"%)"<<endl
06056     <<"    Odd-FD="<<lastPlaneO1Counter<<" ("<<o1Percent<<"%)"<<endl
06057     <<"    Even-ND="<<lastPlaneE2Counter<<" ("<<e2Percent<<"%)"<<endl
06058     <<"    Even-FD="<<lastPlaneE1Counter<<" ("<<e1Percent<<"%)"<<endl
06059     <<"  Sum of 6 percentages="<<totalPercent<<endl;
06060 
06061   Float_t sharedXTalkPercent=-1;
06062   Float_t side1XTalkPercent=-1;
06063   Float_t side2XTalkPercent=-1;
06064   Float_t doubleXTalkPercent=-1;
06065   Float_t notGenuineOrXTalkPercent=-1;
06066   if (sharedPmtCounter) sharedXTalkPercent=100.*sharedPmtXTalkCounter/
06067                           sharedPmtCounter;
06068   if (side1Counter) side1XTalkPercent=100.*side1XTalkCounter/
06069                       side1Counter;
06070   if (side2Counter) side2XTalkPercent=100.*side2XTalkCounter/
06071                       side2Counter;
06072   if (doubleCounter) doubleXTalkPercent=100.*doubleXTalkCounter/
06073                       doubleCounter;
06074   if (totalCounter) notGenuineOrXTalkPercent=100.*
06075                       notGenuineOrXTalkCounter/totalCounter;
06076 
06077   MSG("CDAnalysis",Msg::kInfo) 
06078     <<endl
06079     <<"totalCounter="<<totalCounter<<endl
06080     <<"firstPlaneInPairCounter="<<firstPlaneInPairCounter<<endl
06081     <<"double="<<doubleCounter
06082     <<", xtalk="<<doubleXTalkCounter
06083     <<" ("<<doubleXTalkPercent<<"%)"<<endl
06084     <<"side1="<<side1Counter
06085     <<", xtalk="<<side1XTalkCounter
06086     <<" ("<<side1XTalkPercent<<"%)"<<endl
06087     <<"side2="<<side2Counter
06088     <<", xtalk="<<side2XTalkCounter
06089     <<" ("<<side2XTalkPercent<<"%)"<<endl
06090     <<"Number of times shared pmt on second of"
06091     <<" two planes was last plane="
06092     <<sharedPmtCounter<<endl
06093     <<"Number of times above was XTalk only="<<sharedPmtXTalkCounter
06094     <<" ("<<sharedXTalkPercent<<"%)"<<endl
06095     <<"notGenuineOrXTalkCounter="<<notGenuineOrXTalkCounter
06096     <<" ("<<notGenuineOrXTalkPercent<<"%)"<<endl;
06097 
06098   MSG("CDAnalysis",Msg::kInfo) 
06099     <<endl<<"passPidCounter="<<passPidCounter<<endl
06100     <<"noTrackCounter="<<noTrackCounter
06101     <<" ("<<Pct(noTrackCounter,passPidCounter)<<"%)"<<endl;
06102    
06103   if (sum15_18Counter!=0){
06104     MSG("CDAnalysis",Msg::kInfo) 
06105       <<endl
06106       <<" ** Calibration Summary **"<<endl
06107       <<"SigCor in sliding window 15_18:"<<endl
06108       <<"    SigCor dep="<<sum15_18<<" (N="<<sum15_18Counter<<")"<<endl
06109       <<"    Av SigCor dep="<<sum15_18/sum15_18Counter
06110       <<" +/- "<<100*(h15_18->GetRMS()/sqrt(h15_18->GetEntries()))/
06111       h15_18->GetMean()<<"%"<<endl
06112       <<"    Av SigCor dep per plane="<<(sum15_18/sum15_18Counter)/15
06113       <<" +/- "<<100*(h15_18->GetRMS()/sqrt(h15_18->GetEntries()))/
06114       h15_18->GetMean()<<"%"<<endl
06115       <<"MIPs in sliding window 15_18:"<<endl
06116       <<"    MIPs dep="<<sum15_18Mip
06117       <<" (N="<<sum15_18MipCounter<<")"<<endl
06118       <<"    Av MIPs dep="<<sum15_18Mip/sum15_18MipCounter
06119       <<endl;
06120     if (sumSigCorTotalCounter!=0){
06121       MSG("CDAnalysis",Msg::kInfo) 
06122         <<"SigCor of whole event:"<<endl
06123         <<"    Sum of SigCor dep="<<sumSigCorTotal
06124         <<" (N="<<sumSigCorTotalCounter<<")"<<endl
06125         <<"    Av sigCor dep="
06126         <<sumSigCorTotal/sumSigCorTotalCounter<<endl
06127         <<"    1 sigCor="
06128         <<1800/(sumSigCorTotal/sumSigCorTotalCounter)<<" MeV"
06129         <<endl;
06130     }
06131     if (sumMipTotalCounter!=0){
06132       MSG("CDAnalysis",Msg::kInfo) 
06133         <<"MIPs of whole event:"<<endl
06134         <<"    Sum of MIPs dep="<<sumMipTotal
06135         <<" (N="<<sumMipTotalCounter<<")"<<endl
06136         <<"    Av MIPs dep="
06137         <<sumMipTotal/sumMipTotalCounter<<endl
06138         <<"    1 MIP="
06139         <<1800/(sumMipTotal/sumMipTotalCounter)<<" MeV"<<endl
06140         <<"    1 GeV="
06141         <<(sumMipTotal/sumMipTotalCounter)/1.8<<" MIPs"
06142         <<endl<<endl;
06143     }
06144   }
06145 
06146   MSG("CDAnalysis",Msg::kInfo) 
06147     <<" ** Finished MuonResponse method **"<<endl;
06148 }

void CDAnalysis::MuonSampleCuts  ) 
 

Definition at line 10804 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), CutOnBadPedestals(), CutOnDeadChips(), CutOnPid(), fLastPlane, fPlane, fStrip, fStripend, fTrkHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), MSG, ReadInHitInfo(), SetLoopVariables(), and StandardSanityChecks().

10805 {
10806   MSG("CDAnalysis",Msg::kInfo) 
10807     <<" ** Running MuonSampleCuts method... **"<<endl;
10808 
10809   //open the output file for the histograms
10810   //fOutFile=this->OpenFile(fRunNumber,"MuonSampleCuts");
10811 
10812   TH1F *hNumPlanesAll=new TH1F("hNumPlanesAll","NumPlanesAll hit",
10813                                77,-2,75);
10814   hNumPlanesAll->SetTitle("Number of Planes Hit");
10815   hNumPlanesAll->GetXaxis()->SetTitle("Number of Planes Hit");
10816   hNumPlanesAll->GetXaxis()->CenterTitle();
10817   hNumPlanesAll->GetYaxis()->SetTitle("");
10818   hNumPlanesAll->GetYaxis()->CenterTitle();
10819   hNumPlanesAll->SetFillColor(0);
10820   hNumPlanesAll->SetBit(TH1::kCanRebin);
10821 
10822   TH1F *hNumPlanesN_Qual=new TH1F("hNumPlanesN_Qual",
10823                                   "hNumPlanesN_Qual",
10824                                   77,-2,75);
10825   hNumPlanesN_Qual->SetTitle("Number of Planes Hit");
10826   hNumPlanesN_Qual->GetXaxis()->SetTitle("Number of Planes Hit");
10827   hNumPlanesN_Qual->GetXaxis()->CenterTitle();
10828   hNumPlanesN_Qual->GetYaxis()->SetTitle("");
10829   hNumPlanesN_Qual->GetYaxis()->CenterTitle();
10830   hNumPlanesN_Qual->SetFillColor(0);
10831   hNumPlanesN_Qual->SetLineColor(2);
10832   hNumPlanesN_Qual->SetBit(TH1::kCanRebin);
10833 
10834   TH1F *hNumPlanesN=new TH1F("hNumPlanesN",
10835                                   "hNumPlanesN",
10836                                   77,-2,75);
10837   hNumPlanesN->SetTitle("Number of Planes Hit");
10838   hNumPlanesN->GetXaxis()->SetTitle("Number of Planes Hit");
10839   hNumPlanesN->GetXaxis()->CenterTitle();
10840   hNumPlanesN->GetYaxis()->SetTitle("");
10841   hNumPlanesN->GetYaxis()->CenterTitle();
10842   hNumPlanesN->SetFillColor(0);
10843   hNumPlanesN->SetLineColor(3);
10844   hNumPlanesN->SetBit(TH1::kCanRebin);
10845 
10846   TH1F *hEventLength=new TH1F("hEventLength","hEventLength hit",
10847                               77,-2,75);
10848   hEventLength->GetXaxis()->SetTitle("Event Length (planes)");
10849   hEventLength->GetXaxis()->CenterTitle();
10850   hEventLength->GetYaxis()->SetTitle("");
10851   hEventLength->GetYaxis()->CenterTitle();
10852   hEventLength->SetFillColor(0);
10853   hEventLength->SetBit(TH1::kCanRebin);
10854 
10855   TH1F *hEventLength2=new TH1F("hEventLength2","hEventLength",77,-2,75);
10856   hEventLength2->GetXaxis()->SetTitle("Event Length (planes)");
10857   hEventLength2->GetXaxis()->CenterTitle();
10858   hEventLength2->GetYaxis()->SetTitle("");
10859   hEventLength2->GetYaxis()->CenterTitle();
10860   hEventLength2->SetFillColor(0);
10861   hEventLength2->SetBit(TH1::kCanRebin);
10862 
10863   TH1F *hEventLength3=new TH1F("hEventLength3","hEventLength",77,-2,75);
10864   hEventLength3->SetTitle("Event Track Length");
10865   hEventLength3->GetXaxis()->SetTitle("Event Length (planes)");
10866   hEventLength3->GetXaxis()->CenterTitle();
10867   hEventLength3->GetYaxis()->SetTitle("");
10868   hEventLength3->GetYaxis()->CenterTitle();
10869   hEventLength3->SetFillColor(0);
10870   hEventLength3->SetBit(TH1::kCanRebin);
10871 
10872   TProfile* pMeuVsEvLenCut=new TProfile("pMeuVsEvLenCut",
10873                                         "pMeuVsEvLenCut",
10874                                         62,0,62);
10875   pMeuVsEvLenCut->SetTitle("MEU Number vs Event Length Cut");
10876   pMeuVsEvLenCut->GetXaxis()->SetTitle("Lower Event Length Cut");
10877   pMeuVsEvLenCut->GetXaxis()->CenterTitle();
10878   pMeuVsEvLenCut->GetYaxis()->SetTitle("SigCors per MEU");
10879   pMeuVsEvLenCut->GetYaxis()->CenterTitle();
10880   pMeuVsEvLenCut->SetFillColor(0);
10881 
10885   
10886   this->InitialiseLoopVariables();  
10887   
10888   for(Int_t event=0;event<fEvents;event++){
10889     
10890     this->SetLoopVariables(event);
10891 
10892     if (this->CutOnDeadChips()) continue;
10893     if (this->CutOnPid()) continue;
10894 
10895     map<Int_t,Float_t> planeSigCorT;
10896     map<Int_t,Int_t> numPlanesHitAll;
10897 
10898     //get tclones arrays for this snarl
10899     TClonesArray &cTrk=*fTrkHitInfo;
10900     Int_t numTrkHits=fTrkHitInfo->GetEntries();
10901     TClonesArray &cUnTrk = *fUnTrkHitInfo;
10902     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
10903     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
10904     TClonesArray &cXTalk = *fXTalkHits;
10905     Int_t numXTalkHits=fXTalkHits->GetEntries();
10906 
10908     //loop over the untracked hits in the snarl
10910     for (Int_t hit=0;hit<numUnTrkHits;hit++){
10911       //cast the tclonesarray up to a trackedhitinfo object
10912       CDTrackedHitInfo *hitInfo=
10913         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
10914 
10915       this->ReadInHitInfo(hitInfo);
10916 
10917       //cut out the bad channels
10918       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
10919 
10920       //check the channel's sanity
10921       this->StandardSanityChecks();
10922 
10923       //count the number of planes hit
10924       numPlanesHitAll[fPlane]++;
10925 
10926       if (fPlane==0) continue;
10927       //add up the total sigcor per plane
10928       planeSigCorT[fPlane]+=fChargeSigCor;
10929     }
10930 
10932     //loop over xtalk hits in the snarl
10934     for (Int_t hit=0;hit<numXTalkHits;hit++){
10935       CDXTalkHitInfo *hitInfo=
10936         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
10937 
10938       this->ReadInHitInfo(hitInfo);
10939       
10940       //cut out the bad channels
10941       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
10942 
10943       //check the channel's sanity
10944       this->StandardSanityChecks();
10945 
10946       //count the number of planes hit
10947       numPlanesHitAll[fPlane]++;
10948 
10949       if (fPlane==0) continue;
10950       //add up the total sigcor per plane
10951       planeSigCorT[fPlane]+=fChargeSigCor;
10952     }
10953 
10955     //loop over the tracked hits
10957     for (Int_t hit=0;hit<numTrkHits;hit++){
10958       CDTrackedHitInfo *trackedHitInfo=
10959         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
10960           
10961       this->ReadInHitInfo(trackedHitInfo);
10962 
10963       //cut out the bad channels
10964       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
10965 
10966       //check the channel's sanity
10967       this->StandardSanityChecks();
10968 
10969       //calculate the first and last planes
10970       this->CalcFirstLastPlane(fPlane);
10971 
10972       //count the number of planes hit
10973       numPlanesHitAll[fPlane]++;
10974 
10975       if (fPlane==0) continue;
10976       //add up the total sigcor per plane
10977       planeSigCorT[fPlane]+=fChargeSigCor;
10978     }
10980     //end of loop over the tracked hits
10982 
10983     hEventLength->Fill(fLastPlane+1);
10984     hNumPlanesAll->Fill(numPlanesHitAll.size());
10985 
10986     //make sure that the first plane makes sense and was actually set
10987     if (fFirstPlane<0 || fFirstPlane>59) continue;
10988 
10989     //do nasty hack for plane 40 - very nasty!!!!
10990     //if (fRunNumber==70709 || fRunNumber==70705){
10991     //planeSigCorT[40]=planeSigCorT[38];
10992     //}
10993 
10994     hNumPlanesN_Qual->Fill(numPlanesHitAll.size());
10995 
10996     //make event length cuts
10997     //if (this->CutOnEventLength()) continue;
10998     //make track quality cuts
10999     //if (this->CutOnTrackQuality()) continue;
11000 
11001     hNumPlanesN->Fill(numPlanesHitAll.size());
11002 
11003     //fill event length plots for those passing cuts
11004     hEventLength2->Fill(fLastPlane+1);
11005 
11007     //section for 15_18 window
11009     Int_t minEventLength=15+18+1;//+1 because don't want plane zero
11010     Int_t maxEvLen=57;//cut out muons ending in pl 58 or 59
11011     if (fLastPlane<minEventLength || fLastPlane>maxEvLen) continue;
11012 
11013     Float_t localSum15_18=0;
11014     Float_t localSum15_18Counter=0;
11015 
11016     Int_t windowStart=fLastPlane-18;
11017     Int_t windowSize=15;
11018     
11019     //loop through the hits in the window
11020     for (Int_t i=0;i<windowSize;i++){
11021       Int_t plane=windowStart-i;
11022       
11023       //calculate the best window value
11024       //if fLP=48 then the first plane included is 30
11025       //this is actually the 19th from the end of the track
11026       localSum15_18+=planeSigCorT[plane];//total including xtalk
11027       localSum15_18Counter++;
11028     }
11029 
11030     for (Int_t lowerPlCut=57;lowerPlCut>minEventLength;lowerPlCut--){
11031 
11032       if (localSum15_18Counter!=0 && fLastPlane>=lowerPlCut){
11033 
11034         MSG("CDAnalysis",Msg::kVerbose)
11035           <<"Filling prof: lowerPlCut="<<lowerPlCut
11036           <<", 15_18="<<localSum15_18/windowSize<<endl;
11037 
11038         pMeuVsEvLenCut->Fill(lowerPlCut,localSum15_18/windowSize);
11039       }
11040     }
11041 
11042   }//end of for                                       
11043   
11047 
11048   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
11049 
11050   //turn off the stats box printing
11051   gStyle->SetOptStat(0);
11052 
11053 
11054   //turn off the stats box printing
11055   //gStyle->SetOptStat(0);
11056   gStyle->SetOptStat(1111111);
11057 
11058   TCanvas *cGeom=new TCanvas("cGeom","cGeom",0,0,1200,800);
11059   cGeom->SetFillColor(0);
11060   cGeom->Divide(2,2);
11061   cGeom->cd(1);
11062   hEventLength->Draw();
11063   cGeom->cd(2);
11064   hEventLength2->Draw();
11065   cGeom->cd(3);
11066   hEventLength3->Draw();
11067   cGeom->cd(3);
11068 
11069   TCanvas *cNumPl=new TCanvas("cNumPl","cNumPl",0,0,1200,800);
11070   cNumPl->SetFillColor(0);
11071   cNumPl->Divide(2,2);
11072   cNumPl->cd(1);
11073   hNumPlanesAll->Draw();
11074   cNumPl->cd(2);
11075   hNumPlanesN_Qual->Draw();
11076   cNumPl->cd(3);
11077   hNumPlanesN->Draw();
11078   cNumPl->cd(4);
11079   hNumPlanesAll->Draw();
11080   hNumPlanesN_Qual->Draw("sames");
11081   hNumPlanesN->Draw("sames");
11082 
11083   TCanvas *cMeuVsEvLenCut=new TCanvas("cMeuVsEvLenCut",
11084                                       "cMeuVsEvLenCut",0,0,1200,800);
11085   cMeuVsEvLenCut->SetFillColor(0);
11086   //cMeuVsEvLenCut->Divide(1,1);
11087   //cMeuVsEvLenCut->cd(1);
11088   pMeuVsEvLenCut->Draw();
11089 
11090   MSG("CDAnalysis",Msg::kInfo) 
11091     <<" ** Finished MuonSampleCuts method **"<<endl;
11092 }

void CDAnalysis::MuonScatter  ) 
 

Definition at line 11595 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), CalcLastPlaneOnTrkNoXTalk(), CutOnBadPedestals(), CutOnDeadChips(), CutOnPid(), fChargeMip, Form(), fOutFile, fPlane, fRunNumber, fS, fStrip, fStripend, fTrkHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), MSG, OpenFile(), ReadInHitInfo(), SetLoopVariables(), and StandardSanityChecks().

11596 {
11597   MSG("CDAnalysis",Msg::kInfo) 
11598     <<" ** Running MuonScatter method... **"<<endl;
11599 
11600   //open the output file for the histograms
11601   fOutFile=this->OpenFile(fRunNumber,"MuonScat");
11602 
11603   //fS="Transverse hits in last plane";
11604   //TProfile* transLastPl=new TProfile(fS.c_str(),fS.c_str(),25,-1,24);
11605 
11606   vector<TProfile*> pTransAvEnDep;
11607   vector<TH1F*> hTransSumEnDep;
11608   vector<TH1F*> hTransHits;
11609 
11610   for (Int_t pl=0;pl<70;pl++){
11611     string sPl=Form("%d",pl);
11612     string sName="";
11613     
11614     sName="pTransAvEnDep";
11615     fS="Transverse Average Energy Deposition, plane=";
11616     fS+=sPl;
11617     sName+=sPl;
11618     pTransAvEnDep.push_back(new TProfile(sName.c_str(),fS.c_str(),
11619                                          27,-1,26));
11620     vector<TProfile*>::iterator prof=pTransAvEnDep.begin();
11621     (*prof)->GetXaxis()->SetTitle("Strip");
11622     (*prof)->GetYaxis()->SetTitle("Average Energy");
11623     (*prof)->GetXaxis()->CenterTitle();
11624     (*prof)->GetYaxis()->CenterTitle();
11625     
11626     sName="hTransSumEnDep";
11627     fS="Transverse Sum of Energy Deposition, plane=";
11628     fS+=sPl;
11629     sName+=sPl;
11630     hTransSumEnDep.push_back(new TH1F(sName.c_str(),fS.c_str(),
11631                                       27,-1,26));
11632     vector<TH1F*>::iterator hist=hTransSumEnDep.begin();
11633     (*hist)->GetXaxis()->SetTitle("Strip");
11634     (*hist)->GetYaxis()->SetTitle("Summed Energy");
11635     (*hist)->GetXaxis()->CenterTitle();
11636     (*hist)->GetYaxis()->CenterTitle();
11637 
11638     sName="hTransHits";
11639     fS="Transverse Hits, plane=";
11640     fS+=sPl;
11641     sName+=sPl;
11642     hTransHits.push_back(new TH1F(sName.c_str(),fS.c_str(),27,-1,26));
11643     hist=hTransHits.end();
11644     --hist;
11645     (*hist)->GetXaxis()->SetTitle("Strip");
11646     (*hist)->GetYaxis()->SetTitle("Num Hits");
11647     (*hist)->GetXaxis()->CenterTitle();
11648     (*hist)->GetYaxis()->CenterTitle();
11649   }
11650 
11651   TH1F *hLastPlane=new TH1F("hLastPlane","hLastPlane",66,-1,65);
11652   hLastPlane->GetXaxis()->SetTitle("Plane");
11653   hLastPlane->GetXaxis()->CenterTitle();
11654   hLastPlane->GetYaxis()->SetTitle("");
11655   hLastPlane->GetYaxis()->CenterTitle();
11656   hLastPlane->SetFillColor(0);
11657   hLastPlane->SetBit(TH1::kCanRebin);
11658 
11659   TH1F *hLastPlaneCut=new TH1F("hLastPlaneCut","hLastPlaneCut",
11660                                66,-1,65);
11661   hLastPlaneCut->GetXaxis()->SetTitle("Plane");
11662   hLastPlaneCut->GetXaxis()->CenterTitle();
11663   hLastPlaneCut->GetYaxis()->SetTitle("");
11664   hLastPlaneCut->GetYaxis()->CenterTitle();
11665   hLastPlaneCut->SetFillColor(0);
11666   hLastPlaneCut->SetLineColor(2);
11667   hLastPlaneCut->SetBit(TH1::kCanRebin);
11668 
11672   
11673   this->InitialiseLoopVariables();  
11674   
11675   for(Int_t event=0;event<fEvents;event++){
11676 
11677     this->SetLoopVariables(event);
11678 
11679     //calculate the last plane no xtalk
11680     Int_t lastPl=this->CalcLastPlaneOnTrkNoXTalk();
11681     hLastPlane->Fill(lastPl);
11682     if (lastPl<48 || lastPl>51) continue;
11683     hLastPlaneCut->Fill(lastPl);
11684 
11685     if (this->CutOnDeadChips()) continue;
11686     if (this->CutOnPid()) continue;
11687 
11688     //get tclones arrays for this snarl
11689     TClonesArray &cTrk=*fTrkHitInfo;
11690     Int_t numTrkHits=fTrkHitInfo->GetEntries();
11691     TClonesArray &cUnTrk = *fUnTrkHitInfo;
11692     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
11693     TClonesArray &cXTalk = *fXTalkHits;
11694     Int_t numXTalkHits=fXTalkHits->GetEntries();
11695           
11697     //loop over the untracked hits in the snarl
11699     for (Int_t hit=0;hit<numUnTrkHits;hit++){
11700       //cast the tclonesarray up to a trackedhitinfo object
11701       CDTrackedHitInfo *hitInfo=
11702         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
11703 
11704       this->ReadInHitInfo(hitInfo);
11705 
11706       //cut out the bad channels
11707       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
11708 
11709       //check the channel's sanity
11710       this->StandardSanityChecks();
11711 
11712     }
11713 
11715     //loop over xtalk hits in the snarl
11717     for (Int_t hit=0;hit<numXTalkHits;hit++){
11718       CDXTalkHitInfo *hitInfo=
11719         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
11720 
11721       this->ReadInHitInfo(hitInfo);
11722       
11723       //cut out the bad channels
11724       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
11725 
11726       //check the channel's sanity
11727       this->StandardSanityChecks();
11728 
11729     }
11730 
11732     //loop over the tracked hits
11734     for (Int_t hit=0;hit<numTrkHits;hit++){
11735       CDTrackedHitInfo *trackedHitInfo=
11736         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
11737           
11738       this->ReadInHitInfo(trackedHitInfo);
11739 
11740       //cut out the bad channels
11741       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
11742 
11743       //check the channel's sanity
11744       this->StandardSanityChecks();
11745 
11746       //calculate the first and last planes
11747       this->CalcFirstLastPlane(fPlane);
11748 
11749       pTransAvEnDep[fPlane]->Fill(fStrip,fChargeMip);
11750       hTransSumEnDep[fPlane]->Fill(fStrip,fChargeMip);
11751       hTransHits[fPlane]->Fill(fStrip,1);
11752     }
11754     //end of loop over the tracked hits
11756   }
11757 
11761 
11762   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
11763 
11764   //turn off the stats box printing
11765   gStyle->SetOptStat(0);
11766 
11767   //turn on the stats box printing
11768   gStyle->SetOptStat(1111111);
11769 
11770   TCanvas *cTransHits=new TCanvas("cTransHits","cTransHits",
11771                                   0,0,1200,800);
11772   cTransHits->SetFillColor(0);
11773   cTransHits->Divide(4,4);
11774   Int_t i=0;
11775   vector<TH1F*>::iterator hist=hTransHits.begin();
11776   cTransHits->cd(++i);//1
11777   (*(hist+1))->Draw();
11778   cTransHits->cd(++i);
11779   (*(hist+4))->Draw();
11780   cTransHits->cd(++i);
11781   (*(hist+8))->Draw();
11782   cTransHits->cd(++i);//4
11783   (*(hist+12))->Draw();
11784   cTransHits->cd(++i);
11785   (*(hist+16))->Draw();
11786   cTransHits->cd(++i);//6
11787   (*(hist+20))->Draw();
11788   cTransHits->cd(++i);
11789   (*(hist+24))->Draw();
11790   cTransHits->cd(++i);//8
11791   (*(hist+28))->Draw();
11792   cTransHits->cd(++i);
11793   (*(hist+32))->Draw();
11794   cTransHits->cd(++i);//10
11795   (*(hist+36))->Draw();
11796   cTransHits->cd(++i);
11797   (*(hist+40))->Draw();
11798   cTransHits->cd(++i);//12
11799   (*(hist+44))->Draw();
11800   cTransHits->cd(++i);
11801   (*(hist+48))->Draw();
11802   cTransHits->cd(++i);//14
11803   (*(hist+52))->Draw();
11804   cTransHits->cd(++i);
11805   (*(hist+56))->Draw();
11806   cTransHits->cd(++i);//16
11807   (*(hist+59))->Draw();
11808 
11809   TCanvas *cPlCut=new TCanvas("cPlCut","cPlCut",0,0,1200,800);
11810   cPlCut->SetFillColor(0);
11811   hLastPlane->Draw();
11812   hLastPlaneCut->Draw("sames");
11813 
11814   Bool_t printPs=false;
11815   if (printPs){
11816     TCanvas *cProf=new TCanvas("cProf","cProf",0,0,1200,800);
11817     cProf->SetFillColor(0);
11818     string sName="TransverseEnergyDep.ps";
11819     cProf->Print((sName+"[").c_str());
11820     gErrorIgnoreLevel=1;
11821     //plot the prof 
11822     for (vector<TProfile*>::iterator prof=pTransAvEnDep.begin();
11823          prof!=pTransAvEnDep.end();++prof){      
11824       cProf->Clear();
11825       (*prof)->Draw();
11826       //(*prof)->SetTitle("Transverse Hits in Plane");
11827       (*prof)->GetXaxis()->SetTitle("Strip");
11828       (*prof)->GetYaxis()->SetTitle("Average MIPs");
11829       (*prof)->GetXaxis()->CenterTitle();
11830       (*prof)->GetYaxis()->CenterTitle();
11831       cProf->Print(sName.c_str());
11832     }
11833     cProf->Print((sName+"]").c_str());
11834     
11835     //plot second
11836     TCanvas *cProf2=new TCanvas("cProf2","cProf2",0,0,1200,800);
11837     cProf2->SetFillColor(0);
11838     sName="TransverseSumEnergyDep.ps";
11839     gErrorIgnoreLevel=0;
11840     cProf2->Print((sName+"[").c_str());
11841     gErrorIgnoreLevel=1;
11842     //plot
11843     for (vector<TH1F*>::iterator hist=hTransSumEnDep.begin();
11844          hist!=hTransSumEnDep.end();++hist){      
11845       cProf2->Clear();
11846       (*hist)->Draw();
11847       //(*hist)->SetTitle("Transverse Hits in Plane");
11848       (*hist)->GetXaxis()->SetTitle("Strip");
11849       (*hist)->GetYaxis()->SetTitle("Summed Energy");
11850       (*hist)->GetXaxis()->CenterTitle();
11851       (*hist)->GetYaxis()->CenterTitle();
11852       cProf2->Print(sName.c_str());
11853     }
11854     cProf2->Print((sName+"]").c_str());
11855     
11856     //plot
11857     sName="TransverseHits.ps";
11858     gErrorIgnoreLevel=0;
11859     cProf2->Print((sName+"[").c_str());
11860     gErrorIgnoreLevel=1;
11861     //plot
11862     for (vector<TH1F*>::iterator hist=hTransHits.begin();
11863          hist!=hTransHits.end();++hist){      
11864       cProf2->Clear();
11865       (*hist)->Draw();
11866     }
11867     cProf2->Print((sName+"]").c_str());
11868   }
11869 
11870   MSG("CDAnalysis",Msg::kInfo) 
11871     <<" ** Finished MuonScatter method **"<<endl;
11872 }

void CDAnalysis::MuonStVsPl  ) 
 

Definition at line 11876 of file CDAnalysis.cxx.

References CalcFirstLastPlane(), CalcNumPlanesHitTrk(), CutOnBadPedestals(), fChargeAdc, fChargeMip, fLastPlane, fNumPlanesHitTrk, Form(), fPlane, fS, fStrip, fStripend, fTrkHitInfo, InitialiseLoopVariables(), MSG, ReadInHitInfo(), SetLoopVariables(), and StandardSanityChecks().

11877 {
11878   MSG("CDAnalysis",Msg::kInfo) 
11879     <<" ** Running MuonStVsPl method... **"<<endl;
11880   
11881   vector<TH1F*> hAdc(4); 
11882 
11883   for (UInt_t i=0;i<hAdc.size();i++){
11884     string sNum=Form("%d",i);
11885     fS="Adc distribution"+sNum;
11886     hAdc[i]=new TH1F(fS.c_str(),fS.c_str(),4000,-20,20000);
11887     hAdc[i]->GetXaxis()->SetTitle("Adc");
11888     hAdc[i]->GetXaxis()->CenterTitle();
11889     hAdc[i]->GetYaxis()->SetTitle("");
11890     hAdc[i]->GetYaxis()->CenterTitle();
11891     hAdc[i]->SetFillColor(0);
11892     hAdc[i]->SetBit(TH1::kCanRebin);
11893   }
11894 
11895   TH1F *hStrip=new TH1F("hStrip","Strips hit",100,-2,30);
11896   hStrip->GetXaxis()->SetTitle("Strip");
11897   hStrip->GetXaxis()->CenterTitle();
11898   hStrip->GetYaxis()->SetTitle("");
11899   hStrip->GetYaxis()->CenterTitle();
11900   hStrip->SetFillColor(0);
11901   hStrip->SetBit(TH1::kCanRebin);
11902 
11903   TH1F *hPlane=new TH1F("hPlane","Planes hit",200,-2,75);
11904   hPlane->GetXaxis()->SetTitle("Plane");
11905   hPlane->GetXaxis()->CenterTitle();
11906   hPlane->GetYaxis()->SetTitle("");
11907   hPlane->GetYaxis()->CenterTitle();
11908   hPlane->SetFillColor(0);
11909   hPlane->SetBit(TH1::kCanRebin);
11910 
11911   fS="Strip Vs Plane EnergyDep Map";
11912   TProfile2D* pStVsPlEnDep=new TProfile2D(fS.c_str(),fS.c_str(),
11913                                            64,-2,62,30,-3,27);
11914   pStVsPlEnDep->GetXaxis()->SetTitle("Plane");
11915   pStVsPlEnDep->GetXaxis()->CenterTitle();
11916   pStVsPlEnDep->GetYaxis()->SetTitle("Strip");
11917   pStVsPlEnDep->GetYaxis()->CenterTitle();
11918   pStVsPlEnDep->SetFillColor(0);
11919   //pStVsPlEnDep->SetMaximum(15000);
11920 
11921   fS="Strip Vs Plane SigCor Map";
11922   TProfile2D* pStVsPlSigCor=new TProfile2D(fS.c_str(),fS.c_str(),
11923                                            64,-2,62,30,-3,27);
11924   pStVsPlSigCor->GetXaxis()->SetTitle("Plane");
11925   pStVsPlSigCor->GetXaxis()->CenterTitle();
11926   pStVsPlSigCor->GetYaxis()->SetTitle("Strip");
11927   pStVsPlSigCor->GetYaxis()->CenterTitle();
11928   pStVsPlSigCor->SetFillColor(0);
11929   //pStVsPlSigCor->SetMaximum(15000);
11930 
11931   fS="Strip Vs Plane Adc Map";
11932   TProfile2D* pStVsPlAdc=new TProfile2D(fS.c_str(),fS.c_str(),
11933                                            64,-2,62,30,-3,27);
11934   pStVsPlAdc->GetXaxis()->SetTitle("Plane");
11935   pStVsPlAdc->GetXaxis()->CenterTitle();
11936   pStVsPlAdc->GetYaxis()->SetTitle("Strip");
11937   pStVsPlAdc->GetYaxis()->CenterTitle();
11938   pStVsPlAdc->SetFillColor(0);
11939   //pStVsPlAdc->SetMaximum(15000);
11940 
11941   fS="Strip Vs Plane Num Hits Map";
11942   TH2F* hStVsPlNum=new TH2F(fS.c_str(),fS.c_str(),64,-2,62,30,-3,27);
11943   hStVsPlNum->GetXaxis()->SetTitle("Plane");
11944   hStVsPlNum->GetXaxis()->CenterTitle();
11945   hStVsPlNum->GetYaxis()->SetTitle("Strip");
11946   hStVsPlNum->GetYaxis()->CenterTitle();
11947   hStVsPlNum->SetFillColor(0);
11948   //hStVsPlNum->SetMaximum(15000);
11949 
11953   
11954   this->InitialiseLoopVariables();  
11955   
11956   for(Int_t event=0;event<fEvents;event++){
11957     
11958     this->SetLoopVariables(event);
11959 
11960     //get tclones arrays for this snarl
11961     TClonesArray &cTrk=*fTrkHitInfo;
11962     Int_t numTrkHits=fTrkHitInfo->GetEntries();
11963 
11964     //loop over the tracked hits
11965     //to calc first and last planes
11966     for (Int_t hit=0;hit<numTrkHits;hit++){
11967       CDTrackedHitInfo *trackedHitInfo=
11968         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
11969           
11970       this->ReadInHitInfo(trackedHitInfo);
11971 
11972       //calculate the first and last planes
11973       this->CalcFirstLastPlane(fPlane);
11974       this->CalcNumPlanesHitTrk(fPlane);
11975     }
11976     //end of loop over the tracked hits
11977 
11978     //check track length and composition
11979     if (fLastPlane<40 || fNumPlanesHitTrk.size()<35) continue;
11980 
11982     //loop over the tracked hits again...
11984     for (Int_t hit=0;hit<numTrkHits;hit++){
11985       CDTrackedHitInfo *trackedHitInfo=
11986         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
11987           
11988       this->ReadInHitInfo(trackedHitInfo);
11989 
11990       //cut out the bad channels
11991       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
11992 
11993       //check the channel's sanity
11994       this->StandardSanityChecks();
11995 
11996       //calculate the first and last planes
11997       this->CalcFirstLastPlane(fPlane);
11998 
11999       if (fPlane==2 && fStrip==19) {
12000         hAdc[0]->Fill(fChargeAdc);
12001         MSG("CDAnalysis",Msg::kInfo)
12002           <<"e="<<event<<", adc="<<fChargeAdc<<endl;
12003         
12004       }
12005       else if (fPlane==5 && fStrip==19) hAdc[1]->Fill(fChargeAdc);
12006       else if (fPlane==13 && fStrip==11) hAdc[2]->Fill(fChargeAdc);
12007       else if (fPlane==5 && fStrip==19) hAdc[3]->Fill(fChargeAdc);
12008 
12009       if (fChargeAdc>2500 && fPlane>0){
12010         MSG("CDAnalysis",Msg::kInfo)
12011           <<"e="<<event<<", adc="<<fChargeAdc<<endl;
12012       
12013 
12014       //fill histos
12015       hPlane->Fill(fPlane);
12016       hStrip->Fill(fStrip);
12017       pStVsPlSigCor->Fill(fPlane,fStrip,fChargeMip);
12018       pStVsPlAdc->Fill(fPlane,fStrip,fChargeAdc);
12019       hStVsPlNum->Fill(fPlane,fStrip,1);
12020       }
12021     }
12023     //end of loop over the tracked hits
12025 
12026   }//end of for                                       
12027   
12031 
12032   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
12033 
12034   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
12035   cGeom->SetFillColor(0);
12036   cGeom->Divide(2,2);
12037   cGeom->cd(1);
12038   hPlane->Draw();
12039   cGeom->cd(2);
12040   hStrip->Draw();
12041   cGeom->cd(3);
12042 
12043   cGeom->cd(4);
12044 
12045   TCanvas *cAdc=new TCanvas("cAdc","Adc",0,0,1200,800);
12046   cAdc->SetFillColor(0);
12047   cAdc->Divide(2,2);
12048   cAdc->cd(1);
12049   hAdc[0]->Draw();
12050   cAdc->cd(2);
12051   hAdc[1]->Draw();
12052   cAdc->cd(3);
12053   hAdc[2]->Draw();
12054   cAdc->cd(4);
12055   hAdc[3]->Draw();
12056 
12057   TCanvas *cStVsPlSigCor=new TCanvas("cStVsPlSigCor","StVsPlSigCor",
12058                                     0,0,1200,800);
12059   cStVsPlSigCor->SetFillColor(0);
12060   pStVsPlSigCor->Draw("colz");
12061 
12062   TCanvas *cStVsPlAdc=new TCanvas("cStVsPlAdc","StVsPlAdc",
12063                                     0,0,1200,800);
12064   cStVsPlAdc->SetFillColor(0);
12065   pStVsPlAdc->Draw("colz");
12066 
12067   TCanvas *cStVsPlNum=new TCanvas("cStVsPlNum","StVsPlNum",
12068                                   0,0,1200,800);
12069   cStVsPlNum->SetFillColor(0);
12070   hStVsPlNum->Draw("colz");
12071 
12072   MSG("CDAnalysis",Msg::kInfo) 
12073     <<" ** Finished MuonStVsPl method **"<<endl;
12074 }

void CDAnalysis::NormaliseVector std::vector< Double_t > &  v,
Int_t  mode = 1
const [private]
 

Definition at line 895 of file CDAnalysis.cxx.

References abs(), and MSG.

Referenced by BbEnVsRange().

00897 {
00898   MSG("CDAnalysis",Msg::kDebug) 
00899     <<" ** Running NormaliseVector method... **"<<endl;
00900   
00901   if (v.size()>0){
00902 
00903     if (mode==1){//simple average
00904       //find average
00905       Double_t average=0;
00906       for (UInt_t i=0;i<v.size();i++) average+=v[i];
00907       average/=v.size();
00908       
00909       MSG("CDAnalysis",Msg::kVerbose)<<"Average="<<average<<endl; 
00910       
00911       //normalise
00912       for (UInt_t i=0;i<v.size();i++) v[i]/=average;
00913     }
00914     else if (mode==2){//fit the function to remove effect of outliers
00915       
00916       Double_t vMax=-9e50;
00917       Double_t vMin=9e50;
00918 
00919       //work out mins and maxs
00920       for (UInt_t i=0;i<v.size();i++){
00921         if (v[i]>vMax) vMax=v[i];
00922         if (v[i]<vMin) vMin=v[i];
00923       }
00924       
00925       //limit the number of bins
00926       Int_t numBins=300;
00927       if (4*v.size()<10000) numBins=4*v.size();
00928 
00929       MSG("LIAnalysis",Msg::kInfo)
00930         <<"vMax="<<vMax <<", vMin="<<vMin<<", numBins="<<numBins<<endl;
00931 
00932       //create the histo
00933       TH1F* h=new TH1F("h","h",numBins,vMin-abs(0.1*vMin),
00934                        vMax+abs(0.1*vMin));
00935       h->SetBit(TH1::kCanRebin);
00936 
00937       Double_t average=0;
00938       for (UInt_t i=0;i<v.size();i++){
00939         //find average
00940         average+=v[i];
00941 
00942         //fill the histo
00943         h->Fill(v[i]);
00944       }
00945       average/=v.size();
00946 
00947       //fit but use 0 (zero!) otherwise it stamps on the current canvas!
00948       h->Fit("gaus","q0");
00949       TF1* func=h->GetFunction("gaus");
00950       Double_t p1=func->GetParameter(1);
00951       Double_t p2=func->GetParameter(2);
00952 
00953       //don't use the fit if it is screwed up
00954       Double_t avToNormWith=p1;
00955       if (p1<vMin || p1>vMax) avToNormWith=average;
00956 
00957       MSG("LIAnalysis",Msg::kInfo)
00958         <<"Fitted mean="<<p1
00959         <<" (average="<<average
00960         <<") fitted rms="<<p2
00961         <<", using avToNormWith="<<avToNormWith<<endl;
00962 
00963       //normalise
00964       for (UInt_t i=0;i<v.size();i++) v[i]/=avToNormWith;
00965 
00966       delete h;
00967     }
00968   }
00969 
00970   MSG("CDAnalysis",Msg::kDebug) 
00971     <<" ** Finished NormaliseVector method **"<<endl;
00972 }

TFile * CDAnalysis::OpenFile Int_t  runNumber,
std::string  prefix = ""
[private]
 

Definition at line 717 of file CDAnalysis.cxx.

References Form(), and MSG.

Referenced by CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonScatter(), StoppingMuonCalibration(), TruthEnDep(), and TruthEventLength().

00718 {
00719   //create the tfile pointer to be returned
00720   TFile* outputFile=0;
00721   
00722   //get the environmental variable
00723   char *anaDir=getenv("CDANA_DIR");
00724   
00725   //use a string to hold env instead 
00726   string sAnaDir="";
00727   
00728   if (anaDir!=NULL) {
00729     sAnaDir=anaDir;
00730   }
00731   else {
00732     MSG("CDAnalysis",Msg::kInfo) 
00733       <<"Environmental variable $CDANA_DIR not set." 
00734       <<" Writing file(s) to current directory"<<endl;
00735     sAnaDir=".";
00736   }
00737   
00738   //convert variables to string
00739   string sRunNumber=Form("%d",runNumber);
00740   string sDetector="C";
00741   string sPrefix="h";//default
00742   if (prefix!="") sPrefix+=prefix;
00743   //start all filenames with an h
00744   string sBase=sAnaDir+"/"+sPrefix+sDetector+sRunNumber;
00745   string sFileName=sBase+".root";
00746   
00747   //test if file already exists
00748   ifstream Test(sFileName.c_str());
00749   
00750   //open the appropriate file
00751   if(!Test){
00752     outputFile=new TFile(sFileName.c_str(),"RECREATE");
00753   }
00754   else {
00755     //Need new filename
00756     Int_t fred=1;
00757     while(Test) {
00758       Test.close();
00759       string sAppendage=Form("%d",fred);
00760       sFileName=sBase+"_"+sAppendage+".root";
00761       Test.open(sFileName.c_str());
00762       fred++;
00763     }
00764     outputFile=new TFile(sFileName.c_str(),"NEW");
00765     outputFile->SetCompressionLevel(9);
00766   }
00767   
00768   string sTmp="No File!";
00769   if (outputFile) sTmp=outputFile->GetName();
00770 
00771   MSG("CDAnalysis",Msg::kInfo) 
00772     <<"Output file opened: "<<sTmp<<endl;
00773   return outputFile;
00774 }

ofstream * CDAnalysis::OpenTxtFile Int_t  runNumber,
std::string  prefix
[private]
 

Definition at line 778 of file CDAnalysis.cxx.

References Form(), and MSG.

Referenced by StoppingMuonCalibration().

00779 {
00780   //create the tfile pointer to be returned
00781   ofstream* outputFile=0;
00782   
00783   //convert variables to string
00784   string sRunNumber=Form("%d",runNumber);
00785   string sDetector="C";
00786   string sPrefix="";//default
00787   string sAnaDir=".";
00788   if (prefix!="") sPrefix+=prefix;
00789   string sBase=sAnaDir+"/"+sPrefix+sDetector+sRunNumber;
00790   string sFileName=sBase+".txt";
00791 
00792   outputFile=new ofstream(sFileName.c_str());
00793   
00794   if (outputFile){
00795     MSG("CDAnalysis",Msg::kInfo) 
00796       <<"Output txt file opened: "<<sFileName<<endl;
00797   }
00798   else{
00799     MSG("CDAnalysis",Msg::kInfo)
00800       <<"Txt file NOT opened: "<<sFileName<<endl;
00801   }
00802 
00803   return outputFile;
00804 }

string CDAnalysis::Pct Double_t  top,
Double_t  bottom
const [private]
 

method to calculate a simple percentage safely and formatted

Definition at line 12192 of file CDAnalysis.cxx.

References Form().

Referenced by MuonResponse().

12193 {
12195   Double_t percent=-1;
12196   string sPercent="notset";
12197   if (bottom!=0){
12198     percent=top/bottom;
12199     percent*=100;
12200     sPercent=Form("%.1f",percent);
12201   }
12202   else{
12203     sPercent="fpe!";
12204   }
12205   return sPercent;
12206 }

void CDAnalysis::PrintBasicInfo std::string  = ""  )  const [private]
 

Definition at line 1046 of file CDAnalysis.cxx.

References fChargeAdc, fChargeMip, fChargePe, fChargeSigCor, fChargeSigLin, fPlane, fStrip, fStripend, MSG, and s().

Referenced by PrintEvent().

01047 {
01048   MSG("CDAnalysis",Msg::kInfo)
01049     <<s<<"(Pl,St,End)=("<<fPlane<<","<<fStrip<<","<<fStripend<<")"
01050     <<", adc="<<fChargeAdc
01051     <<", sigL="<<fChargeSigLin
01052     <<", sigC="<<fChargeSigCor
01053     <<", mip="<<fChargeMip
01054     <<", pe="<<fChargePe
01055     <<endl;
01056 }

void CDAnalysis::PrintEvent Int_t  event  ) 
 

Definition at line 1060 of file CDAnalysis.cxx.

References fEvents, fTrackerTree, fTrkHitInfo, fUnTrkHitInfo, fXTalkHits, MSG, PrintBasicInfo(), and ReadInHitInfo().

01061 {
01062   if (event>=fEvents) {
01063     MSG("CDAnalysis",Msg::kFatal)
01064       <<"No such event in tree="<<event<<", fEvents="<<fEvents<<endl;
01065     return;
01066   }
01067 
01068   MSG("CDAnalysis",Msg::kInfo)
01069     <<"Printing for event="<<event<<", fEvents="<<fEvents<<endl;
01070 
01071   //get the snarl/event
01072   fTrackerTree->GetEvent(event); 
01073 
01074   //get tclones arrays for this snarl
01075   TClonesArray &cTrk=*fTrkHitInfo;
01076   Int_t numTrkHits=fTrkHitInfo->GetEntries();
01077   TClonesArray &cUnTrk = *fUnTrkHitInfo;
01078   Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
01079   TClonesArray &cXTalk = *fXTalkHits;
01080   Int_t numXTalkHits=fXTalkHits->GetEntries();
01081   
01083   //loop over the untracked hits in the snarl
01085   MSG("CDAnalysis",Msg::kInfo)<<"Untracked hits..."<<endl;
01086   for (Int_t hit=0;hit<numUnTrkHits;hit++){
01087     //cast the tclonesarray up to a trackedhitinfo object
01088     CDTrackedHitInfo *hitInfo=
01089       dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
01090     
01091     this->ReadInHitInfo(hitInfo);
01092     
01093     this->PrintBasicInfo();
01094   }
01095   
01097   //loop over xtalk hits in the snarl
01099   MSG("CDAnalysis",Msg::kInfo)<<"XTalk hits..."<<endl;
01100   for (Int_t hit=0;hit<numXTalkHits;hit++){
01101     CDXTalkHitInfo *hitInfo=
01102       dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
01103     
01104     this->ReadInHitInfo(hitInfo);
01105 
01106     this->PrintBasicInfo();
01107   }
01108 
01110   //loop over the tracked hits
01112   MSG("CDAnalysis",Msg::kInfo)<<"Tracked hits..."<<endl;
01113   for (Int_t hit=0;hit<numTrkHits;hit++){
01114     CDTrackedHitInfo* hitInfo=
01115       dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
01116 
01117     this->ReadInHitInfo(hitInfo);
01118     
01119     this->PrintBasicInfo();
01120   }
01121 }

void CDAnalysis::PrintPIDStats  ) 
 

Definition at line 16779 of file CDAnalysis.cxx.

References CutByHandOnPid(), CutByHandOnPidForElec(), CutOnDeadChips(), CutOnPid(), CutOnPidForElec(), fBothElecCounter, fBothPiMuCounter, fMyElecCounter, fMyPiMuCounter, fPidElecCounter, fPIDInfo, fPidPiMuCounter, InitialiseLoopVariables(), MAXMSG, MSG, and SetLoopVariables().

Referenced by StoppingMuonCalibration().

16780 {
16781   MSG("CDAnalysis",Msg::kInfo) 
16782     <<" ** Running PrintPIDStats method... **"<<endl;
16783 
16784   //pid counters
16785   fMyPiMuCounter=0;
16786   fPidPiMuCounter=0;
16787   fMyElecCounter=0;
16788   fPidElecCounter=0;
16789   fBothPiMuCounter=0;
16790   fBothElecCounter=0;
16791 
16792   MSG("CDAnalysis",Msg::kInfo)<<"Starting main loop..."<<endl;
16793 
16797   
16798   this->InitialiseLoopVariables();  
16799   
16800   for(Int_t event=0;event<fEvents;event++){
16801     
16802     this->SetLoopVariables(event);
16803 
16804     if (this->CutOnDeadChips()) continue;
16805 
16806     if (!fPIDInfo){
16807       MAXMSG("CDAnalysis",Msg::kWarning,100)
16808         <<"No PID info: fPIDInfo="<<fPIDInfo<<endl;
16809       continue;
16810     }
16811     
16812     //bool for storing results of pid
16813     Bool_t myPiMuFound=false;
16814     Bool_t pidPiMuFound=false;
16815     Bool_t myElecFound=false;
16816     Bool_t pidElecFound=false;
16817 
16818     if (!this->CutByHandOnPid()){
16819       fMyPiMuCounter++;
16820       myPiMuFound=true;
16821     }
16822     if (!this->CutOnPid()){
16823       fPidPiMuCounter++;
16824       pidPiMuFound=true;
16825     }
16826     if (!this->CutByHandOnPidForElec()){
16827       fMyElecCounter++;
16828       myElecFound=true;
16829     }
16830     if (!this->CutOnPidForElec()){//only electrons!
16831       fPidElecCounter++;
16832       pidElecFound=true;
16833     }
16834 
16835     if (myPiMuFound && pidPiMuFound) fBothPiMuCounter++;
16836     if (myElecFound && pidElecFound) fBothElecCounter++;
16837 
16838   }//end of for                                       
16839   
16843 
16844   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
16845 
16846   //pid validation counters results
16847   MSG("CDAnalysis",Msg::kInfo)
16848     <<"My PiMu counter="<<fMyPiMuCounter<<endl
16849     <<"PID PiMu counter="<<fPidPiMuCounter<<endl
16850     <<"Both PiMu counter="<<fBothPiMuCounter<<endl
16851     <<"My Elec counter="<<fMyElecCounter<<endl
16852     <<"PID Elec counter="<<fPidElecCounter<<endl
16853     <<"Both Elec counter="<<fBothElecCounter<<endl;
16854 
16855   MSG("CDAnalysis",Msg::kInfo) 
16856     <<" ** Finished PrintPIDStats method **"<<endl;
16857 }

void CDAnalysis::ReadInHitInfo CDXTalkHitInfo hitInfo  )  [private]
 

Definition at line 1452 of file CDAnalysis.cxx.

References fChargeAdc, fChargeMip, fChargePe, fChargeSigCor, fChargeSigLin, fE1, fE2, fGain, fO1, fO2, fPlane, fStrip, fStripend, fTime, fTransPos, CDXTalkHitInfo::GetCharge(), CDXTalkHitInfo::GetEnd(), CDXTalkHitInfo::GetPlane(), CDXTalkHitInfo::GetStrip(), CDXTalkHitInfo::GetTime(), and InitialiseHitInfoVariables().

01453 {
01454   //initialise variables to be on the safe side
01455   this->InitialiseHitInfoVariables();
01456 
01457   fTime=hitInfo->GetTime();
01458 
01459   //get the variables
01460   fPlane=hitInfo->GetPlane();
01461   fStrip=hitInfo->GetStrip();
01462   fStripend=hitInfo->GetEnd();
01463   //fTransPos=hitInfo->GetTransPos();
01464   fTransPos=-1;//npt possible to calculate for xtalk
01465 
01466   //decide which stripend is which; odd, even, 1 or 2.
01467   fO1=(fStripend==1 && fPlane%2==1);
01468   fO2=(fStripend==2 && fPlane%2==1);
01469   fE1=(fStripend==1 && fPlane%2==0);
01470   fE2=(fStripend==2 && fPlane%2==0);
01471 
01472   //look at the calorimetry info
01473   fChargeAdc=hitInfo->GetCharge(CDTrackedHitInfo::kAdc);
01474   fChargeMip=hitInfo->GetCharge(CDTrackedHitInfo::kMip);
01475   fChargeSigCor=hitInfo->GetCharge(CDTrackedHitInfo::kSigCorr);
01476   fChargeSigLin=hitInfo->GetCharge(CDTrackedHitInfo::kSigLin);
01477   fChargePe=hitInfo->GetCharge(CDTrackedHitInfo::kPe);
01478   if (fChargePe!=0) fGain=fChargeSigLin/fChargePe;
01479   else fGain=-1;
01480 }

void CDAnalysis::ReadInHitInfo CDTrackedHitInfo hitInfo  )  [private]
 

Definition at line 1409 of file CDAnalysis.cxx.

References fChargeAdc, fChargeMip, fChargePe, fChargeSigCor, fChargeSigLin, fE1, fE2, fGain, fO1, fO2, fPlane, fResultEven, fResultOdd, fSigCorsPerMip, fStrip, fStripend, fTime, fTrackInfo, fTransPos, CDTrackedHitInfo::GetCharge(), CDTrackedHitInfo::GetEnd(), CDTrackedHitInfo::GetPlane(), CDTrackInfo::GetResult(), CDTrackedHitInfo::GetStrip(), CDTrackedHitInfo::GetTime(), CDTrackedHitInfo::GetTransPos(), InitialiseHitInfoVariables(), and MAXMSG.

Referenced by CalcLastPlaneOnTrk(), CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), PrintEvent(), StoppingMuonCalibration(), Template2(), ValidateMC(), and ValidateReco().

01410 {
01411   //initialise variables to be on the safe side
01412   this->InitialiseHitInfoVariables();
01413 
01414   fTime=hitInfo->GetTime();
01415 
01416   //get the variables
01417   fPlane=hitInfo->GetPlane();
01418   fStrip=hitInfo->GetStrip();
01419   fStripend=hitInfo->GetEnd();
01420   fTransPos=hitInfo->GetTransPos();
01421   
01422   //decide which stripend is which; odd, even, 1 or 2.
01423   fO1=(fStripend==1 && fPlane%2==1);
01424   fO2=(fStripend==2 && fPlane%2==1);
01425   fE1=(fStripend==1 && fPlane%2==0);
01426   fE2=(fStripend==2 && fPlane%2==0);
01427 
01428   //look at the calorimetry info
01429   fChargeAdc=hitInfo->GetCharge(CDTrackedHitInfo::kAdc);
01430   fChargeMip=hitInfo->GetCharge(CDTrackedHitInfo::kMip);
01431   fChargeSigCor=hitInfo->GetCharge(CDTrackedHitInfo::kSigCorr);
01432   fChargeSigLin=hitInfo->GetCharge(CDTrackedHitInfo::kSigLin);
01433   fChargePe=hitInfo->GetCharge(CDTrackedHitInfo::kPe);
01434   if (fChargePe!=0) fGain=fChargeSigLin/fChargePe;
01435   else fGain=-1;
01436 
01437   static Bool_t firstTime=true;
01438   if (fChargeMip>0 && fChargeSigCor>0 && firstTime){
01439     firstTime=false;
01440     fSigCorsPerMip=fChargeSigCor/fChargeMip;
01441     MAXMSG("CDAnalysis",Msg::kVerbose,100)
01442       <<"fSigCorsPerMip="<<fSigCorsPerMip<<endl;
01443   }
01444 
01445   //get the tracker evaluation of the event
01446   fResultEven=fTrackInfo->GetResult(0);
01447   fResultOdd=fTrackInfo->GetResult(1);
01448 }

Float_t CDAnalysis::ReCalibrate Float_t  chargeAdc,
Int_t  plane,
Int_t  strip,
Int_t  stripend
const [private]
 

Definition at line 7160 of file CDAnalysis.cxx.

References fChargeSigCor, fDoReCalibration, fSec, fSimFlag, Calibrator::GetDriftCorrected(), Calibrator::GetStripToStripCorrected(), Calibrator::GetTemperature(), Calibrator::Instance(), MAXMSG, and Calibrator::ReInitialise().

Referenced by ElectronResponse(), and StoppingMuonCalibration().

07162 {
07163   if (fDoReCalibration && fSimFlag==SimFlag::kData){
07164     MAXMSG("CDAnalysis",Msg::kInfo,10)
07165       <<"Running ReCalibrate: fSec="<<fSec
07166       <<", simFlag="<<fSimFlag<<endl;
07167     
07168     //get a calibrator
07169     Calibrator& cal=Calibrator::Instance();
07170     //VldTimeStamp (const time_t &t, const Int_t nsec)
07171     VldTimeStamp vldts(fSec,0);
07172     VldContext vc(Detector::kCalDet,fSimFlag,vldts);
07173     cal.ReInitialise(vc);
07174     MAXMSG("CDAnalysis",Msg::kVerbose,100)
07175       <<"Calibrator reinitialised sucessfully"<<endl;
07176     
07177     //get the seid
07178     PlexStripEndId seid(Detector::kCalDet,plane,strip,
07179                         static_cast<StripEnd::EStripEnd>(stripend));
07180     
07181     MAXMSG("CDAnalysis",Msg::kVerbose,100)
07182       <<"Now calibrating drift..."<<endl;
07183     //now calibrate: first drift, then sts
07184     Float_t tmpCharge=chargeAdc;
07185     tmpCharge=cal.GetDriftCorrected(tmpCharge,seid);
07186     MAXMSG("CDAnalysis",Msg::kVerbose,100)
07187     <<"Now calibrating sts..."<<endl;
07188     tmpCharge=cal.GetStripToStripCorrected(tmpCharge,seid);
07189     
07190     MAXMSG("CDAnalysis",Msg::kInfo,50)
07191       <<"ReCalibrate: fChargeSigCor="<<fChargeSigCor
07192       <<", newSigCor="<<tmpCharge
07193       <<", temperature="<<cal.GetTemperature()<<endl;
07194     
07195     //return the newly calibrated number
07196     return tmpCharge;
07197   }
07198   else {
07199     //just return the original value of sigcor
07200     return fChargeSigCor;
07201   }
07202 }

Int_t CDAnalysis::Rnd Double_t  x  )  const
 

Definition at line 2173 of file CDAnalysis.cxx.

02174 {
02175   Double_t xi=0;
02176 
02177   Double_t floatPart=modf(x,&xi); 
02178 
02179   //round up if necessary
02180   if (floatPart>0.5) xi++;
02181 
02182   return static_cast<Int_t>(xi);
02183 }

Int_t CDAnalysis::RunNumber2RunPeriod Int_t  run  )  const
 

Definition at line 611 of file CDAnalysis.cxx.

References run(), and runPeriod.

Referenced by WriteOutHistos().

00612 {
00613   //Key to Run Periods (as defined by CBS)
00614   //1   T11 2002 Near-Far        (30000s)
00615   //2   T11 2002 Far-Far         (40000s)
00616   //3   T11 2002 Far-Far   15deg (late 40000s)
00617   //4   T7  2002 Far-Far         (50000s)
00618   //5   T7  2003 Near-Far        (70000s)
00619   //6   T7  2003 Near Only 3m    (80000s)
00620   //7   T7  2003 Near Only 1m    (90000s)
00621   //8   T11 2003 Near Only norm  (100000s)
00622   //9   T11 2003 Near Only 45deg (101000s)
00623   //10  T11 2003 Near Only 30deg (late 101000s)
00624   //11  T11 2003 Near Only 15deg (102000s)
00625 
00626   Int_t runPeriod=0;
00627   if (run>=30000 && run<40000){
00628     runPeriod=1;
00629   }
00630   if (run>=40000 && run<50000){
00631     runPeriod=2;
00632   }
00633   else if (run>=50000 && run<60000){
00634     runPeriod=4;
00635   }
00636   else if (run>=60000 && run<70000){
00637     runPeriod=-1;//this is not defined
00638   }
00639   else if (run>=70000 && run<80000){
00640     runPeriod=5;
00641   }
00642   else if (run>=80000 && run<90000){
00643     runPeriod=6;
00644   }
00645   else if (run>=90000 && run<100000){
00646     runPeriod=7;
00647   }
00648   else if (run>=100000 && run<101000){
00649     runPeriod=8;
00650   }
00651   else if (run>=101000 && run<102000){
00652     runPeriod=9;//or 10, need run number
00653   }
00654   else if (run>=102000 && run<120000){
00655     runPeriod=11;
00656   }
00657   
00658   return runPeriod;
00659 }

void CDAnalysis::ScaleMap std::map< Int_t, Float_t > &  m,
const std::map< Int_t, Float_t > &  scaleFactor
const [private]
 

Definition at line 2187 of file CDAnalysis.cxx.

References MSG.

Referenced by CleanMuons().

02189 {
02190   MSG("CDAnalysis",Msg::kDebug) 
02191     <<" ** Running ScaleMap method... **"<<endl;
02192 
02193   if (m.size()==scaleFactor.size()){
02194     
02195     map<Int_t,Float_t>::iterator mIter=m.begin();
02196     map<Int_t,Float_t>::const_iterator scale=scaleFactor.begin();
02197 
02198     //loop over map and scale it
02199     while (mIter!=m.end()){
02200 
02201       //divide by the scale factor
02202       if (scale->second!=0){
02203         MSG("CDAnalysis",Msg::kVerbose)
02204           <<"mIter="<<mIter->second<<", scale="<<scale->second<<endl;
02205         mIter->second/=scale->second;
02206       }
02207       else MSG("CDAnalysis",Msg::kWarning)<<"Scale factor zero!"<<endl;
02208 
02209       mIter++;
02210       scale++;
02211     }
02212   }
02213   else{
02214     MSG("CDAnalysis",Msg::kWarning)
02215       <<"Not scaling map, vectors are different sizes!"<<endl;
02216   }
02217 
02218   MSG("CDAnalysis",Msg::kDebug) 
02219     <<" ** Finished ScaleMap method **"<<endl;
02220 }

void CDAnalysis::ScaleVector std::vector< Double_t > &  v,
Double_t  scaleFactor
const [private]
 

Definition at line 2144 of file CDAnalysis.cxx.

References MSG.

02146 {
02147   MSG("CDAnalysis",Msg::kDebug) 
02148     <<" ** Running ScaleVector method... **"<<endl;
02149 
02150   for (UInt_t i=0;i<v.size();i++) v[i]*=scaleFactor;
02151 
02152   MSG("CDAnalysis",Msg::kDebug) 
02153     <<" ** Finished ScaleVector method **"<<endl;
02154 }

void CDAnalysis::SetLoopVariables Int_t  entry  )  [private]
 

Definition at line 976 of file CDAnalysis.cxx.

References fEvents, fFafErr, fInCERTime, fInCERTimeBits, fKovADC1, fKovADC2, fKovADC3, fKovTimeStamp1, fKovTimeStamp2, fKovTimeStamp3, fNoOverlap, fNoOverlapBits, fOLChi2, fPIDInfo, fPIDType, fSnarlMaxTimeStamp, fSnarlMinTimeStamp, fSnarlTimeFrame, fSparseErr, fTickSinceLast, fTofADC0, fTofADC1, fTofADC2, fTofADCTimeStamp0, fTofADCTimeStamp1, fTofADCTimeStamp2, fTofTDC0, fTofTDC1, fTofTDC2, fTrackerTree, fTriggerPMT, fTrigSource, CDPIDInfo::GetFafErr(), CDPIDInfo::GetInCERTime(), CDPIDInfo::GetInCERTimeBits(), CDPIDInfo::GetKovADC1(), CDPIDInfo::GetKovADC2(), CDPIDInfo::GetKovADC3(), CDPIDInfo::GetKovTimeStamp1(), CDPIDInfo::GetKovTimeStamp2(), CDPIDInfo::GetKovTimeStamp3(), CDPIDInfo::GetNoOverlap(), CDPIDInfo::GetNoOverlapBits(), CDPIDInfo::GetOLChi2(), CDPIDInfo::GetPIDType(), CDPIDInfo::GetSnarlMaxTimeStamp(), CDPIDInfo::GetSnarlMinTimeStamp(), CDPIDInfo::GetSnarlTimeFrame(), CDPIDInfo::GetSparseErr(), CDPIDInfo::GetTickSinceLast(), CDPIDInfo::GetTofADC0(), CDPIDInfo::GetTofADC1(), CDPIDInfo::GetTofADC2(), CDPIDInfo::GetTofADCTimeStamp0(), CDPIDInfo::GetTofADCTimeStamp1(), CDPIDInfo::GetTofADCTimeStamp2(), CDPIDInfo::GetTofTDC0(), CDPIDInfo::GetTofTDC1(), CDPIDInfo::GetTofTDC2(), CDPIDInfo::GetTriggerPMT(), CDPIDInfo::GetTrigSource(), InitialiseLoopVariables(), InitialisePidVariables(), and MSG.

Referenced by BbVsGminos(), CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), PrintPIDStats(), StoppingMuonCalibration(), Template(), Template2(), TruthAnalysis(), TruthEnDep(), TruthEnDepFe(), TruthEventLength(), ValidateMC(), ValidatePIDInfo(), ValidateReco(), ValidateTrkHits(), ValidateTruth(), ValidateUnTrkHits(), and ValidateXTalkHits().

00977 {
00978   Float_t fract=ceil(fEvents/20.);
00979   
00980   if (ceil(((Float_t)event)/fract)==((Float_t)event)/fract){
00981     MSG("CDAnalysis",Msg::kInfo) 
00982       <<"Fraction of loop complete: "<<event 
00983       <<"/"<<fEvents<<"  ("
00984       <<(Int_t)(100.*event/fEvents)<<"%)"<<endl;
00985   }
00986 
00987   //get the snarl/event
00988   fTrackerTree->GetEvent(event); 
00989 
00990   //initialise snarl level variables
00991   this->InitialiseLoopVariables();
00992 
00993   this->InitialisePidVariables();
00994 
00995   //get the pid info
00996   if (fPIDInfo){
00997     fTriggerPMT=fPIDInfo->GetTriggerPMT();
00998     fFafErr=fPIDInfo->GetFafErr() ;
00999     fSparseErr=fPIDInfo->GetSparseErr();
01000     fTrigSource=fPIDInfo->GetTrigSource();
01001     fKovADC1=fPIDInfo->GetKovADC1() ;
01002     fKovTimeStamp1=fPIDInfo->GetKovTimeStamp1();
01003     fKovADC2=fPIDInfo->GetKovADC2();
01004     fKovTimeStamp2=fPIDInfo->GetKovTimeStamp2();
01005     fKovADC3=fPIDInfo->GetKovADC3();
01006     fKovTimeStamp3=fPIDInfo->GetKovTimeStamp3(); 
01007     fSnarlTimeFrame=fPIDInfo->GetSnarlTimeFrame();
01008     fSnarlMinTimeStamp=fPIDInfo->GetSnarlMinTimeStamp();
01009     fSnarlMaxTimeStamp=fPIDInfo->GetSnarlMaxTimeStamp();
01010     fTofTDC0=fPIDInfo->GetTofTDC0();//actual time of flight
01011     fTofTDC1=fPIDInfo->GetTofTDC1();
01012     fTofTDC2=fPIDInfo->GetTofTDC2();
01013     fTofADC0=fPIDInfo->GetTofADC0();
01014     fTofADC1=fPIDInfo->GetTofADC1();
01015     fTofADC2=fPIDInfo->GetTofADC2();
01016     /*
01017       kTofADCChannel0=ph.GetSpecialChannelContains("TADC0");
01018       kTofADCChannel1=ph.GetSpecialChannelContains("TTAG");
01019       if(kTofADCChannel1==0){
01020          kTofADCChannel1=ph.GetSpecialChannelContains("TADC1");
01021       }
01022       kTofADCChannel2=ph.GetSpecialChannelContains("TimingFid");
01023       if(kTofADCChannel2==0){
01024          kTofADCChannel2=ph.GetSpecialChannelContains("TADC2");
01025       }
01026       kTofTimeStampChannel=ph.GetSpecialChannelContains("TTIME");
01027     */
01028     fTofADCTimeStamp0=fPIDInfo->GetTofADCTimeStamp0();//TADC0
01029     fTofADCTimeStamp1=fPIDInfo->GetTofADCTimeStamp1();//TTAG || TADC1
01030     fTofADCTimeStamp2=fPIDInfo->GetTofADCTimeStamp2();//TimingFid |TADC2
01031     //TofTimeStamp=fPIDInfo->GetTofTimeStamp();//don't use
01032     fTickSinceLast=fPIDInfo->GetTickSinceLast();
01033     
01034     //these are the PID variables
01035     fNoOverlap=fPIDInfo->GetNoOverlap();
01036     fInCERTime=fPIDInfo->GetInCERTime();
01037     fPIDType=fPIDInfo->GetPIDType();
01038     fNoOverlapBits=fPIDInfo->GetNoOverlapBits();
01039     fInCERTimeBits=fPIDInfo->GetInCERTimeBits();
01040     fOLChi2=fPIDInfo->GetOLChi2();
01041   }
01042 }  

void CDAnalysis::SetRatioScEnToBeamEn  )  [private]
 

Definition at line 704 of file CDAnalysis.cxx.

References fRatioScEnToBeamEn, and MSG.

00705 {
00706   //using same selection of tracks as in data
00707   fRatioScEnToBeamEn=0.056064;//with new MK dEdx
00708   //fRatioScEnToBeamEn=0.0559147;//with new MK dEdx
00709   //fRatioScEnToBeamEn=0.05638;//orig number
00710   
00711   MSG("CDAnalysis",Msg::kInfo) 
00712     <<"Using Ratio ScEn/BeamEn="<<fRatioScEnToBeamEn<<endl;
00713 }

void CDAnalysis::SetRootFileObjects  )  [private]
 

Definition at line 513 of file CDAnalysis.cxx.

References SimFlag::AsString(), fBeamMomentum, fEndSnarl, fEndTime, fEvents, fNumDeadChips, fOptTree, fPIDInfo, fRunNumber, fSec, fSimFlag, fSnarl, fStartSnarl, fStartTime, fSubRun, fTemperature, fTrackerTree, fTrackInfo, fTrkHitInfo, fTrkOpt, fTruthHitInfo, fUnTrkHitInfo, fXTalkHits, Calibrator::GetDriftCalibrator(), Calibrator::Instance(), MSG, Calibrator::PrintConfig(), and CfgPromptConfigurable::Set().

00514 {
00515   MSG("CDAnalysis",Msg::kDebug)
00516     <<"Running the SetRootFileObjects method..."<<endl;
00517 
00518   //tracker options tree
00519   fOptTree->SetBranchAddress("SimFlag",&fSimFlag);
00520   fOptTree->SetBranchAddress("Run",&fRunNumber);
00521   fOptTree->SetBranchAddress("SubRun",&fSubRun);
00522   fOptTree->SetBranchAddress("TrackerOptions",fTrkOpt);
00523   fOptTree->SetBranchAddress("StartTime",&fStartTime);
00524   fOptTree->SetBranchAddress("EndTime",&fEndTime);
00525   fOptTree->SetBranchAddress("StartSnarl",&fStartSnarl);
00526   fOptTree->SetBranchAddress("EndSnarl",&fEndSnarl);
00527   fOptTree->SetBranchAddress("BeamMomentum",&fBeamMomentum);
00528 
00529   //set the number of events in the tree
00530   Int_t events=static_cast<Int_t>(fOptTree->GetEntries());
00531   MSG("CDAnalysis",Msg::kDebug)
00532     <<"OptTree has "<<events<<" events"<<endl;
00533   if (events>0){
00534     //get the snarl/event
00535     fOptTree->GetEvent(0); 
00536     MSG("CDAnalysis",Msg::kInfo)
00537       <<"File has run="<<fRunNumber<<", subrun="<<fSubRun
00538       <<", SimFlag="<<SimFlag::AsString(fSimFlag)
00539       <<", beam momentum="<<fBeamMomentum<<endl
00540       <<"Time="<<fStartTime<<"->"<<fEndTime
00541       <<", snarl="<<fStartSnarl<<"->"<<fEndSnarl<<endl; 
00542   }
00543 
00544   //set the branch to point at the track info object and pid
00545   fTrackerTree->SetBranchAddress("TrackInfo",&fTrackInfo);
00546   fTrackerTree->SetBranchAddress("Snarl",&fSnarl);
00547   fTrackerTree->SetBranchAddress("NumDeadChips",&fNumDeadChips);
00548   fTrackerTree->SetBranchAddress("Sec",&fSec);
00549   fTrackerTree->SetBranchAddress("Temperature",&fTemperature);
00550 
00551   //check and set pid info branch
00552   if (fTrackerTree->GetBranchStatus("PIDInfo")){
00553     fTrackerTree->SetBranchAddress("PIDInfo",&fPIDInfo);
00554   }
00555   else{
00556     MSG("CDAnalysis",Msg::kInfo)
00557       <<"PIDInfo branch does not exist, not setting tree address"<<endl;
00558   }
00559 
00560   //create the TClonesArrays
00561   fTrkHitInfo=new TClonesArray("CDTrackedHitInfo",1000);
00562   fUnTrkHitInfo=new TClonesArray("CDTrackedHitInfo",1000);
00563   fXTalkHits=new TClonesArray("CDXTalkHitInfo",1000);
00564 
00565   //set the branches to point to the tclonesarrays
00566   fTrackerTree->SetBranchAddress("StraightTrackedHitInfo",
00567                                  &fTrkHitInfo);
00568   fTrackerTree->SetBranchAddress("UnTrackedHitInfo",
00569                                  &fUnTrkHitInfo);
00570   fTrackerTree->SetBranchAddress("XTalkHitInfo",&fXTalkHits);
00571 
00572   //check and set truth hit info branch
00573   if (fTrackerTree->GetBranchStatus("TruthHitInfo")){
00574     fTruthHitInfo=new TClonesArray("CDTruthHitInfo",1000);
00575     fTrackerTree->SetBranchAddress("TruthHitInfo",&fTruthHitInfo);
00576   }
00577   else{
00578     MSG("CDAnalysis",Msg::kInfo)
00579       <<"TruthHitInfo branch does not exist"
00580       <<", not setting tree address"<<endl;
00581   }
00582 
00583   //set the number of events in the tree
00584   fEvents=static_cast<Int_t>(fTrackerTree->GetEntries());
00585 
00586   //get the first snarl/event
00587   if (fTrackerTree) fTrackerTree->GetEvent(0); 
00588   MSG("CDAnalysis",Msg::kInfo)
00589     <<"First snarl="<<fSnarl<<" (sec="<<fSec<<")"<<endl;
00590 
00591   //this is a really ugly, ugly, ugly place to do this...
00592   Calibrator& cal=Calibrator::Instance();  
00593   if (fRunNumber>=70000 && fRunNumber<80000){
00594     cout<<"Setting DriftCalibrator=PulserDriftCalScheme"<<endl;
00595     cal.Set("DriftCalibrator=PulserDriftCalScheme");
00596     cal.GetDriftCalibrator().Set("VATemperatureCalibration=on");
00597     cal.PrintConfig(cout);
00598   }
00599   else{//no tables for 2002 for using PulserDriftCalScheme
00600     cout<<"Setting DriftCalibrator=PulserSigLinCalScheme"<<endl;
00601     cal.Set("DriftCalibrator=PulserSigLinCalScheme");
00602     cal.GetDriftCalibrator().Set("VATemperatureCalibration=on");
00603     cal.PrintConfig(cout);
00604   }
00605 
00606   MSG("CDAnalysis",Msg::kDebug)
00607       <<"Finished the SetRootFileObjects method"<<endl;
00608 }

void CDAnalysis::SetScEnDepPerMEU  )  [private]
 

Definition at line 691 of file CDAnalysis.cxx.

References fScEnDepPerMEU, and MSG.

00692 {
00693   //using same selection of tracks as in data
00694   fScEnDepPerMEU=0.00195253*Munits::gigaelectronvolt;//new MK dEdx
00695   //fScEnDepPerMEU=0.00194761*Munits::gigaelectronvolt;//new MK dEdx
00696   //fScEnDepPerMEU=0.0296718*Munits::gigaelectronvolt;//orig number
00697 
00698   MSG("CDAnalysis",Msg::kInfo) 
00699     <<"Using ScEnDep per MEU="<<fScEnDepPerMEU<<endl;
00700 }

void CDAnalysis::SetSigCorPerMEU  )  [private]
 

Definition at line 663 of file CDAnalysis.cxx.

References fRunNumber, fSigCorPerMEU, fSimFlag, and MSG.

00664 {
00665   if (fSimFlag==SimFlag::kData){
00666     if (fRunNumber>70000 && fRunNumber<80000){
00667       fSigCorPerMEU=591.6;
00668     }
00669     else if (fRunNumber==100161){
00670       fSigCorPerMEU=377.2;
00671     }
00672     else{
00673       MSG("CDAnalysis",Msg::kWarning) 
00674         <<"no run number for sigcor per meu"<<endl;
00675     }
00676   }
00677   else if(fSimFlag==SimFlag::kMC){
00678     fSigCorPerMEU=667.104;
00679   }
00680   else{
00681     MSG("CDAnalysis",Msg::kWarning) 
00682       <<"SetSigCorPerMEU: SimFlag not set"<<endl;
00683   }
00684 
00685   MSG("CDAnalysis",Msg::kInfo) 
00686     <<"Using sigcor per MEU="<<fSigCorPerMEU<<endl;
00687 }

void CDAnalysis::StandardSanityChecks  )  const [private]
 

Definition at line 2130 of file CDAnalysis.cxx.

References fChargeAdc, fPlane, fStrip, fStripend, and MSG.

Referenced by CalcLastPlaneOnTrk(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), StoppingMuonCalibration(), and Template2().

02131 {
02132   //new check to not allow any capid errors
02133   if (fChargeAdc<1){
02134     MSG("CDAnalysis",Msg::kFatal)
02135       <<"Run has bad adcs!"<<endl
02136       <<"adc="<<fChargeAdc<<" ("<<fPlane<<":"<<fStrip<<":"<<fStripend
02137       <<")"<<endl;
02138     assert(false);
02139   }
02140 }

void CDAnalysis::StoppingMuonCalibration  ) 
 

Definition at line 7206 of file CDAnalysis.cxx.

References CalcAvStripForPSMuonCut(), CalcFirstLastPlane(), CalcLastPlaneOnTrkNoXTalk(), CalcLowUpScint_TofDiff(), CalcMeuPLCorrected(), CalcNumPlanesHit(), CalcPLCor(), CalcXYZ(), count, CutOnBadCalorimetry(), CutOnBadPedestals(), CutOnDeadChips(), CutOnEventLength(), CutOnFiducialVolume(), CutOnNumHitsPerPlane(), CutOnNumHitsPerPlane10(), CutOnNumPlanesHit(), CutOnOverlap(), CutOnPid(), CutOnPSMuons(), CutOnScint_TofDiff(), CutOnTrackQuality(), DrawResponsePlot(), ElectronResponse(), fAvStrip, fAvStrip1, fAvStrip2, fAvTemperature, fChargeAdc, fChargePe, fChargeSigCor, fDoReCalibration, fFirstPlane, FillEnVsDist(), FillProfHisto(), fKovADC1, fKovADC2, fKovADC3, fLowScint_Tof, fMeuVsEvLenCutM, fNumHitsPerPlane, fNumHitsPerPlane25, fNumHitsPerPlanePeCut10, fNumPlanesHit25, fNumPlanesHitAll, fNumPlanesHitPeCut, fNumPlanesHitPeCut10, fOLChi2, Form(), fOutFile, fPeakLastPlane, fPeakPlaneSigCors, fPlane, fResultEven, fResultOdd, fRunNumber, fS, fSec, fSigCorVsDistM, fSimFlag, fStCount, fStCount1, fStCount2, fStrip, fStripend, fStripsFromCentrePeCut, fTemperature, fTime, fTofADCTimeStamp1, fTofTDC0, fTofTDC2, fTrkHitInfo, fUnTrkHitInfo, fUpScint_Tof, fXTalkHits, GetEventLength(), GetEvLenMinMax(), GetLowUpTimeCuts(), VldTimeStamp::GetSec(), Calibrator::GetTemperature(), InitialiseLoopVariables(), Calibrator::Instance(), MAXMSG, MSG, OpenFile(), OpenTxtFile(), PrintPIDStats(), ReadInHitInfo(), ReCalibrate(), Calibrator::ReInitialise(), s(), SetLoopVariables(), StandardSanityChecks(), StraightTrack_Radius(), SumMapValues(), TGraphMinMax(), TrueHighLowEn(), and TruePLCor().

07207 {
07208   //open the output file for the histograms
07209   fOutFile=this->OpenFile(fRunNumber,"StopMuCal");
07210 
07211   //set the recalibration flag
07212   fDoReCalibration=false;
07213 
07214   VldTimeStamp ts;
07215   cout<<"Time in secs right now is:"<<ts.GetSec()<<endl;
07217   Int_t minRunTime=4;//is:1112976714
07218   if (ts.GetSec()>minRunTime){
07219     //analyse the electrons and fill histos
07220     this->ElectronResponse();
07221   }
07222 
07223   MSG("CDAnalysis",Msg::kInfo) 
07224     <<" ** Running StoppingMuonCalibration method... **"<<endl;
07225 
07226   vector<TH1F*> meuHistos(60);
07227   vector<TH1F*> sigCorNoPLCorHistos(60);
07228   //vector<TH1F*> adcNoPLCorHistos(60);//no adc info stored: June 2007
07229   for (Int_t i=0;i<60;i++){
07230     string sName="hMeuPlane";
07231     string sNameSigCor="hSigCorNoPLCorPlane";
07232     //string sNameAdc="hAdcNoPLCorPlane";
07233     string sNum=Form("%d",i);
07234     sName+=sNum;
07235     sNameSigCor+=sNum;
07236     //sNameAdc+=sNum;
07237 
07238     meuHistos[i]=new TH1F(sName.c_str(),sName.c_str(),300,-2,3000);
07239     meuHistos[i]->SetBit(TH1::kCanRebin);//leave this as is June/07
07240     //meuHistos[i]->Print();
07241 
07242     //added sigcor in June 2007
07243     sigCorNoPLCorHistos[i]=new TH1F
07244       (sNameSigCor.c_str(),sNameSigCor.c_str(),300,-2,3000);
07245     //adcNoPLCorHistos[i]=new TH1F
07246     //(sName.c_str(),sName.c_str(),300,-2,3000);
07247   }
07248   
07249   TH1F *hMeu=new TH1F("hMeu","hMeu",1000,-2,1000);
07250   hMeu->GetXaxis()->SetTitle("SigCors");
07251   hMeu->GetXaxis()->CenterTitle();
07252   hMeu->GetYaxis()->SetTitle("");
07253   hMeu->GetYaxis()->CenterTitle();
07254   hMeu->SetFillColor(0);
07255   hMeu->SetBit(TH1::kCanRebin);
07256 
07257   TH1F* hGeVPerMeu=new TH1F("hGeVPerMeu","hGeVPerMeu",3000,-0.001,0.3);
07258   hGeVPerMeu->SetFillColor(0);
07259   hGeVPerMeu->SetTitle("GeV/MEU");
07260   hGeVPerMeu->GetXaxis()->SetTitle("GeV/MEU");
07261   hGeVPerMeu->GetXaxis()->CenterTitle();
07262 
07263   TH1F *hMeuPLCor=new TH1F("hMeuPLCor","hMeuPLCor",1000,-2,1000);
07264   hMeuPLCor->GetXaxis()->SetTitle("SigCors");
07265   hMeuPLCor->GetXaxis()->CenterTitle();
07266   hMeuPLCor->GetYaxis()->SetTitle("");
07267   hMeuPLCor->GetYaxis()->CenterTitle();
07268   hMeuPLCor->SetFillColor(0);
07269   hMeuPLCor->SetBit(TH1::kCanRebin);
07270 
07271   TH1F *hMeuTruePLCor=new TH1F("hMeuTruePLCor","hMeuTruePLCor",
07272                                1000,-2,1000);
07273   hMeuTruePLCor->GetXaxis()->SetTitle("SigCors");
07274   hMeuTruePLCor->GetXaxis()->CenterTitle();
07275   hMeuTruePLCor->GetYaxis()->SetTitle("");
07276   hMeuTruePLCor->GetYaxis()->CenterTitle();
07277   hMeuTruePLCor->SetFillColor(0);
07278   hMeuTruePLCor->SetBit(TH1::kCanRebin);
07279 
07280   TH1F *hMeuOnlyEventLengthCut=new TH1F("hMeuOnlyEventLengthCut",
07281                                         "hMeuOnlyEventLengthCut",
07282                                         1000,-2,1000);
07283   hMeuOnlyEventLengthCut->GetXaxis()->SetTitle("SigCors");
07284   hMeuOnlyEventLengthCut->GetXaxis()->CenterTitle();
07285   hMeuOnlyEventLengthCut->GetYaxis()->SetTitle("");
07286   hMeuOnlyEventLengthCut->GetYaxis()->CenterTitle();
07287   hMeuOnlyEventLengthCut->SetFillColor(0);
07288   hMeuOnlyEventLengthCut->SetBit(TH1::kCanRebin);
07289 
07290   TH1F *hMeuOnlyEL_FidCut=new TH1F("hMeuOnlyEL_FidCut",
07291                                    "hMeuOnlyEL_FidCut",
07292                                    1000,-2,1000);
07293   hMeuOnlyEL_FidCut->GetXaxis()->SetTitle("SigCors");
07294   hMeuOnlyEL_FidCut->GetXaxis()->CenterTitle();
07295   hMeuOnlyEL_FidCut->GetYaxis()->SetTitle("");
07296   hMeuOnlyEL_FidCut->GetYaxis()->CenterTitle();
07297   hMeuOnlyEL_FidCut->SetFillColor(0);
07298   hMeuOnlyEL_FidCut->SetBit(TH1::kCanRebin);
07299 
07300   TH1F *hMeuOnlyEL_Fid_TimeCut=new TH1F("hMeuOnlyEL_Fid_TimeCut",
07301                                         "hMeuOnlyEL_Fid_TimeCut",
07302                                         1000,-2,1000);
07303   hMeuOnlyEL_Fid_TimeCut->GetXaxis()->SetTitle("SigCors");
07304   hMeuOnlyEL_Fid_TimeCut->GetXaxis()->CenterTitle();
07305   hMeuOnlyEL_Fid_TimeCut->GetYaxis()->SetTitle("");
07306   hMeuOnlyEL_Fid_TimeCut->GetYaxis()->CenterTitle();
07307   hMeuOnlyEL_Fid_TimeCut->SetFillColor(0);
07308   hMeuOnlyEL_Fid_TimeCut->SetBit(TH1::kCanRebin);
07309 
07310   TH1F *hMeuOnlyEL_TimeCut=new TH1F("hMeuOnlyEL_TimeCut",
07311                                    "hMeuOnlyEL_TimeCut",
07312                                    1000,-2,1000);
07313   hMeuOnlyEL_TimeCut->GetXaxis()->SetTitle("SigCors");
07314   hMeuOnlyEL_TimeCut->GetXaxis()->CenterTitle();
07315   hMeuOnlyEL_TimeCut->GetYaxis()->SetTitle("");
07316   hMeuOnlyEL_TimeCut->GetYaxis()->CenterTitle();
07317   hMeuOnlyEL_TimeCut->SetFillColor(0);
07318   hMeuOnlyEL_TimeCut->SetBit(TH1::kCanRebin);
07319 
07320   TH1F *hMeuOnlyEL_HppCut=new TH1F("hMeuOnlyEL_HppCut",
07321                                    "hMeuOnlyEL_HppCut",
07322                                    1000,-2,1000);
07323   hMeuOnlyEL_HppCut->GetXaxis()->SetTitle("SigCors");
07324   hMeuOnlyEL_HppCut->GetXaxis()->CenterTitle();
07325   hMeuOnlyEL_HppCut->GetYaxis()->SetTitle("");
07326   hMeuOnlyEL_HppCut->GetYaxis()->CenterTitle();
07327   hMeuOnlyEL_HppCut->SetFillColor(0);
07328   hMeuOnlyEL_HppCut->SetBit(TH1::kCanRebin);
07329 
07330   TH1F *hMeuOnlyPID_EventLengthCut=new TH1F("hMeuOnlyPID_EventLengthCut",
07331                                         "hMeuOnlyPID_EventLengthCut",
07332                                         1000,-2,1000);
07333   hMeuOnlyPID_EventLengthCut->GetXaxis()->SetTitle("SigCors");
07334   hMeuOnlyPID_EventLengthCut->GetXaxis()->CenterTitle();
07335   hMeuOnlyPID_EventLengthCut->GetYaxis()->SetTitle("");
07336   hMeuOnlyPID_EventLengthCut->GetYaxis()->CenterTitle();
07337   hMeuOnlyPID_EventLengthCut->SetFillColor(0);
07338   hMeuOnlyPID_EventLengthCut->SetBit(TH1::kCanRebin);
07339 
07340   TH1F *hMeuOnlyPID_EL_FidCut=new TH1F("hMeuOnlyPID_EL_FidCut",
07341                                    "hMeuOnlyPID_EL_FidCut",
07342                                    1000,-2,1000);
07343   hMeuOnlyPID_EL_FidCut->GetXaxis()->SetTitle("SigCors");
07344   hMeuOnlyPID_EL_FidCut->GetXaxis()->CenterTitle();
07345   hMeuOnlyPID_EL_FidCut->GetYaxis()->SetTitle("");
07346   hMeuOnlyPID_EL_FidCut->GetYaxis()->CenterTitle();
07347   hMeuOnlyPID_EL_FidCut->SetFillColor(0);
07348   hMeuOnlyPID_EL_FidCut->SetBit(TH1::kCanRebin);
07349 
07350   TH1F *hMeuOnlyPID_EL_Fid_TimeCut=new TH1F("hMeuOnlyPID_EL_Fid_TimeCut",
07351                                         "hMeuOnlyPID_EL_Fid_TimeCut",
07352                                         1000,-2,1000);
07353   hMeuOnlyPID_EL_Fid_TimeCut->GetXaxis()->SetTitle("SigCors");
07354   hMeuOnlyPID_EL_Fid_TimeCut->GetXaxis()->CenterTitle();
07355   hMeuOnlyPID_EL_Fid_TimeCut->GetYaxis()->SetTitle("");
07356   hMeuOnlyPID_EL_Fid_TimeCut->GetYaxis()->CenterTitle();
07357   hMeuOnlyPID_EL_Fid_TimeCut->SetFillColor(0);
07358   hMeuOnlyPID_EL_Fid_TimeCut->SetBit(TH1::kCanRebin);
07359 
07360   TH1F *hMeuOnlyPID_EL_TimeCut=new TH1F("hMeuOnlyPID_EL_TimeCut",
07361                                    "hMeuOnlyPID_EL_TimeCut",
07362                                    1000,-2,1000);
07363   hMeuOnlyPID_EL_TimeCut->GetXaxis()->SetTitle("SigCors");
07364   hMeuOnlyPID_EL_TimeCut->GetXaxis()->CenterTitle();
07365   hMeuOnlyPID_EL_TimeCut->GetYaxis()->SetTitle("");
07366   hMeuOnlyPID_EL_TimeCut->GetYaxis()->CenterTitle();
07367   hMeuOnlyPID_EL_TimeCut->SetFillColor(0);
07368   hMeuOnlyPID_EL_TimeCut->SetBit(TH1::kCanRebin);
07369 
07370   TH1F *hMeuOnlyPID_EL_HppCut=new TH1F("hMeuOnlyPID_EL_HppCut",
07371                                    "hMeuOnlyPID_EL_HppCut",
07372                                    1000,-2,1000);
07373   hMeuOnlyPID_EL_HppCut->GetXaxis()->SetTitle("SigCors");
07374   hMeuOnlyPID_EL_HppCut->GetXaxis()->CenterTitle();
07375   hMeuOnlyPID_EL_HppCut->GetYaxis()->SetTitle("");
07376   hMeuOnlyPID_EL_HppCut->GetYaxis()->CenterTitle();
07377   hMeuOnlyPID_EL_HppCut->SetFillColor(0);
07378   hMeuOnlyPID_EL_HppCut->SetBit(TH1::kCanRebin);
07379 
07380   TH1F *hMeuNoPidCut=new TH1F("hMeuNoPidCut","hMeuNoPidCut",
07381                               1000,-2,1000);
07382   hMeuNoPidCut->GetXaxis()->SetTitle("SigCors");
07383   hMeuNoPidCut->GetXaxis()->CenterTitle();
07384   hMeuNoPidCut->GetYaxis()->SetTitle("");
07385   hMeuNoPidCut->GetYaxis()->CenterTitle();
07386   hMeuNoPidCut->SetFillColor(0);
07387   hMeuNoPidCut->SetBit(TH1::kCanRebin);
07388 
07389   TH1F *hMeuNoEventLengthCut=new TH1F("hMeuNoEventLengthCut",
07390                                       "hMeuNoEventLengthCut",
07391                                       1000,-2,1000);
07392   hMeuNoEventLengthCut->GetXaxis()->SetTitle("SigCors");
07393   hMeuNoEventLengthCut->GetXaxis()->CenterTitle();
07394   hMeuNoEventLengthCut->GetYaxis()->SetTitle("");
07395   hMeuNoEventLengthCut->GetYaxis()->CenterTitle();
07396   hMeuNoEventLengthCut->SetFillColor(0);
07397   hMeuNoEventLengthCut->SetBit(TH1::kCanRebin);
07398 
07399   TH1F *hMeuNoFidVolCut=new TH1F("hMeuNoFidVolCut","hMeuNoFidVolCut",
07400                                  1000,-2,1000);
07401   hMeuNoFidVolCut->GetXaxis()->SetTitle("SigCors");
07402   hMeuNoFidVolCut->GetXaxis()->CenterTitle();
07403   hMeuNoFidVolCut->GetYaxis()->SetTitle("");
07404   hMeuNoFidVolCut->GetYaxis()->CenterTitle();
07405   hMeuNoFidVolCut->SetFillColor(0);
07406   hMeuNoFidVolCut->SetBit(TH1::kCanRebin);
07407 
07408   TH1F *hMeuNoTrackQualityCut=new TH1F("hMeuNoTrackQualityCut",
07409                                        "hMeuNoTrackQualityCut",
07410                                        1000,-2,1000);
07411   hMeuNoTrackQualityCut->GetXaxis()->SetTitle("SigCors");
07412   hMeuNoTrackQualityCut->GetXaxis()->CenterTitle();
07413   hMeuNoTrackQualityCut->GetYaxis()->SetTitle("");
07414   hMeuNoTrackQualityCut->GetYaxis()->CenterTitle();
07415   hMeuNoTrackQualityCut->SetFillColor(0);
07416   hMeuNoTrackQualityCut->SetBit(TH1::kCanRebin);
07417 
07418   TH1F *hMeuNoPSMuCut=new TH1F("hMeuNoPSMuCut","hMeuNoPSMuCut",
07419                                1000,-2,1000);
07420   hMeuNoPSMuCut->GetXaxis()->SetTitle("SigCors");
07421   hMeuNoPSMuCut->GetXaxis()->CenterTitle();
07422   hMeuNoPSMuCut->GetYaxis()->SetTitle("");
07423   hMeuNoPSMuCut->GetYaxis()->CenterTitle();
07424   hMeuNoPSMuCut->SetFillColor(0);
07425   hMeuNoPSMuCut->SetBit(TH1::kCanRebin);
07426 
07427   TH1F *hMeuNoHitsPerPlaneCut=new TH1F("hMeuNoHitsPerPlaneCut",
07428                                        "hMeuNoHitsPerPlaneCut",
07429                                        1000,-2,1000);
07430   hMeuNoHitsPerPlaneCut->GetXaxis()->SetTitle("SigCors");
07431   hMeuNoHitsPerPlaneCut->GetXaxis()->CenterTitle();
07432   hMeuNoHitsPerPlaneCut->GetYaxis()->SetTitle("");
07433   hMeuNoHitsPerPlaneCut->GetYaxis()->CenterTitle();
07434   hMeuNoHitsPerPlaneCut->SetFillColor(0);
07435   hMeuNoHitsPerPlaneCut->SetBit(TH1::kCanRebin);
07436 
07437   TH1F *hMeuNoHitsPerPlane10Cut=new TH1F("hMeuNoHitsPerPlane10Cut",
07438                                          "hMeuNoHitsPerPlane10Cut",
07439                                          1000,-2,1000);
07440   hMeuNoHitsPerPlane10Cut->GetXaxis()->SetTitle("SigCors");
07441   hMeuNoHitsPerPlane10Cut->GetXaxis()->CenterTitle();
07442   hMeuNoHitsPerPlane10Cut->GetYaxis()->SetTitle("");
07443   hMeuNoHitsPerPlane10Cut->GetYaxis()->CenterTitle();
07444   hMeuNoHitsPerPlane10Cut->SetFillColor(0);
07445   hMeuNoHitsPerPlane10Cut->SetBit(TH1::kCanRebin);
07446 
07447   TH1F *h15_18=new TH1F("h15_18","h15_18",1000,-2,1000);
07448   h15_18->GetXaxis()->SetTitle("SigCors");
07449   h15_18->GetXaxis()->CenterTitle();
07450   h15_18->GetYaxis()->SetTitle("");
07451   h15_18->GetYaxis()->CenterTitle();
07452   h15_18->SetFillColor(0);
07453   h15_18->SetBit(TH1::kCanRebin);
07454 
07455   TH1F *h10_16=new TH1F("h10_16","h10_16",1000,-2,1000);
07456   h10_16->GetXaxis()->SetTitle("SigCors");
07457   h10_16->GetXaxis()->CenterTitle();
07458   h10_16->GetYaxis()->SetTitle("");
07459   h10_16->GetYaxis()->CenterTitle();
07460   h10_16->SetFillColor(0);
07461   h10_16->SetBit(TH1::kCanRebin);
07462 
07463   TH1F *h10_10=new TH1F("h10_10","h10_10",1000,-2,1000);
07464   h10_10->GetXaxis()->SetTitle("SigCors");
07465   h10_10->GetXaxis()->CenterTitle();
07466   h10_10->GetYaxis()->SetTitle("");
07467   h10_10->GetYaxis()->CenterTitle();
07468   h10_10->SetFillColor(0);
07469   h10_10->SetBit(TH1::kCanRebin);
07470 
07471   TH1F *h14_16=new TH1F("h14_16","h14_16",1000,-2,1000);
07472   h14_16->GetXaxis()->SetTitle("SigCors");
07473   h14_16->GetXaxis()->CenterTitle();
07474   h14_16->GetYaxis()->SetTitle("");
07475   h14_16->GetYaxis()->CenterTitle();
07476   h14_16->SetFillColor(0);
07477   h14_16->SetBit(TH1::kCanRebin);
07478 
07479   TH1F *h14_16OL=new TH1F("h14_16OL","h14_16OL",1000,-2,1000);
07480   h14_16OL->GetXaxis()->SetTitle("SigCors");
07481   h14_16OL->GetXaxis()->CenterTitle();
07482   h14_16OL->GetYaxis()->SetTitle("");
07483   h14_16OL->GetYaxis()->CenterTitle();
07484   h14_16OL->SetFillColor(0);
07485   h14_16OL->SetBit(TH1::kCanRebin);
07486 
07487   TH1F *h14_16NoTrkCut=new TH1F("h14_16NoTrkCut","h14_16NoTrkCut",
07488                                 1000,-2,1000);
07489   h14_16NoTrkCut->GetXaxis()->SetTitle("SigCors");
07490   h14_16NoTrkCut->GetXaxis()->CenterTitle();
07491   h14_16NoTrkCut->GetYaxis()->SetTitle("");
07492   h14_16NoTrkCut->GetYaxis()->CenterTitle();
07493   h14_16NoTrkCut->SetFillColor(0);
07494   h14_16NoTrkCut->SetBit(TH1::kCanRebin);
07495 
07496   TH1F *h14_16TrkUV=new TH1F("h14_16TrkUV","h14_16TrkUV",
07497                                 1000,-2,1000);
07498   h14_16TrkUV->GetXaxis()->SetTitle("SigCors");
07499   h14_16TrkUV->GetXaxis()->CenterTitle();
07500   h14_16TrkUV->GetYaxis()->SetTitle("");
07501   h14_16TrkUV->GetYaxis()->CenterTitle();
07502   h14_16TrkUV->SetFillColor(0);
07503   h14_16TrkUV->SetBit(TH1::kCanRebin);
07504 
07505   TH1F *h14_16NoXTalk=new TH1F("h14_16NoXTalk","h14_16NoXTalk",
07506                                1000,-2,1000);
07507   h14_16NoXTalk->GetXaxis()->SetTitle("SigCors");
07508   h14_16NoXTalk->GetXaxis()->CenterTitle();
07509   h14_16NoXTalk->GetYaxis()->SetTitle("");
07510   h14_16NoXTalk->GetYaxis()->CenterTitle();
07511   h14_16NoXTalk->SetFillColor(0);
07512   h14_16NoXTalk->SetBit(TH1::kCanRebin);
07513 
07514   TH1F *h14_16O1=new TH1F("h14_16O1","h14_16O1",1000,-2,1000);
07515   h14_16O1->GetXaxis()->SetTitle("SigCors");
07516   h14_16O1->GetXaxis()->CenterTitle();
07517   h14_16O1->GetYaxis()->SetTitle("");
07518   h14_16O1->GetYaxis()->CenterTitle();
07519   h14_16O1->SetFillColor(0);
07520   h14_16O1->SetBit(TH1::kCanRebin);
07521 
07522   TH1F *h14_16O2=new TH1F("h14_16O2","h14_16O2",1000,-2,1000);
07523   h14_16O2->GetXaxis()->SetTitle("SigCors");
07524   h14_16O2->GetXaxis()->CenterTitle();
07525   h14_16O2->GetYaxis()->SetTitle("");
07526   h14_16O2->GetYaxis()->CenterTitle();
07527   h14_16O2->SetFillColor(0);
07528   h14_16O2->SetBit(TH1::kCanRebin);
07529 
07530   TH1F *h14_16E1=new TH1F("h14_16E1","h14_16E1",1000,-2,1000);
07531   h14_16E1->GetXaxis()->SetTitle("SigCors");
07532   h14_16E1->GetXaxis()->CenterTitle();
07533   h14_16E1->GetYaxis()->SetTitle("");
07534   h14_16E1->GetYaxis()->CenterTitle();
07535   h14_16E1->SetFillColor(0);
07536   h14_16E1->SetBit(TH1::kCanRebin);
07537 
07538   TH1F *h14_16E2=new TH1F("h14_16E2","h14_16E2",1000,-2,1000);
07539   h14_16E2->GetXaxis()->SetTitle("SigCors");
07540   h14_16E2->GetXaxis()->CenterTitle();
07541   h14_16E2->GetYaxis()->SetTitle("");
07542   h14_16E2->GetYaxis()->CenterTitle();
07543   h14_16E2->SetFillColor(0);
07544   h14_16E2->SetBit(TH1::kCanRebin);
07545 
07546   TH1F *h14_16TimeCut=new TH1F("h14_16TimeCut","h14_16TimeCut",
07547                                1000,-2,1000);
07548   h14_16TimeCut->GetXaxis()->SetTitle("SigCors");
07549   h14_16TimeCut->GetXaxis()->CenterTitle();
07550   h14_16TimeCut->GetYaxis()->SetTitle("");
07551   h14_16TimeCut->GetYaxis()->CenterTitle();
07552   h14_16TimeCut->SetFillColor(0);
07553   h14_16TimeCut->SetBit(TH1::kCanRebin);
07554 
07555   TH1F *h14_16TimeCutO1=new TH1F("h14_16TimeCutO1","h14_16TimeCutO1",
07556                                  1000,-2,1000);
07557   h14_16TimeCutO1->GetXaxis()->SetTitle("SigCors");
07558   h14_16TimeCutO1->GetXaxis()->CenterTitle();
07559   h14_16TimeCutO1->GetYaxis()->SetTitle("");
07560   h14_16TimeCutO1->GetYaxis()->CenterTitle();
07561   h14_16TimeCutO1->SetFillColor(0);
07562   h14_16TimeCutO1->SetBit(TH1::kCanRebin);
07563 
07564   TH1F *h14_16TimeCutO2=new TH1F("h14_16TimeCutO2","h14_16TimeCutO2",
07565                                  1000,-2,1000);
07566   h14_16TimeCutO2->GetXaxis()->SetTitle("SigCors");
07567   h14_16TimeCutO2->GetXaxis()->CenterTitle();
07568   h14_16TimeCutO2->GetYaxis()->SetTitle("");
07569   h14_16TimeCutO2->GetYaxis()->CenterTitle();
07570   h14_16TimeCutO2->SetFillColor(0);
07571   h14_16TimeCutO2->SetBit(TH1::kCanRebin);
07572 
07573   TH1F *h14_16TimeCutE1=new TH1F("h14_16TimeCutE1","h14_16TimeCutE1",
07574                                  1000,-2,1000);
07575   h14_16TimeCutE1->GetXaxis()->SetTitle("SigCors");
07576   h14_16TimeCutE1->GetXaxis()->CenterTitle();
07577   h14_16TimeCutE1->GetYaxis()->SetTitle("");
07578   h14_16TimeCutE1->GetYaxis()->CenterTitle();
07579   h14_16TimeCutE1->SetFillColor(0);
07580   h14_16TimeCutE1->SetBit(TH1::kCanRebin);
07581 
07582   TH1F *h14_16TimeCutE2=new TH1F("h14_16TimeCutE2","h14_16TimeCutE2",
07583                                  1000,-2,1000);
07584   h14_16TimeCutE2->GetXaxis()->SetTitle("SigCors");
07585   h14_16TimeCutE2->GetXaxis()->CenterTitle();
07586   h14_16TimeCutE2->GetYaxis()->SetTitle("");
07587   h14_16TimeCutE2->GetYaxis()->CenterTitle();
07588   h14_16TimeCutE2->SetFillColor(0);
07589   h14_16TimeCutE2->SetBit(TH1::kCanRebin);
07590 
07591   TH1F *h14_16Straight=new TH1F("h14_16Straight","14_16Straight",
07592                                 1000,-2,1000);
07593   h14_16Straight->GetXaxis()->SetTitle("SigCors");
07594   h14_16Straight->GetXaxis()->CenterTitle();
07595   h14_16Straight->GetYaxis()->SetTitle("");
07596   h14_16Straight->GetYaxis()->CenterTitle();
07597   h14_16Straight->SetFillColor(0);
07598   h14_16Straight->SetBit(TH1::kCanRebin);
07599 
07600   TH1F *h14_10=new TH1F("h14_10","h14_10",1000,-2,1000);
07601   h14_10->GetXaxis()->SetTitle("SigCors");
07602   h14_10->GetXaxis()->CenterTitle();
07603   h14_10->GetYaxis()->SetTitle("");
07604   h14_10->GetYaxis()->CenterTitle();
07605   h14_10->SetFillColor(0);
07606   h14_10->SetBit(TH1::kCanRebin);
07607 
07608   TH1F *h18_16=new TH1F("h18_16","h18_16",1000,-2,1000);
07609   h18_16->GetXaxis()->SetTitle("SigCors");
07610   h18_16->GetXaxis()->CenterTitle();
07611   h18_16->GetYaxis()->SetTitle("");
07612   h18_16->GetYaxis()->CenterTitle();
07613   h18_16->SetFillColor(0);
07614   h18_16->SetBit(TH1::kCanRebin);
07615 
07616   TH1F *h18_10=new TH1F("h18_10","h18_10",1000,-2,1000);
07617   h18_10->GetXaxis()->SetTitle("SigCors");
07618   h18_10->GetXaxis()->CenterTitle();
07619   h18_10->GetYaxis()->SetTitle("");
07620   h18_10->GetYaxis()->CenterTitle();
07621   h18_10->SetFillColor(0);
07622   h18_10->SetBit(TH1::kCanRebin);
07623 
07624   TH1F *hEvLenFe=new TH1F("hEvLenFe","hEvLenFe",62,0,62);
07625   hEvLenFe->GetXaxis()->SetTitle("Event Length (Planes of Fe)");
07626   hEvLenFe->GetXaxis()->CenterTitle();
07627   hEvLenFe->GetYaxis()->SetTitle("");
07628   hEvLenFe->GetYaxis()->CenterTitle();
07629   hEvLenFe->SetFillColor(0);
07630   hEvLenFe->SetBit(TH1::kCanRebin);
07631 
07632   TH1F *hOLChi2=new TH1F("hOLChi2","hOLChi2",200,0,10);
07633   hOLChi2->GetXaxis()->SetTitle("OLChi2");
07634   hOLChi2->GetXaxis()->CenterTitle();
07635   hOLChi2->GetYaxis()->SetTitle("");
07636   hOLChi2->GetYaxis()->CenterTitle();
07637   hOLChi2->SetFillColor(0);
07638   hOLChi2->SetLineWidth(3);
07639   hOLChi2->SetLineColor(1);
07640   //hOLChi2->SetBit(TH1::kCanRebin);
07641 
07642   TH1F *hOLChi2N_1=new TH1F("hOLChi2N_1","hOLChi2N_1",200,0,10);
07643   hOLChi2N_1->GetXaxis()->SetTitle("OLChi2");
07644   hOLChi2N_1->GetXaxis()->CenterTitle();
07645   hOLChi2N_1->GetYaxis()->SetTitle("");
07646   hOLChi2N_1->GetYaxis()->CenterTitle();
07647   hOLChi2N_1->SetFillColor(0);
07648   hOLChi2N_1->SetLineWidth(3);
07649   hOLChi2N_1->SetLineColor(2);
07650   //hOLChi2N_1->SetBit(TH1::kCanRebin);
07651 
07652   TH1F *hOLChi2N=new TH1F("hOLChi2N","hOLChi2N",200,0,10);
07653   hOLChi2N->GetXaxis()->SetTitle("OLChi2");
07654   hOLChi2N->GetXaxis()->CenterTitle();
07655   hOLChi2N->GetYaxis()->SetTitle("");
07656   hOLChi2N->GetYaxis()->CenterTitle();
07657   hOLChi2N->SetFillColor(0);
07658   hOLChi2N->SetLineWidth(3);
07659   hOLChi2N->SetLineColor(4);
07660   //hOLChi2N->SetBit(TH1::kCanRebin);
07661 
07662   TProfile* pSigCorVsOLChi2Sum=new TProfile("pSigCorVsOLChi2Sum",
07663                                             "pSigCorVsOLChi2Sum",
07664                                             200,0,10);
07665 
07666   TProfile* pSigCorVsOLChi2=new TProfile("pSigCorVsOLChi2",
07667                                          "pSigCorVsOLChi2",200,0,10);
07668 
07669   TProfile* pSigCorVsRange=new TProfile("pSigCorVsRange",
07670                                         "pSigCorVsRange",62,0,62);
07671 
07672   //sum of all strip ends, normal and offset planes
07673   //tracked
07674   TProfile* pSigCorVsPlane=new TProfile("pSigCorVsPlane",
07675                                         "pSigCorVsPlane",
07676                                         62,0,62);
07677   TProfile* pSigCorVsOsPlane=new TProfile("pSigCorVsOsPlane",
07678                                           "pSigCorVsOsPlane",
07679                                           62,0,62);
07680 
07681   //xtalk + untracked hits
07682   TProfile* pSigCorVsPlaneX=new TProfile("pSigCorVsPlaneX",
07683                                          "pSigCorVsPlaneX",
07684                                          62,0,62);
07685   TProfile* pSigCorVsOsPlaneX=new TProfile("pSigCorVsOsPlaneX",
07686                                            "pSigCorVsOsPlaneX",
07687                                            62,0,62);
07688 
07689   //total
07690   TProfile* pSigCorVsPlaneT=new TProfile("pSigCorVsPlaneT",
07691                                          "pSigCorVsPlaneT",
07692                                          62,0,62);
07693   TProfile* pSigCorVsOsPlaneT=new TProfile("pSigCorVsOsPlaneT",
07694                                            "pSigCorVsOsPlaneT",
07695                                            62,0,62);
07696 
07697   //individual strip ends
07698   //tracked
07699   TProfile* pSigCorVsPlaneO1=new TProfile("pSigCorVsPlaneO1",
07700                                           "pSigCorVsPlaneO1",
07701                                           62,0,62);
07702   TProfile* pSigCorVsPlaneO2=new TProfile("pSigCorVsPlaneO2",
07703                                           "pSigCorVsPlaneO2",
07704                                           62,0,62);
07705   TProfile* pSigCorVsPlaneE1=new TProfile("pSigCorVsPlaneE1",
07706                                           "pSigCorVsPlaneE1",
07707                                           62,0,62);
07708   TProfile* pSigCorVsPlaneE2=new TProfile("pSigCorVsPlaneE2",
07709                                           "pSigCorVsPlaneE2",
07710                                           62,0,62);
07711   //xtalk + untracked hits
07712   TProfile* pSigCorVsPlaneO1X=new TProfile("pSigCorVsPlaneO1X",
07713                                           "pSigCorVsPlaneO1X",
07714                                           62,0,62);
07715   TProfile* pSigCorVsPlaneO2X=new TProfile("pSigCorVsPlaneO2X",
07716                                           "pSigCorVsPlaneO2X",
07717                                           62,0,62);
07718   TProfile* pSigCorVsPlaneE1X=new TProfile("pSigCorVsPlaneE1X",
07719                                           "pSigCorVsPlaneE1X",
07720                                           62,0,62);
07721   TProfile* pSigCorVsPlaneE2X=new TProfile("pSigCorVsPlaneE2X",
07722                                           "pSigCorVsPlaneE2X",
07723                                           62,0,62);
07724   //total
07725   TProfile* pSigCorVsPlaneO1T=new TProfile("pSigCorVsPlaneO1T",
07726                                           "pSigCorVsPlaneO1T",
07727                                           62,0,62);
07728   TProfile* pSigCorVsPlaneO2T=new TProfile("pSigCorVsPlaneO2T",
07729                                           "pSigCorVsPlaneO2T",
07730                                           62,0,62);
07731   TProfile* pSigCorVsPlaneE1T=new TProfile("pSigCorVsPlaneE1T",
07732                                           "pSigCorVsPlaneE1T",
07733                                           62,0,62);
07734   TProfile* pSigCorVsPlaneE2T=new TProfile("pSigCorVsPlaneE2T",
07735                                           "pSigCorVsPlaneE2T",
07736                                           62,0,62);
07737 
07738   //individual strip ends - offset planes
07739   //tracked
07740   TProfile* pSigCorVsOsPlaneO1=new TProfile("pSigCorVsOsPlaneO1",
07741                                             "pSigCorVsOsPlaneO1",
07742                                             62,0,62);
07743   TProfile* pSigCorVsOsPlaneO2=new TProfile("pSigCorVsOsPlaneO2",
07744                                             "pSigCorVsOsPlaneO2",
07745                                             62,0,62);
07746   TProfile* pSigCorVsOsPlaneE1=new TProfile("pSigCorVsOsPlaneE1",
07747                                             "pSigCorVsOsPlaneE1",
07748                                             62,0,62);
07749   TProfile* pSigCorVsOsPlaneE2=new TProfile("pSigCorVsOsPlaneE2",
07750                                             "pSigCorVsOsPlaneE2",
07751                                             62,0,62);
07752 
07753   //xtalk + untracked hits
07754   TProfile* pSigCorVsOsPlaneO1X=new TProfile("pSigCorVsOsPlaneO1X",
07755                                              "pSigCorVsOsPlaneO1X",
07756                                              62,0,62);
07757   TProfile* pSigCorVsOsPlaneO2X=new TProfile("pSigCorVsOsPlaneO2X",
07758                                             "pSigCorVsOsPlaneO2X",
07759                                             62,0,62);
07760   TProfile* pSigCorVsOsPlaneE1X=new TProfile("pSigCorVsOsPlaneE1X",
07761                                             "pSigCorVsOsPlaneE1X",
07762                                             62,0,62);
07763   TProfile* pSigCorVsOsPlaneE2X=new TProfile("pSigCorVsOsPlaneE2X",
07764                                             "pSigCorVsOsPlaneE2X",
07765                                             62,0,62);
07766   //total
07767   TProfile* pSigCorVsOsPlaneO1T=new TProfile("pSigCorVsOsPlaneO1T",
07768                                             "pSigCorVsOsPlaneO1T",
07769                                             62,0,62);
07770   TProfile* pSigCorVsOsPlaneO2T=new TProfile("pSigCorVsOsPlaneO2T",
07771                                             "pSigCorVsOsPlaneO2T",
07772                                             62,0,62);
07773   TProfile* pSigCorVsOsPlaneE1T=new TProfile("pSigCorVsOsPlaneE1T",
07774                                             "pSigCorVsOsPlaneE1T",
07775                                             62,0,62);
07776   TProfile* pSigCorVsOsPlaneE2T=new TProfile("pSigCorVsOsPlaneE2T",
07777                                             "pSigCorVsOsPlaneE2T",
07778                                             62,0,62);
07779 
07780   TProfile* pMeuVsHit_PlCut=new TProfile("pMeuVsHit_PlCut",
07781                                          "pMeuVsHit_PlCut",120,0,12);
07782   pMeuVsHit_PlCut->SetTitle("MEU vs Hits/Plane Cut");
07783   pMeuVsHit_PlCut->GetXaxis()->SetTitle("Hits/Plane Cut");
07784   pMeuVsHit_PlCut->GetXaxis()->CenterTitle();
07785   pMeuVsHit_PlCut->GetYaxis()->SetTitle("SigCors per MEU");
07786   pMeuVsHit_PlCut->GetYaxis()->CenterTitle();
07787   pMeuVsHit_PlCut->SetFillColor(0);
07788 
07789   TProfile* pMeuVsHit_PlCut10=new TProfile("pMeuVsHit_PlCut10",
07790                                            "pMeuVsHit_PlCut10",
07791                                            120,0,12);
07792   pMeuVsHit_PlCut10->SetTitle("MEU vs Hits/Plane Cut");
07793   pMeuVsHit_PlCut10->GetXaxis()->SetTitle("Hits/Plane Cut");
07794   pMeuVsHit_PlCut10->GetXaxis()->CenterTitle();
07795   pMeuVsHit_PlCut10->GetYaxis()->SetTitle("SigCors per MEU");
07796   pMeuVsHit_PlCut10->GetYaxis()->CenterTitle();
07797   pMeuVsHit_PlCut10->SetFillColor(0);
07798 
07799   TProfile* pMeuVsLowTimeCutN_1=new TProfile("pMeuVsLowTimeCutN_1",
07800                                              "pMeuVsLowTimeCutN_1",
07801                                              50,-500,500);
07802   pMeuVsLowTimeCutN_1->SetTitle("MEU vs Time Cut");
07803   pMeuVsLowTimeCutN_1->GetXaxis()->SetTitle("Time Cut");
07804   pMeuVsLowTimeCutN_1->GetXaxis()->CenterTitle();
07805   pMeuVsLowTimeCutN_1->GetYaxis()->SetTitle("SigCors per MEU");
07806   pMeuVsLowTimeCutN_1->GetYaxis()->CenterTitle();
07807   pMeuVsLowTimeCutN_1->SetFillColor(0);
07808   pMeuVsLowTimeCutN_1->SetLineColor(2);
07809 
07810   TProfile* pMeuVsLowTimeCutN=new TProfile("pMeuVsLowTimeCutN",
07811                                            "pMeuVsLowTimeCutN",
07812                                            50,-500,500);
07813   pMeuVsLowTimeCutN->SetTitle("MEU vs Time Cut");
07814   pMeuVsLowTimeCutN->GetXaxis()->SetTitle("Time Cut");
07815   pMeuVsLowTimeCutN->GetXaxis()->CenterTitle();
07816   pMeuVsLowTimeCutN->GetYaxis()->SetTitle("SigCors per MEU");
07817   pMeuVsLowTimeCutN->GetYaxis()->CenterTitle();
07818   pMeuVsLowTimeCutN->SetFillColor(0);
07819   pMeuVsLowTimeCutN->SetLineColor(4);
07820 
07821   TProfile* pMeuVsUpTimeCutN_1=new TProfile("pMeuVsUpTimeCutN_1",
07822                                             "pMeuVsUpTimeCutN_1",
07823                                             50,-500,500);
07824   pMeuVsUpTimeCutN_1->SetTitle("MEU vs Time Cut");
07825   pMeuVsUpTimeCutN_1->GetXaxis()->SetTitle("Time Cut");
07826   pMeuVsUpTimeCutN_1->GetXaxis()->CenterTitle();
07827   pMeuVsUpTimeCutN_1->GetYaxis()->SetTitle("SigCors per MEU");
07828   pMeuVsUpTimeCutN_1->GetYaxis()->CenterTitle();
07829   pMeuVsUpTimeCutN_1->SetFillColor(0);
07830   pMeuVsUpTimeCutN_1->SetLineColor(2);
07831 
07832   TProfile* pMeuVsUpTimeCutN=new TProfile("pMeuVsUpTimeCutN",
07833                                           "pMeuVsUpTimeCutN",
07834                                           50,-500,500);
07835   pMeuVsUpTimeCutN->SetTitle("MEU vs Time Cut");
07836   pMeuVsUpTimeCutN->GetXaxis()->SetTitle("Time Cut");
07837   pMeuVsUpTimeCutN->GetXaxis()->CenterTitle();
07838   pMeuVsUpTimeCutN->GetYaxis()->SetTitle("SigCors per MEU");
07839   pMeuVsUpTimeCutN->GetYaxis()->CenterTitle();
07840   pMeuVsUpTimeCutN->SetFillColor(0);
07841   pMeuVsUpTimeCutN->SetLineColor(4);
07842 
07843   TProfile* pMeuVsLowEvLenCutN=new TProfile("pMeuVsLowEvLenCutN",
07844                                         "pMeuVsLowEvLenCutN",62,0,62);
07845   pMeuVsLowEvLenCutN->SetTitle("MEU vs Event Length Cut");
07846   pMeuVsLowEvLenCutN->GetXaxis()->SetTitle("Lower Event Length Cut");
07847   pMeuVsLowEvLenCutN->GetXaxis()->CenterTitle();
07848   pMeuVsLowEvLenCutN->GetYaxis()->SetTitle("SigCors per MEU");
07849   pMeuVsLowEvLenCutN->GetYaxis()->CenterTitle();
07850   pMeuVsLowEvLenCutN->SetFillColor(0);
07851 
07852   TProfile* pMeuVsLowEvLenCutNormN=new TProfile
07853     ("pMeuVsLowEvLenCutNormN","pMeuVsLowEvLenCutNormN",62,0,62);
07854   pMeuVsLowEvLenCutNormN->SetTitle("Normalised MEU vs Event Length Cut");
07855   pMeuVsLowEvLenCutNormN->GetXaxis()->SetTitle("Lower Event Length Cut");
07856   pMeuVsLowEvLenCutNormN->GetXaxis()->CenterTitle();
07857   pMeuVsLowEvLenCutNormN->GetYaxis()->SetTitle("Normalised SigCors/MEU");
07858   pMeuVsLowEvLenCutNormN->GetYaxis()->CenterTitle();
07859   pMeuVsLowEvLenCutNormN->SetFillColor(0);
07860 
07861   TProfile* pMeuVsLowEvLenCutN_1=new TProfile
07862     ("pMeuVsLowEvLenCutN_1","pMeuVsLowEvLenCutN_1",62,0,62);
07863   pMeuVsLowEvLenCutN_1->SetTitle("MEU vs Event Length Cut");
07864   pMeuVsLowEvLenCutN_1->GetXaxis()->SetTitle("Lower Event Length Cut");
07865   pMeuVsLowEvLenCutN_1->GetXaxis()->CenterTitle();
07866   pMeuVsLowEvLenCutN_1->GetYaxis()->SetTitle("SigCors per MEU");
07867   pMeuVsLowEvLenCutN_1->GetYaxis()->CenterTitle();
07868   pMeuVsLowEvLenCutN_1->SetFillColor(0);
07869 
07870   TProfile* pMeuVsLowEvLenCutNormN_1=new TProfile
07871     ("pMeuVsLowEvLenCutNormN_1","pMeuVsLowEvLenCutNormN_1",62,0,62);
07872   pMeuVsLowEvLenCutNormN_1->SetTitle
07873     ("Normalised MEU vs Event Length Cut");
07874   pMeuVsLowEvLenCutNormN_1->GetXaxis()->SetTitle
07875     ("Lower Event Length Cut");
07876   pMeuVsLowEvLenCutNormN_1->GetXaxis()->CenterTitle();
07877   pMeuVsLowEvLenCutNormN_1->GetYaxis()->SetTitle
07878     ("Normalised SigCors/MEU");
07879   pMeuVsLowEvLenCutNormN_1->GetYaxis()->CenterTitle();
07880   pMeuVsLowEvLenCutNormN_1->SetFillColor(0);
07881 
07882   TProfile* pMeuVsUpEvLenCutN=new TProfile("pMeuVsUpEvLenCutN",
07883                                         "pMeuVsUpEvLenCutN",62,0,62);
07884   pMeuVsUpEvLenCutN->SetTitle("MEU vs Event Length Cut");
07885   pMeuVsUpEvLenCutN->GetXaxis()->SetTitle("Lower Event Length Cut");
07886   pMeuVsUpEvLenCutN->GetXaxis()->CenterTitle();
07887   pMeuVsUpEvLenCutN->GetYaxis()->SetTitle("SigCors per MEU");
07888   pMeuVsUpEvLenCutN->GetYaxis()->CenterTitle();
07889   pMeuVsUpEvLenCutN->SetFillColor(0);
07890 
07891   TProfile* pMeuVsUpEvLenCutNormN=new TProfile("pMeuVsUpEvLenCutNormN",
07892                                         "pMeuVsUpEvLenCutNormN",62,0,62);
07893   pMeuVsUpEvLenCutNormN->SetTitle("Normalised MEU vs Event Length Cut");
07894   pMeuVsUpEvLenCutNormN->GetXaxis()->SetTitle("Lower Event Length Cut");
07895   pMeuVsUpEvLenCutNormN->GetXaxis()->CenterTitle();
07896   pMeuVsUpEvLenCutNormN->GetYaxis()->SetTitle("Normalised SigCors/MEU");
07897   pMeuVsUpEvLenCutNormN->GetYaxis()->CenterTitle();
07898   pMeuVsUpEvLenCutNormN->SetFillColor(0);
07899 
07900   TProfile* pMeuVsUpEvLenCutN_1=new TProfile("pMeuVsUpEvLenCutN_1",
07901                                         "pMeuVsUpEvLenCutN_1",62,0,62);
07902   pMeuVsUpEvLenCutN_1->SetTitle("MEU vs Event Length Cut");
07903   pMeuVsUpEvLenCutN_1->GetXaxis()->SetTitle("Lower Event Length Cut");
07904   pMeuVsUpEvLenCutN_1->GetXaxis()->CenterTitle();
07905   pMeuVsUpEvLenCutN_1->GetYaxis()->SetTitle("SigCors per MEU");
07906   pMeuVsUpEvLenCutN_1->GetYaxis()->CenterTitle();
07907   pMeuVsUpEvLenCutN_1->SetFillColor(0);
07908 
07909   TProfile* pMeuVsUpEvLenCutNormN_1=new TProfile
07910     ("pMeuVsUpEvLenCutNormN_1","pMeuVsUpEvLenCutNormN_1",62,0,62);
07911   pMeuVsUpEvLenCutNormN_1->SetTitle
07912     ("Normalised MEU vs Event Length Cut");
07913   pMeuVsUpEvLenCutNormN_1->GetXaxis()->SetTitle
07914     ("Lower Event Length Cut");
07915   pMeuVsUpEvLenCutNormN_1->GetXaxis()->CenterTitle();
07916   pMeuVsUpEvLenCutNormN_1->GetYaxis()->SetTitle
07917     ("Normalised SigCors/MEU");
07918   pMeuVsUpEvLenCutNormN_1->GetYaxis()->CenterTitle();
07919   pMeuVsUpEvLenCutNormN_1->SetFillColor(0);
07920 
07921   TProfile* pMeuVsStraightness=new TProfile("pMeuVsStraightness",
07922                                             "pMeuVsStraightness",
07923                                             100,-0.025,0.6);
07924   pMeuVsStraightness->SetTitle("MEU Vs TrackStraightness");
07925   pMeuVsStraightness->GetXaxis()->
07926     SetTitle("Straightness Radius Cut (m from centre)");
07927   pMeuVsStraightness->GetXaxis()->CenterTitle();
07928   pMeuVsStraightness->GetYaxis()->SetTitle("MEU");
07929   pMeuVsStraightness->GetYaxis()->CenterTitle();
07930   pMeuVsStraightness->SetFillColor(0);
07931 
07932   TProfile* pMeuVsStraightnessN=new TProfile("pMeuVsStraightnessN",
07933                                              "pMeuVsStraightnessN",
07934                                              100,-0.025,0.6);
07935   pMeuVsStraightnessN->SetTitle("Normalised MEU Vs TrackStraightness");
07936   pMeuVsStraightnessN->GetXaxis()->
07937     SetTitle("Straightness Radius Cut (m from centre)");
07938   pMeuVsStraightnessN->GetXaxis()->CenterTitle();
07939   pMeuVsStraightnessN->GetYaxis()->SetTitle("Normalised MEU");
07940   pMeuVsStraightnessN->GetYaxis()->CenterTitle();
07941   pMeuVsStraightnessN->SetFillColor(0);
07942 
07943   TH1F *hStripsFromCentre=new TH1F("hStripsFromCentre",
07944                                    "hStripsFromCentre",12,0,12);
07945   hStripsFromCentre->GetXaxis()->SetTitle("Strips from Centre");
07946   hStripsFromCentre->GetXaxis()->CenterTitle();
07947   hStripsFromCentre->GetYaxis()->SetTitle("");
07948   hStripsFromCentre->GetYaxis()->CenterTitle();
07949   hStripsFromCentre->SetFillColor(0);
07950   //hStripsFromCentre->SetBit(TH1::kCanRebin);
07951 
07952   TH1F *hStripsFromCentrePeCut=new TH1F("hStripsFromCentrePeCut",
07953                                         "hStripsFromCentrePeCut",
07954                                         14,0,14);
07955   hStripsFromCentrePeCut->GetXaxis()->SetTitle("Strips from Centre");
07956   hStripsFromCentrePeCut->GetXaxis()->CenterTitle();
07957   hStripsFromCentrePeCut->GetYaxis()->SetTitle("");
07958   hStripsFromCentrePeCut->GetYaxis()->CenterTitle();
07959   hStripsFromCentrePeCut->SetFillColor(0);
07960   //hStripsFromCentrePeCut->SetBit(TH1::kCanRebin);
07961 
07962   TH1F *hStripsFromCentrePeCutN_1=new TH1F("hStripsFromCentrePeCutN_1",
07963                                         "hStripsFromCentrePeCutN_1",
07964                                         14,0,14);
07965   hStripsFromCentrePeCutN_1->GetXaxis()->SetTitle("Strips from Centre");
07966   hStripsFromCentrePeCutN_1->GetXaxis()->CenterTitle();
07967   hStripsFromCentrePeCutN_1->GetYaxis()->SetTitle("");
07968   hStripsFromCentrePeCutN_1->GetYaxis()->CenterTitle();
07969   hStripsFromCentrePeCutN_1->SetFillColor(0);
07970   hStripsFromCentrePeCutN_1->SetLineColor(2);
07971   //hStripsFromCentrePeCutN_1->SetBit(TH1::kCanRebin);
07972 
07973   TH1F *hStripsFromCentrePeCutN=new TH1F("hStripsFromCentrePeCutN",
07974                                         "hStripsFromCentrePeCutN",
07975                                         14,0,14);
07976   hStripsFromCentrePeCutN->GetXaxis()->SetTitle("Strips from Centre");
07977   hStripsFromCentrePeCutN->GetXaxis()->CenterTitle();
07978   hStripsFromCentrePeCutN->GetYaxis()->SetTitle("");
07979   hStripsFromCentrePeCutN->GetYaxis()->CenterTitle();
07980   hStripsFromCentrePeCutN->SetFillColor(0);
07981   hStripsFromCentrePeCutN->SetLineColor(4);
07982   //hStripsFromCentrePeCutN->SetBit(TH1::kCanRebin);
07983 
07984   TProfile* pMeuVsStripCut=new TProfile("pMeuVsStripCut",
07985                                         "pMeuVsStripCut",
07986                                         12,0,12);
07987   pMeuVsStripCut->SetTitle("MEU Vs Strips from Centre");
07988   pMeuVsStripCut->GetXaxis()->
07989     SetTitle("Strip Cut (strips from centre)");
07990   pMeuVsStripCut->GetXaxis()->CenterTitle();
07991   pMeuVsStripCut->GetYaxis()->SetTitle("MEU");
07992   pMeuVsStripCut->GetYaxis()->CenterTitle();
07993   pMeuVsStripCut->SetFillColor(0);
07994 
07995   TProfile* pMeuVsStripCutPeCut=new TProfile("pMeuVsStripCutPeCut",
07996                                              "pMeuVsStripCutPeCut",
07997                                              14,0,14);
07998   pMeuVsStripCutPeCut->SetTitle("MEU Vs Strips from Centre (PeCut)");
07999   pMeuVsStripCutPeCut->GetXaxis()->
08000     SetTitle("Strip Cut (strips from centre)");
08001   pMeuVsStripCutPeCut->GetXaxis()->CenterTitle();
08002   pMeuVsStripCutPeCut->GetYaxis()->SetTitle("MEU");
08003   pMeuVsStripCutPeCut->GetYaxis()->CenterTitle();
08004   pMeuVsStripCutPeCut->SetFillColor(0);
08005 
08006   fS="Strip Vs Plane: Av. SigCor in Track Window";
08007   TProfile2D* pStVsPlWin=new TProfile2D("pStVsPlWin",fS.c_str(),
08008                                       64,-2,62,30,-3,27);
08009   pStVsPlWin->GetXaxis()->SetTitle("Plane");
08010   pStVsPlWin->GetXaxis()->CenterTitle();
08011   pStVsPlWin->GetYaxis()->SetTitle("Strip");
08012   pStVsPlWin->GetYaxis()->CenterTitle();
08013   pStVsPlWin->SetFillColor(0);
08014   //pStVsPlWin->SetMaximum(15000);
08015 
08016   fS="Av. Fraction of MEU";
08017   TProfile2D* pStVsPlWinFract=new TProfile2D("pStVsPlWinFract",
08018                                              fS.c_str(),
08019                                              64,-2,62,30,-3,27);
08020   pStVsPlWinFract->GetXaxis()->SetTitle("Plane");
08021   pStVsPlWinFract->GetXaxis()->CenterTitle();
08022   pStVsPlWinFract->GetYaxis()->SetTitle("Strip");
08023   pStVsPlWinFract->GetYaxis()->CenterTitle();
08024   pStVsPlWinFract->SetFillColor(0);
08025   //pStVsPlWinFract->SetMaximum(15000);
08026 
08027   fS="Strip Vs Plane: Number of Hits in Track Window";
08028   TH2F* hStVsPlNum=new TH2F("hStVsPlNum",fS.c_str(),
08029                           64,-2,62,30,-3,27);
08030   hStVsPlNum->GetXaxis()->SetTitle("Plane");
08031   hStVsPlNum->GetXaxis()->CenterTitle();
08032   hStVsPlNum->GetYaxis()->SetTitle("Strip");
08033   hStVsPlNum->GetYaxis()->CenterTitle();
08034   hStVsPlNum->SetFillColor(0);
08035   //hStVsPlNum->SetMaximum(15000);
08036 
08037 
08038   fS="Strip Vs Plane SigCor (SE1)";
08039   TProfile2D* pStVsPl1=new TProfile2D("pStVsPl1",fS.c_str(),
08040                                       64,-2,62,30,-3,27);
08041   pStVsPl1->GetXaxis()->SetTitle("Plane");
08042   pStVsPl1->GetXaxis()->CenterTitle();
08043   pStVsPl1->GetYaxis()->SetTitle("Strip");
08044   pStVsPl1->GetYaxis()->CenterTitle();
08045   pStVsPl1->SetFillColor(0);
08046   //pStVsPl1->SetMaximum(15000);
08047 
08048   fS="Strip Vs Plane SigCor (SE2)";
08049   TProfile2D* pStVsPl2=new TProfile2D("pStVsPl2",fS.c_str(),
08050                                       64,-2,62,30,-3,27);
08051   pStVsPl2->GetXaxis()->SetTitle("Plane");
08052   pStVsPl2->GetXaxis()->CenterTitle();
08053   pStVsPl2->GetYaxis()->SetTitle("Strip");
08054   pStVsPl2->GetYaxis()->CenterTitle();
08055   pStVsPl2->SetFillColor(0);
08056   //pStVsPl2->SetMaximum(15000);
08057 
08058   fS="Strip Vs Plane SigCor (SE1)";
08059   TH2F* hStVsPl1=new TH2F("hStVsPl1",fS.c_str(),
08060                           64,-2,62,30,-3,27);
08061   hStVsPl1->GetXaxis()->SetTitle("Plane");
08062   hStVsPl1->GetXaxis()->CenterTitle();
08063   hStVsPl1->GetYaxis()->SetTitle("Strip");
08064   hStVsPl1->GetYaxis()->CenterTitle();
08065   hStVsPl1->SetFillColor(0);
08066   //hStVsPl1->SetMaximum(15000);
08067 
08068   fS="Strip Vs Plane SigCor (SE2)";
08069   TH2F* hStVsPl2=new TH2F("hStVsPl2",fS.c_str(),
08070                                       64,-2,62,30,-3,27);
08071   hStVsPl2->GetXaxis()->SetTitle("Plane");
08072   hStVsPl2->GetXaxis()->CenterTitle();
08073   hStVsPl2->GetYaxis()->SetTitle("Strip");
08074   hStVsPl2->GetYaxis()->CenterTitle();
08075   hStVsPl2->SetFillColor(0);
08076   //hStVsPl2->SetMaximum(15000);
08077 
08078   TH1F *hNumPlanesMuPi=new TH1F("hNumPlanesMuPi","hNumPlanesMuPi",
08079                                 77,-2,75);
08080   hNumPlanesMuPi->SetTitle("Number of Planes Hit");
08081   hNumPlanesMuPi->GetXaxis()->SetTitle("Number of Planes Hit");
08082   hNumPlanesMuPi->GetXaxis()->CenterTitle();
08083   hNumPlanesMuPi->GetYaxis()->SetTitle("");
08084   hNumPlanesMuPi->GetYaxis()->CenterTitle();
08085   hNumPlanesMuPi->SetFillColor(0);
08086   hNumPlanesMuPi->SetBit(TH1::kCanRebin);
08087 
08088   TH1F *hNumPlanes=new TH1F("hNumPlanes","hNumPlanes",77,-2,75);
08089   hNumPlanes->SetTitle("Number of Planes Hit");
08090   hNumPlanes->GetXaxis()->SetTitle("Number of Planes Hit");
08091   hNumPlanes->GetXaxis()->CenterTitle();
08092   hNumPlanes->GetYaxis()->SetTitle("");
08093   hNumPlanes->GetYaxis()->CenterTitle();
08094   hNumPlanes->SetFillColor(0);
08095   hNumPlanes->SetBit(TH1::kCanRebin);
08096 
08097   TH1F *hNumPlanesN_1=new TH1F("hNumPlanesN_1","hNumPlanesN_1",
08098                                77,-2,75);
08099   hNumPlanesN_1->SetTitle("Number of Planes Hit");  
08100   hNumPlanesN_1->GetXaxis()->SetTitle("Number of Planes Hit");
08101   hNumPlanesN_1->GetXaxis()->CenterTitle();
08102   hNumPlanesN_1->GetYaxis()->SetTitle("");
08103   hNumPlanesN_1->GetYaxis()->CenterTitle();
08104   hNumPlanesN_1->SetFillColor(0);
08105   hNumPlanesN_1->SetLineColor(2);
08106   hNumPlanesN_1->SetBit(TH1::kCanRebin);
08107 
08108   TH1F *hNumPlanesN=new TH1F("hNumPlanesN","hNumPlanesN",
08109                                77,-2,75);
08110   hNumPlanesN->SetTitle("Number of Planes Hit");  
08111   hNumPlanesN->GetXaxis()->SetTitle("Number of Planes Hit");
08112   hNumPlanesN->GetXaxis()->CenterTitle();
08113   hNumPlanesN->GetYaxis()->SetTitle("");
08114   hNumPlanesN->GetYaxis()->CenterTitle();
08115   hNumPlanesN->SetFillColor(0);
08116   hNumPlanesN->SetLineColor(4);
08117   hNumPlanesN->SetBit(TH1::kCanRebin);
08118 
08119   TH1F *hEventLength=new TH1F("hEventLength","hEventLength",77,-2,75);
08120   hEventLength->SetTitle("Event Length");
08121   hEventLength->GetXaxis()->SetTitle("Event Length");
08122   hEventLength->GetXaxis()->CenterTitle();
08123   hEventLength->GetYaxis()->SetTitle("");
08124   hEventLength->GetYaxis()->CenterTitle();
08125   hEventLength->SetFillColor(0);
08126   hEventLength->SetBit(TH1::kCanRebin);
08127 
08128   TH1F *hEventLengthN_1=new TH1F("hEventLengthN_1","hEventLengthN_1",
08129                                77,-2,75);
08130   hEventLengthN_1->SetTitle("Event Length");  
08131   hEventLengthN_1->GetXaxis()->SetTitle("Event Length");
08132   hEventLengthN_1->GetXaxis()->CenterTitle();
08133   hEventLengthN_1->GetYaxis()->SetTitle("");
08134   hEventLengthN_1->GetYaxis()->CenterTitle();
08135   hEventLengthN_1->SetFillColor(0);
08136   hEventLengthN_1->SetLineColor(2);
08137   hEventLengthN_1->SetBit(TH1::kCanRebin);
08138 
08139   TH1F *hEventLengthN=new TH1F("hEventLengthN","hEventLengthN",
08140                                77,-2,75);
08141   hEventLengthN->SetTitle("Event Length");  
08142   hEventLengthN->GetXaxis()->SetTitle("Event Length");
08143   hEventLengthN->GetXaxis()->CenterTitle();
08144   hEventLengthN->GetYaxis()->SetTitle("");
08145   hEventLengthN->GetYaxis()->CenterTitle();
08146   hEventLengthN->SetFillColor(0);
08147   hEventLengthN->SetLineColor(4);
08148   hEventLengthN->SetBit(TH1::kCanRebin);
08149 
08150   TH1F *hNumHits=new TH1F("hNumHits","hNumHits",200,-2,200);
08151   hNumHits->SetTitle("Number of Hits");
08152   hNumHits->GetXaxis()->SetTitle("Number of Hits");
08153   hNumHits->GetXaxis()->CenterTitle();
08154   hNumHits->GetYaxis()->SetTitle("");
08155   hNumHits->GetYaxis()->CenterTitle();
08156   hNumHits->SetFillColor(0);
08157   //hNumHits->SetBit(TH1::kCanRebin);
08158 
08159   TH1F *hNumHitsN_1=new TH1F("hNumHitsN_1","hNumHitsN_1",200,-2,200);
08160   hNumHitsN_1->SetTitle("Number of Hits");
08161   hNumHitsN_1->GetXaxis()->SetTitle("Number of Hits");
08162   hNumHitsN_1->GetXaxis()->CenterTitle();
08163   hNumHitsN_1->GetYaxis()->SetTitle("");
08164   hNumHitsN_1->GetYaxis()->CenterTitle();
08165   hNumHitsN_1->SetFillColor(0);
08166   hNumHitsN_1->SetLineColor(2);
08167   //hNumHitsN_1->SetBit(TH1::kCanRebin);
08168 
08169   TH1F *hNumHitsN=new TH1F("hNumHitsN","hNumHitsN",200,-2,200);
08170   hNumHitsN->SetTitle("Number of Hits");
08171   hNumHitsN->GetXaxis()->SetTitle("Number of Hits");
08172   hNumHitsN->GetXaxis()->CenterTitle();
08173   hNumHitsN->GetYaxis()->SetTitle("");
08174   hNumHitsN->GetYaxis()->CenterTitle();
08175   hNumHitsN->SetFillColor(0);
08176   hNumHitsN->SetLineColor(4);
08177   //hNumHitsN->SetBit(TH1::kCanRebin);
08178 
08179   TH1F *hHitsPerPl=new TH1F("hHitsPerPl","hHitsPerPl",
08180                                200,-1,12);
08181   hHitsPerPl->SetTitle("Number of Hits per Plane");
08182   hHitsPerPl->GetXaxis()->SetTitle("Number of Hits per Plane");
08183   hHitsPerPl->GetXaxis()->CenterTitle();
08184   hHitsPerPl->GetYaxis()->SetTitle("");
08185   hHitsPerPl->GetYaxis()->CenterTitle();
08186   hHitsPerPl->SetFillColor(0);
08187   //hHitsPerPl->SetBit(TH1::kCanRebin);
08188 
08189   TH1F *hHitsPerPlN_1=new TH1F("hHitsPerPlN_1","hHitsPerPlN_1",
08190                                200,-1,12);
08191   hHitsPerPlN_1->SetTitle("Number of Hits per Plane");
08192   hHitsPerPlN_1->GetXaxis()->SetTitle("Number of Hits per Plane");
08193   hHitsPerPlN_1->GetXaxis()->CenterTitle();
08194   hHitsPerPlN_1->GetYaxis()->SetTitle("");
08195   hHitsPerPlN_1->GetYaxis()->CenterTitle();
08196   hHitsPerPlN_1->SetFillColor(0);
08197   hHitsPerPlN_1->SetLineColor(2);
08198   //hHitsPerPlN_1->SetBit(TH1::kCanRebin);
08199 
08200   TH1F *hHitsPerPlN_1XCut=new TH1F("hHitsPerPlN_1XCut",
08201                                    "hHitsPerPlN_1XCut",
08202                                    200,-1,12);
08203   hHitsPerPlN_1XCut->SetTitle("Number of Hits per Plane");
08204   hHitsPerPlN_1XCut->GetXaxis()->SetTitle("Number of Hits per Plane");
08205   hHitsPerPlN_1XCut->GetXaxis()->CenterTitle();
08206   hHitsPerPlN_1XCut->GetYaxis()->SetTitle("");
08207   hHitsPerPlN_1XCut->GetYaxis()->CenterTitle();
08208   hHitsPerPlN_1XCut->SetFillColor(0);
08209   hHitsPerPlN_1XCut->SetLineColor(2);
08210   //hHitsPerPlN_1XCut->SetBit(TH1::kCanRebin);
08211 
08212   TH1F *hHitsPerPlN=new TH1F("hHitsPerPlN","hHitsPerPlN",
08213                                200,-1,12);
08214   hHitsPerPlN->SetTitle("Number of Hits per Plane");
08215   hHitsPerPlN->GetXaxis()->SetTitle("Number of Hits per Plane");
08216   hHitsPerPlN->GetXaxis()->CenterTitle();
08217   hHitsPerPlN->GetYaxis()->SetTitle("");
08218   hHitsPerPlN->GetYaxis()->CenterTitle();
08219   hHitsPerPlN->SetFillColor(0);
08220   hHitsPerPlN->SetLineColor(4);
08221   //hHitsPerPlN->SetBit(TH1::kCanRebin);
08222 
08223   TH1F *hHitsPerPlInWin=new TH1F("hHitsPerPlInWin","hHitsPerPlInWin",
08224                                200,-1,12);
08225   hHitsPerPlInWin->SetTitle("Number of Hits per Plane");
08226   hHitsPerPlInWin->GetXaxis()->SetTitle("Number of Hits per Plane");
08227   hHitsPerPlInWin->GetXaxis()->CenterTitle();
08228   hHitsPerPlInWin->GetYaxis()->SetTitle("");
08229   hHitsPerPlInWin->GetYaxis()->CenterTitle();
08230   hHitsPerPlInWin->SetFillColor(0);
08231   hHitsPerPlInWin->SetLineColor(6);
08232   //hHitsPerPlInWin->SetBit(TH1::kCanRebin);
08233 
08234   TH1F *hHitsPerPlPeCutN_1=new TH1F("hHitsPerPlPeCutN_1",
08235                                     "hHitsPerPlPeCutN_1",200,-1,12);
08236   hHitsPerPlPeCutN_1->SetTitle("Number of Hits per Plane");
08237   hHitsPerPlPeCutN_1->GetXaxis()->SetTitle("Number of Hits per Plane");
08238   hHitsPerPlPeCutN_1->GetXaxis()->CenterTitle();
08239   hHitsPerPlPeCutN_1->GetYaxis()->SetTitle("");
08240   hHitsPerPlPeCutN_1->GetYaxis()->CenterTitle();
08241   hHitsPerPlPeCutN_1->SetFillColor(0);
08242   hHitsPerPlPeCutN_1->SetLineColor(3);
08243   //hHitsPerPlPeCutN_1->SetBit(TH1::kCanRebin);
08244 
08245   TH1F *hHitsPerPlPeCut10=new TH1F("hHitsPerPlPeCut10",
08246                                    "hHitsPerPlPeCut10",
08247                                    200,-1,12);
08248   hHitsPerPlPeCut10->SetTitle("Number of Hits per Plane");
08249   hHitsPerPlPeCut10->GetXaxis()->SetTitle("Number of Hits per Plane");
08250   hHitsPerPlPeCut10->GetXaxis()->CenterTitle();
08251   hHitsPerPlPeCut10->GetYaxis()->SetTitle("");
08252   hHitsPerPlPeCut10->GetYaxis()->CenterTitle();
08253   hHitsPerPlPeCut10->SetFillColor(0);
08254   //hHitsPerPlPeCut10->SetBit(TH1::kCanRebin);
08255 
08256   TH1F *hHitsPerPlPeCut10N_1=new TH1F("hHitsPerPlPeCut10N_1",
08257                                       "hHitsPerPlPeCut10N_1",
08258                                       200,-1,12);
08259   hHitsPerPlPeCut10N_1->SetTitle("Number of Hits per Plane");
08260   hHitsPerPlPeCut10N_1->GetXaxis()->
08261     SetTitle("Number of Hits per Plane");
08262   hHitsPerPlPeCut10N_1->GetXaxis()->CenterTitle();
08263   hHitsPerPlPeCut10N_1->GetYaxis()->SetTitle("");
08264   hHitsPerPlPeCut10N_1->GetYaxis()->CenterTitle();
08265   hHitsPerPlPeCut10N_1->SetFillColor(0);
08266   hHitsPerPlPeCut10N_1->SetLineColor(2);
08267   //hHitsPerPlPeCut10N_1->SetBit(TH1::kCanRebin);
08268   
08269   TH1F *hHitsPerPlPeCut10N=new TH1F("hHitsPerPlPeCut10N",
08270                                     "hHitsPerPlPeCut10N",
08271                                     200,-1,12);
08272   hHitsPerPlPeCut10N->SetTitle("Number of Hits per Plane");
08273   hHitsPerPlPeCut10N->GetXaxis()->SetTitle("Number of Hits per Plane");
08274   hHitsPerPlPeCut10N->GetXaxis()->CenterTitle();
08275   hHitsPerPlPeCut10N->GetYaxis()->SetTitle("");
08276   hHitsPerPlPeCut10N->GetYaxis()->CenterTitle();
08277   hHitsPerPlPeCut10N->SetFillColor(0);
08278   hHitsPerPlPeCut10N->SetLineColor(4);
08279   //hHitsPerPlPeCut10N->SetBit(TH1::kCanRebin);
08280 
08281   TH1F *hHitsPerPl25N_1=new TH1F("hHitsPerPl25N_1",
08282                                  "hHitsPerPl25N_1",200,-1,12);
08283   hHitsPerPl25N_1->SetTitle("Number of Hits per Plane");
08284   hHitsPerPl25N_1->GetXaxis()->
08285     SetTitle("Number of Hits per Plane");
08286   hHitsPerPl25N_1->GetXaxis()->CenterTitle();
08287   hHitsPerPl25N_1->GetYaxis()->SetTitle("");
08288   hHitsPerPl25N_1->GetYaxis()->CenterTitle();
08289   hHitsPerPl25N_1->SetFillColor(0);
08290   hHitsPerPl25N_1->SetLineColor(2);
08291   //hHitsPerPl25N_1->SetBit(TH1::kCanRebin);
08292 
08293   TH1F *hTofScintDiffLow1=new TH1F("hTofScintDiffLow1",
08294                                    "hTofScintDiffLow1",500,-500,500);
08295   hTofScintDiffLow1->SetTitle("TOF Scint. Time Diff.");
08296   hTofScintDiffLow1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08297   hTofScintDiffLow1->GetXaxis()->CenterTitle();
08298   hTofScintDiffLow1->GetYaxis()->SetTitle("");
08299   hTofScintDiffLow1->GetYaxis()->CenterTitle();
08300   hTofScintDiffLow1->SetFillColor(0);
08301   hTofScintDiffLow1->SetBit(TH1::kCanRebin);
08302 
08303   TH1F *hTofScintDiffLow1N_1=new TH1F("hTofScintDiffLow1N_1",
08304                                    "hTofScintDiffLow1N_1",500,-500,500);
08305   hTofScintDiffLow1N_1->SetTitle("TOF Scint. Time Diff.");
08306   hTofScintDiffLow1N_1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08307   hTofScintDiffLow1N_1->GetXaxis()->CenterTitle();
08308   hTofScintDiffLow1N_1->GetYaxis()->SetTitle("");
08309   hTofScintDiffLow1N_1->GetYaxis()->CenterTitle();
08310   hTofScintDiffLow1N_1->SetFillColor(0);
08311   hTofScintDiffLow1N_1->SetBit(TH1::kCanRebin);
08312 
08313   TH1F *hTofScintDiffLow1N=new TH1F("hTofScintDiffLow1N",
08314                                    "hTofScintDiffLow1N",500,-500,500);
08315   hTofScintDiffLow1N->SetTitle("TOF Scint. Time Diff.");
08316   hTofScintDiffLow1N->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08317   hTofScintDiffLow1N->GetXaxis()->CenterTitle();
08318   hTofScintDiffLow1N->GetYaxis()->SetTitle("");
08319   hTofScintDiffLow1N->GetYaxis()->CenterTitle();
08320   hTofScintDiffLow1N->SetFillColor(0);
08321   hTofScintDiffLow1N->SetBit(TH1::kCanRebin);
08322 
08323   TH1F *hTofScintDiffUp1=new TH1F("hTofScintDiffUp1",
08324                                   "hTofScintDiffUp1",500,-500,500);
08325   hTofScintDiffUp1->SetTitle("TOF Scint. Time Diff.");
08326   hTofScintDiffUp1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08327   hTofScintDiffUp1->GetXaxis()->CenterTitle();
08328   hTofScintDiffUp1->GetYaxis()->SetTitle("");
08329   hTofScintDiffUp1->GetYaxis()->CenterTitle();
08330   hTofScintDiffUp1->SetFillColor(0);
08331   hTofScintDiffUp1->SetBit(TH1::kCanRebin);
08332 
08333   TH1F *hTofScintDiffUp1N_1=new TH1F("hTofScintDiffUp1N_1",
08334                                   "hTofScintDiffUp1N_1",500,-500,500);
08335   hTofScintDiffUp1N_1->SetTitle("TOF Scint. Time Diff.");
08336   hTofScintDiffUp1N_1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08337   hTofScintDiffUp1N_1->GetXaxis()->CenterTitle();
08338   hTofScintDiffUp1N_1->GetYaxis()->SetTitle("");
08339   hTofScintDiffUp1N_1->GetYaxis()->CenterTitle();
08340   hTofScintDiffUp1N_1->SetFillColor(0);
08341   hTofScintDiffUp1N_1->SetBit(TH1::kCanRebin);
08342 
08343   TH1F *hTofScintDiffUp1N=new TH1F("hTofScintDiffUp1N",
08344                                   "hTofScintDiffUp1N",500,-500,500);
08345   hTofScintDiffUp1N->SetTitle("TOF Scint. Time Diff.");
08346   hTofScintDiffUp1N->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08347   hTofScintDiffUp1N->GetXaxis()->CenterTitle();
08348   hTofScintDiffUp1N->GetYaxis()->SetTitle("");
08349   hTofScintDiffUp1N->GetYaxis()->CenterTitle();
08350   hTofScintDiffUp1N->SetFillColor(0);
08351   hTofScintDiffUp1N->SetBit(TH1::kCanRebin);
08352   
08353   TH1F *hTofScintDiff=new TH1F("hTofScintDiff",
08354                                 "hTofScintDiff",500,-500,500);
08355   hTofScintDiff->SetTitle("TOF Scint. Time Diff.");
08356   hTofScintDiff->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08357   hTofScintDiff->GetXaxis()->CenterTitle();
08358   hTofScintDiff->GetYaxis()->SetTitle("");
08359   hTofScintDiff->GetYaxis()->CenterTitle();
08360   hTofScintDiff->SetFillColor(0);
08361   hTofScintDiff->SetBit(TH1::kCanRebin);
08362 
08363   TH1F *hTofScintDiffN_1=new TH1F("hTofScintDiffN_1",
08364                                   "hTofScintDiffN_1",500,-500,500);
08365   hTofScintDiffN_1->SetTitle("TOF Scint. Time Diff.");
08366   hTofScintDiffN_1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08367   hTofScintDiffN_1->GetXaxis()->CenterTitle();
08368   hTofScintDiffN_1->GetYaxis()->SetTitle("");
08369   hTofScintDiffN_1->GetYaxis()->CenterTitle();
08370   hTofScintDiffN_1->SetFillColor(0);
08371   hTofScintDiffN_1->SetLineColor(2);
08372   hTofScintDiffN_1->SetBit(TH1::kCanRebin);
08373 
08374   TH1F *hTofScintDiffN=new TH1F("hTofScintDiffN",
08375                                   "hTofScintDiffN",500,-500,500);
08376   hTofScintDiffN->SetTitle("TOF Scint. Time Diff.");
08377   hTofScintDiffN->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08378   hTofScintDiffN->GetXaxis()->CenterTitle();
08379   hTofScintDiffN->GetYaxis()->SetTitle("");
08380   hTofScintDiffN->GetYaxis()->CenterTitle();
08381   hTofScintDiffN->SetFillColor(0);
08382   hTofScintDiffN->SetLineColor(4);
08383   hTofScintDiffN->SetBit(TH1::kCanRebin);
08384 
08385   TH1F *hTofScintDiff1=new TH1F("hTofScintDiff1",
08386                                 "hTofScintDiff1",500,-500,500);
08387   hTofScintDiff1->SetTitle("TOF Scint. Time Diff.");
08388   hTofScintDiff1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08389   hTofScintDiff1->GetXaxis()->CenterTitle();
08390   hTofScintDiff1->GetYaxis()->SetTitle("");
08391   hTofScintDiff1->GetYaxis()->CenterTitle();
08392   hTofScintDiff1->SetFillColor(0);
08393   hTofScintDiff1->SetBit(TH1::kCanRebin);
08394 
08395   TH1F *hTofScintDiff1N_1=new TH1F("hTofScintDiff1N_1",
08396                                    "hTofScintDiff1N_1",500,-500,500);
08397   hTofScintDiff1N_1->SetTitle("TOF Scint. Time Diff.");
08398   hTofScintDiff1N_1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08399   hTofScintDiff1N_1->GetXaxis()->CenterTitle();
08400   hTofScintDiff1N_1->GetYaxis()->SetTitle("");
08401   hTofScintDiff1N_1->GetYaxis()->CenterTitle();
08402   hTofScintDiff1N_1->SetFillColor(0);
08403   hTofScintDiff1N_1->SetBit(TH1::kCanRebin);
08404 
08405   TH1F *hTofScintDiff1N=new TH1F("hTofScintDiff1N",
08406                                  "hTofScintDiff1N",500,-500,500);
08407   hTofScintDiff1N->SetTitle("TOF Scint. Time Diff.");
08408   hTofScintDiff1N->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08409   hTofScintDiff1N->GetXaxis()->CenterTitle();
08410   hTofScintDiff1N->GetYaxis()->SetTitle("");
08411   hTofScintDiff1N->GetYaxis()->CenterTitle();
08412   hTofScintDiff1N->SetFillColor(0);
08413   hTofScintDiff1N->SetBit(TH1::kCanRebin);
08414 
08415   TH1F *hTofScintDiffLow2=new TH1F("hTofScintDiffLow2",
08416                                    "hTofScintDiffLow2",500,-500,500);
08417   hTofScintDiffLow2->SetTitle("TOF Scint. Time Diff.");
08418   hTofScintDiffLow2->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08419   hTofScintDiffLow2->GetXaxis()->CenterTitle();
08420   hTofScintDiffLow2->GetYaxis()->SetTitle("");
08421   hTofScintDiffLow2->GetYaxis()->CenterTitle();
08422   hTofScintDiffLow2->SetFillColor(0);
08423   hTofScintDiffLow2->SetLineColor(2);
08424   hTofScintDiffLow2->SetBit(TH1::kCanRebin);
08425 
08426   TH1F *hTofScintDiffLow2N_1=new TH1F("hTofScintDiffLow2N_1",
08427                                       "hTofScintDiffLow2N_1",
08428                                       500,-500,500);
08429   hTofScintDiffLow2N_1->SetTitle("TOF Scint. Time Diff.");
08430   hTofScintDiffLow2N_1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08431   hTofScintDiffLow2N_1->GetXaxis()->CenterTitle();
08432   hTofScintDiffLow2N_1->GetYaxis()->SetTitle("");
08433   hTofScintDiffLow2N_1->GetYaxis()->CenterTitle();
08434   hTofScintDiffLow2N_1->SetFillColor(0);
08435   hTofScintDiffLow2N_1->SetLineColor(2);
08436   hTofScintDiffLow2N_1->SetBit(TH1::kCanRebin);
08437 
08438   TH1F *hTofScintDiffLow2N=new TH1F("hTofScintDiffLow2N",
08439                                     "hTofScintDiffLow2N",
08440                                     500,-500,500);
08441   hTofScintDiffLow2N->SetTitle("TOF Scint. Time Diff.");
08442   hTofScintDiffLow2N->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08443   hTofScintDiffLow2N->GetXaxis()->CenterTitle();
08444   hTofScintDiffLow2N->GetYaxis()->SetTitle("");
08445   hTofScintDiffLow2N->GetYaxis()->CenterTitle();
08446   hTofScintDiffLow2N->SetFillColor(0);
08447   hTofScintDiffLow2N->SetLineColor(2);
08448   hTofScintDiffLow2N->SetBit(TH1::kCanRebin);
08449 
08450   TH1F *hTofScintDiffUp2=new TH1F("hTofScintDiffUp2",
08451                                   "hTofScintDiffUp2",500,-500,500);
08452   hTofScintDiffUp2->SetTitle("TOF Scint. Time Diff.");
08453   hTofScintDiffUp2->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08454   hTofScintDiffUp2->GetXaxis()->CenterTitle();
08455   hTofScintDiffUp2->GetYaxis()->SetTitle("");
08456   hTofScintDiffUp2->GetYaxis()->CenterTitle();
08457   hTofScintDiffUp2->SetFillColor(0);
08458   hTofScintDiffUp2->SetLineColor(2);
08459   hTofScintDiffUp2->SetBit(TH1::kCanRebin);
08460 
08461   TH1F *hTofScintDiffUp2N_1=new TH1F("hTofScintDiffUp2N_1",
08462                                   "hTofScintDiffUp2N_1",500,-500,500);
08463   hTofScintDiffUp2N_1->SetTitle("TOF Scint. Time Diff.");
08464   hTofScintDiffUp2N_1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08465   hTofScintDiffUp2N_1->GetXaxis()->CenterTitle();
08466   hTofScintDiffUp2N_1->GetYaxis()->SetTitle("");
08467   hTofScintDiffUp2N_1->GetYaxis()->CenterTitle();
08468   hTofScintDiffUp2N_1->SetFillColor(0);
08469   hTofScintDiffUp2N_1->SetLineColor(2);
08470   hTofScintDiffUp2N_1->SetBit(TH1::kCanRebin);
08471 
08472   TH1F *hTofScintDiffUp2N=new TH1F("hTofScintDiffUp2N",
08473                                   "hTofScintDiffUp2N",500,-500,500);
08474   hTofScintDiffUp2N->SetTitle("TOF Scint. Time Diff.");
08475   hTofScintDiffUp2N->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08476   hTofScintDiffUp2N->GetXaxis()->CenterTitle();
08477   hTofScintDiffUp2N->GetYaxis()->SetTitle("");
08478   hTofScintDiffUp2N->GetYaxis()->CenterTitle();
08479   hTofScintDiffUp2N->SetFillColor(0);
08480   hTofScintDiffUp2N->SetLineColor(2);
08481   hTofScintDiffUp2N->SetBit(TH1::kCanRebin);
08482 
08483   TH1F *hTofScintDiff2=new TH1F("hTofScintDiff2",
08484                                 "hTofScintDiff2",500,-500,500);
08485   hTofScintDiff2->SetTitle("TOF Scint. Time Diff.");
08486   hTofScintDiff2->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08487   hTofScintDiff2->GetXaxis()->CenterTitle();
08488   hTofScintDiff2->GetYaxis()->SetTitle("");
08489   hTofScintDiff2->GetYaxis()->CenterTitle();
08490   hTofScintDiff2->SetFillColor(0);
08491   hTofScintDiff2->SetLineColor(2);
08492   hTofScintDiff2->SetBit(TH1::kCanRebin);
08493 
08494   TH1F *hTofScintDiff2N_1=new TH1F("hTofScintDiff2N_1",
08495                                    "hTofScintDiff2N_1",500,-500,500);
08496   hTofScintDiff2N_1->SetTitle("TOF Scint. Time Diff.");
08497   hTofScintDiff2N_1->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08498   hTofScintDiff2N_1->GetXaxis()->CenterTitle();
08499   hTofScintDiff2N_1->GetYaxis()->SetTitle("");
08500   hTofScintDiff2N_1->GetYaxis()->CenterTitle();
08501   hTofScintDiff2N_1->SetFillColor(0);
08502   hTofScintDiff2N_1->SetLineColor(2);
08503   hTofScintDiff2N_1->SetBit(TH1::kCanRebin);
08504 
08505   TH1F *hTofScintDiff2N=new TH1F("hTofScintDiff2N",
08506                                  "hTofScintDiff2N",500,-500,500);
08507   hTofScintDiff2N->SetTitle("TOF Scint. Time Diff.");
08508   hTofScintDiff2N->GetXaxis()->SetTitle("TOF Scint. Time Diff.");
08509   hTofScintDiff2N->GetXaxis()->CenterTitle();
08510   hTofScintDiff2N->GetYaxis()->SetTitle("");
08511   hTofScintDiff2N->GetYaxis()->CenterTitle();
08512   hTofScintDiff2N->SetFillColor(0);
08513   hTofScintDiff2N->SetLineColor(2);
08514   hTofScintDiff2N->SetBit(TH1::kCanRebin);
08515 
08516   TH1F *hKovADC1=new TH1F("hKovADC1","KovADC1",400,-5,10000);
08517   hKovADC1->GetXaxis()->SetTitle("KovADC1");
08518   hKovADC1->GetXaxis()->CenterTitle();
08519   hKovADC1->GetYaxis()->SetTitle("");
08520   hKovADC1->GetYaxis()->CenterTitle();
08521   hKovADC1->SetFillColor(0);
08522   hKovADC1->SetBit(TH1::kCanRebin);
08523 
08524   TH1F *hKovADC1N_1=new TH1F("hKovADC1N_1","KovADC1N_1",400,-5,10000);
08525   hKovADC1N_1->GetXaxis()->SetTitle("KovADC1");
08526   hKovADC1N_1->GetXaxis()->CenterTitle();
08527   hKovADC1N_1->GetYaxis()->SetTitle("");
08528   hKovADC1N_1->GetYaxis()->CenterTitle();
08529   hKovADC1N_1->SetFillColor(0);
08530   hKovADC1N_1->SetLineColor(2);
08531   hKovADC1N_1->SetBit(TH1::kCanRebin);
08532 
08533   TH1F *hKovADC1N=new TH1F("hKovADC1N","KovADC1N",400,-5,10000);
08534   hKovADC1N->GetXaxis()->SetTitle("KovADC1");
08535   hKovADC1N->GetXaxis()->CenterTitle();
08536   hKovADC1N->GetYaxis()->SetTitle("");
08537   hKovADC1N->GetYaxis()->CenterTitle();
08538   hKovADC1N->SetFillColor(0);
08539   hKovADC1N->SetLineColor(4);
08540   hKovADC1N->SetBit(TH1::kCanRebin);
08541 
08542   TH1F *hKovADC2=new TH1F("hKovADC2","KovADC2",400,-5,10000);
08543   hKovADC2->GetXaxis()->SetTitle("KovADC2");
08544   hKovADC2->GetXaxis()->CenterTitle();
08545   hKovADC2->GetYaxis()->SetTitle("");
08546   hKovADC2->GetYaxis()->CenterTitle();
08547   hKovADC2->SetFillColor(0);
08548   hKovADC2->SetBit(TH1::kCanRebin);
08549 
08550   TH1F *hKovADC2N_1=new TH1F("hKovADC2N_1","KovADC2N_1",400,-5,10000);
08551   hKovADC2N_1->GetXaxis()->SetTitle("KovADC2");
08552   hKovADC2N_1->GetXaxis()->CenterTitle();
08553   hKovADC2N_1->GetYaxis()->SetTitle("");
08554   hKovADC2N_1->GetYaxis()->CenterTitle();
08555   hKovADC2N_1->SetFillColor(0);
08556   hKovADC2N_1->SetLineColor(2);
08557   hKovADC2N_1->SetBit(TH1::kCanRebin);
08558 
08559   TH1F *hKovADC2N=new TH1F("hKovADC2N","KovADC2N",400,-5,10000);
08560   hKovADC2N->GetXaxis()->SetTitle("KovADC2");
08561   hKovADC2N->GetXaxis()->CenterTitle();
08562   hKovADC2N->GetYaxis()->SetTitle("");
08563   hKovADC2N->GetYaxis()->CenterTitle();
08564   hKovADC2N->SetFillColor(0);
08565   hKovADC2N->SetLineColor(4);
08566   hKovADC2N->SetBit(TH1::kCanRebin);
08567 
08568   TH1F *hKovADC3=new TH1F("hKovADC3","KovADC3",400,-5,10000);
08569   hKovADC3->GetXaxis()->SetTitle("KovADC3");
08570   hKovADC3->GetXaxis()->CenterTitle();
08571   hKovADC3->GetYaxis()->SetTitle("");
08572   hKovADC3->GetYaxis()->CenterTitle();
08573   hKovADC3->SetFillColor(0);
08574   hKovADC3->SetBit(TH1::kCanRebin);
08575 
08576   TH1F *hKovADC3N_1=new TH1F("hKovADC3N_1","KovADC3N_1",400,-5,10000);
08577   hKovADC3N_1->GetXaxis()->SetTitle("KovADC3");
08578   hKovADC3N_1->GetXaxis()->CenterTitle();
08579   hKovADC3N_1->GetYaxis()->SetTitle("");
08580   hKovADC3N_1->GetYaxis()->CenterTitle();
08581   hKovADC3N_1->SetFillColor(0);
08582   hKovADC3N_1->SetLineColor(2);
08583   hKovADC3N_1->SetBit(TH1::kCanRebin);
08584 
08585   TH1F *hKovADC3N=new TH1F("hKovADC3N","KovADC3N",400,-5,10000);
08586   hKovADC3N->GetXaxis()->SetTitle("KovADC3");
08587   hKovADC3N->GetXaxis()->CenterTitle();
08588   hKovADC3N->GetYaxis()->SetTitle("");
08589   hKovADC3N->GetYaxis()->CenterTitle();
08590   hKovADC3N->SetFillColor(0);
08591   hKovADC3N->SetLineColor(4);
08592   hKovADC3N->SetBit(TH1::kCanRebin);
08593 
08594   TH1F *hTofDiff=new TH1F("hTofDiff","hTofDiff",400,-4000,4000);
08595   hTofDiff->GetXaxis()->SetTitle("TOF");
08596   hTofDiff->GetXaxis()->CenterTitle();
08597   hTofDiff->GetYaxis()->SetTitle("");
08598   hTofDiff->GetYaxis()->CenterTitle();
08599   hTofDiff->SetFillColor(0);
08600   hTofDiff->SetBit(TH1::kCanRebin);
08601 
08602   TH1F *hTofDiffN_1=new TH1F("hTofDiffN_1","hTofDiffN_1",400,-4000,4000);
08603   hTofDiffN_1->GetXaxis()->SetTitle("TOF");
08604   hTofDiffN_1->GetXaxis()->CenterTitle();
08605   hTofDiffN_1->GetYaxis()->SetTitle("");
08606   hTofDiffN_1->GetYaxis()->CenterTitle();
08607   hTofDiffN_1->SetFillColor(0);
08608   hTofDiffN_1->SetLineColor(2);
08609   hTofDiffN_1->SetBit(TH1::kCanRebin);
08610 
08611   TH1F *hTofDiffN=new TH1F("hTofDiffN","hTofDiffN",400,-4000,4000);
08612   hTofDiffN->GetXaxis()->SetTitle("TOF");
08613   hTofDiffN->GetXaxis()->CenterTitle();
08614   hTofDiffN->GetYaxis()->SetTitle("");
08615   hTofDiffN->GetYaxis()->CenterTitle();
08616   hTofDiffN->SetFillColor(0);
08617   hTofDiffN->SetLineColor(4);
08618   hTofDiffN->SetBit(TH1::kCanRebin);
08619 
08620   TH1F *hAvStrip=new TH1F("hAvStrip","hAvStrip",25,-1,24);
08621   hAvStrip->GetXaxis()->SetTitle("Average Strip");
08622   hAvStrip->GetXaxis()->CenterTitle();
08623   hAvStrip->GetYaxis()->SetTitle("");
08624   hAvStrip->GetYaxis()->CenterTitle();
08625   hAvStrip->SetFillColor(0);
08626   hAvStrip->SetBit(TH1::kCanRebin);
08627 
08628   TH1F *hAvStripN_1=new TH1F("hAvStripN_1","hAvStripN_1",25,-1,24);
08629   hAvStripN_1->GetXaxis()->SetTitle("Average Strip");
08630   hAvStripN_1->GetXaxis()->CenterTitle();
08631   hAvStripN_1->GetYaxis()->SetTitle("");
08632   hAvStripN_1->GetYaxis()->CenterTitle();
08633   hAvStripN_1->SetFillColor(0);
08634   hAvStripN_1->SetLineColor(2);
08635   hAvStripN_1->SetBit(TH1::kCanRebin);
08636 
08637   TH1F *hAvStripN=new TH1F("hAvStripN","hAvStripN",25,-1,24);
08638   hAvStripN->GetXaxis()->SetTitle("Average Strip");
08639   hAvStripN->GetXaxis()->CenterTitle();
08640   hAvStripN->GetYaxis()->SetTitle("");
08641   hAvStripN->GetYaxis()->CenterTitle();
08642   hAvStripN->SetFillColor(0);
08643   hAvStripN->SetLineColor(4);
08644   hAvStripN->SetBit(TH1::kCanRebin);
08645 
08646   TH1F *hFirstPlane=new TH1F("hFirstPlane",
08647                              "hFirstPlane",77,-2,75);
08648   hFirstPlane->GetXaxis()->SetTitle("First Plane");
08649   hFirstPlane->GetXaxis()->CenterTitle();
08650   hFirstPlane->GetYaxis()->SetTitle("");
08651   hFirstPlane->GetYaxis()->CenterTitle();
08652   hFirstPlane->SetFillColor(0);
08653   hFirstPlane->SetBit(TH1::kCanRebin);
08654 
08655   TH1F *hFirstPlaneN_1=new TH1F("hFirstPlaneN_1",
08656                                 "hFirstPlaneN_1",77,-2,75);
08657   hFirstPlaneN_1->GetXaxis()->SetTitle("First Plane");
08658   hFirstPlaneN_1->GetXaxis()->CenterTitle();
08659   hFirstPlaneN_1->GetYaxis()->SetTitle("");
08660   hFirstPlaneN_1->GetYaxis()->CenterTitle();
08661   hFirstPlaneN_1->SetFillColor(0);
08662   hFirstPlaneN_1->SetLineColor(2);
08663   hFirstPlaneN_1->SetBit(TH1::kCanRebin);
08664 
08665   TH1F *hFirstPlaneN=new TH1F("hFirstPlaneN",
08666                               "hFirstPlaneN",77,-2,75);
08667   hFirstPlaneN->GetXaxis()->SetTitle("First Plane");
08668   hFirstPlaneN->GetXaxis()->CenterTitle();
08669   hFirstPlaneN->GetYaxis()->SetTitle("");
08670   hFirstPlaneN->GetYaxis()->CenterTitle();
08671   hFirstPlaneN->SetFillColor(0);
08672   hFirstPlaneN->SetLineColor(4);
08673   hFirstPlaneN->SetBit(TH1::kCanRebin);
08674 
08675   TH1F* hLowEn=new TH1F("hLowEn","hLowEn",6000,-1,20);
08676   hLowEn->SetTitle("hLowEn");
08677   hLowEn->GetXaxis()->SetTitle("hLowEn");
08678   hLowEn->GetXaxis()->CenterTitle();
08679   hLowEn->SetFillColor(0);
08680   hLowEn->SetLineWidth(3);
08681   //hLowEn->SetBit(TH1::kCanRebin);
08682 
08683   TH1F* hHighEn=new TH1F("hHighEn","hHighEn",6000,-1,20);
08684   hHighEn->SetTitle("hHighEn");
08685   hHighEn->GetXaxis()->SetTitle("hHighEn");
08686   hHighEn->GetXaxis()->CenterTitle();
08687   hHighEn->SetFillColor(0);
08688   //hHighEn->SetBit(TH1::kCanRebin);
08689 
08690   vector<TProfile*> pSigCorVsDist;
08691   vector<TProfile*> pSigCorVsDistN;
08692   vector<Int_t> vWindowSize;
08693   vector<Float_t> bigAv;
08694   vector<Int_t> bigAvCounter;
08695   Float_t sum15_18=0;
08696   Float_t sum15_18Counter=0;
08697   Float_t sum15_18Mip=0;
08698   Float_t sum15_18MipCounter=0;
08699   Float_t sumSigCorTotal=0;
08700   Float_t sumSigCorTotalCounter=0;
08701   Float_t sumMipTotal=0;
08702   Float_t sumMipTotalCounter=0;
08703 
08704   //num maps for all stripends
08705   map<Int_t,Float_t> num;
08706   map<Int_t,Float_t> numX;
08707   map<Int_t,Float_t> numT;
08708   map<Int_t,Float_t> numOs;
08709   map<Int_t,Float_t> numOsX;
08710   map<Int_t,Float_t> numOsT;
08711 
08712   //non-offset num maps for individual stripends
08713   map<Int_t,Float_t> numO1;
08714   map<Int_t,Float_t> numO1X;
08715   map<Int_t,Float_t> numO1T;
08716   map<Int_t,Float_t> numO2;
08717   map<Int_t,Float_t> numO2X;
08718   map<Int_t,Float_t> numO2T;
08719   map<Int_t,Float_t> numE1;
08720   map<Int_t,Float_t> numE1X;
08721   map<Int_t,Float_t> numE1T;
08722   map<Int_t,Float_t> numE2;
08723   map<Int_t,Float_t> numE2X;
08724   map<Int_t,Float_t> numE2T;
08725 
08726   //offset num maps for individual stripends
08727   map<Int_t,Float_t> numOsO1;
08728   map<Int_t,Float_t> numOsO1X;
08729   map<Int_t,Float_t> numOsO1T;
08730   map<Int_t,Float_t> numOsO2;
08731   map<Int_t,Float_t> numOsO2X;
08732   map<Int_t,Float_t> numOsO2T;
08733   map<Int_t,Float_t> numOsE1;
08734   map<Int_t,Float_t> numOsE1X;
08735   map<Int_t,Float_t> numOsE1T;
08736   map<Int_t,Float_t> numOsE2;
08737   map<Int_t,Float_t> numOsE2X;
08738   map<Int_t,Float_t> numOsE2T;
08739 
08740   Int_t passPidCounter=0;
08741   Int_t straightTrackCounter=0;
08742   Int_t NCutsCounter=0;
08743 
08744   //txt file to hold events
08745 
08746   ofstream& eventsTxtFile=(*(this->OpenTxtFile(fRunNumber,
08747                                                 "myevents")));
08748   ofstream& eventsTxtFileHpp=(*(this->OpenTxtFile(fRunNumber,
08749                                                   "myeventsHpp")));
08750   ofstream& eventsTxtFileHpp10=(*(this->OpenTxtFile(fRunNumber,
08751                                                    "myeventsHpp10")));
08752   ofstream& eventsTxtFilePSMu=(*(this->OpenTxtFile(fRunNumber,
08753                                                    "myeventsPSMu")));
08754   ofstream& eventsTxtFileOL=(*(this->OpenTxtFile(fRunNumber,
08755                                                  "myeventsOL")));
08756   ofstream& eventsTxtFileFidVol=
08757     (*(this->OpenTxtFile(fRunNumber,"myeventsFidVol")));
08758   ofstream& eventsTxtFileStrips25=(*(this->OpenTxtFile
08759                                      (fRunNumber,"myeventsStrips25")));
08760   ofstream& eventsTxtFileLowPlanesHit=
08761     (*(this->OpenTxtFile(fRunNumber,"myeventsLowPlanesHit")));
08762 
08766   
08767   this->InitialiseLoopVariables();  
08768   
08769   for(Int_t event=0;event<fEvents;event++){
08770     
08771     this->SetLoopVariables(event);
08772 
08773     //the dead chips should be random and so can be done here
08774     if (this->CutOnDeadChips()) continue;
08775     //only do full analysis if time is greater than minRunTime
08776     if (ts.GetSec()<minRunTime){
08777       if (this->CutOnPid()) continue;
08778     }
08779 
08780     map<Int_t,Float_t> planeSigCor;
08781     map<Int_t,Float_t> planeSigCorX;
08782     map<Int_t,Float_t> planeSigCorT;
08783     map<Int_t,Float_t> planeSigCorO1;    
08784     map<Int_t,Float_t> planeSigCorO1X;
08785     map<Int_t,Float_t> planeSigCorO1T;
08786     map<Int_t,Float_t> planeSigCorO2;
08787     map<Int_t,Float_t> planeSigCorO2X;
08788     map<Int_t,Float_t> planeSigCorO2T;
08789     map<Int_t,Float_t> planeSigCorE1;
08790     map<Int_t,Float_t> planeSigCorE1X;
08791     map<Int_t,Float_t> planeSigCorE1T;
08792     map<Int_t,Float_t> planeSigCorE2;
08793     map<Int_t,Float_t> planeSigCorE2X;
08794     map<Int_t,Float_t> planeSigCorE2T;
08795 
08796     map<Int_t,Float_t> planeMip;
08797     map<Int_t,Float_t> planeMipX;
08798     map<Int_t,Float_t> planeMipT;
08799 
08800     //Int_t numHits=0;
08801 
08802     map<Int_t,map<Int_t,Float_t> > stplSigCor;
08803     map<Int_t,map<Int_t,Float_t> > stplNum;
08804 
08805     Int_t lowTrkStrip=25;//stores the lowest tracked strip
08806     Int_t upTrkStrip=-1;
08807     Int_t lowTrkStripPeCut=25;
08808     Int_t upTrkStripPeCut=-1;
08809 
08810     vector<Float_t> vTimes1;//store all the times
08811     vector<Float_t> vTimes2;//store all the times
08812     vTimes1.reserve(100);
08813     vTimes2.reserve(100);
08814 
08815     //get tclones arrays for this snarl
08816     TClonesArray &cTrk=*fTrkHitInfo;
08817     Int_t numTrkHits=fTrkHitInfo->GetEntries();
08818     TClonesArray &cUnTrk = *fUnTrkHitInfo;
08819     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
08820     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
08821     TClonesArray &cXTalk = *fXTalkHits;
08822     Int_t numXTalkHits=fXTalkHits->GetEntries();
08823 
08825     //loop over the untracked hits in the snarl
08827     for (Int_t hit=0;hit<numUnTrkHits;hit++){
08828       //cast the tclonesarray up to a trackedhitinfo object
08829       CDTrackedHitInfo *hitInfo=
08830         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
08831 
08832       this->ReadInHitInfo(hitInfo);
08833 
08834       //cut out the bad channels
08835       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
08836 
08837       //check the channel's sanity
08838       this->StandardSanityChecks();
08839 
08840       //calc the number of planes hit
08841       this->CalcNumPlanesHit(fPlane,fChargePe);
08842 
08843       //calc the scint hits time difference compared to tof
08844       this->CalcLowUpScint_TofDiff(fTime);
08845       //store the times
08846       if (fStripend==2 || 
08847           (fStripend==1 && fPlane==0 && fRunNumber>70000)) {
08848         vTimes2.push_back(fTime);
08849       }
08850       else if (fStripend==1) vTimes1.push_back(fTime);
08851           
08852       //cut out the channels not to be used in calorimetry
08853       if (this->CutOnBadCalorimetry(fPlane,fStrip,fStripend)) continue;
08854 
08855       //do the calibration again with latest tables, temperatures,etc
08856       fChargeSigCor=this->ReCalibrate(fChargeAdc,
08857                                       fPlane,fStrip,fStripend);
08858 
08859       //store the plane and strip info
08860       (stplSigCor[fPlane])[fStrip]+=fChargeSigCor;
08861       (stplNum[fPlane])[fStrip]++;
08862 
08863       //add up the charge of the hits in each plane
08864       planeSigCorX[fPlane]+=fChargeSigCor;
08865       planeSigCorT[fPlane]+=fChargeSigCor;
08866       planeMipX[fPlane]+=fChargeMip;
08867       planeMipT[fPlane]+=fChargeMip;
08868       if (fO1) planeSigCorO1X[fPlane]+=fChargeSigCor;
08869       if (fO2) planeSigCorO2X[fPlane]+=fChargeSigCor;
08870       if (fE1) planeSigCorE1X[fPlane]+=fChargeSigCor;
08871       if (fE2) planeSigCorE2X[fPlane]+=fChargeSigCor;
08872       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
08873       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
08874       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
08875       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
08876 
08877       if (fStripend==1) pStVsPl1->Fill(fPlane,fStrip,fChargeSigCor);
08878       if (fStripend==2) pStVsPl2->Fill(fPlane,fStrip,fChargeSigCor);
08879       if (fStripend==1) hStVsPl1->Fill(fPlane,fStrip);
08880       if (fStripend==2) hStVsPl2->Fill(fPlane,fStrip);
08881     }
08882 
08884     //loop over xtalk hits in the snarl
08886     for (Int_t hit=0;hit<numXTalkHits;hit++){
08887       CDXTalkHitInfo *hitInfo=
08888         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
08889 
08890       this->ReadInHitInfo(hitInfo);
08891       
08892       //cut out the bad channels
08893       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
08894 
08895       //check the channel's sanity
08896       this->StandardSanityChecks();
08897 
08898       //calc the number of planes hit
08899       this->CalcNumPlanesHit(fPlane,fChargePe);
08900 
08901       //calc the scint hits time difference compared to tof
08902       this->CalcLowUpScint_TofDiff(fTime);
08903       //store the times
08904       if (fStripend==2 || 
08905           (fStripend==1 && fPlane==0 && fRunNumber>70000)) {
08906         vTimes2.push_back(fTime);
08907       }
08908       else if (fStripend==1) vTimes1.push_back(fTime);
08909 
08910       //cut out the channels not to be used in calorimetry
08911       if (this->CutOnBadCalorimetry(fPlane,fStrip,fStripend)) continue;
08912 
08913       //do the calibration again with latest tables, temperatures,etc
08914       fChargeSigCor=this->ReCalibrate(fChargeAdc,
08915                                       fPlane,fStrip,fStripend);
08916 
08917       //store the plane and strip info
08918       (stplSigCor[fPlane])[fStrip]+=fChargeSigCor;
08919       (stplNum[fPlane])[fStrip]++;
08920 
08921       //add up the charge of the hits in each plane
08922       planeSigCorX[fPlane]+=fChargeSigCor;
08923       planeSigCorT[fPlane]+=fChargeSigCor;
08924       planeMipX[fPlane]+=fChargeMip;
08925       planeMipT[fPlane]+=fChargeMip;
08926       if (fO1) planeSigCorO1X[fPlane]+=fChargeSigCor;
08927       if (fO2) planeSigCorO2X[fPlane]+=fChargeSigCor;
08928       if (fE1) planeSigCorE1X[fPlane]+=fChargeSigCor;
08929       if (fE2) planeSigCorE2X[fPlane]+=fChargeSigCor;
08930       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
08931       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
08932       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
08933       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
08934 
08935       if (fStripend==1) pStVsPl1->Fill(fPlane,fStrip,fChargeSigCor);
08936       if (fStripend==2) pStVsPl2->Fill(fPlane,fStrip,fChargeSigCor);
08937       if (fStripend==1) hStVsPl1->Fill(fPlane,fStrip);
08938       if (fStripend==2) hStVsPl2->Fill(fPlane,fStrip);
08939     }
08940 
08942     //loop over the tracked hits
08944     for (Int_t hit=0;hit<numTrkHits;hit++){
08945       CDTrackedHitInfo *trackedHitInfo=
08946         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
08947           
08948       this->ReadInHitInfo(trackedHitInfo);
08949 
08950       //cut out the bad channels
08951       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
08952 
08953       //check the channel's sanity
08954       this->StandardSanityChecks();
08955 
08956       //calc the number of planes hit
08957       this->CalcNumPlanesHit(fPlane,fChargePe);
08958 
08959       //calculate the first and last planes
08960       this->CalcFirstLastPlane(fPlane);
08961       //calc the average strip for the ps muon cut
08962       this->CalcAvStripForPSMuonCut(fPlane,fStrip,fStripend);
08963 
08964       //calc the lowest and highest tracked strips
08965       if (fStrip<lowTrkStrip) lowTrkStrip=fStrip;
08966       if (fStrip>upTrkStrip) upTrkStrip=fStrip;
08967       if (fChargePe>1.5){
08968         if (fStrip<lowTrkStripPeCut) lowTrkStripPeCut=fStrip;
08969         if (fStrip>upTrkStripPeCut) upTrkStripPeCut=fStrip;
08970       }
08971 
08972       //calc the scint hits time difference compared to tof
08973       this->CalcLowUpScint_TofDiff(fTime);
08974       //store the times
08975       if (fStripend==2 || 
08976           (fStripend==1 && fPlane==0 && fRunNumber>70000)) {
08977         vTimes2.push_back(fTime);
08978       }
08979       else if (fStripend==1) vTimes1.push_back(fTime);
08980 
08981       //cut out the channels not to be used in calorimetry
08982       if (this->CutOnBadCalorimetry(fPlane,fStrip,fStripend)) continue;
08983 
08984       //do the calibration again with latest tables, temperatures,etc
08985       fChargeSigCor=this->ReCalibrate(fChargeAdc,
08986                                       fPlane,fStrip,fStripend);
08987 
08988       //store the plane and strip info
08989       (stplSigCor[fPlane])[fStrip]+=fChargeSigCor;
08990       (stplNum[fPlane])[fStrip]++;
08991 
08992       //add up the charge of the hits in each plane
08993       planeSigCor[fPlane]+=fChargeSigCor;
08994       planeSigCorT[fPlane]+=fChargeSigCor;
08995       planeMip[fPlane]+=fChargeMip;
08996       planeMipT[fPlane]+=fChargeMip;
08997 
08998       if (fO1) planeSigCorO1[fPlane]+=fChargeSigCor;
08999       if (fO2) planeSigCorO2[fPlane]+=fChargeSigCor;
09000       if (fE1) planeSigCorE1[fPlane]+=fChargeSigCor;
09001       if (fE2) planeSigCorE2[fPlane]+=fChargeSigCor;
09002       if (fO1) planeSigCorO1T[fPlane]+=fChargeSigCor;
09003       if (fO2) planeSigCorO2T[fPlane]+=fChargeSigCor;
09004       if (fE1) planeSigCorE1T[fPlane]+=fChargeSigCor;
09005       if (fE2) planeSigCorE2T[fPlane]+=fChargeSigCor;
09006 
09007       if (fStripend==1) pStVsPl1->Fill(fPlane,fStrip,fChargeSigCor);
09008       if (fStripend==2) pStVsPl2->Fill(fPlane,fStrip,fChargeSigCor);
09009       if (fStripend==1) hStVsPl1->Fill(fPlane,fStrip);
09010       if (fStripend==2) hStVsPl2->Fill(fPlane,fStrip);
09011     }
09013     //end of loop over the tracked hits
09015 
09016     //get the number of planes
09017     const Float_t numPlanesHit=fNumPlanesHitAll.size();
09018     const Float_t numPlanesHit25=fNumPlanesHit25.size();
09019     const Float_t numPlanesHitPeCut=fNumPlanesHitPeCut.size();
09020     const Float_t numPlanesHitPeCut10=fNumPlanesHitPeCut10.size();
09021 
09022     //calc the number of hits
09023     const Float_t numHits=this->SumMapValues(fNumPlanesHitAll);
09024     const Float_t numHits25=this->SumMapValues(fNumPlanesHit25);
09025     const Float_t numHitsPeCut=this->SumMapValues(fNumPlanesHitPeCut);
09026     const Float_t numHitsPeCut10=this->
09027       SumMapValues(fNumPlanesHitPeCut10);
09028 
09029     //calc the number of hits per plane
09030     const Float_t numHitsPerPlane=(numPlanesHit>0)?
09031       numHits/numPlanesHit:-0.5;
09032     const Float_t numHitsPerPlane25=(numPlanesHit25>0)?
09033       numHits25/numPlanesHit25:-0.5;
09034     const Float_t numHitsPerPlanePeCut=(numPlanesHitPeCut>0)?
09035       numHitsPeCut/numPlanesHitPeCut:-0.5;
09036     const Float_t numHitsPerPlanePeCut10=(numPlanesHitPeCut10>0)?
09037       numHitsPeCut10/numPlanesHitPeCut10:-0.5;
09038 
09039     const Int_t lowStripsFromCentre=12-lowTrkStrip;
09040     const Int_t upStripsFromCentre=upTrkStrip-11;
09041     const Int_t stripsFromCentre=
09042       (upStripsFromCentre>lowStripsFromCentre)?
09043       upStripsFromCentre:lowStripsFromCentre;
09044     const Int_t lowStripsFromCentrePeCut=12-lowTrkStripPeCut;
09045     const Int_t upStripsFromCentrePeCut=upTrkStripPeCut-11;
09046     const Int_t stripsFromCentrePeCut=
09047       (upStripsFromCentrePeCut>lowStripsFromCentrePeCut)?
09048       upStripsFromCentrePeCut:lowStripsFromCentrePeCut;
09049     
09050     const Int_t eventLength=this->GetEventLength();
09051 
09052     //set the globals (do this before cut booleans)
09053     fNumHitsPerPlane=numHitsPerPlane;
09054     fNumHitsPerPlane25=numHitsPerPlane25;
09055     fNumHitsPerPlanePeCut10=numHitsPerPlanePeCut10;
09056     fStripsFromCentrePeCut=stripsFromCentrePeCut;
09057 
09058     //official cuts
09059     Bool_t passesPidCut=!this->CutOnPid();
09060     Bool_t passesEventLengthCut=!this->CutOnEventLength();
09061     //MAXMSG("CDAnalysis",Msg::kInfo,200)
09062     //<<"Nasty, fiducial volume hack..."<<endl;
09063     //Bool_t passesFiducialVolumeCut=true;
09064     Bool_t passesFiducialVolumeCut=!this->CutOnFiducialVolume();
09065     Bool_t passesTrackQualityCut=!this->CutOnTrackQuality(true);
09066     Bool_t passesScint_TofDiffCut=!this->CutOnScint_TofDiff();
09067     Bool_t passesPSMuonsCut=!this->CutOnPSMuons();
09068     Bool_t passesNumHitsPerPlane10Cut=!this->CutOnNumHitsPerPlane10();
09069     Bool_t passesNumHitsPerPlaneCut=!this->CutOnNumHitsPerPlane();
09070 
09071     Bool_t passesAllCuts=passesPidCut &&
09072       passesEventLengthCut &&
09073       passesFiducialVolumeCut &&
09074       passesTrackQualityCut &&
09075       passesScint_TofDiffCut &&
09076       passesPSMuonsCut &&
09077       passesNumHitsPerPlane10Cut &&
09078       passesNumHitsPerPlaneCut;
09079     
09080     //other cuts (not used in final analysis)
09081     Bool_t passesOverlapCut=!this->CutOnOverlap();
09082 
09084 
09085     //pid cut
09086     hKovADC1->Fill(fKovADC1);
09087     hKovADC2->Fill(fKovADC2);
09088     hKovADC3->Fill(fKovADC3);
09089     hTofDiff->Fill(fTofTDC2-fTofTDC0); 
09090 
09091     //event length cut
09092     hEventLength->Fill(eventLength);
09093 
09094     //fiducial volume cut
09095     hStripsFromCentrePeCut->Fill(stripsFromCentrePeCut);
09096 
09097     //track quality cut
09098     hFirstPlane->Fill(fFirstPlane);
09099 
09100     //timing cut     
09101     MAXMSG("CDAnalysis",Msg::kDebug,500)
09102       <<"vTimes1 size="<<vTimes1.size()
09103       <<", vTimes2 size="<<vTimes2.size()<<endl;
09104     Float_t lowTimeDiff1=500;
09105     Float_t upTimeDiff1=-500;
09106     Float_t lowTimeDiff2=500;
09107     Float_t upTimeDiff2=-500;
09108     Float_t lowTime=2e9;
09109     Float_t upTime=0;
09110     for (vector<Float_t>::iterator tIt=vTimes1.begin();
09111          tIt!=vTimes1.end();++tIt){
09112       Float_t timeDiff=((*tIt)*1e9)-(fTofADCTimeStamp1*25./16);
09113       if (timeDiff>-2000 && timeDiff<2000){
09114         if ((*tIt)*1e9<lowTime) lowTime=(*tIt)*1e9;
09115         if ((*tIt)*1e9>upTime) upTime=(*tIt)*1e9;
09116         if (timeDiff>upTimeDiff1) upTimeDiff1=timeDiff;
09117         if (timeDiff<lowTimeDiff1) lowTimeDiff1=timeDiff;
09118         hTofScintDiff1->Fill(timeDiff);
09119         hTofScintDiff->Fill(timeDiff);
09120       }
09121       MAXMSG("CDAnalysis",Msg::kDebug,5000)
09122         <<"timeDiff="<<timeDiff
09123         <<", tofT="<<fTofADCTimeStamp1
09124         <<", scintT="<<(*tIt)<<endl;
09125     }
09126     for (vector<Float_t>::iterator tIt=vTimes2.begin();
09127          tIt!=vTimes2.end();++tIt){
09128       Float_t timeDiff=((*tIt)*1e9)-(fTofADCTimeStamp1*25./16);
09129       if (timeDiff>-2000 && timeDiff<2000){
09130         if ((*tIt)*1e9<lowTime) lowTime=(*tIt)*1e9;
09131         if ((*tIt)*1e9>upTime) upTime=(*tIt)*1e9;
09132         if (timeDiff>upTimeDiff2) upTimeDiff2=timeDiff;
09133         if (timeDiff<lowTimeDiff2) lowTimeDiff2=timeDiff;
09134         hTofScintDiff2->Fill(timeDiff);
09135         hTofScintDiff->Fill(timeDiff);
09136       }
09137     }
09138     hTofScintDiffLow1->Fill(lowTimeDiff1);
09139     hTofScintDiffUp1->Fill(upTimeDiff1);
09140     hTofScintDiffLow2->Fill(lowTimeDiff2);
09141     hTofScintDiffUp2->Fill(upTimeDiff2);
09142 
09143     //ps muon cut
09144     hAvStrip->Fill(fAvStrip);
09145 
09146     //hits per plane cut 10
09147     hHitsPerPlPeCut10->Fill(numHitsPerPlanePeCut10);
09148 
09149     //hits per plane cut
09150     hHitsPerPl->Fill(numHitsPerPlane);
09151 
09153 
09154     //fill other histos
09155     hNumHits->Fill(numHits);
09156     hOLChi2->Fill(fOLChi2);
09157     hNumPlanes->Fill(numPlanesHit);
09158 
09159     Float_t meu=-1;
09160     Float_t meuO1=-1;
09161     Float_t meuO2=-1;
09162     Float_t meuE1=-1;
09163     Float_t meuE2=-1;
09164 
09165     //make copies before doing nasty hack
09166     map<Int_t,Float_t> planeSigCorTOrig=planeSigCorT;
09167     map<Int_t,Float_t> planeSigCorOrig=planeSigCor;
09168     map<Int_t,Float_t> planeSigCorO1TOrig=planeSigCorO1T;
09169     map<Int_t,Float_t> planeSigCorO2TOrig=planeSigCorO2T;
09170     map<Int_t,Float_t> planeSigCorE1TOrig=planeSigCorE1T;
09171     map<Int_t,Float_t> planeSigCorE2TOrig=planeSigCorE2T;
09172 
09173     if (true && fSimFlag==SimFlag::kData){
09174       //do nasty hack for plane 35 - very nasty!!!!
09175       planeSigCor[35]=planeSigCor[33];
09176       planeSigCorT[35]=planeSigCorT[33];
09177       planeSigCorO1T[35]=planeSigCorO1T[33];
09178       planeSigCorO2T[35]=planeSigCorO2T[33];
09179       planeSigCorE1T[35]=planeSigCorE1T[33];
09180       planeSigCorE2T[35]=planeSigCorE2T[33];    
09181     }
09182 
09184     //section for 14_16 window
09186     //make cut on everything BUT event length
09187     if (false) {
09188       //do nothing
09189     }
09190     else {
09191       Float_t localSum14_16=0;
09192       Float_t localSum14_16Counter=0;
09193 
09194       Float_t localSum14_16O1=0;
09195       Float_t localSum14_16O2=0;
09196       Float_t localSum14_16E1=0;
09197       Float_t localSum14_16E2=0;
09198       Int_t planesFromEnd=16;
09199       Int_t windowStart=eventLength-planesFromEnd;
09200       Int_t windowSize=14;
09201 
09202       Float_t localSum14_16NoTrkCut=0;
09203       Float_t localSum14_16NoTrkCutCounter=0;
09204       Int_t windowStartNoTrkCut=static_cast<Int_t>(numPlanesHit)-
09205         planesFromEnd;
09206 
09207       //make temp maps to avoid zeros problem
09208       map<Int_t,Float_t> tempMap=planeSigCorT;
09209       map<Int_t,Float_t> tempMapO1=planeSigCorO1T;
09210       map<Int_t,Float_t> tempMapO2=planeSigCorO2T;
09211       map<Int_t,Float_t> tempMapE1=planeSigCorE1T;
09212       map<Int_t,Float_t> tempMapE2=planeSigCorE2T;
09213       map<Int_t,Int_t> tempNumPlanesHitPeCut=fNumPlanesHitPeCut;
09214 
09215       Int_t hitsInWin=0;
09216 
09217       //loop through the hits in the window
09218       for (Int_t i=0;i<windowSize;i++){
09219         Int_t plane=windowStart-i;
09220         Int_t planeNoTrkCut=windowStartNoTrkCut-i;
09221 
09222         //calculate the best window value
09223         //if fLP=48 then the first plane included is 30
09224         //this is actually the 19th from the end of the track
09225         localSum14_16+=tempMap[plane];//total including xtalk
09226         localSum14_16Counter++;
09227 
09228         //now do odd and even
09229         if (plane%2==1){
09230           localSum14_16O1+=tempMapO1[plane];//total including xtalk
09231           localSum14_16O2+=tempMapO2[plane];//total including xtalk
09232         }
09233         if (plane%2==0){
09234           localSum14_16E1+=tempMapE1[plane];//total including xtalk
09235           localSum14_16E2+=tempMapE2[plane];//total including xtalk
09236         }
09237 
09238         //sum the number of hits in the window
09239         hitsInWin+=tempNumPlanesHitPeCut[plane];
09240 
09241         //calc no trk cut meu
09242         localSum14_16NoTrkCut+=tempMap[planeNoTrkCut];
09243         localSum14_16NoTrkCutCounter++;
09244       }
09245 
09246       //set meu
09247       meu=localSum14_16/windowSize;
09248       meuO1=localSum14_16O1/(windowSize*0.5);
09249       meuO2=localSum14_16O2/(windowSize*0.5);
09250       meuE1=localSum14_16E1/(windowSize*0.5);
09251       meuE2=localSum14_16E2/(windowSize*0.5);
09252 
09253       //calc the number of hits in the window
09254       Float_t hitsPerPlInWin=1.*hitsInWin/windowSize;
09255 
09256       //fill the histo when no trk requirement is made
09257       if (passesPidCut && 
09258           passesOverlapCut && 
09259           !this->CutOnNumPlanesHit(static_cast<Int_t>(numPlanesHit))){
09260         //passesPSMuonsCut){//don't want this - needs track
09261         Float_t meuNoTrkCut=localSum14_16NoTrkCut/windowSize;
09262         h14_16NoTrkCut->Fill(meuNoTrkCut);
09263       }
09264 
09265       //now cut on the track quality and fill histos
09266       Int_t localMinEventLength=14+16+1;//+1 'cause don't want pl. zero
09267       Int_t localMaxEvLen=59;
09268       if (eventLength>localMinEventLength && 
09269           eventLength<localMaxEvLen &&
09270           passesPidCut && 
09271           passesFiducialVolumeCut && 
09272           passesTrackQualityCut &&
09273           passesScint_TofDiffCut &&
09274           passesPSMuonsCut && 
09275           passesNumHitsPerPlane10Cut && 
09276           passesNumHitsPerPlaneCut){
09277         
09278         //make individual stripend plots
09279         //make sure to perform the LAST cut too!
09280         if (passesEventLengthCut){
09281           h14_16O1->Fill(meuO1);
09282           h14_16O2->Fill(meuO2);
09283           h14_16E1->Fill(meuE1);
09284           h14_16E2->Fill(meuE2);
09285           
09286           //fill the histo for trk in both views requirement
09287           if (fResultEven>0 && fResultOdd>0){
09288             h14_16TrkUV->Fill(meu);
09289           }
09290           
09291           hHitsPerPlInWin->Fill(hitsPerPlInWin);
09292         }
09293         
09294         //make plot to look at how MEU varies with ev len cut
09295         //do the lower cut plots
09296         for (Int_t lowerPlCut=59;lowerPlCut>localMinEventLength;
09297              lowerPlCut--){
09298           if (localSum14_16Counter!=0 && eventLength>=lowerPlCut){
09299             MAXMSG("CDAnalysis",Msg::kVerbose,300)
09300               <<"Filling prof: lowerPlCut="<<lowerPlCut
09301               <<", 14_16="<<localSum14_16/windowSize<<endl;
09302             pMeuVsLowEvLenCutN_1->Fill(lowerPlCut,meu);
09303             pMeuVsLowEvLenCutNormN_1->Fill(lowerPlCut,meu);
09304             
09305             //make N-1 cut
09306             Int_t minPlane=0;
09307             Int_t maxPlane=59;
09308             this->GetEvLenMinMax(minPlane,maxPlane);
09309             if (eventLength<=maxPlane){//apply hard cut of maxPlane
09310               pMeuVsLowEvLenCutN->Fill(lowerPlCut,meu);
09311               pMeuVsLowEvLenCutNormN->Fill(lowerPlCut,meu);
09312             }
09313           }
09314         }
09315         //now do the upper cut plots
09316         for (Int_t upperPlCut=31;upperPlCut<=59;upperPlCut++){
09317           if (localSum14_16Counter!=0 && eventLength<=upperPlCut && 
09318               eventLength>31){
09319             MAXMSG("CDAnalysis",Msg::kVerbose,300)
09320               <<"Filling prof: upperPlCut="<<upperPlCut
09321               <<", 14_16="<<meu<<endl;
09322             pMeuVsUpEvLenCutN_1->Fill(upperPlCut,meu);
09323             pMeuVsUpEvLenCutNormN_1->Fill(upperPlCut,meu);
09324             
09325             //make N-1 cut
09326             Int_t minPlane=0;
09327             Int_t maxPlane=59;
09328             this->GetEvLenMinMax(minPlane,maxPlane);
09329             if (eventLength>minPlane){
09330               pMeuVsUpEvLenCutN->Fill(upperPlCut,meu);
09331               pMeuVsUpEvLenCutNormN->Fill(upperPlCut,meu);
09332             }
09333           }
09334         }
09335       }
09336     }
09337 
09338     Float_t meuPLCorrected=-999;
09339     Float_t meuTruePLCorrected=-999;
09340     Float_t GeVPerMeu=-999;
09341    
09342     if (fResultEven==1 && fResultOdd==1){
09343       //this->CalcXYZ();
09344       map<Int_t,TVector3> mPlPos;
09345       map<Int_t,Float_t> mPLCor;
09346       //first calc all the xyz positions
09347       if (this->CalcXYZ(mPlPos)){
09348         //second calculate the PL corrections
09349         if (this->CalcPLCor(mPlPos,mPLCor)){
09350           meuPLCorrected=this->CalcMeuPLCorrected(planeSigCorT,mPLCor,
09351                                                   event,&GeVPerMeu);
09352           if (passesAllCuts) {
09353             this->FillEnVsDist(planeSigCorT,mPLCor,event);
09354             MAXMSG("CDAnalysis",Msg::kInfo,100)
09355               <<"Found GeVPerMeu="<<GeVPerMeu<<endl;
09356             hGeVPerMeu->Fill(GeVPerMeu);
09357           }
09358         }
09359       }
09360 
09361       //now try truth info
09362       map<Int_t,Float_t> mTruePLCor;
09363       Float_t trueGeVPerMeu=-999;
09364       this->TruePLCor(mTruePLCor,event);
09365       meuTruePLCorrected=this->CalcMeuPLCorrected(planeSigCorT,
09366                                                   mTruePLCor,
09367                                                   event,&trueGeVPerMeu);
09368       
09369       MAXMSG("CDAnalysis",Msg::kInfo,100)
09370         <<endl<<"meu="<<meu<<", meuPLCorrected="<<meuPLCorrected
09371         <<", meuTruePLCorrected="<<meuTruePLCorrected
09372         <<endl<<endl;
09373     }
09374    
09375     if (passesPidCut){
09376       //fill the number of planes hit histo
09377       hNumPlanesMuPi->Fill(numPlanesHit);//all events passing pid
09378     }
09379     
09380     //all but num hits per plane
09381     if (passesPidCut && 
09382         passesEventLengthCut && 
09383         passesFiducialVolumeCut && 
09384         passesTrackQualityCut &&
09385         passesScint_TofDiffCut &&
09386         passesPSMuonsCut){
09387       pSigCorVsOLChi2->Fill(fOLChi2,meu);
09388 
09389       //fill number of hits per plane histos
09390       hNumHitsN_1->Fill(numHits);
09391       hHitsPerPlPeCutN_1->Fill(numHitsPerPlanePeCut);
09392 
09393       //now look at effect of hits per plane cut
09394       for (Float_t hpp=0;hpp<12;hpp+=0.1){
09395         if (hpp>numHitsPerPlane) pMeuVsHit_PlCut->Fill(hpp,meu);
09396         if (hpp>numHitsPerPlanePeCut10) pMeuVsHit_PlCut10->
09397                                           Fill(hpp,meu);
09398       }
09399 
09400       //fill the meu histo just for OL failures
09401       if (this->CutOnOverlap()){
09402         h14_16OL->Fill(meu);
09403       }
09404     }
09405 
09406     //all but track quality and ps muon cut
09407     if (passesPidCut && 
09408         passesEventLengthCut && 
09409         passesFiducialVolumeCut && 
09410         passesTrackQualityCut && 
09411         passesScint_TofDiffCut){
09412       if (fAvStrip<9|| fAvStrip>13){
09413         Double_t time=-1;
09414         if (vTimes1.size()) time=vTimes1[0];
09415         MAXMSG("CDAnalysis",Msg::kDebug,100)
09416           <<"ps muon: event="<<event
09417           <<", fAvStrip="<<fAvStrip<<", fStCount="<<fStCount
09418           <<", Time="<<time<<", sec="<<fSec<<endl;
09419       }
09420       Bool_t printPSMuons12=false;
09421       if (printPSMuons12){
09422         if (fAvStrip1<9|| fAvStrip1>13){
09423           Double_t time=-1;
09424           if (vTimes1.size()) time=vTimes1[0];
09425           MAXMSG("CDAnalysis",Msg::kDebug,100)
09426             <<"** ps muon end=1: event="<<event
09427             <<", fAvStrip1="<<fAvStrip1<<", fStCount="<<fStCount1
09428             <<", Time="<<time<<", sec="<<fSec<<endl;
09429         }
09430         if (fAvStrip2<9|| fAvStrip2>13){
09431           Double_t time=-1;
09432           if (vTimes1.size()) time=vTimes1[0];
09433           MAXMSG("CDAnalysis",Msg::kDebug,100)
09434             <<"** ps muon end=2: event="<<event
09435             <<", fAvStrip1="<<fAvStrip2<<", fStCount="<<fStCount2
09436             <<", Time="<<time<<", sec="<<fSec<<endl;
09437         }
09438       }
09439 
09440       //look at OL
09441       if (passesNumHitsPerPlane10Cut && passesNumHitsPerPlaneCut && 
09442           passesPSMuonsCut) {
09443         //make cut on overlap
09444 
09445         MAXMSG("CDAnalysis",Msg::kDebug,100)
09446           <<"strip<="<<upTrkStripPeCut<<", strip>="<<lowTrkStripPeCut
09447           <<", lowFromCent="<<lowStripsFromCentrePeCut
09448           <<", upFromCent="<<upStripsFromCentrePeCut
09449           <<", stFromCent="<<stripsFromCentrePeCut<<endl;
09450         
09451         hStripsFromCentre->Fill(stripsFromCentre);
09452 
09453         for (Int_t s=0;s<=12;s++){
09454           if (s>stripsFromCentre){
09455             pMeuVsStripCut->Fill(s,meu);
09456           }
09457           if (s<stripsFromCentre){
09458             pMeuVsStripCutPeCut->Fill(s,meu);
09459           }
09460         }
09461       }
09462     }
09463     
09464     //count the number of events passing the pid
09465     if (passesPidCut){
09466       passPidCounter++;
09467     }
09468 
09469     //get meu number with various combinations of cuts
09470     //all with pid
09471     if (passesPidCut && 
09472         passesEventLengthCut) hMeuOnlyPID_EventLengthCut->Fill(meu);
09473     if (passesPidCut &&
09474         passesEventLengthCut && 
09475         passesFiducialVolumeCut &&
09476         passesPSMuonsCut) hMeuOnlyPID_EL_FidCut->Fill(meu);
09477     if (passesPidCut &&
09478         passesEventLengthCut && 
09479         passesScint_TofDiffCut) hMeuOnlyPID_EL_TimeCut->Fill(meu);
09480     if (passesPidCut &&
09481         passesEventLengthCut && 
09482         passesFiducialVolumeCut &&
09483         passesPSMuonsCut &&//considered a fid vol cut
09484         passesScint_TofDiffCut) hMeuOnlyPID_EL_Fid_TimeCut->Fill(meu);
09485     if (passesPidCut &&
09486         passesEventLengthCut && 
09487         passesNumHitsPerPlane10Cut &&
09488         passesNumHitsPerPlaneCut) hMeuOnlyPID_EL_HppCut->Fill(meu);
09489     //all without pid
09490     if (passesEventLengthCut) hMeuOnlyEventLengthCut->Fill(meu);
09491     if (passesEventLengthCut && 
09492         passesFiducialVolumeCut &&
09493         passesPSMuonsCut) hMeuOnlyEL_FidCut->Fill(meu);
09494     if (passesEventLengthCut && 
09495         passesScint_TofDiffCut) hMeuOnlyEL_TimeCut->Fill(meu);
09496     if (passesEventLengthCut && 
09497         passesFiducialVolumeCut &&
09498         passesPSMuonsCut &&//considered a fid vol cut
09499         passesScint_TofDiffCut) hMeuOnlyEL_Fid_TimeCut->Fill(meu);
09500     if (passesEventLengthCut && 
09501         passesNumHitsPerPlane10Cut &&
09502         passesNumHitsPerPlaneCut) hMeuOnlyEL_HppCut->Fill(meu);
09503 
09505 
09506     //fill the N_1 histos for pid
09507     if (passesEventLengthCut && 
09508         passesFiducialVolumeCut && 
09509         passesTrackQualityCut && 
09510         passesScint_TofDiffCut && 
09511         passesPSMuonsCut && 
09512         passesNumHitsPerPlane10Cut &&
09513         passesNumHitsPerPlaneCut){
09514       hOLChi2N_1->Fill(fOLChi2);
09515       hKovADC1N_1->Fill(fKovADC1);
09516       hKovADC2N_1->Fill(fKovADC2);
09517       hKovADC3N_1->Fill(fKovADC3);
09518       hTofDiffN_1->Fill(fTofTDC2-fTofTDC0); 
09519       hMeuNoPidCut->Fill(meu);
09520     }
09521 
09522     //fill the N_1 histos for event length cut
09523     if (passesPidCut &&
09524         passesFiducialVolumeCut && 
09525         passesTrackQualityCut &&
09526         passesScint_TofDiffCut &&
09527         passesPSMuonsCut && 
09528         passesNumHitsPerPlane10Cut &&
09529         passesNumHitsPerPlaneCut){
09530       hNumPlanesN_1->Fill(numPlanesHit);//unofficial cut
09531       hEventLengthN_1->Fill(eventLength);
09532       hMeuNoEventLengthCut->Fill(meu);
09533     }
09534 
09535     //fill the N_1 histos for fiducial volume cut
09536     if (passesPidCut &&
09537         passesEventLengthCut &&
09538         passesTrackQualityCut &&
09539         passesScint_TofDiffCut &&
09540         passesPSMuonsCut && 
09541         passesNumHitsPerPlane10Cut &&
09542         passesNumHitsPerPlaneCut){
09543       hStripsFromCentrePeCutN_1->Fill(stripsFromCentrePeCut);
09544       hMeuNoFidVolCut->Fill(meu);
09545       if (!passesFiducialVolumeCut) eventsTxtFileFidVol<<event<<endl;
09546     }
09547 
09548     //fill the N_1 histos for track quality cut
09549     if (passesPidCut &&
09550         passesEventLengthCut &&
09551         passesFiducialVolumeCut && 
09552         passesScint_TofDiffCut &&
09553         //passesPSMuonsCut && //equivalent to finding a track!
09554         passesNumHitsPerPlane10Cut &&
09555         passesNumHitsPerPlaneCut){
09556       hFirstPlaneN_1->Fill(fFirstPlane);
09557       hMeuNoTrackQualityCut->Fill(meu);
09558     }
09559 
09560     //fill the N_1 histos for timing
09561     if (passesPidCut &&
09562         passesEventLengthCut && 
09563         passesFiducialVolumeCut && 
09564         passesTrackQualityCut && 
09565         passesPSMuonsCut && 
09566         passesNumHitsPerPlane10Cut &&
09567         passesNumHitsPerPlaneCut){
09568 
09569       for (vector<Float_t>::iterator tIt=vTimes1.begin();
09570            tIt!=vTimes1.end();++tIt){     
09571         Float_t timeDiff=((*tIt)*1e9)-(fTofADCTimeStamp1*25./16);
09572         if (timeDiff>-2000 && timeDiff<2000){
09573           hTofScintDiff1N_1->Fill(timeDiff);
09574           hTofScintDiffN_1->Fill(timeDiff);
09575         }
09576       }
09577       for (vector<Float_t>::iterator tIt=vTimes2.begin();
09578            tIt!=vTimes2.end();++tIt){
09579         Float_t timeDiff=((*tIt)*1e9)-(fTofADCTimeStamp1*25./16);
09580         if (timeDiff>-2000 && timeDiff<2000){
09581           hTofScintDiff2N_1->Fill(timeDiff);
09582           hTofScintDiffN_1->Fill(timeDiff);
09583         }
09584       }
09585       hTofScintDiffLow1N_1->Fill(lowTimeDiff1);
09586       hTofScintDiffUp1N_1->Fill(upTimeDiff1);
09587       hTofScintDiffLow2N_1->Fill(lowTimeDiff2);
09588       hTofScintDiffUp2N_1->Fill(upTimeDiff2);
09589       
09590       //now look at effect of time cut
09591       for (Int_t t=-500;t<500;t+=20){
09592         
09593         if (t<fLowScint_Tof) pMeuVsLowTimeCutN_1->Fill(t,meu);
09594         if (t>fUpScint_Tof) pMeuVsUpTimeCutN_1->Fill(t,meu);
09595         
09596         Float_t lowTimeCut=-1e9;
09597         Float_t upTimeCut=1e9;
09598         this->GetLowUpTimeCuts(lowTimeCut,upTimeCut);
09599         
09600         //fill the N cuts histos
09601         if (fLowScint_Tof>lowTimeCut && fUpScint_Tof<upTimeCut){//NF
09602           //if (lowTimeDiff>-175 && upTimeDiff<135){//FF
09603           if (t<fLowScint_Tof) pMeuVsLowTimeCutN->Fill(t,meu);
09604           if (t>fUpScint_Tof) pMeuVsUpTimeCutN->Fill(t,meu);
09605         }
09606       }
09607     }
09608 
09609     //fill the N_1 histos for PS muon cut
09610     if (passesPidCut &&
09611         passesEventLengthCut &&
09612         passesFiducialVolumeCut && 
09613         passesTrackQualityCut &&
09614         passesScint_TofDiffCut &&
09615         passesNumHitsPerPlane10Cut &&
09616         passesNumHitsPerPlaneCut){
09617       hAvStripN_1->Fill(fAvStrip);
09618       if (!passesPSMuonsCut) eventsTxtFilePSMu<<event<<endl;
09619       hMeuNoPSMuCut->Fill(meu);
09620     }
09621 
09622     //fill the N_1 histos for hits per plane cut 10
09623     if (passesPidCut &&
09624         passesEventLengthCut &&
09625         passesFiducialVolumeCut && 
09626         passesTrackQualityCut &&
09627         passesScint_TofDiffCut &&
09628         passesPSMuonsCut &&
09629         passesNumHitsPerPlaneCut){
09630       hHitsPerPlPeCut10N_1->Fill(numHitsPerPlanePeCut10);
09631       hMeuNoHitsPerPlane10Cut->Fill(meu);
09632       if (!passesNumHitsPerPlane10Cut) eventsTxtFileHpp10<<event<<endl;
09633     }
09634 
09635     //fill the N_1 histos for hits per plane cut
09636     if (passesPidCut &&
09637         passesEventLengthCut &&
09638         passesFiducialVolumeCut && 
09639         passesTrackQualityCut &&
09640         passesScint_TofDiffCut &&
09641         passesPSMuonsCut &&
09642         passesNumHitsPerPlane10Cut){
09643       hHitsPerPlN_1->Fill(numHitsPerPlane);
09644       hMeuNoHitsPerPlaneCut->Fill(meu);
09645       if (!passesNumHitsPerPlaneCut) eventsTxtFileHpp<<event<<endl;
09646     }
09647     
09649 
09650     //::Stopping cuts
09651     //cut on the pid (this is not always done above)
09652     if (!passesPidCut) continue;
09653     //make event length cuts
09654     if (!passesEventLengthCut) continue;
09655     //cut on fid
09656     if (!passesFiducialVolumeCut) continue;
09657     //make track quality cuts
09658     if (!passesTrackQualityCut) continue;
09659     //cut on the time difference between scint hits and tof hit
09660     if (!passesScint_TofDiffCut) continue;
09661     //cut out ps muons
09662     if (!passesPSMuonsCut) continue;
09663     //cut on the number of hits per plane 10
09664     if (!passesNumHitsPerPlane10Cut) continue;
09665     //cut on the number of hits per plane
09666     if (!passesNumHitsPerPlaneCut) continue;
09667 
09668     //count total events passing cuts
09669     NCutsCounter++;
09670     //write event to txt file
09671     eventsTxtFile<<event<<endl;
09672 
09674 
09675     //pid cut N
09676     hKovADC1N->Fill(fKovADC1);
09677     hKovADC2N->Fill(fKovADC2);
09678     hKovADC3N->Fill(fKovADC3);
09679     hTofDiffN->Fill(fTofTDC2-fTofTDC0);
09680 
09681     //event length cut N
09682     hEventLengthN->Fill(eventLength);
09683 
09684     //fiducial volume cut N
09685     hStripsFromCentrePeCutN->Fill(stripsFromCentrePeCut);
09686 
09687     //track quality cut N
09688     hFirstPlaneN->Fill(fFirstPlane);
09689 
09690     //timing cut N
09691     hTofScintDiffLow1N->Fill(lowTimeDiff1);
09692     hTofScintDiffUp1N->Fill(upTimeDiff1);
09693     hTofScintDiffLow2N->Fill(lowTimeDiff2);
09694     hTofScintDiffUp2N->Fill(upTimeDiff2);
09695     for (vector<Float_t>::iterator tIt=vTimes1.begin();
09696          tIt!=vTimes1.end();++tIt){
09697       Float_t timeDiff=((*tIt)*1e9)-(fTofADCTimeStamp1*25./16);
09698       if (timeDiff>-2000 && timeDiff<2000){
09699         hTofScintDiff1N->Fill(timeDiff);
09700         hTofScintDiffN->Fill(timeDiff);
09701       }
09702     }
09703     for (vector<Float_t>::iterator tIt=vTimes2.begin();
09704          tIt!=vTimes2.end();++tIt){
09705       Float_t timeDiff=((*tIt)*1e9)-(fTofADCTimeStamp1*25./16);
09706       if (timeDiff>-2000 && timeDiff<2000){
09707         hTofScintDiff2N->Fill(timeDiff);
09708         hTofScintDiffN->Fill(timeDiff);
09709       }
09710     }
09711 
09712     //ps muon cut N
09713     hAvStripN->Fill(fAvStrip);
09714     
09715     //hits per plane 10 cut N
09716     hHitsPerPlPeCut10N->Fill(numHitsPerPlanePeCut10);
09717 
09718     //hits per plane cut N
09719     hHitsPerPlN->Fill(numHitsPerPlane);
09720 
09722 
09723     //calc average temperature, using weighted mean
09724     static Int_t avTempCounter=0;
09725     avTempCounter++;
09726     
09727     //get a calibrator
09728     Calibrator& cal=Calibrator::Instance();
09729     //VldTimeStamp (const time_t &t, const Int_t nsec)
09730     VldTimeStamp vldts(fSec,0);
09731     VldContext vc(Detector::kCalDet,fSimFlag,vldts);
09732     cal.ReInitialise(vc);
09733     fTemperature=cal.GetTemperature();
09734 
09735     fAvTemperature=fTemperature*(1./avTempCounter)+
09736       fAvTemperature*((avTempCounter-1.)/avTempCounter);
09737     MAXMSG("CDAnalysis",Msg::kInfo,10)
09738       <<"fTemperature="<<fTemperature
09739       <<", fAvTemperature="<<fAvTemperature
09740       <<", avTempCounter="<<avTempCounter<<endl;
09741 
09742     //see if any events would have been cut out
09743     if (this->CutOnOverlap()) {
09744       eventsTxtFileOL<<event<<endl;
09745     }
09746     else hOLChi2N->Fill(fOLChi2);
09747 
09748     if (fResultEven==1 && fResultOdd==1){
09749       if (meu<=0 || meuPLCorrected<=0){
09750         cout<<"Ahhhhhh MEU less than zero"<<endl;
09751       }
09752       else{
09753         hMeu->Fill(meu);
09754         hMeuPLCor->Fill(meuPLCorrected);
09755         hMeuTruePLCor->Fill(meuTruePLCorrected);
09756       }
09757     }
09758     else{
09759       MAXMSG("CDAnalysis",Msg::kDebug,100)
09760         <<"Track not good in both views"<<endl;
09761     }
09762     hNumPlanesN->Fill(numPlanesHit);
09763     hHitsPerPl25N_1->Fill(numHitsPerPlane25);
09764     if (numHitsPerPlane25>3) {
09765       MAXMSG("CDAnalysis",Msg::kDebug,100)
09766         <<"*******hpp25="<<numHitsPerPlane25
09767         <<", event="<<event<<", size="<<fNumPlanesHit25.size()
09768         <<", numh="<<numHits25<<", size2="<<numPlanesHit25<<endl;
09769       eventsTxtFileStrips25<<event<<endl;
09770     }
09771 
09772     Float_t highEn=-1;
09773     Float_t lowEn=-1;
09774     this->TrueHighLowEn(highEn,lowEn);
09775     hHighEn->Fill(highEn);
09776     hLowEn->Fill(lowEn);
09777     MAXMSG("CDAnalysis",Msg::kInfo,100)
09778       <<"HighEn="<<highEn<<", lowEn="<<lowEn<<endl;
09779 
09780     //look at straightness of tracky events
09781     Double_t radiusCut=0.2;
09782     Bool_t straightTrk=StraightTrack_Radius(radiusCut);
09783     if (straightTrk) straightTrackCounter++;
09784     map<Float_t,Bool_t> mStraightTrk;
09785     for (Float_t r=0.05;r<0.51;r+=0.05){
09786       mStraightTrk[r]=StraightTrack_Radius(r);
09787     }
09788 
09790     //section for response
09792     const Int_t os=eventLength;
09793 
09794     //must fill the profs before looping over the maps because
09795     //zeros will get added to the maps at the window stage!
09796     //use "Orig" maps - made before doing nasty hack!
09797     //fill profs for all stripends
09798     this->FillProfHisto(pSigCorVsPlane,num,planeSigCorOrig);
09799     this->FillProfHisto(pSigCorVsPlaneX,numX,planeSigCorX);
09800     this->FillProfHisto(pSigCorVsPlaneT,numT,planeSigCorTOrig);
09801     //offset
09802     this->FillProfHisto(pSigCorVsOsPlane,numOs,planeSigCorOrig,os);
09803     this->FillProfHisto(pSigCorVsOsPlaneX,numOsX,planeSigCorX,os);
09804     this->FillProfHisto(pSigCorVsOsPlaneT,numOsT,planeSigCorTOrig,os);
09805 
09806     //fill non-offset profs for individual stripends
09807     this->FillProfHisto(pSigCorVsPlaneO1,numO1,planeSigCorO1);
09808     this->FillProfHisto(pSigCorVsPlaneO1X,numO1X,planeSigCorO1X);
09809     this->FillProfHisto(pSigCorVsPlaneO1T,numO1T,planeSigCorO1TOrig);
09810     this->FillProfHisto(pSigCorVsPlaneO2,numO2,planeSigCorO2);
09811     this->FillProfHisto(pSigCorVsPlaneO2X,numO2X,planeSigCorO2X);
09812     this->FillProfHisto(pSigCorVsPlaneO2T,numO2T,planeSigCorO2TOrig);
09813     this->FillProfHisto(pSigCorVsPlaneE1,numE1,planeSigCorE1);
09814     this->FillProfHisto(pSigCorVsPlaneE1X,numE1X,planeSigCorE1X);
09815     this->FillProfHisto(pSigCorVsPlaneE1T,numE1T,planeSigCorE1TOrig);
09816     this->FillProfHisto(pSigCorVsPlaneE2,numE2,planeSigCorE2);
09817     this->FillProfHisto(pSigCorVsPlaneE2X,numE2X,planeSigCorE2X);
09818     this->FillProfHisto(pSigCorVsPlaneE2T,numE2T,planeSigCorE2TOrig);
09819 
09820     //fill offset profs for individual stripends
09821     this->FillProfHisto(pSigCorVsOsPlaneO1,numOsO1,planeSigCorO1,os);
09822     this->FillProfHisto(pSigCorVsOsPlaneO1X,numOsO1X,planeSigCorO1X,os);
09823     this->FillProfHisto(pSigCorVsOsPlaneO1T,numOsO1T,planeSigCorO1TOrig,
09824                         os);
09825     this->FillProfHisto(pSigCorVsOsPlaneO2,numOsO2,planeSigCorO2,os);
09826     this->FillProfHisto(pSigCorVsOsPlaneO2X,numOsO2X,planeSigCorO2X,os);
09827     this->FillProfHisto(pSigCorVsOsPlaneO2T,numOsO2T,planeSigCorO2TOrig,
09828                         os);
09829     this->FillProfHisto(pSigCorVsOsPlaneE1,numOsE1,planeSigCorE1,os);
09830     this->FillProfHisto(pSigCorVsOsPlaneE1X,numOsE1X,planeSigCorE1X,os);
09831     this->FillProfHisto(pSigCorVsOsPlaneE1T,numOsE1T,planeSigCorE1TOrig,
09832                         os);
09833     this->FillProfHisto(pSigCorVsOsPlaneE2,numOsE2,planeSigCorE2,os);
09834     this->FillProfHisto(pSigCorVsOsPlaneE2X,numOsE2X,planeSigCorE2X,os);
09835     this->FillProfHisto(pSigCorVsOsPlaneE2T,numOsE2T,planeSigCorE2TOrig,
09836                         os);
09837 
09839     //section for total event sigcor and mips
09841     Float_t localSumSigCorTotal=0;
09842     Float_t localSumSigCorTotalCounter=0;
09843     for (map<Int_t,Float_t>::iterator sig=planeSigCorT.begin();
09844          sig!=planeSigCorT.end();++sig){
09845       localSumSigCorTotal+=sig->second;
09846       localSumSigCorTotalCounter++;
09847       
09848       //fill histos of all hits. Added June/2007
09849       Int_t pl=sig->first;
09850       if (pl<60) sigCorNoPLCorHistos[pl]->Fill(sig->second);
09851       else cout<<"Ahhhh, plane>=60!!!!!"<<endl;
09852     }
09853 
09854     //add total of this event to the sum of all events 
09855     if (localSumSigCorTotalCounter!=0){
09856       sumSigCorTotal+=localSumSigCorTotal;
09857       sumSigCorTotalCounter++;
09858     }
09859 
09860     Float_t localSumMipTotal=0;
09861     Float_t localSumMipTotalCounter=0;
09862     for (map<Int_t,Float_t>::iterator sig=planeMipT.begin();
09863          sig!=planeMipT.end();++sig){
09864       localSumMipTotal+=sig->second;
09865       localSumMipTotalCounter++;
09866     }
09867 
09868     //add total of this event to the sum of all events 
09869     if (localSumMipTotalCounter!=0){
09870       sumMipTotal+=localSumMipTotal;
09871       sumMipTotalCounter++;
09872     }
09873 
09874     //work out event length
09875     Int_t lastPlNoXTalk=this->CalcLastPlaneOnTrkNoXTalk();
09876     hEvLenFe->Fill(lastPlNoXTalk);
09877     pSigCorVsRange->Fill(lastPlNoXTalk,localSumSigCorTotal);
09878 
09880     //section for sliding window
09882     //Int_t minEventLength=30;
09883 
09884     //initialise the profile histos
09885     static Bool_t firstTime=true;
09886     if (firstTime){
09887       for (Int_t p=18;p>1;p--){
09888         vWindowSize.push_back(p);
09889         bigAv.push_back(0);
09890         bigAvCounter.push_back(0);
09891       }
09892 
09893       for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
09894            windowSize!=vWindowSize.end();++windowSize){
09895         
09896         string sName=Form("%d",*windowSize);
09897         pSigCorVsDist.push_back
09898           (new TProfile(("pSigCorVsDist"+sName).c_str(),
09899                         ("pSigCorVsDist"+sName).c_str(),100,-2,40));
09900         pSigCorVsDistN.push_back
09901           (new TProfile(("pSigCorVsDistN"+sName).c_str(),
09902                         ("pSigCorVsDistN"+sName).c_str(),100,-2,40));
09903       }
09904     }
09905     firstTime=false;
09906 
09907     vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
09908     vector<TProfile*>::iterator profN=pSigCorVsDistN.begin();
09909     vector<Float_t>::iterator av=bigAv.begin();
09910     vector<Int_t>::iterator count=bigAvCounter.begin();
09911     Float_t localSum15_18=0;
09912     Float_t localSum15_18Counter=0;
09913     Float_t localSum15_18Mip=0;
09914     Float_t localSum15_18MipCounter=0;
09915 
09916     Float_t localSum10_16=0;
09917     Float_t localSum10_16Counter=0;
09918     Float_t localSum10_10=0;
09919     Float_t localSum10_10Counter=0;
09920     Float_t localSum14_16=0;
09921     Float_t localSum14_16Counter=0;
09922     Float_t localSum14_10=0;
09923     Float_t localSum14_10Counter=0;
09924     Float_t localSum18_16=0;
09925     Float_t localSum18_16Counter=0;
09926     Float_t localSum18_10=0;
09927     Float_t localSum18_10Counter=0;
09928 
09929     Float_t localSum14_16NoXTalk=0;
09930     Float_t localSum14_16NoXTalkCounter=0;
09931 
09932     //loop over the different window sizes
09933     for (vector<Int_t>::iterator windowSize=vWindowSize.begin();
09934          windowSize!=vWindowSize.end();++windowSize){
09935       
09936       //slide the window along from the end to 40-windowSize
09937       //for (Int_t p=0;p<minEventLength-*windowSize;p++){
09938       for (Int_t p=0;p<60;p++){
09939         Int_t windowStart=eventLength-p;
09940         Int_t windowStartNoXTalk=lastPlNoXTalk-p;
09941 
09942         //don't do unphysical windows
09943         if (windowStart-(*windowSize)<0) continue;
09944 
09945         MAXMSG("CDAnalysis",Msg::kDebug,500)
09946           <<"Window size="<<*windowSize<<", window start="<<windowStart
09947           <<", eventLength-18="<<eventLength-18<<endl;
09948  
09949         //loop through the hits in the window
09950         for (Int_t i=0;i<*windowSize;i++){
09951           Int_t plane=windowStart-i;
09952           Int_t planeNoXTalk=windowStartNoXTalk-i;
09953           
09954           //sum up energy based on track length with no xtalk
09955           if (*windowSize==14 && windowStartNoXTalk==lastPlNoXTalk-16){
09956             localSum14_16NoXTalk+=planeSigCorT[planeNoXTalk];
09957             localSum14_16NoXTalkCounter++;
09958             MAXMSG("CDAnalysis",Msg::kDebug,500)
09959               <<"Win size="<<*windowSize
09960               <<", win start="<<windowStart
09961               <<" (NoXTalk="<<windowStartNoXTalk<<")"
09962               <<", pl="<<plane
09963               <<", plNoXTalk="<<planeNoXTalk
09964               <<", sc="<<planeSigCorT[plane]
09965               <<", scNXT="<<planeSigCorT[planeNoXTalk]
09966               <<endl;
09967           }
09968 
09969           //calculate the best window value
09970           //if fLP=48 then the first plane included is 30
09971           //this is actually the 19th from the end of the track
09972           if (*windowSize==15 && windowStart==eventLength-18){
09973             localSum15_18+=planeSigCorT[plane];//total including xtalk
09974             localSum15_18Counter++;
09975             localSum15_18Mip+=planeMipT[plane];//total including xtalk
09976             localSum15_18MipCounter++;
09977           }
09978 
09979           if (*windowSize==10 && windowStart==eventLength-16){
09980             localSum10_16+=planeSigCorT[plane];//total including xtalk
09981             localSum10_16Counter++;
09982           }
09983           if (*windowSize==10 && windowStart==eventLength-10){
09984             localSum10_10+=planeSigCorT[plane];//total including xtalk
09985             localSum10_10Counter++;
09986           }
09987           if (*windowSize==14 && windowStart==eventLength-16){
09988             Double_t localSigCorT=planeSigCorT[plane];
09989             localSum14_16+=localSigCorT;
09990             localSum14_16Counter++;
09991             meuHistos[plane]->Fill(localSigCorT);
09992 
09993             //fill strip vs plane maps (per strip, not stripend)
09994             map<Int_t,Float_t>::iterator sc=(stplSigCor[plane]).begin();
09995             for (map<Int_t,Float_t>::iterator i=
09996                    (stplNum[plane]).begin();
09997                  i!=(stplNum[plane]).end();++i){
09998               Int_t strip=i->first;
09999               Float_t num=i->second;
10000               Float_t sigCor=sc->second;
10001               MAXMSG("CDAnalysis",Msg::kDebug,500)
10002                 <<"st="<<i->first<<", num="<<i->second<<endl
10003                 <<"st="<<sc->first<<", sc="<<sc->second<<endl;
10004               pStVsPlWin->Fill(plane,strip,sigCor);
10005               hStVsPlNum->Fill(plane,strip,num);
10006 
10007               //iterate to the next
10008               ++sc;
10009             }
10010           }
10011           if (*windowSize==14 && windowStart==eventLength-10){
10012             localSum14_10+=planeSigCorT[plane];//total including xtalk
10013             localSum14_10Counter++;
10014           }
10015           if (*windowSize==18 && windowStart==eventLength-16){
10016             localSum18_16+=planeSigCorT[plane];//total including xtalk
10017             localSum18_16Counter++;
10018           }
10019           if (*windowSize==18 && windowStart==eventLength-10){
10020             localSum18_10+=planeSigCorT[plane];//total including xtalk
10021             localSum18_10Counter++;
10022           }
10023           
10024           (*prof)->Fill(p,planeSigCorT[plane]);
10025           (*profN)->Fill(p,planeSigCorT[plane]);
10026           (*av)+=planeSigCorT[plane];
10027           (*count)++;
10028         }
10029 
10030       }
10031       av++;
10032       count++;
10033       prof++;
10034       profN++;
10035     }
10036 
10037     if (localSum15_18Counter!=0){
10038       h15_18->Fill(localSum15_18/15);
10039       sum15_18+=localSum15_18;//add this event's energy on to total
10040       sum15_18Counter++;
10041       sum15_18Mip+=localSum15_18Mip;
10042       sum15_18MipCounter++;
10043     }
10044 
10045     //fill the no xtalk histo
10046     if (localSum14_16NoXTalkCounter!=0) {
10047       h14_16NoXTalk->Fill(localSum14_16NoXTalk/14);
10048     }
10049 
10050     if (localSum10_16Counter!=0) h10_16->Fill(localSum10_16/10);
10051     if (localSum10_10Counter!=0) h10_10->Fill(localSum10_10/10);
10052     if (localSum14_16Counter!=0) {
10053       h14_16->Fill(localSum14_16/14);
10054       if (straightTrk) h14_16Straight->Fill(localSum14_16/14);
10055       //loop and fill prof with different straightnesses
10056       for (map<Float_t,Bool_t>::iterator sTrk=mStraightTrk.begin();
10057            sTrk!=mStraightTrk.end();++sTrk){
10058         if (sTrk->second){
10059           pMeuVsStraightness->Fill(sTrk->first,localSum14_16/14);
10060           pMeuVsStraightnessN->Fill(sTrk->first,localSum14_16/14);
10061         }
10062         MAXMSG("CDAnalysis",Msg::kVerbose,500)
10063           <<"r="<<sTrk->first<<", straight="<<sTrk->second<<endl;
10064       }
10065     }
10066     if (localSum14_10Counter!=0) h14_10->Fill(localSum14_10/14);
10067     if (localSum18_16Counter!=0) h18_16->Fill(localSum18_16/18);
10068     if (localSum18_10Counter!=0) h18_10->Fill(localSum18_10/18);
10069 
10070     Float_t meu2=localSum14_16/14;
10071     if (fabs(meu-meu2)/(0.5*(meu+meu2+0.0001))>0.001){
10072       MAXMSG("CDAnalysis",Msg::kError,2000)
10073         <<"MEUs differ: meu="<<meu<<", meu2="<<meu2<<endl;
10074     }
10075 
10076     //section to look at the fraction of meu contributed by each strip
10077     if (meu>0){
10078       Int_t minPlane=-1;
10079       Int_t maxPlane=-1;
10080       this->GetEvLenMinMax(minPlane,maxPlane);
10081       MAXMSG("CDAnalysis",Msg::kDebug,20)
10082         <<"size="<<stplSigCor.size()<<endl;
10083       //loop over all possible strips and planes in the track window
10084       for (Int_t p=minPlane-16-14;p<=maxPlane-16;p++){
10085         //get an iterator to the strips for this plane
10086         map<Int_t,map<Int_t,Float_t> >::iterator pIt=stplSigCor.find(p);
10087         for (Int_t s=0;s<24;s++){
10088           Float_t sigCor=0;
10089 
10090           Int_t winLower=eventLength-16-14;
10091           Int_t winUpper=eventLength-16;
10092           MAXMSG("CDAnalysis",Msg::kDebug,2000)
10093             <<"winLower="<<winLower<<", winUpper="<<winUpper<<endl;
10094           //only get the sigcor value if it's in the window
10095           //14 planes, if last==50, then 20<p<=34 = 14 all together
10096           if (p>winLower && p<=winUpper){
10097             MAXMSG("CDAnalysis",Msg::kDebug,2000)
10098               <<"Plane was in window="<<p
10099               <<", winLower="<<winLower<<", winUpper="<<winUpper<<endl;
10100             //check if there were hits in pl
10101             if (pIt!=stplSigCor.end()){
10102               MAXMSG("CDAnalysis",Msg::kDebug,2000)
10103                 <<"Plane had strips hit="<<p<<endl;
10104               map<Int_t,Float_t>::iterator sIt=pIt->second.find(s);
10105               //check if strip has hit
10106               if (sIt!=pIt->second.end()){
10107                 sigCor=sIt->second;
10108                 MAXMSG("CDAnalysis",Msg::kDebug,2000)
10109                   <<"Strip was hit, getting sigCor="<<sigCor<<endl;
10110               }
10111             }
10112           }
10113           Float_t fract=(sigCor/14)/meu;
10114           MAXMSG("CDAnalysis",Msg::kDebug,2000)
10115             <<"p="<<p<<", s="<<s<<", sigCor="<<sigCor
10116             <<", fract="<<fract<<endl;
10117           pStVsPlWinFract->Fill(p,s,fract);
10118         }
10119       }
10120     }//end of if meu
10121 
10122     //look at OLChi2
10123     //else cout<<"event="<<event<<endl;
10124     //make plot of how meu varies with OLChi2
10125     for (Float_t olc=0;olc<10;olc+=0.05){
10126       if (olc>fOLChi2){
10127         MAXMSG("CDAnalysis",Msg::kDebug,2000)
10128           <<"Filling: olc="<<olc<<", fOLChi2="<<fOLChi2<<endl;
10129         pSigCorVsOLChi2Sum->Fill(olc,meu);
10130       }
10131       else {
10132         MAXMSG("CDAnalysis",Msg::kDebug,200)
10133           <<"Not filled: olc="<<olc<<", fOLChi2="<<fOLChi2<<endl;
10134       }
10135     }
10136 
10137     if (1.*numPlanesHit/eventLength<0.9){
10138       MAXMSG("CDAnalysis",Msg::kDebug,100)
10139         <<"low hit planes="<<1.*numPlanesHit/eventLength
10140         <<", event="<<event
10141         <<", TimeDiff=("<<fLowScint_Tof
10142         <<" -> "<<fUpScint_Tof<<")"<<endl
10143         <<"       Time=("<<lowTime
10144         <<" -> "<<upTime<<")"
10145         <<", sec="<<fSec
10146         <<endl;
10147       eventsTxtFileLowPlanesHit<<event<<endl;
10148     }
10149   }//end of for                                       
10150   
10154 
10155   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
10156 
10157   //turn off the stats box printing
10158   gStyle->SetOptStat(0);
10159 
10160   //all stripends
10161   string sTitle="Energy Deposition (SigCor, all Stripends)";
10162   string sXTitle="Distance from end of track (planes)";
10163   this->DrawResponsePlot(sTitle,pSigCorVsPlane,pSigCorVsPlaneX,
10164                          pSigCorVsPlaneT,num,numX,numT);
10165   sTitle="Energy Deposition Vs Distance (SigCor, all Stripends)";
10166   this->DrawResponsePlot(sTitle,pSigCorVsOsPlane,pSigCorVsOsPlaneX,
10167                          pSigCorVsOsPlaneT,numOs,numOsX,numOsT,sXTitle);
10168 
10169   //non-offset planes
10170   sTitle="Energy Deposition (SigCor in Odd Planes FD stripend)";
10171   this->DrawResponsePlot(sTitle,pSigCorVsPlaneO1,pSigCorVsPlaneO1X,
10172                          pSigCorVsPlaneO1T,numO1,numO1X,numO1T);
10173 
10174   sTitle="Energy Deposition (SigCor in Odd Planes ND stripend)";
10175   this->DrawResponsePlot(sTitle,pSigCorVsPlaneO2,pSigCorVsPlaneO2X,
10176                          pSigCorVsPlaneO2T,numO2,numO2X,numO2T);
10177 
10178   sTitle="Energy Deposition (SigCor in Even Planes FD stripend)";
10179   this->DrawResponsePlot(sTitle,pSigCorVsPlaneE1,pSigCorVsPlaneE1X,
10180                          pSigCorVsPlaneE1T,numE1,numE1X,numE1T);
10181 
10182   sTitle="Energy Deposition (SigCor in Even Planes ND stripend)";
10183   this->DrawResponsePlot(sTitle,pSigCorVsPlaneE2,pSigCorVsPlaneE2X,
10184                          pSigCorVsPlaneE2T,numE2,numE2X,numE2T);
10185 
10186   //offset planes
10187   sTitle="Energy Deposition Vs Distance (SigCor in Odd Planes FD stripend)";
10188   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneO1,pSigCorVsOsPlaneO1X,
10189                          pSigCorVsOsPlaneO1T,numOsO1,numOsO1X,numOsO1T,
10190                          sXTitle);
10191 
10192   sTitle="Energy Deposition Vs Distance (SigCor in Odd Planes ND stripend)";
10193   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneO2,pSigCorVsOsPlaneO2X,
10194                          pSigCorVsOsPlaneO2T,numOsO2,numOsO2X,numOsO2T,
10195                          sXTitle);
10196 
10197   sTitle="Energy Deposition Vs Distance (SigCor in Even Planes FD stripend)";
10198   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneE1,pSigCorVsOsPlaneE1X,
10199                          pSigCorVsOsPlaneE1T,numOsE1,numOsE1X,numOsE1T,
10200                          sXTitle);
10201 
10202   sTitle="Energy Deposition Vs Distance (SigCor in Even Planes ND stripend)";
10203   this->DrawResponsePlot(sTitle,pSigCorVsOsPlaneE2,pSigCorVsOsPlaneE2X,
10204                          pSigCorVsOsPlaneE2T,numOsE2,numOsE2X,numOsE2T,
10205                          sXTitle);
10206 
10207   //normalise the prof
10208   for (vector<TProfile*>::iterator profN=pSigCorVsDistN.begin();
10209        profN!=pSigCorVsDistN.end();++profN){
10210     static vector<Float_t>::iterator av=bigAv.begin();
10211     static vector<Int_t>::iterator count=bigAvCounter.begin();
10212     static vector<TProfile*>::iterator prof=pSigCorVsDist.begin();
10213     
10214     //normalise the prof and scale the axes
10215     MSG("CDAnalysis",Msg::kDebug)
10216       <<"bigCounter="<<*count<<", bigAv="<<*av<<endl;
10217     if (*av>0) (*profN)->Scale((*count)/(*av));
10218     (*profN)->SetMaximum(1.2);
10219     (*profN)->SetMinimum(0.8);      
10220     (*profN)->SetTitle("Normalised Av. SigCor in Sliding Window");
10221     (*profN)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
10222     (*profN)->GetYaxis()->SetTitle("Normalised Av. SigCor");
10223     (*profN)->GetXaxis()->CenterTitle();
10224     (*profN)->GetYaxis()->CenterTitle();
10225     fS=(*profN)->GetName();
10226     Int_t pos=fS.find("14");
10227     //get the gradient for the chosen track-window
10228     if (pos>=0){
10229       (*profN)->Fit("pol1","q","",5,14);
10230       fSigCorVsDistM=(*profN)->GetFunction("pol1")->GetParameter(1);
10231       MSG("CDAnalysis",Msg::kDebug)<<"m="<<fSigCorVsDistM<<endl;
10232     }
10233 
10234     //now set the titles for the other one
10235     (*prof)->SetTitle("Average SigCor in Sliding Window");
10236     (*prof)->GetXaxis()->SetTitle("Start of sliding window (planes from end of track)");
10237     (*prof)->GetYaxis()->SetTitle("Average SigCor");
10238     (*prof)->GetXaxis()->CenterTitle();
10239     (*prof)->GetYaxis()->CenterTitle();
10240 
10241     av++;
10242     count++;
10243     prof++;
10244   }
10245 
10246   //normalise the pMeuVsLowEvLenCutNormN
10247   if (h14_16->GetMean()>0){
10248     pMeuVsLowEvLenCutNormN->Scale(1./h14_16->GetMean());
10249     pMeuVsLowEvLenCutNormN_1->Scale(1./h14_16->GetMean());
10250     pMeuVsUpEvLenCutNormN->Scale(1./h14_16->GetMean());
10251     pMeuVsUpEvLenCutNormN_1->Scale(1./h14_16->GetMean());
10252     pMeuVsStraightnessN->Scale(1./h14_16->GetMean());
10253   }
10254 
10255   Int_t lEvLenCutMin=-1;
10256   Int_t lEvLenCutMax=-1;
10257   this->GetEvLenMinMax(lEvLenCutMin,lEvLenCutMax);
10258   pMeuVsLowEvLenCutNormN->Fit
10259     ("pol1","q","",lEvLenCutMin,lEvLenCutMin+4);
10260   //<<"m="<<pMeuVsLowEvLenCutNormN->
10261   //GetFunction("pol1")->GetParameter(1)<<endl;
10262   fMeuVsEvLenCutM=pMeuVsLowEvLenCutNormN->
10263     GetFunction("pol1")->GetParameter(1);
10264 
10265   //create graphs
10266   TGraphErrors* gMeuVsWin=new TGraphErrors(6);
10267   TGraphErrors* gMeuVsWinCor=new TGraphErrors(6);
10268   TGraphErrors* gCorVsWin=new TGraphErrors(6);
10269   TGraphErrors* gMeuVsWinN=new TGraphErrors(6);
10270   TGraphErrors* gMeuVsWinCorN=new TGraphErrors(6);
10271   
10272   //MC correction factors relative to 14_16 MEU
10273   Float_t MCCor10_10=1.012;//0.988;
10274   Float_t MCCor10_16=1.007;//0.993;
10275   Float_t MCCor14_10=1.010;//0.990;
10276   Float_t MCCor14_16=1.0;//by definition
10277   Float_t MCCor18_10=1.007;//0.993;
10278   Float_t MCCor18_16=0.996;//1.004;
10279   
10280   gMeuVsWin->SetPoint(0,1,h10_10->GetMean());
10281   gMeuVsWin->SetPoint(1,2,h10_16->GetMean());
10282   gMeuVsWin->SetPoint(2,3,h14_10->GetMean());
10283   gMeuVsWin->SetPoint(3,4,h14_16->GetMean());
10284   gMeuVsWin->SetPoint(4,5,h18_10->GetMean());
10285   gMeuVsWin->SetPoint(5,6,h18_16->GetMean());
10286   
10287   gMeuVsWinCor->SetPoint(0,1,h10_10->GetMean()*MCCor10_10);
10288   gMeuVsWinCor->SetPoint(1,2,h10_16->GetMean()*MCCor10_16);
10289   gMeuVsWinCor->SetPoint(2,3,h14_10->GetMean()*MCCor14_10);
10290   gMeuVsWinCor->SetPoint(3,4,h14_16->GetMean()*MCCor14_16);
10291   gMeuVsWinCor->SetPoint(4,5,h18_10->GetMean()*MCCor18_10);
10292   gMeuVsWinCor->SetPoint(5,6,h18_16->GetMean()*MCCor18_16);
10293 
10294   vector<TGraph*> v(2);
10295   v[0]=dynamic_cast<TGraph*>(gMeuVsWin);
10296   v[1]=dynamic_cast<TGraph*>(gMeuVsWinCor);
10297   this->TGraphMinMax(v);
10298   
10299   gCorVsWin->SetPoint(0,1,1/MCCor10_10);
10300   gCorVsWin->SetPoint(1,2,1/MCCor10_16);
10301   gCorVsWin->SetPoint(2,3,1/MCCor14_10);
10302   gCorVsWin->SetPoint(3,4,1/MCCor14_16);
10303   gCorVsWin->SetPoint(4,5,1/MCCor18_10);
10304   gCorVsWin->SetPoint(5,6,1/MCCor18_16);
10305 
10306   Float_t av=(h10_10->GetMean()+h10_16->GetMean()+
10307               h14_10->GetMean()+h14_16->GetMean()+
10308               h18_10->GetMean()+h18_16->GetMean())/6;
10309   Float_t avC=(h10_10->GetMean()*MCCor10_10+
10310                h10_16->GetMean()*MCCor10_16+
10311                h14_10->GetMean()*MCCor14_10+
10312                h14_16->GetMean()*MCCor14_16+
10313                h18_10->GetMean()*MCCor18_10+
10314                h18_16->GetMean()*MCCor18_16)/6;
10315 
10316   if (av>0){
10317     gMeuVsWinN->SetPoint(0,1,h10_10->GetMean()/av);
10318     gMeuVsWinN->SetPoint(1,2,h10_16->GetMean()/av);
10319     gMeuVsWinN->SetPoint(2,3,h14_10->GetMean()/av);
10320     gMeuVsWinN->SetPoint(3,4,h14_16->GetMean()/av);
10321     gMeuVsWinN->SetPoint(4,5,h18_10->GetMean()/av);
10322     gMeuVsWinN->SetPoint(5,6,h18_16->GetMean()/av);
10323   }
10324   if (avC>0){
10325     gMeuVsWinCorN->SetPoint(0,1,h10_10->GetMean()*MCCor10_10/avC);
10326     gMeuVsWinCorN->SetPoint(1,2,h10_16->GetMean()*MCCor10_16/avC);
10327     gMeuVsWinCorN->SetPoint(2,3,h14_10->GetMean()*MCCor14_10/avC);
10328     gMeuVsWinCorN->SetPoint(3,4,h14_16->GetMean()*MCCor14_16/avC);
10329     gMeuVsWinCorN->SetPoint(4,5,h18_10->GetMean()*MCCor18_10/avC);
10330     gMeuVsWinCorN->SetPoint(5,6,h18_16->GetMean()*MCCor18_16/avC);      
10331   }
10332   v[0]=dynamic_cast<TGraph*>(gMeuVsWinN);
10333   v[1]=dynamic_cast<TGraph*>(gMeuVsWinCorN);
10334   this->TGraphMinMax(v);
10335 
10336   //have to explicitly write graphs to file with a name
10337   if (fOutFile){
10338     gMeuVsWin->Write("gMeuVsWin");
10339     gMeuVsWinCor->Write("gMeuVsWinCor");
10340     gCorVsWin->Write("gCorVsWin");
10341     gMeuVsWinN->Write("gMeuVsWinN");
10342     gMeuVsWinCorN->Write("gMeuVsWinCorN");
10343   }
10344 
10345   //turn on the stats box printing
10346   gStyle->SetOptStat(111111);
10347 
10348   TCanvas *cMeu=new TCanvas("cMeu","Meu",0,0,1200,800);
10349   cMeu->SetFillColor(0);
10350   cMeu->Divide(3,3);
10351   cMeu->cd(1);
10352   h15_18->Draw();
10353   cMeu->cd(2);
10354   h10_16->Draw();
10355   cMeu->cd(3);
10356   h10_10->Draw();
10357   cMeu->cd(4);
10358   h14_16->Draw();
10359   cMeu->cd(5);
10360   h14_10->Draw();
10361   cMeu->cd(6);
10362   h18_16->Draw();
10363   cMeu->cd(7);
10364   h18_10->Draw();
10365 
10366   TCanvas *cEvLen=new TCanvas("cEvLen","EvLen",0,0,1200,800);
10367   cEvLen->SetFillColor(0);
10368   cEvLen->Divide(2,3);
10369   cEvLen->cd(1);
10370   hEvLenFe->Draw();
10371   cEvLen->cd(2);
10372   pSigCorVsRange->Draw();
10373   
10374   TCanvas *cStVsPl=new TCanvas("cStVsPl","StVsPl",0,0,1200,800);
10375   cStVsPl->SetFillColor(0);
10376   cStVsPl->Divide(2,2);
10377   cStVsPl->cd(1);
10378   pStVsPl1->Draw("colz");
10379   cStVsPl->cd(3);
10380   pStVsPl2->Draw("colz");
10381   cStVsPl->cd(2);
10382   hStVsPl1->Draw("colz");
10383   cStVsPl->cd(4);
10384   hStVsPl2->Draw("colz");
10385 
10386   //find the peaks
10387   //this is really not a precise thing!!!
10388   //the resolution of simple "average of x planes" is only ~4% 
10389   //this can't be used to say anything about the beam energy
10390   //because every plane you add can pull the average about dramatically
10391   //a much more sophisticated technique is probably required
10392   fPeakPlaneSigCors=0;
10393   fPeakLastPlane=0;
10394   multimap<Int_t,Int_t> evLen;//plane,num
10395   for (Int_t i=0;i<60;i++){
10396     Float_t num=hEvLenFe->GetBinContent(i+1);
10397     //add to map
10398     evLen.insert(pair<Int_t,Int_t>(static_cast<Int_t>(num),i));
10399     MSG("CDAnalysis",Msg::kDebug)
10400       <<"plane="<<i<<", num="<<num
10401       <<", sigcor="<<pSigCorVsRange->GetBinContent(i+1)<<endl;
10402     static Float_t peakNum=0;
10403     if (num>peakNum){
10404       peakNum=num;
10405       fPeakLastPlane=i;
10406       fPeakPlaneSigCors=pSigCorVsRange->GetBinContent(i+1);
10407     }
10408   }
10409   /*give up, no useful info can be deduced
10410   multimap<Int_t,Int_t>::iterator evit=evLen.end();
10411   for (Int_t i=0;i<5;i++){
10412     evit--;
10413     static Float_t totNum=0;
10414     static Float_t avPl=0;
10415     Float_t pl=evit->second;
10416     Float_t oldNum=totNum;
10417     Float_t newNum=evit->first;
10418     totNum+=newNum;
10419     avPl=avPl*(oldNum/totNum)+pl*(newNum/totNum);//weighted av
10420     MSG("CDAnalysis",Msg::kDebug)
10421       <<"pl="<<pl<<", newNum="<<newNum<<", avPl="<<avPl<<endl;
10422     //evit--;
10423   }
10424   */
10425 
10426   MSG("CDAnalysis",Msg::kInfo) 
10427     <<"fPeakLastPlanePeak="<<fPeakLastPlane
10428     <<", fPeakPlaneSigCors="<<fPeakPlaneSigCors<<endl;
10429 
10430   if (sum15_18Counter!=0){
10431     MSG("CDAnalysis",Msg::kInfo) 
10432       <<endl
10433       <<" ** Calibration Summary **"<<endl
10434       <<"SigCor in sliding window 15_18:"<<endl
10435       <<"    SigCor dep="<<sum15_18<<" (N="<<sum15_18Counter<<")"<<endl
10436       <<"    Av SigCor dep="<<sum15_18/sum15_18Counter
10437       <<" +/- "<<100*(h15_18->GetRMS()/sqrt(h15_18->GetEntries()))/
10438       h15_18->GetMean()<<"%"<<endl
10439       <<"    Av SigCor dep per plane="<<(sum15_18/sum15_18Counter)/15
10440       <<" +/- "<<100*(h15_18->GetRMS()/sqrt(h15_18->GetEntries()))/
10441       h15_18->GetMean()<<"%"<<endl
10442       <<"MIPs in sliding window 15_18:"<<endl
10443       <<"    MIPs dep="<<sum15_18Mip
10444       <<" (N="<<sum15_18MipCounter<<")"<<endl
10445       <<"    Av MIPs dep="<<sum15_18Mip/sum15_18MipCounter
10446       <<endl;
10447     if (sumSigCorTotalCounter!=0){
10448       MSG("CDAnalysis",Msg::kInfo) 
10449         <<"SigCor of whole event:"<<endl
10450         <<"    Sum of SigCor dep="<<sumSigCorTotal
10451         <<" (N="<<sumSigCorTotalCounter<<")"<<endl
10452         <<"    Av sigCor dep="
10453         <<sumSigCorTotal/sumSigCorTotalCounter<<endl
10454         <<"    1 sigCor="
10455         <<1800/(sumSigCorTotal/sumSigCorTotalCounter)<<" MeV"
10456         <<endl;
10457     }
10458     if (sumMipTotalCounter!=0){
10459       MSG("CDAnalysis",Msg::kInfo) 
10460         <<"MIPs of whole event:"<<endl
10461         <<"    Sum of MIPs dep="<<sumMipTotal
10462         <<" (N="<<sumMipTotalCounter<<")"<<endl
10463         <<"    Av MIPs dep="
10464         <<sumMipTotal/sumMipTotalCounter<<endl
10465         <<"    1 MIP="
10466         <<1800/(sumMipTotal/sumMipTotalCounter)<<" MeV"<<endl
10467         <<"    1 GeV="
10468         <<(sumMipTotal/sumMipTotalCounter)/1.8<<" MIPs"
10469         <<endl<<endl;
10470     }
10471   }
10472 
10473   if (hMeuPLCor->GetEntries()>0){
10474     Double_t quantile=0.5;//quantile to compute
10475     Double_t median=-1;
10476     hMeuPLCor->GetQuantiles(1,&median,&quantile);
10477 
10478     Float_t meuPLCor=median;
10479     Float_t meuPLCorErr=hMeuPLCor->GetRMS()/
10480       sqrt(hMeuPLCor->GetEntries());
10481     Float_t meuPLCorErrRel=meuPLCorErr/meuPLCor;
10482     
10483     MSG("CDAnalysis",Msg::kInfo) 
10484       <<endl
10485       <<" ** New MEU (Median) Calibration Summary **"<<endl
10486       <<"SigCor in sliding window 14_16:"<<endl
10487       <<"    SigCors/MEU="<<meuPLCor
10488       <<" +/- "<<meuPLCorErr<<" ("<<100*meuPLCorErrRel<<"%)"<<endl
10489       <<endl;
10490   }
10491 
10492   string percentStraight="fpe";
10493   if (NCutsCounter>0){
10494     percentStraight=Form("%.1f",100.*straightTrackCounter/
10495                          NCutsCounter);
10496   }
10497   MSG("CDAnalysis",Msg::kInfo) 
10498     <<"PassPidCounter="<<passPidCounter<<endl
10499     <<"NCutsCounter="<<NCutsCounter<<endl
10500     <<"StraightTrackCounter="<<straightTrackCounter
10501     <<" ("<<percentStraight<<"% of NCuts)"<<endl;
10502 
10503   if (ts.GetSec()>minRunTime){
10504     //print the stats
10505     this->PrintPIDStats();
10506   }
10507 
10508   MSG("CDAnalysis",Msg::kInfo) 
10509     <<" ** Finished StoppingMuonCalibration method **"<<endl;
10510 }

Bool_t CDAnalysis::StraightTrack_Radius Double_t  radiusCut  )  const [private]
 

Definition at line 3377 of file CDAnalysis.cxx.

References CalcDistToPlaneCentre(), fTrkHitInfo, CDTrackedHitInfo::GetStrip(), and CDTrackedHitInfo::GetTransPos().

Referenced by StoppingMuonCalibration(), and ValidateReco().

03378 {
03379   //check if positive
03380   if (radiusCut<0) radiusCut=radiusCut-2*radiusCut;
03381   
03382   //set default return value to true
03383   Bool_t straight=true;
03384 
03385   //get tclones arrays for this snarl
03386   TClonesArray &cTrk=*fTrkHitInfo;
03387   Int_t numTrkHits=fTrkHitInfo->GetEntries();
03388   
03389   for (Int_t hit=0;hit<numTrkHits;hit++){
03390     CDTrackedHitInfo *trackedHitInfo=
03391       dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
03392     
03393     Int_t strip=trackedHitInfo->GetStrip();
03394     Double_t transPos=trackedHitInfo->GetTransPos();
03395 
03396     //calc dist to plane centre
03397     Float_t radius=this->CalcDistToPlaneCentre(strip,transPos);
03398 
03399     //test for straight tracks
03400     if (radius>radiusCut){
03401       straight=false;
03402       break;
03403     } 
03404   }
03405 
03406   //return result
03407   return straight;
03408 }

Int_t CDAnalysis::SumMapValues const std::map< Int_t, Int_t > &  mapIn  )  const
 

Definition at line 880 of file CDAnalysis.cxx.

Referenced by StoppingMuonCalibration().

00881 {
00882   Int_t sum=0;
00883   
00884   //loop and sum the values stored in the map
00885   for (map<Int_t,Int_t>::const_iterator it=mapIn.begin();
00886        it!=mapIn.end();++it){
00887     sum+=it->second;
00888   }
00889   
00890   return sum;
00891 }

void CDAnalysis::Template  ) 
 

Definition at line 16861 of file CDAnalysis.cxx.

References InitialiseLoopVariables(), MSG, and SetLoopVariables().

16862 {
16863   MSG("CDAnalysis",Msg::kInfo) 
16864     <<endl<<" ** Running the TEMPLATE!!!! method... ** "<<endl;
16865 
16867   //put any variable and histogram declarations etc here
16869 
16870   TH1F *hEvent=new TH1F("hEvent","Event",40,-5,35);
16871   hEvent->GetXaxis()->SetTitle("Event");
16872   hEvent->GetXaxis()->CenterTitle();
16873   hEvent->GetYaxis()->SetTitle("Num");
16874   hEvent->GetYaxis()->CenterTitle();
16875   hEvent->SetFillColor(0);
16876   hEvent->SetBit(TH1::kCanRebin);
16877 
16881   
16882   this->InitialiseLoopVariables();  
16883   
16884   for(Int_t event=0;event<fEvents;event++){
16885     
16886     this->SetLoopVariables(event);
16887 
16889     //put all your cuts and histogram filling here
16891     
16892     MSG("CDAnalysis",Msg::kVerbose)
16893         <<"Event="<<event<<endl;
16894     
16895     hEvent->Fill(event);
16896 
16897   }//end of for                                       
16898   
16902 
16903   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
16904 
16906   //do any plots or analysis here
16908 
16909   TCanvas *cMean=new TCanvas("cMean","Mean adc",0,0,1200,800);
16910   cMean->SetFillColor(0);
16911   cMean->cd();
16912   hEvent->Draw();
16913 
16914   MSG("CDAnalysis",Msg::kInfo) 
16915     <<endl<<" ** Finished the TEMPLATE!!!!! method ** "<<endl;
16916 }

void CDAnalysis::Template2  ) 
 

Definition at line 12078 of file CDAnalysis.cxx.

References CutOnBadPedestals(), CutOnDeadChips(), CutOnPid(), fFirstPlane, fLastPlane, fLastPlaneEven, fLastPlaneOdd, fPlane, fStrip, fStripend, fTrkHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), MSG, ReadInHitInfo(), SetLoopVariables(), and StandardSanityChecks().

12079 {
12080   MSG("CDAnalysis",Msg::kInfo) 
12081     <<" ** Running Template2 method... **"<<endl;
12082 
12083   map<Int_t,Int_t> numPlanesHit;
12084 
12088   
12089   this->InitialiseLoopVariables();  
12090   
12091   for(Int_t event=0;event<fEvents;event++){
12092     
12093     this->SetLoopVariables(event);
12094 
12095     if (this->CutOnDeadChips()) continue;
12096     if (this->CutOnPid()) continue;
12097 
12098     //get tclones arrays for this snarl
12099     TClonesArray &cTrk=*fTrkHitInfo;
12100     Int_t numTrkHits=fTrkHitInfo->GetEntries();
12101     TClonesArray &cUnTrk = *fUnTrkHitInfo;
12102     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
12103     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
12104     TClonesArray &cXTalk = *fXTalkHits;
12105     Int_t numXTalkHits=fXTalkHits->GetEntries();
12106           
12108     //loop over the untracked hits in the snarl
12110     for (Int_t hit=0;hit<numUnTrkHits;hit++){
12111       //cast the tclonesarray up to a trackedhitinfo object
12112       CDTrackedHitInfo *hitInfo=
12113         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
12114 
12115       this->ReadInHitInfo(hitInfo);
12116 
12117       //cut out the bad channels
12118       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
12119 
12120       //check the channel's sanity
12121       this->StandardSanityChecks();
12122 
12123     }
12124 
12126     //loop over xtalk hits in the snarl
12128     for (Int_t hit=0;hit<numXTalkHits;hit++){
12129       CDXTalkHitInfo *hitInfo=
12130         dynamic_cast<CDXTalkHitInfo*>(cXTalk[hit]);
12131 
12132       this->ReadInHitInfo(hitInfo);
12133       
12134       //cut out the bad channels
12135       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
12136 
12137       //check the channel's sanity
12138       this->StandardSanityChecks();
12139 
12140     }
12141 
12143     //loop over the tracked hits
12145     for (Int_t hit=0;hit<numTrkHits;hit++){
12146       CDTrackedHitInfo *trackedHitInfo=
12147         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
12148           
12149       this->ReadInHitInfo(trackedHitInfo);
12150 
12151       //cut out the bad channels
12152       if (this->CutOnBadPedestals(fPlane,fStrip,fStripend)) continue;
12153 
12154       //check the channel's sanity
12155       this->StandardSanityChecks();
12156 
12157       if (fPlane<fFirstPlane) fFirstPlane=fPlane;
12158       if (fPlane>fLastPlane) fLastPlane=fPlane;
12159       if (fPlane>fLastPlaneOdd && fPlane%2!=0) fLastPlaneOdd=fPlane;
12160       if (fPlane>fLastPlaneEven && fPlane%2==0) fLastPlaneEven=fPlane;
12161 
12162       //count the number of planes hit
12163       numPlanesHit[fPlane]++;
12164 
12165     }
12167     //end of loop over the tracked hits
12169 
12170     //check that a first plane was actually found
12171     if (fFirstPlane<0 || fFirstPlane>59) continue;
12172 
12173     //make cuts
12174     if (numPlanesHit.size()<40) continue;
12175     if (fFirstPlane<0 || fFirstPlane>59) continue;
12176     if (fLastPlane>57) continue;//cut out through going muons, no 58,59
12177 
12178   }
12179 
12183 
12184   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
12185 
12186   MSG("CDAnalysis",Msg::kInfo) 
12187     <<" ** Finished Template2 method **"<<endl;
12188 }

TGraph * CDAnalysis::TGraphMap const std::map< Int_t, Float_t > &  m  )  const
 

Definition at line 855 of file CDAnalysis.cxx.

References MSG.

Referenced by CleanMuons(), and DrawResponsePlot().

00856 {
00857   MSG("CDAnalysis",Msg::kDebug) 
00858     <<" ** Running TGraphMap method... **"<<endl;
00859 
00860   TGraph* g=new TGraph(m.size());
00861 
00862   map<Int_t,Float_t>::const_iterator mIter=m.begin();
00863 
00864   Int_t i=0;
00865 
00866   while (mIter!=m.end()){
00867     g->SetPoint(i,mIter->first,mIter->second);
00868 
00869     i++;
00870     mIter++;
00871   }
00872 
00873   MSG("CDAnalysis",Msg::kDebug) 
00874     <<" ** Finished TGraphMap method **"<<endl;
00875   return g;
00876 }

void CDAnalysis::TGraphMinMax std::vector< TGraph * > &  v  )  const
 

Definition at line 826 of file CDAnalysis.cxx.

References max, min, and MSG.

Referenced by StoppingMuonCalibration().

00827 {
00828   Float_t max=-1e200;
00829   Float_t min=+1e200;
00830 
00831   for (vector<TGraph*>::iterator vIt=v.begin();vIt!=v.end();++vIt){
00832     for (Int_t i=0;i<(*vIt)->GetN();i++){
00833       Double_t x=0;
00834       Double_t y=0;
00835       (*vIt)->GetPoint(i,x,y);
00836 
00837       //find the min and max
00838       if (y>max) max=y;
00839       if (y<min) min=y;
00840     }
00841   }
00842 
00843   MSG("CDAnalysis",Msg::kDebug)
00844     <<"Found min="<<min<<", max="<<max<<endl;
00845 
00846   //now set the min and max for 10% above and below size of range
00847   for (vector<TGraph*>::iterator vIt=v.begin();vIt!=v.end();++vIt){
00848     (*vIt)->SetMinimum(min-0.1*(max-min));
00849     (*vIt)->SetMaximum(max+0.1*(max-min));
00850   }
00851 }

TGraph * CDAnalysis::TGraphVect const std::vector< Double_t > &  vX,
const std::vector< Double_t > &  vY
const
 

Definition at line 808 of file CDAnalysis.cxx.

References MSG.

Referenced by Bb(), BbEnVsRange(), BbThkFeVsRange(), and BbVsGminos().

00810 {
00811   MSG("CDAnalysis",Msg::kDebug) 
00812     <<" ** Running TGraphVect method... **"<<endl;
00813 
00814   TGraph* g=new TGraph(vX.size());
00815 
00816   for (UInt_t i=0;i<vX.size();i++){
00817     g->SetPoint(i,vX[i],vY[i]);
00818   }
00819 
00820   MSG("CDAnalysis",Msg::kDebug) 
00821     <<" ** Finished TGraphVect method **"<<endl;
00822   return g;
00823 }

Float_t CDAnalysis::TrueDistToPlaneCentre Int_t  strip,
Float_t  xInStrFrame
const [private]
 

Definition at line 2094 of file CDAnalysis.cxx.

Referenced by IsStraightTrack_Radius(), ValidateReco(), and ValidateTruth().

02096 {
02097   Float_t stripSize=0.041*Munits::m;
02098   Float_t distToPlaneCentre=-1;
02099   //note that strips are numbered from 0  
02100 
02101   if (strip<0 || strip>23 || x>0.5 || x<-0.5) return distToPlaneCentre;
02102 
02103   Float_t dist1=-1;
02104   Float_t dist2=-1;
02105   Float_t stripsFromCentre1=-1;
02106 
02107   //get distances measured from plane centre in each view
02108   if (strip<=11) stripsFromCentre1=11-strip;
02109   else if (strip>11) stripsFromCentre1=strip-12;
02110   if (x<0) x=x-2*x;//convert to positive for later check
02111 
02112   //calc real distances
02113   dist1=stripsFromCentre1*stripSize;
02114   dist2=x;//don't need to do it for x  
02115 
02116   //move it to the middle of a strip so 
02117   //you know which strip it's actually in
02118   dist1+=stripSize*0.5;
02119 
02120   //simple bit of trig
02121   if (dist1>0 && dist2>0){
02122     distToPlaneCentre=sqrt(pow(dist1,2)+pow(dist2,2));
02123   }
02124   
02125   return distToPlaneCentre;
02126 }

Double_t CDAnalysis::TrueEnDep Int_t  inplane,
Int_t  event
const [private]
 

Definition at line 3620 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetPlane(), and CDTruthHitInfo::GetTotalEnDep().

Referenced by BbVsGminos(), CalcMeuPLCorrected(), and FillEnVsDist().

03621 {
03622   if (!fTruthHitInfo) return 0;
03623 
03624   static Int_t lastEvent=-1;
03625   static map<Int_t,Double_t> plEnDep;
03626 
03627   //if a new event then have to rebuild the map of energy dep
03628   //as a function of plane
03629   if (event!=lastEvent){
03630     //set the lastevent
03631     lastEvent=event;
03632 
03633     //clear the map
03634     plEnDep.clear();
03635 
03636     //now build the new map for this event
03637 
03638     TClonesArray &cTruth = *fTruthHitInfo;
03639     Int_t numTruthHits=fTruthHitInfo->GetEntries();
03640     
03641     //loop over the truth hits
03642     for (Int_t hit=0;hit<numTruthHits;hit++){
03643       //cast the tclonesarray up to a truthhitinfo object
03644       CDTruthHitInfo *hitInfo=
03645         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03646     
03647       Int_t plane=hitInfo->GetPlane();
03648       Double_t enDep=hitInfo->GetTotalEnDep();
03649       //Double_t earliestT1=hitInfo->GetEarliestT1();
03650 
03651       //cut out the decay electron
03652       //if (earliestT1>15e-9) continue;
03653 
03654       plEnDep[plane]+=enDep;
03655     }
03656   }
03657 
03658   return plEnDep[inplane];
03659 }

Double_t CDAnalysis::TrueEnDepNotSc Int_t  inplane,
Int_t  event
const [private]
 

Definition at line 4386 of file CDAnalysis.cxx.

References abs(), fTruthHitInfo, CDTruthHitInfo::GetMainPartEn(), CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetTotalEnDep(), and MSG.

Referenced by BbVsGminos().

04387 {
04388   if (!fTruthHitInfo) return 0;
04389 
04390   static Int_t lastEvent=-1;
04391   static map<Int_t,Double_t> plEnDep;
04392   static map<Int_t,Double_t> plMainPartEn;
04393   static Double_t totalEnDep=0;
04394 
04395   //if a new event then have to rebuild the map of energy dep
04396   //as a function of plane
04397   if (event!=lastEvent){
04398 
04399     MSG("CDAnalysis",Msg::kVerbose) 
04400       <<"Clearing the maps..."<<endl;
04401 
04402     //set the lastevent
04403     lastEvent=event;
04404 
04405     //clear the map
04406     plEnDep.clear();
04407     plMainPartEn.clear();
04408     totalEnDep=0;
04409 
04410     //now build the new map for this event
04411 
04412     TClonesArray &cTruth = *fTruthHitInfo;
04413     Int_t numTruthHits=fTruthHitInfo->GetEntries();
04414     
04415     //loop over the truth hits
04416     for (Int_t hit=0;hit<numTruthHits;hit++){
04417       //cast the tclonesarray up to a truthhitinfo object
04418       CDTruthHitInfo *hitInfo=
04419         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
04420     
04421       Int_t plane=hitInfo->GetPlane();
04422       Int_t mainParticle=hitInfo->GetMainParticle();
04423       Double_t enDep=hitInfo->GetTotalEnDep();
04424       Double_t mainPartEn=hitInfo->GetMainPartEn();
04425       //Double_t earliestT1=hitInfo->GetEarliestT1();
04426       Int_t muon=13;
04427 
04428       //cut out the decay electron
04429       //if (earliestT1>15e-9) continue;
04430 
04431       plEnDep[plane]+=enDep;
04432       //select the biggest mainPartEn
04433       if (mainPartEn>plMainPartEn[plane] && abs(mainParticle)==muon){
04434         plMainPartEn[plane]=mainPartEn;      
04435       }
04436     }
04437   }
04438 
04439   Double_t plEnDepNotSc=0;
04440     
04441   if (!(plMainPartEn[inplane]==0 || plMainPartEn[inplane+1]==0)) {
04442     plEnDepNotSc=plMainPartEn[inplane]-plEnDep[inplane]-
04443       plMainPartEn[inplane+1];
04444     totalEnDep+=plEnDep[inplane]+plEnDepNotSc;
04445   }
04446 
04447   MSG("CDAnalysis",Msg::kVerbose) 
04448     <<"pl="<<inplane<<", pEn="<<plMainPartEn[inplane]
04449     <<", pEn+1="<<plMainPartEn[inplane+1]
04450     <<", eDep="<<1000*plEnDep[inplane]
04451     <<", eDepNotSc="<<1000*plEnDepNotSc
04452     <<", tE="<<totalEnDep
04453     <<endl;
04454 
04455   return plEnDepNotSc;
04456 }

void CDAnalysis::TrueHighLowEn Float_t &  highEn,
Float_t &  lowEn
const [private]
 

Definition at line 1525 of file CDAnalysis.cxx.

References abs(), fTruthHitInfo, CDTruthHitInfo::GetMainPartEn(), and CDTruthHitInfo::GetMainParticle().

Referenced by StoppingMuonCalibration().

01526 {
01527   if (!fTruthHitInfo) return;
01528 
01529   //initialise
01530   lowEn=999999;
01531   highEn=-1;
01532 
01533   TClonesArray &cTruth = *fTruthHitInfo;
01534   Int_t numTruthHits=fTruthHitInfo->GetEntries();
01535   
01536   //loop over the truth hits
01537   for (Int_t hit=0;hit<numTruthHits;hit++){
01538     //cast the tclonesarray up to a truthhitinfo object
01539     CDTruthHitInfo *hitInfo=
01540       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
01541     
01542     Double_t energy=hitInfo->GetMainPartEn();
01543     Int_t particle=hitInfo->GetMainParticle();
01544     Int_t muon=13;
01545     
01546     if (abs(particle)==muon) {
01547       if (energy>highEn) highEn=energy;
01548       if (energy<lowEn) lowEn=energy; 
01549     }
01550   }
01551 
01552   //reset to -1 if not found to be consistent with highEn
01553   if (lowEn==999999) lowEn=-1;
01554 }

Double_t CDAnalysis::TrueMainPL Int_t  inplane,
Int_t  event
const [private]
 

Definition at line 3663 of file CDAnalysis.cxx.

References abs(), fTruthHitInfo, CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetMainPathLength(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetStrip(), and MAXMSG.

Referenced by TruePLCor(), and TruthEnDep().

03664 {
03665   if (!fTruthHitInfo) return 0;
03666 
03667   static Int_t lastEvent=-1;
03668   static map<Int_t,Double_t> plPL;
03669   //static map<Int_t,Int_t> plStrip;
03670 
03671   //if a new event then have to rebuild the map of energy dep
03672   //as a function of plane
03673   if (event!=lastEvent){
03674     MAXMSG("CDAnalysis",Msg::kDebug,50)
03675       <<"Building map..."<<endl;
03676     //set the lastevent
03677     lastEvent=event;
03678 
03679     //clear the map
03680     plPL.clear();
03681     //plStrip.clear();
03682 
03683     //now build the new map for this event
03684 
03685     TClonesArray &cTruth = *fTruthHitInfo;
03686     Int_t numTruthHits=fTruthHitInfo->GetEntries();
03687     
03688     //loop over the truth hits
03689     for (Int_t hit=0;hit<numTruthHits;hit++){
03690       //cast the tclonesarray up to a truthhitinfo object
03691       CDTruthHitInfo *hitInfo=
03692         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03693     
03694       Int_t plane=hitInfo->GetPlane();
03695       Int_t strip=hitInfo->GetStrip();
03696       Double_t pathLen=hitInfo->GetMainPathLength();
03697       Int_t particle=hitInfo->GetMainParticle();
03698       Int_t muon=13;
03699 
03700       if (abs(particle)!=muon) {
03701         MAXMSG("CDAnalysis",Msg::kDebug,100)
03702           <<"Not a muon so ignoring..."<<endl;
03703         continue;
03704       }
03705 
03706       MAXMSG("CDAnalysis",Msg::kDebug,500)
03707         <<"plane="<<plane//<<", lastSt="<<plStrip[plane]
03708         <<" (currSt="<<strip<<")"<<", lastPL="<<plPL[plane]*100
03709         <<", currentPL="<<pathLen*100<<endl;
03710       plPL[plane]+=pathLen;
03711       //plStrip[plane]=strip;
03712     }
03713     MAXMSG("CDAnalysis",Msg::kDebug,50)
03714       <<"Finished building map"<<endl;
03715   }
03716 
03717   return plPL[inplane];
03718 }

Int_t CDAnalysis::TrueMuonHunter Int_t  event  )  [private]
 

return the first plane with a muon

Definition at line 3500 of file CDAnalysis.cxx.

References abs(), fTruthHitInfo, CDTruthHitInfo::GetMainPartEn(), CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetTotalEnDep(), and MSG.

03501 {
03503   if (!fTruthHitInfo) return -1;
03504 
03505   TClonesArray &cTruth = *fTruthHitInfo;
03506   Int_t numTruthHits=fTruthHitInfo->GetEntries();
03507   
03508   Bool_t foundFirstMuon=false;
03509   Int_t firstMuonPlane=-1;
03510 
03511   //loop over the truth hits
03512   for (Int_t hit=0;hit<numTruthHits;hit++){
03513     //cast the tclonesarray up to a truthhitinfo object
03514     CDTruthHitInfo *hitInfo=
03515       dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03516     
03517     Int_t plane=hitInfo->GetPlane();
03518     Double_t enDep=hitInfo->GetTotalEnDep();
03519     //Double_t earliestT1=hitInfo->GetEarliestT1();
03520     Int_t mainParticle=hitInfo->GetMainParticle();
03521     Double_t mainPartEn=hitInfo->GetMainPartEn();
03522     Int_t muon=13;
03523 
03524     if (abs(mainParticle)==muon){
03525       
03526       if (!foundFirstMuon){
03527         MSG("CDAnalysis",Msg::kInfo)
03528           <<"Event="<<event<<": First plane with muon="<<plane<<endl;
03529         firstMuonPlane=plane;
03530         foundFirstMuon=true;
03531       }
03532 
03533       if (plane>32){
03534         MSG("CDAnalysis",Msg::kInfo)
03535           <<"Plane="<<plane<<", enDep="<<enDep
03536           <<", muon energy="<<mainPartEn<<endl;
03537       }
03538     }
03539 
03540   }
03541 
03542   return firstMuonPlane;
03543 }

Int_t CDAnalysis::TrueNumDigiScintHits Int_t  inplane,
Int_t  event
const [private]
 

Definition at line 4460 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetNumDigiScintHits(), and CDTruthHitInfo::GetPlane().

Referenced by BbVsGminos().

04462 {
04463   if (!fTruthHitInfo) return 0;
04464 
04465   static Int_t lastEvent=-1;
04466   static map<Int_t,Int_t> numHits;
04467 
04468   //if a new event then have to rebuild the map of hits
04469   //as a function of plane
04470   if (event!=lastEvent){
04471     //set the lastevent
04472     lastEvent=event;
04473 
04474     //clear the map
04475     numHits.clear();
04476 
04477     //now build the new map for this event
04478 
04479     TClonesArray &cTruth = *fTruthHitInfo;
04480     Int_t numTruthHits=fTruthHitInfo->GetEntries();
04481     
04482     //loop over the truth hits
04483     for (Int_t hit=0;hit<numTruthHits;hit++){
04484       //cast the tclonesarray up to a truthhitinfo object
04485       CDTruthHitInfo *hitInfo=
04486         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
04487     
04488       Int_t plane=hitInfo->GetPlane();
04489       Int_t numDsh=hitInfo->GetNumDigiScintHits();
04490       //Double_t earliestT1=hitInfo->GetEarliestT1();
04491 
04492       //cut out the decay electron
04493       //if (earliestT1>15e-9) continue;
04494 
04495       numHits[plane]+=numDsh;
04496     }
04497   }
04498 
04499   return numHits[inplane];
04500 }

void CDAnalysis::TruePLCor std::map< Int_t, Float_t > &  mPLCor,
Int_t  event
const [private]
 

Definition at line 1558 of file CDAnalysis.cxx.

References GetEventLength(), MAXMSG, and TrueMainPL().

Referenced by FillEnVsDist(), and StoppingMuonCalibration().

01560 {
01561   Int_t lastPlane=this->GetEventLength();
01562   if (lastPlane<0) return;
01563   Float_t lastPLCor=-1;
01564   Float_t lastPL=-1;
01565 
01566   for (Int_t pl=0;pl<=lastPlane;pl++){
01567     Float_t pathLen=this->TrueMainPL(pl,event);
01568     //get a zero if no dsh in a plane
01569     //also know that PL must be at least 0.95 cm
01570     if (pathLen<0.95*Munits::cm) {
01571       if (lastPL>=0.95*Munits::cm) pathLen=lastPL;
01572       else pathLen=0.95*Munits::cm;
01573     }
01574     //record the last PL
01575     lastPL=pathLen;
01576 
01577     Float_t pathLengthCor=pathLen/(0.95*Munits::cm);
01578     if (pathLengthCor<0.999) {
01579       MAXMSG("CDAnalysis",Msg::kWarning,500)
01580         <<"bad PLCor="<<pathLengthCor<<endl;
01581       if (lastPLCor>=1) pathLengthCor=lastPLCor;
01582       else pathLengthCor=1;
01583     }
01584     else if (pathLengthCor>0.999 && pathLengthCor<1){
01585       MAXMSG("CDAnalysis",Msg::kVerbose,500)
01586         <<"fractionally wrong PLCor="<<pathLengthCor<<endl;
01587       pathLengthCor=1;
01588     }
01589 
01590     //insert the value into the map
01591     mPLCor[pl]=pathLengthCor;
01592 
01593     //record the last PLCor
01594     lastPLCor=pathLengthCor;
01595   }
01596 }

Float_t CDAnalysis::TrueXInStripFrame Int_t  plane,
Int_t  strip,
Int_t  event
const [private]
 

Definition at line 3547 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetMainX1(), CDTruthHitInfo::GetMainX2(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), CDTruthHitInfo::GetStrip(), CDTruthHitInfo::GetTotalEnDep(), and MSG.

Referenced by IsStraightTrack_Radius(), and ValidateReco().

03549 {
03550   if (!fTruthHitInfo) return -1;
03551 
03552   static Int_t lastEvent=-1;
03553   static map<Int_t,Double_t> trueX;
03554   static map<Int_t,Int_t> counter;
03555   Int_t inStripKey=500*plane+strip;
03556 
03557   //if a new event then have to rebuild the map of x
03558   //as a function of globalstrip key
03559   if (event!=lastEvent){
03560     //set the lastevent
03561     lastEvent=event;
03562 
03563     //clear the map
03564     trueX.clear();
03565     counter.clear();
03566 
03567     //now build the new map for this event
03568 
03569     TClonesArray &cTruth = *fTruthHitInfo;
03570     Int_t numTruthHits=fTruthHitInfo->GetEntries();
03571     
03572     //loop over the truth hits
03573     for (Int_t hit=0;hit<numTruthHits;hit++){
03574       //cast the tclonesarray up to a truthhitinfo object
03575       CDTruthHitInfo *hitInfo=
03576         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
03577     
03578       Int_t pmtTruth1=hitInfo->GetPmtTruth1();
03579       Int_t pmtTruth2=hitInfo->GetPmtTruth2();
03580       Int_t sumTruth=0;
03581       
03582       //add up the bits
03583       sumTruth|=pmtTruth1;
03584       sumTruth|=pmtTruth2;
03585 
03586       //check if genuine bit is set
03587       Bool_t genuineBit=((sumTruth & DigiSignal::kGenuine)==
03588                          DigiSignal::kGenuine);
03589 
03590       //if not genuine then skip this strip
03591       if (!genuineBit) {
03592         continue;
03593       }
03594 
03595       Int_t plane=hitInfo->GetPlane();
03596       Int_t strip=hitInfo->GetStrip();
03597       Int_t stripKey=500*plane+strip;
03598 
03599       Double_t mainX1=hitInfo->GetMainX1();
03600       Double_t mainX2=hitInfo->GetMainX2();
03601       Double_t avX=(mainX1+mainX2)*0.5;
03602 
03603       if (avX==0){
03604         MSG("CDAnalysis",Msg::kDebug)
03605           <<"CDAnalysis::TrueXInStripFrame::average x="<<avX
03606           <<", enDep="<<hitInfo->GetTotalEnDep()<<endl;
03607       }
03608 
03609       trueX[stripKey]=avX;
03610       counter[stripKey]++;
03611     }
03612   }
03613 
03614   if (counter[inStripKey]>0) return trueX[inStripKey];
03615   else return -1;
03616 }

void CDAnalysis::TruthAnalysis  ) 
 

Definition at line 17045 of file CDAnalysis.cxx.

References fS, fTruthHitInfo, CDTruthHitInfo::GetMainPartEn(), CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetMainPathLength(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), CDTruthHitInfo::GetStrip(), CDTruthHitInfo::GetTotalEnDep(), CDTruthHitInfo::GetVaChip1(), CDTruthHitInfo::GetVaChip2(), InitialiseLoopVariables(), MSG, and SetLoopVariables().

17046 {
17047   MSG("CDAnalysis",Msg::kInfo) 
17048     <<" ** Running TruthAnalysis method... **"<<endl;
17049   
17050   TH1F *hStrip=new TH1F("hStrip","Strips hit",100,-2,30);
17051   hStrip->GetXaxis()->SetTitle("Strip");
17052   hStrip->GetXaxis()->CenterTitle();
17053   hStrip->GetYaxis()->SetTitle("");
17054   hStrip->GetYaxis()->CenterTitle();
17055   hStrip->SetFillColor(0);
17056   hStrip->SetBit(TH1::kCanRebin);
17057 
17058   TH1F *hPlane=new TH1F("hPlane","Planes hit",200,-2,75);
17059   hPlane->GetXaxis()->SetTitle("Plane");
17060   hPlane->GetXaxis()->CenterTitle();
17061   hPlane->GetYaxis()->SetTitle("");
17062   hPlane->GetYaxis()->CenterTitle();
17063   hPlane->SetFillColor(0);
17064   hPlane->SetBit(TH1::kCanRebin);
17065 
17066   TH1F *hPmtTruth1=new TH1F("hPmtTruth1","PmtTruth1",400,-2,125);
17067   hPmtTruth1->GetXaxis()->SetTitle("PmtTruth1");
17068   hPmtTruth1->GetXaxis()->CenterTitle();
17069   hPmtTruth1->GetYaxis()->SetTitle("");
17070   hPmtTruth1->GetYaxis()->CenterTitle();
17071   hPmtTruth1->SetFillColor(0);
17072   hPmtTruth1->SetBit(TH1::kCanRebin);
17073 
17074   TH1F *hPmtTruth2=new TH1F("hPmtTruth2","PmtTruth2",400,-2,125);
17075   hPmtTruth2->GetXaxis()->SetTitle("PmtTruth2");
17076   hPmtTruth2->GetXaxis()->CenterTitle();
17077   hPmtTruth2->GetYaxis()->SetTitle("");
17078   hPmtTruth2->GetYaxis()->CenterTitle();
17079   hPmtTruth2->SetFillColor(0);
17080   hPmtTruth2->SetBit(TH1::kCanRebin);
17081   //kUnknown       = 0x00,   // Can happen: known cause is 0 charge
17082   // but random noise passes sparsification thresh.
17083   //kGenuine       = 0x01,   // A real hit from real gosh-darn physics.
17084   //kDarkNoise        = 0x02,   // Dark noise from the tube.
17085   //kFibreLight       = 0x04,   // Random [singles] from a fibre. 
17086   //kCrosstalk        = 0x08,   // A generic crosstalk hit.
17087   //kCrosstalkOptical = 0x10,   // A crosstalk hit, specifically from
17088   //kLeakFromNextBucket = 0x20,  
17089   // The next bucket leaked charge back to this one
17090   //kLeakFromPrevBucket = 0x40  
17091 
17092   TH1F *hVaChip1=new TH1F("hVaChip1","VaChip1",50,-2,5);
17093   hVaChip1->GetXaxis()->SetTitle("VaChip1");
17094   hVaChip1->GetXaxis()->CenterTitle();
17095   hVaChip1->GetYaxis()->SetTitle("");
17096   hVaChip1->GetYaxis()->CenterTitle();
17097   hVaChip1->SetFillColor(0);
17098   hVaChip1->SetBit(TH1::kCanRebin);
17099 
17100   TH1F *hVaChip2=new TH1F("hVaChip2","VaChip2",50,-2,5);
17101   hVaChip2->GetXaxis()->SetTitle("VaChip2");
17102   hVaChip2->GetXaxis()->CenterTitle();
17103   hVaChip2->GetYaxis()->SetTitle("");
17104   hVaChip2->GetYaxis()->CenterTitle();
17105   hVaChip2->SetFillColor(0);
17106   hVaChip2->SetBit(TH1::kCanRebin);
17107 
17108   TH1F *hMainParticle=new TH1F("hMainParticle","MainParticle",200,-20,20);
17109   hMainParticle->GetXaxis()->SetTitle("MainParticle");
17110   hMainParticle->GetXaxis()->CenterTitle();
17111   hMainParticle->GetYaxis()->SetTitle("");
17112   hMainParticle->GetYaxis()->CenterTitle();
17113   hMainParticle->SetFillColor(0);
17114   hMainParticle->SetBit(TH1::kCanRebin);
17115 
17116   TH1F *hTotalEnDep=new TH1F("hTotalEnDep","TotalEnDep",
17117                              2000,-5./1000,15./1000);
17118   hTotalEnDep->GetXaxis()->SetTitle("TotalEnDep");
17119   hTotalEnDep->GetXaxis()->CenterTitle();
17120   hTotalEnDep->GetYaxis()->SetTitle("");
17121   hTotalEnDep->GetYaxis()->CenterTitle();
17122   hTotalEnDep->SetFillColor(0);
17123   hTotalEnDep->SetBit(TH1::kCanRebin);
17124 
17125   TH1F *hMainPartEn=new TH1F("hMainPartEn","MainPartEn",500,-0.5,2);
17126   hMainPartEn->GetXaxis()->SetTitle("MainPartEn");
17127   hMainPartEn->GetXaxis()->CenterTitle();
17128   hMainPartEn->GetYaxis()->SetTitle("");
17129   hMainPartEn->GetYaxis()->CenterTitle();
17130   hMainPartEn->SetFillColor(0);
17131   hMainPartEn->SetBit(TH1::kCanRebin);
17132 
17133   TH1F *hMainPathLength=new TH1F("hMainPathLength","MainPathLength",
17134                                  500,-0.01,0.1);
17135   hMainPathLength->GetXaxis()->SetTitle("MainPathLength");
17136   hMainPathLength->GetXaxis()->CenterTitle();
17137   hMainPathLength->GetYaxis()->SetTitle("");
17138   hMainPathLength->GetYaxis()->CenterTitle();
17139   hMainPathLength->SetFillColor(0);
17140   hMainPathLength->SetBit(TH1::kCanRebin);
17141 
17142   fS="Strip Vs Plane EnergyDep Map";
17143   TProfile2D* pStVsPlEnDep=new TProfile2D(fS.c_str(),fS.c_str(),
17144                                            64,-2,62,30,-3,27);
17145   pStVsPlEnDep->GetXaxis()->SetTitle("Plane");
17146   pStVsPlEnDep->GetXaxis()->CenterTitle();
17147   pStVsPlEnDep->GetYaxis()->SetTitle("Strip");
17148   pStVsPlEnDep->GetYaxis()->CenterTitle();
17149   pStVsPlEnDep->SetFillColor(0);
17150   //pStVsPlEnDep->SetMaximum(15000);
17151 
17152   fS="Strip Vs Plane Num Hits Map";
17153   TProfile2D* hStVsPlNum=new TProfile2D(fS.c_str(),fS.c_str(),64,-2,62,30,-3,27);
17154   hStVsPlNum->GetXaxis()->SetTitle("Plane");
17155   hStVsPlNum->GetXaxis()->CenterTitle();
17156   hStVsPlNum->GetYaxis()->SetTitle("Strip");
17157   hStVsPlNum->GetYaxis()->CenterTitle();
17158   hStVsPlNum->SetFillColor(0);
17159   //hStVsPlNum->SetMaximum(15000);
17160 
17161   fS="Strip Vs Plane FibreLight Map SE1";
17162   TProfile2D* hStVsPlFibreLight1=new TProfile2D(fS.c_str(),fS.c_str(),
17163                                            64,-2,62,30,-3,27);
17164   hStVsPlFibreLight1->GetXaxis()->SetTitle("Plane");
17165   hStVsPlFibreLight1->GetXaxis()->CenterTitle();
17166   hStVsPlFibreLight1->GetYaxis()->SetTitle("Strip");
17167   hStVsPlFibreLight1->GetYaxis()->CenterTitle();
17168   hStVsPlFibreLight1->SetFillColor(0);
17169   //hStVsPlFibreLight1->SetMaximum(15000);
17170 
17171   fS="Strip Vs Plane OpticalXTalk Map SE1";
17172   TH2F* hStVsPlOptXTalk1=new TH2F("hStVsPlOptXTalk1",fS.c_str(),
17173                                   64,-2,62,30,-3,27);
17174   hStVsPlOptXTalk1->GetXaxis()->SetTitle("Plane");
17175   hStVsPlOptXTalk1->GetXaxis()->CenterTitle();
17176   hStVsPlOptXTalk1->GetYaxis()->SetTitle("Strip");
17177   hStVsPlOptXTalk1->GetYaxis()->CenterTitle();
17178   hStVsPlOptXTalk1->SetFillColor(0);
17179   //hStVsPlOptXTalk1->SetMaximum(15000);
17180 
17181   fS="Strip Vs Plane DarkNoise Map SE1";
17182   TH2F* hStVsPlDarkNoise1=new TH2F(fS.c_str(),fS.c_str(),
17183                                            64,-2,62,30,-3,27);
17184   hStVsPlDarkNoise1->GetXaxis()->SetTitle("Plane");
17185   hStVsPlDarkNoise1->GetXaxis()->CenterTitle();
17186   hStVsPlDarkNoise1->GetYaxis()->SetTitle("Strip");
17187   hStVsPlDarkNoise1->GetYaxis()->CenterTitle();
17188   hStVsPlDarkNoise1->SetFillColor(0);
17189   //hStVsPlDarkNoise1->SetMaximum(15000);
17190 
17191   fS="Strip Vs Plane FibreLight Map SE2";
17192   TH2F* hStVsPlFibreLight2=new TH2F(fS.c_str(),fS.c_str(),
17193                                            64,-2,62,30,-3,27);
17194   hStVsPlFibreLight2->GetXaxis()->SetTitle("Plane");
17195   hStVsPlFibreLight2->GetXaxis()->CenterTitle();
17196   hStVsPlFibreLight2->GetYaxis()->SetTitle("Strip");
17197   hStVsPlFibreLight2->GetYaxis()->CenterTitle();
17198   hStVsPlFibreLight2->SetFillColor(0);
17199   //hStVsPlFibreLight2->SetMaximum(15000);
17200 
17201   fS="Strip Vs Plane OpticalXTalk Map SE2";
17202   TH2F* hStVsPlOptXTalk2=new TH2F("hStVsPlOptXTalk2",fS.c_str(),
17203                                            64,-2,62,30,-3,27);
17204   hStVsPlOptXTalk2->GetXaxis()->SetTitle("Plane");
17205   hStVsPlOptXTalk2->GetXaxis()->CenterTitle();
17206   hStVsPlOptXTalk2->GetYaxis()->SetTitle("Strip");
17207   hStVsPlOptXTalk2->GetYaxis()->CenterTitle();
17208   hStVsPlOptXTalk2->SetFillColor(0);
17209   //hStVsPlOptXTalk2->SetMaximum(15000);
17210 
17211   fS="Strip Vs Plane OpticalXTalk on Shared Pmt Map";
17212   TH2F* hStVsPlOptXTalkShared=new TH2F(fS.c_str(),fS.c_str(),
17213                                            64,-2,62,30,-3,27);
17214   hStVsPlOptXTalkShared->GetXaxis()->SetTitle("Plane");
17215   hStVsPlOptXTalkShared->GetXaxis()->CenterTitle();
17216   hStVsPlOptXTalkShared->GetYaxis()->SetTitle("Strip");
17217   hStVsPlOptXTalkShared->GetYaxis()->CenterTitle();
17218   hStVsPlOptXTalkShared->SetFillColor(0);
17219   //hStVsPlOptXTalkShared->SetMaximum(15000);
17220 
17221   fS="Strip Vs Plane OpticalXTalk on Non-Shared Pmt Map";
17222   TH2F* hStVsPlOptXTalkNonShared=new TH2F(fS.c_str(),fS.c_str(),
17223                                            64,-2,62,30,-3,27);
17224   hStVsPlOptXTalkNonShared->GetXaxis()->SetTitle("Plane");
17225   hStVsPlOptXTalkNonShared->GetXaxis()->CenterTitle();
17226   hStVsPlOptXTalkNonShared->GetYaxis()->SetTitle("Strip");
17227   hStVsPlOptXTalkNonShared->GetYaxis()->CenterTitle();
17228   hStVsPlOptXTalkNonShared->SetFillColor(0);
17229   //hStVsPlOptXTalkNonShared->SetMaximum(15000);
17230 
17231   fS="Strip Vs Plane DarkNoise Map SE2";
17232   TH2F* hStVsPlDarkNoise2=new TH2F(fS.c_str(),fS.c_str(),
17233                                            64,-2,62,30,-3,27);
17234   hStVsPlDarkNoise2->GetXaxis()->SetTitle("Plane");
17235   hStVsPlDarkNoise2->GetXaxis()->CenterTitle();
17236   hStVsPlDarkNoise2->GetYaxis()->SetTitle("Strip");
17237   hStVsPlDarkNoise2->GetYaxis()->CenterTitle();
17238   hStVsPlDarkNoise2->SetFillColor(0);
17239   //hStVsPlDarkNoise2->SetMaximum(15000);
17240 
17244   
17245   this->InitialiseLoopVariables();  
17246   
17247   for(Int_t event=0;event<fEvents;event++){
17248     
17249     this->SetLoopVariables(event);
17250 
17251     if (!fTruthHitInfo) break;
17252     TClonesArray &cTruth = *fTruthHitInfo;
17253     Int_t numTruthHits=fTruthHitInfo->GetEntries();
17254     
17255     MSG("CDAnalysis",Msg::kDebug)
17256       <<"Event="<<event
17257       <<", truthHits="<<numTruthHits<<endl;
17258 
17260     //loop over the truth hits
17262     for (Int_t hit=0;hit<numTruthHits;hit++){
17263       //cast the tclonesarray up to a truthhitinfo object
17264       CDTruthHitInfo *hitInfo=
17265         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
17266       
17267       Int_t plane=hitInfo->GetPlane();
17268       Int_t strip=hitInfo->GetStrip();
17269       Int_t mainParticle=hitInfo->GetMainParticle();
17270       Double_t totalEnDep=hitInfo->GetTotalEnDep();
17271       Double_t mainPartEn=hitInfo->GetMainPartEn();
17272       Double_t mainPathLength=hitInfo->GetMainPathLength();
17273       Int_t pmtTruth1=hitInfo->GetPmtTruth1();
17274       Int_t pmtTruth2=hitInfo->GetPmtTruth2();
17275       Int_t vaChip1=hitInfo->GetVaChip1();
17276       Int_t vaChip2=hitInfo->GetVaChip2();
17277 
17278       //if (plane==0) continue;
17279 
17280       hPlane->Fill(plane);
17281       hStrip->Fill(strip);
17282       hMainParticle->Fill(mainParticle);
17283       hTotalEnDep->Fill(totalEnDep);
17284       hMainPartEn->Fill(mainPartEn);
17285       hMainPathLength->Fill(mainPathLength);
17286       hPmtTruth1->Fill(pmtTruth1);
17287       hPmtTruth2->Fill(pmtTruth2);
17288       hVaChip1->Fill(vaChip1);
17289       hVaChip2->Fill(vaChip2);
17290 
17291       //do stripend 1
17292       if (pmtTruth1 & DigiSignal::kFibreLight){
17293         hStVsPlFibreLight1->Fill(plane,strip,1);
17294       }
17295 
17296       if (pmtTruth1 & DigiSignal::kCrosstalkOptical){
17297         hStVsPlOptXTalk1->Fill(plane,strip,1);
17298 
17299         //fill the shared and nonshared
17300         if (vaChip1==1) hStVsPlOptXTalkShared->Fill(plane,strip,1);
17301         else hStVsPlOptXTalkNonShared->Fill(plane,strip,1);
17302       }
17303 
17304       if (pmtTruth1 & DigiSignal::kDarkNoise){
17305         hStVsPlDarkNoise1->Fill(plane,strip,1);
17306       }
17307 
17308       //now do stripend 2
17309       if (pmtTruth2 & DigiSignal::kFibreLight){
17310         hStVsPlFibreLight2->Fill(plane,strip,1);
17311       }
17312 
17313       if (pmtTruth2 & DigiSignal::kCrosstalkOptical){
17314         hStVsPlOptXTalk2->Fill(plane,strip,1);
17315       }
17316 
17317       if (pmtTruth2 & DigiSignal::kDarkNoise){
17318         hStVsPlDarkNoise2->Fill(plane,strip,1);
17319       }
17320 
17321       pStVsPlEnDep->Fill(plane,strip,totalEnDep);
17322       hStVsPlNum->Fill(plane,strip,1);
17323     }
17324     
17325   }//end of for                                       
17326   
17330 
17331   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
17332 
17333   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
17334   cGeom->SetFillColor(0);
17335   cGeom->Divide(2,2);
17336   cGeom->cd(1);
17337   hPlane->Draw();
17338   cGeom->cd(2);
17339   hStrip->Draw();
17340   cGeom->cd(3);
17341   hVaChip1->Draw();
17342   cGeom->cd(4);
17343   hVaChip2->Draw();
17344 
17345   TCanvas *cMainParticle=new TCanvas("cMainParticle","MainParticle",0,0,1200,800);
17346   cMainParticle->SetFillColor(0);
17347   cMainParticle->Divide(2,2);
17348   cMainParticle->cd(1);
17349   hMainParticle->Draw();
17350   cMainParticle->cd(2);
17351   hTotalEnDep->Draw();
17352   cMainParticle->cd(3);
17353   hMainPartEn->Draw();
17354   cMainParticle->cd(4);
17355   hPmtTruth1->Draw();
17356   hPmtTruth2->SetLineColor(2);
17357   hPmtTruth2->Draw("same");
17358 
17359   TCanvas *cStVsPlEnDep=new TCanvas("cStVsPlEnDep","StVsPlEnDep",
17360                                     0,0,1200,800);
17361   cStVsPlEnDep->SetFillColor(0);
17362   pStVsPlEnDep->Draw("colz");
17363 
17364   TCanvas *cStVsPlNum=new TCanvas("cStVsPlNum","StVsPlNum",
17365                                   0,0,1200,800);
17366   cStVsPlNum->SetFillColor(0);
17367   hStVsPlNum->Draw("colz");
17368 
17369   TCanvas *cStVsPlFibreLight=new TCanvas("cStVsPlFibreLight",
17370                                          "StVsPlFibreLight",
17371                                          0,0,1200,800);
17372   cStVsPlFibreLight->SetFillColor(0);
17373   cStVsPlFibreLight->Divide(1,2);
17374   cStVsPlFibreLight->cd(1);
17375   hStVsPlFibreLight1->Draw("colz");
17376   cStVsPlFibreLight->cd(2);
17377   hStVsPlFibreLight2->Draw("colz");
17378   
17379   TCanvas *cStVsPlOptXTalk=new TCanvas("cStVsPlOptXTalk",
17380                                          "StVsPlOptXTalk",
17381                                          0,0,1200,800);
17382   cStVsPlOptXTalk->SetFillColor(0);
17383 
17384   cStVsPlOptXTalk->Divide(1,2);
17385   cStVsPlOptXTalk->cd(1);
17386   hStVsPlOptXTalk1->Draw("colz");
17387   cStVsPlOptXTalk->cd(2);
17388   hStVsPlOptXTalk2->Draw("colz");
17389 
17390   TCanvas *cStVsPlOptXTalk2=new TCanvas("cStVsPlOptXTalk2",
17391                                          "StVsPlOptXTalk2",
17392                                          0,0,1200,800);
17393   cStVsPlOptXTalk2->SetFillColor(0);
17394 
17395   cStVsPlOptXTalk2->Divide(1,2);
17396   cStVsPlOptXTalk2->cd(1);
17397   hStVsPlOptXTalkShared->Draw("colz");
17398   cStVsPlOptXTalk2->cd(2);
17399   hStVsPlOptXTalkNonShared->Draw("colz");
17400 
17401   TCanvas *cStVsPlDarkNoise=new TCanvas("cStVsPlDarkNoise",
17402                                          "StVsPlDarkNoise",
17403                                          0,0,1200,800);
17404   cStVsPlDarkNoise->SetFillColor(0);
17405   cStVsPlDarkNoise->Divide(1,2);
17406   cStVsPlDarkNoise->cd(1);
17407   hStVsPlDarkNoise1->Draw("colz");
17408   cStVsPlDarkNoise->cd(2);
17409   hStVsPlDarkNoise2->Draw("colz");
17410 
17411   MSG("CDAnalysis",Msg::kInfo) 
17412     <<" ** Finished TruthAnalysis method **"<<endl;
17413 }

void CDAnalysis::TruthEnDep  ) 
 

Definition at line 17417 of file CDAnalysis.cxx.

References abs(), CalcLastPlaneOnTrk(), CalcLastPlaneTruth(), CutOnEventLength(), fLastPlane, fMainParticleEnergy, fOutFile, fRunNumber, fS, fTruthHitInfo, CDTruthHitInfo::GetEarliestT1(), CDTruthHitInfo::GetLatestT2(), CDTruthHitInfo::GetMainPartEn(), CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetMainPathLength(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), CDTruthHitInfo::GetStrip(), CDTruthHitInfo::GetTotalEnDep(), InitialiseLoopVariables(), IsStraightTrack(), MAXMSG, MSG, OpenFile(), SetLoopVariables(), and TrueMainPL().

17418 {
17419   MSG("CDAnalysis",Msg::kInfo) 
17420     <<" ** Running TruthEnDep method... **"<<endl;
17421   
17422   //open the output file for the histograms
17423   fOutFile=this->OpenFile(fRunNumber,"TruthEnDep");
17424 
17425   TH1F *hPl20=new TH1F("hPl20","hPl20",200,-1,10);
17426   hPl20->SetTitle("Energy Deposition in plane 20");
17427   hPl20->GetXaxis()->SetTitle("MeV");
17428   hPl20->GetXaxis()->CenterTitle();
17429   hPl20->GetYaxis()->SetTitle("");
17430   hPl20->GetYaxis()->CenterTitle();
17431   hPl20->SetFillColor(0);
17432   hPl20->SetBit(TH1::kCanRebin);
17433 
17434   TH1F *hPl20Mu=new TH1F("hPl20Mu","hPl20Mu",200,-1,10);
17435   hPl20Mu->SetTitle("Energy Deposition in plane 20");
17436   hPl20Mu->GetXaxis()->SetTitle("MeV");
17437   hPl20Mu->GetXaxis()->CenterTitle();
17438   hPl20Mu->GetYaxis()->SetTitle("");
17439   hPl20Mu->GetYaxis()->CenterTitle();
17440   hPl20Mu->SetFillColor(0);
17441   hPl20Mu->SetLineColor(2);
17442   hPl20Mu->SetBit(TH1::kCanRebin);
17443 
17444   TH1F *hPl20NotMu=new TH1F("hPl20NotMu","hPl20NotMu",200,-1,10);
17445   hPl20NotMu->SetTitle("Energy Deposition in plane 20");
17446   hPl20NotMu->GetXaxis()->SetTitle("MeV");
17447   hPl20NotMu->GetXaxis()->CenterTitle();
17448   hPl20NotMu->GetYaxis()->SetTitle("");
17449   hPl20NotMu->GetYaxis()->CenterTitle();
17450   hPl20NotMu->SetFillColor(0);
17451   hPl20NotMu->SetLineColor(3);
17452   hPl20NotMu->SetBit(TH1::kCanRebin);
17453 
17454   TH1F *hSum15_18All=new TH1F("hSum15_18All","hSum15_18All",1000,-2,75);
17455   hSum15_18All->SetTitle("Energy Deposition in 15_18 Track Window");
17456   hSum15_18All->GetXaxis()->SetTitle("MeV");
17457   hSum15_18All->GetXaxis()->CenterTitle();
17458   hSum15_18All->GetYaxis()->SetTitle("");
17459   hSum15_18All->GetYaxis()->CenterTitle();
17460   hSum15_18All->SetFillColor(0);
17461   hSum15_18All->SetBit(TH1::kCanRebin);
17462 
17463   TH1F *hSum15_18Cut=new TH1F("hSum15_18Cut","hSum15_18Cut",500,-1,10);
17464   hSum15_18Cut->SetTitle
17465     ("Energy Deposition per MEU (Cuts on Track Quality)");
17466   hSum15_18Cut->GetXaxis()->SetTitle("MeV");
17467   hSum15_18Cut->GetXaxis()->CenterTitle();
17468   hSum15_18Cut->GetYaxis()->SetTitle("");
17469   hSum15_18Cut->GetYaxis()->CenterTitle();
17470   hSum15_18Cut->SetFillColor(0);
17471   hSum15_18Cut->SetBit(TH1::kCanRebin);
17472 
17473   TH1F *hSum15_18=new TH1F("hSum15_18","hSum15_18",500,-1,10);
17474   hSum15_18->SetTitle("Energy Deposition per MEU");
17475   hSum15_18->GetXaxis()->SetTitle("MeV");
17476   hSum15_18->GetXaxis()->CenterTitle();
17477   hSum15_18->GetYaxis()->SetTitle("");
17478   hSum15_18->GetYaxis()->CenterTitle();
17479   hSum15_18->SetFillColor(0);
17480   hSum15_18->SetBit(TH1::kCanRebin);
17481 
17482   TH1F *hSum15_18Truth=new TH1F("hSum15_18Truth","hSum15_18Truth",
17483                                 500,-1,10);
17484   hSum15_18Truth->SetTitle("Energy Deposition per MEU (True Track)");
17485   hSum15_18Truth->GetXaxis()->SetTitle("MeV");
17486   hSum15_18Truth->GetXaxis()->CenterTitle();
17487   hSum15_18Truth->GetYaxis()->SetTitle("");
17488   hSum15_18Truth->GetYaxis()->CenterTitle();
17489   hSum15_18Truth->SetFillColor(0);
17490   hSum15_18Truth->SetBit(TH1::kCanRebin);
17491 
17492   TH1F *hSumEnDep=new TH1F("hSumEnDep","hSumEnDep",
17493                              2000,-5./1000,50./1000);
17494   hSumEnDep->GetXaxis()->SetTitle("Sum of Energy Dep. in Whole Event");
17495   hSumEnDep->GetXaxis()->SetTitle("SumEnDep");
17496   hSumEnDep->GetXaxis()->CenterTitle();
17497   hSumEnDep->GetYaxis()->SetTitle("");
17498   hSumEnDep->GetYaxis()->CenterTitle();
17499   hSumEnDep->SetFillColor(0);
17500   hSumEnDep->SetBit(TH1::kCanRebin);
17501 
17502   TH1F *hSumEnDepLateT1=new TH1F("hSumEnDepLateT1","hSumEnDepLateT1",
17503                              2000,-5./1000,50./1000);
17504   hSumEnDepLateT1->GetXaxis()->SetTitle("SumEnDep");
17505   hSumEnDepLateT1->GetXaxis()->CenterTitle();
17506   hSumEnDepLateT1->GetYaxis()->SetTitle("");
17507   hSumEnDepLateT1->GetYaxis()->CenterTitle();
17508   hSumEnDepLateT1->SetFillColor(0);
17509   hSumEnDepLateT1->SetBit(TH1::kCanRebin);
17510 
17511   TH1F *hSumEnDepLateT1Cut=new TH1F("hSumEnDepLateT1Cut",
17512                                     "hSumEnDepLateT1Cut",
17513                                     2000,-5./1000,50./1000);
17514   hSumEnDepLateT1Cut->GetXaxis()->SetTitle("SumEnDep");
17515   hSumEnDepLateT1Cut->GetXaxis()->CenterTitle();
17516   hSumEnDepLateT1Cut->GetYaxis()->SetTitle("");
17517   hSumEnDepLateT1Cut->GetYaxis()->CenterTitle();
17518   hSumEnDepLateT1Cut->SetFillColor(0);
17519   hSumEnDepLateT1Cut->SetBit(TH1::kCanRebin);
17520 
17521   TH1F *hSumEnDepLateT2=new TH1F("hSumEnDepLateT2","hSumEnDepLateT2",
17522                              2000,-5./1000,50./1000);
17523   hSumEnDepLateT2->GetXaxis()->SetTitle("SumEnDep");
17524   hSumEnDepLateT2->GetXaxis()->CenterTitle();
17525   hSumEnDepLateT2->GetYaxis()->SetTitle("");
17526   hSumEnDepLateT2->GetYaxis()->CenterTitle();
17527   hSumEnDepLateT2->SetFillColor(0);
17528   hSumEnDepLateT2->SetBit(TH1::kCanRebin);
17529 
17530   TH1F *hRatioScToBeam=new TH1F("hRatioScToBeam","hRatioScToBeam",
17531                                 500,-5./1000,100./1000);
17532   hRatioScToBeam->GetXaxis()->SetTitle("Esc/Ebeam");
17533   hRatioScToBeam->GetXaxis()->CenterTitle();
17534   hRatioScToBeam->GetYaxis()->SetTitle("");
17535   hRatioScToBeam->GetYaxis()->CenterTitle();
17536   hRatioScToBeam->SetFillColor(0);
17537   hRatioScToBeam->SetBit(TH1::kCanRebin);
17538 
17539   TH1F *hRatioScToBeamCut=new TH1F("hRatioScToBeamCut",
17540                                    "hRatioScToBeamCut",
17541                                    500,-5./1000,100./1000);
17542   hRatioScToBeamCut->GetXaxis()->SetTitle("Esc/Ebeam");
17543   hRatioScToBeamCut->GetXaxis()->CenterTitle();
17544   hRatioScToBeamCut->GetYaxis()->SetTitle("");
17545   hRatioScToBeamCut->GetYaxis()->CenterTitle();
17546   hRatioScToBeamCut->SetFillColor(0);
17547   hRatioScToBeamCut->SetBit(TH1::kCanRebin);
17548 
17549   TH1F *hTotalEnDep=new TH1F("hTotalEnDep","hTotalEnDep",
17550                              2000,-5./1000,50./1000);
17551   hTotalEnDep->GetXaxis()->SetTitle("TotalEnDep");
17552   hTotalEnDep->GetXaxis()->CenterTitle();
17553   hTotalEnDep->GetYaxis()->SetTitle("");
17554   hTotalEnDep->GetYaxis()->CenterTitle();
17555   hTotalEnDep->SetFillColor(0);
17556   hTotalEnDep->SetBit(TH1::kCanRebin);
17557 
17558   TH1F *hTotalEnDepMu=new TH1F("hTotalEnDepMu","hTotalEnDepMu",
17559                              2000,-5./1000,50./1000);
17560   hTotalEnDepMu->GetXaxis()->SetTitle("TotalEnDep");
17561   hTotalEnDepMu->GetXaxis()->CenterTitle();
17562   hTotalEnDepMu->GetYaxis()->SetTitle("");
17563   hTotalEnDepMu->GetYaxis()->CenterTitle();
17564   hTotalEnDepMu->SetFillColor(0);
17565   hTotalEnDepMu->SetBit(TH1::kCanRebin);
17566 
17567   TH1F *hTotalEnDep2=new TH1F("hTotalEnDep2","hTotalEnDep2",
17568                              2000,-5./1000,50./1000);
17569   hTotalEnDep2->GetXaxis()->SetTitle("TotalEnDep");
17570   hTotalEnDep2->GetXaxis()->CenterTitle();
17571   hTotalEnDep2->GetYaxis()->SetTitle("");
17572   hTotalEnDep2->GetYaxis()->CenterTitle();
17573   hTotalEnDep2->SetFillColor(0);
17574   hTotalEnDep2->SetBit(TH1::kCanRebin);
17575 
17576   TH1F *hTotalEnDep3=new TH1F("hTotalEnDep3","hTotalEnDep3",
17577                              2000,-5./1000,50./1000);
17578   hTotalEnDep3->GetXaxis()->SetTitle("TotalEnDep");
17579   hTotalEnDep3->GetXaxis()->CenterTitle();
17580   hTotalEnDep3->GetYaxis()->SetTitle("");
17581   hTotalEnDep3->GetYaxis()->CenterTitle();
17582   hTotalEnDep3->SetFillColor(0);
17583   hTotalEnDep3->SetBit(TH1::kCanRebin);
17584 
17585   TH1F *hMainPartEn=new TH1F("hMainPartEn","hMainPartEn",1000,-0.5,2);
17586   hMainPartEn->GetXaxis()->SetTitle("MainPartEn");
17587   hMainPartEn->GetXaxis()->CenterTitle();
17588   hMainPartEn->GetYaxis()->SetTitle("");
17589   hMainPartEn->GetYaxis()->CenterTitle();
17590   hMainPartEn->SetFillColor(0);
17591   hMainPartEn->SetBit(TH1::kCanRebin);
17592 
17593   TH1F *hMainPartEn0=new TH1F("hMainPartEn0","hMainPartEn0",500,-0.5,2);
17594   hMainPartEn0->GetXaxis()->SetTitle("MainPartEn0");
17595   hMainPartEn0->GetXaxis()->CenterTitle();
17596   hMainPartEn0->GetYaxis()->SetTitle("");
17597   hMainPartEn0->GetYaxis()->CenterTitle();
17598   hMainPartEn0->SetFillColor(0);
17599   hMainPartEn0->SetBit(TH1::kCanRebin);
17600 
17601   TH1F *hMainPathLength=new TH1F("hMainPathLength","hMainPathLength",
17602                                  500,-0.01,0.1);
17603   hMainPathLength->GetXaxis()->SetTitle("MainPathLength");
17604   hMainPathLength->GetXaxis()->CenterTitle();
17605   hMainPathLength->GetYaxis()->SetTitle("");
17606   hMainPathLength->GetYaxis()->CenterTitle();
17607   hMainPathLength->SetFillColor(0);
17608   hMainPathLength->SetBit(TH1::kCanRebin);
17609 
17610   TH1F *hMainPLInPlane=new TH1F("hMainPLInPlane","hMainPLInPlane",
17611                                 500,-0.01,0.1);
17612   hMainPLInPlane->GetXaxis()->SetTitle("MainPathLength");
17613   hMainPLInPlane->GetXaxis()->CenterTitle();
17614   hMainPLInPlane->GetYaxis()->SetTitle("");
17615   hMainPLInPlane->GetYaxis()->CenterTitle();
17616   hMainPLInPlane->SetFillColor(0);
17617   hMainPLInPlane->SetBit(TH1::kCanRebin);
17618 
17619   fS="Strip Vs Plane EnergyDep Map";
17620   TProfile2D* pStVsPlEnDep=new TProfile2D(fS.c_str(),fS.c_str(),
17621                                            64,-2,62,30,-3,27);
17622   pStVsPlEnDep->GetXaxis()->SetTitle("Plane");
17623   pStVsPlEnDep->GetXaxis()->CenterTitle();
17624   pStVsPlEnDep->GetYaxis()->SetTitle("Strip");
17625   pStVsPlEnDep->GetYaxis()->CenterTitle();
17626   pStVsPlEnDep->SetFillColor(0);
17627   //pStVsPlEnDep->SetMaximum(15000);
17628 
17629   fS="Strip Vs Plane EnergyDepMu Map";
17630   TProfile2D* pStVsPlEnDepMu=new TProfile2D(fS.c_str(),fS.c_str(),
17631                                            64,-2,62,30,-3,27);
17632   pStVsPlEnDepMu->GetXaxis()->SetTitle("Plane");
17633   pStVsPlEnDepMu->GetXaxis()->CenterTitle();
17634   pStVsPlEnDepMu->GetYaxis()->SetTitle("Strip");
17635   pStVsPlEnDepMu->GetYaxis()->CenterTitle();
17636   pStVsPlEnDepMu->SetFillColor(0);
17637   //pStVsPlEnDepMu->SetMaximum(15000);
17638 
17639   fS="Strip Vs Plane EnergyDepNotMu Map";
17640   TProfile2D* pStVsPlEnDepNotMu=new TProfile2D(fS.c_str(),fS.c_str(),
17641                                            64,-2,62,30,-3,27);
17642   pStVsPlEnDepNotMu->GetXaxis()->SetTitle("Plane");
17643   pStVsPlEnDepNotMu->GetXaxis()->CenterTitle();
17644   pStVsPlEnDepNotMu->GetYaxis()->SetTitle("Strip");
17645   pStVsPlEnDepNotMu->GetYaxis()->CenterTitle();
17646   pStVsPlEnDepNotMu->SetFillColor(0);
17647   //pStVsPlEnDepNotMu->SetMaximum(15000);
17648 
17649   fS="Strip Vs Plane EnergyDepNotMuLate Map";
17650   TProfile2D* pStVsPlEnDepNotMuLate=new TProfile2D(fS.c_str(),fS.c_str(),
17651                                            64,-2,62,30,-3,27);
17652   pStVsPlEnDepNotMuLate->GetXaxis()->SetTitle("Plane");
17653   pStVsPlEnDepNotMuLate->GetXaxis()->CenterTitle();
17654   pStVsPlEnDepNotMuLate->GetYaxis()->SetTitle("Strip");
17655   pStVsPlEnDepNotMuLate->GetYaxis()->CenterTitle();
17656   pStVsPlEnDepNotMuLate->SetFillColor(0);
17657   //pStVsPlEnDepNotMuLate->SetMaximum(15000);
17658 
17659   fS="Strip Vs Plane Num Hits Map";
17660   TH2F* hStVsPlNum=new TH2F(fS.c_str(),fS.c_str(),64,-2,62,30,-3,27);
17661   hStVsPlNum->GetXaxis()->SetTitle("Plane");
17662   hStVsPlNum->GetXaxis()->CenterTitle();
17663   hStVsPlNum->GetYaxis()->SetTitle("Strip");
17664   hStVsPlNum->GetYaxis()->CenterTitle();
17665   hStVsPlNum->SetFillColor(0);
17666   //hStVsPlNum->SetMaximum(15000);
17667 
17668   fS="Strip Vs Plane NumMu Hits Map";
17669   TH2F* hStVsPlNumMu=new TH2F(fS.c_str(),fS.c_str(),64,-2,62,30,-3,27);
17670   hStVsPlNumMu->GetXaxis()->SetTitle("Plane");
17671   hStVsPlNumMu->GetXaxis()->CenterTitle();
17672   hStVsPlNumMu->GetYaxis()->SetTitle("Strip");
17673   hStVsPlNumMu->GetYaxis()->CenterTitle();
17674   hStVsPlNumMu->SetFillColor(0);
17675   //hStVsPlNumMu->SetMaximum(15000);
17676 
17677   fS="Strip Vs Plane NumNotMu Hits Map";
17678   TH2F* hStVsPlNumNotMu=new TH2F(fS.c_str(),fS.c_str(),
17679                                  64,-2,62,30,-3,27);
17680   hStVsPlNumNotMu->GetXaxis()->SetTitle("Plane");
17681   hStVsPlNumNotMu->GetXaxis()->CenterTitle();
17682   hStVsPlNumNotMu->GetYaxis()->SetTitle("Strip");
17683   hStVsPlNumNotMu->GetYaxis()->CenterTitle();
17684   hStVsPlNumNotMu->SetFillColor(0);
17685   //hStVsPlNumNotMu->SetMaximum(15000);
17686 
17687   fS="Strip Vs Plane NumNotMuLate Hits Map";
17688   TH2F* hStVsPlNumNotMuLate=new TH2F(fS.c_str(),fS.c_str(),
17689                                  64,-2,62,30,-3,27);
17690   hStVsPlNumNotMuLate->GetXaxis()->SetTitle("Plane");
17691   hStVsPlNumNotMuLate->GetXaxis()->CenterTitle();
17692   hStVsPlNumNotMuLate->GetYaxis()->SetTitle("Strip");
17693   hStVsPlNumNotMuLate->GetYaxis()->CenterTitle();
17694   hStVsPlNumNotMuLate->SetFillColor(0);
17695   //hStVsPlNumNotMuLate->SetMaximum(15000);
17696 
17697   fS="Path Length Vs EnDep";
17698   TH2F* hPathLenVsEnDep=new TH2F(fS.c_str(),fS.c_str(),
17699                                  500,-1./1000,10./1000,
17700                                  500,-0.005,0.04);
17701   hPathLenVsEnDep->GetXaxis()->SetTitle("EnDep");
17702   hPathLenVsEnDep->GetXaxis()->CenterTitle();
17703   hPathLenVsEnDep->GetYaxis()->SetTitle("Path Length");
17704   hPathLenVsEnDep->GetYaxis()->CenterTitle();
17705   hPathLenVsEnDep->SetFillColor(0);
17706   //hPathLenVsEnDep->SetMaximum(15000);
17707 
17708   fS="EnDep Vs Plane";
17709   TProfile* pEnDepVsPl=new TProfile(fS.c_str(),fS.c_str(),66,-4,62);
17710   pEnDepVsPl->GetXaxis()->SetTitle("Plane");
17711   pEnDepVsPl->GetXaxis()->CenterTitle();
17712   pEnDepVsPl->GetYaxis()->SetTitle("EnDep");
17713   pEnDepVsPl->GetYaxis()->CenterTitle();
17714   pEnDepVsPl->SetFillColor(0);
17715   //pEnDepVsPl->SetMaximum(15000);
17716 
17717   fS="MainParticle Energy Vs Plane";
17718   TProfile* pEnVsPl=new TProfile(fS.c_str(),fS.c_str(),66,-4,62);
17719   pEnVsPl->GetXaxis()->SetTitle("Plane");
17720   pEnVsPl->GetXaxis()->CenterTitle();
17721   pEnVsPl->GetYaxis()->SetTitle("MainParticle Energy");
17722   pEnVsPl->GetYaxis()->CenterTitle();
17723   pEnVsPl->SetFillColor(0);
17724   //pEnVsPl->SetMaximum(15000);
17725 
17726   fS="Esc/Ebeam Vs Last Plane";
17727   TProfile* pEscEbeamVsLastPl=new TProfile("pEscEbeamVsLastPl",
17728                                            fS.c_str(),66,-4,62);
17729   pEscEbeamVsLastPl->GetXaxis()->SetTitle("Last Plane");
17730   pEscEbeamVsLastPl->GetXaxis()->CenterTitle();
17731   pEscEbeamVsLastPl->GetYaxis()->SetTitle("Esc/Ebeam");
17732   pEscEbeamVsLastPl->GetYaxis()->CenterTitle();
17733   pEscEbeamVsLastPl->SetFillColor(0);
17734   //pEscEbeamVsLastPl->SetMaximum(15000);
17735 
17736   fS="Esc/Ebeam Vs First Plane Included";
17737   TProfile* pEscEbeamVsFirstPl=new TProfile("pEscEbeamVsFirstPl",
17738                                             fS.c_str(),66,-4,62);
17739   pEscEbeamVsFirstPl->GetXaxis()->SetTitle("First Plane Included");
17740   pEscEbeamVsFirstPl->GetXaxis()->CenterTitle();
17741   pEscEbeamVsFirstPl->GetYaxis()->SetTitle("Esc/Ebeam");
17742   pEscEbeamVsFirstPl->GetYaxis()->CenterTitle();
17743   pEscEbeamVsFirstPl->SetFillColor(0);
17744   //pEscEbeamVsFirstPl->SetMaximum(15000);
17745 
17746   Int_t straightCutCounter=0;
17747   Double_t simple15_18=0;
17748   Int_t simple15_18Counter=0;
17749 
17753   
17754   this->InitialiseLoopVariables();  
17755   
17756   for(Int_t event=0;event<fEvents;event++){
17757     
17758     this->SetLoopVariables(event);
17759 
17760     if (!fTruthHitInfo) break;
17761     TClonesArray &cTruth = *fTruthHitInfo;
17762     Int_t numTruthHits=fTruthHitInfo->GetEntries();
17763     
17764     MSG("CDAnalysis",Msg::kDebug)
17765       <<"Event="<<event
17766       <<", truthHits="<<numTruthHits<<endl;
17767 
17768     //cut on not straight tracks
17769     Double_t mainX1Cut=0.5;
17770     if (!this->IsStraightTrack(mainX1Cut)){
17771       straightCutCounter++;
17772       continue;
17773     }
17774 
17775     //calc and set fLastPlane
17776     this->CalcLastPlaneOnTrk();
17777     Int_t lastPlaneTruth=this->CalcLastPlaneTruth();
17778 
17779     //make event length cuts
17780     Bool_t goodEvLen=!(this->CutOnEventLength());
17781     //make track quality cuts
17782     //Bool_t goodTrackQuality=!(this->CutOnTrackQuality());
17783     //make sure that the first plane makes sense and was actually set
17784     Bool_t goodFirstPlane=true;
17785     if (fFirstPlane<0 || fFirstPlane>59) goodFirstPlane=false;
17786 
17787     Double_t partEn=-1;
17788     Double_t sumScEnDep=0;
17789     Double_t sumScEnDepCut=0;
17790     Double_t sumScEnDepLateT1=0;
17791     Double_t sumScEnDepLateT1Cut=0;
17792     Double_t sumScEnDepLateT2=0;
17793     Double_t sum15_18=0;
17794     Double_t sum15_18Truth=0;
17795     Double_t sum15_18Cut=0;
17796     Double_t simple15_18Local=0;
17797 
17798     for (Int_t pl=0;pl<=fLastPlane;pl++){
17799       Double_t mainPL=this->TrueMainPL(pl,event);
17800       hMainPLInPlane->Fill(mainPL);
17801     }
17802 
17804     //loop over the truth hits
17806     for (Int_t hit=0;hit<numTruthHits;hit++){
17807       //cast the tclonesarray up to a truthhitinfo object
17808       CDTruthHitInfo *hitInfo=
17809         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
17810       
17811       Int_t plane=hitInfo->GetPlane();
17812       Int_t strip=hitInfo->GetStrip();
17813       Double_t totalEnDep=hitInfo->GetTotalEnDep();
17814       Double_t mainPartEn=hitInfo->GetMainPartEn();
17815       Double_t mainPathLength=hitInfo->GetMainPathLength();
17816       Double_t earliestT1=hitInfo->GetEarliestT1();
17817       Double_t latestT2=hitInfo->GetLatestT2();
17818       Int_t pmtTruth1=hitInfo->GetPmtTruth1();
17819       Int_t pmtTruth2=hitInfo->GetPmtTruth2();
17820       Int_t mainParticle=hitInfo->GetMainParticle();
17821 
17822       Int_t muon=13;
17823 
17824       if (totalEnDep==0) continue;
17825 
17826       //do simple window calc of 15 planes 29-15+1=15
17827       if (plane>=15 && plane<=29) simple15_18Local+=1000*totalEnDep;
17828 
17829       //get the largest particle energy
17830       if (mainPartEn>partEn) partEn=mainPartEn;
17831       if (fRunNumber==60002) partEn=1.8;
17832 
17833       //sum the energy deposition for every strip
17834       sumScEnDep+=totalEnDep;
17835       //sum the energy deposition for tracks passing "data" cuts
17836       if (goodEvLen && goodFirstPlane){
17837         sumScEnDepCut+=totalEnDep;
17838       }
17839 
17840       //sum the energy in the 15_18 window on the track
17841       //if lp=48 then >15  and <=30 then have 15 planes in total
17842       //make sure that there are actually 15 planes to add up
17843       if (fLastPlane>18+15 &&
17844           plane>fLastPlane-18-15 && plane<=fLastPlane-18){
17845         sum15_18+=1000*totalEnDep;
17846       }
17847       //sum the energy for the true end of track
17848       if (lastPlaneTruth>18+15 && 
17849           plane>lastPlaneTruth-18-15 && plane<=lastPlaneTruth-18){
17850         sum15_18Truth+=1000*totalEnDep;
17851       }     
17852       //sum the energy for the tracks that pass data selection cuts
17853       if (goodEvLen && goodFirstPlane &&
17854           plane>lastPlaneTruth-18-15 && plane<=lastPlaneTruth-18){
17855         sum15_18Cut+=1000*totalEnDep;
17856       }
17857       
17858 
17859       if (plane==0) {
17860         if (abs(mainParticle)==muon) hMainPartEn0->Fill(mainPartEn);
17861         if (mainPartEn==0){
17862           MSG("CDAnalysis",Msg::kInfo)
17863             <<"mainPart="<<mainParticle
17864             <<", mainPL="<<mainPathLength
17865             <<", truth1="<<pmtTruth1
17866             <<", truth2="<<pmtTruth2<<endl;
17867         }
17868       }
17869 
17870       hTotalEnDep->Fill(totalEnDep);
17871       hMainPartEn->Fill(mainPartEn);
17872       hMainPathLength->Fill(mainPathLength);
17873 
17874       pStVsPlEnDep->Fill(plane,strip,totalEnDep);
17875       hStVsPlNum->Fill(plane,strip,1);
17876       if (mainParticle==muon){
17877         hPathLenVsEnDep->Fill(totalEnDep,mainPathLength,1);
17878 
17879         hTotalEnDepMu->Fill(totalEnDep);
17880         pStVsPlEnDepMu->Fill(plane,strip,totalEnDep);
17881         hStVsPlNumMu->Fill(plane,strip,1);
17882       }
17883       if (mainParticle!=muon){
17884         hTotalEnDep2->Fill(totalEnDep);
17885         pStVsPlEnDepNotMu->Fill(plane,strip,totalEnDep);
17886         hStVsPlNumNotMu->Fill(plane,strip,1);
17887 
17888         //fill the late histos
17889         if (earliestT1>15e-9){
17890           hTotalEnDep3->Fill(totalEnDep);
17891           pStVsPlEnDepNotMuLate->Fill(plane,strip,totalEnDep);
17892           hStVsPlNumNotMuLate->Fill(plane,strip,1);
17893 
17894           //sum the energy deposition for every strip
17895           sumScEnDepLateT1+=totalEnDep;
17896         }
17897         if (latestT2>15e-9){
17898           sumScEnDepLateT2+=totalEnDep;
17899         }
17900         if (earliestT1>15e-9 && earliestT1<500e-9){
17901           //sum the energy deposition for every strip
17902           sumScEnDepLateT1Cut+=totalEnDep;
17903         }
17904       }
17905       
17906       //look at a particular plane
17907       if (plane==20){
17908         hPl20->Fill(1000*totalEnDep);
17909         if (mainParticle==muon){
17910           hPl20Mu->Fill(1000*totalEnDep);
17911         }
17912         else{
17913           hPl20NotMu->Fill(1000*totalEnDep);
17914         }
17915       }
17916 
17917       pEnDepVsPl->Fill(plane,totalEnDep);
17918       if (mainParticle==muon) pEnVsPl->Fill(plane,mainPartEn);
17919     }
17921     //end of loop over the truth hits
17923 
17924     //look at dependence of ratio on which planes are included
17925     for (Int_t firstPl=0;firstPl<60;firstPl++){
17926       if (firstPl<fLastPlane){
17927         pEscEbeamVsFirstPl->Fill(firstPl,sumScEnDep/partEn);
17928       }
17929     }
17930 
17931     //do simple window calc
17932     if (simple15_18Local>0){
17933       simple15_18+=simple15_18Local;
17934       simple15_18Counter++;
17935       MAXMSG("CDAnalysis",Msg::kInfo,1)
17936         <<"simple 15_18 local="<<simple15_18Local/15
17937         <<", av="<<(simple15_18/15)/simple15_18Counter
17938         <<" (N="<<simple15_18Counter<<")"<<endl;
17939     }
17940 
17941     //fill the histos
17942     hSumEnDep->Fill(sumScEnDep);
17943     hSumEnDepLateT1->Fill(sumScEnDepLateT1);
17944     hSumEnDepLateT1Cut->Fill(sumScEnDepLateT1Cut);
17945     hSumEnDepLateT2->Fill(sumScEnDepLateT2);
17946     if (partEn) {
17947       hRatioScToBeam->Fill(sumScEnDep/partEn);
17948       //fill the prof
17949       pEscEbeamVsLastPl->Fill(fLastPlane,sumScEnDep/partEn);
17950 
17951       if (sumScEnDepCut>0) hRatioScToBeamCut->
17952                              Fill(sumScEnDepCut/partEn);
17953     }
17954     else MSG("CDAnalysis",Msg::kWarning)<<"partEn="<<partEn<<endl;
17955 
17956     if (sum15_18<10 && sum15_18>0){
17957       MSG("CDAnalysis",Msg::kInfo)
17958         <<"Very low 15_18="<<sum15_18/15<<", event="<<event<<endl;
17959     }
17960     if (sum15_18>0) hSum15_18->Fill(sum15_18/15);
17961     if (sum15_18Cut>0) hSum15_18Cut->Fill(sum15_18Cut/15);
17962     if (sum15_18Truth>0) hSum15_18Truth->Fill(sum15_18Truth/15);
17963     if (sum15_18>0) hSum15_18All->Fill(sum15_18);
17964   }//end of for                                       
17965   
17969 
17970   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
17971 
17972   MSG("CDAnalysis",Msg::kInfo)
17973     <<"Straight Cut Counter="<<straightCutCounter<<endl;
17974 
17975   TCanvas *cSumEnDep=new TCanvas("cSumEnDep","SumEnDep",
17976                                  0,0,1200,800);
17977   cSumEnDep->SetFillColor(0);
17978   cSumEnDep->Divide(3,3);
17979   cSumEnDep->cd(1);
17980   hRatioScToBeam->Draw();
17981   cSumEnDep->cd(2);
17982   //hSum15_18Cut->Draw();
17983   hRatioScToBeamCut->Draw();
17984   cSumEnDep->cd(3);
17985   hSumEnDep->Draw();
17986   cSumEnDep->cd(4);
17987   hSumEnDepLateT1->Draw();
17988   cSumEnDep->cd(5);
17989   hSumEnDepLateT1Cut->Draw();
17990   cSumEnDep->cd(6);
17991   hSumEnDepLateT2->Draw();
17992   cSumEnDep->cd(7);
17993   hSum15_18All->Draw();
17994   cSumEnDep->cd(8);
17995   hSum15_18->Draw();
17996   cSumEnDep->cd(9);
17997   hSum15_18Truth->Draw();
17998 
17999   TCanvas *cEscEbeam=new TCanvas("cEscEbeam","cEscEbeam",
18000                                  0,0,1200,800);
18001   cEscEbeam->SetFillColor(0);
18002   cEscEbeam->Divide(1,2);
18003   cEscEbeam->cd(1);
18004   pEscEbeamVsLastPl->Draw();
18005   cEscEbeam->cd(2);
18006   pEscEbeamVsFirstPl->Draw();
18007 
18008 
18009 
18010   Double_t enWith500nsCut=hSumEnDep->GetMean()-
18011     hSumEnDepLateT1->GetMean()+
18012     hSumEnDepLateT1Cut->GetMean();
18013 
18014   Double_t partEn=1;
18015   if (fMainParticleEnergy>1.7 && fMainParticleEnergy<1.9) partEn=1.8;
18016   if (fMainParticleEnergy>1.5 && fMainParticleEnergy<1.7) partEn=1.6;
18017   if (fMainParticleEnergy>1.3 && fMainParticleEnergy<1.5) partEn=1.4;
18018   if (fMainParticleEnergy>1.1 && fMainParticleEnergy<1.3) partEn=1.2;
18019   if (fMainParticleEnergy>0.9 && fMainParticleEnergy<1.1) partEn=1.0;
18020 
18021   MSG("CDAnalysis",Msg::kInfo)
18022     <<endl
18023     <<"*** Ratio of Energy in Sc to Steel Section ***"<<endl
18024     <<"totalEn="<<hSumEnDep->GetMean()
18025     <<" +/- "<<hSumEnDep->GetRMS()/sqrt(hSumEnDep->GetEntries())
18026     <<" ("<<100*(hSumEnDep->GetRMS()/sqrt(hSumEnDep->GetEntries()))/
18027     hSumEnDep->GetMean()<<"%)"
18028     <<endl
18029     <<"ratio="<<hSumEnDep->GetMean()/partEn
18030     <<" +/- "<<100*(hSumEnDep->GetRMS()/sqrt(hSumEnDep->GetEntries()))/
18031     hSumEnDep->GetMean()<<"%"
18032     <<endl
18033     <<"lateEn(>15ns)="<<hSumEnDepLateT1->GetMean()<<endl
18034     <<endl
18035     <<"lateT1/total="<<100*hSumEnDepLateT1->GetMean()/
18036     hSumEnDep->GetMean()<<"%"
18037     <<" (ratio="<<hSumEnDepLateT1->GetMean()/partEn<<")"
18038     <<endl
18039     <<"lateT1Cut/total="<<100*hSumEnDepLateT1Cut->GetMean()/
18040     hSumEnDep->GetMean()<<"%"
18041     <<" (ratio="<<hSumEnDepLateT1Cut->GetMean()/partEn<<")"
18042     <<endl
18043     <<"lateT2/total="<<100*hSumEnDepLateT2->GetMean()/
18044     hSumEnDep->GetMean()<<"%"
18045     <<" (ratio="<<hSumEnDepLateT2->GetMean()/partEn<<")"
18046     <<endl
18047     <<endl
18048     <<"enWith500nsCut="<<enWith500nsCut<<endl
18049     <<"fMainParticleEnergy="<<fMainParticleEnergy<<" (using "
18050     <<partEn<<")"<<endl
18051     <<"ratio="<<enWith500nsCut/partEn<<endl
18052     <<"ratio (with track cuts)="<<hRatioScToBeamCut->GetMean()
18053     <<" +/- "<<100*((hRatioScToBeamCut->GetRMS()/
18054                      sqrt(hRatioScToBeamCut->GetEntries()))/
18055                     hRatioScToBeamCut->GetMean())<<"%"
18056     <<endl
18057     <<"*** End of Section ***"<<endl
18058     <<endl;
18059 
18060   MSG("CDAnalysis",Msg::kInfo)
18061     <<endl
18062     <<"*** Energy Loss in Window Section ***"<<endl
18063     <<"15_18="<<hSum15_18->GetMean()
18064     <<" MeV +/- "<<hSum15_18->GetRMS()/sqrt(hSum15_18->GetEntries())
18065     <<" ("<<100*((hSum15_18->GetRMS()/sqrt(hSum15_18->GetEntries()))/
18066                  hSum15_18->GetMean())<<"%)"
18067     <<", N="<<hSum15_18->GetEntries()
18068     <<endl
18069     <<"15_18Truth="<<hSum15_18Truth->GetMean()
18070     <<" MeV +/- "<<(hSum15_18Truth->GetRMS()/
18071                     sqrt(hSum15_18Truth->GetEntries()))
18072     <<" ("<<100*((hSum15_18Truth->GetRMS()/
18073                  sqrt(hSum15_18Truth->GetEntries()))/
18074                  hSum15_18Truth->GetMean())<<"%)"
18075     <<", N="<<hSum15_18Truth->GetEntries()
18076     <<endl
18077     <<"15_18Cut="<<hSum15_18Cut->GetMean()
18078     <<" MeV +/- "<<(hSum15_18Cut->GetRMS()/
18079                     sqrt(hSum15_18Cut->GetEntries()))
18080     <<" ("<<100*((hSum15_18Cut->GetRMS()/
18081                  sqrt(hSum15_18Cut->GetEntries()))/
18082                  hSum15_18Cut->GetMean())<<"%)"
18083     <<", N="<<hSum15_18Cut->GetEntries()
18084     <<endl
18085     <<"*** End of Section ***"<<endl
18086     <<endl;
18087 
18088   TCanvas *cMainParticle=new TCanvas("cMainParticle","MainParticle",
18089                                      0,0,1200,800);
18090   cMainParticle->SetFillColor(0);
18091   cMainParticle->Divide(2,2);
18092   cMainParticle->cd(1);
18093   hMainPartEn0->Draw();
18094   cMainParticle->cd(2);
18095   hTotalEnDep->Draw();
18096   cMainParticle->cd(3);
18097   hMainPartEn->Draw();
18098   cMainParticle->cd(4);
18099   hMainPathLength->Draw();
18100 
18101   TCanvas *cEnDep=new TCanvas("cEnDep","EnDep",
18102                                      0,0,1200,800);
18103   cEnDep->SetFillColor(0);
18104   cEnDep->Divide(2,3);
18105   cEnDep->cd(1);
18106   hTotalEnDep->Draw();
18107   cEnDep->cd(2);
18108   hTotalEnDepMu->Draw();
18109   cEnDep->cd(3);
18110   hTotalEnDep2->Draw();
18111   cEnDep->cd(4);
18112   hTotalEnDep3->Draw();
18113   cEnDep->cd(5);
18114 
18115   cEnDep->cd(6);
18116 
18117 
18118   TCanvas *cStVsPlEnDep=new TCanvas("cStVsPlEnDep","StVsPlEnDep",
18119                                     0,0,1200,800);
18120   cStVsPlEnDep->SetFillColor(0);
18121   pStVsPlEnDep->Draw("colz");
18122 
18123   TCanvas *cStVsPlEnDepMu=new TCanvas("cStVsPlEnDepMu","StVsPlEnDepMu",
18124                                     0,0,1200,800);
18125   cStVsPlEnDepMu->SetFillColor(0);
18126   cStVsPlEnDepMu->Divide(2,2);
18127   cStVsPlEnDepMu->cd(1);
18128   pStVsPlEnDep->Draw("colz");
18129   cStVsPlEnDepMu->cd(2);
18130   pStVsPlEnDepMu->Draw("colz");
18131   cStVsPlEnDepMu->cd(3);
18132   pStVsPlEnDepNotMu->Draw("colz");
18133   cStVsPlEnDepMu->cd(4);
18134   pStVsPlEnDepNotMuLate->Draw("colz");
18135 
18136   TCanvas *cStVsPlNum=new TCanvas("cStVsPlNum","StVsPlNum",
18137                                   0,0,1200,800);
18138   cStVsPlNum->SetFillColor(0);
18139   cStVsPlNum->Divide(2,2);
18140   cStVsPlNum->cd(1);
18141   hStVsPlNum->Draw("colz");
18142   cStVsPlNum->cd(2);
18143   hStVsPlNumMu->Draw("colz");
18144   cStVsPlNum->cd(3);
18145   hStVsPlNumNotMu->Draw("colz");
18146   cStVsPlNum->cd(4);
18147   hStVsPlNumNotMuLate->Draw("colz");
18148 
18149   TCanvas *cEnVsPl=new TCanvas("cEnVsPl","cEnVsPl",0,0,1200,800);
18150   cEnVsPl->SetFillColor(0);
18151   cEnVsPl->Divide(2,2);
18152   cEnVsPl->cd(1);
18153   pEnDepVsPl->Draw();
18154   cEnVsPl->cd(2);
18155   pEnVsPl->Draw();
18156   cEnVsPl->cd(3);
18157   hPl20->Draw();
18158   cEnVsPl->cd(4);
18159   hPl20Mu->Draw();
18160   hPl20NotMu->Draw("sames");
18161 
18162   TCanvas *cPathLenVsEnDep=new TCanvas("cPathLenVsEnDep",
18163                                        "cPathLenVsEnDep",0,0,1200,800);
18164   cPathLenVsEnDep->SetFillColor(0);
18165   //cPathLenVsEnDep->Divide(1,2);
18166   //cPathLenVsEnDep->cd(1);
18167   hPathLenVsEnDep->Draw("colz");
18168 
18169   MSG("CDAnalysis",Msg::kInfo) 
18170     <<" ** Finished TruthEnDep method **"<<endl;
18171 }

void CDAnalysis::TruthEnDepFe  ) 
 

Definition at line 4504 of file CDAnalysis.cxx.

References abs(), Form(), fS, fTruthHitInfo, CDTruthHitInfo::GetEarliestT1(), CDTruthHitInfo::GetMainPartEn(), CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetTotalEnDep(), InitialiseLoopVariables(), MSG, and SetLoopVariables().

04505 {
04506   map<Int_t,Double_t> plEnDep;
04507   map<Int_t,Double_t> plMainPartEn;
04508   Double_t totalEnDep=0;
04509   vector<TH1F*> hEnDepFe;
04510 
04511   for (Int_t pl=0;pl<60;pl++){
04512     fS="Energy Deposition in Iron, plane=";
04513     string sPl=Form("%d",pl);
04514     fS+=sPl;
04515     hEnDepFe.push_back(new TH1F(fS.c_str(),fS.c_str(),600,-2,200));
04516   }
04517 
04521   
04522   this->InitialiseLoopVariables();  
04523   
04524   for(Int_t event=0;event<fEvents;event++){
04525     
04526     this->SetLoopVariables(event);
04527     
04528     //clear the map
04529     plEnDep.clear();
04530     plMainPartEn.clear();
04531     totalEnDep=0;
04532     
04533     //now build the new map for this event
04534 
04535     if (!fTruthHitInfo) break;
04536 
04537     TClonesArray &cTruth = *fTruthHitInfo;
04538     Int_t numTruthHits=fTruthHitInfo->GetEntries();
04539     
04540     //loop over the truth hits
04541     for (Int_t hit=0;hit<numTruthHits;hit++){
04542       //cast the tclonesarray up to a truthhitinfo object
04543       CDTruthHitInfo *hitInfo=
04544         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
04545     
04546       Int_t plane=hitInfo->GetPlane();
04547       Int_t mainParticle=hitInfo->GetMainParticle();
04548       Double_t enDep=hitInfo->GetTotalEnDep();
04549       Double_t mainPartEn=hitInfo->GetMainPartEn();
04550       Double_t earliestT1=hitInfo->GetEarliestT1();
04551       Int_t muon=13;
04552 
04553       //cut out the decay electron
04554       if (earliestT1>15e-9) continue;
04555       cout<<"Cutting out the decay electron"<<endl;
04556 
04557       plEnDep[plane]+=enDep;
04558       //select the biggest mainPartEn
04559       if (mainPartEn>plMainPartEn[plane] && abs(mainParticle)==muon){
04560         plMainPartEn[plane]=mainPartEn;      
04561       }
04562     }
04563 
04564     
04565     //vector<Double_t> plEnDepFe(60);
04566 
04567     //loop 60-1 planes
04568     for (Int_t p=0;p<59;p++){
04569 
04570       Double_t plEnDepFe=plMainPartEn[p]-plEnDep[p]-
04571         plMainPartEn[p+1];
04572       totalEnDep+=plEnDep[p]+plEnDepFe;
04573       
04574       //fill the histo
04575       hEnDepFe[p]->Fill(1000*plEnDepFe);
04576       
04577       MSG("CDAnalysis",Msg::kVerbose) 
04578         <<"pl="<<p<<", pEn="<<plMainPartEn[p]
04579         <<", pEn+1="<<plMainPartEn[p+1]
04580         <<", eDep="<<1000*plEnDep[p]
04581         <<", eDepFe="<<1000*plEnDepFe
04582         <<", tE="<<totalEnDep
04583         <<endl;
04584       
04585     }
04586   }//end of for
04587 
04588   TCanvas *cEnDep=new TCanvas("cEnDep","EnDep",0,0,1200,800);
04589   cEnDep->SetFillColor(0);
04590   cEnDep->Divide(2,3);
04591   cEnDep->cd(1);
04592   hEnDepFe[0]->Draw();
04593   cEnDep->cd(2);
04594   hEnDepFe[1]->Draw();
04595   cEnDep->cd(3);
04596   hEnDepFe[2]->Draw();
04597   cEnDep->cd(4);
04598   hEnDepFe[3]->Draw();
04599   cEnDep->cd(5);
04600   hEnDepFe[4]->Draw();
04601   cEnDep->cd(6);
04602   hEnDepFe[5]->Draw();
04603 
04604 }

void CDAnalysis::TruthEventLength  ) 
 

Definition at line 4608 of file CDAnalysis.cxx.

References abs(), fOutFile, fRunNumber, fTruthHitInfo, CDTruthHitInfo::GetEarliestT1(), CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), InitialiseLoopVariables(), OpenFile(), and SetLoopVariables().

04609 {
04610   //only have pid for real data so return if not data
04611   //if (fSimFlag!=SimFlag::kData) abort(true);
04612 
04613   //open the output file for the histograms
04614   fOutFile=this->OpenFile(fRunNumber,"EvLen");
04615 
04616   TH1F *hEventLength=new TH1F("hEventLength","EventLength hit",
04617                               77,-2,75);
04618   hEventLength->GetXaxis()->SetTitle("Event Length (planes)");
04619   hEventLength->GetXaxis()->CenterTitle();
04620   hEventLength->GetYaxis()->SetTitle("");
04621   hEventLength->GetYaxis()->CenterTitle();
04622   hEventLength->SetFillColor(0);
04623   hEventLength->SetBit(TH1::kCanRebin);
04624 
04625   TH1F *hEventLength2=new TH1F("hEventLength2","EventLength",77,-2,75);
04626   hEventLength2->GetXaxis()->SetTitle("Event Length (planes)");
04627   hEventLength2->GetXaxis()->CenterTitle();
04628   hEventLength2->GetYaxis()->SetTitle("");
04629   hEventLength2->GetYaxis()->CenterTitle();
04630   hEventLength2->SetFillColor(0);
04631   hEventLength2->SetBit(TH1::kCanRebin);
04632 
04633   TH1F *hEventLength3=new TH1F("hEventLength3","EventLength",77,-2,75);
04634   hEventLength3->GetXaxis()->SetTitle("Event Length (planes)");
04635   hEventLength3->GetXaxis()->CenterTitle();
04636   hEventLength3->GetYaxis()->SetTitle("");
04637   hEventLength3->GetYaxis()->CenterTitle();
04638   hEventLength3->SetFillColor(0);
04639   hEventLength3->SetBit(TH1::kCanRebin);
04640 
04641   TH1F *hEventLength4=new TH1F("hEventLength4","EventLength",77,-2,75);
04642   hEventLength4->GetXaxis()->SetTitle("Event Length (planes)");
04643   hEventLength4->GetXaxis()->CenterTitle();
04644   hEventLength4->GetYaxis()->SetTitle("");
04645   hEventLength4->GetYaxis()->CenterTitle();
04646   hEventLength4->SetFillColor(0);
04647   hEventLength4->SetBit(TH1::kCanRebin);
04648 
04652   
04653   this->InitialiseLoopVariables();  
04654   
04655   for(Int_t event=0;event<fEvents;event++){
04656     
04657     this->SetLoopVariables(event);
04658     
04659     Int_t overallLastPlane=0;
04660     Int_t notNoiseLastPlane=0;
04661     Int_t particleLastPlane=0;
04662     //Int_t inTimeLastPlane=0;
04663     Int_t muonLastPlane=0;
04664     
04665     if (!fTruthHitInfo) break;
04666     TClonesArray &cTruth = *fTruthHitInfo;
04667     Int_t numTruthHits=fTruthHitInfo->GetEntries();
04668 
04669     //loop over the truth hits
04670     for (Int_t hit=0;hit<numTruthHits;hit++){
04671       //cast the tclonesarray up to a truthhitinfo object
04672       CDTruthHitInfo *hitInfo=
04673         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
04674     
04675       Int_t plane=hitInfo->GetPlane();
04676       Int_t mainParticle=hitInfo->GetMainParticle();
04677       Int_t pmtTruth1=hitInfo->GetPmtTruth1();
04678       Int_t pmtTruth2=hitInfo->GetPmtTruth2();
04679       Double_t earliestT1=hitInfo->GetEarliestT1();
04680       Int_t muon=13;
04681 
04682       if (plane>overallLastPlane) overallLastPlane=plane;
04683 
04684       Int_t sumTruth=pmtTruth1 | pmtTruth2;
04685       Bool_t genuine=(sumTruth & DigiSignal::kGenuine)==
04686         DigiSignal::kGenuine;
04687       Bool_t fibreLight=(sumTruth & DigiSignal::kFibreLight)==
04688         DigiSignal::kFibreLight;
04689       Bool_t darkNoise=(sumTruth & DigiSignal::kDarkNoise)==
04690         DigiSignal::kDarkNoise;
04691 
04692       if (!genuine && (fibreLight || darkNoise)) continue;
04693       
04694       if (plane>notNoiseLastPlane) notNoiseLastPlane=plane;
04695 
04696       if (!genuine) continue;
04697 
04698       //cut out the late decay electron, ND is alive for ~400 ns
04699       if (earliestT1>500e-9) continue;
04700       
04701       if (plane>particleLastPlane) particleLastPlane=plane;
04702 
04703       //in time but not necessarily a muon
04704       //if (plane>inTimeLastPlane) inTimeLastPlane=plane;
04705 
04706       //only look at muons
04707       if (abs(mainParticle)!=muon) continue;      
04708 
04709       if (plane>muonLastPlane) muonLastPlane=plane;
04710     }
04711 
04712     hEventLength->Fill(overallLastPlane+1);
04713     hEventLength2->Fill(notNoiseLastPlane+1);
04714     hEventLength3->Fill(particleLastPlane+1);
04715     //hEventLength3->Fill(inTimeLastPlane+1);
04716     hEventLength4->Fill(muonLastPlane+1);
04717 
04718   }//end of for
04719 
04720   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
04721   cGeom->SetFillColor(0);
04722   cGeom->Divide(2,3);
04723   cGeom->cd(1);
04724   hEventLength->Draw();
04725   cGeom->cd(2);
04726   hEventLength2->Draw();
04727   hEventLength2->SetLineColor(2);
04728   cGeom->cd(3);
04729   hEventLength3->Draw();
04730   hEventLength3->SetLineColor(3);
04731   cGeom->cd(4);
04732   hEventLength4->Draw();
04733   hEventLength->SetLineColor(4);
04734   cGeom->cd(5);
04735   hEventLength4->Draw();
04736   hEventLength2->Draw("sames");
04737   cGeom->cd(6);
04738   hEventLength4->Draw();
04739   hEventLength3->Draw("sames");
04740   hEventLength2->Draw("sames");
04741   hEventLength->Draw("sames");
04742 }

void CDAnalysis::ValidateMC  ) 
 

Definition at line 16920 of file CDAnalysis.cxx.

References fChargePe, fChargeSigCor, fPlane, fS, fStrip, fStripend, fTrkHitInfo, fTruthHitInfo, fUnTrkHitInfo, fXTalkHits, InitialiseLoopVariables(), MSG, ReadInHitInfo(), and SetLoopVariables().

16921 {
16922   MSG("CDAnalysis",Msg::kInfo) 
16923     <<" ** Running ValidateMC method... **"<<endl;
16924 
16925   fS="Strip Vs Plane SigCor (SE1)";
16926   TProfile2D* pStVsPl1=new TProfile2D("pStVsPl1",fS.c_str(),
16927                                            64,-2,62,30,-3,27);
16928   pStVsPl1->GetXaxis()->SetTitle("Plane");
16929   pStVsPl1->GetXaxis()->CenterTitle();
16930   pStVsPl1->GetYaxis()->SetTitle("Strip");
16931   pStVsPl1->GetYaxis()->CenterTitle();
16932   pStVsPl1->SetFillColor(0);
16933   //pStVsPl1->SetMaximum(15000);
16934 
16935   fS="Strip Vs Plane SigCor (SE2)";
16936   TProfile2D* pStVsPl2=new TProfile2D("pStVsPl2",fS.c_str(),
16937                                            64,-2,62,30,-3,27);
16938   pStVsPl2->GetXaxis()->SetTitle("Plane");
16939   pStVsPl2->GetXaxis()->CenterTitle();
16940   pStVsPl2->GetYaxis()->SetTitle("Strip");
16941   pStVsPl2->GetYaxis()->CenterTitle();
16942   pStVsPl2->SetFillColor(0);
16943   //pStVsPl2->SetMaximum(15000);
16944 
16945   fS="Strip Vs Plane PE (SE1)";
16946   TProfile2D* pStVsPlPe1=new TProfile2D("pStVsPlPe1",fS.c_str(),
16947                                            64,-2,62,30,-3,27);
16948   pStVsPlPe1->GetXaxis()->SetTitle("Plane");
16949   pStVsPlPe1->GetXaxis()->CenterTitle();
16950   pStVsPlPe1->GetYaxis()->SetTitle("Strip");
16951   pStVsPlPe1->GetYaxis()->CenterTitle();
16952   pStVsPlPe1->SetFillColor(0);
16953   //pStVsPlPe1->SetMaximum(15000);
16954 
16955   fS="Strip Vs Plane SigCor (SE2)";
16956   TProfile2D* pStVsPlPe2=new TProfile2D("pStVsPlPe2",fS.c_str(),
16957                                            64,-2,62,30,-3,27);
16958   pStVsPlPe2->GetXaxis()->SetTitle("Plane");
16959   pStVsPlPe2->GetXaxis()->CenterTitle();
16960   pStVsPlPe2->GetYaxis()->SetTitle("Strip");
16961   pStVsPlPe2->GetYaxis()->CenterTitle();
16962   pStVsPlPe2->SetFillColor(0);
16963   //pStVsPlPe2->SetMaximum(15000);
16964 
16965 
16969   
16970   this->InitialiseLoopVariables();  
16971   
16972   for(Int_t event=0;event<fEvents;event++){
16973     
16974     this->SetLoopVariables(event);
16975 
16976     //get tclones arrays for this snarl
16977     //TClonesArray &cTrk=*fTrkHitInfo;
16978     Int_t numTrkHits=fTrkHitInfo->GetEntries();
16979     TClonesArray &cUnTrk = *fUnTrkHitInfo;
16980     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
16981     //CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
16982     //TClonesArray &cXTalk = *fXTalkHits;
16983     Int_t numXTalkHits=fXTalkHits->GetEntries();
16984     //TClonesArray &cTruth = *fTruthHitInfo;
16985     Int_t numTruthHits=0;
16986     if (fTruthHitInfo) numTruthHits=fTruthHitInfo->GetEntries();
16987 
16988     MSG("CDAnalysis",Msg::kInfo)
16989       <<"Event="<<event
16990       <<", Num hits: trk="<<numTrkHits<<", unTrk="<<numUnTrkHits
16991       <<", xtalk="<<numXTalkHits<<", truth="<<numTruthHits
16992       <<endl;
16993 
16995     //loop over the untracked hits in the snarl
16997     for (Int_t hit=0;hit<numUnTrkHits;hit++){
16998       //cast the tclonesarray up to a trackedhitinfo object
16999       CDTrackedHitInfo *hitInfo=
17000         dynamic_cast<CDTrackedHitInfo*>(cUnTrk[hit]);
17001 
17002       this->ReadInHitInfo(hitInfo);
17003 
17004       //fill the histo
17005       if (fStripend==1) pStVsPl1->Fill(fPlane,fStrip,fChargeSigCor);
17006       if (fStripend==2) pStVsPl2->Fill(fPlane,fStrip,fChargeSigCor);
17007 
17008       if (fStripend==1) pStVsPlPe1->Fill(fPlane,fStrip,fChargePe);
17009       if (fStripend==2) pStVsPlPe2->Fill(fPlane,fStrip,fChargePe);
17010       
17011     }
17012   }//end of for                                       
17013   
17017 
17018   //turn off the stats box printing
17019   gStyle->SetOptStat(0);
17020 
17021   TCanvas *cStVsPl=new TCanvas("cStVsPl","StVsPl",
17022                                          0,0,1200,800);
17023   cStVsPl->SetFillColor(0);
17024   cStVsPl->Divide(1,2);
17025   cStVsPl->cd(1);
17026   pStVsPl1->Draw("colz");
17027   cStVsPl->cd(2);
17028   pStVsPl2->Draw("colz");
17029 
17030   TCanvas *cStVsPlPe=new TCanvas("cStVsPlPe","StVsPlPe",
17031                                          0,0,1200,800);
17032   cStVsPlPe->SetFillColor(0);
17033   cStVsPlPe->Divide(1,2);
17034   cStVsPlPe->cd(1);
17035   pStVsPlPe1->Draw("colz");
17036   cStVsPlPe->cd(2);
17037   pStVsPlPe2->Draw("colz");
17038 
17039   MSG("CDAnalysis",Msg::kInfo) 
17040     <<" ** Finished ValidateMC method **"<<endl;
17041 }

void CDAnalysis::ValidatePIDInfo  ) 
 

Definition at line 16271 of file CDAnalysis.cxx.

References CutByHandOnPid(), CutByHandOnPidForElec(), CutOnPid(), CutOnPidForElec(), fPIDInfo, CDPIDInfo::GetFafErr(), CDPIDInfo::GetInCERTime(), CDPIDInfo::GetInCERTimeBits(), CDPIDInfo::GetKovADC1(), CDPIDInfo::GetKovADC2(), CDPIDInfo::GetKovADC3(), CDPIDInfo::GetKovTimeStamp1(), CDPIDInfo::GetKovTimeStamp2(), CDPIDInfo::GetKovTimeStamp3(), CDPIDInfo::GetNoOverlap(), CDPIDInfo::GetNoOverlapBits(), CDPIDInfo::GetOLChi2(), CDPIDInfo::GetPIDType(), CDPIDInfo::GetSnarlMaxTimeStamp(), CDPIDInfo::GetSnarlMinTimeStamp(), CDPIDInfo::GetSnarlTimeFrame(), CDPIDInfo::GetSparseErr(), CDPIDInfo::GetTickSinceLast(), CDPIDInfo::GetTofADC0(), CDPIDInfo::GetTofADC1(), CDPIDInfo::GetTofADC2(), CDPIDInfo::GetTofADCTimeStamp0(), CDPIDInfo::GetTofADCTimeStamp1(), CDPIDInfo::GetTofADCTimeStamp2(), CDPIDInfo::GetTofTDC0(), CDPIDInfo::GetTofTDC1(), CDPIDInfo::GetTofTDC2(), CDPIDInfo::GetTofTimeStamp(), CDPIDInfo::GetTriggerPMT(), CDPIDInfo::GetTrigSource(), InitialiseLoopVariables(), MAXMSG, MSG, and SetLoopVariables().

16272 {
16273   MSG("CDAnalysis",Msg::kInfo) 
16274     <<" ** Running ValidatePIDInfo method... **"<<endl;
16275 
16276   TH1F *hNoOverlap=new TH1F("hNoOverlap","hNoOverlap",100,-2,5);
16277   hNoOverlap->GetXaxis()->SetTitle("NoOverlap");
16278   hNoOverlap->GetXaxis()->CenterTitle();
16279   hNoOverlap->GetYaxis()->SetTitle("");
16280   hNoOverlap->GetYaxis()->CenterTitle();
16281   hNoOverlap->SetFillColor(0);
16282   hNoOverlap->SetBit(TH1::kCanRebin);
16283 
16284   TH1F *hInCERTime=new TH1F("hInCERTime","hInCERTime",100,-2,20);
16285   hInCERTime->GetXaxis()->SetTitle("InCERTime");
16286   hInCERTime->GetXaxis()->CenterTitle();
16287   hInCERTime->GetYaxis()->SetTitle("");
16288   hInCERTime->GetYaxis()->CenterTitle();
16289   hInCERTime->SetFillColor(0);
16290   hInCERTime->SetBit(TH1::kCanRebin);
16291 
16292   //Undetermined kUnknown 0x00
16293   //e   kElectron 0x01
16294   //mu  kMuon 0x02
16295   //pi  kPion 0x04
16296   //K   kKaon 0x08
16297   //p   kProton 0x16
16298 
16299   TH1F *hPIDType=new TH1F("hPIDType","hPIDType",400,-2,30);
16300   hPIDType->GetXaxis()->SetTitle("PIDType");
16301   hPIDType->GetXaxis()->CenterTitle();
16302   hPIDType->GetYaxis()->SetTitle("");
16303   hPIDType->GetYaxis()->CenterTitle();
16304   hPIDType->SetFillColor(0);
16305   hPIDType->SetBit(TH1::kCanRebin);
16306 
16307   TH1F *hNoOverlapBits=new TH1F("hNoOverlapBits","hNoOverlapBits",
16308                                 400,-2,40);
16309   hNoOverlapBits->GetXaxis()->SetTitle("NoOverlapBits");
16310   hNoOverlapBits->GetXaxis()->CenterTitle();
16311   hNoOverlapBits->GetYaxis()->SetTitle("");
16312   hNoOverlapBits->GetYaxis()->CenterTitle();
16313   hNoOverlapBits->SetFillColor(0);
16314   hNoOverlapBits->SetBit(TH1::kCanRebin);
16315 
16316   TH1F *hInCERTimeBits=new TH1F("hInCERTimeBits","hInCERTimeBits",
16317                                 10,-2,3);
16318   hInCERTimeBits->GetXaxis()->SetTitle("InCERTimeBits");
16319   hInCERTimeBits->GetXaxis()->CenterTitle();
16320   hInCERTimeBits->GetYaxis()->SetTitle("");
16321   hInCERTimeBits->GetYaxis()->CenterTitle();
16322   hInCERTimeBits->SetFillColor(0);
16323   hInCERTimeBits->SetBit(TH1::kCanRebin);
16324 
16325   TH1F *hOLChi2=new TH1F("hOLChi2","hOLChi2",400,-2,20);
16326   hOLChi2->GetXaxis()->SetTitle("OLChi2");
16327   hOLChi2->GetXaxis()->CenterTitle();
16328   hOLChi2->GetYaxis()->SetTitle("");
16329   hOLChi2->GetYaxis()->CenterTitle();
16330   hOLChi2->SetFillColor(0);
16331   hOLChi2->SetBit(TH1::kCanRebin);
16332 
16333   TH1F *hTriggerPMT=new TH1F("hTriggerPMT","TriggerPMT",400,-2,30);
16334   hTriggerPMT->GetXaxis()->SetTitle("TriggerPMT");
16335   hTriggerPMT->GetXaxis()->CenterTitle();
16336   hTriggerPMT->GetYaxis()->SetTitle("");
16337   hTriggerPMT->GetYaxis()->CenterTitle();
16338   hTriggerPMT->SetFillColor(0);
16339   hTriggerPMT->SetBit(TH1::kCanRebin);
16340 
16341   TH1F *hFafErr=new TH1F("hFafErr","FafErr",400,-2,30);
16342   hFafErr->GetXaxis()->SetTitle("FafErr");
16343   hFafErr->GetXaxis()->CenterTitle();
16344   hFafErr->GetYaxis()->SetTitle("");
16345   hFafErr->GetYaxis()->CenterTitle();
16346   hFafErr->SetFillColor(0);
16347   hFafErr->SetBit(TH1::kCanRebin);
16348 
16349   TH1F *hSparseErr=new TH1F("hSparseErr","SparseErr",400,-2,30);
16350   hSparseErr->GetXaxis()->SetTitle("SparseErr");
16351   hSparseErr->GetXaxis()->CenterTitle();
16352   hSparseErr->GetYaxis()->SetTitle("");
16353   hSparseErr->GetYaxis()->CenterTitle();
16354   hSparseErr->SetFillColor(0);
16355   hSparseErr->SetBit(TH1::kCanRebin);
16356   
16357   TH1F *hTrigSource=new TH1F("hTrigSource","TrigSource",400,-2,2000);
16358   hTrigSource->GetXaxis()->SetTitle("TrigSource");
16359   hTrigSource->GetXaxis()->CenterTitle();
16360   hTrigSource->GetYaxis()->SetTitle("");
16361   hTrigSource->GetYaxis()->CenterTitle();
16362   hTrigSource->SetFillColor(0);
16363   hTrigSource->SetBit(TH1::kCanRebin);
16364 
16365   TH1F *hKovADC1=new TH1F("hKovADC1","KovADC1",400,-5,15000);
16366   hKovADC1->GetXaxis()->SetTitle("KovADC1");
16367   hKovADC1->GetXaxis()->CenterTitle();
16368   hKovADC1->GetYaxis()->SetTitle("");
16369   hKovADC1->GetYaxis()->CenterTitle();
16370   hKovADC1->SetFillColor(0);
16371   hKovADC1->SetBit(TH1::kCanRebin);
16372 
16373   TH1F *hKovADC2=new TH1F("hKovADC2","KovADC2",400,-5,15000);
16374   hKovADC2->GetXaxis()->SetTitle("KovADC2");
16375   hKovADC2->GetXaxis()->CenterTitle();
16376   hKovADC2->GetYaxis()->SetTitle("");
16377   hKovADC2->GetYaxis()->CenterTitle();
16378   hKovADC2->SetFillColor(0);
16379   hKovADC2->SetBit(TH1::kCanRebin);
16380 
16381   TH1F *hKovADC3=new TH1F("hKovADC3","KovADC3",400,-5,15000);
16382   hKovADC3->GetXaxis()->SetTitle("KovADC3");
16383   hKovADC3->GetXaxis()->CenterTitle();
16384   hKovADC3->GetYaxis()->SetTitle("");
16385   hKovADC3->GetYaxis()->CenterTitle();
16386   hKovADC3->SetFillColor(0);
16387   hKovADC3->SetBit(TH1::kCanRebin);
16388 
16389   TH1F *hKovTimeStamp1=new TH1F("hKovTimeStamp1","KovTimeStamp1",
16390                                 400,-2,30);
16391   hKovTimeStamp1->GetXaxis()->SetTitle("KovTimeStamp1");
16392   hKovTimeStamp1->GetXaxis()->CenterTitle();
16393   hKovTimeStamp1->GetYaxis()->SetTitle("");
16394   hKovTimeStamp1->GetYaxis()->CenterTitle();
16395   hKovTimeStamp1->SetFillColor(0);
16396   hKovTimeStamp1->SetBit(TH1::kCanRebin);
16397 
16398   TH1F *hKovTimeStamp2=new TH1F("hKovTimeStamp2","KovTimeStamp2",
16399                                 400,-2,30);
16400   hKovTimeStamp2->GetXaxis()->SetTitle("KovTimeStamp2");
16401   hKovTimeStamp2->GetXaxis()->CenterTitle();
16402   hKovTimeStamp2->GetYaxis()->SetTitle("");
16403   hKovTimeStamp2->GetYaxis()->CenterTitle();
16404   hKovTimeStamp2->SetFillColor(0);
16405   hKovTimeStamp2->SetBit(TH1::kCanRebin);
16406 
16407   TH1F *hKovTimeStamp3=new TH1F("hKovTimeStamp3","KovTimeStamp3",
16408                                 400,-2,30);
16409   hKovTimeStamp3->GetXaxis()->SetTitle("KovTimeStamp3");
16410   hKovTimeStamp3->GetXaxis()->CenterTitle();
16411   hKovTimeStamp3->GetYaxis()->SetTitle("");
16412   hKovTimeStamp3->GetYaxis()->CenterTitle();
16413   hKovTimeStamp3->SetFillColor(0);
16414   hKovTimeStamp3->SetBit(TH1::kCanRebin);
16415 
16416   TH1F *hSnarlTimeFrame=new TH1F("hSnarlTimeFrame","SnarlTimeFrame",
16417                                  400,-2,30);
16418   hSnarlTimeFrame->GetXaxis()->SetTitle("SnarlTimeFrame");
16419   hSnarlTimeFrame->GetXaxis()->CenterTitle();
16420   hSnarlTimeFrame->GetYaxis()->SetTitle("");
16421   hSnarlTimeFrame->GetYaxis()->CenterTitle();
16422   hSnarlTimeFrame->SetFillColor(0);
16423   hSnarlTimeFrame->SetBit(TH1::kCanRebin);
16424 
16425   TH1F *hSnarlMinTimeStamp=new TH1F("hSnarlMinTimeStamp",
16426                                     "SnarlMinTimeStamp",400,-2,30);
16427   hSnarlMinTimeStamp->GetXaxis()->SetTitle("SnarlMinTimeStamp");
16428   hSnarlMinTimeStamp->GetXaxis()->CenterTitle();
16429   hSnarlMinTimeStamp->GetYaxis()->SetTitle("");
16430   hSnarlMinTimeStamp->GetYaxis()->CenterTitle();
16431   hSnarlMinTimeStamp->SetFillColor(0);
16432   hSnarlMinTimeStamp->SetBit(TH1::kCanRebin);
16433 
16434   TH1F *hSnarlMaxTimeStamp=new TH1F("hSnarlMaxTimeStamp",
16435                                     "SnarlMaxTimeStamp",400,-2,30);
16436   hSnarlMaxTimeStamp->GetXaxis()->SetTitle("SnarlMaxTimeStamp");
16437   hSnarlMaxTimeStamp->GetXaxis()->CenterTitle();
16438   hSnarlMaxTimeStamp->GetYaxis()->SetTitle("");
16439   hSnarlMaxTimeStamp->GetYaxis()->CenterTitle();
16440   hSnarlMaxTimeStamp->SetFillColor(0);
16441   hSnarlMaxTimeStamp->SetBit(TH1::kCanRebin);
16442 
16443   TH1F *hTofTDC0=new TH1F("hTofTDC0","TofTDC0",400,-2,4000);
16444   hTofTDC0->GetXaxis()->SetTitle("TofTDC0");
16445   hTofTDC0->GetXaxis()->CenterTitle();
16446   hTofTDC0->GetYaxis()->SetTitle("");
16447   hTofTDC0->GetYaxis()->CenterTitle();
16448   hTofTDC0->SetFillColor(0);
16449   hTofTDC0->SetBit(TH1::kCanRebin);
16450 
16451   TH1F *hTofTDC1=new TH1F("hTofTDC1","TofTDC1",400,-2,4000);
16452   hTofTDC1->GetXaxis()->SetTitle("TofTDC1");
16453   hTofTDC1->GetXaxis()->CenterTitle();
16454   hTofTDC1->GetYaxis()->SetTitle("");
16455   hTofTDC1->GetYaxis()->CenterTitle();
16456   hTofTDC1->SetFillColor(0);
16457   hTofTDC1->SetBit(TH1::kCanRebin);
16458 
16459   TH1F *hTofTDC2=new TH1F("hTofTDC2","TofTDC2",400,-2,4000);
16460   hTofTDC2->GetXaxis()->SetTitle("TofTDC2");
16461   hTofTDC2->GetXaxis()->CenterTitle();
16462   hTofTDC2->GetYaxis()->SetTitle("");
16463   hTofTDC2->GetYaxis()->CenterTitle();
16464   hTofTDC2->SetFillColor(0);
16465   hTofTDC2->SetBit(TH1::kCanRebin);
16466 
16467   TH1F *hTofADC0=new TH1F("hTofADC0","TofADC0",400,-2,30);
16468   hTofADC0->GetXaxis()->SetTitle("TofADC0");
16469   hTofADC0->GetXaxis()->CenterTitle();
16470   hTofADC0->GetYaxis()->SetTitle("");
16471   hTofADC0->GetYaxis()->CenterTitle();
16472   hTofADC0->SetFillColor(0);
16473   hTofADC0->SetBit(TH1::kCanRebin);
16474 
16475   TH1F *hTofADC1=new TH1F("hTofADC1","TofADC1",400,-2,30);
16476   hTofADC1->GetXaxis()->SetTitle("TofADC1");
16477   hTofADC1->GetXaxis()->CenterTitle();
16478   hTofADC1->GetYaxis()->SetTitle("");
16479   hTofADC1->GetYaxis()->CenterTitle();
16480   hTofADC1->SetFillColor(0);
16481   hTofADC1->SetBit(TH1::kCanRebin);
16482 
16483   TH1F *hTofADC2=new TH1F("hTofADC2","TofADC2",400,-2,30);
16484   hTofADC2->GetXaxis()->SetTitle("TofADC2");
16485   hTofADC2->GetXaxis()->CenterTitle();
16486   hTofADC2->GetYaxis()->SetTitle("");
16487   hTofADC2->GetYaxis()->CenterTitle();
16488   hTofADC2->SetFillColor(0);
16489   hTofADC2->SetBit(TH1::kCanRebin);
16490 
16491   TH1F *hTofADCTimeStamp0=new TH1F("hTofADCTimeStamp0",
16492                                    "TofADCTimeStamp",400,-2,30);
16493   hTofADCTimeStamp0->GetXaxis()->SetTitle("TofADCTimeStamp");
16494   hTofADCTimeStamp0->GetXaxis()->CenterTitle();
16495   hTofADCTimeStamp0->GetYaxis()->SetTitle("");
16496   hTofADCTimeStamp0->GetYaxis()->CenterTitle();
16497   hTofADCTimeStamp0->SetFillColor(0);
16498   hTofADCTimeStamp0->SetBit(TH1::kCanRebin);
16499 
16500   TH1F *hTofADCTimeStamp1=new TH1F("hTofADCTimeStamp1",
16501                                    "TofADCTimeStamp1",400,-2,30);
16502   hTofADCTimeStamp1->GetXaxis()->SetTitle("TofADCTimeStamp1");
16503   hTofADCTimeStamp1->GetXaxis()->CenterTitle();
16504   hTofADCTimeStamp1->GetYaxis()->SetTitle("");
16505   hTofADCTimeStamp1->GetYaxis()->CenterTitle();
16506   hTofADCTimeStamp1->SetFillColor(0);
16507   hTofADCTimeStamp1->SetBit(TH1::kCanRebin);
16508 
16509   TH1F *hTofADCTimeStamp2=new TH1F("hTofADCTimeStamp2",
16510                                    "TofADCTimeStamp2",400,-2,30);
16511   hTofADCTimeStamp2->GetXaxis()->SetTitle("TofADCTimeStamp2");
16512   hTofADCTimeStamp2->GetXaxis()->CenterTitle();
16513   hTofADCTimeStamp2->GetYaxis()->SetTitle("");
16514   hTofADCTimeStamp2->GetYaxis()->CenterTitle();
16515   hTofADCTimeStamp2->SetFillColor(0);
16516   hTofADCTimeStamp2->SetBit(TH1::kCanRebin);
16517 
16518   TH1F *hTofTimeStamp=new TH1F("hTofTimeStamp",
16519                                "TofTimeStamp",400,-2,30);
16520   hTofTimeStamp->GetXaxis()->SetTitle("TofTimeStamp");
16521   hTofTimeStamp->GetXaxis()->CenterTitle();
16522   hTofTimeStamp->GetYaxis()->SetTitle("");
16523   hTofTimeStamp->GetYaxis()->CenterTitle();
16524   hTofTimeStamp->SetFillColor(0);
16525   hTofTimeStamp->SetBit(TH1::kCanRebin);
16526 
16527   TH1F *hTickSinceLast=new TH1F("hTickSinceLast",
16528                                 "TickSinceLast",400,-2,30);
16529   hTickSinceLast->GetXaxis()->SetTitle("TickSinceLast");
16530   hTickSinceLast->GetXaxis()->CenterTitle();
16531   hTickSinceLast->GetYaxis()->SetTitle("");
16532   hTickSinceLast->GetYaxis()->CenterTitle();
16533   hTickSinceLast->SetFillColor(0);
16534   hTickSinceLast->SetBit(TH1::kCanRebin);
16535 
16536   Bool_t triggerPMT;            //Did the triggerPMT fire?
16537   Bool_t fafErr;                //Faf errors?
16538   Bool_t sparseErr;             //sparse errors?
16539   Int_t trigSource;             //trigger source
16540   Int_t kovADC1;                //Cerenkov ADC value
16541   Int_t kovTimeStamp1;          //Cerenkov TimeStamp
16542   Int_t kovADC2;
16543   Int_t kovTimeStamp2;
16544   Int_t kovADC3;
16545   Int_t kovTimeStamp3;
16546   Int_t snarlTimeFrame;         //Event TimeFrame
16547   ULong_t snarlMinTimeStamp;  //event minimum timetimestamp
16548   ULong_t snarlMaxTimeStamp;  //event maximum timestamp
16549   Int_t tofTDC0;                //TOF tdc0 value
16550   Int_t tofTDC1;                //TOF tdc1 value
16551   Int_t tofTDC2;                //TOF tdc2 value
16552   Int_t tofADC0;                //TOF ADC0 value (not always present) 
16553                                //______Context depends on the run
16554   Int_t tofADC1;                //TOF ADC1 value (not always present) 
16555                                //Used for tof system testing
16556   Int_t tofADC2;                //TOF ADC1 value (not always present) 
16557                                //Used for tof system testing
16558   Int_t tofADCTimeStamp0;       //tof adc timestamps
16559   Int_t tofADCTimeStamp1;
16560   Int_t tofADCTimeStamp2;  
16561   Int_t tofTimeStamp;           //time stamp of TOF readout
16562   Int_t tickSinceLast;          //Ticks since last snarl
16563 
16564   //pid validation counters
16565   Int_t myPiMuCounter=0;
16566   Int_t pidPiMuCounter=0;
16567   Int_t myElecCounter=0;
16568   Int_t pidElecCounter=0;
16569   Int_t bothPiMuCounter=0;
16570   Int_t bothElecCounter=0;
16571 
16572   MSG("CDAnalysis",Msg::kInfo)<<"Starting main loop..."<<endl;
16573 
16577   
16578   this->InitialiseLoopVariables();  
16579   
16580   for(Int_t event=0;event<fEvents;event++){
16581     
16582     this->SetLoopVariables(event);
16583 
16584     if (!fPIDInfo){
16585       MAXMSG("CDAnalysis",Msg::kWarning,100)
16586         <<"No PID info: fPIDInfo="<<fPIDInfo<<endl;
16587       continue;
16588     }
16589     
16590     //bool for storing results of pid
16591     Bool_t myPiMuFound=false;
16592     Bool_t pidPiMuFound=false;
16593     Bool_t myElecFound=false;
16594     Bool_t pidElecFound=false;
16595 
16596     if (!this->CutByHandOnPid()){
16597       myPiMuCounter++;
16598       myPiMuFound=true;
16599     }
16600     if (!this->CutOnPid()){
16601       pidPiMuCounter++;
16602       pidPiMuFound=true;
16603     }
16604     if (!this->CutByHandOnPidForElec()){
16605       myElecCounter++;
16606       myElecFound=true;
16607     }
16608     if (!this->CutOnPidForElec()){//only electrons!
16609       pidElecCounter++;
16610       pidElecFound=true;
16611     }
16612 
16613     if (myPiMuFound && pidPiMuFound) bothPiMuCounter++;
16614     if (myElecFound && pidElecFound) bothElecCounter++;
16615 
16616     //if (!fPIDInfo->IsEmpty()){
16617     
16618       triggerPMT=fPIDInfo->GetTriggerPMT();
16619       fafErr=fPIDInfo->GetFafErr() ;
16620       sparseErr=fPIDInfo->GetSparseErr();
16621       trigSource=fPIDInfo->GetTrigSource();
16622       kovADC1=fPIDInfo->GetKovADC1() ;
16623       kovTimeStamp1=fPIDInfo->GetKovTimeStamp1();
16624       kovADC2=fPIDInfo->GetKovADC2();
16625       kovTimeStamp2=fPIDInfo->GetKovTimeStamp2();
16626       kovADC3=fPIDInfo->GetKovADC3();
16627       kovTimeStamp3=fPIDInfo->GetKovTimeStamp3(); 
16628       snarlTimeFrame=fPIDInfo->GetSnarlTimeFrame();
16629       snarlMinTimeStamp=fPIDInfo->GetSnarlMinTimeStamp();
16630       snarlMaxTimeStamp=fPIDInfo->GetSnarlMaxTimeStamp();
16631       tofTDC0=fPIDInfo->GetTofTDC0();
16632       tofTDC1=fPIDInfo->GetTofTDC1();
16633       tofTDC2=fPIDInfo->GetTofTDC2();
16634       tofADC0=fPIDInfo->GetTofADC0();
16635       tofADC1=fPIDInfo->GetTofADC1();
16636       tofADC2=fPIDInfo->GetTofADC2();
16637       tofADCTimeStamp0=fPIDInfo->GetTofADCTimeStamp0();
16638       tofADCTimeStamp1=fPIDInfo->GetTofADCTimeStamp1();
16639       tofADCTimeStamp2=fPIDInfo->GetTofADCTimeStamp2();
16640       tofTimeStamp=fPIDInfo->GetTofTimeStamp();
16641       tickSinceLast=fPIDInfo->GetTickSinceLast();
16642 
16643       //get and fill the CalDetPID info
16644       hNoOverlap->Fill(fPIDInfo->GetNoOverlap());
16645       hInCERTime->Fill(fPIDInfo->GetInCERTime());
16646       hPIDType->Fill(fPIDInfo->GetPIDType());
16647       hNoOverlapBits->Fill(fPIDInfo->GetNoOverlapBits());
16648       hInCERTimeBits->Fill(fPIDInfo->GetInCERTimeBits());
16649       hOLChi2->Fill(fPIDInfo->GetOLChi2());
16650 
16651       hTriggerPMT->Fill(triggerPMT);
16652       hFafErr->Fill(fafErr);
16653       hSparseErr->Fill(sparseErr);
16654       hTrigSource->Fill(trigSource);
16655       hKovADC1->Fill(kovADC1);
16656       hKovTimeStamp1->Fill(kovTimeStamp1);
16657       hKovADC2->Fill(kovADC2);
16658       hKovTimeStamp2->Fill(kovTimeStamp2);
16659       hKovADC3->Fill(kovADC3);
16660       hKovTimeStamp3->Fill(kovTimeStamp3);
16661       hSnarlTimeFrame->Fill(snarlTimeFrame);
16662       hSnarlMinTimeStamp->Fill(snarlMinTimeStamp);
16663       hSnarlMaxTimeStamp->Fill(snarlMaxTimeStamp);
16664       hTofTDC0->Fill(tofTDC0);
16665       hTofTDC1->Fill(tofTDC1);
16666       hTofTDC2->Fill(tofTDC2);
16667       hTofADC0->Fill(tofADC0);
16668       hTofADC1->Fill(tofADC1);
16669       hTofADC2->Fill(tofADC2);
16670       hTofADCTimeStamp0->Fill(tofADCTimeStamp0);
16671       hTofADCTimeStamp1->Fill(tofADCTimeStamp1);
16672       hTofADCTimeStamp2->Fill(tofADCTimeStamp2);
16673       hTofTimeStamp->Fill(tofTimeStamp);
16674       hTickSinceLast->Fill(tickSinceLast);
16675 
16676       //}
16677 
16678   }//end of for                                       
16679   
16683 
16684   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
16685 
16686   TCanvas *cTof=new TCanvas("cTof","cTof",0,0,1200,800);
16687   cTof->SetFillColor(0);
16688   cTof->Divide(3,3);
16689   cTof->cd(1);
16690   hTofTDC0->Draw();
16691   cTof->cd(2);
16692   hTofTDC1->Draw();
16693   cTof->cd(3);
16694   hTofTDC2->Draw();
16695   cTof->cd(1+3);
16696   hTofADC0->Draw();
16697   cTof->cd(2+3);
16698   hTofADC1->Draw();
16699   cTof->cd(3+3);
16700   hTofADC2->Draw();
16701   cTof->cd(1+6);
16702   hTofADCTimeStamp0->Draw();
16703   cTof->cd(2+6);
16704   hTofADCTimeStamp1->Draw();
16705   cTof->cd(3+6);
16706   hTofADCTimeStamp2->Draw();
16707 
16708   TCanvas *cKov=new TCanvas("cKov","cKov",0,0,1200,800);
16709   cKov->SetFillColor(0);
16710   cKov->Divide(3,2);
16711   cKov->cd(1);
16712   hKovADC1->Draw();
16713   cKov->cd(2);
16714   hKovADC2->Draw();
16715   cKov->cd(3);
16716   hKovADC3->Draw();
16717   cKov->cd(1+3);
16718   hKovTimeStamp1->Draw();
16719   cKov->cd(2+3);
16720   hKovTimeStamp2->Draw();
16721   cKov->cd(3+3);
16722   hKovTimeStamp3->Draw();
16723 
16724   TCanvas *cTime=new TCanvas("cTime","cTime",0,0,1200,800);
16725   cTime->SetFillColor(0);
16726   cTime->Divide(2,1);
16727   cTime->cd(1);
16728   hTofTimeStamp->Draw();
16729   cTime->cd(2);
16730   hTickSinceLast->Draw();
16731 
16732   TCanvas *cTrig=new TCanvas("cTrig","cTrig",0,0,1200,800);
16733   cTrig->SetFillColor(0);
16734   cTrig->Divide(2,1);
16735   cTrig->cd(1);
16736   hTriggerPMT->Draw();
16737   cTrig->cd(2);
16738   hTrigSource->Draw();
16739 
16740   TCanvas *cErr=new TCanvas("cErr","cErr",0,0,1200,800);
16741   cErr->SetFillColor(0);
16742   cErr->Divide(2,1);
16743   cErr->cd(1);
16744   hFafErr->Draw();
16745   cErr->cd(2);
16746   hSparseErr->Draw();
16747 
16748   TCanvas *cPID=new TCanvas("cPID","cPID",0,0,1200,800);
16749   cPID->SetFillColor(0);
16750   cPID->Divide(3,2);
16751   cPID->cd(1);
16752   hNoOverlap->Draw();
16753   cPID->cd(2);
16754   hInCERTime->Draw();
16755   cPID->cd(3);
16756   hPIDType->Draw();
16757   cPID->cd(4);
16758   hNoOverlapBits->Draw();
16759   cPID->cd(5);
16760   hInCERTimeBits->Draw();
16761   cPID->cd(6);
16762   hOLChi2->Draw();
16763 
16764   //pid validation counters results
16765   MSG("CDAnalysis",Msg::kInfo)
16766     <<"My PiMu counter="<<myPiMuCounter<<endl
16767     <<"PID PiMu counter="<<pidPiMuCounter<<endl
16768     <<"Both PiMu counter="<<bothPiMuCounter<<endl
16769     <<"My Elec counter="<<myElecCounter<<endl
16770     <<"PID Elec counter="<<pidElecCounter<<endl
16771     <<"Both Elec counter="<<bothElecCounter<<endl;
16772 
16773   MSG("CDAnalysis",Msg::kInfo) 
16774     <<" ** Finished ValidatePIDInfo method **"<<endl;
16775 }

void CDAnalysis::ValidateReco  ) 
 

Definition at line 15122 of file CDAnalysis.cxx.

References CalcDistToPlaneCentre(), CalcFirstLastPlane(), fPlane, fStrip, fTransPos, fTrkHitInfo, InitialiseLoopVariables(), IsStraightTrack_Radius(), MAXMSG, MSG, ReadInHitInfo(), SetLoopVariables(), StraightTrack_Radius(), TrueDistToPlaneCentre(), and TrueXInStripFrame().

15123 {
15124   MSG("CDAnalysis",Msg::kInfo) 
15125     <<" ** Running ValidateReco method... **"<<endl;
15126 
15127   TH1F *hTransPos=new TH1F("hTransPos","hTransPos",400,-1,25);
15128   hTransPos->GetXaxis()->SetTitle("transPos");
15129   hTransPos->GetXaxis()->CenterTitle();
15130   hTransPos->GetYaxis()->SetTitle("");
15131   hTransPos->GetYaxis()->CenterTitle();
15132   hTransPos->SetFillColor(0);
15133   hTransPos->SetBit(TH1::kCanRebin);
15134 
15135   TH1F *hTrueX=new TH1F("hTrueX","hTrueX",1000,-1.5,1.5);
15136   hTrueX->GetXaxis()->SetTitle("trueX");
15137   hTrueX->GetXaxis()->CenterTitle();
15138   hTrueX->GetYaxis()->SetTitle("");
15139   hTrueX->GetYaxis()->CenterTitle();
15140   hTrueX->SetFillColor(0);
15141   hTrueX->SetBit(TH1::kCanRebin);
15142 
15143   TH1F *hLargestRadius=new TH1F("hLargestRadius",
15144                                 "hLargestRadius",1000,-1.5,1.5);
15145   hLargestRadius->GetXaxis()->SetTitle("radius");
15146   hLargestRadius->GetXaxis()->CenterTitle();
15147   hLargestRadius->GetYaxis()->SetTitle("");
15148   hLargestRadius->GetYaxis()->CenterTitle();
15149   hLargestRadius->SetFillColor(0);
15150   hLargestRadius->SetBit(TH1::kCanRebin);
15151 
15152   TH1F *hLargestTrueRadius=new TH1F("hLargestTrueRadius",
15153                                 "hLargestTrueRadius",1000,-1.5,1.5);
15154   hLargestTrueRadius->GetXaxis()->SetTitle("radius");
15155   hLargestTrueRadius->GetXaxis()->CenterTitle();
15156   hLargestTrueRadius->GetYaxis()->SetTitle("");
15157   hLargestTrueRadius->GetYaxis()->CenterTitle();
15158   hLargestTrueRadius->SetFillColor(0);
15159   hLargestTrueRadius->SetBit(TH1::kCanRebin);
15160 
15161   TH1F *hDeltaLargestRadius=new TH1F("hDeltaLargestRadius",
15162                                 "hDeltaLargestRadius",1000,-1.5,1.5);
15163   hDeltaLargestRadius->GetXaxis()->SetTitle("radius");
15164   hDeltaLargestRadius->GetXaxis()->CenterTitle();
15165   hDeltaLargestRadius->GetYaxis()->SetTitle("");
15166   hDeltaLargestRadius->GetYaxis()->CenterTitle();
15167   hDeltaLargestRadius->SetFillColor(0);
15168   hDeltaLargestRadius->SetBit(TH1::kCanRebin);
15169 
15170   TH1F *hRecoDistToCentre=new TH1F("hRecoDistToCentre",
15171                                    "hRecoDistToCentre",400,-1.5,1.0);
15172   hRecoDistToCentre->GetXaxis()->SetTitle("Distance to plane centre");
15173   hRecoDistToCentre->GetXaxis()->CenterTitle();
15174   hRecoDistToCentre->GetYaxis()->SetTitle("");
15175   hRecoDistToCentre->GetYaxis()->CenterTitle();
15176   hRecoDistToCentre->SetFillColor(0);
15177   hRecoDistToCentre->SetBit(TH1::kCanRebin);
15178 
15179   TH1F *hTrueDistToCentre=new TH1F("hTrueDistToCentre",
15180                                    "hTrueDistToCentre",400,-1.5,1.0);
15181   hTrueDistToCentre->GetXaxis()->SetTitle("Distance to plane centre");
15182   hTrueDistToCentre->GetXaxis()->CenterTitle();
15183   hTrueDistToCentre->GetYaxis()->SetTitle("");
15184   hTrueDistToCentre->GetYaxis()->CenterTitle();
15185   hTrueDistToCentre->SetFillColor(0);
15186   hTrueDistToCentre->SetBit(TH1::kCanRebin);
15187 
15188   TH1F *hDeltaDistToCentre=new TH1F("hDeltaDistToCentre",
15189                                    "hDeltaDistToCentre (truth-x)",
15190                                     800,-1.5,1.0);
15191   hDeltaDistToCentre->GetXaxis()->SetTitle("Distance to plane centre");
15192   hDeltaDistToCentre->GetXaxis()->CenterTitle();
15193   hDeltaDistToCentre->GetYaxis()->SetTitle("");
15194   hDeltaDistToCentre->GetYaxis()->CenterTitle();
15195   hDeltaDistToCentre->SetFillColor(0);
15196   hDeltaDistToCentre->SetBit(TH1::kCanRebin);
15197 
15198   TH2F* hDistVsTrueDist=new TH2F("hDistVsTrueDist","hDistVsTrueDist",
15199                                  100,0,0.7,100,0,0.7);
15200   hDistVsTrueDist->GetXaxis()->SetTitle("TrueDist");
15201   hDistVsTrueDist->GetXaxis()->CenterTitle();
15202   hDistVsTrueDist->GetYaxis()->SetTitle("RecoDist");
15203   hDistVsTrueDist->GetYaxis()->CenterTitle();
15204   hDistVsTrueDist->SetFillColor(0);
15205   //hDistVsTrueDist->SetMaximum(15000);
15206 
15207   TH2F* hXVsTrueX=new TH2F("hXVsTrueX","hXVsTrueX",
15208                                  100,-0.5,0.5,100,-0.5,0.5);
15209   hXVsTrueX->GetXaxis()->SetTitle("TrueX");
15210   hXVsTrueX->GetXaxis()->CenterTitle();
15211   hXVsTrueX->GetYaxis()->SetTitle("mod(X)");
15212   hXVsTrueX->GetYaxis()->CenterTitle();
15213   hXVsTrueX->SetFillColor(0);
15214   //hXVsTrueX->SetMaximum(15000);
15215 
15216   Int_t totalCounter=0;
15217   Int_t notStraightCounter=0;
15218   Int_t recoFailures=0;
15219   Int_t recoFailures2Sig=0;
15220   Int_t straightTrackCounterTrue=0;
15221   Int_t straightTrackCounter=0;
15222   Int_t straightTrackCounterBoth=0;
15223   
15227   
15228   this->InitialiseLoopVariables();  
15229   
15230   for(Int_t event=0;event<fEvents;event++){
15231     
15232     this->SetLoopVariables(event);
15233 
15234     //cut on straight tracks
15235     //Double_t mainX1Cut=0.4;
15236     //if (this->IsStraightTrack(mainX1Cut)){
15237     //continue;
15238     //}
15239 
15240     totalCounter++;
15241 
15242     Bool_t trueStraight=false;
15243     Bool_t recoStraight=false;
15244     Double_t radiusCut=0.3;
15245 
15246     //section to count tracks
15247     if (this->IsStraightTrack_Radius(radiusCut)){
15248       straightTrackCounterTrue++;
15249       trueStraight=true;
15250     }
15251     if (this->StraightTrack_Radius(radiusCut)){
15252       straightTrackCounter++;
15253       recoStraight=true;
15254     }
15255     if (recoStraight && trueStraight){
15256       straightTrackCounterBoth++;
15257     }
15258 
15259     //now decide if to cut or not
15260     //if (recoStraight) continue;
15261 
15262     notStraightCounter++;
15263     Float_t largestRadius=-1;
15264     Float_t largestTrueRadius=-1;
15265 
15266     //get tclones arrays for this snarl
15267     TClonesArray &cTrk=*fTrkHitInfo;
15268     Int_t numTrkHits=fTrkHitInfo->GetEntries();
15269 
15271     //loop over the tracked hits
15273     for (Int_t hit=0;hit<numTrkHits;hit++){
15274       CDTrackedHitInfo *trackedHitInfo=
15275         dynamic_cast<CDTrackedHitInfo*>(cTrk[hit]);
15276           
15277       this->ReadInHitInfo(trackedHitInfo);
15278 
15279       //calculate the first and last planes
15280       this->CalcFirstLastPlane(fPlane);
15281 
15282       //calc dist to plane centre
15283       Float_t dist=this->CalcDistToPlaneCentre(fStrip,fTransPos);
15284       hRecoDistToCentre->Fill(dist);
15285 
15286       if (dist>largestRadius) largestRadius=dist;
15287 
15288       Float_t trueX=this->TrueXInStripFrame(fPlane,fStrip,event);
15289       MAXMSG("CDAnalysis",Msg::kVerbose,100)
15290         <<"trueX="<<trueX<<endl;
15291 
15292       hTransPos->Fill(fTransPos);
15293       hTrueX->Fill(trueX);
15294 
15295       Float_t distTrue=-1;
15296 
15297       if (trueX!=-1){
15298         distTrue=this->TrueDistToPlaneCentre(fStrip,trueX);
15299         if (distTrue>largestTrueRadius) largestTrueRadius=distTrue;
15300         hTrueDistToCentre->Fill(distTrue);
15301         
15302         if (fTransPos>0 && fTransPos<23){
15303           Float_t transPosFromCentre1=-1;
15304           if (fTransPos<=11) transPosFromCentre1=11-fTransPos;
15305           else if (fTransPos>11) transPosFromCentre1=fTransPos-11;
15306           
15307           //calc real distance
15308           Float_t stripSize=0.041;
15309           Float_t x=transPosFromCentre1*stripSize;
15310           
15311           //sanity check
15312           if (x<0){
15313             MSG("CDAnalysis",Msg::kInfo)
15314               <<"x="<<x<<", transpos="<<fTransPos
15315               <<", transPosFromCentre="<<transPosFromCentre1<<endl;
15316           }
15317 
15318           hXVsTrueX->Fill(trueX,x);
15319         }
15320       }
15321 
15322       if (distTrue!=-1 && dist!=-1){    
15323         Float_t deltaDist=distTrue-dist;
15324         //if (deltaDist<0) deltaDist=deltaDist-2*deltaDist;
15325         hDeltaDistToCentre->Fill(deltaDist);
15326         hDistVsTrueDist->Fill(distTrue,dist);
15327       }
15328     }
15330     //end of loop over the tracked hits
15332 
15333     //count the reco failures where there was a genuine hit
15334     //outside the radius cut but no reco hit within error
15335     if (largestRadius<radiusCut-0.025) recoFailures++; 
15336     if (largestRadius<radiusCut-0.050) recoFailures2Sig++; 
15337     hLargestTrueRadius->Fill(largestTrueRadius);
15338     hLargestRadius->Fill(largestRadius);
15339     if (largestRadius!=-1 && largestTrueRadius!=-1){
15340       hDeltaLargestRadius->Fill(largestTrueRadius-largestRadius);
15341     }
15342     else{
15343       hDeltaLargestRadius->Fill(-1);
15344     }
15345 
15346   }//end of for                                       
15347   
15351 
15352   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
15353 
15354   TCanvas *cPos=new TCanvas("cPos","cPos",0,0,1200,800);
15355   cPos->SetFillColor(0);
15356   cPos->Divide(2,2);
15357   cPos->cd(1);
15358   hRecoDistToCentre->Draw();
15359   cPos->cd(2);
15360   hTrueDistToCentre->Draw();
15361   cPos->cd(3);
15362   hDeltaDistToCentre->Draw();
15363 
15364   TCanvas *cGeom=new TCanvas("cGeom","cGeom",0,0,1200,800);
15365   cGeom->SetFillColor(0);
15366   cGeom->Divide(3,2);
15367   cGeom->cd(1);
15368   hTransPos->Draw();
15369   cGeom->cd(2);
15370   hTrueX->Draw();
15371   cGeom->cd(3);
15372   hLargestRadius->Draw();
15373   cGeom->cd(4);
15374   hLargestTrueRadius->Draw();
15375   cGeom->cd(5);
15376   hDeltaLargestRadius->Draw();
15377   
15378   TCanvas *c2D=new TCanvas("c2D","c2D",0,0,1200,800);
15379   c2D->SetFillColor(0);
15380   c2D->Divide(2,1);
15381   c2D->cd(1);
15382   hDistVsTrueDist->Draw("colz");
15383   c2D->cd(2);
15384   hXVsTrueX->Draw("colz");
15385 
15386   MSG("CDAnalysis",Msg::kInfo) 
15387     <<"Total events="<<totalCounter<<endl
15388     <<"Reco Failures at 1Sig="<<recoFailures<<"/"<<notStraightCounter
15389     <<" ("<<100.*recoFailures/notStraightCounter<<"%)"<<endl
15390     <<"Reco Failures at 2Sig="
15391     <<recoFailures2Sig<<"/"<<notStraightCounter
15392     <<" ("<<100.*recoFailures2Sig/notStraightCounter<<"%)"<<endl
15393     <<"Straight track counter true="<<straightTrackCounterTrue<<endl
15394     <<"Straight track counter reco="<<straightTrackCounter<<endl
15395     <<"Straight track counter both="<<straightTrackCounterBoth<<endl;
15396   
15397   MSG("CDAnalysis",Msg::kInfo) 
15398     <<" ** Finished ValidateReco method **"<<endl;
15399 }

void CDAnalysis::ValidateTrkHits  ) 
 

Definition at line 15403 of file CDAnalysis.cxx.

References CalcDistToPlaneCentre(), fTrackInfo, fTrkHitInfo, CDTrackedHitInfo::GetCharge(), CDTrackedHitInfo::GetDxDz(), CDTrackedHitInfo::GetDyDz(), CDTrackedHitInfo::GetDzDs(), CDTrackedHitInfo::GetEnd(), CDTrackedHitInfo::GetPlane(), CDTrackInfo::GetResult(), CDTrackedHitInfo::GetStrip(), CDTrackedHitInfo::GetTransPos(), CDTrackedHitInfo::GetYPos(), InitialiseLoopVariables(), MSG, and SetLoopVariables().

15404 {
15405   MSG("CDAnalysis",Msg::kInfo) 
15406     <<" ** Running ValidateTrkHits method... **"<<endl;
15407 
15408   TH1F *hStrip=new TH1F("hStrip","Strips hit",100,-2,30);
15409   hStrip->GetXaxis()->SetTitle("Strip");
15410   hStrip->GetXaxis()->CenterTitle();
15411   hStrip->GetYaxis()->SetTitle("");
15412   hStrip->GetYaxis()->CenterTitle();
15413   hStrip->SetFillColor(0);
15414   hStrip->SetBit(TH1::kCanRebin);
15415 
15416   TH1F *hStripend=new TH1F("hStripend","Stripend hit",120,-2,10);
15417   hStripend->GetXaxis()->SetTitle("Stripend");
15418   hStripend->GetXaxis()->CenterTitle();
15419   hStripend->GetYaxis()->SetTitle("");
15420   hStripend->GetYaxis()->CenterTitle();
15421   hStripend->SetFillColor(0);
15422   hStripend->SetBit(TH1::kCanRebin);
15423 
15424   TH1F *hPlane=new TH1F("hPlane","Planes hit",200,-2,75);
15425   hPlane->GetXaxis()->SetTitle("Plane");
15426   hPlane->GetXaxis()->CenterTitle();
15427   hPlane->GetYaxis()->SetTitle("");
15428   hPlane->GetYaxis()->CenterTitle();
15429   hPlane->SetFillColor(0);
15430   hPlane->SetBit(TH1::kCanRebin);
15431 
15432   TH1F *hChargeSigCor=new TH1F("hChargeSigCor","ChargeSigCor",
15433                                1000,-2,15000);
15434   hChargeSigCor->GetXaxis()->SetTitle("ChargeSigCor");
15435   hChargeSigCor->GetXaxis()->CenterTitle();
15436   hChargeSigCor->GetYaxis()->SetTitle("");
15437   hChargeSigCor->GetYaxis()->CenterTitle();
15438   hChargeSigCor->SetFillColor(0);
15439   hChargeSigCor->SetBit(TH1::kCanRebin);
15440 
15441   TH1F *hChargeSigLin=new TH1F("hChargeSigLin","ChargeSigLin",
15442                                1000,-2,15000);
15443   hChargeSigLin->GetXaxis()->SetTitle("ChargeSigLin");
15444   hChargeSigLin->GetXaxis()->CenterTitle();
15445   hChargeSigLin->GetYaxis()->SetTitle("");
15446   hChargeSigLin->GetYaxis()->CenterTitle();
15447   hChargeSigLin->SetFillColor(0);
15448   hChargeSigLin->SetBit(TH1::kCanRebin);
15449 
15450   TH1F *hChargePe=new TH1F("hChargePe","ChargePe",400,-2,400);
15451   hChargePe->GetXaxis()->SetTitle("ChargePe");
15452   hChargePe->GetXaxis()->CenterTitle();
15453   hChargePe->GetYaxis()->SetTitle("");
15454   hChargePe->GetYaxis()->CenterTitle();
15455   hChargePe->SetFillColor(0);
15456   hChargePe->SetBit(TH1::kCanRebin);
15457 
15458   TH1F *hGain=new TH1F("hGain","Gain",1000,-2,150);
15459   hGain->GetXaxis()->SetTitle("Gain");
15460   hGain->GetXaxis()->CenterTitle();
15461   hGain->GetYaxis()->SetTitle("");
15462   hGain->GetYaxis()->CenterTitle();
15463   hGain->SetFillColor(0);
15464   hGain->SetBit(TH1::kCanRebin);
15465 
15466   TH1F *hdzds=new TH1F("hdzds","dzds",400,-2,2);
15467   hdzds->GetXaxis()->SetTitle("dzds");
15468   hdzds->GetXaxis()->CenterTitle();
15469   hdzds->GetYaxis()->SetTitle("");
15470   hdzds->GetYaxis()->CenterTitle();
15471   hdzds->SetFillColor(0);
15472   hdzds->SetBit(TH1::kCanRebin);
15473 
15474   TH1F *hdsdz=new TH1F("hdsdz","dsdz",400,-2,10);
15475   hdsdz->GetXaxis()->SetTitle("dsdz");
15476   hdsdz->GetXaxis()->CenterTitle();
15477   hdsdz->GetYaxis()->SetTitle("");
15478   hdsdz->GetYaxis()->CenterTitle();
15479   hdsdz->SetFillColor(0);
15480   hdsdz->SetBit(TH1::kCanRebin);
15481 
15482   TH1F *hdydz=new TH1F("hdydz","dydz",400,-5,5);
15483   hdydz->GetXaxis()->SetTitle("dydz");
15484   hdydz->GetXaxis()->CenterTitle();
15485   hdydz->GetYaxis()->SetTitle("");
15486   hdydz->GetYaxis()->CenterTitle();
15487   hdydz->SetFillColor(0);
15488   hdydz->SetBit(TH1::kCanRebin);
15489 
15490   TH1F *hdxdz=new TH1F("hdxdz","dxdz",400,-10,10);
15491   hdxdz->GetXaxis()->SetTitle("dxdz");
15492   hdxdz->GetXaxis()->CenterTitle();
15493   hdxdz->GetYaxis()->SetTitle("");
15494   hdxdz->GetYaxis()->CenterTitle();
15495   hdxdz->SetFillColor(0);
15496   hdxdz->SetBit(TH1::kCanRebin);
15497 
15498   TH1F *hdyds=new TH1F("hdyds","dyds",400,-3,3);
15499   hdyds->GetXaxis()->SetTitle("dyds");
15500   hdyds->GetXaxis()->CenterTitle();
15501   hdyds->GetYaxis()->SetTitle("");
15502   hdyds->GetYaxis()->CenterTitle();
15503   hdyds->SetFillColor(0);
15504   hdyds->SetBit(TH1::kCanRebin);
15505 
15506   TH1F *hdxds=new TH1F("hdxds","dxds",400,-3,3);
15507   hdxds->GetXaxis()->SetTitle("dxds");
15508   hdxds->GetXaxis()->CenterTitle();
15509   hdxds->GetYaxis()->SetTitle("");
15510   hdxds->GetYaxis()->CenterTitle();
15511   hdxds->SetFillColor(0);
15512   hdxds->SetBit(TH1::kCanRebin);
15513 
15514   TH1F *hTransPos=new TH1F("hTransPos","TransPos",1000,-2,35);
15515   hTransPos->GetXaxis()->SetTitle("TransPos");
15516   hTransPos->GetXaxis()->CenterTitle();
15517   hTransPos->GetYaxis()->SetTitle("");
15518   hTransPos->GetYaxis()->CenterTitle();
15519   hTransPos->SetFillColor(0);
15520   hTransPos->SetBit(TH1::kCanRebin);
15521 
15522   TH1F *hYPos=new TH1F("hYPos","YPos",1000,-8,8);
15523   hYPos->GetXaxis()->SetTitle("YPos");
15524   hYPos->GetXaxis()->CenterTitle();
15525   hYPos->GetYaxis()->SetTitle("");
15526   hYPos->GetYaxis()->CenterTitle();
15527   hYPos->SetFillColor(0);
15528   hYPos->SetBit(TH1::kCanRebin);
15529 
15530   TH1F *hEvenResult=new TH1F("hEvenResult","EvenResult",100,-5,5);
15531   hEvenResult->GetXaxis()->SetTitle("EvenResult");
15532   hEvenResult->GetXaxis()->CenterTitle();
15533   hEvenResult->GetYaxis()->SetTitle("");
15534   hEvenResult->GetYaxis()->CenterTitle();
15535   hEvenResult->SetFillColor(0);
15536   hEvenResult->SetBit(TH1::kCanRebin);
15537 
15538   TH1F *hOddResult=new TH1F("hOddResult","OddResult",100,-5,5);
15539   hOddResult->GetXaxis()->SetTitle("OddResult");
15540   hOddResult->GetXaxis()->CenterTitle();
15541   hOddResult->GetYaxis()->SetTitle("");
15542   hOddResult->GetYaxis()->CenterTitle();
15543   hOddResult->SetFillColor(0);
15544   hOddResult->SetBit(TH1::kCanRebin);
15545 
15546   TH1F *hRecoDistToCentre=new TH1F("hRecoDistToCentre",
15547                                    "hRecoDistToCentre",400,-1.5,1.0);
15548   hRecoDistToCentre->GetXaxis()->SetTitle("Distance to plane centre");
15549   hRecoDistToCentre->GetXaxis()->CenterTitle();
15550   hRecoDistToCentre->GetYaxis()->SetTitle("");
15551   hRecoDistToCentre->GetYaxis()->CenterTitle();
15552   hRecoDistToCentre->SetFillColor(0);
15553   hRecoDistToCentre->SetBit(TH1::kCanRebin);
15554 
15555   TH1F *hTrueDistToCentre=new TH1F("hTrueDistToCentre",
15556                                    "hTrueDistToCentre",400,-1.5,1.0);
15557   hTrueDistToCentre->GetXaxis()->SetTitle("Distance to plane centre");
15558   hTrueDistToCentre->GetXaxis()->CenterTitle();
15559   hTrueDistToCentre->GetYaxis()->SetTitle("");
15560   hTrueDistToCentre->GetYaxis()->CenterTitle();
15561   hTrueDistToCentre->SetFillColor(0);
15562   hTrueDistToCentre->SetBit(TH1::kCanRebin);
15563 
15567   
15568   this->InitialiseLoopVariables();  
15569   
15570   for(Int_t event=0;event<fEvents;event++){
15571     
15572     this->SetLoopVariables(event);
15573 
15574     hEvenResult->Fill(fTrackInfo->GetResult(0));
15575     hOddResult->Fill(fTrackInfo->GetResult(1));
15576 
15577     //if(fTrackInfo->GetResult(0)==1 && fTrackInfo->GetResult(1)==1 && 
15578     // fTrkHitInfo){
15579 
15580         TClonesArray &c = *fTrkHitInfo;
15581         Int_t numTrkHits = fTrkHitInfo->GetEntries();
15582         Int_t hit = 0;
15583         
15584         while(hit<numTrkHits) {
15585           CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
15586           
15587           Int_t plane=trackedHitInfo->GetPlane();
15588           Int_t strip=trackedHitInfo->GetStrip();
15589           Int_t stripend=trackedHitInfo->GetEnd();
15590           
15591           hPlane->Fill(plane);
15592           hStrip->Fill(strip);
15593           hStripend->Fill(stripend);
15594 
15595           Float_t chargeSigLin=trackedHitInfo->GetCharge
15596               (CDTrackedHitInfo::kSigLin);
15597           Float_t chargePe=trackedHitInfo->GetCharge
15598               (CDTrackedHitInfo::kPe);
15599           Float_t gain = chargeSigLin/chargePe;
15600 
15601           hChargeSigLin->Fill(chargeSigLin);
15602           hChargePe->Fill(chargePe);
15603           hGain->Fill(gain);
15604 
15605           Float_t dzds = trackedHitInfo->GetDzDs();
15606           Float_t dsdz = 1./dzds;
15607           Float_t dydz = trackedHitInfo->GetDyDz();
15608           Float_t dxdz = trackedHitInfo->GetDxDz();
15609           Float_t dyds = trackedHitInfo->GetDyDz()*
15610               trackedHitInfo->GetDzDs();
15611           Float_t dxds = trackedHitInfo->GetDxDz()*
15612               trackedHitInfo->GetDzDs();
15613           Float_t transPos = trackedHitInfo->GetTransPos();
15614           Float_t YPos = trackedHitInfo->GetYPos();
15615 
15616           //calc dist to plane centre
15617           Float_t dist=this->CalcDistToPlaneCentre(strip,transPos);
15618           hRecoDistToCentre->Fill(dist);
15619 
15620           hdzds->Fill(dzds);
15621           hdsdz->Fill(dsdz);
15622           hdydz->Fill(dydz);
15623           hdxdz->Fill(dxdz);
15624           hdyds->Fill(dyds);
15625           hdxds->Fill(dxds);
15626           hTransPos->Fill(transPos);
15627           hYPos->Fill(YPos);
15628 
15629           hit++;
15630         }
15631         //      }
15632 
15633   }//end of for                                       
15634   
15638 
15639   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
15640 
15641   TCanvas *cResults=new TCanvas("cResults","Results",0,0,1200,800);
15642   cResults->SetFillColor(0);
15643   cResults->Divide(2,2);
15644   cResults->cd(1);
15645   hEvenResult->Draw();
15646   cResults->cd(2);
15647   hOddResult->Draw();
15648 
15649   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
15650   cGeom->SetFillColor(0);
15651   cGeom->Divide(2,2);
15652   cGeom->cd(1);
15653   hPlane->Draw();
15654   cGeom->cd(2);
15655   hStrip->Draw();
15656   cGeom->cd(3);
15657   hStripend->Draw();
15658 
15659   TCanvas *cHits=new TCanvas("cHits","Hits",0,0,1200,800);
15660   cHits->SetFillColor(0);
15661   cHits->Divide(2,2);
15662   cHits->cd(1);
15663   hChargeSigLin->Draw();
15664   cHits->cd(2);
15665   hChargePe->Draw();
15666   cHits->cd(3);
15667   hGain->Draw();
15668 
15669  TCanvas *cAngles=new TCanvas("cAngles","Angles",0,0,1200,800);
15670   cAngles->SetFillColor(0);
15671   cAngles->Divide(3,2);
15672   cAngles->cd(1);
15673   hdzds->Draw();
15674   cAngles->cd(2);
15675   hdsdz->Draw();
15676   cAngles->cd(3);
15677   hdydz->Draw();
15678   cAngles->cd(4);
15679   hdxdz->Draw();
15680   cAngles->cd(5);
15681   hdyds->Draw();
15682   cAngles->cd(6);
15683   hdxds->Draw();
15684 
15685   TCanvas *cPos=new TCanvas("cPos","Pos",0,0,1200,800);
15686   cPos->SetFillColor(0);
15687   cPos->Divide(2,2);
15688   cPos->cd(1);
15689   hTransPos->Draw();
15690   cPos->cd(2);
15691   hYPos->Draw();
15692   cPos->cd(3);
15693   hRecoDistToCentre->Draw();
15694 
15695 
15696   MSG("CDAnalysis",Msg::kInfo) 
15697     <<" ** Finished ValidateTrkHits method **"<<endl;
15698 }

void CDAnalysis::ValidateTruth  ) 
 

Definition at line 14720 of file CDAnalysis.cxx.

References fTruthHitInfo, CDTruthHitInfo::GetEarliestT1(), CDTruthHitInfo::GetLatestT2(), CDTruthHitInfo::GetMainPartEn(), CDTruthHitInfo::GetMainParticle(), CDTruthHitInfo::GetMainPathLength(), CDTruthHitInfo::GetMainT1(), CDTruthHitInfo::GetMainT2(), CDTruthHitInfo::GetMainX1(), CDTruthHitInfo::GetMainX2(), CDTruthHitInfo::GetMainY1(), CDTruthHitInfo::GetMainY2(), CDTruthHitInfo::GetMainZ1(), CDTruthHitInfo::GetMainZ2(), CDTruthHitInfo::GetNumDigiScintHits(), CDTruthHitInfo::GetPlane(), CDTruthHitInfo::GetPmtTruth1(), CDTruthHitInfo::GetPmtTruth2(), CDTruthHitInfo::GetStrip(), CDTruthHitInfo::GetTotalEnDep(), CDTruthHitInfo::GetVaChip1(), CDTruthHitInfo::GetVaChip2(), InitialiseLoopVariables(), MSG, SetLoopVariables(), and TrueDistToPlaneCentre().

14721 {
14722   MSG("CDAnalysis",Msg::kInfo) 
14723     <<" ** Running ValidateTruth method... **"<<endl;
14724   
14725   TH1F *hStrip=new TH1F("hStrip","Strips hit",100,-2,30);
14726   hStrip->GetXaxis()->SetTitle("Strip");
14727   hStrip->GetXaxis()->CenterTitle();
14728   hStrip->GetYaxis()->SetTitle("");
14729   hStrip->GetYaxis()->CenterTitle();
14730   hStrip->SetFillColor(0);
14731   hStrip->SetBit(TH1::kCanRebin);
14732 
14733   TH1F *hPlane=new TH1F("hPlane","Planes hit",200,-2,75);
14734   hPlane->GetXaxis()->SetTitle("Plane");
14735   hPlane->GetXaxis()->CenterTitle();
14736   hPlane->GetYaxis()->SetTitle("");
14737   hPlane->GetYaxis()->CenterTitle();
14738   hPlane->SetFillColor(0);
14739   hPlane->SetBit(TH1::kCanRebin);
14740 
14741   TH1F *hNumDigiScintHits=new TH1F("hNumDigiScintHits",
14742                                    "NumDigiScintHits",800,-2,250);
14743   hNumDigiScintHits->GetXaxis()->SetTitle("NumDigiScintHits");
14744   hNumDigiScintHits->GetXaxis()->CenterTitle();
14745   hNumDigiScintHits->GetYaxis()->SetTitle("");
14746   hNumDigiScintHits->GetYaxis()->CenterTitle();
14747   hNumDigiScintHits->SetFillColor(0);
14748   hNumDigiScintHits->SetBit(TH1::kCanRebin);
14749 
14750   TH1F *hPmtTruth1=new TH1F("hPmtTruth1","PmtTruth1",400,-2,125);
14751   hPmtTruth1->GetXaxis()->SetTitle("PmtTruth1");
14752   hPmtTruth1->GetXaxis()->CenterTitle();
14753   hPmtTruth1->GetYaxis()->SetTitle("");
14754   hPmtTruth1->GetYaxis()->CenterTitle();
14755   hPmtTruth1->SetFillColor(0);
14756   hPmtTruth1->SetBit(TH1::kCanRebin);
14757 
14758   TH1F *hPmtTruth2=new TH1F("hPmtTruth2","PmtTruth2",400,-2,125);
14759   hPmtTruth2->GetXaxis()->SetTitle("PmtTruth2");
14760   hPmtTruth2->GetXaxis()->CenterTitle();
14761   hPmtTruth2->GetYaxis()->SetTitle("");
14762   hPmtTruth2->GetYaxis()->CenterTitle();
14763   hPmtTruth2->SetFillColor(0);
14764   hPmtTruth2->SetBit(TH1::kCanRebin);
14765 
14766   TH1F *hVaChip1=new TH1F("hVaChip1","VaChip1",50,-2,5);
14767   hVaChip1->GetXaxis()->SetTitle("VaChip1");
14768   hVaChip1->GetXaxis()->CenterTitle();
14769   hVaChip1->GetYaxis()->SetTitle("");
14770   hVaChip1->GetYaxis()->CenterTitle();
14771   hVaChip1->SetFillColor(0);
14772   hVaChip1->SetBit(TH1::kCanRebin);
14773 
14774   TH1F *hVaChip2=new TH1F("hVaChip2","VaChip2",50,-2,5);
14775   hVaChip2->GetXaxis()->SetTitle("VaChip2");
14776   hVaChip2->GetXaxis()->CenterTitle();
14777   hVaChip2->GetYaxis()->SetTitle("");
14778   hVaChip2->GetYaxis()->CenterTitle();
14779   hVaChip2->SetFillColor(0);
14780   hVaChip2->SetBit(TH1::kCanRebin);
14781 
14782   TH1F *hMainParticle=new TH1F("hMainParticle","MainParticle",200,-20,20);
14783   hMainParticle->GetXaxis()->SetTitle("MainParticle");
14784   hMainParticle->GetXaxis()->CenterTitle();
14785   hMainParticle->GetYaxis()->SetTitle("");
14786   hMainParticle->GetYaxis()->CenterTitle();
14787   hMainParticle->SetFillColor(0);
14788   hMainParticle->SetBit(TH1::kCanRebin);
14789 
14790   TH1F *hTotalEnDep=new TH1F("hTotalEnDep","TotalEnDep",
14791                              500,-5./1000,15./1000);
14792   hTotalEnDep->GetXaxis()->SetTitle("TotalEnDep");
14793   hTotalEnDep->GetXaxis()->CenterTitle();
14794   hTotalEnDep->GetYaxis()->SetTitle("");
14795   hTotalEnDep->GetYaxis()->CenterTitle();
14796   hTotalEnDep->SetFillColor(0);
14797   hTotalEnDep->SetBit(TH1::kCanRebin);
14798 
14799   TH1F *hMainPartEn=new TH1F("hMainPartEn","MainPartEn",500,-0.5,2);
14800   hMainPartEn->GetXaxis()->SetTitle("MainPartEn");
14801   hMainPartEn->GetXaxis()->CenterTitle();
14802   hMainPartEn->GetYaxis()->SetTitle("");
14803   hMainPartEn->GetYaxis()->CenterTitle();
14804   hMainPartEn->SetFillColor(0);
14805   hMainPartEn->SetBit(TH1::kCanRebin);
14806 
14807   TH1F *hMainPathLength=new TH1F("hMainPathLength","MainPathLength",
14808                                  500,-0.01,0.1);
14809   hMainPathLength->GetXaxis()->SetTitle("MainPathLength");
14810   hMainPathLength->GetXaxis()->CenterTitle();
14811   hMainPathLength->GetYaxis()->SetTitle("");
14812   hMainPathLength->GetYaxis()->CenterTitle();
14813   hMainPathLength->SetFillColor(0);
14814   hMainPathLength->SetBit(TH1::kCanRebin);
14815   
14816   TH1F *hEarliestT1=new TH1F("hEarliestT1","EarliestT1",
14817                              2000,-2e-9,20e-9);
14818   hEarliestT1->GetXaxis()->SetTitle("T1");
14819   hEarliestT1->GetXaxis()->CenterTitle();
14820   hEarliestT1->GetYaxis()->SetTitle("");
14821   hEarliestT1->GetYaxis()->CenterTitle();
14822   hEarliestT1->SetFillColor(0);
14823   hEarliestT1->SetBit(TH1::kCanRebin);
14824 
14825   TH1F *hLatestT2=new TH1F("hLatestT2","LatestT2",2000,-2e-9,20e-9);
14826   hLatestT2->GetXaxis()->SetTitle("T1");
14827   hLatestT2->GetXaxis()->CenterTitle();
14828   hLatestT2->GetYaxis()->SetTitle("");
14829   hLatestT2->GetYaxis()->CenterTitle();
14830   hLatestT2->SetFillColor(0);
14831   hLatestT2->SetBit(TH1::kCanRebin);
14832 
14833   TH1F *hMainT1=new TH1F("hMainT1","MainT1",2000,-1e-9,20e-9);
14834   hMainT1->GetXaxis()->SetTitle("T1");
14835   hMainT1->GetXaxis()->CenterTitle();
14836   hMainT1->GetYaxis()->SetTitle("");
14837   hMainT1->GetYaxis()->CenterTitle();
14838   hMainT1->SetFillColor(0);
14839   hMainT1->SetBit(TH1::kCanRebin);
14840 
14841   TH1F *hMainT1b=new TH1F("hMainT1b","MainT1b",2000,-1e-9,20e-9);
14842   hMainT1b->GetXaxis()->SetTitle("T1");
14843   hMainT1b->GetXaxis()->CenterTitle();
14844   hMainT1b->GetYaxis()->SetTitle("");
14845   hMainT1b->GetYaxis()->CenterTitle();
14846   hMainT1b->SetFillColor(0);
14847   //hMainT1b->SetBit(TH1::kCanRebin);
14848 
14849   TH1F *hMainX1=new TH1F("hMainX1","MainX1",2000,-0.6,0.6);
14850   hMainX1->GetXaxis()->SetTitle("X1");
14851   hMainX1->GetXaxis()->CenterTitle();
14852   hMainX1->GetYaxis()->SetTitle("");
14853   hMainX1->GetYaxis()->CenterTitle();
14854   hMainX1->SetFillColor(0);
14855   hMainX1->SetBit(TH1::kCanRebin);
14856 
14857   TH1F *hMainY1=new TH1F("hMainY1","MainY1",8000,-0.025,0.025);
14858   hMainY1->GetXaxis()->SetTitle("Y1");
14859   hMainY1->GetXaxis()->CenterTitle();
14860   hMainY1->GetYaxis()->SetTitle("");
14861   hMainY1->GetYaxis()->CenterTitle();
14862   hMainY1->SetFillColor(0);
14863   hMainY1->SetBit(TH1::kCanRebin);
14864 
14865   TH1F *hMainZ1=new TH1F("hMainZ1","MainZ1",8000,-0.007,0.007);
14866   hMainZ1->GetXaxis()->SetTitle("Z1");
14867   hMainZ1->GetXaxis()->CenterTitle();
14868   hMainZ1->GetYaxis()->SetTitle("");
14869   hMainZ1->GetYaxis()->CenterTitle();
14870   hMainZ1->SetFillColor(0);
14871   hMainZ1->SetBit(TH1::kCanRebin);
14872 
14873   TH1F *hMainT2=new TH1F("hMainT2","MainT2",2000,-1e-9,20e-9);
14874   hMainT2->GetXaxis()->SetTitle("T2");
14875   hMainT2->GetXaxis()->CenterTitle();
14876   hMainT2->GetYaxis()->SetTitle("");
14877   hMainT2->GetYaxis()->CenterTitle();
14878   hMainT2->SetFillColor(0);
14879   hMainT2->SetBit(TH1::kCanRebin);
14880 
14881   TH1F *hMainT2b=new TH1F("hMainT2b","MainT2b",2000,-1e-9,20e-9);
14882   hMainT2b->GetXaxis()->SetTitle("T2");
14883   hMainT2b->GetXaxis()->CenterTitle();
14884   hMainT2b->GetYaxis()->SetTitle("");
14885   hMainT2b->GetYaxis()->CenterTitle();
14886   hMainT2b->SetFillColor(0);
14887   //hMainT2b->SetBit(TH1::kCanRebin);
14888 
14889   TH1F *hMainX2=new TH1F("hMainX2","MainX2",2000,-0.6,0.6);
14890   hMainX2->GetXaxis()->SetTitle("X2");
14891   hMainX2->GetXaxis()->CenterTitle();
14892   hMainX2->GetYaxis()->SetTitle("");
14893   hMainX2->GetYaxis()->CenterTitle();
14894   hMainX2->SetFillColor(0);
14895   hMainX2->SetBit(TH1::kCanRebin);
14896 
14897   TH1F *hMainY2=new TH1F("hMainY2","MainY2",8000,-0.025,0.025);
14898   hMainY2->GetXaxis()->SetTitle("Y2");
14899   hMainY2->GetXaxis()->CenterTitle();
14900   hMainY2->GetYaxis()->SetTitle("");
14901   hMainY2->GetYaxis()->CenterTitle();
14902   hMainY2->SetFillColor(0);
14903   hMainY2->SetBit(TH1::kCanRebin);
14904 
14905   TH1F *hMainZ2=new TH1F("hMainZ2","MainZ2",8000,-0.007,0.007);
14906   hMainZ2->GetXaxis()->SetTitle("Z2");
14907   hMainZ2->GetXaxis()->CenterTitle();
14908   hMainZ2->GetYaxis()->SetTitle("");
14909   hMainZ2->GetYaxis()->CenterTitle();
14910   hMainZ2->SetFillColor(0);
14911   hMainZ2->SetBit(TH1::kCanRebin);
14912 
14913   TH2F *hXvsY=new TH2F("hXvsY","XvsY",200,-0.025,0.025,200,-0.6,0.6);
14914   hXvsY->GetXaxis()->SetTitle("Y");
14915   hXvsY->GetXaxis()->CenterTitle();
14916   hXvsY->GetYaxis()->SetTitle("X");
14917   hXvsY->GetYaxis()->CenterTitle();
14918   hXvsY->SetFillColor(0);
14919   hXvsY->SetBit(TH1::kCanRebin);
14920 
14921   TH2F *hZvsY=new TH2F("hZvsY","ZvsY",200,-0.025,0.025,
14922                        200,-0.007,0.007);
14923   hZvsY->GetXaxis()->SetTitle("Y");
14924   hZvsY->GetXaxis()->CenterTitle();
14925   hZvsY->GetYaxis()->SetTitle("Z");
14926   hZvsY->GetYaxis()->CenterTitle();
14927   hZvsY->SetFillColor(0);
14928   hZvsY->SetBit(TH1::kCanRebin);
14929 
14930   TH1F *hTrueDistToCentre=new TH1F("hTrueDistToCentre",
14931                                    "hTrueDistToCentre",400,-1.5,1.0);
14932   hTrueDistToCentre->GetXaxis()->SetTitle("Distance to plane centre");
14933   hTrueDistToCentre->GetXaxis()->CenterTitle();
14934   hTrueDistToCentre->GetYaxis()->SetTitle("");
14935   hTrueDistToCentre->GetYaxis()->CenterTitle();
14936   hTrueDistToCentre->SetFillColor(0);
14937   hTrueDistToCentre->SetBit(TH1::kCanRebin);
14938 
14942   
14943   this->InitialiseLoopVariables();  
14944   
14945   for(Int_t event=0;event<fEvents;event++){
14946     
14947     this->SetLoopVariables(event);
14948 
14949     if (!fTruthHitInfo) break;
14950 
14951     TClonesArray &cTruth = *fTruthHitInfo;
14952     Int_t numTruthHits=fTruthHitInfo->GetEntries();
14953     
14954     MSG("CDAnalysis",Msg::kDebug)
14955       <<"Event="<<event
14956       <<", truthHits="<<numTruthHits<<endl;
14957 
14959     //loop over the truth hits
14961     for (Int_t hit=0;hit<numTruthHits;hit++){
14962       //cast the tclonesarray up to a truthhitinfo object
14963       CDTruthHitInfo *hitInfo=
14964         dynamic_cast<CDTruthHitInfo*>(cTruth[hit]);
14965       
14966       const Int_t plane=hitInfo->GetPlane();
14967       const Int_t strip=hitInfo->GetStrip();
14968       const Int_t mainParticle=hitInfo->GetMainParticle();
14969       const Double_t totalEnDep=hitInfo->GetTotalEnDep();
14970       const Double_t mainPartEn=hitInfo->GetMainPartEn();
14971       const Double_t mainPathLength=hitInfo->GetMainPathLength();
14972       const Double_t numDigiScintHits=hitInfo->GetNumDigiScintHits();
14973       const Int_t pmtTruth1=hitInfo->GetPmtTruth1();
14974       const Int_t pmtTruth2=hitInfo->GetPmtTruth2();
14975       const Int_t vaChip1=hitInfo->GetVaChip1();
14976       const Int_t vaChip2=hitInfo->GetVaChip2();
14977       
14978       const Double_t mainT1=hitInfo->GetMainT1();
14979       const Double_t mainX1=hitInfo->GetMainX1();
14980       const Double_t mainY1=hitInfo->GetMainY1();
14981       const Double_t mainZ1=hitInfo->GetMainZ1();
14982       const Double_t mainT2=hitInfo->GetMainT2();
14983       const Double_t mainX2=hitInfo->GetMainX2();
14984       const Double_t mainY2=hitInfo->GetMainY2();
14985       const Double_t mainZ2=hitInfo->GetMainZ2();
14986 
14987       const Double_t earliestT1=hitInfo->GetEarliestT1();
14988       const Double_t latestT2=hitInfo->GetLatestT2();
14989 
14990       //if (plane==0) continue;
14991 
14992       hPlane->Fill(plane);
14993       hStrip->Fill(strip);
14994       hMainParticle->Fill(mainParticle);
14995       hTotalEnDep->Fill(totalEnDep);
14996       hMainPartEn->Fill(mainPartEn);
14997       hMainPathLength->Fill(mainPathLength);
14998       hPmtTruth1->Fill(pmtTruth1);
14999       hPmtTruth2->Fill(pmtTruth2);
15000       hVaChip1->Fill(vaChip1);
15001       hVaChip2->Fill(vaChip2);
15002       hMainT1->Fill(mainT1);
15003       hMainT1b->Fill(mainT1);
15004       hMainX1->Fill(mainX1);
15005       hMainY1->Fill(mainY1);
15006       hMainZ1->Fill(mainZ1);
15007       hMainT2->Fill(mainT2);
15008       hMainT2b->Fill(mainT2);
15009       hMainX2->Fill(mainX2);
15010       hMainY2->Fill(mainY2);
15011       hMainZ2->Fill(mainZ2);
15012       hEarliestT1->Fill(earliestT1);
15013       hLatestT2->Fill(latestT2);
15014       hNumDigiScintHits->Fill(numDigiScintHits);
15015       if (mainY1!=0) hXvsY->Fill(mainY1,mainX1);
15016       if (mainY2!=0) hXvsY->Fill(mainY2,mainX2);
15017       if (mainY1!=0) hZvsY->Fill(mainY1,mainZ1);
15018       if (mainY2!=0) hZvsY->Fill(mainY2,mainZ2);
15019 
15020       Float_t dist=this->TrueDistToPlaneCentre(strip,
15021                                                (mainX1+mainX2)*0.5);
15022       hTrueDistToCentre->Fill(dist);
15023 
15024       //
15025       if (earliestT1>0.15e-4){
15026         MSG("CDAnalysis",Msg::kDebug)
15027           <<"eT1="<<earliestT1<<", lT2="<<latestT2<<endl;
15028       }
15029     }
15030     
15031   }//end of for                                       
15032   
15036 
15037   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
15038 
15039   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
15040   cGeom->SetFillColor(0);
15041   cGeom->Divide(2,3);
15042   cGeom->cd(1);
15043   hPlane->Draw();
15044   cGeom->cd(2);
15045   hStrip->Draw();
15046   cGeom->cd(3);
15047   hVaChip1->Draw();
15048   cGeom->cd(4);
15049   hVaChip2->Draw();
15050   cGeom->cd(5);
15051   hTrueDistToCentre->Draw();
15052 
15053   TCanvas *cMainParticle=new TCanvas("cMainParticle",
15054                                      "MainParticle",0,0,1200,800);
15055   cMainParticle->SetFillColor(0);
15056   cMainParticle->Divide(2,2);
15057   cMainParticle->cd(1);
15058   hMainParticle->Draw();
15059   cMainParticle->cd(2);
15060   hTotalEnDep->Draw();
15061   cMainParticle->cd(3);
15062   hMainPartEn->Draw();
15063   cMainParticle->cd(4);
15064   hMainPathLength->Draw();
15065 
15066   TCanvas *cTruth=new TCanvas("cTruth","Truth",0,0,1200,800);
15067   cTruth->SetFillColor(0);
15068   cTruth->Divide(2,2);
15069   cTruth->cd(1);
15070   hPmtTruth1->Draw();
15071   cTruth->cd(2);
15072   hPmtTruth2->Draw();
15073   cTruth->cd(3);
15074   hNumDigiScintHits->Draw();
15075 
15076   TCanvas *cT=new TCanvas("cT","T",0,0,800,800);
15077   cT->SetFillColor(0);
15078   cT->Divide(2,3);
15079   cT->cd(1);
15080   hMainT1->Draw();
15081   cT->cd(2);
15082   hMainT2->Draw();
15083   cT->cd(3);
15084   hMainT1b->Draw();
15085   cT->cd(4);
15086   hMainT2b->Draw();
15087   cT->cd(5);
15088   hEarliestT1->Draw();
15089   cT->cd(6);
15090   hLatestT2->Draw();
15091 
15092   TCanvas *cXYZ=new TCanvas("cXYZ","XYZ",0,0,800,800);
15093   cXYZ->SetFillColor(0);
15094   cXYZ->Divide(2,3);
15095   cXYZ->cd(1);
15096   hMainX1->Draw();
15097   cXYZ->cd(2);
15098   hMainX2->Draw();
15099   cXYZ->cd(3);
15100   hMainY1->Draw();
15101   cXYZ->cd(4);
15102   hMainY2->Draw();
15103   cXYZ->cd(5);
15104   hMainZ1->Draw();
15105   cXYZ->cd(6);
15106   hMainZ2->Draw();
15107 
15108   TCanvas *cXvsY=new TCanvas("cXvsY","XvsY",0,0,1200,800);
15109   cXvsY->SetFillColor(0);
15110   hXvsY->Draw("colz");
15111 
15112   TCanvas *cZvsY=new TCanvas("cZvsY","ZvsY",0,0,1200,800);
15113   cZvsY->SetFillColor(0);
15114   hZvsY->Draw("colz");
15115 
15116   MSG("CDAnalysis",Msg::kInfo) 
15117     <<" ** Finished ValidateTruth method **"<<endl;
15118 }

void CDAnalysis::ValidateUnTrkHits  ) 
 

Definition at line 15702 of file CDAnalysis.cxx.

References fTrackInfo, fUnTrkHitInfo, CDTrackedHitInfo::GetCharge(), CDTrackedHitInfo::GetDxDz(), CDTrackedHitInfo::GetDyDz(), CDTrackedHitInfo::GetDzDs(), CDTrackedHitInfo::GetEnd(), CDTrackedHitInfo::GetPlane(), CDTrackInfo::GetResult(), CDTrackedHitInfo::GetStrip(), CDTrackedHitInfo::GetTransPos(), CDTrackedHitInfo::GetYPos(), InitialiseLoopVariables(), MSG, and SetLoopVariables().

15703 {
15704   MSG("CDAnalysis",Msg::kInfo) 
15705     <<" ** Running ValidateUnTrkHits method... **"<<endl;
15706 
15707   TH1F *hStrip=new TH1F("hStrip","Strips hit",100,-2,30);
15708   hStrip->GetXaxis()->SetTitle("Strip");
15709   hStrip->GetXaxis()->CenterTitle();
15710   hStrip->GetYaxis()->SetTitle("");
15711   hStrip->GetYaxis()->CenterTitle();
15712   hStrip->SetFillColor(0);
15713   hStrip->SetBit(TH1::kCanRebin);
15714 
15715   TH1F *hStripend=new TH1F("hStripend","Stripend hit",120,-2,10);
15716   hStripend->GetXaxis()->SetTitle("Stripend");
15717   hStripend->GetXaxis()->CenterTitle();
15718   hStripend->GetYaxis()->SetTitle("");
15719   hStripend->GetYaxis()->CenterTitle();
15720   hStripend->SetFillColor(0);
15721   hStripend->SetBit(TH1::kCanRebin);
15722 
15723   TH1F *hPlane=new TH1F("hPlane","Planes hit",200,-2,75);
15724   hPlane->GetXaxis()->SetTitle("Plane");
15725   hPlane->GetXaxis()->CenterTitle();
15726   hPlane->GetYaxis()->SetTitle("");
15727   hPlane->GetYaxis()->CenterTitle();
15728   hPlane->SetFillColor(0);
15729   hPlane->SetBit(TH1::kCanRebin);
15730 
15731   TH1F *hChargeSigLin=new TH1F("hChargeSigLin","ChargeSigLin",
15732                                1000,-2,15000);
15733   hChargeSigLin->GetXaxis()->SetTitle("ChargeSigLin");
15734   hChargeSigLin->GetXaxis()->CenterTitle();
15735   hChargeSigLin->GetYaxis()->SetTitle("");
15736   hChargeSigLin->GetYaxis()->CenterTitle();
15737   hChargeSigLin->SetFillColor(0);
15738   hChargeSigLin->SetBit(TH1::kCanRebin);
15739 
15740   TH1F *hChargePe=new TH1F("hChargePe","ChargePe",400,-2,400);
15741   hChargePe->GetXaxis()->SetTitle("ChargePe");
15742   hChargePe->GetXaxis()->CenterTitle();
15743   hChargePe->GetYaxis()->SetTitle("");
15744   hChargePe->GetYaxis()->CenterTitle();
15745   hChargePe->SetFillColor(0);
15746   hChargePe->SetBit(TH1::kCanRebin);
15747 
15748   TH1F *hGain=new TH1F("hGain","Gain",1000,-2,150);
15749   hGain->GetXaxis()->SetTitle("Gain");
15750   hGain->GetXaxis()->CenterTitle();
15751   hGain->GetYaxis()->SetTitle("");
15752   hGain->GetYaxis()->CenterTitle();
15753   hGain->SetFillColor(0);
15754   hGain->SetBit(TH1::kCanRebin);
15755 
15756   TH1F *hdzds=new TH1F("hdzds","dzds",400,-2,2);
15757   hdzds->GetXaxis()->SetTitle("dzds");
15758   hdzds->GetXaxis()->CenterTitle();
15759   hdzds->GetYaxis()->SetTitle("");
15760   hdzds->GetYaxis()->CenterTitle();
15761   hdzds->SetFillColor(0);
15762   hdzds->SetBit(TH1::kCanRebin);
15763 
15764   TH1F *hdsdz=new TH1F("hdsdz","dsdz",400,-2,10);
15765   hdsdz->GetXaxis()->SetTitle("dsdz");
15766   hdsdz->GetXaxis()->CenterTitle();
15767   hdsdz->GetYaxis()->SetTitle("");
15768   hdsdz->GetYaxis()->CenterTitle();
15769   hdsdz->SetFillColor(0);
15770   hdsdz->SetBit(TH1::kCanRebin);
15771 
15772   TH1F *hdydz=new TH1F("hdydz","dydz",400,-5,5);
15773   hdydz->GetXaxis()->SetTitle("dydz");
15774   hdydz->GetXaxis()->CenterTitle();
15775   hdydz->GetYaxis()->SetTitle("");
15776   hdydz->GetYaxis()->CenterTitle();
15777   hdydz->SetFillColor(0);
15778   hdydz->SetBit(TH1::kCanRebin);
15779 
15780   TH1F *hdxdz=new TH1F("hdxdz","dxdz",400,-10,10);
15781   hdxdz->GetXaxis()->SetTitle("dxdz");
15782   hdxdz->GetXaxis()->CenterTitle();
15783   hdxdz->GetYaxis()->SetTitle("");
15784   hdxdz->GetYaxis()->CenterTitle();
15785   hdxdz->SetFillColor(0);
15786   hdxdz->SetBit(TH1::kCanRebin);
15787 
15788   TH1F *hdyds=new TH1F("hdyds","dyds",400,-3,3);
15789   hdyds->GetXaxis()->SetTitle("dyds");
15790   hdyds->GetXaxis()->CenterTitle();
15791   hdyds->GetYaxis()->SetTitle("");
15792   hdyds->GetYaxis()->CenterTitle();
15793   hdyds->SetFillColor(0);
15794   hdyds->SetBit(TH1::kCanRebin);
15795 
15796   TH1F *hdxds=new TH1F("hdxds","dxds",400,-3,3);
15797   hdxds->GetXaxis()->SetTitle("dxds");
15798   hdxds->GetXaxis()->CenterTitle();
15799   hdxds->GetYaxis()->SetTitle("");
15800   hdxds->GetYaxis()->CenterTitle();
15801   hdxds->SetFillColor(0);
15802   hdxds->SetBit(TH1::kCanRebin);
15803 
15804   TH1F *hTransPos=new TH1F("hTransPos","TransPos",1000,-2,35);
15805   hTransPos->GetXaxis()->SetTitle("TransPos");
15806   hTransPos->GetXaxis()->CenterTitle();
15807   hTransPos->GetYaxis()->SetTitle("");
15808   hTransPos->GetYaxis()->CenterTitle();
15809   hTransPos->SetFillColor(0);
15810   hTransPos->SetBit(TH1::kCanRebin);
15811 
15812   TH1F *hYPos=new TH1F("hYPos","YPos",1000,-8,8);
15813   hYPos->GetXaxis()->SetTitle("YPos");
15814   hYPos->GetXaxis()->CenterTitle();
15815   hYPos->GetYaxis()->SetTitle("");
15816   hYPos->GetYaxis()->CenterTitle();
15817   hYPos->SetFillColor(0);
15818   hYPos->SetBit(TH1::kCanRebin);
15819 
15820   TH1F *hEvenResult=new TH1F("hEvenResult","EvenResult",100,-5,5);
15821   hEvenResult->GetXaxis()->SetTitle("EvenResult");
15822   hEvenResult->GetXaxis()->CenterTitle();
15823   hEvenResult->GetYaxis()->SetTitle("");
15824   hEvenResult->GetYaxis()->CenterTitle();
15825   hEvenResult->SetFillColor(0);
15826   hEvenResult->SetBit(TH1::kCanRebin);
15827 
15828   TH1F *hOddResult=new TH1F("hOddResult","OddResult",100,-5,5);
15829   hOddResult->GetXaxis()->SetTitle("OddResult");
15830   hOddResult->GetXaxis()->CenterTitle();
15831   hOddResult->GetYaxis()->SetTitle("");
15832   hOddResult->GetYaxis()->CenterTitle();
15833   hOddResult->SetFillColor(0);
15834   hOddResult->SetBit(TH1::kCanRebin);
15835 
15836   MSG("CDAnalysis",Msg::kInfo)<<"Starting main loop..."<<endl;
15837 
15841   
15842   this->InitialiseLoopVariables();  
15843   
15844   for(Int_t event=0;event<fEvents;event++){
15845     
15846     this->SetLoopVariables(event);
15847 
15848     hEvenResult->Fill(fTrackInfo->GetResult(0));
15849     hOddResult->Fill(fTrackInfo->GetResult(1));
15850 
15851     //if(fTrackInfo->GetResult(0)==1 && fTrackInfo->GetResult(1)==1 && 
15852     // fTrkHitInfo){
15853 
15854     //just need to change this bit to do tracked or untracked
15855     TClonesArray &c = *fUnTrkHitInfo;
15856     Int_t numUnTrkHits = fUnTrkHitInfo->GetEntries();
15857     Int_t hit = 0;
15858     
15859     while(hit<numUnTrkHits) {
15860       CDTrackedHitInfo *trackedHitInfo=(CDTrackedHitInfo*) c[hit];
15861 
15862       Int_t plane=trackedHitInfo->GetPlane();
15863       Int_t strip=trackedHitInfo->GetStrip();
15864       Int_t stripend=trackedHitInfo->GetEnd();
15865       
15866       hPlane->Fill(plane);
15867       hStrip->Fill(strip);
15868       hStripend->Fill(stripend);
15869       
15870       Float_t chargeSigLin=trackedHitInfo->GetCharge
15871         (CDTrackedHitInfo::kSigLin);
15872       Float_t chargePe=trackedHitInfo->GetCharge
15873         (CDTrackedHitInfo::kPe);
15874       Float_t gain =chargeSigLin/chargePe;
15875       
15876       hChargeSigLin->Fill(chargeSigLin);
15877       hChargePe->Fill(chargePe);
15878       hGain->Fill(gain);
15879       
15880       Float_t dzds = trackedHitInfo->GetDzDs();
15881       Float_t dsdz=-2;
15882       if (dzds!=0){
15883         dsdz = 1./dzds;
15884       }
15885       Float_t dydz = trackedHitInfo->GetDyDz();
15886       Float_t dxdz = trackedHitInfo->GetDxDz();
15887       Float_t dyds = trackedHitInfo->GetDyDz()*
15888         trackedHitInfo->GetDzDs();
15889       Float_t dxds = trackedHitInfo->GetDxDz()*
15890         trackedHitInfo->GetDzDs();
15891       Float_t TransPos = trackedHitInfo->GetTransPos();
15892       Float_t YPos = trackedHitInfo->GetYPos();
15893       
15894       hdzds->Fill(dzds);
15895       hdsdz->Fill(dsdz);
15896       hdydz->Fill(dydz);
15897       hdxdz->Fill(dxdz);
15898       hdyds->Fill(dyds);
15899       hdxds->Fill(dxds);
15900       hTransPos->Fill(TransPos);
15901       hYPos->Fill(YPos);
15902       
15903       hit++;
15904     }
15905   }//end of for                                       
15906   
15910 
15911   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
15912 
15913   TCanvas *cResults=new TCanvas("cResults","Results",0,0,1200,800);
15914   cResults->SetFillColor(0);
15915   cResults->Divide(2,2);
15916   cResults->cd(1);
15917   hEvenResult->Draw();
15918   cResults->cd(2);
15919   hOddResult->Draw();
15920 
15921   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
15922   cGeom->SetFillColor(0);
15923   cGeom->Divide(2,2);
15924   cGeom->cd(1);
15925   hPlane->Draw();
15926   cGeom->cd(2);
15927   hStrip->Draw();
15928   cGeom->cd(3);
15929   hStripend->Draw();
15930 
15931   TCanvas *cHits=new TCanvas("cHits","Hits",0,0,1200,800);
15932   cHits->SetFillColor(0);
15933   cHits->Divide(2,2);
15934   cHits->cd(1);
15935   hChargeSigLin->Draw();
15936   cHits->cd(2);
15937   hChargePe->Draw();
15938   cHits->cd(3);
15939   hGain->Draw();
15940 
15941  TCanvas *cAngles=new TCanvas("cAngles","Angles",0,0,1200,800);
15942   cAngles->SetFillColor(0);
15943   cAngles->Divide(3,2);
15944   cAngles->cd(1);
15945   hdzds->Draw();
15946   cAngles->cd(2);
15947   hdsdz->Draw();
15948   cAngles->cd(3);
15949   hdydz->Draw();
15950   cAngles->cd(4);
15951   hdxdz->Draw();
15952   cAngles->cd(5);
15953   hdyds->Draw();
15954   cAngles->cd(6);
15955   hdxds->Draw();
15956 
15957   TCanvas *cPos=new TCanvas("cPos","Pos",0,0,1200,800);
15958   cPos->SetFillColor(0);
15959   cPos->Divide(2,1);
15960   cPos->cd(1);
15961   hTransPos->Draw();
15962   cPos->cd(2);
15963   hYPos->Draw();
15964 
15965   MSG("CDAnalysis",Msg::kInfo) 
15966     <<" ** Finished ValidateUnTrkHits method **"<<endl;
15967 }

void CDAnalysis::ValidateXTalkHits  ) 
 

Definition at line 15971 of file CDAnalysis.cxx.

References fTrackInfo, fXTalkHits, CDXTalkHitInfo::GetCharge(), CDXTalkHitInfo::GetEnd(), CDXTalkHitInfo::GetNumxhits(), CDXTalkHitInfo::GetPixel(), CDXTalkHitInfo::GetPlane(), CDTrackInfo::GetResult(), CDXTalkHitInfo::GetSourceCharge(), CDXTalkHitInfo::GetSourceEnd(), CDXTalkHitInfo::GetSourcePixel(), CDXTalkHitInfo::GetSourcePlane(), CDXTalkHitInfo::GetSourceSpot(), CDXTalkHitInfo::GetSourceStrip(), CDXTalkHitInfo::GetStrip(), CDXTalkHitInfo::GetTime(), InitialiseLoopVariables(), MSG, and SetLoopVariables().

15972 {
15973   MSG("CDAnalysis",Msg::kInfo) 
15974     <<" ** Running ValidateXTalkHits method... **"<<endl;
15975 
15976   TH1F *hStrip=new TH1F("hStrip","Strips hit",100,-2,30);
15977   hStrip->GetXaxis()->SetTitle("Strip");
15978   hStrip->GetXaxis()->CenterTitle();
15979   hStrip->GetYaxis()->SetTitle("");
15980   hStrip->GetYaxis()->CenterTitle();
15981   hStrip->SetFillColor(0);
15982   hStrip->SetBit(TH1::kCanRebin);
15983 
15984   TH1F *hStripend=new TH1F("hStripend","Stripend hit",120,-2,10);
15985   hStripend->GetXaxis()->SetTitle("Stripend");
15986   hStripend->GetXaxis()->CenterTitle();
15987   hStripend->GetYaxis()->SetTitle("");
15988   hStripend->GetYaxis()->CenterTitle();
15989   hStripend->SetFillColor(0);
15990   hStripend->SetBit(TH1::kCanRebin);
15991 
15992   TH1F *hPlane=new TH1F("hPlane","Planes hit",200,-2,75);
15993   hPlane->GetXaxis()->SetTitle("Plane");
15994   hPlane->GetXaxis()->CenterTitle();
15995   hPlane->GetYaxis()->SetTitle("");
15996   hPlane->GetYaxis()->CenterTitle();
15997   hPlane->SetFillColor(0);
15998   hPlane->SetBit(TH1::kCanRebin);
15999 
16000   TH1F *hChargeSigLin=new TH1F("hChargeSigLin","ChargeSigLin",
16001                                1000,-2,15000);
16002   hChargeSigLin->GetXaxis()->SetTitle("ChargeSigLin");
16003   hChargeSigLin->GetXaxis()->CenterTitle();
16004   hChargeSigLin->GetYaxis()->SetTitle("");
16005   hChargeSigLin->GetYaxis()->CenterTitle();
16006   hChargeSigLin->SetFillColor(0);
16007   hChargeSigLin->SetBit(TH1::kCanRebin);
16008 
16009   TH1F *hChargePe=new TH1F("hChargePe","ChargePe",400,-2,400);
16010   hChargePe->GetXaxis()->SetTitle("ChargePe");
16011   hChargePe->GetXaxis()->CenterTitle();
16012   hChargePe->GetYaxis()->SetTitle("");
16013   hChargePe->GetYaxis()->CenterTitle();
16014   hChargePe->SetFillColor(0);
16015   hChargePe->SetBit(TH1::kCanRebin);
16016 
16017   TH1F *hGain=new TH1F("hGain","Gain",1000,-2,150);
16018   hGain->GetXaxis()->SetTitle("Gain");
16019   hGain->GetXaxis()->CenterTitle();
16020   hGain->GetYaxis()->SetTitle("");
16021   hGain->GetYaxis()->CenterTitle();
16022   hGain->SetFillColor(0);
16023   hGain->SetBit(TH1::kCanRebin);
16024 
16025   TH1F *hNumXTalkHits=new TH1F("hNumXTalkHits","NumXTalkHits",400,-2,2);
16026   hNumXTalkHits->GetXaxis()->SetTitle("NumXTalkHits");
16027   hNumXTalkHits->GetXaxis()->CenterTitle();
16028   hNumXTalkHits->GetYaxis()->SetTitle("");
16029   hNumXTalkHits->GetYaxis()->CenterTitle();
16030   hNumXTalkHits->SetFillColor(0);
16031   hNumXTalkHits->SetBit(TH1::kCanRebin);
16032 
16033   TH1F *hPixel=new TH1F("hPixel","Pixel",100,-2,20);
16034   hPixel->GetXaxis()->SetTitle("Pixel");
16035   hPixel->GetXaxis()->CenterTitle();
16036   hPixel->GetYaxis()->SetTitle("");
16037   hPixel->GetYaxis()->CenterTitle();
16038   hPixel->SetFillColor(0);
16039   hPixel->SetBit(TH1::kCanRebin);
16040 
16041   TH1F *hSourceEnd=new TH1F("hSourceEnd","SourceEnd",50,-2,5);
16042   hSourceEnd->GetXaxis()->SetTitle("SourceEnd");
16043   hSourceEnd->GetXaxis()->CenterTitle();
16044   hSourceEnd->GetYaxis()->SetTitle("");
16045   hSourceEnd->GetYaxis()->CenterTitle();
16046   hSourceEnd->SetFillColor(0);
16047   hSourceEnd->SetBit(TH1::kCanRebin);
16048 
16049   TH1F *hSourcePlane=new TH1F("hSourcePlane","SourcePlane",200,-2,75);
16050   hSourcePlane->GetXaxis()->SetTitle("SourcePlane");
16051   hSourcePlane->GetXaxis()->CenterTitle();
16052   hSourcePlane->GetYaxis()->SetTitle("");
16053   hSourcePlane->GetYaxis()->CenterTitle();
16054   hSourcePlane->SetFillColor(0);
16055   hSourcePlane->SetBit(TH1::kCanRebin);
16056 
16057   TH1F *hSourceStrip=new TH1F("hSourceStrip","SourceStrip",100,-2,30);
16058   hSourceStrip->GetXaxis()->SetTitle("SourceStrip");
16059   hSourceStrip->GetXaxis()->CenterTitle();
16060   //hSourceStrip->GetYaxis()->SetTitle("");
16061   hSourceStrip->GetYaxis()->CenterTitle();
16062   hSourceStrip->SetFillColor(0);
16063   hSourceStrip->SetBit(TH1::kCanRebin);
16064 
16065   TH1F *hSourcePixel=new TH1F("hSourcePixel","SourcePixel",100,-2,20);
16066   hSourcePixel->GetXaxis()->SetTitle("SourcePixel");
16067   hSourcePixel->GetXaxis()->CenterTitle();
16068   hSourcePixel->GetYaxis()->SetTitle("");
16069   hSourcePixel->GetYaxis()->CenterTitle();
16070   hSourcePixel->SetFillColor(0);
16071   hSourcePixel->SetBit(TH1::kCanRebin);
16072 
16073   TH1F *hSourceSpot=new TH1F("hSourceSpot","SourceSpot",400,-2,10);
16074   hSourceSpot->GetXaxis()->SetTitle("SourceSpot");
16075   hSourceSpot->GetXaxis()->CenterTitle();
16076   hSourceSpot->GetYaxis()->SetTitle("");
16077   hSourceSpot->GetYaxis()->CenterTitle();
16078   hSourceSpot->SetFillColor(0);
16079   hSourceSpot->SetBit(TH1::kCanRebin);
16080 
16081   TH1F *hSourceCharge=new TH1F("hSourceCharge","SourceCharge",
16082                                10000,-2,10000);
16083   hSourceCharge->GetXaxis()->SetTitle("SourceCharge");
16084   hSourceCharge->GetXaxis()->CenterTitle();
16085   hSourceCharge->GetYaxis()->SetTitle("");
16086   hSourceCharge->GetYaxis()->CenterTitle();
16087   hSourceCharge->SetFillColor(0);
16088   hSourceCharge->SetBit(TH1::kCanRebin);
16089 
16090   TH1F *hTime=new TH1F("hTime","Time",10000,-2,2);
16091   hTime->GetXaxis()->SetTitle("Time");
16092   hTime->GetXaxis()->CenterTitle();
16093   hTime->GetYaxis()->SetTitle("");
16094   hTime->GetYaxis()->CenterTitle();
16095   hTime->SetFillColor(0);
16096   hTime->SetBit(TH1::kCanRebin);
16097 
16098   TH1F *hEvenResult=new TH1F("hEvenResult","EvenResult",100,-5,5);
16099   hEvenResult->GetXaxis()->SetTitle("EvenResult");
16100   hEvenResult->GetXaxis()->CenterTitle();
16101   hEvenResult->GetYaxis()->SetTitle("");
16102   hEvenResult->GetYaxis()->CenterTitle();
16103   hEvenResult->SetFillColor(0);
16104   hEvenResult->SetBit(TH1::kCanRebin);
16105 
16106   TH1F *hOddResult=new TH1F("hOddResult","OddResult",100,-5,5);
16107   hOddResult->GetXaxis()->SetTitle("OddResult");
16108   hOddResult->GetXaxis()->CenterTitle();
16109   hOddResult->GetYaxis()->SetTitle("");
16110   hOddResult->GetYaxis()->CenterTitle();
16111   hOddResult->SetFillColor(0);
16112   hOddResult->SetBit(TH1::kCanRebin);
16113 
16114   TH2F *hPmtFace=new TH2F("hPmtFace","PmtFace",6,0,6,6,0,6);
16115   hPmtFace->GetXaxis()->SetTitle("");
16116   hPmtFace->GetXaxis()->CenterTitle();
16117   hPmtFace->GetYaxis()->SetTitle("");
16118   hPmtFace->GetYaxis()->CenterTitle();
16119   hPmtFace->SetFillColor(0);
16120   hPmtFace->SetBit(TH1::kCanRebin);
16121 
16122   TH2F *hSpotVsPix=new TH2F("hSpotVsPix","SpotVsPix",17,0,17,10,0,10);
16123   hSpotVsPix->GetXaxis()->SetTitle("Pixel");
16124   hSpotVsPix->GetXaxis()->CenterTitle();
16125   hSpotVsPix->GetYaxis()->SetTitle("Spot");
16126   hSpotVsPix->GetYaxis()->CenterTitle();
16127   hSpotVsPix->SetFillColor(0);
16128   hSpotVsPix->SetBit(TH1::kCanRebin);
16129 
16133   
16134   this->InitialiseLoopVariables();  
16135   
16136   for(Int_t event=0;event<fEvents;event++){
16137     
16138     this->SetLoopVariables(event);
16139 
16140     hEvenResult->Fill(fTrackInfo->GetResult(0));
16141     hOddResult->Fill(fTrackInfo->GetResult(1));
16142 
16143     //if(fTrackInfo->GetResult(0)==1 && fTrackInfo->GetResult(1)==1 && 
16144     // fTrkHitInfo){
16145 
16146         TClonesArray &c = *fXTalkHits;
16147         Int_t numHits=fXTalkHits->GetEntries();
16148         Int_t hit = 0;
16149         
16150         while(hit<numHits) {
16151           CDXTalkHitInfo *xTalkHits=(CDXTalkHitInfo*) c[hit];
16152           
16153           Int_t plane=xTalkHits->GetPlane();
16154           Int_t strip=xTalkHits->GetStrip();
16155           Int_t stripend=xTalkHits->GetEnd();
16156           Int_t pixel=xTalkHits->GetPixel();
16157           
16158           hPlane->Fill(plane);
16159           hStrip->Fill(strip);
16160           hStripend->Fill(stripend);
16161           hPixel->Fill(pixel);
16162 
16163           Float_t chargeSigLin=xTalkHits->GetCharge
16164             (CalDigitType::kSigLin);
16165           Float_t chargePe=xTalkHits->GetCharge(CalDigitType::kPE);
16166           Float_t gain=chargeSigLin/chargePe;
16167           Float_t sourceCharge=xTalkHits->GetSourceCharge();
16168 
16169           hChargeSigLin->Fill(chargeSigLin);
16170           hChargePe->Fill(chargePe);
16171           hGain->Fill(gain);
16172           hSourceCharge->Fill(sourceCharge);
16173 
16174           Int_t numXTalkHits=xTalkHits->GetNumxhits();
16175           Int_t sourceEnd=xTalkHits->GetSourceEnd();
16176           Int_t sourcePlane=xTalkHits->GetSourcePlane();
16177           Int_t sourceStrip=xTalkHits->GetSourceStrip();
16178           Int_t sourcePixel=xTalkHits->GetSourcePixel();
16179           Int_t sourceSpot=xTalkHits->GetSourceSpot();
16180           Double_t time=xTalkHits->GetTime();
16181 
16182           hNumXTalkHits->Fill(numXTalkHits);
16183           hSourceEnd->Fill(sourceEnd);
16184           hSourcePlane->Fill(sourcePlane);
16185           hSourceStrip->Fill(sourceStrip);
16186           hSourcePixel->Fill(sourcePixel);
16187           hSourceSpot->Fill(sourceSpot);
16188           hTime->Fill(time);
16189 
16190           Int_t x=((sourcePixel-1)%4)+1;
16191           Int_t y=((sourcePixel-1)/4)+1;
16192           hPmtFace->Fill(x,y);
16193 
16194           hSpotVsPix->Fill(sourcePixel,sourceSpot);
16195 
16196           hit++;
16197         }
16198   }//end of for                                       
16199   
16203 
16204   MSG("CDAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
16205 
16206   TCanvas *cResults=new TCanvas("cResults","Results",0,0,1200,800);
16207   cResults->SetFillColor(0);
16208   cResults->Divide(2,2);
16209   cResults->cd(1);
16210   hEvenResult->Draw();
16211   cResults->cd(2);
16212   hOddResult->Draw();
16213 
16214   TCanvas *cGeom=new TCanvas("cGeom","Geom",0,0,1200,800);
16215   cGeom->SetFillColor(0);
16216   cGeom->Divide(2,2);
16217   cGeom->cd(1);
16218   hPlane->Draw();
16219   cGeom->cd(2);
16220   hStrip->Draw();
16221   cGeom->cd(3);
16222   hStripend->Draw();
16223   cGeom->cd(4);
16224   hPixel->Draw();
16225 
16226   TCanvas *cHits=new TCanvas("cHits","Hits",0,0,1200,800);
16227   cHits->SetFillColor(0);
16228   cHits->Divide(2,2);
16229   cHits->cd(1);
16230   hChargeSigLin->Draw();
16231   cHits->cd(2);
16232   hChargePe->Draw();
16233   cHits->cd(3);
16234   hGain->Draw();
16235   cHits->cd(4);
16236   hSourceCharge->Draw();
16237 
16238   TCanvas *cSource=new TCanvas("cSource","Source",0,0,1200,800);
16239   cSource->SetFillColor(0);
16240   cSource->Divide(3,2);
16241   cSource->cd(1);
16242   hNumXTalkHits->Draw();
16243   cSource->cd(2);
16244   hSourceEnd->Draw();
16245   cSource->cd(3);
16246   hSourcePlane->Draw();
16247   cSource->cd(4);
16248   hSourceStrip->Draw();
16249   cSource->cd(5);
16250   hSourcePixel->Draw();
16251   cSource->cd(6);
16252   hSourceSpot->Draw();
16253 
16254   //turn off stats box
16255   gStyle->SetOptStat();
16256 
16257   TCanvas *cPmt=new TCanvas("cPmt","Pmt",0,0,1200,800);
16258   cPmt->SetFillColor(0);
16259   cPmt->Divide(2,1);
16260   cPmt->cd(1);
16261   hPmtFace->Draw("colz");
16262   cPmt->cd(2);
16263   hSpotVsPix->Draw("colz");
16264   
16265   MSG("CDAnalysis",Msg::kInfo) 
16266     <<" ** Finished ValidateXTalkHits method **"<<endl;
16267 }

void CDAnalysis::WriteOutHistos  )  const
 

Definition at line 275 of file CDAnalysis.cxx.

References fOutFile, fRunNumber, GetEvLenMinMax(), MSG, and RunNumber2RunPeriod().

00276 {
00277   //write out the histos to the file, if it's open
00278   if (fOutFile){
00279     if (fOutFile->IsWritable()){
00280       fOutFile->cd();
00281 
00282       //create a tree and set branches      
00283       TTree runInfo("runInfo","runInfo");
00284       //have to create local variables here
00285       //I think it's something to do with the fact that they are
00286       //read in on other trees in this class as well???
00287       //No, actually not because fSigCorsPerMip is not in a tree
00288       //don't understand this crazyness!
00289       Int_t lSimFlag=fSimFlag;
00290       runInfo.Branch("SimFlag",&lSimFlag,"SimFlag/I");
00291       Float_t lBeamMomentum=fBeamMomentum;
00292       runInfo.Branch("BeamMomentum",&lBeamMomentum,"BeamMomentum/F");
00293       Int_t lRunNumber=fRunNumber;
00294       runInfo.Branch("RunNumber",&lRunNumber,"RunNumber/I");
00295       Int_t lSubRun=fSubRun;
00296       runInfo.Branch("SubRun",&lSubRun,"SubRun/I");
00297       Int_t lRunPeriod=this->RunNumber2RunPeriod(fRunNumber);
00298       runInfo.Branch("RunPeriod",&lRunPeriod,"RunPeriod/I");
00299       Int_t lStartTime=fStartTime;
00300       runInfo.Branch("StartTime",&lStartTime,"StartTime/I");
00301       Int_t lEndTime=fEndTime;
00302       runInfo.Branch("EndTime",&lEndTime,"EndTime/I");
00303       Int_t lStartSnarl=fStartSnarl;
00304       runInfo.Branch("StartSnarl",&lStartSnarl,"StartSnarl/I");
00305       Int_t lEndSnarl=fEndSnarl;
00306       runInfo.Branch("EndSnarl",&lEndSnarl,"EndSnarl/I");
00307       Float_t lAvTemperature=fAvTemperature;
00308       runInfo.Branch("AvTemperature",&lAvTemperature,"AvTemperature/F");
00309 
00310       Float_t lSigCorsPerMip=fSigCorsPerMip;
00311       runInfo.Branch("SigCorsPerMip",&lSigCorsPerMip,"SigCorsPerMip/F");
00312       Float_t lScEnDepPerMEU=fScEnDepPerMEU;
00313       runInfo.Branch("ScEnDepPerMEU",&lScEnDepPerMEU,"ScEnDepPerMEU/F");
00314       Float_t lRatioScEnToBeamEn=fRatioScEnToBeamEn;
00315       runInfo.Branch("RatioScEnToBeamEn",&lRatioScEnToBeamEn,
00316                      "RatioScEnToBeamEn/F");
00317       Float_t lPeakLastPlane=fPeakLastPlane;
00318       runInfo.Branch("PeakLastPlane",&lPeakLastPlane,
00319                      "PeakLastPlane/F");
00320       Float_t lPeakPlaneSigCors=fPeakPlaneSigCors;
00321       runInfo.Branch("PeakPlaneSigCors",&lPeakPlaneSigCors,
00322                      "PeakPlaneSigCors/F");
00323       Float_t lSigCorVsDistM=fSigCorVsDistM;
00324       runInfo.Branch("SigCorVsDistM",&lSigCorVsDistM,
00325                      "SigCorVsDistM/F");
00326       Float_t lMeuVsEvLenCutM=fMeuVsEvLenCutM;
00327       runInfo.Branch("MeuVsEvLenCutM",&lMeuVsEvLenCutM,
00328                      "MeuVsEvLenCutM/F");
00329       Int_t lEvLenCutMin=-1;
00330       Int_t lEvLenCutMax=-1;
00331       this->GetEvLenMinMax(lEvLenCutMin,lEvLenCutMax);
00332       runInfo.Branch("EvLenCutMin",&lEvLenCutMin,"EvLenCutMin/I");
00333       runInfo.Branch("EvLenCutMax",&lEvLenCutMax,"EvLenCutMax/I");
00334 
00335       //pid counters
00336       Int_t lMyPiMuCounter=fMyPiMuCounter;
00337       runInfo.Branch("MyPiMuCounter",&lMyPiMuCounter,"MyPiMuCounter/I");
00338       Int_t lPidPiMuCounter=fPidPiMuCounter;
00339       runInfo.Branch("PidPiMuCounter",&lPidPiMuCounter,
00340                      "PidPiMuCounter/I");
00341       Int_t lMyElecCounter=fMyElecCounter;
00342       runInfo.Branch("MyElecCounter",&lMyElecCounter,"MyElecCounter/I");
00343       Int_t lPidElecCounter=fPidElecCounter;
00344       runInfo.Branch("PidElecCounter",&lPidElecCounter,
00345                      "PidElecCounter/I");
00346       Int_t lBothPiMuCounter=fBothPiMuCounter;
00347       runInfo.Branch("BothPiMuCounter",&lBothPiMuCounter,
00348                      "BothPiMuCounter/I");
00349       Int_t lBothElecCounter=fBothElecCounter;
00350       runInfo.Branch("BothElecCounter",&lBothElecCounter,
00351                      "BothElecCounter/I");
00352 
00353       //fill and write      
00354       runInfo.Fill();
00355       runInfo.Write();
00356 
00357       MSG("CDAnalysis",Msg::kInfo)
00358         <<"Writing histos to: "<<fOutFile->GetName()<<" ..."<<endl;
00359       fOutFile->Write();
00360       //fOutFile->Close();//this makes histos disappear from
00361       //the canvases for some strange reason!
00362     }
00363     else {
00364       MSG("CDAnalysis",Msg::kWarning)
00365         <<"File not writable!"<<endl;
00366     }
00367   }
00368 }


Member Data Documentation

Float_t CDAnalysis::fAvStrip [private]
 

Definition at line 240 of file CDAnalysis.h.

Referenced by CalcAvStripForPSMuonCut(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Float_t CDAnalysis::fAvStrip1 [private]
 

Definition at line 242 of file CDAnalysis.h.

Referenced by CalcAvStripForPSMuonCut(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Float_t CDAnalysis::fAvStrip2 [private]
 

Definition at line 244 of file CDAnalysis.h.

Referenced by CalcAvStripForPSMuonCut(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Float_t CDAnalysis::fAvTemperature [private]
 

Definition at line 334 of file CDAnalysis.h.

Referenced by StoppingMuonCalibration().

Float_t CDAnalysis::fBeamMomentum [private]
 

Definition at line 215 of file CDAnalysis.h.

Referenced by CutByHandOnEventLength(), CutOnEventLength(), CutOnNumPlanesHit(), GetEvLenMinMax(), and SetRootFileObjects().

Int_t CDAnalysis::fBothElecCounter [private]
 

Definition at line 332 of file CDAnalysis.h.

Referenced by PrintPIDStats().

Int_t CDAnalysis::fBothPiMuCounter [private]
 

Definition at line 331 of file CDAnalysis.h.

Referenced by PrintPIDStats().

Float_t CDAnalysis::fChargeAdc [private]
 

Definition at line 307 of file CDAnalysis.h.

Referenced by ElectronResponse(), InitialiseHitInfoVariables(), MuonNearFar(), MuonResponse(), MuonStVsPl(), PrintBasicInfo(), ReadInHitInfo(), StandardSanityChecks(), and StoppingMuonCalibration().

Float_t CDAnalysis::fChargeMip [private]
 

Definition at line 308 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), MuonScatter(), MuonStVsPl(), PrintBasicInfo(), and ReadInHitInfo().

Float_t CDAnalysis::fChargePe [private]
 

Definition at line 311 of file CDAnalysis.h.

Referenced by ElectronResponse(), InitialiseHitInfoVariables(), MuonNearFar(), MuonResponse(), PrintBasicInfo(), ReadInHitInfo(), StoppingMuonCalibration(), and ValidateMC().

Float_t CDAnalysis::fChargeSigCor [private]
 

Definition at line 309 of file CDAnalysis.h.

Referenced by ElectronResponse(), InitialiseHitInfoVariables(), MuonNearFar(), MuonResponse(), PrintBasicInfo(), ReadInHitInfo(), ReCalibrate(), StoppingMuonCalibration(), and ValidateMC().

Float_t CDAnalysis::fChargeSigLin [private]
 

Definition at line 310 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), PrintBasicInfo(), and ReadInHitInfo().

Bool_t CDAnalysis::fDoReCalibration [private]
 

Definition at line 337 of file CDAnalysis.h.

Referenced by ReCalibrate(), and StoppingMuonCalibration().

Bool_t CDAnalysis::fE1 [private]
 

Definition at line 303 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), and ReadInHitInfo().

Bool_t CDAnalysis::fE2 [private]
 

Definition at line 304 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), and ReadInHitInfo().

Int_t CDAnalysis::fEndSnarl [private]
 

Definition at line 220 of file CDAnalysis.h.

Referenced by SetRootFileObjects().

Int_t CDAnalysis::fEndTime [private]
 

Definition at line 222 of file CDAnalysis.h.

Referenced by SetRootFileObjects().

Int_t CDAnalysis::fEvents [private]
 

Definition at line 224 of file CDAnalysis.h.

Referenced by PrintEvent(), SetLoopVariables(), and SetRootFileObjects().

Bool_t CDAnalysis::fFafErr [private]
 

Definition at line 252 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fFirstPlane [private]
 

Definition at line 226 of file CDAnalysis.h.

Referenced by CalcFirstLastPlane(), CutOnTrackQuality(), InitialiseLoopVariables(), MuonResponse(), StoppingMuonCalibration(), and Template2().

Float_t CDAnalysis::fGain [private]
 

Definition at line 312 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), and ReadInHitInfo().

Bool_t CDAnalysis::fInCERTime [private]
 

Definition at line 285 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

UInt_t CDAnalysis::fInCERTimeBits [private]
 

Definition at line 288 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

string CDAnalysis::fInputFileName = "" [static, private]
 

Definition at line 56 of file CDAnalysis.cxx.

Referenced by InputFileName(), and MakeFileList().

Int_t CDAnalysis::fKovADC1 [private]
 

Definition at line 256 of file CDAnalysis.h.

Referenced by CutByHandOnPid(), CutByHandOnPidForElec(), ElectronResponse(), InitialisePidVariables(), SetLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fKovADC2 [private]
 

Definition at line 258 of file CDAnalysis.h.

Referenced by ElectronResponse(), InitialisePidVariables(), SetLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fKovADC3 [private]
 

Definition at line 260 of file CDAnalysis.h.

Referenced by CutByHandOnPid(), CutByHandOnPidForElec(), ElectronResponse(), InitialisePidVariables(), MuonResponse(), SetLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fKovTimeStamp1 [private]
 

Definition at line 257 of file CDAnalysis.h.

Referenced by ElectronResponse(), InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fKovTimeStamp2 [private]
 

Definition at line 259 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fKovTimeStamp3 [private]
 

Definition at line 261 of file CDAnalysis.h.

Referenced by ElectronResponse(), InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fLastPlane [private]
 

Definition at line 227 of file CDAnalysis.h.

Referenced by CalcFirstLastPlane(), CalcLastPlaneOnTrk(), CalcLastPlaneOnTrkNoXTalk(), CalcLastPlaneTruth(), CalcXYZ(), CutByHandOnEventLength(), CutOnEventLength(), CutOnNumPlanesHit(), GetEventLength(), InitialiseLoopVariables(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonStVsPl(), Template2(), and TruthEnDep().

Int_t CDAnalysis::fLastPlaneEven [private]
 

Definition at line 229 of file CDAnalysis.h.

Referenced by CalcFirstLastPlane(), InitialiseLoopVariables(), MuonNearFar(), MuonResponse(), and Template2().

Int_t CDAnalysis::fLastPlaneOdd [private]
 

Definition at line 228 of file CDAnalysis.h.

Referenced by CalcFirstLastPlane(), InitialiseLoopVariables(), MuonNearFar(), MuonResponse(), and Template2().

Float_t CDAnalysis::fLowScint_Tof [private]
 

Definition at line 247 of file CDAnalysis.h.

Referenced by CalcLowUpScint_TofDiff(), CutOnScint_TofDiff(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Double_t CDAnalysis::fMainParticleEnergy [private]
 

Definition at line 223 of file CDAnalysis.h.

Referenced by CutByHandOnEventLength(), and TruthEnDep().

Float_t CDAnalysis::fMeuVsEvLenCutM [private]
 

Definition at line 321 of file CDAnalysis.h.

Referenced by StoppingMuonCalibration().

Int_t CDAnalysis::fMyElecCounter [private]
 

Definition at line 329 of file CDAnalysis.h.

Referenced by PrintPIDStats().

Int_t CDAnalysis::fMyPiMuCounter [private]
 

Definition at line 327 of file CDAnalysis.h.

Referenced by PrintPIDStats().

Bool_t CDAnalysis::fNoOverlap [private]
 

Definition at line 284 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

UInt_t CDAnalysis::fNoOverlapBits [private]
 

Definition at line 287 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fNumDeadChips [private]
 

Definition at line 213 of file CDAnalysis.h.

Referenced by CutOnDeadChips(), and SetRootFileObjects().

Float_t CDAnalysis::fNumHitsPerPlane [private]
 

Definition at line 235 of file CDAnalysis.h.

Referenced by CutOnNumHitsPerPlane(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Float_t CDAnalysis::fNumHitsPerPlane25 [private]
 

Definition at line 236 of file CDAnalysis.h.

Referenced by InitialiseLoopVariables(), and StoppingMuonCalibration().

Float_t CDAnalysis::fNumHitsPerPlanePeCut10 [private]
 

Definition at line 237 of file CDAnalysis.h.

Referenced by CutOnNumHitsPerPlane10(), InitialiseLoopVariables(), and StoppingMuonCalibration().

std::map<Int_t,Int_t> CDAnalysis::fNumPlanesHit25 [private]
 

Definition at line 232 of file CDAnalysis.h.

Referenced by CalcNumPlanesHit(), InitialiseLoopVariables(), and StoppingMuonCalibration().

std::map<Int_t,Int_t> CDAnalysis::fNumPlanesHitAll [private]
 

Definition at line 231 of file CDAnalysis.h.

Referenced by CalcNumPlanesHit(), CutOnEventLengthForElec(), ElectronResponse(), GetEventLength(), InitialiseLoopVariables(), and StoppingMuonCalibration().

std::map<Int_t,Int_t> CDAnalysis::fNumPlanesHitPeCut [private]
 

Definition at line 233 of file CDAnalysis.h.

Referenced by CalcNumPlanesHit(), InitialiseLoopVariables(), and StoppingMuonCalibration().

std::map<Int_t,Int_t> CDAnalysis::fNumPlanesHitPeCut10 [private]
 

Definition at line 234 of file CDAnalysis.h.

Referenced by CalcNumPlanesHit(), InitialiseLoopVariables(), and StoppingMuonCalibration().

std::map<Int_t,Int_t> CDAnalysis::fNumPlanesHitTrk [private]
 

Definition at line 230 of file CDAnalysis.h.

Referenced by CalcNumPlanesHitTrk(), InitialiseLoopVariables(), and MuonStVsPl().

Bool_t CDAnalysis::fO1 [private]
 

Definition at line 301 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), and ReadInHitInfo().

Bool_t CDAnalysis::fO2 [private]
 

Definition at line 302 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), and ReadInHitInfo().

Float_t CDAnalysis::fOLChi2 [private]
 

Definition at line 289 of file CDAnalysis.h.

Referenced by CutOnOverlap(), CutOnOverlapForElec(), ElectronResponse(), InitialisePidVariables(), SetLoopVariables(), and StoppingMuonCalibration().

TChain* CDAnalysis::fOptTree [private]
 

Definition at line 202 of file CDAnalysis.h.

Referenced by MakeChain(), and SetRootFileObjects().

TFile* CDAnalysis::fOutFile [private]
 

Definition at line 200 of file CDAnalysis.h.

Referenced by CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonScatter(), StoppingMuonCalibration(), TruthEnDep(), TruthEventLength(), WriteOutHistos(), and ~CDAnalysis().

Float_t CDAnalysis::fPeakLastPlane [private]
 

Definition at line 323 of file CDAnalysis.h.

Referenced by StoppingMuonCalibration().

Float_t CDAnalysis::fPeakPlaneSigCors [private]
 

Definition at line 324 of file CDAnalysis.h.

Referenced by StoppingMuonCalibration().

Int_t CDAnalysis::fPidElecCounter [private]
 

Definition at line 330 of file CDAnalysis.h.

Referenced by PrintPIDStats().

CDPIDInfo* CDAnalysis::fPIDInfo [private]
 

Definition at line 204 of file CDAnalysis.h.

Referenced by CleanMuons(), PrintPIDStats(), SetLoopVariables(), SetRootFileObjects(), and ValidatePIDInfo().

Int_t CDAnalysis::fPidPiMuCounter [private]
 

Definition at line 328 of file CDAnalysis.h.

Referenced by PrintPIDStats().

UInt_t CDAnalysis::fPIDType [private]
 

Definition at line 286 of file CDAnalysis.h.

Referenced by CutOnPid(), CutOnPidForElec(), InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fPlane [private]
 

Definition at line 293 of file CDAnalysis.h.

Referenced by CalcLastPlaneOnTrk(), CutOnBadCalorimetry(), ElectronResponse(), InitialiseHitInfoVariables(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), PrintBasicInfo(), ReadInHitInfo(), StandardSanityChecks(), StoppingMuonCalibration(), Template2(), ValidateMC(), and ValidateReco().

Float_t CDAnalysis::fRatioScEnToBeamEn [private]
 

Definition at line 318 of file CDAnalysis.h.

Referenced by MuonCalorimetry(), MuonResponse(), and SetRatioScEnToBeamEn().

Int_t CDAnalysis::fResultEven [private]
 

Definition at line 295 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), ReadInHitInfo(), and StoppingMuonCalibration().

Int_t CDAnalysis::fResultOdd [private]
 

Definition at line 294 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), ReadInHitInfo(), and StoppingMuonCalibration().

Int_t CDAnalysis::fRunNumber [private]
 

Definition at line 217 of file CDAnalysis.h.

Referenced by CleanMuons(), CutByHandOnEventLength(), CutByHandOnPid(), CutByHandOnPidForElec(), CutOnBadPedestals(), ElectronResponse(), GetLowUpTimeCuts(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonScatter(), SetRootFileObjects(), SetSigCorPerMEU(), StoppingMuonCalibration(), TruthEnDep(), TruthEventLength(), and WriteOutHistos().

std::string CDAnalysis::fS [private]
 

Definition at line 336 of file CDAnalysis.h.

Referenced by BbVsGminos(), MuonScatter(), MuonStVsPl(), StoppingMuonCalibration(), TruthAnalysis(), TruthEnDep(), TruthEnDepFe(), and ValidateMC().

Float_t CDAnalysis::fScEnDepPerMEU [private]
 

Definition at line 317 of file CDAnalysis.h.

Referenced by MuonCalorimetry(), MuonResponse(), and SetScEnDepPerMEU().

Int_t CDAnalysis::fSec [private]
 

Definition at line 212 of file CDAnalysis.h.

Referenced by ReCalibrate(), SetRootFileObjects(), and StoppingMuonCalibration().

Float_t CDAnalysis::fSigCorPerMEU [private]
 

Definition at line 316 of file CDAnalysis.h.

Referenced by ElectronResponse(), MuonCalorimetry(), MuonResponse(), and SetSigCorPerMEU().

Float_t CDAnalysis::fSigCorsPerMip [private]
 

Definition at line 315 of file CDAnalysis.h.

Referenced by ReadInHitInfo().

Float_t CDAnalysis::fSigCorVsDistM [private]
 

Definition at line 322 of file CDAnalysis.h.

Referenced by StoppingMuonCalibration().

SimFlag::SimFlag_t CDAnalysis::fSimFlag [private]
 

Definition at line 216 of file CDAnalysis.h.

Referenced by CutByHandOnEventLength(), CutByHandOnPid(), CutByHandOnPidForElec(), CutOnBadCalorimetry(), CutOnBadPedestals(), CutOnOverlap(), CutOnOverlapForElec(), CutOnPid(), CutOnPidForElec(), GetLowUpTimeCuts(), ReCalibrate(), SetRootFileObjects(), SetSigCorPerMEU(), and StoppingMuonCalibration().

Int_t CDAnalysis::fSnarl [private]
 

Definition at line 211 of file CDAnalysis.h.

Referenced by SetRootFileObjects().

ULong_t CDAnalysis::fSnarlMaxTimeStamp [private]
 

Definition at line 265 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

ULong_t CDAnalysis::fSnarlMinTimeStamp [private]
 

Definition at line 264 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fSnarlTimeFrame [private]
 

Definition at line 263 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Bool_t CDAnalysis::fSparseErr [private]
 

Definition at line 253 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fStartSnarl [private]
 

Definition at line 219 of file CDAnalysis.h.

Referenced by SetRootFileObjects().

Int_t CDAnalysis::fStartTime [private]
 

Definition at line 221 of file CDAnalysis.h.

Referenced by SetRootFileObjects().

Float_t CDAnalysis::fStCount [private]
 

Definition at line 241 of file CDAnalysis.h.

Referenced by CalcAvStripForPSMuonCut(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Float_t CDAnalysis::fStCount1 [private]
 

Definition at line 243 of file CDAnalysis.h.

Referenced by CalcAvStripForPSMuonCut(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Float_t CDAnalysis::fStCount2 [private]
 

Definition at line 245 of file CDAnalysis.h.

Referenced by CalcAvStripForPSMuonCut(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fStrip [private]
 

Definition at line 296 of file CDAnalysis.h.

Referenced by CalcLastPlaneOnTrk(), ElectronResponse(), InitialiseHitInfoVariables(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), PrintBasicInfo(), ReadInHitInfo(), StandardSanityChecks(), StoppingMuonCalibration(), Template2(), ValidateMC(), and ValidateReco().

Int_t CDAnalysis::fStripend [private]
 

Definition at line 297 of file CDAnalysis.h.

Referenced by CalcAvStripForPSMuonCut(), CalcLastPlaneOnTrk(), ElectronResponse(), InitialiseHitInfoVariables(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), PrintBasicInfo(), ReadInHitInfo(), StandardSanityChecks(), StoppingMuonCalibration(), Template2(), and ValidateMC().

Int_t CDAnalysis::fStripsFromCentrePeCut [private]
 

Definition at line 238 of file CDAnalysis.h.

Referenced by CutOnFiducialVolume(), InitialiseLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fSubRun [private]
 

Definition at line 218 of file CDAnalysis.h.

Referenced by SetRootFileObjects().

Float_t CDAnalysis::fTemperature [private]
 

Definition at line 214 of file CDAnalysis.h.

Referenced by SetRootFileObjects(), and StoppingMuonCalibration().

Int_t CDAnalysis::fTickSinceLast [private]
 

Definition at line 281 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Double_t CDAnalysis::fTime [private]
 

Definition at line 292 of file CDAnalysis.h.

Referenced by CleanMuons(), ElectronResponse(), InitialiseHitInfoVariables(), ReadInHitInfo(), and StoppingMuonCalibration().

Int_t CDAnalysis::fTofADC0 [private]
 

Definition at line 270 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fTofADC1 [private]
 

Definition at line 272 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fTofADC2 [private]
 

Definition at line 274 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fTofADCTimeStamp0 [private]
 

Definition at line 276 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fTofADCTimeStamp1 [private]
 

Definition at line 277 of file CDAnalysis.h.

Referenced by CalcLowUpScint_TofDiff(), CutByHandOnPid(), CutByHandOnPidForElec(), ElectronResponse(), InitialisePidVariables(), SetLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fTofADCTimeStamp2 [private]
 

Definition at line 278 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fTofTDC0 [private]
 

Definition at line 267 of file CDAnalysis.h.

Referenced by CutByHandOnPid(), CutByHandOnPidForElec(), ElectronResponse(), InitialisePidVariables(), SetLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fTofTDC1 [private]
 

Definition at line 268 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fTofTDC2 [private]
 

Definition at line 269 of file CDAnalysis.h.

Referenced by CutByHandOnPid(), CutByHandOnPidForElec(), ElectronResponse(), InitialisePidVariables(), SetLoopVariables(), and StoppingMuonCalibration().

Int_t CDAnalysis::fTofTimeStamp [private]
 

Definition at line 279 of file CDAnalysis.h.

Referenced by InitialisePidVariables().

TChain* CDAnalysis::fTrackerTree [private]
 

Definition at line 201 of file CDAnalysis.h.

Referenced by GetGreatestMainParticleEnergy(), MakeChain(), PrintEvent(), SetLoopVariables(), and SetRootFileObjects().

CDTrackInfo* CDAnalysis::fTrackInfo [private]
 

Definition at line 205 of file CDAnalysis.h.

Referenced by CleanMuons(), ReadInHitInfo(), SetRootFileObjects(), ValidateTrkHits(), ValidateUnTrkHits(), and ValidateXTalkHits().

Float_t CDAnalysis::fTransPos [private]
 

Definition at line 298 of file CDAnalysis.h.

Referenced by InitialiseHitInfoVariables(), ReadInHitInfo(), and ValidateReco().

Bool_t CDAnalysis::fTriggerPMT [private]
 

Definition at line 251 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

Int_t CDAnalysis::fTrigSource [private]
 

Definition at line 254 of file CDAnalysis.h.

Referenced by InitialisePidVariables(), and SetLoopVariables().

TClonesArray* CDAnalysis::fTrkHitInfo [private]
 

Definition at line 206 of file CDAnalysis.h.

Referenced by CalcLastPlaneOnTrk(), CalcLastPlaneOnTrkNoXTalk(), CalcXYZ(), CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), MuonStVsPl(), PrintEvent(), SetRootFileObjects(), StoppingMuonCalibration(), StraightTrack_Radius(), Template2(), ValidateMC(), ValidateReco(), and ValidateTrkHits().

CDTrackerOptions* CDAnalysis::fTrkOpt [private]
 

Definition at line 203 of file CDAnalysis.h.

Referenced by SetRootFileObjects().

TClonesArray* CDAnalysis::fTruthHitInfo [private]
 

Definition at line 209 of file CDAnalysis.h.

Referenced by CalcLastPlaneTruth(), GetMainParticleEnergy(), IsDoubleEnded(), IsGenuineOrXTalk(), IsPlaneGenuine(), IsPlaneSideHit(), IsPlaneXTalkOnly(), IsSharedPmtHit(), IsStraightTrack(), IsStraightTrack_Radius(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), SetRootFileObjects(), TrueEnDep(), TrueEnDepNotSc(), TrueHighLowEn(), TrueMainPL(), TrueMuonHunter(), TrueNumDigiScintHits(), TrueXInStripFrame(), TruthAnalysis(), TruthEnDep(), TruthEnDepFe(), TruthEventLength(), ValidateMC(), and ValidateTruth().

TClonesArray* CDAnalysis::fUnTrkHitInfo [private]
 

Definition at line 207 of file CDAnalysis.h.

Referenced by CalcLastPlaneOnTrkNoXTalk(), CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), PrintEvent(), SetRootFileObjects(), StoppingMuonCalibration(), Template2(), ValidateMC(), and ValidateUnTrkHits().

Float_t CDAnalysis::fUpScint_Tof [private]
 

Definition at line 248 of file CDAnalysis.h.

Referenced by CalcLowUpScint_TofDiff(), CutOnScint_TofDiff(), InitialiseLoopVariables(), and StoppingMuonCalibration().

TClonesArray* CDAnalysis::fXTalkHits [private]
 

Definition at line 208 of file CDAnalysis.h.

Referenced by CalcLastPlaneOnTrkNoXTalk(), CleanMuons(), ElectronResponse(), MuonCalorimetry(), MuonNearFar(), MuonResponse(), MuonSampleCuts(), MuonScatter(), PrintEvent(), SetRootFileObjects(), StoppingMuonCalibration(), Template2(), ValidateMC(), and ValidateXTalkHits().


The documentation for this class was generated from the following files:
Generated on Mon Feb 15 11:08:57 2010 for loon by  doxygen 1.3.9.1