AltDeMuxCalc Class Reference

#include <AltDeMuxCalc.h>

List of all members.

Public Member Functions

 AltDeMuxCalc ()
 ~AltDeMuxCalc ()
void SetClearFibreC (Float_t c)
void SetWLSFibreC (Float_t c)
void SetScintillatorC (Float_t c)
void SetNumberOfStrips (Int_t n)
void SetFibreLengthE (Int_t iplane, PlexSEIdAltL *paltlist)
void SetFibreLengthW (Int_t iplane, PlexSEIdAltL *paltlist)
void SetUgli (UgliGeomHandle *p)
void SetPlane (Int_t iplane)
void SetView (PlaneView::PlaneView_t view)
void SetEast (PlexSEIdAltL *pListE, Int_t stripE)
void SetWest (PlexSEIdAltL *pListW, Int_t stripW)
void SetEastToStrip (PlexSEIdAltL *pListE, Int_t stripE)
void SetWestToStrip (PlexSEIdAltL *pListW, Int_t stripW)
void SetAbsTime (Double_t absTime)
Double_t GetAbsTime ()
void CalcEastWest ()
void CalcEast ()
void CalcWest ()
void CalcBestEastWest ()
void CalcBestEast ()
void CalcBestWest ()
void CalcDt ()
Int_t StripAim ()
Float_t CurrentQ (PlexSEIdAltL *pAltList)
Float_t AttCorWLS (Float_t lWlsInMetres)
Float_t AttCorClear (Float_t lClearInMetres)
Float_t SigmaDQ ()
Float_t QRawE ()
Float_t QRawW ()
Float_t QSigCorE ()
Float_t QSigCorW ()
Float_t QAttCorE ()
Float_t QAttCorW ()
Float_t PairQCor ()
Float_t GetClearE ()
Float_t GetClearW ()
Float_t GetWlsE ()
Float_t GetWlsW ()
Double_t GetTE ()
Double_t GetTW ()
Float_t DT ()
Float_t TimeWalk (float adc)
void FindNearestEdge (Float_t x, Float_t y, Int_t &iedge, Float_t &d)

Private Member Functions

 ClassDef (AltDeMuxCalc, 0)

Private Attributes

UgliGeomHandlepUgh
Int_t fPlane
PlaneView::PlaneView_t fView
PlexSEIdAltLpAltListE
PlexSEIdAltLpAltListW
Double_t fAbsTime
bool fEastIsSet
bool fWestIsSet
bool fDtIsSet
bool fDQIsSet
Int_t fStripE
Int_t fStripW
Float_t fQE
Float_t fQW
Float_t fQEc
Float_t fQWc
Float_t fQAttCorE
Float_t fQAttCorW
Float_t fClearE
Float_t fClearW
Float_t fWlsE
Float_t fWlsW
Double_t fTE
Double_t fTW
Double_t fDt
Float_t fDQ
Int_t fStripAim
Float_t fQEcor
Float_t fQWcor
Float_t fClearFibreC
Float_t fWLSFibreC
Float_t fScintillatorC
Float_t fDt2Dstrip
Int_t fNumberOfStrips
Float_t fWLSFibreLengthE [MAX_NUMBER_OF_PLANES][MAX_NUMBER_OF_STRIPS]
Float_t fWLSFibreLengthW [MAX_NUMBER_OF_PLANES][MAX_NUMBER_OF_STRIPS]
Float_t fClearFibreLengthE [MAX_NUMBER_OF_PLANES][MAX_NUMBER_OF_STRIPS]
Float_t fClearFibreLengthW [MAX_NUMBER_OF_PLANES][MAX_NUMBER_OF_STRIPS]
Float_t fAttCorWLS [2500]
Float_t fAttCorClear [2500]

Detailed Description

Definition at line 20 of file AltDeMuxCalc.h.


Constructor & Destructor Documentation

AltDeMuxCalc::AltDeMuxCalc (  ) 

Definition at line 22 of file AltDeMuxCalc.cxx.

References MAX_NUMBER_OF_PLANES, and MAX_NUMBER_OF_STRIPS.

00023 {
00024 
00025   for(Int_t ip=0;ip<MAX_NUMBER_OF_PLANES;ip++){
00026     for(Int_t is=0;is<MAX_NUMBER_OF_STRIPS;is++){
00027       fWLSFibreLengthE[ip][is] = -999.;
00028       fClearFibreLengthE[ip][is] = -999.;
00029       fWLSFibreLengthW[ip][is] = -999.;
00030       fClearFibreLengthW[ip][is] = -999.;
00031     }
00032   }
00033 
00034 
00035   // build the look up table for attenuation corrections
00036   // store in 1cm steps - to a maximum of 25m  
00037   for(Int_t iwls=0; iwls<2500;iwls++){
00038     Float_t lWls = static_cast<Float_t>(iwls);
00039     lWls = lWls/100.;
00040     fAttCorWLS[iwls] = 1.0/( 0.666*exp(-lWls/7.05)+ 0.333*exp(-(lWls)/1.05));
00041   }
00042   for(Int_t iclear=0; iclear<2500;iclear++){
00043     Float_t lClear = static_cast<Float_t>(iclear);
00044     lClear = lClear/100.;
00045     fAttCorClear[iclear] = exp(+(lClear)/10.);
00046   }
00047   return;
00048 }

