Skip to content
Snippets Groups Projects
THcDriftChamber.cxx 37.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
        // Calculate final coordinate based on plusminusbest
        // Update the hit positions in the space points
    
        for(Int_t ihit=0; ihit<nhits; ihit++) {
    
          sp->GetHit(ihit)->SetLeftRight(plusminusbest[ihit]);
    
        }
    
        // Stubs are calculated in rotated coordinate system
        // (I think this rotates in case chambers not perpendicular to central ray)
        Int_t pindex=plane_list[0];
    
        if(spstub[2] - fTanBeta[pindex] == -1.0) {
    
          cout << "THcDriftChamber::LeftRight(): stub3 error" << endl;
        }
    
        stub[2] = (spstub[2] - fTanBeta[pindex])
          / (1.0 + spstub[2]*fTanBeta[pindex]);
        if(spstub[2]*fSinBeta[pindex] ==  -fCosBeta[pindex]) {
    
          cout << "THcDriftChamber::LeftRight(): stub4 error" << endl;
        }
    
        stub[3] = spstub[3]
          / (spstub[2]*fSinBeta[pindex]+fCosBeta[pindex]);
        stub[0] = spstub[0]*fCosBeta[pindex]
          - spstub[0]*stub[2]*fSinBeta[pindex];
        stub[1] = spstub[1]
          - spstub[1]*stub[3]*fSinBeta[pindex];
    
        for(Int_t i=0;i<4;i++) {
    
        }
      }
      // Option to print stubs
    }
        //    if(fAA3Inv.find(bitpat) != fAAInv.end()) { // Valid hit combination
    //_____________________________________________________________________________
    
    Double_t THcDriftChamber::FindStub(Int_t nhits, const std::vector<THcDCHit*>* hits,
    
    				       Int_t* plane_list, UInt_t bitpat,
    				       Int_t* plusminus, Double_t* stub)
    {
      // For a given combination of L/R, fit a stub to the space point
      Double_t zeros[] = {0.0,0.0,0.0};
      TVectorD TT; TT.Use(3, zeros);
    
      TVectorD dstub; dstub.Use(3, zeros);
    
      Double_t dpos[nhits];
    
      // This isn't right.  dpos only goes up to 2.
    
      for(Int_t ihit=0;ihit<nhits; ihit++) {
    
        dpos[ihit] = (*hits)[ihit]->GetPos() + plusminus[ihit]*(*hits)[ihit]->GetdDist()
    
          - fPsi0[plane_list[ihit]];
        for(Int_t index=0;index<3;index++) {
          TT[index]+= dpos[ihit]*fStubCoefs[plane_list[ihit]][index]
    	/fSigma[plane_list[ihit]];
        }
      }
    
      //  fAA3Inv[bitpat]->Print();
      //  cout << TT[0] << " " << TT[1] << " " << TT[2] << endl;
    
      //  TT->Print();
    
      //dstub = *(fAA3Inv[bitpat]) * TT;
      TT *= *fAA3Inv[bitpat];
    
      // cout << TT[0] << " " << TT[1] << " " << TT[2] << endl;
    
     //  cout << dstub[0] << " " << dstub[1] << " " << dstub[2] << endl;
    
    
      // Calculate Chi2.  Remember one power of sigma is in fStubCoefs
    
      stub[0] = TT[0];
      stub[1] = TT[1];
      stub[2] = TT[2];
    
      stub[3] = 0.0;
      Double_t chi2=0.0;
      for(Int_t ihit=0;ihit<nhits; ihit++) {
        chi2 += pow( dpos[ihit]/fSigma[plane_list[ihit]]
    		 - fStubCoefs[plane_list[ihit]][0]*stub[0]
    		 - fStubCoefs[plane_list[ihit]][1]*stub[1]
    		 - fStubCoefs[plane_list[ihit]][2]*stub[2]
    		 , 2);
      }
      return(chi2);
    }
    
    
    //_____________________________________________________________________________
    
    THcDriftChamber::~THcDriftChamber()
    
      // Destructor. Remove variables from global list.
    
      cout << fChamberNum << ": delete fSpacePoints: " << hex << fSpacePoints << endl;
    
      if( fIsSetup )
        RemoveVariables();
      if( fIsInit )
        DeleteArrays();
      if (fTrackProj) {
        fTrackProj->Clear();
        delete fTrackProj; fTrackProj = 0;
      }
    
    }
    
    //_____________________________________________________________________________
    
    void THcDriftChamber::DeleteArrays()
    
      // Delete member arrays. Used by destructor.
    
    //_____________________________________________________________________________
    inline 
    void THcDriftChamber::Clear( const Option_t* )
    {
      // Reset per-event data.
      //  fNhits = 0;
    
      //  fTrackProj->Clear();
      fNhits = 0;
    
    }
    
    //_____________________________________________________________________________
    Int_t THcDriftChamber::ApplyCorrections( void )
    {
      return(0);
    
    }
    
    ClassImp(THcDriftChamber)
    ////////////////////////////////////////////////////////////////////////////////