00001
00002
00003
00004 #include <cassert>
00005 #include <iomanip>
00006 #include <iostream>
00007 #include <string>
00008 #include <sstream>
00009
00010 #include <TString.h>
00011
00012 #include "MessageService/MsgService.h"
00013 #include "Conventions/ReleaseType.h"
00014
00015 CVSID("$Id: ReleaseType.cxx,v 1.28 2009/12/18 06:41:43 asousa Exp $");
00016
00017 using std::string;
00018
00019
00020 bool ReleaseType::IsData(int type) {
00021 return ((type & ReleaseType::DataMCMask) == ReleaseType::kData);
00022 }
00023
00024 bool ReleaseType::IsMC(int type) {
00025 return ((type & ReleaseType::DataMCMask) > 0);
00026 }
00027
00028 bool ReleaseType::IsTest(int type) {
00029 return ((type & ReleaseType::RecoTestMask) > 0);
00030 }
00031
00032
00033
00034 bool ReleaseType::IsAvocado(int type) {
00035 return ((type & ReleaseType::DataMCMask) == ReleaseType::kAvocado);
00036 }
00037
00038 bool ReleaseType::IsBeet(int type) {
00039 return ((type & ReleaseType::DataMCMask) == ReleaseType::kBeet);
00040 }
00041
00042 bool ReleaseType::IsCarrot(int type) {
00043 return ((type & ReleaseType::DataMCMask) == ReleaseType::kCarrot);
00044 }
00045
00046 bool ReleaseType::IsDaikon(int type) {
00047 return ((type & ReleaseType::DataMCMask) == ReleaseType::kDaikon);
00048 }
00049
00050 bool ReleaseType::IsEggplant(int type) {
00051 return ((type & ReleaseType::DataMCMask) == ReleaseType::kEggplant);
00052 }
00053
00054 bool ReleaseType::IsFava(int type) {
00055 return ((type & ReleaseType::DataMCMask) == ReleaseType::kFava);
00056 }
00057
00058 bool ReleaseType::IsGarlic(int type) {
00059 return ((type & ReleaseType::DataMCMask) == ReleaseType::kGarlic);
00060 }
00061
00062 bool ReleaseType::IsHops(int type) {
00063 return ((type & ReleaseType::DataMCMask) == ReleaseType::kHops);
00064 }
00065
00066 bool ReleaseType::IsIceberg(int type) {
00067 return ((type & ReleaseType::DataMCMask) == ReleaseType::kIceberg);
00068 }
00069
00070 bool ReleaseType::IsJicama(int type) {
00071 return ((type & ReleaseType::DataMCMask) == ReleaseType::kJicama);
00072 }
00073
00074
00076
00077
00078
00079 bool ReleaseType::IsAsh(int type) {
00080 return ((type & ReleaseType::RecoMask) == ReleaseType::kAsh);
00081 }
00082
00083 bool ReleaseType::IsBirch(int type) {
00084 return ((type & ReleaseType::RecoMask) == ReleaseType::kBirch);
00085 }
00086
00087 bool ReleaseType::IsCedar(int type) {
00088 return ((type & ReleaseType::RecoMask) == ReleaseType::kCedar);
00089 }
00090
00091 bool ReleaseType::IsDogwood(int type) {
00092 return ((type & ReleaseType::RecoMask) == ReleaseType::kDogwood);
00093 }
00094
00095 bool ReleaseType::IsElm(int type) {
00096 return ((type & ReleaseType::RecoMask) == ReleaseType::kElm);
00097 }
00098
00099 bool ReleaseType::IsFir(int type) {
00100 return ((type & ReleaseType::RecoMask) == ReleaseType::kFir);
00101 }
00102
00103 bool ReleaseType::IsGinkgo(int type) {
00104 return ((type & ReleaseType::RecoMask) == ReleaseType::kGinkgo);
00105 }
00106
00107 bool ReleaseType::IsHickory(int type) {
00108 return ((type & ReleaseType::RecoMask) == ReleaseType::kHickory);
00109 }
00110
00111 bool ReleaseType::IsIvy(int type) {
00112 return ((type & ReleaseType::RecoMask) == ReleaseType::kIvy);
00113 }
00114
00115 bool ReleaseType::IsJuniper(int type) {
00116 return ((type & ReleaseType::RecoMask) == ReleaseType::kJuniper);
00117 }
00118
00120
00121
00122 ReleaseType::Release_t ReleaseType::GetRecoInfo(int type){
00123 return (type & (ReleaseType::RecoMask + ReleaseType::SubRecoMask));
00124 }
00125
00126 ReleaseType::Release_t ReleaseType::GetMCInfo(int type){
00127 return (type & (ReleaseType::DataMCMask + ReleaseType::SubMCMask));
00128 }
00129
00130
00132
00133
00134 int ReleaseType::GetMCSubVersion(int type)
00135 {
00136 int temp = type & SubMCMask;
00137 return temp/(SubMCMask/0xF);
00138 }
00139
00140 int ReleaseType::GetRecoSubVersion(int type)
00141 {
00142 int temp = type & SubRecoMask;
00143 return temp/(SubRecoMask/0xF);
00144 }
00145
00146
00147
00148 string ReleaseType::AsString(int type)
00149 {
00150 string dmc = "unknown";
00151 string reco = "unknownRel";
00152
00153 if(ReleaseType::IsMC(type)){
00154 if(ReleaseType::IsAvocado(type)) dmc = "Avocado";
00155 else if(ReleaseType::IsBeet(type)) dmc = "Beet";
00156 else if(ReleaseType::IsCarrot(type)) dmc = "Carrot";
00157 else if(ReleaseType::IsDaikon(type)) dmc = "Daikon";
00158 else if(ReleaseType::IsEggplant(type)) dmc = "Eggplant";
00159 else if(ReleaseType::IsFava(type)) dmc = "Fava";
00160 else if(ReleaseType::IsGarlic(type)) dmc = "Garlic";
00161 else if(ReleaseType::IsHops(type)) dmc = "Hops";
00162 else if(ReleaseType::IsIceberg(type)) dmc = "Iceberg";
00163 else if(ReleaseType::IsJicama(type)) dmc = "Jicama";
00164 else dmc = "unknown MC";
00165
00166 dmc += GetVersionString(ReleaseType::GetMCSubVersion(type));
00167 }else{
00168 dmc = "Data";
00169 }
00170
00171 if(ReleaseType::IsAsh(type)) reco = "Ash";
00172 if(ReleaseType::IsBirch(type)) reco = "Birch";
00173 if(ReleaseType::IsCedar(type)){
00174 if(ReleaseType::GetRecoInfo(type) == ReleaseType::kCedarPhy ||
00175 ReleaseType::GetRecoInfo(type) == ReleaseType::kR1_24_3 )
00176 reco = "CedarPhy";
00177 else reco = "Cedar";
00178 }
00179 if(ReleaseType::IsDogwood(type)) {
00180 if(ReleaseType::GetRecoInfo(type) == ReleaseType::kDogwood1 ||
00181 ReleaseType::GetRecoInfo(type) == ReleaseType::kR2_0_1 )
00182 reco = "Dogwood";
00183 else if(ReleaseType::GetRecoInfo(type) == ReleaseType::kDogwood2 ||
00184 ReleaseType::GetRecoInfo(type) == ReleaseType::kR2_0_2 )
00185 reco = "Dogwood";
00186 else if(ReleaseType::GetRecoInfo(type) == ReleaseType::kDogwood3 ||
00187 ReleaseType::GetRecoInfo(type) == ReleaseType::kR2_0_3 )
00188 reco = "Dogwood";
00189 else reco = "Dogwood";
00190 }
00191 if(ReleaseType::IsElm(type)) reco = "Elm";
00192 if(ReleaseType::IsFir(type)) reco = "Fir";
00193 if(ReleaseType::IsGinkgo(type)) reco = "Ginkgo";
00194 if(ReleaseType::IsHickory(type)) reco = "Hickory";
00195 if(ReleaseType::IsIvy(type)) reco = "Ivy";
00196 if(ReleaseType::IsJuniper(type)) reco = "Juniper";
00197
00198 if(ReleaseType::IsTest(type)) reco += "Test";
00199 reco += GetVersionString(ReleaseType::GetRecoSubVersion(type));
00200
00201 string name = reco + " " + dmc;
00202
00203 return name;
00204 }
00205
00206 std::string ReleaseType::GetVersionString(int val)
00207 {
00208 char dum[4];
00209 sprintf(dum, "V%02d", val);
00210 std::string temp = dum;
00211 return temp;
00212 }
00213
00214
00215 ReleaseType::Release_t ReleaseType::StringToType(const char* nameChar){
00216 string name(nameChar);
00217 Release_t type = 0x00;
00218
00219 string dmc = name.substr(1+name.find(" "));
00220 if(dmc.find("Data") != string::npos) type += kData;
00221
00222
00223 else if(dmc.find("Avocado") != string::npos ) type += kAvocado;
00224 else if(dmc.find("Beet") != string::npos) type += kBeet;
00225 else if(dmc.find("Carrot") != string::npos) type += kCarrot;
00226 else if(dmc.find("Daikon") != string::npos) type += kDaikon;
00227 else if(dmc.find("Eggplant") != string::npos) type += kEggplant;
00228 else if(dmc.find("Fava") != string::npos) type += kFava;
00229 else if(dmc.find("Garlic") != string::npos) type += kGarlic;
00230 else if(dmc.find("Hops") != string::npos) type += kHops;
00231 else if(dmc.find("Iceberg") != string::npos) type += kIceberg;
00232 else if(dmc.find("Jicama") != string::npos) type += kJicama;
00233
00234 else type = kUnknown;
00235
00236 string dmcver = dmc.substr(1 + dmc.find_last_of("V"));
00237 if(dmcver.find("00") != string::npos) type += k00;
00238 else if(dmcver.find("01") != string::npos) type += k01;
00239 else if(dmcver.find("02") != string::npos) type += k02;
00240 else if(dmcver.find("03") != string::npos) type += k03;
00241 else if(dmcver.find("04") != string::npos) type += k04;
00242 else if(dmcver.find("05") != string::npos) type += k05;
00243 else if(dmcver.find("06") != string::npos) type += k06;
00244 else if(dmcver.find("07") != string::npos) type += k07;
00245 else if(dmcver.find("08") != string::npos) type += k08;
00246 else if(dmcver.find("09") != string::npos) type += k09;
00247 else if(dmcver.find("10") != string::npos) type += k10;
00248 else type += k00;
00249
00250 string reco = name.substr(0, name.find(" "));
00251 if( type != kUnknown ){
00252 if (reco.find("Ash") != string::npos) type += kAsh;
00253 else if (reco.find("Birch") != string::npos) type += kBirch;
00254 else if (reco.find("Cedar") != string::npos){
00255 if(reco.find("CedarPhy") != string::npos) type += kCedar;
00256 else if(reco.find("Cedar_Phy") != string::npos) type += kCedar;
00257 else type += kCedar;
00258 }else if (reco.find("Dogwood") != string::npos){
00259 if(reco.find("Dogwood0") != string::npos) type += kDogwood;
00260 else if(reco.find("Dogwood1") != string::npos) type += kDogwood;
00261 else if(reco.find("Dogwood2") != string::npos) type += kDogwood;
00262 else if(reco.find("Dogwood3") != string::npos) type += kDogwood;
00263 type += kDogwood;
00264 }else if (reco.find("Elm") != string::npos) type += kElm;
00265 else if (reco.find("Fir") != string::npos) type += kFir;
00266 else if (reco.find("Ginkgo") != string::npos) type += kGinkgo;
00267 else if (reco.find("Hickory") != string::npos) type += kHickory;
00268 else if (reco.find("Ivy") != string::npos) type += kIvy;
00269 else if (reco.find("Juniper") != string::npos) type += kJuniper;
00270
00271 if(name.find("Test") != string::npos) type += kTest;
00272
00273
00274
00275 string rver = reco.substr(1 + reco.find_last_of("V"));
00276 if(rver.find("00") != string::npos) type += kR00;
00277 else if(rver.find("01") != string::npos) type += kR01;
00278 else if(rver.find("02") != string::npos) type += kR02;
00279 else if(rver.find("03") != string::npos) type += kR03;
00280 else if(rver.find("04") != string::npos) type += kR04;
00281 else if(rver.find("05") != string::npos) type += kR05;
00282 else if(rver.find("06") != string::npos) type += kR06;
00283 else if(rver.find("07") != string::npos) type += kR07;
00284 else if(rver.find("08") != string::npos) type += kR08;
00285 else if(rver.find("09") != string::npos) type += kR09;
00286 else if(rver.find("10") != string::npos) type += kR10;
00287 else type += kR00;
00288 }
00289
00290 return type;
00291 }
00292
00293 ReleaseType::Release_t ReleaseType::MakeReleaseType(std::string fTitle, std::string mcinfo)
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311 {
00312 string relName = fTitle;
00313 string reco = relName.substr(0,relName.find_first_of("("));
00314 ReleaseType::Release_t release = ReleaseType::kUnknown;
00315
00316
00317 if(strstr(reco.c_str(), "CEDAR") != 0 ||
00318 strstr(reco.c_str(), "CHERRY") != 0 ){
00319
00320 if(reco == "CEDAR"){
00321 release = ReleaseType::kCedar;
00322 string temp = relName.substr(22,1);
00323 if(temp == "1") release = ReleaseType::kR1_24_1;
00324 }
00325
00326 if(reco == "CEDAR_PHY"){
00327 release = ReleaseType::kCedarPhy;
00328 if(strstr(fTitle.c_str(), "Daikon") != 0) release = ReleaseType::kR1_24_2;
00329
00330 std::string software = relName.substr(relName.find_first_of(":")+1,
00331 relName.find_first_of(",") - relName.find_first_of(":") - 1);
00332
00333 if(software == "R1.24.2") release = ReleaseType::kR1_24_2;
00334 if(software == "R1.24.3") release = ReleaseType::kR1_24_3;
00335
00336 }
00337
00338 if(reco == "CHERRY") release = ReleaseType::kR1_24_Cal;
00339 }
00340 else release = ReleaseType::kBirch;
00341
00342
00343
00344 if(mcinfo.size() > 0){
00345 if(strstr(mcinfo.c_str(), "daikon") != 0)
00346 release += ReleaseType::kDaikon;
00347 else
00348 release += ReleaseType::kCarrot;
00349
00350 if(strstr(mcinfo.c_str(), "00") != 0) release += ReleaseType::k00;
00351 if(strstr(mcinfo.c_str(), "01") != 0) release += ReleaseType::k01;
00352 if(strstr(mcinfo.c_str(), "02") != 0) release += ReleaseType::k02;
00353 if(strstr(mcinfo.c_str(), "03") != 0) release += ReleaseType::k03;
00354 if(strstr(mcinfo.c_str(), "04") != 0) release += ReleaseType::k04;
00355 if(strstr(mcinfo.c_str(), "05") != 0) release += ReleaseType::k05;
00356 if(strstr(mcinfo.c_str(), "06") != 0) release += ReleaseType::k06;
00357 if(strstr(mcinfo.c_str(), "07") != 0) release += ReleaseType::k07;
00358 if(strstr(mcinfo.c_str(), "08") != 0) release += ReleaseType::k08;
00359 if(strstr(mcinfo.c_str(), "09") != 0) release += ReleaseType::k09;
00360 }
00361 else
00362 release += ReleaseType::kData;
00363
00364 return release;
00365 }
00366
00367
00368 const std::pair<std::string, std::string> ReleaseType::AsBatchString(const int type)
00369 {
00370
00371
00372
00373
00374
00375
00376 string dmc = "unknown_mc";
00377 string reco = "unknown_reco";
00378
00379 if(ReleaseType::IsMC(type))
00380 {
00381 if(ReleaseType::IsAvocado(type)) dmc = "avocado";
00382 else if(ReleaseType::IsBeet(type)) dmc = "beet";
00383 else if(ReleaseType::IsCarrot(type)) dmc = "carrot";
00384 else if(ReleaseType::IsDaikon(type)) dmc = "daikon";
00385 else if(ReleaseType::IsEggplant(type)) dmc = "eggplant";
00386 else if(ReleaseType::IsFava(type)) dmc = "fava";
00387 else if(ReleaseType::IsGarlic(type)) dmc = "garlic";
00388 else if(ReleaseType::IsHops(type)) dmc = "hops";
00389 else if(ReleaseType::IsIceberg(type)) dmc = "iceberg";
00390 else if(ReleaseType::IsJicama(type)) dmc = "jicama";
00391
00392 if(ReleaseType::GetMCSubVersion(type) < 0 || ReleaseType::GetMCSubVersion(type) > 99)
00393 {
00394 std::cerr << "ReleaseType::AsBatchString - bad Monte-Carlo version: "
00395 << ReleaseType::GetMCSubVersion(type) << std::endl;
00396 }
00397 else
00398 {
00399 std::stringstream mver;
00400 mver << std::setw(2) << std::setfill('0') << ReleaseType::GetMCSubVersion(type);
00401 dmc = dmc + "_" + mver.str();
00402 }
00403 }
00404 else
00405 {
00406 dmc = "data";
00407 }
00408
00409 if(ReleaseType::IsAsh(type)) reco = "ash";
00410 if(ReleaseType::IsBirch(type)) reco = "birch";
00411 if(ReleaseType::IsCedar(type))
00412 {
00413 if(ReleaseType::GetRecoSubVersion(type) == 0)
00414 {
00415 reco = "cedar";
00416 }
00417 else if(ReleaseType::GetRecoSubVersion(type) == 1)
00418 {
00419 reco = "cedar";
00420 }
00421 else if(ReleaseType::GetRecoSubVersion(type) == 2)
00422 {
00423 reco = "cedar_phy";
00424 }
00425 else if(ReleaseType::GetRecoSubVersion(type) == 3)
00426 {
00427 reco = "cedar_phy_bhcurv";
00428 }
00429 else
00430 {
00431 std::cerr << "ReleaseType::AsBatchString - bad cedar reconstuction version: "
00432 << ReleaseType::GetRecoSubVersion(type) << std::endl;
00433 }
00434 }
00435 if(ReleaseType::IsDogwood(type))
00436 {
00437 if(ReleaseType::GetRecoSubVersion(type) == 0)
00438 {
00439 reco = "dogwood0";
00440 }
00441 else if(ReleaseType::GetRecoSubVersion(type) == 1)
00442 {
00443 reco = "dogwood1";
00444 }
00445 else if(ReleaseType::GetRecoSubVersion(type) == 2)
00446 {
00447 reco = "dogwood2";
00448 }
00449 else if(ReleaseType::GetRecoSubVersion(type) == 3)
00450 {
00451 reco = "dogwood3";
00452 }
00453 else
00454 {
00455 std::cerr << "ReleaseType::AsBatchString - bad dogwood reconstuction version: "
00456 << ReleaseType::GetRecoSubVersion(type) << std::endl;
00457 }
00458 }
00459 if(ReleaseType::IsElm(type)) reco = "elm";
00460 if(ReleaseType::IsFir(type)) reco = "fir";
00461 if(ReleaseType::IsGinkgo(type)) reco = "ginkgo";
00462 if(ReleaseType::IsHickory(type)) reco = "hickory";
00463 if(ReleaseType::IsIvy(type)) reco = "ivy";
00464 if(ReleaseType::IsJuniper(type)) reco = "juniper";
00465
00466 if(ReleaseType::IsTest(type)) reco += "test";
00467
00468 return std::pair<std::string, std::string>(dmc, reco);
00469 }
00470
00471
00472 ReleaseType::Release_t ReleaseType::GetRecoRelease(
00473 const char* recoreleasename) {
00474
00475
00476 ReleaseType::Release_t result = kUnknown;
00477
00478 TString tmpstr(recoreleasename);
00479 tmpstr.ToLower();
00480 if ( strstr(tmpstr.Data(),"ash") != 0 ) result = kAsh;
00481 else if ( strstr(tmpstr.Data(),"birch") != 0 ) result = kBirch;
00482 else if ( strstr(tmpstr.Data(),"cedar") != 0 ) result = kCedar;
00483 else if ( strstr(tmpstr.Data(),"dogwood") != 0 ) result = kDogwood;
00484 else if ( strstr(tmpstr.Data(),"elm") != 0 ) result = kElm;
00485 else if ( strstr(tmpstr.Data(),"fir") != 0 ) result = kFir;
00486 else if ( strstr(tmpstr.Data(),"ginkgo") != 0 ) result = kGinkgo;
00487 else if ( strstr(tmpstr.Data(),"hickory") != 0 ) result = kHickory;
00488 else if ( strstr(tmpstr.Data(),"ivy") != 0 ) result = kIvy;
00489 else if ( strstr(tmpstr.Data(),"juniper") != 0 ) result = kJuniper;
00490
00491 if(result == kUnknown) return result;
00492
00493 if(strstr(tmpstr.Data(),"test") != 0) result |= kTest;
00494
00495 return result;
00496 }
00497
00498
00499 const char* ReleaseType::AsString(ReleaseType::ERecoRelease recorelease){
00500
00501
00502 switch ( recorelease ) {
00503
00504 case kAsh: return "Ash";
00505 case kBirch: return "Birch";
00506 case kCedar: return "Cedar";
00507 case kDogwood: return "Dogwood";
00508 case kElm: return "Elm";
00509 case kFir: return "Fir";
00510 case kGinkgo: return "Ginkgo";
00511 case kHickory: return "Hickory";
00512 case kIvy: return "Ivy";
00513 case kJuniper: return "Juniper";
00514 default:
00515 MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00516 << "ERecoRelease " << recorelease
00517 << ". Fix method. Abort." << endl;
00518 abort();
00519 }
00520
00521 }
00522
00523
00524 ReleaseType::Release_t ReleaseType::GetSubRecoRelease(
00525 const char* subrecoreleasename) {
00526
00527
00528
00529 TString tmpstr(subrecoreleasename);
00530 tmpstr.ToLower();
00531 if ( strstr(tmpstr.Data(),"00") != 0 ) return kR00;
00532 else if ( strstr(tmpstr.Data(),"01") != 0 ) return kR01;
00533 else if ( strstr(tmpstr.Data(),"02") != 0 ) return kR02;
00534 else if ( strstr(tmpstr.Data(),"03") != 0 ) return kR03;
00535 else if ( strstr(tmpstr.Data(),"04") != 0 ) return kR04;
00536 else if ( strstr(tmpstr.Data(),"05") != 0 ) return kR05;
00537 else if ( strstr(tmpstr.Data(),"06") != 0 ) return kR06;
00538 else if ( strstr(tmpstr.Data(),"07") != 0 ) return kR07;
00539 else if ( strstr(tmpstr.Data(),"08") != 0 ) return kR08;
00540 else if ( strstr(tmpstr.Data(),"09") != 0 ) return kR09;
00541 else if ( strstr(tmpstr.Data(),"10") != 0 ) return kR10;
00542 return kUnknown;
00543
00544 }
00545
00546
00547 const char* ReleaseType::AsString(ReleaseType::ESubRecoRelease subrecorelease){
00548
00549
00550 switch ( subrecorelease ) {
00551
00552 case kR00: return "00";
00553 case kR01: return "01";
00554 case kR02: return "02";
00555 case kR03: return "03";
00556 case kR04: return "04";
00557 case kR05: return "05";
00558 case kR06: return "06";
00559 case kR07: return "07";
00560 case kR08: return "08";
00561 case kR09: return "09";
00562 case kR10: return "10";
00563 default:
00564 MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00565 << "ESubRecoRelease " << subrecorelease
00566 << ". Fix method. Abort." << endl;
00567 abort();
00568 }
00569
00570 }
00571
00572
00573 ReleaseType::Release_t ReleaseType::GetDataMCRelease(
00574 const char* datamcreleasename) {
00575
00576
00577
00578
00579 TString tmpstr(datamcreleasename);
00580 tmpstr.ToLower();
00581 if ( strstr(tmpstr.Data(),"data") != 0 ) return kData;
00582 else if ( strstr(tmpstr.Data(),"avocado") != 0 ) return kAvocado;
00583 else if ( strstr(tmpstr.Data(),"beet") != 0 ) return kBeet;
00584 else if ( strstr(tmpstr.Data(),"carrot") != 0 ) return kCarrot;
00585 else if ( strstr(tmpstr.Data(),"daikon") != 0 ) return kDaikon;
00586 else if ( strstr(tmpstr.Data(),"eggplant") != 0 ) return kEggplant;
00587 else if ( strstr(tmpstr.Data(),"fava") != 0 ) return kFava;
00588 else if ( strstr(tmpstr.Data(),"garlic") != 0 ) return kGarlic;
00589 else if ( strstr(tmpstr.Data(),"hops") != 0 ) return kHops;
00590 else if ( strstr(tmpstr.Data(),"iceberg") != 0 ) return kIceberg;
00591 else if ( strstr(tmpstr.Data(),"jicama") != 0 ) return kJicama;
00592 return kUnknown;
00593
00594 }
00595
00596
00597
00598 const char* ReleaseType::AsString(ReleaseType::EDataMCRelease datamcrelease) {
00599
00600
00601 switch ( datamcrelease ) {
00602
00603 case kData: return "Data";
00604 case kAvocado: return "Avocado";
00605 case kBeet: return "Beet";
00606 case kCarrot: return "Carrot";
00607 case kDaikon: return "Daikon";
00608 case kEggplant: return "Eggplant";
00609 case kFava: return "Fava";
00610 case kGarlic: return "Garlic";
00611 case kHops: return "Hops";
00612 case kIceberg: return "Iceberg";
00613 case kJicama: return "Jicama";
00614 default:
00615 MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00616 << "EDataMCRelease " << datamcrelease
00617 << ". Fix method. Abort." << endl;
00618 abort();
00619 }
00620
00621 }
00622
00623
00624 ReleaseType::Release_t ReleaseType::GetSubMCRelease(
00625 const char* submcreleasename) {
00626
00627
00628
00629
00630 TString tmpstr(submcreleasename);
00631 tmpstr.ToLower();
00632 if ( strstr(tmpstr.Data(),"00") != 0 ) return k00;
00633 else if ( strstr(tmpstr.Data(),"01") != 0 ) return k01;
00634 else if ( strstr(tmpstr.Data(),"02") != 0 ) return k02;
00635 else if ( strstr(tmpstr.Data(),"03") != 0 ) return k03;
00636 else if ( strstr(tmpstr.Data(),"04") != 0 ) return k04;
00637 else if ( strstr(tmpstr.Data(),"05") != 0 ) return k05;
00638 else if ( strstr(tmpstr.Data(),"06") != 0 ) return k06;
00639 else if ( strstr(tmpstr.Data(),"07") != 0 ) return k07;
00640 else if ( strstr(tmpstr.Data(),"08") != 0 ) return k08;
00641 else if ( strstr(tmpstr.Data(),"09") != 0 ) return k09;
00642 else if ( strstr(tmpstr.Data(),"10") != 0 ) return k10;
00643 return kUnknown;
00644
00645 }
00646
00647
00648 const char* ReleaseType::AsString(ReleaseType::ESubMCRelease submcrelease) {
00649
00650
00651 switch ( submcrelease ) {
00652
00653 case k00: return "00";
00654 case k01: return "01";
00655 case k02: return "02";
00656 case k03: return "03";
00657 case k04: return "04";
00658 case k05: return "05";
00659 case k06: return "06";
00660 case k07: return "07";
00661 case k08: return "08";
00662 case k09: return "09";
00663 case k10: return "10";
00664 default:
00665 MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00666 << "ESubMCRelease " << submcrelease
00667 << ". Fix method. Abort." << endl;
00668 abort();
00669 }
00670
00671 }
00672
00673
00674 ReleaseType::Release_t ReleaseType::GetTestFlag(const char* testflagname)
00675 {
00676
00677
00678
00679
00680 TString tmpstr(testflagname);
00681 tmpstr.ToLower();
00682 if ( strstr(tmpstr.Data(),"test") != 0 ) return kTest;
00683 return kStandard;
00684
00685 }
00686
00687
00688 const char* ReleaseType::AsString(ReleaseType::ETestFlag testflag)
00689 {
00690 switch ( testflag) {
00691 case kStandard: return "";
00692 case kTest: return "test";
00693 default:
00694 MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00695 << "ETestFlag " << testflag
00696 << ". Fix method. Abort." << endl;
00697 abort();
00698 }
00699 }
00700
00701
00702 ReleaseType::Release_t ReleaseType::GetProductionRelease(
00703 const char* prodreleasename) {
00704
00705
00706
00707
00708
00709
00710
00711
00712 ReleaseType::Release_t result = kUnknown;
00713
00714 result = ReleaseType::GetRecoRelease(prodreleasename);
00715
00716 if ( result != kUnknown ) {
00717
00718 result |= ReleaseType::GetTestFlag(prodreleasename);
00719
00720 std::string tmpstr = std::string(prodreleasename);
00721
00722 char ver[2]; sprintf(ver, "0%c", tmpstr[tmpstr.size()-1]);
00723 ReleaseType::Release_t subver = ReleaseType::GetSubRecoRelease(ver);
00724 if ( subver != kUnknown ) result |= subver;
00725 }
00726 else {
00727 result = ReleaseType::GetDataMCRelease(prodreleasename);
00728 if ( result != kUnknown ) {
00729
00730 ReleaseType::Release_t subver
00731 = ReleaseType::GetSubMCRelease(prodreleasename);
00732 if ( subver != kUnknown ) result |= subver;
00733 }
00734 }
00735
00736 return result;
00737 }