AltDeMuxCalc::~AltDeMuxCalc (  ) 

Definition at line 51 of file AltDeMuxCalc.cxx.

00052 {
00053 
00054 }


Member Function Documentation

Float_t AltDeMuxCalc::AttCorClear ( Float_t  lClearInMetres  ) 

Definition at line 71 of file AltDeMuxCalc.cxx.

References fAttCorClear, Msg::kDebug, and MSG.

Referenced by SigmaDQ().

00072 { 
00073   
00074   Int_t iclear = static_cast<Int_t>(lclear*100.);
00075   if(iclear>=2500){
00076     MSG("AlgAltDeMux", Msg::kDebug) << "AltDeMuxCalc::AttClear requested correction for too long Clear fibre" << endl;
00077     iclear = 2500;
00078   }
00079 
00080   return fAttCorClear[iclear];
00081 }

Float_t AltDeMuxCalc::AttCorWLS ( Float_t  lWlsInMetres  ) 

Definition at line 58 of file AltDeMuxCalc.cxx.

References fAttCorWLS, Msg::kDebug, and MSG.

Referenced by SigmaDQ().

00059 { 
00060   
00061   Int_t iwls = static_cast<Int_t>(lwls*100.);
00062   if(iwls>=2500){
00063     MSG("AlgAltDeMux", Msg::kDebug) << "AltDeMuxCalc::AttWLS requested correction for too long WLS fibre" << endl;
00064     iwls = 2500;
00065   }
00066 
00067   return fAttCorWLS[iwls];
00068 }

void AltDeMuxCalc::CalcBestEast (  ) 

Definition at line 230 of file AltDeMuxCalc.cxx.

References fClearE, fClearFibreLengthE, fDQIsSet, fDtIsSet, fEastIsSet, fPlane, fQE, fQEc, fStripE, fTE, fWlsE, fWLSFibreLengthE, PlexSEIdAltL::GetBestItem(), PlexSEIdAltLItem::GetPE(), PlexSEIdAltLItem::GetSigCorr(), PlexSEIdAltLItem::GetSigLin(), PlexSEIdAltLItem::GetTime(), Msg::kDebug, MSG, pAltListE, and TimeWalk().

Referenced by CalcBestEastWest(), and AlgAltDeMuxBase::DeMuxSingleHitE().

00231 {
00232 
00233   if(fEastIsSet)return;
00234 
00235   fQE  = pAltListE->GetBestItem().GetPE();
00236   fQEc = pAltListE->GetBestItem().GetSigCorr()/60.;
00237   if(fQE/fQEc<0.1 || fQE/fQEc > 10.0){
00238     MSG("AltDeMux", Msg::kDebug) << "AltDeMuxCalc::CalcBestEast   Large/small SigCor/SigPE ratio : " <<fQEc/fQE << " for Plane : " << fPlane << endl;
00239     fQEc=fQE;
00240   }
00241 
00242   
00243   fClearE = fClearFibreLengthE[fPlane][fStripE]; 
00244   fWlsE   = fWLSFibreLengthE[fPlane][fStripE];  
00245 
00246   // timewalk correction based on adc - ok so I cheat and use SigLin
00247   // which is OK since corrections neg for high adc
00248   float adc   = pAltListE->GetBestItem().GetSigLin();
00249   fTE     = pAltListE->GetBestItem().GetTime()*1.0E9-this->TimeWalk(adc);
00250   fEastIsSet=true;
00251   fDtIsSet = false;
00252   fDQIsSet = false;
00253 
00254   return;
00255 }

void AltDeMuxCalc::CalcBestEastWest (  ) 

Definition at line 153 of file AltDeMuxCalc.cxx.

References CalcBestEast(), and CalcBestWest().

Referenced by AltDeMuxModule::Ana(), AlgAltDeMuxBase::DeMuxHits(), and AltDeMuxModule::SelectCleanMuons().

00154 {
00155   this->CalcBestEast();
00156   this->CalcBestWest();
00157   return;
00158 }

void AltDeMuxCalc::CalcBestWest (  ) 

Definition at line 257 of file AltDeMuxCalc.cxx.

References fClearFibreLengthW, fClearW, fDQIsSet, fDtIsSet, fPlane, fQW, fQWc, fStripW, fTW, fWestIsSet, fWLSFibreLengthW, fWlsW, PlexSEIdAltL::GetBestItem(), PlexSEIdAltLItem::GetPE(), PlexSEIdAltLItem::GetSigCorr(), PlexSEIdAltLItem::GetSigLin(), PlexSEIdAltLItem::GetTime(), Msg::kDebug, MSG, pAltListW, and TimeWalk().

Referenced by CalcBestEastWest(), and AlgAltDeMuxBase::DeMuxSingleHitW().

