From HallCWiki
Jump to: navigation, search

Hall C HCANA C++ Analyzer software flow

1) Loops through each apparatus calling Decode method for each detector

a)  THcDC::Decode 
    1) Gets raw data form hitlist
    2) Loops thru chambers and calls fChambers[ic]->ProcessHits 
         which fills THcDCHIT
b)  THcHodoscope::Decode
    1) Gets raw data form hitlist
    2) Loops through each plane
      a) fPlanes[ip]->ProcessHits(fRawHitList,nexthit)
      b) all hits in plane 
          loops over fPlanes[ip]->GetNScinGoodHits to set fStartTime and fNfptimes++
            which are needed by drift chambers.
c) THcShower::Decode
    1) Gets raw data from hitlist
    2) Loops through layers and calls fPlanes[ip]->ProcessHits(fRawHitList, nexthit) which fills the "raw" TClonesArrays.
    3) if SHMS array then ShowerArray->ProcessHits(fRawHitList, nexthit) which fills the "raw" TClonesArrays.

2) Loops thru each spectrometer calling THaSpectrometer::CoarseReconstruct() which Loops through tracking detectors and calls its CoarseTrack

    a) THcDC::CoarseTrack find all tracks  focal plane quantities
    b) Then loops through non-tracking detectors to call their CoarseProcess
              1) THcHodoscope 
                   a)Calculate the beta from scintillator timing use track information to determine distance
                   b)Calculates if scintillator fiducial area should have had a track for tracking efficiency
                   c) Set Track beta.
              2) THcShower 
                  a) calls fPlanes[ip]->CoarseProcessHits()  which fills the "good" arrays with cut on threshold and ADC time window.
                  b) if SHMS array then calls ShowerArray->CoarseProcessHits() which fills the "good" arrays
                  c) THcShowerHit, THcShowerClusterList 
                  d) Match each track to cluster and sets Track energy.
              3) THcAerogel does nothing.
              4) THcCerenkov fills higher level arrays like fADC_p

3) Loops through each spectrometer calling THaSpectrometer::Reconstruct()

   a)  each spectrometer calling THaSpectrometer::Track()  
       1) Loops through tracking detectors and calls its FineTrack which does nothing in THcDC
       2)  Calls THcHallCSpectrometer::FindVertices 
           a) calculates target quantities and fill track momentum 
           b) selects the "best" track and sets the Index=0 for the best track.      
    b) Loops thru nontracking detectors calling there FineProcess
          1) THcHodoscope fills fBeta for scintillator beta that went with "best" track
          2) THcShower matches cluster and "best" track and fills
          3) THcCerenkov does test to match track to region of Cherenkov
          4) THcAerogel does nothing
    c) Calls THcHallCSpectrometer::TrackCalc() fills the golden track with the "best" track
    d) Calls CalcPID which is suppose to combine PID info using  THaPIDinfo class.

4) Loops through PhysicsModules