ROOT logo
// @(#)$Id: hsudummyrec.cc,v 1.7 2009-07-15 11:38:42 halo Exp $
//*-- Author : Marcin Jaskula 02/11/2002
//*-- Modifed: Marcin Jaskula 11/07/2003
//             *Events support added
//*-- Modifed: Jacek Otwinowski 10/02/2007

//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// HSUDummyRec
//                                                                            //
// Dummy reconstructor which calls user defined functions                     //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

#include "hsudummyrec.h"

#include "hevent.h"
#include "hades.h"

#include "hcategory.h"
#include "hiterator.h"

#include "hdatasource.h"

#include "TROOT.h"
#include "TError.h"

using namespace std;
// -----------------------------------------------------------------------------

ClassImp(HSUDummyRec)
ClassImp(HSUIteratorObject)

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

HSUDummyRec::HSUDummyRec(Bool_t bVerbose)
    : HReconstructor("SuDummyRec", "Dummy reconstructor")
{
// Default constructor.

    setDefault();
    setVerbose(bVerbose);
}

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

HSUDummyRec::HSUDummyRec(const Char_t *pOutFileName, Bool_t bVerbose)
    : HReconstructor("SuDummyRec", "Dummy reconstructor")
{
// Constructor with the file name

    setDefault();
    setVerbose(bVerbose);
    setOutFileName(pOutFileName);
}

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

HSUDummyRec::HSUDummyRec(const Text_t name[],const Text_t title[], Bool_t bVerbose)
    : HReconstructor(name, title)
{
// Constructor with names

    setDefault();
    setVerbose(bVerbose);
}

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

HSUDummyRec::HSUDummyRec(const Char_t *pOutFileName,
                const Text_t name[],const Text_t title[], Bool_t bVerbose)
    : HReconstructor(name, title)
{
// Constructor with all names

    setDefault();
    setVerbose(bVerbose);
    setOutFileName(pOutFileName);
}

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

HSUDummyRec::~HSUDummyRec(void)
{
// Delete all objects stored in lToDelete list
// Done automaticaly by the destructor of the TList
// Delete the output file

    if(pOutFile != NULL)
        delete pOutFile;
}

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

void HSUDummyRec::setDefault(void)
{
// Called in constructors to set default valuest to the members

    lToDelete.SetOwner();

    bVerbose   = kTRUE;
    bInitOk    = kFALSE;

    pOutFile   = NULL;

    iEvents      = 0;
    bWriteEvents = kFALSE;
}

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

HCategory* HSUDummyRec::getCategory(Cat_t cat, Bool_t bRaport)
{
// Static function which returns pointer to a category by its id
// bRaport true indicates warning message where the category is not found

HCategory    *pCat;
HEvent       *pEvent;

    if((gHades == NULL) || ((pEvent = gHades->getCurrentEvent()) == NULL))
    {
        ::Error("HSUDummyRec::getCategory", "Cannot access current event");
        return NULL;
    }

    if((pCat = pEvent->getCategory(cat)) != NULL)
        return pCat;

    if(bRaport)
        ::Warning("HSUDummyRec::getCategory", "No category %d", cat);

    return NULL;
}

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

HCategory* HSUDummyRec::getCategory(const Char_t* pName, Bool_t bRaport)
{
// Static function which returns pointer to a category by its name
// bRaport true indicates warning message where the category is not found.
// The search is done from cat = 0 to 1000

Int_t      iMax = 1000;
Int_t      i;

HCategory  *pCat;
HEvent     *pEvent;

    if(pName == NULL)
    {
        :: Error("HSUDummyRec::getCategory", "pName == NULL");
        return NULL;
    }

    if((gHades == NULL) || ((pEvent = gHades->getCurrentEvent()) == NULL))
    {
        ::Error("HSUDummyRec::getCategory", "Cannot access current event");
        return NULL;
    }

    for(i = 0; i < iMax; i++)
    {
        if((pCat = pEvent->getCategory(Cat_t(i))) == NULL)
            continue;

        if(strcmp(pCat->getClassName(), pName) == 0)
            return pCat;
    }

    if(bRaport)
        ::Warning("HSUDummyRec::getCategory", "No category %s", pName);

    return NULL;
}

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