00258 {
00259 
00260   if(fWestIsSet)return;
00261 
00262   fQW  = pAltListW->GetBestItem().GetPE();
00263   fQWc = pAltListW->GetBestItem().GetSigCorr()/60.;
00264   if(fQW/fQWc<0.1 || fQW/fQWc > 10.0){
00265     MSG("AltDeMux", Msg::kDebug) << "AltDeMuxCalc::CalcBestWest   Large/small SigCor/SigPE ratio : " <<fQWc/fQW << " for Plane : " << fPlane << endl;
00266     fQWc=fQW;
00267   }
00268 
00269   fClearW = fClearFibreLengthW[fPlane][fStripW]; 
00270   fWlsW   = fWLSFibreLengthW[fPlane][fStripW];  
00271 
00272   float adc = pAltListW->GetBestItem().GetSigLin();
00273   fTW       = pAltListW->GetBestItem().GetTime()*1.0E9- this->TimeWalk(adc);
00274 
00275   fWestIsSet=true;
00276   fDtIsSet = false;
00277   fDQIsSet = false;
00278 
00279   return;
00280 }

void AltDeMuxCalc::CalcDt (  ) 

Definition at line 284 of file AltDeMuxCalc.cxx.

References CalcEast(), CalcWest(), fClearE, fClearFibreC, fClearW, fDt, fDtIsSet, fEastIsSet, fTE, fTW, fWestIsSet, fWlsE, fWLSFibreC, and fWlsW.

Referenced by AltDeMuxModule::SelectCleanMuons(), SigmaDQ(), and StripAim().

00285 {
00286 
00287   if(!fEastIsSet)this->CalcEast();
00288   if(!fWestIsSet)this->CalcWest();
00289   fDt = (fTW -fTE)-(fClearW-fClearE)/fClearFibreC-(fWlsW-fWlsE)/fWLSFibreC;
00290   fDtIsSet = true;
00291 
00292   return;
00293  
00294 }

void AltDeMuxCalc::CalcEast (  ) 

Definition at line 173 of file AltDeMuxCalc.cxx.

References fClearE, fClearFibreLengthE, fDQIsSet, fDtIsSet, fEastIsSet, fPlane, fQE, fQEc, fStripE, fTE, fWlsE, fWLSFibreLengthE, PlexSEIdAltL::GetCurrentItem(), PlexSEIdAltLItem::GetPE(), PlexSEIdAltLItem::GetSigCorr(), PlexSEIdAltLItem::GetSigLin(), PlexSEIdAltLItem::GetTime(), Msg::kDebug, MSG, pAltListE, and TimeWalk().

Referenced by CalcDt(), and CalcEastWest().

00174 {
00175 
00176   if(fEastIsSet)return;
00177 
00178   fQE  = pAltListE->GetCurrentItem().GetPE();
00179   fQEc = pAltListE->GetCurrentItem().GetSigCorr()/60.;
00180   if(fQE/fQEc<0.1 || fQE/fQEc > 10.0){
00181     MSG("AltDeMux", Msg::kDebug) << "AltDeMuxCalc::CalcEast   Large/small SigCor/SigPE ratio : " <<fQEc/fQE << " for Plane : " << fPlane << endl;
00182     fQEc=fQE;
00183   }
00184   
00185   fClearE = fClearFibreLengthE[fPlane][fStripE]; 
00186   fWlsE   = fWLSFibreLengthE[fPlane][fStripE];  
00187 
00188   // timewalk correction based on adc - ok so I cheat and use SigLin
00189   // which is OK since corrections neg for high adc
00190   float adc  = pAltListE->GetCurrentItem().GetSigLin();
00191   fTE     = pAltListE->GetCurrentItem().GetTime()*1.0E9 - this->TimeWalk(adc);
00192 
00193   fEastIsSet=true;
00194   fDtIsSet = false;
00195   fDQIsSet = false;
00196 
00197   return;
00198 }

void AltDeMuxCalc::CalcEastWest (  ) 

Definition at line 145 of file AltDeMuxCalc.cxx.

References CalcEast(), and CalcWest().

Referenced by AlgAltDeMuxBase::MakePlaneMap(), AlgAltDeMuxBase::MakeTimingMask(), and AlgAltDeMuxBase::ReMakeTimingMask().

00146 {
00147   this->CalcEast();
00148   this->CalcWest();
00149 
00150   return;
00151 }

void AltDeMuxCalc::CalcWest (  ) 

Definition at line 201 of file AltDeMuxCalc.cxx.

References fClearFibreLengthW, fClearW, fDQIsSet, fDtIsSet, fPlane, fQW, fQWc, fStripW, fTW, fWestIsSet, fWLSFibreLengthW, fWlsW, PlexSEIdAltL::GetCurrentItem(), PlexSEIdAltLItem::GetPE(), PlexSEIdAltLItem::GetSigCorr(), PlexSEIdAltLItem::GetSigLin(), PlexSEIdAltLItem::GetTime(), Msg::kDebug, MSG, pAltListW, and TimeWalk().

Referenced by CalcDt(), and CalcEastWest().

