Ejemplo n.º 1
0
int TrdHSegmentR::Refit(int debug){
  if(debug>0)
    cout<<"TrdHSegmentR::Refit-I-Number of RawHits "<<nTrdRawHit()<<endl;
  int lr=LinReg(debug);
  
  int lay[20];for(int l=0;l!=20;l++)lay[l]=0;
  float zmax=0.,zmin=200.;
  int nhits=0;
  for(int h=0;h!=nTrdRawHit();h++){	
    TRDHitRZD rzd=TRDHitRZD(*pTrdRawHit(h));

    if(rzd.d!=d)continue;
    if(rzd.z>zmax)zmax=rzd.z;
    if(rzd.z<zmin)zmin=rzd.z;
    
    for(int l=0;l!=20;l++){
      if(fabs((rzd.z-85.275)/2.9-(float)l)<0.01)lay[l]++;
      else if (fabs((rzd.z-85.275-1.45)/2.9 -(float)l)<0.01)lay[l]++;
    }
    nhits++;
  }
  
  int lsum=0;
  for(int l=0;l!=20;l++)if(lay[l]>0)lsum++;
  if(debug)
    cout<<"TrdHSegmentR::Refit-I-linreg stat "<<lr<<" dz "<<zmax-zmin<<" layers "<<lsum<<endl;
  if(lr==1&&zmax-zmin>8.&&lsum>2){
    calChi2();
    return 1;
  }
  else return 0;
}
Ejemplo n.º 2
0
/**
 * Creates a pvl of various useful data obtained by the overlap statistics
 * class.  The pvl is returned in an output stream
 *
 * @param os The output stream to write to
 * @param stats The OverlapStatistics object to write to os
 * @return ostream Pvl of useful statistics
 */
std::ostream& operator<<(std::ostream &os, Isis::OverlapStatistics &stats) {
    // Output the private variables
    try {
        PvlObject o ("OverlapStatistics");
        PvlGroup gX ("File1");
        PvlKeyword stsX ("StartSample", stats.StartSampleX());
        PvlKeyword ensX ("EndSample", stats.EndSampleX());
        PvlKeyword stlX ("StartLine", stats.StartLineX());
        PvlKeyword enlX ("EndLine", stats.EndLineX());
        PvlKeyword avgX ("Average");
        PvlKeyword stdX ("StandardDeviation");
        PvlKeyword varX ("Variance");
        for (int band=1; band<=stats.Bands(); band++) {
            if (stats.HasOverlap(band)) {
                avgX += stats.GetMStats(band).X().Average();
                stdX += stats.GetMStats(band).X().StandardDeviation();
                varX += stats.GetMStats(band).X().Variance();
            }
        }
        gX += stsX;
        gX += ensX;
        gX += stlX;
        gX += enlX;
        gX += avgX;
        gX += stdX;
        gX += varX;

        PvlGroup gY ("File2");
        PvlKeyword stsY ("StartSample", stats.StartSampleY());
        PvlKeyword ensY ("EndSample", stats.EndSampleY());
        PvlKeyword stlY ("StartLine", stats.StartLineY());
        PvlKeyword enlY ("EndLine", stats.EndLineY());
        PvlKeyword avgY ("Average");
        PvlKeyword stdY ("StandardDeviation");
        PvlKeyword varY ("Variance");
        for (int band=1; band<=stats.Bands(); band++) {
            if (stats.HasOverlap(band)) {
                avgY += stats.GetMStats(band).Y().Average();
                stdY += stats.GetMStats(band).Y().StandardDeviation();
                varY += stats.GetMStats(band).Y().Variance();
            }
        }
        gY += stsY;
        gY += ensY;
        gY += stlY;
        gY += enlY;
        gY += avgY;
        gY += stdY;
        gY += varY;

        o += PvlKeyword("File1", stats.FilenameX().Name());
        o += PvlKeyword("File2", stats.FilenameY().Name());
        o += PvlKeyword("Width", stats.Samples());
        o += PvlKeyword("Height", stats.Lines());
        o += PvlKeyword("SamplingPercent", stats.SampPercent());
        o.AddGroup(gX);
        o.AddGroup(gY);

        PvlKeyword cov ("Covariance");
        PvlKeyword cor ("Correlation");

        PvlKeyword valid ("ValidOverlap");
        PvlKeyword val ("ValidPixels");
        PvlKeyword inv ("InvalidPixels");
        PvlKeyword tot ("TotalPixels");
        for (int band=1; band<=stats.Bands(); band++) {
            if (stats.HasOverlap(band)) {
                std::string validStr = "false";
                if (stats.IsValid(band)) validStr = "true";
                valid += validStr;
                cov += stats.GetMStats(band).Covariance();
                cor += stats.GetMStats(band).Correlation();
                val += stats.GetMStats(band).ValidPixels();
                inv += stats.GetMStats(band).InvalidPixels();
                tot += stats.GetMStats(band).TotalPixels();
            }
        }
        o += valid;
        o += cov;
        o += cor;
        o += val;
        o += inv;
        o += tot;

        for (int band=1; band<=stats.Bands(); band++) {
            if (stats.HasOverlap(band)) {
                iString bandNum (band);
                std::string bandStr = "LinearRegression" + bandNum;
                PvlKeyword LinReg(bandStr);
                double a,b;
                try {
                    stats.GetMStats(band).LinearRegression(a,b);
                    LinReg += a;
                    LinReg += b;
                }
                catch (iException &e) {
                    // It is possible one of the overlaps was constant and therefore
                    // the regression would be a vertical line (x=c instead of y=ax+b)
                    e.Clear();
                }
                o += LinReg;
            }
        }

        os << o << endl;
        return os;
    }
    catch (iException &e) {
        string msg = "Trivial overlap between [" + stats.FilenameX().Name();
        msg += "] and [" + stats.FilenameY().Name() + "]";
        throw iException::Message(iException::User,msg,_FILEINFO_);
    }

}