HIterator* HSUDummyRec::getIterator(Cat_t cat, Bool_t bDelete)
{
// Return pointer to iterator over category cat
// If bDetele is true (default), then the iterator will be automaticly deleted
// in the HSUDummyRec destructor

HIterator *pI;
HCategory *pCat;

    if((pCat = getCategory(cat, bVerbose)) == NULL)
        return NULL;

    if((pI = (HIterator *) pCat->MakeIterator()) == NULL)
        Error("getIterator", "Cannot create iterator for category %d", cat);
    else
    {
        if(bDelete)
            lToDelete.Add(new HSUIteratorObject(pI));
    }

    return pI;
}

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

HIterator* HSUDummyRec::getIterator(const Char_t* pName, Bool_t bDelete)
{
// Return pointer to iterator over category cat
// If bDetele is true (default), then the iterator will be automaticly deleted
// in the HSUDummyRec destructor

HIterator *pI;
HCategory *pCat;

    if((pCat = getCategory(pName, bVerbose)) == NULL)
        return NULL;

    if((pI = (HIterator *) pCat->MakeIterator()) == NULL)
        Error("getIterator", "Cannot create iterator for category %s", pName);
    else
    {
        if(bDelete)
            lToDelete.Add(new HSUIteratorObject(pI));
    }

    return pI;
}

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

void HSUDummyRec::addObjectToWrite(TObject *pObj, Bool_t bDelete)
{
// Add the object to the list of objects being written in writeObjects()
// If bDetele is true (default), then the object will be automaticly deleted
// in the HSUDummyRec destructor

    if(pObj == NULL)
        return;

    lToWrite.Add(pObj);

    if(bDelete)
        lToDelete.Add(pObj);
}

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

Bool_t HSUDummyRec::removeObject(TObject *pObj)
{
// Remove the object from the lists for writing and deleting.
// Returns kTRUE if the object was on any list

Bool_t bReturn = kFALSE;

    bReturn |= (lToDelete.Remove(pObj) != NULL);
    bReturn |= (lToWrite.Remove(pObj) != NULL);

    return bReturn;
}

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

Bool_t HSUDummyRec::removeIterator(HIterator *pI)
{
// Remove the iterator created by the getIterator() method.
// The iteraror is no deleted !!!

TIterator *i = lToDelete.MakeIterator();
TObject   *p;

    i->Reset();
    while((p = i->Next()) != NULL)
    {
        if(p->IsA() != HSUIteratorObject::Class())
            continue;

        if(((HSUIteratorObject *)p)->get() != pI)
            continue;

        lToDelete.Remove(p);
        delete p;

        return kTRUE;
    }

    return kFALSE;
}

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

Int_t HSUDummyRec::writeObjects(TFile *pFile)
{
// Writes the object from lToWrite list into pFile file
// If pFile == NULL then the gFile is used.

TFile *pTmp = gFile;
Int_t  iWritten;

    if(pFile == NULL)
        pFile = gFile;

    if((pFile == NULL) || ( ! pFile->IsOpen()) || ( ! pFile->IsWritable()))
    {
        Error("writeObjects", "Cannot write to file: %s",
                (pFile == NULL) ? "(nil)" : pFile->GetName());
        return 0;
    }

    pFile->cd();
    iWritten = lToWrite.Write();

    if(pTmp != NULL)
        pTmp->cd();

    return iWritten;
}

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