00202 {
00203 
00204   if(fWestIsSet)return;
00205 
00206   fQW  = pAltListW->GetCurrentItem().GetPE();
00207   fQWc = pAltListW->GetCurrentItem().GetSigCorr()/60.;
00208   if(fQW/fQWc<0.1 || fQW/fQWc > 10.0){
00209 
00210     MSG("AltDeMux", Msg::kDebug) << "AltDeMuxCalc::CalcWest Large/small SigCor/SigPE ratio : " <<fQWc/fQW << " for Plane : " << fPlane << endl;
00211     fQWc=fQW;
00212   }
00213    
00214   fClearW = fClearFibreLengthW[fPlane][fStripW]; 
00215   fWlsW   = fWLSFibreLengthW[fPlane][fStripW];  
00216 
00217   // timewalk correction based on adc - ok so I cheat and use SigLin
00218   // which is OK since corrections neg for high adc
00219   float adc  = pAltListW->GetCurrentItem().GetSigLin();
00220   fTW        = pAltListW->GetCurrentItem().GetTime()*1.0E9 - this->TimeWalk(adc);
00221 
00222   fWestIsSet=true;
00223   fDtIsSet = false;
00224   fDQIsSet = false;
00225 
00226   return;
00227 }

AltDeMuxCalc::ClassDef ( AltDeMuxCalc  ,
 
) [private]
Float_t AltDeMuxCalc::CurrentQ ( PlexSEIdAltL pAltList  ) 

Definition at line 161 of file AltDeMuxCalc.cxx.

References PlexSEIdAltL::GetCurrentItem(), PlexSEIdAltLItem::GetPE(), and PlexSEIdAltLItem::GetSigCorr().

00162 {
00163 
00164   Float_t Q  = pAltList->GetCurrentItem().GetPE();
00165   Float_t Qc = pAltList->GetCurrentItem().GetSigCorr()/60.;
00166   if(Q/Qc<0.1 || Q/Qc > 10.0){
00167     Qc=Q;
00168   }
00169   
00170   return Qc;
00171 }

Float_t AltDeMuxCalc::DT (  )  [inline]

Definition at line 66 of file AltDeMuxCalc.h.

References fDt.

Referenced by AltDeMuxModule::SelectCleanMuons().

00066 {return fDt;}

void AltDeMuxCalc::FindNearestEdge ( Float_t  x,
Float_t  y,
Int_t &  iedge,
Float_t &  d 
)

Definition at line 390 of file AltDeMuxCalc.cxx.

Referenced by AlgAltDeMuxBase::EventID().

00391 {
00392   
00393   Float_t d1 = fabs(x);
00394   Float_t d2 = fabs(y);
00395   Float_t d3 = 0.70711*fabs(x-y);
00396   Float_t d4 = 0.70711*fabs(x+y);
00397 
00398   if(d1>d2){
00399     if(d3>d4){
00400       if(d1>d3){
00401         d = 4.0-d1;
00402         if(x>0)iedge=3;
00403         if(x<=0)iedge=7;
00404       }else{
00405         d = 4.0-d3;
00406         if(x-y>0)iedge=4;
00407         if(x-y<=0)iedge=8;
00408       }
00409     }else{
00410       if(d1>d4){
00411         d = 4.0-d1;
00412         if(x>0)iedge=3;
00413         if(x<=0)iedge=7;
00414       }else{
00415         d = 4.0-d4;
00416         if(x+y>0)iedge=2;
00417         if(x+y<=0)iedge=6;
00418       }
00419     }
00420   }else{
00421     if(d3>d4){
00422       if(d2>d3){
00423         d = 4.0-d2;
00424         if(y>0)iedge=1;
00425         if(y<=0)iedge=5;
00426 
00427       }else{
00428         d = 4.0-d3;
00429         if(x-y>0)iedge=4;
00430         if(x-y<=0)iedge=8;
00431       }
00432     }else{
00433       if(d2>d4){
00434         d = 4.0-d2;
00435         if(y>0)iedge=1;
00436         if(y<=0)iedge=5;
00437       }else{
00438         d = 4.0-d4;
00439         if(x+y>0)iedge=2;
00440         if(x+y<=0)iedge=6;
00441       }
00442     }
00443   }
00444 
00445   return;
00446 } 

Double_t AltDeMuxCalc::GetAbsTime (  )  [inline]

Definition at line 40 of file AltDeMuxCalc.h.

References fAbsTime.

Referenced by AlgAltDeMuxBase::IsXTalk().

00040 {return fAbsTime;};

Float_t AltDeMuxCalc::GetClearE (  )  [inline]

Definition at line 60 of file AltDeMuxCalc.h.

References fClearE.

Referenced by AltDeMuxModule::SelectCleanMuons().

00060 {return fClearE;}

Float_t AltDeMuxCalc::GetClearW (  )  [inline]

Definition at line 61 of file AltDeMuxCalc.h.

References fClearW.

Referenced by AltDeMuxModule::SelectCleanMuons().

00061 {return fClearW;}

Double_t AltDeMuxCalc::GetTE (  )  [inline]

Definition at line 64 of file AltDeMuxCalc.h.

References fTE.

Referenced by AltDeMuxModule::SelectCleanMuons().

00064 {return fTE;}

Double_t AltDeMuxCalc::GetTW (  )  [inline]

Definition at line 65 of file AltDeMuxCalc.h.

References fTW.

Referenced by AltDeMuxModule::SelectCleanMuons().

00065 {return fTW;}

Float_t AltDeMuxCalc::GetWlsE (  )  [inline]

