ROOT logo
//*-- Author   : Patrick Sellheim, Georgy Kornakov
//*-- Created  : 09/01/2014

//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HParticleBtRing
//
//  In this container all ring identification output provided by RICH
//  backtracking is stored. HParticleCand::getRichBTInd() returns the
//  ID to identify the corresponding backtracking container.
//  -1 is returned if no backtracking information is provided.
//  Only  tracks that fulfill the criteria of the track selection
//  function and have at least one fired pad are stored. Track Fragments
//  used for shared maxima information are only calculated in 4 degree range
//  around good particle candidate with backtracking hits.
//
//
//
//   
//  ------------------------------------------------------------------------------
//
//    Track selection function for lepton candidates
//    ----------------------------------------------
//
//
//    Bool_t selectEpEm = kFALSE;
//    if(pcand->isFlagAND(4,
//			Particle::kIsAcceptedHitInnerMDC,
//			Particle::kIsAcceptedHitOuterMDC,
//			Particle::kIsAcceptedHitMETA,
//			Particle::kIsAcceptedRK)&&
//
//       pcand->getInnerSegmentChi2() > 0
//       &&
//       isGoodLepton(pcand)
//       &&
//       ( (sys == 0 && beta > 0.95) || (sys == 1 && beta > 0.93) )
//        &&
//       (MDCdEdx < 10)
//       &&
//       pcand->getChi2() < 1000) selectEpEm=kTRUE;
//       )
//           return kTRUE;
//       else
//	     return kFALSE;
//  ------------------------------------------------------------------------------
//
//
//
//  Example
//  -------
//
//    HCategory* btCat = (HCategory*)HCategoryManager::getCategory(catParticleBtRing);
//    HParticleBtRing*     btRing;
//    btRing = HCategoryManager::getObject(btRing,btCat,pcand1->getRichBTInd());
//    btRing->getMaxima();
//    btRing->getMaximaSharedTrack(pcand2->getIndex());
//
//
//
//  Hints for usage
//
//  Good Rings have at least 2 Maxima  and even more PadsRing. There are also
//  rings with 1 Maxima, but this data sample is dominated by noise and will
//  be unefficient to suppress large numbers of pions. Thresholds on other
//  observables can be used to improve hadron suppression.
//  Shared maxima are useful to identify overlapping rings from close pairs
//  and hadronic tracks which pick up charge from good rings.
//
//
//  ------------------------------------------------------------------------------
//
//  Output variables:
//  ----------------
//
//  PadsRing:   Number of pads with good charge (q>65) on ring prediction area.
//  PadsSum:    Number of all pads from clusters with at least one pad on ring.
//              prediction area.
//  ChargeRing: Charge of pads with good charge (q>65) on ring prediction area.
//  ChargeSum:  Charge of all pads from clusters with at least one pad on ring
//              prediction area.
//
//  Clusters:     Number of clusters with at least one pad on ring prediction area.
//  Maxima:       Number of maxima from contributing clusters inside 6 sigma area.
//  MaximaCharge: Sum of charge of all maxima pads contributing clusters inside 6 sigma area.
//  NearbyMaxima: Number of maxima from contributing clusters inside 3 sigma area.
//
//  Chi2:       Ring quality based on maxima position.
//  MeanDist:   Shift of ring center which minimizes Chi2 value
//  RingMatrix: Charge of  pads matching with the ring prediction region divided by the charge of all pads in
//              pad region with a radius of 8 pads around ring center.
//
//  MaximaShared:                Number of maxima shared with other tracks.
//  MaximaSharedFragement:      Number of maxima shared with other track Fragments in 4 degree
//                               area around particle candidate
//  MaximaChargeShared:          Sum  charge of all maxima pads that is shared other tracks.
//  MaximaChargeSharedFragment: Sum  charge of all maxima pads that is shared with other
//                               track fragments in 4 degree area around ring.
//  NearbyMaximaShared:          Number of nearby maxima shared with other tracks.
//
//
//  MaximaSharedTrack:          Number of maxima shared with one specific track.
//                              HParticleCand index is needed as input value.
//  MaximaSharedFragmentTrack: Number of maxima shared with one specific track fragment in
//                              4 degree area around ring.
//                              HParticleCand index is needed as input value.
//  MaximaChargeSharedTrack:    Sum  charge of all maxima pads that is with one specific track.
//                              HParticleCand index is needed as input value.
//  MaximaChargeSharedFragmentTrack: Sum  charge of all maxima pads that is with one specific
//                              track fragment in 4 degree area around ring.
//                              HParticleCand index is needed as input value.
//
//  NearbyMaximaSharedTrack: Number of nearby maxima shared with one specific track.
//                           HParticleCand index is needed as input value.
//  --------------------------------------------------------------------
//


