ROOT logo
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HStart2CalRunPar
//
//   Container to keep mean offsets per strip for the start
//   for a list of runs. Speciality : This container is derived
//   from HParCond, but uses the ASCII IO write() from HStartParAsciiFileIo
//   due to formating problems.
//
//   //##################################################
//
//   HOWTO FILL the container in a macro:
//
//   HStart2CalRunPar p("HStart2CalRunPar_test","HStart2CalRunPar_test");
//
//   HStar2CalRunPars data;
//   data.setVal( 0 , 30.); // first strip offset
//   .... 7 more strips
//   data.print()
//
//   p.addRun(runID,&data,kFALSE); // set channel in macro to write to ROOT/ASCII
//   ..... more runIDs
//   p.finishRunList();  // sort the list of runIDs at the end
//                       // only needed when not reading from
//                       // ASCII, ROOT or ORACLE
//
//   //##################################################
//
//   HOWTO USE the container:
//
//   HStart2CalRunPar* p = (HStart2CalRunPar*)gHades->getRuntimeDb()->getContainer("Start2CalRunPar");
//   HStar2CalRunPars data;
//
//   Bool_t found = p->getRun(runid,&data);   // get params for a given runID
//
//   p->printParams();                        // print container content
//   p->printRun(runID);                      // print a single run
//   Bool_t ok = p->findRunID(runID);         // is this runID inside ?
//   Int_t first,last;
//   p->getRangeRunID(first,last);            // get first and last runID inside the container
//   Int_t n = p->getNRunIDs();               // get the number runIDs inside the container
//
//////////////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////////////


#include "hparamlist.h"
#include "hstart2calrunpar.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hrun.h"
#include "hdetpario.h"
#include "hparasciifileio.h"
#include "hdetparasciifileio.h"
#include "hstartparasciifileio.h"



ClassImp(HStart2CalRunPar)


HStart2CalRunPar::HStart2CalRunPar(const Char_t* name    ,
				   const Char_t* title   ,
				   const Char_t* context
				  ) : HParCond(name, title, context)
{
    fMIter = fMRunID.end();
}

HStart2CalRunPar::~HStart2CalRunPar()
{
    reset(1);
}

void HStart2CalRunPar::clear()
{
    fMIter = fMRunID.end();
}

void HStart2CalRunPar::printParams()
{
    // print the content of the container
    // in the order of all data per runID

    sort(fVRunID.begin(),fVRunID.end());

    Info("printParams()","Container: %s",GetName());

    for(UInt_t i = 0; i < fVRunID.size(); i ++ ){
	Int_t runId = fVRunID[i];
        printRun(runId);
    }
}

void HStart2CalRunPar::printRun(Int_t runID)
{
    // print a single run
    map<Int_t,HStart2CalRunPars*>::iterator iter = fMRunID.find(runID);
    if(iter != fMRunID.end()) {
	HStart2CalRunPars* p = iter->second;
	if(p){
	    p->print(runID);
	}
    } else {
	Warning("printRun()","RunID = %i not found!",runID);
    }
}

void HStart2CalRunPar::putParams(HParamList* l)
{
    if (!l) return;

    if(fVRunID.size() > 0)
    {
	sort(fVRunID.begin(),fVRunID.end());

	//-------------------------------------------------------
        // fill param list as linearized array
        Int_t npars = 8; //default

	if(fVRunID.size() > 0) {
	    map<Int_t,HStart2CalRunPars*>::iterator iter = fMRunID.find(fVRunID[0]);
	    if(iter != fMRunID.end()){
                 npars = iter->second->getNVals();
	    }
	}

	TArrayD arFull(fVRunID.size()*(npars+1)+1);
	arFull.SetAt(npars,0);

	for(UInt_t i = 0; i < fVRunID.size(); i ++ )
	{
	    Int_t runId = fVRunID[i];

	    map<Int_t,HStart2CalRunPars*>::iterator iter = fMRunID.find(runId);
	    if(iter != fMRunID.end()){
		HStart2CalRunPars* ar = iter->second;
		if(ar){
		    arFull.SetAt(runId, 0 + i*(npars+1) + 1);
		    for(Int_t j=0;j<npars;j++){
			arFull.SetAt(ar->getVal(j),j+1 + i*(npars+1) + 1);
		    }
		}
	    }
	}
	l->add("startOffsets", arFull);

    } else {
	Warning("putParams()","No Runs contained in map!");
    }
}