Definition at line 62 of file AltDeMuxCalc.h.

References fWlsE.

Referenced by AltDeMuxModule::SelectCleanMuons().

00062 {return fWlsE;}

Float_t AltDeMuxCalc::GetWlsW (  )  [inline]

Definition at line 63 of file AltDeMuxCalc.h.

References fWlsW.

Referenced by AltDeMuxModule::SelectCleanMuons().

00063 {return fWlsW;}

Float_t AltDeMuxCalc::PairQCor (  )  [inline]

Definition at line 59 of file AltDeMuxCalc.h.

References fQEc, and fQWc.

Referenced by AltDeMuxModule::Ana(), and AlgAltDeMuxBase::DeMuxHits().

00059 {return fQWc+fQEc;}

Float_t AltDeMuxCalc::QAttCorE (  )  [inline]

Definition at line 57 of file AltDeMuxCalc.h.

References fQAttCorE.

Referenced by AlgAltDeMuxBase::MakePlaneMap().

00057 {return fQAttCorE;};

Float_t AltDeMuxCalc::QAttCorW (  )  [inline]

Definition at line 58 of file AltDeMuxCalc.h.

References fQAttCorW.

Referenced by AlgAltDeMuxBase::MakePlaneMap().

00058 {return fQAttCorW;};

Float_t AltDeMuxCalc::QRawE (  )  [inline]

Definition at line 53 of file AltDeMuxCalc.h.

References fQE.

Referenced by AlgAltDeMuxBase::MakePlaneMap().

00053 {return fQE;};

Float_t AltDeMuxCalc::QRawW (  )  [inline]

Definition at line 54 of file AltDeMuxCalc.h.

References fQW.

Referenced by AlgAltDeMuxBase::MakePlaneMap().

00054 {return fQW;};

Float_t AltDeMuxCalc::QSigCorE (  )  [inline]

Definition at line 55 of file AltDeMuxCalc.h.

References fQEc.

Referenced by AlgAltDeMuxBase::DeMuxHits(), AlgAltDeMuxBase::DeMuxSingleHitE(), and AlgAltDeMuxBase::MakePlaneMap().

00055 {return fQEc;};

Float_t AltDeMuxCalc::QSigCorW (  )  [inline]

Definition at line 56 of file AltDeMuxCalc.h.

References fQWc.

Referenced by AlgAltDeMuxBase::DeMuxHits(), AlgAltDeMuxBase::DeMuxSingleHitW(), and AlgAltDeMuxBase::MakePlaneMap().

00056 {return fQWc;};

void AltDeMuxCalc::SetAbsTime ( Double_t  absTime  )  [inline]

Definition at line 39 of file AltDeMuxCalc.h.

References fAbsTime.

Referenced by AlgAltDeMuxBase::MakeAltListMap().

00039 {fAbsTime = absTime;};

void AltDeMuxCalc::SetClearFibreC ( Float_t  c  )  [inline]

Definition at line 26 of file AltDeMuxCalc.h.

References fClearFibreC.

Referenced by AlgAltDeMuxBase::SetConstants().

00026 {fClearFibreC=c;};

void AltDeMuxCalc::SetEast ( PlexSEIdAltL pListE,
Int_t  stripE 
)
void AltDeMuxCalc::SetEastToStrip ( PlexSEIdAltL pListE,
Int_t  stripE 
)

Definition at line 125 of file AltDeMuxCalc.cxx.

References fEastIsSet, fStripE, PlexSEIdAltL::GetCurrentSEId(), PlexStripEndId::GetStrip(), PlexSEIdAltL::IsValid(), Msg::kError, MSG, PlexSEIdAltL::Next(), pAltListE, and PlexSEIdAltL::SetFirst().

00126 { 
00127   bool notFound = true;
00128   pE->SetFirst();
00129   while( pE->IsValid() && notFound ){
00130     Int_t is = pE->GetCurrentSEId().GetStrip();
00131     if(is==stripE)notFound=false;
00132     if(notFound)pE->Next();
00133   }
00134 
00135   if(notFound)MSG("AltDeMux", Msg::kError) << "AltDeMuxCalc::SetEastToStrip Could not find strip " << stripE << " in PlexSEIdAltL " << endl;
00136   
00137   pAltListE = pE;
00138   fStripE = stripE;
00139   fEastIsSet = false;
00140 
00141   return;
00142 }

void AltDeMuxCalc::SetFibreLengthE ( Int_t  iplane,
PlexSEIdAltL paltlist 
)

Definition at line 353 of file AltDeMuxCalc.cxx.

References UgliStripHandle::ClearFiber(), fClearFibreLengthE, fWLSFibreLengthE, PlexSEIdAltL::GetCurrentSEId(), PlexStripEndId::GetStrip(), UgliGeomHandle::GetStripHandle(), UgliStripHandle::IsValid(), StripEnd::kEast, Msg::kFatal, MSG, pUgh, and UgliStripHandle::WlsPigtail().

Referenced by AltDeMuxModule::GetFibreLengths(), and AlgAltDeMuxBase::GetFibreLengths().