//
//
//
//
//////////////////////////////////////////////////////////////////////////////

#include "hparticlebtring.h"

#include "TBuffer.h"

// ----------------------------------------------------------------

ClassImp(HParticleBtRing)

// ----------------------------------------------------------------

HParticleBtRing::HParticleBtRing( ){
    init();
}

HParticleBtRing::~HParticleBtRing( ){

}


void HParticleBtRing::init() {
    fPadsRing         = -1;
    fPadsSum          = -1;
    fChargeRing       = -1.;
    fChargeSum        = -1.;

    fClusters         = -1;
    fMaxima           = -1;
    fMaximaCharge     = -1;
    fNearbyMaxima     = -1;

    fChi2             = -1.;
    fMeanDist         = -1.;
    fRingMatrix       = -1.;

    fMaximaShared          = -1;
    fMaximaSharedBad       = -1;
    fMaximaChargeShared    = -1;
    fMaximaChargeSharedBad = -1;
    fNearbyMaximaShared    = -1;

    for(Int_t i=0; i < 10; i++ ){
	fMaximaSharedTrack[i]             = -1;
	fMaximaSharedBadTrack[i]          = -1;
        fMaximaChargeSharedTrack[i]       = -1;
        fMaximaChargeSharedBadTrack[i]    = -1;
        fNearbyMaximaSharedTrack[i]       = -1;
	fMaximaSharedTrackIdx[i]          = -1;
        fMaximaSharedBadTrackIdx[i]       = -1;
        fMaximaChargeSharedTrackIdx[i]    = -1;
        fMaximaChargeSharedBadTrackIdx[i] = -1;
        fNearbyMaximaSharedTrackIdx[i]    = -1;
    }
}

Int_t  HParticleBtRing::getMaximaSharedTrack(Int_t idx)
{
    //Returns number of maxima shared with ring of candidate with given index
    //If number of neighbouring tracks is larger than 5, -1 is returned
    //Shared maxima are searched in 3 sigma area
    if(fMaximaSharedTrackIdx[0] == -1)
	return 0;
    for(Int_t i=0; i < 10; i++){
        if(fMaximaSharedTrackIdx[i] == idx)
            return fMaximaSharedTrack[i];
    }
    for(Int_t i=0; i < 10; i++){
	if(fMaximaSharedBadTrackIdx[i] == idx)
	    return fMaximaSharedBadTrack[i];
    }

    return 0;
}
                            /*
Int_t  HParticleBtRing::getMaximaSharedFragmentTrack(Int_t idx)
{
    //Returns number of maxima shared with ring of candidate with given index
    //
    //If number of neighbouring tracks is larger than 5, -1 is returned
    //Shared maxima are searched in 3 sigma area
    if(fMaximaSharedBadTrackIdx[0] == -1)
	return 0;
    for(Int_t i=0; i < 10; i++){
        if(fMaximaSharedBadTrackIdx[i] == idx)
            return fMaximaSharedBadTrack[i];
    }
    return 0;
}                */

Float_t  HParticleBtRing::getMaximaChargeSharedTrack(Int_t idx)
{
    //Returns charge of maximas shared with ring of candidate with given index
    //If number of neighbouring tracks is larger than 5, -1 is returned
    //Shared maxima are searched in 3 sigma area
    if(fMaximaChargeSharedTrackIdx[0] == -1)
	return 0;
    for(Int_t i=0; i < 10; i++){
        if(fMaximaChargeSharedTrackIdx[i] == idx)
            return fMaximaChargeSharedTrack[i];
    }
    for(Int_t i=0; i < 10; i++){
	if(fMaximaChargeSharedBadTrackIdx[i] == idx)
	    return fMaximaChargeSharedBadTrack[i];
    }


    return 0;
}
       /*
Float_t  HParticleBtRing::getMaximaChargeSharedFragmentTrack(Int_t idx)
{
    //Returns charge of maximas shared with ring of candidate with given index
    //If number of neighbouring tracks is larger than 5, -1 is returned
    //Shared maxima are searched in 3 sigma area
    if(fMaximaChargeSharedBadTrackIdx[0] == -1)
	return 0;
    for(Int_t i=0; i < 10; i++){
        if(fMaximaChargeSharedBadTrackIdx[i] == idx)
            return fMaximaChargeSharedBadTrack[i];
    }
    return 0;
}     */

