////////////////////////////////////////////////////////////////////
//  PDecayChannel
//
//  Author:   Volker Hejny
//  Written:  27.08.99
//  Revised:  30.06.00 MK
//  Revised:  23.07.07 IF (adaption for new framework)
//
//  PDecayChannel implements a linked list of decay modes. 
// 
////////////////////////////////////////////////////////////////////
using namespace std;
#include <sstream>
#include <iostream>
#include <iomanip>
#include "PDecayChannel.h"
#include "PParticle.h"

ClassImp(PDecayChannel)

// --------------------------------------------------------------------------
    PDecayChannel::PDecayChannel() {
    // 
    // Contructs an 'empty' channel (indicated by 'Daughters' containing
    // a NULL pointer).
    //  
    Weight = 0;
    NumOfDaughters = 0;
    Next = NULL;
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
PDecayChannel::~PDecayChannel() {
    delete Next;
    //Daughters.~TArrayI(); //DONEv6
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
PDecayChannel *PDecayChannel::Unlink() {
    // 
    // The 'Next' element is set to NULL. The old value (i.e. the pointer
    // to the next possible decay mode) is returned.
    //
    PDecayChannel *temp = Next;
    Next = NULL;
    return temp;
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(PDecayChannel *newchannel) {
    // If the current channel is empty, it is filled with the contents of 
    // 'newchannel'. The object pointed to by 'newchannel' is deleted and
    // the value of 'newchannel' is replaced by a pointer to the current
    // channel.
    // If the current channel is not empty, but has no successor in 'Next',
    // 'Next' will point to 'newchannel'.
    // If the current channel contains a 'Next' object, the add request
    // is passed to this one. 
    // The other AddChannel functions work in the same way. The channel is
    // filled in the order current channel, 'Next' pointer and 'Next' object.
    if (!Daughters.GetArray()) {
	Double_t    w;
	Int_t       nd;
	Int_t      *ld;
	w  = newchannel->GetWeight();
	ld = newchannel->GetDaughters(nd);
	AddChannel(w, nd, ld);
	if (newchannel->GetNext()) 
	    AddChannel(newchannel->Unlink());
	delete newchannel;
	newchannel = this;
    } else {
	if (Next) Next->AddChannel(newchannel);
	else      Next = newchannel;
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, Int_t d1) {
    // The channel describes a decay into 1 daughter particle with particle id
    // d1 and branching ratio w. 
    // (This strange case is implemented only for completeness.)
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 1;
	Daughters.Set(1);
	Daughters[0] = d1;
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, Int_t d1, Int_t d2) {
    // The channel describes a decay into 2 daughter particles with particle 
    // ids d1, d2 and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 2;
	Daughters.Set(2);
	Daughters[0] = d1;
	Daughters[1] = d2;
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel:: AddChannel(Double_t w, Int_t d1, Int_t d2, Int_t d3) {
    // The channel describes a decay into 3 daughter particles with particle 
    // ids d1, d2, d3 and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 3;
	Daughters.Set(3);
	Daughters[0] = d1;
	Daughters[1] = d2;
	Daughters[2] = d3;
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2, d3);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel:: AddChannel(Double_t w, Int_t d1, Int_t d2, Int_t d3, Int_t d4) {
    // The channel describes a decay into 4 daughter particles with particle 
    // ids d1, d2, d3, d4 and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 4;
	Daughters.Set(4);
	Daughters[0] = d1;
	Daughters[1] = d2;
	Daughters[2] = d3;
	Daughters[3] = d4;
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2, d3, d4);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, Int_t nd, Int_t *ld) {  
    // The channel describes a decay into nd daughter particles with particle 
    // ids stored in the integer array ld and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = nd;
	Daughters.Set(nd);
	for (Int_t i=0; i<nd; i++) {
	    Daughters[i] = ld[i];
	}
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, nd, ld);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, PParticle *d1) {
    // The channel describes a decay into 1 daughter particle represented by
    // a pointer to PParticle d1 and branching ratio w. 
    // (This strange case is implemented only for completeness.)
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 1;
	Daughters.Set(1);
	Daughters[0] = d1->ID();
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w,d1);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, PParticle *d1, PParticle *d2) {
    // The channel describes a decay into 2 daughter particles represented by
    // pointers to PParticle d1, d2 and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 2;
	Daughters.Set(2);
	Daughters[0] = d1->ID();
	Daughters[1] = d2->ID();
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, PParticle *d1, PParticle *d2, PParticle *d3) {
    // The channel describes a decay into 3 daughter particles represented by
    // pointers to PParticle d1, d2, d3 and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 3;
	Daughters.Set(3);
	Daughters[0] = d1->ID();
	Daughters[1] = d2->ID();
	Daughters[2] = d3->ID();
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2, d3);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, PParticle *d1, PParticle *d2, PParticle *d3, PParticle *d4) {
    // The channel describes a decay into 4 daughter particles represented by
    // pointers to PParticle d1, d2, d3, d4 and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 4;
	Daughters.Set(4);
	Daughters[0] = d1->ID();
	Daughters[1] = d2->ID();
	Daughters[2] = d3->ID();
	Daughters[3] = d4->ID();
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2, d3, d4);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, Int_t nd, PParticle **ld) {  
    // The channel describes a decay into nd daughter particles represented by
    // pointers to PParticle stored in the array ld and branching ratio w. 
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = nd;
	Daughters.Set(nd);
	for (Int_t i=0; i<nd; i++) {
	    Daughters[i] = ld[i]->ID();
	}
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, nd, ld);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, const char *d1) {
    // The channel describes a decay into 1 daughter particle represented by
    // its name d1 and branching ratio w.
    // (This strange case is implemented only for completeness.)
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 1;
	Daughters.Set(1);
	Daughters[0] = makeStaticData()->GetParticleID(d1);
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, const char *d1, const char *d2) {
    // The channel describes a decay into 2 daughter particles represented by
    // their names d1, d2 and branching ratio w.
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 2;
	Daughters.Set(2);
	Daughters[0] = makeStaticData()->GetParticleID(d1);
	Daughters[1] = makeStaticData()->GetParticleID(d2);
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, const char *d1, const char *d2, const char *d3) {
    // The channel describes a decay into 3 daughter particles represented by
    // their names d1, d2, d3 and branching ratio w.
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 3;
	Daughters.Set(3);
	Daughters[0] = makeStaticData()->GetParticleID(d1);
	Daughters[1] = makeStaticData()->GetParticleID(d2);
	Daughters[2] = makeStaticData()->GetParticleID(d3);
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2, d3);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, const char *d1, const char *d2, const char *d3, const char *d4) {
    // The channel describes a decay into 4 daughter particles represented by
    // their names d1, d2, d3, d4 and branching ratio w.
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = 4;
	Daughters.Set(4);;
	Daughters[0] = makeStaticData()->GetParticleID(d1);
	Daughters[1] = makeStaticData()->GetParticleID(d2);
	Daughters[2] = makeStaticData()->GetParticleID(d3);
	Daughters[3] = makeStaticData()->GetParticleID(d4);
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, d1, d2, d3, d4);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
void PDecayChannel::AddChannel(Double_t w, Int_t nd, char **ld) {  
    // The channel describes a decay into nd daughter particles represented by
    // an array of their names ld and branching ratio w.
    if (!Daughters.GetArray()) {
	Weight = w;
	NumOfDaughters = nd;
	Daughters.Set(nd);;	
	for (Int_t i=0; i<nd; i++) {
	    Daughters[i] = makeStaticData()->GetParticleID(ld[i]);
	}
    } else {
	if (!Next) Next = new PDecayChannel();
	Next->AddChannel(w, nd, ld);
    }
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
Double_t PDecayChannel::GetWeight() {
    // Returns the branching ratio.
    return Weight;
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
Int_t *PDecayChannel::GetDaughters(int &number) {
    // The contents of 'number' is replaced by the number of daughter particles
    // and the pointer to the daughter array is returned.
    number = NumOfDaughters;
    return Daughters.GetArray();
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
PDecayChannel *PDecayChannel::GetNext() {
    // Returns the 'Next' element, i.e. the succeeding channel.
    return Next;
}
// --------------------------------------------------------------------------

// --------------------------------------------------------------------------
PDecayChannel *PDecayChannel::GetLast() {
    // Returns the 'last' element in the list.
    if (Next)
	return Next->GetLast();
    else return this;
}
// --------------------------------------------------------------------------


// --------------------------------------------------------------------------
void PDecayChannel::Print(const Option_t *) const {
    //
    // Prints the channel information.
    // 

    Int_t dalitz = 0;
  
    if (!NumOfDaughters) {
	cout << "Empty Channel." << endl;
	return;
    }

//    cout.width(8);
    cout << 100.*Weight << " %: " ;
    for (Int_t i=0; i<NumOfDaughters; i++) {
	if ( (dalitz!=2) && (i>0) ) cout << ", ";
	if (!(Daughters[i])) {
	    cout << "dalitz(";
	    dalitz = 2;
	} else {
	    cout << makeStaticData()->GetParticleName(Daughters[i]);
	    if (!(--dalitz)) cout << ")"; 
	}
    }
//    cout << endl;
    if (Next) {
	cout << ", ";
	Next->Print();
    }
    return;
}
// --------------------------------------------------------------------------

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