00354 {
00355 
00356   Int_t istrip = paltlist->GetCurrentSEId().GetStrip();
00357   if(fClearFibreLengthE[iplane][istrip]>0)return;
00358 
00359   UgliStripHandle  ush = pUgh->GetStripHandle(paltlist->GetCurrentSEId());
00360   if(ush.IsValid()){
00361     fClearFibreLengthE[iplane][istrip] = ush.ClearFiber(StripEnd::kEast);
00362     fWLSFibreLengthE[iplane][istrip]   = ush.WlsPigtail(StripEnd::kEast);
00363   }else{
00364     MSG("AltDeMux", Msg::kFatal) << "AltDeMuxCalc::SetFibreLengthE => UgliStripHandle NOT VALID : plane " << iplane << ":" << istrip << " (Carry on regardless)" <<  endl;
00365   }
00366   
00367   return;
00368 
00369 }

void AltDeMuxCalc::SetFibreLengthW ( Int_t  iplane,
PlexSEIdAltL paltlist 
)

Definition at line 371 of file AltDeMuxCalc.cxx.

References UgliStripHandle::ClearFiber(), fClearFibreLengthW, fWLSFibreLengthW, PlexSEIdAltL::GetCurrentSEId(), PlexStripEndId::GetStrip(), UgliGeomHandle::GetStripHandle(), UgliStripHandle::IsValid(), Msg::kFatal, StripEnd::kWest, MSG, pUgh, and UgliStripHandle::WlsPigtail().

Referenced by AltDeMuxModule::GetFibreLengths(), and AlgAltDeMuxBase::GetFibreLengths().

00372 {
00373 
00374   Int_t istrip = paltlist->GetCurrentSEId().GetStrip();
00375   if(fWLSFibreLengthW[iplane][istrip]>0)return;
00376 
00377   UgliStripHandle ush = pUgh->GetStripHandle(paltlist->GetCurrentSEId());
00378   if(ush.IsValid()){
00379     fClearFibreLengthW[iplane][istrip] = ush.ClearFiber(StripEnd::kWest);
00380     fWLSFibreLengthW[iplane][istrip]   = ush.WlsPigtail(StripEnd::kWest);
00381   }else{
00382     MSG("AltDeMux", Msg::kFatal) << "AltDeMuxCalc::SetFibreLengthW => UgliStripHandle NOT VALID : plane " << iplane << ":" << istrip << " (Carry on regardless)" <<  endl;
00383   }
00384   return;
00385 
00386 }

void AltDeMuxCalc::SetNumberOfStrips ( Int_t  n  )  [inline]

Definition at line 29 of file AltDeMuxCalc.h.

References fNumberOfStrips.

Referenced by AlgAltDeMuxBase::SetConstants().

00029 {fNumberOfStrips=n;};

void AltDeMuxCalc::SetPlane ( Int_t  iplane  )  [inline]
void AltDeMuxCalc::SetScintillatorC ( Float_t  c  )  [inline]

Definition at line 28 of file AltDeMuxCalc.h.

References fDt2Dstrip, and fScintillatorC.

Referenced by AlgAltDeMuxBase::SetConstants().

void AltDeMuxCalc::SetUgli ( UgliGeomHandle p  )  [inline]

Definition at line 32 of file AltDeMuxCalc.h.

References pUgh.

Referenced by AltDeMuxModule::Ana(), and AlgAltDeMuxBase::SetConstants().

00032 {pUgh=p;};

void AltDeMuxCalc::SetView ( PlaneView::PlaneView_t  view  )  [inline]
void AltDeMuxCalc::SetWest ( PlexSEIdAltL pListW,
Int_t  stripW 
)
void AltDeMuxCalc::SetWestToStrip ( PlexSEIdAltL pListW,
Int_t  stripW 
)

Definition at line 105 of file AltDeMuxCalc.cxx.

References fStripW, fWestIsSet, PlexSEIdAltL::GetCurrentSEId(), PlexStripEndId::GetStrip(), PlexSEIdAltL::IsValid(), Msg::kError, MSG, PlexSEIdAltL::Next(), pAltListW, and PlexSEIdAltL::SetFirst().

00106 { 
00107 
00108   bool notFound = true;
00109   pW->SetFirst();
00110   while( pW->IsValid() && notFound ){
00111     Int_t is = pW->GetCurrentSEId().GetStrip();
00112     if(is==stripW)notFound=false;
00113     if(notFound)pW->Next();
00114   }
00115 
00116   if(notFound)MSG("AltDeMux", Msg::kError) << "AltDeMuxCalc::SetWestToStrip Could not find strip " << stripW << " in PlexSEIdAltL " << endl;
00117   
00118   pAltListW = pW;
00119   fStripW = stripW;
00120   fWestIsSet = false;
00121 
00122   return;
00123 }

void AltDeMuxCalc::SetWLSFibreC ( Float_t  c  )  [inline]

Definition at line 27 of file AltDeMuxCalc.h.

References fWLSFibreC.

Referenced by AlgAltDeMuxBase::SetConstants().

00027 {fWLSFibreC=c;};

Float_t AltDeMuxCalc::SigmaDQ (  ) 

Definition at line 317 of file AltDeMuxCalc.cxx.