Bool_t HStart2CalRunPar::getParams(HParamList* l)
{
   if (!l) return kFALSE;

   TArrayD arFull;
   if (!l->fill("startOffsets",  &arFull))  return kFALSE;

   Int_t npars = (Int_t) arFull.At(0);
   Int_t nRuns = (arFull.GetSize()-1)/(npars+1);

   for(Int_t i = 0; i < nRuns; i ++ )
   {
       Int_t runId = (Int_t) arFull.At(i*(npars+1) + 1);

       HStart2CalRunPars p(npars);

       for(Int_t j = 0; j < npars; j ++){
	   p.setVal(j,arFull.At(j+1 + i*(npars+1) + 1));
       }
       addRun(runId,&p);
   }

   sort(fVRunID.begin(),fVRunID.end());

   return kTRUE;
}

Int_t HStart2CalRunPar::write(HParIo* output) {
    // writes the parameter container to the output
    

    TString name = output->ClassName();
    
    if(name == "HParAsciiFileIo"){

	HDetParIo* out = output->getDetParIo("HStartParIo");
	if(out){
	    return out->write(this);
	} else {
            Error("write()","HStartParIo not found, but needed for ASCII io write. You have to add the HStartDetector!");
	    return -1;
	}
    } else {
	HDetParIo* out = output->getDetParIo("HCondParIo");
	if(out){
	    return out->write(this);
	} else return -1;
    }
    return -1;
}

void HStart2CalRunPar::putAsciiHeader(TString& b)
{
    // header information needed by HStartParAsciiFileIo::write
    b = "# Start2 mean offsets per strip per run\n";
}

Int_t HStart2CalRunPar::write(fstream& pFile)
{
    // needed by HStartParAsciiFileIo::write
    sort(fVRunID.begin(),fVRunID.end());

    //-----------------------------------------------------
    pFile<<"startOffsets: Double_t \\"<<endl;
    Int_t npars = 8;
    if(fVRunID.size()>0){
	map<Int_t,HStart2CalRunPars*>::iterator iter = fMRunID.find(fVRunID[0]);
	HStart2CalRunPars* p = iter->second;
        npars = p->getNVals();
    }
    pFile<<" "<<npars;
    for(UInt_t i = 0; i < fVRunID.size(); i ++ ){
	Int_t runID = fVRunID[i];
	pFile<<" "<<runID;
	map<Int_t,HStart2CalRunPars*>::iterator iter = fMRunID.find(runID);
	if(iter != fMRunID.end()) {
	    HStart2CalRunPars* p = iter->second;
	    if(p){
		for(Int_t j = 0; j < p->getNVals(); j ++){
                    pFile<<" "<<p->getVal(j);
		}
                if(i<fVRunID.size()-1) pFile<<" \\"<<endl;
                else                   pFile<<endl;
	    }
	}
    }
    //-----------------------------------------------------
    return 0;
}
Bool_t HStart2CalRunPar::init(HParIo* inp,Int_t* set) {
    // intitializes the container from an input

    HRun* currentRun = gHades->getRuntimeDb()->getCurrentRun();
    Int_t runID      = currentRun->getRunId();

    Bool_t rc = kTRUE;

    if(!findRunID(runID))
    {
	HDetParIo* input = inp->getDetParIo("HCondParIo");

	rc = kFALSE;

	TString name = inp->ClassName();


	//--------------------------------------
	// clean up container : map + runid list
	reset(1);
	//--------------------------------------

	if (input) rc = input->init(this,set);

	if(rc && name == "HParAsciiFileIo"){
	    setStatic();
	}
    }

    return rc;
}



void HStart2CalRunPar::getRunIDList(TArrayI* ar)
{
    // coppies the list of runIDs into the TArrayI.
    // The array will be rested before.
    sort(fVRunID.begin(),fVRunID.end());
    if(ar && fVRunID.size() > 0){
	ar->Reset();

	ar->Set(fVRunID.size());
	for(UInt_t i = 0; i < fVRunID.size(); i ++ ){
	    ar->SetAt(fVRunID[i],i);
	}
    }

}

