Getting Segmentation fault

When I am running a macro I am getting segmentation fault every time. The patch of code is below.

It gives me segmentation fault just after entering the if loop of ProcessTheEntry.

Please suggest what could be the problem? Thanks.

for (int i=0;i<rd51reco_nentries;i++) { rd51reco_tree->GetEntry(i); if (ProcessTheEntry(i,rd51analyzer_Cut_Verbose)) { cout<<"##################################"<<endl; Calc_sCMSNS2LC1_Eff(rd51analyzer_Verbose && rd51analyzer_EffCalculatorVerbose); Calc_sCMSNS2LC2_Eff(rd51analyzer_Verbose && rd51analyzer_EffCalculatorVerbose); Calc_sCMSNS2LC3_Eff(rd51analyzer_Verbose && rd51analyzer_EffCalculatorVerbose); NumberOfProcessedEntries+=1; } else { if (rd51analyzer_EffCalculatorVerbose==1 && rd51analyzer_Verbose==1) cout << "Not Processed Events: Number Of Found XTracks: " << rd51tracker->trackx_ << "\tNumber Of Found YTracks: " << rd51tracker->tracky_ << endl; } }
Description of ProcessTheEntry :

[code]bool rd51_Analyzer::ProcessTheEntry(int processedentry, int verbose)
{
bool processit=0;
bool cut_Chi2=0;
bool cut_Residuals=0;
bool cut_NumberOfTracks=0;
bool cut_SingleXYTrack=0;
cut_NumberOfTracks=
(rd51tracker->trackx_<=rd51analyzer_Cut_NumberOfTracks &&
rd51tracker->tracky_<=rd51analyzer_Cut_NumberOfTracks);
cut_SingleXYTrack=
( !rd51analyzer_Cut_SingleXYTrackRequest || (rd51tracker->trackx_==1 && rd51tracker->tracky_==1) );

if (cut_NumberOfTracks && cut_SingleXYTrack)
{  
    cut_Chi2=       
            ((rd51tracker->trackx_chi2)[0]<=rd51analyzer_Cut_Chi2Value &&
             (rd51tracker->tracky_chi2)[0]<=rd51analyzer_Cut_Chi2Value);
    cut_Residuals= 
            ((rd51tracker->residualx)[0]<=rd51analyzer_Cut_ResidualValue &&
             (rd51tracker->residualy)[0]<=rd51analyzer_Cut_ResidualValue);
    processit = (cut_Chi2 && cut_Residuals);
}  
if (verbose && !processit)
{  
    cout    <<"Rejected Entry\t"    <<processedentry        <<"\t"
            <<"NumberOfTrack["      <<cut_NumberOfTracks    <<"]\t" 
            <<"SingleXYTrack["      <<cut_SingleXYTrack     <<"]\t" 
            <<"Chi2["               <<cut_Chi2              <<"]\t" 
            <<"Residuals["          <<cut_Residuals         <<"]\t" 
            <<endl; 
}
return processit;

}
[/code]

Here is the segmentation fault output:segfault.txt (4.12 KB)

Mark lines 88 and 511 in the “rd51_Analyzer.C”.

line 88 is if loop in first patch of code.

               if (ProcessTheEntry(i,rd51analyzer_Cut_Verbose)) 

line 511 is in second patch of code. It is the 3rd line just after definition of bool variables.

               rd51tracker->tracky_<=rd51analyzer_Cut_NumberOfTracks);

Before line 509 (i.e. before the line “cut_NumberOfTracks=”), try to add:
if (!rd51tracker) { std::cout << “rd51tracker == 0 -> WTF?” << std::endl; exit(1); }