References AttCorClear(), AttCorWLS(), CalcDt(), fClearE, fClearW, fDQ, fDQIsSet, fDt, fDtIsSet, fQAttCorE, fQAttCorW, fQEc, fQWc, fWlsE, and fWlsW.

Referenced by AltDeMuxModule::Ana(), AlgAltDeMuxBase::MakePlaneMap(), AlgAltDeMuxBase::MakeTimingMask(), and AlgAltDeMuxBase::ReMakeTimingMask().

00318 { 
00319 
00320   if(!fDtIsSet)this->CalcDt();
00321   if(fDQIsSet)return fDQ;
00322   Float_t le = 4.0-0.0823*fDt;
00323   Float_t lw = 4.0+0.0823*fDt;
00324   if(lw>8.0)lw = 8.0;
00325   if(le>8.0)le = 8.0;
00326   if(lw<0.0)lw = 0.0;
00327   if(le<0.0)le = 0.0;
00328   //Float_t ae = exp(+(fClearE)/10.)/( 0.666*exp(-(le+fWlsE)/7.05)+ 0.333*exp(-(le+fWlsE)/1.05));
00329   //Float_t aw = exp(+(fClearW)/10.)/( 0.666*exp(-(lw+fWlsW)/7.05)+ 0.333*exp(-(lw+fWlsW)/1.05));
00330 
00331   Float_t ae = this->AttCorWLS(le+fWlsE)*this->AttCorClear(fClearE);
00332   Float_t aw = this->AttCorWLS(lw+fWlsW)*this->AttCorClear(fClearW);
00333   Float_t ae2 = ae*ae;
00334   Float_t aw2 = aw*aw;
00335   fQAttCorE = ae*fQEc;
00336   fQAttCorW = aw*fQWc;
00337 
00338   Float_t sl1 = 0.5/6.6*(fQEc*this->AttCorWLS(le)+fQWc*this->AttCorWLS(lw));
00339   Float_t d1  = fQAttCorE - fQAttCorW;
00340   Float_t sd1 = sqrt(fQEc*ae2 + fQWc*aw2 + sl1*sl1 + fQEc*fQEc*ae2/50. + fQWc*fQWc*aw2/50.);
00341   sd1 = d1/sd1;
00342   fDQ = sd1;
00343   fDQIsSet = true;
00344   return sd1;
00345 
00346 }

Int_t AltDeMuxCalc::StripAim (  ) 

Definition at line 296 of file AltDeMuxCalc.cxx.

References CalcDt(), fDt, fDt2Dstrip, fDtIsSet, fNumberOfStrips, fStripAim, fView, PlaneView::kU, and PlaneView::kV.

Referenced by AltDeMuxModule::Ana(), AlgAltDeMuxBase::DeMuxHits(), AlgAltDeMuxBase::MakeTimingMask(), AlgAltDeMuxBase::ReMakeTimingMask(), and AltDeMuxModule::SelectCleanMuons().

00297 { 
00298 
00299   double stripAim=0.0;
00300   if(!fDtIsSet)this->CalcDt();
00301   
00302   if(fView==PlaneView::kU){
00303     stripAim = fNumberOfStrips/2.0+fDt*fDt2Dstrip;
00304   }
00305   if(fView==PlaneView::kV){
00306     stripAim = fNumberOfStrips/2.0-fDt*fDt2Dstrip;
00307   }
00308 
00309   if(stripAim<0.)fStripAim=0;
00310   if(stripAim>=fNumberOfStrips)fStripAim=fNumberOfStrips-1;
00311   if(stripAim>=0.&&stripAim<fNumberOfStrips)fStripAim = static_cast<Int_t>(stripAim);     
00312 
00313   return fStripAim;
00314 
00315 }

Float_t AltDeMuxCalc::TimeWalk ( float  adc  ) 

Definition at line 450 of file AltDeMuxCalc.cxx.

Referenced by CalcBestEast(), CalcBestWest(), CalcEast(), and CalcWest().

00450                                        {
00451 
00452   // Time walk correction based on DATA parameterisation
00453   // from Andy Blake (new fit using form suggested by Roy Lee)
00454 
00455   Float_t logQ  = log(adc/2.3);
00456   Float_t logQ2 = logQ*logQ;
00457   Float_t logQ3 = logQ2*logQ;
00458   Float_t timeW = 5.7 - 0.76*logQ-0.038*logQ2+0.00541*logQ3; 
00459   return  timeW/0.3;
00460 
00461 }


Member Data Documentation

Double_t AltDeMuxCalc::fAbsTime [private]

Definition at line 77 of file AltDeMuxCalc.h.

Referenced by GetAbsTime(), and SetAbsTime().

Float_t AltDeMuxCalc::fAttCorClear[2500] [private]

Definition at line 117 of file AltDeMuxCalc.h.

Referenced by AttCorClear().

Float_t AltDeMuxCalc::fAttCorWLS[2500] [private]

Definition at line 116 of file AltDeMuxCalc.h.

Referenced by AttCorWLS().

Float_t AltDeMuxCalc::fClearE [private]

Definition at line 91 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcDt(), CalcEast(), GetClearE(), and SigmaDQ().

Float_t AltDeMuxCalc::fClearFibreC [private]