Int_t HSUDummyRec::writeObjects(const Char_t *pFileName, Bool_t bRecreate)
{
// Writes the object from lToWrite list into pFileName file.
// If bRecreate is true the file is "RECREATE"d, otherwise "UPDATE"d.
// If the file is already used and bRecreate is true the file is recreated
// as well.
// If pFileName == NULL then the gFile is used and bRecreated flag is ignored.

    if(pFileName == NULL)
        return writeObjects((TFile *)NULL);

TFile *pTmp   = gFile;
TFile *pFile  = (TFile *)gROOT->GetListOfFiles()->FindObject(pFileName);
Bool_t bClose = kTRUE;
Int_t  iWritten;

    if((pFile != NULL) && (bRecreate))
    {
        if(pTmp == pFile)
            pTmp = NULL;

        delete pFile;
        pFile  = NULL;
        bClose = kFALSE;
    }

    if(pFile == NULL)
        pFile = new TFile(pFileName, (bRecreate) ? "RECREATE" : "UPDATE");

    iWritten = writeObjects(pFile);

    if(bClose)
        delete pFile;

    if(pTmp != NULL)
        pTmp->cd();

    return iWritten;
}

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

void HSUDummyRec::print(void) const
{
// Print information about the class and its members

    TObject::Print();

    printf("Verbose: %s\n", (bVerbose) ? "YES" : "NO");

    printf("To write:\n");
    lToWrite.Print();

    printf("\nTo delete:\n");
    lToDelete.Print();
}

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

Bool_t HSUDummyRec::setOutFile(TFile *pFile, Bool_t bCloseOld)
{
// Set new output file (must be writable)
// If bCloseOld flag is on, then the old file is closed before

    if((pOutFile != NULL) && (bCloseOld == kTRUE))
        delete pOutFile;

    pOutFile = NULL;

    if(pFile == NULL)
        return kTRUE;

    if(( ! pFile->IsOpen()) || ( ! pFile->IsWritable()))
    {
        Error("setOutFile", "File %s is not writable", pFile->GetName());
        return kFALSE;
    }

    pOutFile = pFile;

    return kTRUE;
}

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

TFile* HSUDummyRec::openOutFile(const Char_t *pName, Bool_t bRecr)
{
// Open a new file for writing. The old file is closed.
// If bRecr is set, the file is recreated, otherwise updated.

    if(pOutFile != NULL)
    {
        delete pOutFile;
        pOutFile = NULL;
    }

    if(pName == NULL)
    {
        pName = sOutFileName.Data();

        if((pName == NULL) || (strlen(pName) < 1))
        {
            Error("openOutFile", "NULL file name");
            return NULL;
        }
    }

TFile  *pFile    = (TFile *)gROOT->GetListOfFiles()->FindObject(pName);
Bool_t  bCreated = kFALSE;

    if((pFile != NULL) && (bRecr))
    {
        delete pFile;
        pFile = NULL;
    }

    if(pFile == NULL)
    {
        pFile = new TFile(pName, (bRecr) ? "RECREATE" : "UPDATE");
        bCreated = kTRUE;
    }

    if(( ! pFile->IsOpen()) || ( ! pFile->IsWritable()))
    {
        Error("openOutFile", "Cannot open %s for writing", pName);

        if(bCreated)
            delete pFile;
    }
    else
        pOutFile = pFile;

    return pOutFile;
}

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

Bool_t HSUDummyRec::writeAndCloseOutFile(void)
{
// Write and close the output file

    if(pOutFile == NULL)
    {
        Error("writeAndCloseOutFile", "No output file");
        return kFALSE;
    }

    if(bVerbose)
        Warning("writeAndCloseOutFile", "writing ...");

    if(bWriteEvents)
    {
    TFile  *pOldFile = gFile;
    TNamed *pName;
    Char_t    s[1000];

        sprintf(s, "%d", iEvents);
        pName = new TNamed("events", s);

        pOutFile->cd();
        pName->Write();

        if(pOldFile != NULL)
            pOldFile->cd();

        delete pName;
    }

    pOutFile->Write();
    delete pOutFile;
    pOutFile = NULL;

    if(bVerbose)
        Warning("writeAndCloseOutFile", "ok ...");

    return kTRUE;
}

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

HSUIteratorObject::~HSUIteratorObject(void)
{
// Delete pIter if it is not NULL

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