void HStart2CalRunPar::printRunIDList()
{
    Info("printRunIDList()","Container: %s",GetName());
    for(UInt_t i = 0; i < fVRunID.size(); i ++ ){
	cout<<setw(5)<<i<<" = "<<fVRunID[i]<<endl;
    }
}
Bool_t HStart2CalRunPar::getRangeRunID(Int_t& first,Int_t& last)
{
    // returns the first and last runID in the container

    sort(fVRunID.begin(),fVRunID.end());

    first = -1;
    last  = -1;

    if(fVRunID.size() > 0) {
	first = fVRunID[0];
	last  = fVRunID[fVRunID.size()-1];
    }

    return kTRUE;
}

Bool_t HStart2CalRunPar::findRunID(Int_t runId)
{
    // returns kTRUE if the runID exists
    if(find(fVRunID.begin(),fVRunID.end(),runId) != fVRunID.end()) return kTRUE;
    else return kFALSE;
}

void HStart2CalRunPar::reset(Int_t level) {

    // empty all maps, vectors
    // of runIds and data
    // level  : 0 reset map
    //          1 reset map + runID list

    map<Int_t,HStart2CalRunPars*>::iterator iter;
    for( iter = fMRunID.begin(); iter != fMRunID.end(); ++iter ) {
	HStart2CalRunPars* ar = iter->second;
	delete ar;
    }
    fMRunID.clear();

    fMIter = fMRunID.end();

    if(level > 0) fVRunID.clear();

}

Bool_t HStart2CalRunPar::removeRun(Int_t runID, Int_t level) {

    // remove all maps for this runID
    // level = 0 : remove Data for runID, but keep runID in list of runs
    //       = 1 (default): remove Data for runID, and runID in list of runs

    map<Int_t,HStart2CalRunPars*>::iterator iter = fMRunID.find(runID);

    if(iter != fMRunID.end())
    {
	HStart2CalRunPars* ar = iter->second;
        delete ar;

	fMRunID.erase( iter );

	if(level > 0){
	    vector<Int_t>::iterator iterv = find(fVRunID.begin(),fVRunID.end(),runID);
	    fVRunID.erase( iterv );
	}

	fMIter = fMRunID.end();  // iter could be invalid
    } else {
	Error("removeRun()","RunID = %i not found!",runID);
	return kFALSE;
    }

    return kTRUE;
}

Bool_t HStart2CalRunPar::addRun(Int_t runID,HStart2CalRunPars* data, Bool_t overwrite) {

    // return data for this run to data
    // if overwrite = kTRUE, an existing data will be overwritten (default=kFALSE)

    if(!data){
	Error("addRun()","Recieved NULL pointer for RunID = %i!",runID);
        return kFALSE;
    }

    fMIter = fMRunID.find(runID);

    if(fMIter == fMRunID.end() || (overwrite && fMIter != fMRunID.end() ) )
    {
	if(fMIter != fMRunID.end()) removeRun(runID,0); // keep runID
	else                        fVRunID.push_back(runID);

	HStart2CalRunPars* ar = new HStart2CalRunPars(data->getNVals());
        ar->copyVals(data);
	fMRunID[runID] = ar;

    } else {
        Error("addRun()","RunID = %i already exists !",runID);
        return kFALSE;
    }
    return kTRUE;
}

Bool_t HStart2CalRunPar::getRun(Int_t runID,HStart2CalRunPars* data) {

    // return data for this run to data
    // data in data will be overwritten!
    // if the size does not fit data will
    // be adapted

    if(!data) Error("addRun()","Recieved NULL pointer for RunID = %i!",runID);


    if(fMIter == fMRunID.end() || fMIter->first != runID) fMIter = fMRunID.find(runID);

    if(fMIter != fMRunID.end() )
    {
	HStart2CalRunPars* ar = fMIter->second;

	if(data->getNVals() < ar->getNVals()) {
	    Warning("getData()","Size of HStart2CalRunPars : in container %i vals, your input object %i vals ! ... Resize output object!",ar->getNVals(),data->getNVals());
	    data->setSize(ar->getNVals());
	}
	ar->getVals(data);

    } else {
        Error("getData()","RunID = %i not found !",runID);
	return kFALSE;
    }
    return kTRUE;
}

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