Int_t  HParticleBtRing::getNearbyMaximaSharedTrack(Int_t idx)
{
    //Returns number of maxima shared with ring of candidate with given index
    //If number of neighbouring tracks is larger than 5, -1 is returned
     //Shared maxima are searched in 3 sigma area
    if(fNearbyMaximaSharedTrack[0] == -1)
	return 0;
    for(Int_t i=0; i < 10; i++){
	if(fNearbyMaximaSharedTrackIdx[i] == idx)
	    return fNearbyMaximaSharedTrack[i];
    }
    return 0;
}

void HParticleBtRing::Streamer(TBuffer &R__b)
{
   // Stream an object of class HParticleBtRing.

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      TObject::Streamer(R__b);
      R__b >> fPadsRing;
      R__b >> fPadsSum;
      R__b >> fChargeRing;
      R__b >> fChargeSum;
      R__b >> fClusters;
      R__b >> fMaxima;
      if(R__v > 1)R__b >> fMaximaCharge;
      else                fMaximaCharge=-1;
      R__b >> fNearbyMaxima;
      R__b >> fChi2;
      R__b >> fMeanDist;
      R__b >> fRingMatrix;
      R__b >> fMaximaShared;
      R__b.ReadStaticArray((int*)fMaximaSharedTrack);
      R__b.ReadStaticArray((int*)fMaximaSharedTrackIdx);
      //
      if(R__v > 1) {
	  R__b >> fMaximaSharedBad;
	  R__b.ReadStaticArray((int*)fMaximaSharedBadTrack);
	  R__b.ReadStaticArray((int*)fMaximaSharedBadTrackIdx);
	  R__b >> fMaximaChargeShared;
	  R__b.ReadStaticArray((float*)fMaximaChargeSharedTrack);
	  R__b.ReadStaticArray((int*)fMaximaChargeSharedTrackIdx);
	  R__b >> fMaximaChargeSharedBad;
	  R__b.ReadStaticArray((float*)fMaximaChargeSharedBadTrack);
	  R__b.ReadStaticArray((int*)fMaximaChargeSharedBadTrackIdx);
	  R__b >> fNearbyMaximaShared;
      } else {
	  fMaximaSharedBad       = -1;
	  fMaximaChargeShared    = -1;
	  fMaximaChargeSharedBad = -1;
	  fNearbyMaximaShared    = -1;

	  for(Int_t i=0;i<10;i++){
	      fMaximaSharedBadTrack[i]         = -1;
	      fMaximaSharedBadTrackIdx[i]      = -1;
	      fMaximaChargeSharedTrack[i]      = -1;
	      fMaximaChargeSharedTrackIdx[i]   = -1;
	      fMaximaChargeSharedBadTrack[i]   = -1;
	      fMaximaChargeSharedBadTrackIdx[i]= -1;
	  }


      }
      R__b.ReadStaticArray((int*)fNearbyMaximaSharedTrack);
      R__b.ReadStaticArray((int*)fNearbyMaximaSharedTrackIdx);
      R__b.CheckByteCount(R__s, R__c, HParticleBtRing::IsA());
   } else {
      R__c = R__b.WriteVersion(HParticleBtRing::IsA(), kTRUE);
      TObject::Streamer(R__b);
      R__b << fPadsRing;
      R__b << fPadsSum;
      R__b << fChargeRing;
      R__b << fChargeSum;
      R__b << fClusters;
      R__b << fMaxima;
      R__b << fMaximaCharge;
      R__b << fNearbyMaxima;
      R__b << fChi2;
      R__b << fMeanDist;
      R__b << fRingMatrix;
      R__b << fMaximaShared;
      R__b.WriteArray(fMaximaSharedTrack, 10);
      R__b.WriteArray(fMaximaSharedTrackIdx, 10);
      R__b << fMaximaSharedBad;
      R__b.WriteArray(fMaximaSharedBadTrack, 10);
      R__b.WriteArray(fMaximaSharedBadTrackIdx, 10);
      R__b << fMaximaChargeShared;
      R__b.WriteArray(fMaximaChargeSharedTrack, 10);
      R__b.WriteArray(fMaximaChargeSharedTrackIdx, 10);
      R__b << fMaximaChargeSharedBad;
      R__b.WriteArray(fMaximaChargeSharedBadTrack, 10);
      R__b.WriteArray(fMaximaChargeSharedBadTrackIdx, 10);
      R__b << fNearbyMaximaShared;
      R__b.WriteArray(fNearbyMaximaSharedTrack, 10);
      R__b.WriteArray(fNearbyMaximaSharedTrackIdx, 10);
      R__b.SetByteCount(R__c, kTRUE);
   }
}

 hparticlebtring.cc:1
 hparticlebtring.cc:2
 hparticlebtring.cc:3
 hparticlebtring.cc:4
 hparticlebtring.cc:5
 hparticlebtring.cc:6
 hparticlebtring.cc:7
 hparticlebtring.cc:8
 hparticlebtring.cc:9
 hparticlebtring.cc:10
 hparticlebtring.cc:11
 hparticlebtring.cc:12
 hparticlebtring.cc:13
 hparticlebtring.cc:14
 hparticlebtring.cc:15
 hparticlebtring.cc:16
 hparticlebtring.cc:17
 hparticlebtring.cc:18
 hparticlebtring.cc:19
 hparticlebtring.cc:20
 hparticlebtring.cc:21
 hparticlebtring.cc:22
 hparticlebtring.cc:23
 hparticlebtring.cc:24
 hparticlebtring.cc:25
 hparticlebtring.cc:26
 hparticlebtring.cc:27
 hparticlebtring.cc:28
 hparticlebtring.cc:29
 hparticlebtring.cc:30
 hparticlebtring.cc:31
 hparticlebtring.cc:32
 hparticlebtring.cc:33
 hparticlebtring.cc:34
 hparticlebtring.cc:35
 hparticlebtring.cc:36
 hparticlebtring.cc:37
 hparticlebtring.cc:38
 hparticlebtring.cc:39
 hparticlebtring.cc:40
 hparticlebtring.cc:41
 hparticlebtring.cc:42
 hparticlebtring.cc:43
 hparticlebtring.cc:44
 hparticlebtring.cc:45
 hparticlebtring.cc:46
 hparticlebtring.cc:47
 hparticlebtring.cc:48
 hparticlebtring.cc:49
 hparticlebtring.cc:50
 hparticlebtring.cc:51
 hparticlebtring.cc:52
 hparticlebtring.cc:53
 hparticlebtring.cc:54
 hparticlebtring.cc:55
 hparticlebtring.cc:56
 hparticlebtring.cc:57
 hparticlebtring.cc:58
 hparticlebtring.cc:59
 hparticlebtring.cc:60
 hparticlebtring.cc:61
 hparticlebtring.cc:62
 hparticlebtring.cc:63
 hparticlebtring.cc:64
 hparticlebtring.cc:65
 hparticlebtring.cc:66
 hparticlebtring.cc:67
 hparticlebtring.cc:68
 hparticlebtring.cc:69
 hparticlebtring.cc:70
 hparticlebtring.cc:71
 hparticlebtring.cc:72
 hparticlebtring.cc:73
 hparticlebtring.cc:74
 hparticlebtring.cc:75
 hparticlebtring.cc:76
 hparticlebtring.cc:77
 hparticlebtring.cc:78
 hparticlebtring.cc:79
 hparticlebtring.cc:80
 hparticlebtring.cc:81
 hparticlebtring.cc:82
 hparticlebtring.cc:83
 hparticlebtring.cc:84
 hparticlebtring.cc:85
 hparticlebtring.cc:86
 hparticlebtring.cc:87
 hparticlebtring.cc:88
 hparticlebtring.cc:89
 hparticlebtring.cc:90
 hparticlebtring.cc:91
 hparticlebtring.cc:92
 hparticlebtring.cc:93
 hparticlebtring.cc:94
 hparticlebtring.cc:95
 hparticlebtring.cc:96
 hparticlebtring.cc:97
 hparticlebtring.cc:98
 hparticlebtring.cc:99
 hparticlebtring.cc:100
 hparticlebtring.cc:101
 hparticlebtring.cc:102
 hparticlebtring.cc:103
 hparticlebtring.cc:104
 hparticlebtring.cc:105
 hparticlebtring.cc:106
 hparticlebtring.cc:107
 hparticlebtring.cc:108
 hparticlebtring.cc:109
 hparticlebtring.cc:110
 hparticlebtring.cc:111
 hparticlebtring.cc:112
 hparticlebtring.cc:113
 hparticlebtring.cc:114
 hparticlebtring.cc:115
 hparticlebtring.cc:116
 hparticlebtring.cc:117
 hparticlebtring.cc:118
 hparticlebtring.cc:119
 hparticlebtring.cc:120
 hparticlebtring.cc:121
 hparticlebtring.cc:122
 hparticlebtring.cc:123
 hparticlebtring.cc:124
 hparticlebtring.cc:125
 hparticlebtring.cc:126
 hparticlebtring.cc:127
 hparticlebtring.cc:128
 hparticlebtring.cc:129
 hparticlebtring.cc:130
 hparticlebtring.cc:131
 hparticlebtring.cc:132
 hparticlebtring.cc:133
 hparticlebtring.cc:134
 hparticlebtring.cc:135
 hparticlebtring.cc:136
 hparticlebtring.cc:137
 hparticlebtring.cc:138
 hparticlebtring.cc:139
 hparticlebtring.cc:140
 hparticlebtring.cc:141
 hparticlebtring.cc:142
 hparticlebtring.cc:143
 hparticlebtring.cc:144
 hparticlebtring.cc:145
 hparticlebtring.cc:146
 hparticlebtring.cc:147
 hparticlebtring.cc:148
 hparticlebtring.cc:149
 hparticlebtring.cc:150
 hparticlebtring.cc:151
 hparticlebtring.cc:152
 hparticlebtring.cc:153
 hparticlebtring.cc:154
 hparticlebtring.cc:155
 hparticlebtring.cc:156
 hparticlebtring.cc:157
 hparticlebtring.cc:158
 hparticlebtring.cc:159
 hparticlebtring.cc:160
 hparticlebtring.cc:161
 hparticlebtring.cc:162
 hparticlebtring.cc:163
 hparticlebtring.cc:164
 hparticlebtring.cc:165
 hparticlebtring.cc:166
 hparticlebtring.cc:167
 hparticlebtring.cc:168
 hparticlebtring.cc:169
 hparticlebtring.cc:170
 hparticlebtring.cc:171
 hparticlebtring.cc:172
 hparticlebtring.cc:173
 hparticlebtring.cc:174
 hparticlebtring.cc:175
 hparticlebtring.cc:176
 hparticlebtring.cc:177
 hparticlebtring.cc:178
 hparticlebtring.cc:179
 hparticlebtring.cc:180
 hparticlebtring.cc:181
 hparticlebtring.cc:182
 hparticlebtring.cc:183
 hparticlebtring.cc:184
 hparticlebtring.cc:185
 hparticlebtring.cc:186
 hparticlebtring.cc:187
 hparticlebtring.cc:188
 hparticlebtring.cc:189
 hparticlebtring.cc:190
 hparticlebtring.cc:191
 hparticlebtring.cc:192
 hparticlebtring.cc:193
 hparticlebtring.cc:194
 hparticlebtring.cc:195
 hparticlebtring.cc:196
 hparticlebtring.cc:197
 hparticlebtring.cc:198
 hparticlebtring.cc:199
 hparticlebtring.cc:200
 hparticlebtring.cc:201
 hparticlebtring.cc:202
 hparticlebtring.cc:203
 hparticlebtring.cc:204
 hparticlebtring.cc:205
 hparticlebtring.cc:206
 hparticlebtring.cc:207
 hparticlebtring.cc:208
 hparticlebtring.cc:209
 hparticlebtring.cc:210
 hparticlebtring.cc:211
 hparticlebtring.cc:212
 hparticlebtring.cc:213
 hparticlebtring.cc:214
 hparticlebtring.cc:215
 hparticlebtring.cc:216
 hparticlebtring.cc:217
 hparticlebtring.cc:218
 hparticlebtring.cc:219
 hparticlebtring.cc:220
 hparticlebtring.cc:221
 hparticlebtring.cc:222
 hparticlebtring.cc:223
 hparticlebtring.cc:224
 hparticlebtring.cc:225
 hparticlebtring.cc:226
 hparticlebtring.cc:227
 hparticlebtring.cc:228
 hparticlebtring.cc:229
 hparticlebtring.cc:230
 hparticlebtring.cc:231
 hparticlebtring.cc:232
 hparticlebtring.cc:233
 hparticlebtring.cc:234
 hparticlebtring.cc:235
 hparticlebtring.cc:236
 hparticlebtring.cc:237
 hparticlebtring.cc:238
 hparticlebtring.cc:239
 hparticlebtring.cc:240
 hparticlebtring.cc:241
 hparticlebtring.cc:242
 hparticlebtring.cc:243
 hparticlebtring.cc:244
 hparticlebtring.cc:245
 hparticlebtring.cc:246
 hparticlebtring.cc:247
 hparticlebtring.cc:248
 hparticlebtring.cc:249
 hparticlebtring.cc:250
 hparticlebtring.cc:251
 hparticlebtring.cc:252
 hparticlebtring.cc:253
 hparticlebtring.cc:254
 hparticlebtring.cc:255
 hparticlebtring.cc:256
 hparticlebtring.cc:257
 hparticlebtring.cc:258
 hparticlebtring.cc:259
 hparticlebtring.cc:260
 hparticlebtring.cc:261
 hparticlebtring.cc:262
 hparticlebtring.cc:263
 hparticlebtring.cc:264
 hparticlebtring.cc:265
 hparticlebtring.cc:266
 hparticlebtring.cc:267
 hparticlebtring.cc:268
 hparticlebtring.cc:269
 hparticlebtring.cc:270
 hparticlebtring.cc:271
 hparticlebtring.cc:272
 hparticlebtring.cc:273
 hparticlebtring.cc:274
 hparticlebtring.cc:275
 hparticlebtring.cc:276
 hparticlebtring.cc:277
 hparticlebtring.cc:278
 hparticlebtring.cc:279
 hparticlebtring.cc:280
 hparticlebtring.cc:281
 hparticlebtring.cc:282
 hparticlebtring.cc:283
 hparticlebtring.cc:284
 hparticlebtring.cc:285
 hparticlebtring.cc:286
 hparticlebtring.cc:287
 hparticlebtring.cc:288
 hparticlebtring.cc:289
 hparticlebtring.cc:290
 hparticlebtring.cc:291
 hparticlebtring.cc:292
 hparticlebtring.cc:293
 hparticlebtring.cc:294
 hparticlebtring.cc:295
 hparticlebtring.cc:296
 hparticlebtring.cc:297
 hparticlebtring.cc:298
 hparticlebtring.cc:299
 hparticlebtring.cc:300
 hparticlebtring.cc:301
 hparticlebtring.cc:302
 hparticlebtring.cc:303
 hparticlebtring.cc:304
 hparticlebtring.cc:305
 hparticlebtring.cc:306
 hparticlebtring.cc:307
 hparticlebtring.cc:308
 hparticlebtring.cc:309
 hparticlebtring.cc:310
 hparticlebtring.cc:311
 hparticlebtring.cc:312
 hparticlebtring.cc:313
 hparticlebtring.cc:314
 hparticlebtring.cc:315
 hparticlebtring.cc:316
 hparticlebtring.cc:317
 hparticlebtring.cc:318
 hparticlebtring.cc:319
 hparticlebtring.cc:320
 hparticlebtring.cc:321
 hparticlebtring.cc:322
 hparticlebtring.cc:323
 hparticlebtring.cc:324
 hparticlebtring.cc:325
 hparticlebtring.cc:326
 hparticlebtring.cc:327
 hparticlebtring.cc:328
 hparticlebtring.cc:329
 hparticlebtring.cc:330
 hparticlebtring.cc:331
 hparticlebtring.cc:332
 hparticlebtring.cc:333
 hparticlebtring.cc:334
 hparticlebtring.cc:335
 hparticlebtring.cc:336
 hparticlebtring.cc:337
 hparticlebtring.cc:338
 hparticlebtring.cc:339
 hparticlebtring.cc:340
 hparticlebtring.cc:341
 hparticlebtring.cc:342
 hparticlebtring.cc:343
 hparticlebtring.cc:344
 hparticlebtring.cc:345
 hparticlebtring.cc:346
 hparticlebtring.cc:347
 hparticlebtring.cc:348
 hparticlebtring.cc:349