Definition at line 102 of file AltDeMuxCalc.h.

Referenced by CalcDt(), and SetClearFibreC().

Definition at line 113 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcEast(), and SetFibreLengthE().

Definition at line 114 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcWest(), and SetFibreLengthW().

Float_t AltDeMuxCalc::fClearW [private]

Definition at line 92 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcDt(), CalcWest(), GetClearW(), and SigmaDQ().

Float_t AltDeMuxCalc::fDQ [private]

Definition at line 98 of file AltDeMuxCalc.h.

Referenced by SigmaDQ().

bool AltDeMuxCalc::fDQIsSet [private]

Definition at line 81 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcBestWest(), CalcEast(), CalcWest(), and SigmaDQ().

Double_t AltDeMuxCalc::fDt [private]

Definition at line 97 of file AltDeMuxCalc.h.

Referenced by CalcDt(), DT(), SigmaDQ(), and StripAim().

Float_t AltDeMuxCalc::fDt2Dstrip [private]

Definition at line 105 of file AltDeMuxCalc.h.

Referenced by SetScintillatorC(), and StripAim().

bool AltDeMuxCalc::fDtIsSet [private]

Definition at line 80 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcBestWest(), CalcDt(), CalcEast(), CalcWest(), SigmaDQ(), and StripAim().

bool AltDeMuxCalc::fEastIsSet [private]

Definition at line 78 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcDt(), CalcEast(), SetEast(), and SetEastToStrip().

Definition at line 107 of file AltDeMuxCalc.h.

Referenced by SetNumberOfStrips(), and StripAim().

Int_t AltDeMuxCalc::fPlane [private]

Definition at line 73 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcBestWest(), CalcEast(), CalcWest(), and SetPlane().

Float_t AltDeMuxCalc::fQAttCorE [private]

Definition at line 89 of file AltDeMuxCalc.h.

Referenced by QAttCorE(), and SigmaDQ().

Float_t AltDeMuxCalc::fQAttCorW [private]

Definition at line 90 of file AltDeMuxCalc.h.

Referenced by QAttCorW(), and SigmaDQ().

Float_t AltDeMuxCalc::fQE [private]

Definition at line 85 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcEast(), and QRawE().

Float_t AltDeMuxCalc::fQEc [private]

Definition at line 87 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcEast(), PairQCor(), QSigCorE(), and SigmaDQ().

Float_t AltDeMuxCalc::fQEcor [private]

Definition at line 100 of file AltDeMuxCalc.h.

Float_t AltDeMuxCalc::fQW [private]

Definition at line 86 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcWest(), and QRawW().

Float_t AltDeMuxCalc::fQWc [private]

Definition at line 88 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcWest(), PairQCor(), QSigCorW(), and SigmaDQ().

Float_t AltDeMuxCalc::fQWcor [private]

Definition at line 101 of file AltDeMuxCalc.h.

Float_t AltDeMuxCalc::fScintillatorC [private]

Definition at line 104 of file AltDeMuxCalc.h.

Referenced by SetScintillatorC().

Int_t AltDeMuxCalc::fStripAim [private]

Definition at line 99 of file AltDeMuxCalc.h.

Referenced by StripAim().

Int_t AltDeMuxCalc::fStripE [private]

Definition at line 83 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcEast(), SetEast(), and SetEastToStrip().

Int_t AltDeMuxCalc::fStripW [private]

Definition at line 84 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcWest(), SetWest(), and SetWestToStrip().

Double_t AltDeMuxCalc::fTE [private]

Definition at line 95 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcDt(), CalcEast(), and GetTE().

Double_t AltDeMuxCalc::fTW [private]

Definition at line 96 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcDt(), CalcWest(), and GetTW().

Definition at line 74 of file AltDeMuxCalc.h.

Referenced by SetView(), and StripAim().

bool AltDeMuxCalc::fWestIsSet [private]

Definition at line 79 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcDt(), CalcWest(), SetWest(), and SetWestToStrip().

Float_t AltDeMuxCalc::fWlsE [private]

Definition at line 93 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcDt(), CalcEast(), GetWlsE(), and SigmaDQ().

Float_t AltDeMuxCalc::fWLSFibreC [private]

Definition at line 103 of file AltDeMuxCalc.h.

Referenced by CalcDt(), and SetWLSFibreC().

Definition at line 111 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcEast(), and SetFibreLengthE().

Definition at line 112 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcWest(), and SetFibreLengthW().

Float_t AltDeMuxCalc::fWlsW [private]

Definition at line 94 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcDt(), CalcWest(), GetWlsW(), and SigmaDQ().

Definition at line 75 of file AltDeMuxCalc.h.

Referenced by CalcBestEast(), CalcEast(), SetEast(), and SetEastToStrip().

Definition at line 76 of file AltDeMuxCalc.h.

Referenced by CalcBestWest(), CalcWest(), SetWest(), and SetWestToStrip().

Definition at line 72 of file AltDeMuxCalc.h.

Referenced by SetFibreLengthE(), SetFibreLengthW(), and SetUgli().


The documentation for this class was generated from the following files:

Generated on 2 Nov 2017 for loon by  doxygen 1.6.1