ROOT logo
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//


#include <TPDGCode.h>
#include "AliHMPIDParam.h"

Bool_t gGun1      =kFALSE;
Bool_t gGun7      =kFALSE;
Bool_t gGunZ      =kFALSE;
Bool_t gBox       =kFALSE;
Bool_t gHijing    =kFALSE;
Bool_t gHijingPara=kFALSE;
Bool_t gPythia    =kFALSE;

class HmpConfig : public TGMainFrame
{
RQ_OBJECT()
public:
          HmpConfig(const char*sFileName);
         ~HmpConfig()                    {Info("ctor","");Cleanup();}
         
  enum EVersOpts  {kNo=101,kVer0,kVer1,kVer2,kVer3,kTest, kDeclust=301,kSagita,kFeedback,kElNoise,kQe0=400,kQeNorm,kFlatIdx,kOptics};
  enum EGenTypes  {kGunZ=1,kGun1,kGun7,kBox,kHijing,kHijingPara,kPythia,kHmpLib,kNotUsed=999};
  
  enum EDetectors {kPIPE=1,kITS,kTPC,kTRD,kTOF,kFRAME,kMAG,kACORDE,kHALL,kPHOS,kT0,kFMD,kABSO,kPMD,kDIPO,kEMCAL,kVZERO,kMUON,kZDC,kSHILD};
  enum EProcesses {kDCAY=1,kPAIR,kCOMP,kPHOT,kPFIS,kDRAY,kANNI,kBREM,kMUNU,kCKOV,kHADR,kLOSS,kMULS,kRAYL,kALL};
  enum EBatchFlags{kAll=55,kHmp,kDdl,kDat,kRoo,kVtx,kTrk,kHlt,kPid,kAln,kRecoPar};
  enum EMagField  {kFld0,kFld2,kFld4,kFld5,kFld_2,kFld_4,kFld_5};
  
  Float_t Eta2Theta      (Float_t arg)  const{return (180./TMath::Pi())*2.*TMath::ATan(TMath::Exp(-arg));}
  
  void GuiHmp (TGHorizontalFrame *pMainF);  void WriteHmp (FILE *pF);  void HmpSlot   (Int_t ver);
  void GuiPhys (TGHorizontalFrame *pMainF);  void WritePhys (FILE *pF);  void PhysAddSlot(Int_t); void PhysRemSlot(Int_t);
  void GuiGen  (TGCompositeFrame  *pMainF);  void WriteGen  (FILE *pF);  void GenAddSlot (Int_t); void GenRemSlot (Int_t);
  void GuiDet  (TGHorizontalFrame *pMainF);  void WriteDet  (FILE *pF);  void DetAddSlot (Int_t); void DetRemSlot (Int_t);
  void GuiBatch(TGHorizontalFrame *pMainF);  void WriteBatch(        );  void SlotBatch  (Int_t); void SlotRec    (Bool_t); 
  
  void    WriteConfig();
  void    ExitSlot();
     
  TGButtonGroup *fVerBG,*fOptBG,*fQeBG; //Hmp widgets  
  TGButtonGroup *fMagBG;                //mag field widgets   
  TGButton      *fDecayerB;             //external decayer widgets
  
  TGComboBox        *fGenPidCO,*fGenPminCO,*fGenPmaxCO,*fGenChamCO,*fGenNprimCO; //generator widgets combos
  TGCompositeFrame  *fGenF;                                                     //generator widgets frames     
  TGButtonGroup     *fGenBG;                                                    //generator widgets
  
  TGButtonGroup *fDetBG,*fProcBG;                                               //detectors and processes sections
  TGCheckButton *fSimB,*fTraB;   TGButtonGroup *fSdiBG,*fDigBG,*fRawBG;         //sim section
  TGCheckButton *fRecB;          TGButtonGroup *fInpBG,*fCluBG,*fTrkBG;         //rec section
      //batch control widgets

   char         *fFileName;
};//class HmpConfig
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HmpConfig::HmpConfig(const char *sFileName):TGMainFrame(gClient->GetRoot(),700,400)
{
  fFileName=sFileName;

  AddFrame(pMainF=new TGHorizontalFrame(this,100,200)); //main horizontal frame
  
  GuiHmp (pMainF);
  GuiGen  (pMainF);   
  GuiDet  (pMainF);
  GuiPhys (pMainF);
  GuiBatch(pMainF);  
  
//File    
  AddFrame(pFileHF=new TGHorizontalFrame(this,100,200));
  pFileHF->AddFrame(pCrtTB=new TGTextButton(pFileHF,"Create"));
  pCrtTB->Connect("Clicked()","HmpConfig",this,"ExitSlot()");                                 
  pFileHF->AddFrame(new TGLabel(pFileHF,Form(" config file as %s",fFileName)));  
  
  MapSubwindows();   
  Resize(GetDefaultSize());
  SetWindowName("Create AliROOT scripts");
  MapWindow(); 
}//ctor
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::GuiHmp(TGHorizontalFrame *pMainHF)
{
  pMainHF->AddFrame(pLeftVF=new TGVerticalFrame(pMainHF,100,200));  
  pLeftVF->AddFrame(pHmpGF=new TGGroupFrame(pLeftVF,"HMPID"));
  pHmpGF->AddFrame(fVerBG=new TGButtonGroup(pHmpGF,""));  fVerBG->Connect("Pressed(Int_t)" ,"HmpConfig",this,"HmpVerSlot(Int_t)");
    new TGRadioButton(fVerBG,   "No"         ,kNo       );   
    new TGRadioButton(fVerBG,   "ver0"       ,kVer0     );
    new TGRadioButton(fVerBG,   "ver1"       ,kVer1     );  
    new TGRadioButton(fVerBG,   "ver2"       ,kVer2     ); 
    new TGRadioButton(fVerBG,   "ver3"       ,kVer3     ); fVerBG->SetButton(kVer3);
  pHmpGF->AddFrame(fOptBG=new TGButtonGroup(pHmpGF,""));  fOptBG->Connect("Pressed(Int_t)" ,"HmpConfig",this,"HmpVerSlot(Int_t)");
    new TGCheckButton(fOptBG,"Test run position"   ,kTest);       
    new TGCheckButton(fOptBG,"Unfold cluster    "  ,kDeclust);      fOptBG->SetButton(kDeclust);
    new TGCheckButton(fOptBG,"Wire sagitta      "  ,kSagita);       fOptBG->SetButton(kSagita);
    new TGCheckButton(fOptBG,"Photon feedback   "  ,kFeedback);     fOptBG->SetButton(kFeedback); 
    new TGCheckButton(fOptBG,"Electronic noise  "  ,kElNoise);     // fOptBG->SetButton(kElNoise); 
    new TGCheckButton(fOptBG,"C6F14 N=1.292     "  ,kFlatIdx);     
    new TGCheckButton(fOptBG,"Plot optics       "  ,kOptics);     
  pHmpGF->AddFrame(fQeBG=new TGButtonGroup(pHmpGF,""));
    new TGRadioButton(fQeBG,"QE=0"                 ,kQe0);       
    new TGRadioButton(fQeBG,"QE normal"            ,kQeNorm);       fQeBG->SetButton(kQeNorm);
  pLeftVF->AddFrame(fDecayerB=new TGCheckButton(pLeftVF,"Puthia decayer On/Off"));  fDecayerB->SetState(kButtonDown);
  pLeftVF->AddFrame(fMagBG=new TGButtonGroup(pLeftVF,"Mag field")); 
    new TGRadioButton(fMagBG,   "0.5 T"      ,kFld5   );
    new TGRadioButton(fMagBG,   "0.4 T"      ,kFld4   );
    new TGRadioButton(fMagBG,   "0.2 T"      ,kFld2   );  fMagBG->SetButton(kFld2);
    new TGRadioButton(fMagBG,   "0 T"        ,kFld0   );   
    new TGRadioButton(fMagBG,   "-0.2 T"     ,kFld_2  );
    new TGRadioButton(fMagBG,   "-0.4 T"     ,kFld_4  );
    new TGRadioButton(fMagBG,   "-0.5 T"     ,kFld_5  );
}//Hmp()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::HmpVerSlot(Int_t ver)  
{
  if(ver==kTest)    {fMagBG->SetButton(kFld0); fGenBG->SetButton(kGunZ); }
} 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::WriteHmp(FILE *pF)
{
  if(!fVerBG->GetButton(kNo)->GetState()){
    TString title;
    if(!fOptBG->GetButton(kSagita)  ->GetState())             fprintf(pF,"  AliHMPIDParam::fgIsWireSagita=kFALSE;\n");
    if(!fOptBG->GetButton(kFeedback)->GetState())             title+=" NoFeedBack ";
    if( fOptBG->GetButton(kElNoise) ->GetState())             fprintf(pF,"  AliHMPIDDigitizer::DoNoise(kTRUE);\n");
    if( fOptBG->GetButton(kTest)    ->GetState())             title+=" TestBeam ";
    if( fOptBG->GetButton(kOptics)  ->GetState())             title+=" ShowOptics ";
    if( fOptBG->GetButton(kFlatIdx) ->GetState())             title+=" FlatIdx ";
    if(title.Length()==0) title="Default";
    
    if     (fVerBG->GetButton(kVer0)->GetState())           fprintf(pF,"  new AliHMPIDv0(\"Gel %s\");\n\n",title.Data());    
    else if(fVerBG->GetButton(kVer1)->GetState())           fprintf(pF,"  new AliHMPIDv1(\"HMPID\",\"%s\");\n\n",title.Data());   
    else if(fVerBG->GetButton(kVer2)->GetState())           fprintf(pF,"  new AliHMPIDv2(\"HMPID\",\"%s\");\n\n",title.Data());   
    else if(fVerBG->GetButton(kVer3)->GetState())           fprintf(pF,"  new AliHMPIDv3(\"HMPID\",\"%s\");\n\n",title.Data());   
  }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::GuiPhys(TGHorizontalFrame *pMainHF)
{
  pMainHF->AddFrame(fProcBG=new TGButtonGroup(pMainHF,"Procs"));
  fProcBG->Connect("Pressed(Int_t)" ,"HmpConfig",this,"PhysAddSlot(Int_t)");
  fProcBG->Connect("Released(Int_t)","HmpConfig",this,"PhysRemSlot(Int_t)");
    new TGCheckButton(fProcBG,"ALL  ON/OFF"                 ,kALL)) ;
    new TGCheckButton(fProcBG,"DCAY Decay"                  ,kDCAY));  fProcBG->SetButton(kDCAY);       
    new TGCheckButton(fProcBG,"PAIR Pair production"        ,kPAIR));  fProcBG->SetButton(kPAIR);       
    new TGCheckButton(fProcBG,"COMP Compton"                ,kCOMP));  fProcBG->SetButton(kCOMP);
    new TGCheckButton(fProcBG,"PHOT"                        ,kPHOT));  fProcBG->SetButton(kPHOT);
    new TGCheckButton(fProcBG,"PFIS Photofission"           ,kPFIS));  
    new TGCheckButton(fProcBG,"DRAY Delta electrons"        ,kDRAY));  
    new TGCheckButton(fProcBG,"ANNI Annihilation"           ,kANNI));  fProcBG->SetButton(kANNI);       
    new TGCheckButton(fProcBG,"BREM Bremstraslung"          ,kBREM));  fProcBG->SetButton(kBREM);       
    new TGCheckButton(fProcBG,"MUNU Muon-Nuclear"           ,kMUNU));  fProcBG->SetButton(kMUNU);       
    new TGCheckButton(fProcBG,"CKOV Cerenkovs"              ,kCKOV));  fProcBG->SetButton(kCKOV);       
    new TGCheckButton(fProcBG,"HADR Hadronic interactions " ,kHADR));  fProcBG->SetButton(kHADR);       
    new TGCheckButton(fProcBG,"LOSS Energy losses"          ,kLOSS));  fProcBG->SetButton(kLOSS);       
    new TGCheckButton(fProcBG,"MULS Multiple scattering"    ,kMULS));  fProcBG->SetButton(kMULS);       
    new TGCheckButton(fProcBG,"RAYL Rayleigh scattering"    ,kRAYL));  fProcBG->SetButton(kRAYL);       
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::PhysAddSlot(Int_t id)
{//slot is invoked when any of physics check button is pressed
  if(id==kALL)  //if the pressed check button is kALL then switch on all the buttons 
    for(int i=1;i<=fProcBG->GetCount();i++) 
      fProcBG->SetButton(i,kButtonDown);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void  HmpConfig::PhysRemSlot(Int_t id)
{//slot is invoked when any of physics check button is released
  if(id==kALL) //if the released check button is kALL then switch off all the buttons 
    for(int i=1;i<=fProcBG->GetCount();i++) 
      fProcBG->SetButton(i,kButtonUp);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::WritePhys(FILE *pF)
{
  if(fProcBG->GetButton(kDCAY)->GetState()) fprintf(pF,"  gMC->SetProcess(\"DCAY\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"DCAY\",0);  ");
  if(fProcBG->GetButton(kPAIR)->GetState()) fprintf(pF,"  gMC->SetProcess(\"PAIR\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"PAIR\",0);  ");
  if(fProcBG->GetButton(kCOMP)->GetState()) fprintf(pF,"  gMC->SetProcess(\"COMP\",1);\n");else fprintf(pF,"  gMC->SetProcess(\"COMP\",0);\n");
  if(fProcBG->GetButton(kPHOT)->GetState()) fprintf(pF,"  gMC->SetProcess(\"PHOT\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"PHOT\",0);  ");
  if(fProcBG->GetButton(kPFIS)->GetState()) fprintf(pF,"  gMC->SetProcess(\"PFIS\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"PFIS\",0);  ");
  if(fProcBG->GetButton(kDRAY)->GetState()) fprintf(pF,"  gMC->SetProcess(\"DRAY\",1);\n");else fprintf(pF,"  gMC->SetProcess(\"DRAY\",0);\n");
  if(fProcBG->GetButton(kANNI)->GetState()) fprintf(pF,"  gMC->SetProcess(\"ANNI\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"ANNI\",0);  ");
  if(fProcBG->GetButton(kBREM)->GetState()) fprintf(pF,"  gMC->SetProcess(\"BREM\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"BREM\",0);  ");
  if(fProcBG->GetButton(kMUNU)->GetState()) fprintf(pF,"  gMC->SetProcess(\"MUNU\",1);\n");else fprintf(pF,"  gMC->SetProcess(\"MUNU\",0);\n");
  if(fProcBG->GetButton(kCKOV)->GetState()) fprintf(pF,"  gMC->SetProcess(\"CKOV\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"CKOV\",0);  ");
  if(fProcBG->GetButton(kHADR)->GetState()) fprintf(pF,"  gMC->SetProcess(\"HADR\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"HADR\",0);  ");
  if(fProcBG->GetButton(kLOSS)->GetState()) fprintf(pF,"  gMC->SetProcess(\"LOSS\",2);\n");else fprintf(pF,"  gMC->SetProcess(\"LOSS\",0);\n");
  if(fProcBG->GetButton(kMULS)->GetState()) fprintf(pF,"  gMC->SetProcess(\"MULS\",1);  ");else fprintf(pF,"  gMC->SetProcess(\"MULS\",0);  ");
  if(fProcBG->GetButton(kRAYL)->GetState()) fprintf(pF,"  gMC->SetProcess(\"RAYL\",1);\n");else fprintf(pF,"  gMC->SetProcess(\"RAYL\",0);\n");
  
  fprintf(pF,"\n");  
  fprintf(pF,"  gMC->SetCut(\"CUTGAM\",0.001);  "); fprintf(pF,"  gMC->SetCut(\"CUTELE\",0.001);  "); fprintf(pF,"  gMC->SetCut(\"CUTNEU\",0.001);\n"); 
  fprintf(pF,"  gMC->SetCut(\"CUTHAD\",0.001);  "); fprintf(pF,"  gMC->SetCut(\"CUTMUO\",0.001);  "); fprintf(pF,"  gMC->SetCut(\"BCUTE\" ,0.001);\n");
  fprintf(pF,"  gMC->SetCut(\"BCUTM\" ,0.001);  "); fprintf(pF,"  gMC->SetCut(\"DCUTE\" ,0.001);  "); fprintf(pF,"  gMC->SetCut(\"DCUTM\" ,0.001);\n"); 
  fprintf(pF,"  gMC->SetCut(\"PPCUTM\",0.001);  "); fprintf(pF,"  gMC->SetCut(\"TOFMAX\",1e10);\n\n"); 
}//WritePhys()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::GuiGen(TGCompositeFrame *pMainF)
{//generator configurator implemented as group of radio buttons
  pMainF->AddFrame(fGenF=new TGVerticalFrame(pMainF));//add generator vertical frame to horizontal main frame
  fGenF->AddFrame(fGenBG=new TGButtonGroup(fGenF,"Gene"));//add type button group to vertical generator frame
  fGenBG->Connect("Pressed(Int_t)","HmpConfig",this,"GenAddSlot(Int_t)"); fGenBG->Connect("Released(Int_t)","HmpConfig",this,"GenRemSlot(Int_t)");
    new TGCheckButton(fGenBG,"gun along z"           ,kGunZ);
    new TGCheckButton(fGenBG,"box in 1 chamber"      ,kGun1);
    new TGCheckButton(fGenBG,"box in 7 chambers"     ,kGun7);
    new TGCheckButton(fGenBG,"box HMPID phase space" ,kBox );  
    new TGCheckButton(fGenBG,"HIJING"                ,kHijing);
    new TGCheckButton(fGenBG,"HIJING para"           ,kHijingPara);
    new TGCheckButton(fGenBG,"Pythia"                ,kPythia);
    new TGCheckButton(fGenBG,"HMPID lib"             ,kHmpLib);
//N prims for box and Hijing para    
  fGenF->AddFrame(fGenNprimCO=new TGComboBox(fGenF,100)); //add N prims combo to generator vertical frame
  fGenNprimCO->AddEntry("not used"    ,kNotUsed);
  fGenNprimCO->AddEntry("N prim=1"    ,1);
  fGenNprimCO->AddEntry("N prim=2"    ,2);
  fGenNprimCO->AddEntry("N prim=5"    ,5);
  fGenNprimCO->AddEntry("N prim=10"   ,10);
  fGenNprimCO->AddEntry("N prim=20"   ,20);
  fGenNprimCO->AddEntry("N prim=50"   ,50);
  fGenNprimCO->AddEntry("N prim=100"  ,100);
  fGenNprimCO->AddEntry("N prim=500"  ,500);
  fGenNprimCO->AddEntry("N prim=1000" ,1000);
  fGenNprimCO->AddEntry("N prim=10000",10000);
  fGenNprimCO->AddEntry("N prim=80000",80000);  fGenNprimCO->Resize(160,20);   fGenNprimCO->Select(kNotUsed);
//PID    
  fGenF->AddFrame(fGenPidCO=new TGComboBox(fGenF,100)); //add pid combo to generator vertical frame
  fGenPidCO->AddEntry("not used"   ,kNotUsed);
  fGenPidCO->AddEntry("electron"   ,kElectron);
  fGenPidCO->AddEntry("positron"   ,kPositron);
  fGenPidCO->AddEntry("pion +"     ,kPiPlus);
  fGenPidCO->AddEntry("pion -"     ,kPiMinus);
  fGenPidCO->AddEntry("kaon +"     ,kKPlus);
  fGenPidCO->AddEntry("kaon -"     ,kKMinus);
  fGenPidCO->AddEntry("kaon 0"     ,kK0Short);    
  fGenPidCO->AddEntry("proton"     ,kProton);
  fGenPidCO->AddEntry("antiproton" ,kProtonBar);
  fGenPidCO->AddEntry("lambda"     ,kLambda0);
  fGenPidCO->AddEntry("antilambda" ,kLambda0Bar);  fGenPidCO->Resize(160,20); fGenPidCO->Select(kNotUsed);
//Pmin  
  fGenF->AddFrame(fGenPminCO=new TGComboBox(fGenF,100)); //add Pmin combo to generator vertical frame  
  fGenPminCO->AddEntry("not used",kNotUsed);
  for(Int_t i=5;i<=295;i+=5) fGenPminCO->AddEntry(Form("Pmin=%3.1f GeV",0.1*i), i); fGenPminCO->Resize(160,20); fGenPminCO->Select(kNotUsed);
//Pmax  
  fGenF->AddFrame(fGenPmaxCO=new TGComboBox(fGenF,100)); //add Pmax combo to generator vertical frame
  fGenPmaxCO->AddEntry("not used",kNotUsed);
  for(Int_t i=10;i<=295;i+=5) fGenPmaxCO->AddEntry(Form("Pmax=%3.1f GeV",0.1*i), i);  fGenPmaxCO->Resize(160,20); fGenPmaxCO->Select(kNotUsed);
//Chamber number  
  fGenF->AddFrame(fGenChamCO=new TGComboBox(fGenF,100)); //add chamber number combo to generator vertical frame
  fGenChamCO->AddEntry("not used",kNotUsed);
  for(int i=1;i<=7;i++) fGenChamCO->AddEntry(Form("Chamber %i",i-1),i);  fGenChamCO->Resize(160,20); fGenChamCO->Select(kNotUsed);
}//GuiGen()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::GenAddSlot(Int_t id)
{//is invoked when any of generator check button is pressed
  if(id==kGunZ){
    fGenBG->GetButton(kGun1)->SetEnabled(kFALSE);  fGenF->HideFrame(fGenNprimCO); fGenF->HideFrame(fGenPmaxCO);
    fGenBG->GetButton(kGun7)->SetEnabled(kFALSE);                                
    fGenBG->GetButton(kBox )->SetEnabled(kFALSE);  fGenPidCO->Select(kProton);    fGenPminCO->Select(25);
                                                   fGenF->HideFrame(fGenChamCO);
    gGunZ=!gGunZ;
  } 
  if(id==kGun1){
    fGenBG->GetButton(kGunZ)->SetEnabled(kFALSE);  fGenF->HideFrame(fGenNprimCO); fGenF->HideFrame(fGenPmaxCO); 
    fGenBG->GetButton(kGun7)->SetEnabled(kFALSE);  fGenPidCO->Select(kProton);    fGenPminCO->Select(25); fGenChamCO->Select(4);
    fGenBG->GetButton(kBox )->SetEnabled(kFALSE);  
    gGun1=!gGun1;
  }
  if(id==kGun7){
    fGenBG->GetButton(kGunZ)->SetEnabled(kFALSE);  fGenF->HideFrame(fGenNprimCO);
    fGenBG->GetButton(kGun1)->SetEnabled(kFALSE);                                fGenPidCO->Select(kProton); 
    fGenBG->GetButton(kBox )->SetEnabled(kFALSE);  fGenF->HideFrame(fGenPmaxCO); fGenPminCO->Select(25);
                                                   fGenF->HideFrame(fGenChamCO); 
    gGun7=!gGun7;
  } 
  if(id==kBox){
    fGenBG->GetButton(kGunZ)->SetEnabled(kFALSE);                                fGenNprimCO->Select(500);
    fGenBG->GetButton(kGun1)->SetEnabled(kFALSE);                                fGenPidCO  ->Select(kProton);
    fGenBG->GetButton(kGun7)->SetEnabled(kFALSE);                                fGenPminCO ->Select(15);       fGenPmaxCO->Select(15); 
                                                   fGenF->HideFrame(fGenChamCO);
    gBox=!gBox;
  }
  if(id==kHijing){
//    fGenBG->GetButton(kHijing)->ChangeBackground(0xff0000);
    fGenBG->GetButton(kHijingPara)->SetEnabled(kFALSE);
    fGenBG->GetButton(kPythia)->SetEnabled(kFALSE);
    gHijing=!gHijing;
  }
  if(id==kHijingPara){
    fGenBG->GetButton(kHijing)->SetEnabled(kFALSE);   fGenNprimCO->Select(500);
    fGenBG->GetButton(kPythia)->SetEnabled(kFALSE);
    gHijingPara=!gHijingPara;
  }
  if(id==kPythia){
    fGenBG->GetButton(kHijing)->SetEnabled(kFALSE);
    fGenBG->GetButton(kHijingPara)->SetEnabled(kFALSE);
    gPythia=!gPythia;
  }
}//GenAddSlot()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::GenRemSlot(Int_t id)
{//is invoked when any of generator check button is released
  if(id==kGunZ&&!gGunZ){
    fGenBG->GetButton(kGun1)->SetEnabled();  fGenF->ShowFrame(fGenNprimCO);                                                                  
    fGenBG->GetButton(kGun7)->SetEnabled();                                     fGenPidCO  ->Select(kNotUsed);
    fGenBG->GetButton(kBox )->SetEnabled();  fGenF->ShowFrame(fGenPmaxCO);      fGenPminCO ->Select(kNotUsed);
  } 
  if(id==kGun1&&!gGun1){
    fGenBG->GetButton(kGunZ)->SetEnabled();  fGenF->ShowFrame(fGenNprimCO);
    fGenBG->GetButton(kGun7)->SetEnabled();                                     fGenPidCO  ->Select(kNotUsed);
    fGenBG->GetButton(kBox )->SetEnabled();  fGenF->ShowFrame(fGenPmaxCO);      fGenPminCO ->Select(kNotUsed);  
                                                                                fGenChamCO ->Select(kNotUsed); 
  }
  if(id==kGun7&&!gGun7){
    fGenBG->GetButton(kGunZ)->SetEnabled();  fGenF->ShowFrame(fGenNprimCO);
    fGenBG->GetButton(kGun1)->SetEnabled();                                     fGenPidCO  ->Select(kNotUsed);
    fGenBG->GetButton(kBox )->SetEnabled();  fGenF->ShowFrame(fGenPmaxCO);      fGenPminCO ->Select(kNotUsed); 
                                             fGenF->ShowFrame(fGenChamCO); 
  } 
  if(id==kBox&&!gBox){
    fGenBG->GetButton(kGunZ)->SetEnabled();                                     fGenNprimCO->Select(kNotUsed);
    fGenBG->GetButton(kGun1)->SetEnabled();                                     fGenPidCO  ->Select(kNotUsed);
    fGenBG->GetButton(kGun7)->SetEnabled();                                     fGenPminCO ->Select(kNotUsed);   fGenPmaxCO->Select(kNotUsed);
                                                                                fGenChamCO ->Select(kNotUsed);
  }
  if(id==kHijing&&!gHijing){
//    fGenBG->GetButton(kHijing)->ChangeBackground(0xbebebe);
    fGenBG->GetButton(kHijingPara)->SetEnabled();
    fGenBG->GetButton(kPythia)->SetEnabled();
  }
  if(id==kHijingPara&&!gHijingPara){
    fGenBG->GetButton(kHijing)->SetEnabled();                                   fGenNprimCO->Select(kNotUsed);
    fGenBG->GetButton(kPythia)->SetEnabled();
  }
  if(id==kPythia&&!gPythia){
    fGenBG->GetButton(kHijing)->SetEnabled();
    fGenBG->GetButton(kHijingPara)->SetEnabled();
  }
}//GenRemSlot()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::WriteGen(FILE *pF)
{

  CheckGeometry();
  
  AliHMPIDParam *pP = AliHMPIDParam::Instance();

  Int_t pid=fGenPidCO->GetSelected();
  Float_t pmin=0.1*fGenPminCO->GetSelected(); //particle momentum, GeV
  Float_t pmax=0.1*fGenPmaxCO->GetSelected(); //particle momentum, GeV
  
  if(fGenBG->GetButton(kHijing)->GetState()==kButtonDown     ||
     fGenBG->GetButton(kHijingPara)->GetState()==kButtonDown ||
     fGenBG->GetButton(kPythia)->GetState()==kButtonDown) {;}
  else {fprintf(pF,"  AliGenCocktail *pG=new AliGenCocktail();\n\n");}
  
  if(fGenBG->GetButton(kGunZ)->GetState()==kButtonDown)//1 particle along Z axis 
    fprintf(pF,"  AliGenFixed *pGz=new AliGenFixed(1); pGz->SetPart(%i); pGz->SetMomentum(%.1f); pGz->SetOrigin(0,0,-200); pG->AddGenerator(pGz,\"Gz\",1);\n",pid,pmin);
  
  if(fGenBG->GetButton(kGun1)->GetState()==kButtonDown){//1 gun towards 1 HMPID chamber
    Int_t ch = fGenChamCO->GetSelected()-1;
    fprintf(pF,"  AliGenBox *pGB=new AliGenBox(1); pGB->SetPart(%i); pGB->SetMomentumRange(%.1f,%.1f);\n",pid,pmin,pmin+0.5); 
    fprintf(pF,"   pGB->SetThetaRange(%.1f,%.1f);   pGB->SetPhiRange(%.1f,%.1f);  pG->AddGenerator(pGB,\"g\",1);//Chamber %i\n",
                                                       pP->ChThMin(ch),pP->ChThMax(ch),pP->ChPhiMin(ch),pP->ChPhiMax(ch),ch);
  }
  
  if(fGenBG->GetButton(kGun7)->GetState()==kButtonDown){//7 guns towards 7 HMPID chambers
    for(Int_t ich=0;ich<7;ich++) {
      fprintf(pF,"  AliGenBox *pGB%i=new AliGenBox(1); pGB%i->SetPart(%i); pGB%i->SetMomentumRange(%.1f,%.1f);\n",ich,ich,pid,ich,pmin,pmin+0.5); 
      fprintf(pF,"   pGB%i->SetThetaRange(%.1f,%.1f);   pGB%i->SetPhiRange(%.1f,%.1f);  pG->AddGenerator(pGB%i,\"g%i\",1);//Chamber %i\n",
                                        ich,pP->ChThMin(ich),pP->ChThMax(ich),ich,pP->ChPhiMin(ich),pP->ChPhiMax(ich),ich,ich,ich);
    }
  }  
    
  if(fGenBG->GetButton(kBox)->GetState()==kButtonDown){// box towards HMPID phase space
    fprintf(pF,"  AliGenBox *pB=new AliGenBox(%i);      pB->SetPart(%i);       pB->SetMomentumRange(%.1f,%.1f);\n",(int)fGenNprimCO->GetSelected(),pid,pmin,pmax); 
    fprintf(pF,"             pB->SetThetaRange(65,115); pB->SetPhiRange(5,55); pG->AddGenerator(pB,\"b\",1);\n");
  }     
  
  if(fGenBG->GetButton(kHijing)->GetState()==kButtonDown){//normal HIJING
    fprintf(pF,"  AliGenHijing *pH=new AliGenHijing(-1);           pH->SetEnergyCMS(5500);        pH->SetReferenceFrame(\"CMS\");\n");
    fprintf(pF,"                pH->SetProjectile(\"A\", 208, 82);   pH->SetTarget(\"A\", 208, 82);   pH->SetJetQuenching(0);\n");      
    fprintf(pF,"                pH->SetShadowing(0);               pH->KeepFullEvent();           pH->SetSelectAll(0);\n");
    fprintf(pF,"                pH->SetImpactParameterRange(0, 5); //fermi\n");
    fprintf(pF,"                AliGenerator *gener = (AliGenerator*)pH; \n");
    fprintf(pF,"                gener->SetOrigin(0, 0, 0);    // vertex position \n");
    fprintf(pF,"                gener->SetSigma(0, 0, 5.3);   // Sigma in (X,Y,Z) (cm) on IP position \n");
    fprintf(pF,"                gener->SetCutVertexZ(1.);     // Truncate at 1 sigma \n");
    fprintf(pF,"                gener->SetVertexSmear(kPerEvent);  \n");
    fprintf(pF,"                gener->SetTrackingFlag(1); \n");
    fprintf(pF,"                gener->Init(); \n\n");
  }
  
  if(fGenBG->GetButton(kHijingPara)->GetState()==kButtonDown){//parametrized HIJING 
    fprintf(pF,"  AliGenHIJINGpara *pHP=new AliGenHIJINGpara(%i);\n",(int)fGenNprimCO->GetSelected());
    fprintf(pF,"  pHP->SetMomentumRange(0,999); pHP->SetThetaRange(%f,%f); pHP->SetPhiRange(0,360);\n",Eta2Theta(8),Eta2Theta(-8));
    fprintf(pF,"                AliGenerator *gener = (AliGenerator*)pHP; \n");
    fprintf(pF,"                gener->SetOrigin(0, 0, 0);    // vertex position \n");
    fprintf(pF,"                gener->SetSigma(0, 0, 5.3);   // Sigma in (X,Y,Z) (cm) on IP position \n");
    fprintf(pF,"                gener->SetCutVertexZ(1.);     // Truncate at 1 sigma \n");
    fprintf(pF,"                gener->SetVertexSmear(kPerEvent);  \n");
    fprintf(pF,"                gener->SetTrackingFlag(1); \n");
    fprintf(pF,"                gener->Init(); \n\n");
  }
      
  if(fGenBG->GetButton(kPythia)->GetState()==kButtonDown){//Pythia
    fprintf(pF,"  AliGenPythia *pP=new AliGenPythia(-1);\n");
    fprintf(pF,"  pP->SetMomentumRange(0,999);\n");
    fprintf(pF,"  pP->SetYRange(-12,12);  pP->SetPtRange(0,1000);      pP->SetStrucFunc(kCTEQ4L);\n");
    fprintf(pF,"  pP->SetProcess(kPyMb);  pP->SetEnergyCMS(14000);\n");      
    fprintf(pF,"                AliGenerator *gener = (AliGenerator*)pP; \n");
    fprintf(pF,"                gener->SetOrigin(0, 0, 0);    // vertex position \n");
    fprintf(pF,"                gener->SetSigma(0, 0, 5.3);   // Sigma in (X,Y,Z) (cm) on IP position \n");
    fprintf(pF,"                gener->SetCutVertexZ(1.);     // Truncate at 1 sigma \n");
    fprintf(pF,"                gener->SetVertexSmear(kPerEvent);  \n");
    fprintf(pF,"                gener->SetTrackingFlag(1); \n");
    fprintf(pF,"                gener->Init(); \n\n");
  }
  if(fGenBG->GetButton(kHijing)->GetState()==kButtonDown     ||
     fGenBG->GetButton(kHijingPara)->GetState()==kButtonDown ||
     fGenBG->GetButton(kPythia)->GetState()==kButtonDown) continue;
  else fprintf(pF,"  pG->Init();\n\n");
}//WriteGenerator()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::GuiDet(TGHorizontalFrame *pMainHF)
{
  pMainHF->AddFrame(fDetBG=new TGButtonGroup(pMainHF,"Dets"));
  fDetBG->Connect("Pressed(Int_t)" ,"HmpConfig",this,"DetAddSlot(Int_t)");
  fDetBG->Connect("Released(Int_t)","HmpConfig",this,"DetRemSlot(Int_t)");
    new TGCheckButton(fDetBG,"PIPE"  ,kPIPE));     new TGCheckButton(fDetBG,"ITS"   ,kITS));   new TGCheckButton(fDetBG,"TPC"   ,kTPC));
    new TGCheckButton(fDetBG,"TRD"   ,kTRD));      new TGCheckButton(fDetBG,"TOF"   ,kTOF));   new TGCheckButton(fDetBG,"FRAME" ,kFRAME));         
    new TGCheckButton(fDetBG,"MAG"   ,kMAG));      new TGCheckButton(fDetBG,"ACORDE",kACORDE));new TGCheckButton(fDetBG,"HALL"  ,kHALL));         
    new TGCheckButton(fDetBG,"PHOS"  ,kPHOS));     new TGCheckButton(fDetBG,"T0"    ,kT0));    new TGCheckButton(fDetBG,"FMD"   ,kFMD));         
    new TGCheckButton(fDetBG,"ABSO"  ,kABSO));     new TGCheckButton(fDetBG,"PMD"   ,kPMD));   new TGCheckButton(fDetBG,"DIPO"  ,kDIPO));         
    new TGCheckButton(fDetBG,"EMCAL" ,kEMCAL));    new TGCheckButton(fDetBG,"VZERO" ,kVZERO)); new TGCheckButton(fDetBG,"MUON"  ,kMUON));         
    new TGCheckButton(fDetBG,"ZDC"   ,kZDC));      new TGCheckButton(fDetBG,"SHILD" ,kSHILD));         
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::DetAddSlot(Int_t id)
{//slot is invoked when any detector check button is pressed
  if(id==kTRD || id==kTOF)     //TRD and TOF geometries depend on FRAME 
    fDetBG->SetButton(kFRAME);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::DetRemSlot(Int_t id)
{//slot is invoked when any detector check button is released
  if(id==kFRAME){
    fDetBG->SetButton(kTRD,kFALSE); //switch off TRD and TOF when FRAME is switched off by user hence TRD&TOF depend on FRAME
    fDetBG->SetButton(kTOF,kFALSE);
  }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::WriteDet(FILE *pF)
{
//CORE detectors                  
  if(fDetBG->GetButton(kPIPE )->GetState()) fprintf(pF,"\n  new AliPIPEv3(\"PIPE\",\"Beam Pipe\");\n");
  if(fDetBG->GetButton(kSHILD)->GetState()) fprintf(pF,"\n  new AliSHILv3(\"SHIL\",\"Shielding Version 2\");\n");  
  if(fDetBG->GetButton(kITS  )->GetState()) fprintf(pF,"\n  new AliITSv11(\"ITS\",\"ITS v11\");\n");
  
  if(fDetBG->GetButton(kTPC  )->GetState())  fprintf(pF,"\n  new AliTPCv2(\"TPC\",\"Default\");\n");
  if(fDetBG->GetButton(kFRAME)->GetState())  fprintf(pF,"\n  AliFRAMEv2 *pFrame=new AliFRAMEv2(\"FRAME\",\"Space Frame\"); pFrame->SetHoles(1);\n");
  if(fDetBG->GetButton(kTRD  )->GetState())  fprintf(pF,"\n  AliTRD *pTrd=new AliTRDv1(\"TRD\",\"TRD slow simulator\");\n");  
  if(fDetBG->GetButton(kTOF  )->GetState())  {
    fprintf(pF,"\n  AliTOF *TOF = new AliTOFv6T0(\"TOF\", \"normal TOF\");\n");
    fprintf(pF,"\n  Int_t TOFSectors[18]={-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0,-1,-1,0,0,0};\n");
    fprintf(pF,"\n  TOF->SetTOFSectors(TOFSectors);\n");
  }
//central detectors  behind HMPID
  if(fDetBG->GetButton(kMAG  )->GetState()) fprintf(pF,"\n  new AliMAG(\"MAG\",\"Magnet\");\n");  
  if(fDetBG->GetButton(kHALL )->GetState()) fprintf(pF,"\n  new AliHALL(\"HALL\",\"Alice Hall\");\n");
//forward detectors  
  if(fDetBG->GetButton(kFMD  )->GetState()) fprintf(pF,"\n  AliFMD *FMD = new AliFMDv1(\"FMD\",\"normal FMD\");\n");
  if(fDetBG->GetButton(kABSO )->GetState()) fprintf(pF,"\n  AliABSO *ABSO = new AliABSOv3(\"ABSO\",\"Muon absorber\");\n");
  if(fDetBG->GetButton(kDIPO )->GetState()) fprintf(pF,"\n  AliDIPO *DIPO = new AliDIPOv3(\"DIPO\",\"Dipole version 3\");\n");
  if(fDetBG->GetButton(kMUON )->GetState()) fprintf(pF,"\n  AliMUON *MUON = new AliMUONv1(\"MUON\",\"default\");\n");
  if(fDetBG->GetButton(kPMD  )->GetState()) fprintf(pF,"\n  AliPMD *PMD = new AliPMDv1(\"PMD\",\"normal PMD\");\n");
  if(fDetBG->GetButton(kT0)->GetState())    fprintf(pF,"\n  AliT0 *T0 = new AliT0v1(\"T0\",\"T0 Detector\");\n");
  if(fDetBG->GetButton(kVZERO)->GetState()) fprintf(pF,"\n  AliVZERO *VZERO = new AliVZEROv7(\"VZERO\",\"normal VZERO\");\n");
  if(fDetBG->GetButton(kZDC  )->GetState()) fprintf(pF,"\n  AliZDC *ZDC = new AliZDCv2(\"ZDC\",\"normal ZDC\");\n");
//different phase space detectors  
  if(fDetBG->GetButton(kPHOS )->GetState()) fprintf(pF,"\n  AliPHOS *PHOS = new AliPHOSv1(\"PHOS\",\"IHEP\");\n");
  if(fDetBG->GetButton(kEMCAL)->GetState()) fprintf(pF,"\n  AliEMCAL *EMCAL = new AliEMCALv2(\"EMCAL\",\"SHISH_77_TRD1_2X2_FINAL_110DEG\");\n");
  if(fDetBG->GetButton(kACORDE  )->GetState()) fprintf(pF,"\n  AliACORDE *ACORDE = new AliACORDEv1(\"ACORDE\",\"normal ACORDE\");\n");
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::GuiBatch(TGHorizontalFrame *pMainF)
{
  TGGroupFrame *pSimF=new TGGroupFrame(pMainF,"Simu"); pMainF->AddFrame(pSimF);    
  pSimF->AddFrame(fSimB =new TGCheckButton(pSimF,"Enable"));      fSimB->Connect("Toggled(Bool_t)","HmpConfig",this,"SlotSim(Bool_t)"); 
  pSimF->AddFrame(fTraB =new TGCheckButton(pSimF,"Transport")); 
  pSimF->AddFrame(fSdiBG=new TGButtonGroup(pSimF,""));
  pSimF->AddFrame(fDigBG=new TGButtonGroup(pSimF,""));
  pSimF->AddFrame(fRawBG=new TGButtonGroup(pSimF,""));
    new TGRadioButton(fSdiBG,  "No SDigits"      ,kNo   );   
    new TGRadioButton(fSdiBG,  "SDigits CORE"    ,kAll  );  
    new TGRadioButton(fSdiBG,  "SDigits HMPID"   ,kHmp  );   
    new TGRadioButton(fDigBG,  "No Digits"       ,kNo   );   
    new TGRadioButton(fDigBG,  "Digits CORE"     ,kAll  );  
    new TGRadioButton(fDigBG,  "Digits HMPID"    ,kHmp  );   
    new TGRadioButton(fRawBG,  "No RAW files"    ,kNo   );   
    new TGRadioButton(fRawBG,  "RAW DDL"         ,kDdl  );
    new TGRadioButton(fRawBG,  "RAW DATE"        ,kDat  );
    new TGRadioButton(fRawBG,  "RAW ROOT"        ,kRoo  );
    
    
  TGCompositeFrame *pRecF=new TGGroupFrame(pMainF,"Reco"); pMainF->AddFrame(pRecF);    
  pRecF->AddFrame(fRecB =new TGCheckButton(pRecF,"Enable"));  fRecB->Connect("Toggled(Bool_t)","HmpConfig",this,"SlotRec(Bool_t)"); 
  pRecF->AddFrame(fInpBG=new TGButtonGroup(pRecF,""   ));       
  pRecF->AddFrame(fCluBG=new TGButtonGroup(pRecF,""   ));       
  pRecF->AddFrame(fTrkBG=new TGButtonGroup(pRecF,""   ));     fTrkBG->Connect("Pressed(Int_t)","HmpConfig",this,"SlotBatch(Int_t)");  
    new TGRadioButton(fInpBG,  "From sim"        ,kNo     );  
    new TGRadioButton(fInpBG,  "From DDL"        ,kDdl    );  
    new TGRadioButton(fInpBG,  "From DATE"       ,kDat    );  
    new TGRadioButton(fInpBG,  "From ROOT"       ,kRoo    );  
    new TGRadioButton(fCluBG,  "No Clusters"     ,kNo     );  
    new TGRadioButton(fCluBG,  "Clusters CORE"   ,kAll    );  
    new TGRadioButton(fCluBG,  "Clusters HMPID"  ,kHmp    );   

    new TGCheckButton(fTrkBG,  "Apply RecoParamV1" ,kRecoPar);  

    new TGCheckButton(fTrkBG,  "Load Align data" ,kAln    );  
    new TGCheckButton(fTrkBG,  "Prim vertex"     ,kVtx    );  
    new TGCheckButton(fTrkBG,  "ESD tracks"      ,kTrk    );  
    new TGCheckButton(fTrkBG,  "Assign PID"      ,kPid    );
    
  fSimB->SetState(kButtonDown); fTraB->SetState(kButtonDown); fSdiBG->SetButton(kHmp); fDigBG->SetButton(kHmp); fRawBG->SetButton(kNo);
  fRecB->SetState(kButtonDown);                               fInpBG->SetButton(kNo);  fCluBG->SetButton(kHmp); 
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::SlotSim(Bool_t isChk)
{
  if(isChk){
    fTraB                  ->SetState(kButtonDown);
    
    fSdiBG->GetButton(kNo )->SetState(kButtonEngaged);
    fSdiBG->GetButton(kAll)->SetState(kButtonEngaged);
    fSdiBG->GetButton(kHmp)->SetState(kButtonDown);
    
    fDigBG->GetButton(kNo )->SetState(kButtonEngaged);
    fDigBG->GetButton(kAll)->SetState(kButtonEngaged);
    fDigBG->GetButton(kHmp)->SetState(kButtonDown);
    
    fRawBG->GetButton(kNo )->SetState(kButtonDown);
    fRawBG->GetButton(kDdl)->SetState(kButtonEngaged);
    fRawBG->GetButton(kDat)->SetState(kButtonEngaged);
    fRawBG->GetButton(kRoo)->SetState(kButtonEngaged);    
  }else{
    fTraB                  ->SetState(kButtonDisabled);
    
    fSdiBG->GetButton(kNo )->SetState(kButtonDisabled);
    fSdiBG->GetButton(kAll)->SetState(kButtonDisabled);
    fSdiBG->GetButton(kHmp)->SetState(kButtonDisabled);
    
    fDigBG->GetButton(kNo )->SetState(kButtonDisabled);
    fDigBG->GetButton(kAll)->SetState(kButtonDisabled);
    fDigBG->GetButton(kHmp)->SetState(kButtonDisabled);
    
    fRawBG->GetButton(kNo )->SetState(kButtonDisabled);
    fRawBG->GetButton(kDdl)->SetState(kButtonDisabled);
    fRawBG->GetButton(kDat)->SetState(kButtonDisabled);
    fRawBG->GetButton(kRoo)->SetState(kButtonDisabled);    
  }  
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::SlotRec(Bool_t isChk)
{
  if(isChk){
    fInpBG->GetButton(kNo) ->SetState(kButtonDown);
    fInpBG->GetButton(kDdl)->SetState(kButtonEngaged);
    fInpBG->GetButton(kDat)->SetState(kButtonEngaged);
    fInpBG->GetButton(kRoo)->SetState(kButtonEngaged);
    
    fCluBG->GetButton(kNo) ->SetState(kButtonEngaged);
    fCluBG->GetButton(kAll)->SetState(kButtonEngaged);
    fCluBG->GetButton(kHmp)->SetState(kButtonDown);
    
    fTrkBG->GetButton(kRecoPar)->SetState(kButtonEngaged);
    fTrkBG->GetButton(kAln)->SetState(kButtonEngaged);
    fTrkBG->GetButton(kVtx)->SetState(kButtonEngaged);
    fTrkBG->GetButton(kTrk)->SetState(kButtonEngaged);
    fTrkBG->GetButton(kPid)->SetState(kButtonEngaged);
  }else{
    fInpBG->GetButton(kNo) ->SetState(kButtonDisabled);
    fInpBG->GetButton(kDdl)->SetState(kButtonDisabled);
    fInpBG->GetButton(kDat)->SetState(kButtonDisabled);
    fInpBG->GetButton(kRoo)->SetState(kButtonDisabled);
    
    fCluBG->GetButton(kNo) ->SetState(kButtonDisabled);
    fCluBG->GetButton(kAll)->SetState(kButtonDisabled);
    fCluBG->GetButton(kHmp)->SetState(kButtonDisabled);
    
    fTrkBG->GetButton(kRecoPar)->SetState(kButtonDisabled);
    fTrkBG->GetButton(kAln)->SetState(kButtonDisabled);
    fTrkBG->GetButton(kVtx)->SetState(kButtonDisabled);
    fTrkBG->GetButton(kTrk)->SetState(kButtonDisabled);
    fTrkBG->GetButton(kPid)->SetState(kButtonDisabled);
  }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::SlotBatch(Int_t id)
{//slot is invoked when any button in fTrkBG is pressed
  if(id==kTrk){
    fSdiBG->SetButton(kAll); 
    fDigBG->SetButton(kAll);
    fCluBG->SetButton(kAll);
    fDetBG->SetButton(kITS);
    fDetBG->SetButton(kTPC);
    fDetBG->SetButton(kTRD);
  }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::WriteBatch()
{//creates Batch.C file
  TString det;
  if(fDetBG->GetButton(kITS  )->GetState())  det+="ITS ";
  if(fDetBG->GetButton(kTPC  )->GetState())  det+="TPC ";
  if(fDetBG->GetButton(kTRD  )->GetState())  det+="TRD ";
  if(fDetBG->GetButton(kTOF  )->GetState())  det+="TOF ";
  if(!fVerBG->GetButton(kNo)->GetState())    det+="HMPID ";
  char *sBatchName="sim";
  FILE *fp=fopen(Form("%s.C",sBatchName),"w"); if(!fp){Info("CreateSim","Cannot open output file: %s.C",sBatchName);return;}
  
                                                    fprintf(fp,"void %s(Int_t iNevt=1,Bool_t isDbg=kFALSE,char *sCfg=\"Config.C\")\n{\n",sBatchName);
                                                    fprintf(fp,"  gSystem->Exec(\"rm -rf hlt hough gphysi* fort* ZZZ* raw*\");  //remove garbage\n"); 
                                                    fprintf(fp,"  gBenchmark->Start(\"ALICE\"); TDatime time;      //start benchmarking\n\n");
                                                       
                                                    fprintf(fp,"  if(isDbg) AliLog::SetGlobalDebugLevel(AliLog::kDebug);\n");
//simulation section  
  if(fSimB->GetState()){                            fprintf(fp,"  gSystem->Exec(\"rm -rf *.root \");               //remove previous simulation\n"); 
                                                    fprintf(fp,"  gSystem->Exec(\"rm -rf *.date \");               //remove previous simulation\n"); 
                                                    fprintf(fp,"  AliSimulation *pSim=new AliSimulation(sCfg);   //init simulation\n");
                                                       
    if(fTraB->GetState())                           fprintf(fp,"  pSim->SetRunSimulation(kTRUE);                 //transport and hits creation\n");
    else                                            fprintf(fp,"  pSim->SetRunSimulation(kFALSE);                //no transport and hits creation\n");
    
    if     (fSdiBG->GetButton(kNo )->GetState())    fprintf(fp,"  pSim->SetMakeSDigits(\"\");                      //no sdigits\n");
    else if(fSdiBG->GetButton(kAll)->GetState())    fprintf(fp,"  pSim->SetMakeSDigits(\"%s\");                   //sdigits for all\n",det.Data());
    else if(fSdiBG->GetButton(kHmp)->GetState())    fprintf(fp,"  pSim->SetMakeSDigits(\"HMPID\");                 //sdigits for HMPID\n");
    
    if     (fDigBG->GetButton(kNo )->GetState())    fprintf(fp,"  pSim->SetMakeDigits(\"\");                       //no digits\n");
    else if(fDigBG->GetButton(kAll)->GetState())    fprintf(fp,"  pSim->SetMakeDigits(\"%s\");                    //digits for all\n",det.Data());
    else if(fDigBG->GetButton(kHmp)->GetState())    fprintf(fp,"  pSim->SetMakeDigits(\"HMPID\");                  //digits for HMPID\n");
    
    if     (fRawBG->GetButton(kDdl)->GetState())    fprintf(fp,"  pSim->SetWriteRawData(\"%s\");                  //raw data as DDL\n",det.Data());
    else if(fRawBG->GetButton(kDat)->GetState())    fprintf(fp,"  pSim->SetWriteRawData(\"%s\",\"raw.date\");     //raw data as DATE\n",det.Data());
    else if(fRawBG->GetButton(kRoo)->GetState())    fprintf(fp,"  pSim->SetWriteRawData(\"%s\",\"raw.root\");     //raw data as ROOT\n",det.Data());

                                                    fprintf(fp,"  pSim->SetRunHLT(\"\");                           //no HLT stuff\n");   
                                                    fprintf(fp,"  pSim->SetRunQA(\":\");                           //no QA\n");
                                                    fprintf(fp,"  pSim->Run(iNevt);                                //run iNevt events\n  delete pSim;\n\n");
  }//sim section
                                                    fprintf(fp,"  cout<<\"!!!!!!!!!!!!Info in <sim.C>: Start time: \";time.Print();\n");
                                                    fprintf(fp,"  cout<<\"!!!!!!!!!!!!Info in <sim.C>: Stop  time: \";time.Set();  time.Print();\n");
                                                    fprintf(fp,"  gBenchmark->Show(\"ALICE\");\n");
  
                                                    fprintf(fp,"  gSystem->Exec(\"touch ZZZ______finished_______SSS\");\n");
                                                    fprintf(fp,"  gSystem->Exec(\"aliroot -q rec.C &\");\n}\n");
  fclose(fp);  
// rec section
  char *sBatchName="rec";
  FILE *fp=fopen(Form("%s.C",sBatchName),"w"); if(!fp){Info("CreateRec","Cannot open output file: %s.C",sBatchName);return;}
  
                                                    fprintf(fp,"void %s()\n{\n",sBatchName);
                                                    fprintf(fp,"  gSystem->Exec(\"rm -rf *RRR \");  //remove garbage\n"); 
  if(fRecB->GetState()){
/*
       if(fMagBG->GetButton(kFld0)->GetState())     fprintf(fp,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",2, 0,1,10.,2));//no field\n");
  else if(fMagBG->GetButton(kFld2)->GetState())     fprintf(fp,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",2, 1,1,10,AliMagF::k2kG));//0.2 Tesla field\n");
  else if(fMagBG->GetButton(kFld4)->GetState())     fprintf(fp,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",2, 1,1,10,AliMagF::k4kG));//0.4 Tesla field\n");
  else if(fMagBG->GetButton(kFld5)->GetState())     fprintf(fp,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",2, 1,1,10,AliMagF::k5kG));//0.5 Tesla field\n");
  else if(fMagBG->GetButton(kFld_2)->GetState())    fprintf(fp,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",2,-1,1,10,AliMagF::k2kG));//-0.2 Tesla field\n");
  else if(fMagBG->GetButton(kFld_4)->GetState())    fprintf(fp,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",2,-1,1,10,AliMagF::k4kG));//-0.4 Tesla field\n");
  else if(fMagBG->GetButton(kFld_5)->GetState())    fprintf(fp,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",2,-1,1,10,AliMagF::k5kG));//-0.5 Tesla field\n");
*/  
                                                    fprintf(fp,"  AliReconstruction *pRec=new AliReconstruction;\n");
                                                    fprintf(fp,"  gBenchmark->Start(\"ALICE\"); TDatime time;      //start benchmarking\n\n");
                                                    
    //---------------------------------------------
    if     (fTrkBG->GetButton(kRecoPar)->GetState())
      { 
         fprintf(fp,"  AliHMPIDRecoParamV1 *hmpidRecoParam=AliHMPIDReconstructor::GetRecoParam();    //Get the HMPID reco param\n"); 
         fprintf(fp,"  hmpidRecoParam->SetHmpUserCut(0,4);                                            //eg cut for UserCutSigma (Values: ch0)\n");
         fprintf(fp,"  hmpidRecoParam->SetHmpUserCut(1,4);                                            //eg cut for UserCutSigma (Values: ch1)\n");
         fprintf(fp,"  hmpidRecoParam->SetHmpUserCut(2,4);                                            //eg cut for UserCutSigma (Values: ch2)\n");
         fprintf(fp,"  hmpidRecoParam->SetHmpUserCut(3,4);                                            //eg cut for UserCutSigma (Values: ch3)\n");
         fprintf(fp,"  hmpidRecoParam->SetHmpUserCut(4,4);                                            //eg cut for UserCutSigma (Values: ch4)\n");
         fprintf(fp,"  hmpidRecoParam->SetHmpUserCut(5,4);                                            //eg cut for UserCutSigma (Values: ch5)\n");
         fprintf(fp,"  hmpidRecoParam->SetHmpUserCut(6,4);                                            //eg cut for UserCutSigma (Values: ch6)\n");
         fprintf(fp,"  AliHMPIDReconstructor::SetRecoParam(hmpidRecoParam);                          //Pass the RecoPar to the Reconstructor\n");
      }
    //---------------------------------------------                                                    
                                                    
    if     (fInpBG->GetButton(kNo )->GetState())    fprintf(fp,"  pRec->SetInput(\"\");                       //from digits\n");   
    else if(fInpBG->GetButton(kDdl)->GetState())    fprintf(fp,"  pRec->SetInput(\"./\");                     //from raw data in DDL format\n");                                            
    else if(fInpBG->GetButton(kDat)->GetState())    fprintf(fp,"  pRec->SetInput(\"raw.date\");          //from raw data in DATE format\n");                                            
    else if(fInpBG->GetButton(kRoo)->GetState())    fprintf(fp,"  pRec->SetInput(\"raw.root\");               //from raw data in ROOT format\n");                                            
    
    if     (fCluBG->GetButton(kAll) ->GetState())   fprintf(fp,"  pRec->SetRunLocalReconstruction(\"%s\");   //clusters for all detectors\n",det.Data());
    else if(fCluBG->GetButton(kHmp) ->GetState())   fprintf(fp,"  pRec->SetRunLocalReconstruction(\"HMPID\"); //clusters for HMPID only\n");
    else if(fCluBG->GetButton(kNo)  ->GetState())   fprintf(fp,"  pRec->SetRunLocalReconstruction(\"\");      //no clusters\n");
    
    
    
    if     (fTrkBG->GetButton(kAln)->GetState())    fprintf(fp,"  pRec->SetLoadAlignData(\"%s\");            //with misalignment\n",det.Data());     
    else                                            fprintf(fp,"  pRec->SetLoadAlignData(\"\");               //no misalignment\n");     
  
    if     (fTrkBG->GetButton(kVtx)->GetState())    fprintf(fp,"  pRec->SetRunVertexFinder(kTRUE);          //primary vertex\n");
    else                                            fprintf(fp,"  pRec->SetRunVertexFinder(kFALSE);         //no primary vertex\n");    
    
    if     (fTrkBG->GetButton(kTrk)   ->GetState()) fprintf(fp,"  pRec->SetRunTracking(\"%s\");              //tracking\n",det.Data());
    else                                            fprintf(fp,"  pRec->SetRunTracking(\"\");                 //no tracking\n");    
    
    if     (fTrkBG->GetButton(kPid)   ->GetState()) fprintf(fp,"  pRec->SetFillESD(\"%s\");                  //prob vect\n",det.Data());      
    else                                            fprintf(fp,"  pRec->SetFillESD(\"\");                     //no prob vect\n");
    
                                                    fprintf(fp,"  pRec->Run();delete pRec;\n\n");         
  }//rec part                                                       
//benchmarks  
                                                    fprintf(fp,"  cout<<\"!!!!!!!!!!!!Info in <rec.C>: Start time: \";time.Print();\n");
                                                    fprintf(fp,"  cout<<\"!!!!!!!!!!!!Info in <rec.C>: Stop  time: \";time.Set();  time.Print();\n");
                                                    fprintf(fp,"  gBenchmark->Show(\"ALICE\");\n");
  
                                                    fprintf(fp,"  gSystem->Exec(\"touch ZZZ______finished_______RRR\");\n}\n");
  fclose(fp);  
}//WriteBatch()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::ExitSlot()
{
//slot to be invoked by clik on the Create button  
  if(fSimB->GetState()) WriteConfig();
  WriteBatch();
  SendCloseMessage();
  gApplication->Terminate(0);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void HmpConfig::WriteConfig()
{   
  FILE *pF=fopen(fFileName,"w"); if(!pF){Info("CreateConfigFile","Cannot open output file:%sn",fFileName);return;}
  
  fprintf(pF,"void Config()\n");
  fprintf(pF,"{\n");
  fprintf(pF,"\n  ::Info(\"\\n\\n\\n----------> HMPID private config\",\"Start\");\n"); 
//Random
  fprintf(pF,"  gRandom->SetSeed(123456);//put 0 to use system time\n\n");    
//File
  fprintf(pF,"  AliRunLoader *pAL=AliRunLoader::Open(\"galice.root\",AliConfig::GetDefaultEventFolderName(),\"recreate\");\n");    
  fprintf(pF,"  pAL->SetCompressionLevel(2);\n");
  fprintf(pF,"  pAL->SetNumberOfEventsPerFile(1000);\n");
  fprintf(pF,"  gAlice->SetRunLoader(pAL);\n\n");
//Decayer  
  if(fDecayerB->GetState()==kButtonDown){
    fprintf(pF,"  gSystem->Load(\"liblhapdf.so\"); // Parton density functions \n");
    fprintf(pF,"  gSystem->Load(\"libEGPythia6.so\");   // TGenerator interface \n");
    fprintf(pF,"  gSystem->Load(\"libpythia6.so\");   // Pythia \n");
    fprintf(pF,"  gSystem->Load(\"libAliPythia6.so\");   // ALICE specifics implementations \n\n");
//Geant  
    fprintf(pF,"  gSystem->Load(\"libgeant321\");\n");
    fprintf(pF,"  new TGeant3TGeo(\"C++ Interface to Geant3\");\n\n");
  
    fprintf(pF,"  AliDecayer *pDecayer=new AliDecayerPythia();\n");
    fprintf(pF,"  pDecayer->SetForceDecay(kAll);\n"); 
    fprintf(pF,"  pDecayer->Init();\n"); 
    fprintf(pF,"  gMC->SetExternalDecayer(pDecayer);\n\n");
  }
  WritePhys(pF); //physics processes
  
//Field
       if(fMagBG->GetButton(kFld0)->GetState())     fprintf(pF,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",0,0,AliMagF::k5kGUniform));// NO field\n");
  else if(fMagBG->GetButton(kFld2)->GetState())     fprintf(pF,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",1,1,AliMagF::k2kG));//0.2 Tesla field\n");
       //  else if(fMagBG->GetButton(kFld4)->GetState())     fprintf(pF,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",1,1,AliMagF::k4kG));//0.4 Tesla field\n");
  else if(fMagBG->GetButton(kFld5)->GetState())     fprintf(pF,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",1,1,AliMagF::k5kG));//0.5 Tesla field\n");
  else if(fMagBG->GetButton(kFld_2)->GetState())    fprintf(pF,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",-1,1,AliMagF::k2kG));//-0.2 Tesla field\n");
       //  else if(fMagBG->GetButton(kFld_4)->GetState())    fprintf(pF,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",-1,1,AliMagF::k4kG));//-0.4 Tesla field\n");
  else if(fMagBG->GetButton(kFld_5)->GetState())    fprintf(pF,"  TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\",-1,1,AliMagF::k5kG));//-0.5 Tesla field\n");
  
  fprintf(pF,"  pAL->CdGAFile();\n\n");                                 //????       
//Generator 
  WriteGen(pF);//generator
//BODY-ALIC 
  fprintf(pF,"  new AliBODY(\"BODY\",\"Alice envelop\");\n\n");
//HMPID
  WriteHmp(pF);  //private HMPID part
  WriteDet(pF);  //other detectors
//end of Config.C file:  
  fprintf(pF,"\n  ::Info(\"----------> HMPID private config\",\"Stop\\n\\n\\n\");\n");
//
  fprintf(pF,"}\n");
  fclose(pF);  
}//WriteConfig()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void Hconfig()
{
   new HmpConfig("Config.C");
}   
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void CheckGeometry()
{
  if(!(gSystem->IsFileInIncludePath("geometry.root"))) {
    Printf("");
    Printf("HConfig needs for the geometry.root file. Please put it in the current dir!. Bye.");
    Printf("");
    gApplication->Terminate(0);
  }
}
 Hconfig.C:1
 Hconfig.C:2
 Hconfig.C:3
 Hconfig.C:4
 Hconfig.C:5
 Hconfig.C:6
 Hconfig.C:7
 Hconfig.C:8
 Hconfig.C:9
 Hconfig.C:10
 Hconfig.C:11
 Hconfig.C:12
 Hconfig.C:13
 Hconfig.C:14
 Hconfig.C:15
 Hconfig.C:16
 Hconfig.C:17
 Hconfig.C:18
 Hconfig.C:19
 Hconfig.C:20
 Hconfig.C:21
 Hconfig.C:22
 Hconfig.C:23
 Hconfig.C:24
 Hconfig.C:25
 Hconfig.C:26
 Hconfig.C:27
 Hconfig.C:28
 Hconfig.C:29
 Hconfig.C:30
 Hconfig.C:31
 Hconfig.C:32
 Hconfig.C:33
 Hconfig.C:34
 Hconfig.C:35
 Hconfig.C:36
 Hconfig.C:37
 Hconfig.C:38
 Hconfig.C:39
 Hconfig.C:40
 Hconfig.C:41
 Hconfig.C:42
 Hconfig.C:43
 Hconfig.C:44
 Hconfig.C:45
 Hconfig.C:46
 Hconfig.C:47
 Hconfig.C:48
 Hconfig.C:49
 Hconfig.C:50
 Hconfig.C:51
 Hconfig.C:52
 Hconfig.C:53
 Hconfig.C:54
 Hconfig.C:55
 Hconfig.C:56
 Hconfig.C:57
 Hconfig.C:58
 Hconfig.C:59
 Hconfig.C:60
 Hconfig.C:61
 Hconfig.C:62
 Hconfig.C:63
 Hconfig.C:64
 Hconfig.C:65
 Hconfig.C:66
 Hconfig.C:67
 Hconfig.C:68
 Hconfig.C:69
 Hconfig.C:70
 Hconfig.C:71
 Hconfig.C:72
 Hconfig.C:73
 Hconfig.C:74
 Hconfig.C:75
 Hconfig.C:76
 Hconfig.C:77
 Hconfig.C:78
 Hconfig.C:79
 Hconfig.C:80
 Hconfig.C:81
 Hconfig.C:82
 Hconfig.C:83
 Hconfig.C:84
 Hconfig.C:85
 Hconfig.C:86
 Hconfig.C:87
 Hconfig.C:88
 Hconfig.C:89
 Hconfig.C:90
 Hconfig.C:91
 Hconfig.C:92
 Hconfig.C:93
 Hconfig.C:94
 Hconfig.C:95
 Hconfig.C:96
 Hconfig.C:97
 Hconfig.C:98
 Hconfig.C:99
 Hconfig.C:100
 Hconfig.C:101
 Hconfig.C:102
 Hconfig.C:103
 Hconfig.C:104
 Hconfig.C:105
 Hconfig.C:106
 Hconfig.C:107
 Hconfig.C:108
 Hconfig.C:109
 Hconfig.C:110
 Hconfig.C:111
 Hconfig.C:112
 Hconfig.C:113
 Hconfig.C:114
 Hconfig.C:115
 Hconfig.C:116
 Hconfig.C:117
 Hconfig.C:118
 Hconfig.C:119
 Hconfig.C:120
 Hconfig.C:121
 Hconfig.C:122
 Hconfig.C:123
 Hconfig.C:124
 Hconfig.C:125
 Hconfig.C:126
 Hconfig.C:127
 Hconfig.C:128
 Hconfig.C:129
 Hconfig.C:130
 Hconfig.C:131
 Hconfig.C:132
 Hconfig.C:133
 Hconfig.C:134
 Hconfig.C:135
 Hconfig.C:136
 Hconfig.C:137
 Hconfig.C:138
 Hconfig.C:139
 Hconfig.C:140
 Hconfig.C:141
 Hconfig.C:142
 Hconfig.C:143
 Hconfig.C:144
 Hconfig.C:145
 Hconfig.C:146
 Hconfig.C:147
 Hconfig.C:148
 Hconfig.C:149
 Hconfig.C:150
 Hconfig.C:151
 Hconfig.C:152
 Hconfig.C:153
 Hconfig.C:154
 Hconfig.C:155
 Hconfig.C:156
 Hconfig.C:157
 Hconfig.C:158
 Hconfig.C:159
 Hconfig.C:160
 Hconfig.C:161
 Hconfig.C:162
 Hconfig.C:163
 Hconfig.C:164
 Hconfig.C:165
 Hconfig.C:166
 Hconfig.C:167
 Hconfig.C:168
 Hconfig.C:169
 Hconfig.C:170
 Hconfig.C:171
 Hconfig.C:172
 Hconfig.C:173
 Hconfig.C:174
 Hconfig.C:175
 Hconfig.C:176
 Hconfig.C:177
 Hconfig.C:178
 Hconfig.C:179
 Hconfig.C:180
 Hconfig.C:181
 Hconfig.C:182
 Hconfig.C:183
 Hconfig.C:184
 Hconfig.C:185
 Hconfig.C:186
 Hconfig.C:187
 Hconfig.C:188
 Hconfig.C:189
 Hconfig.C:190
 Hconfig.C:191
 Hconfig.C:192
 Hconfig.C:193
 Hconfig.C:194
 Hconfig.C:195
 Hconfig.C:196
 Hconfig.C:197
 Hconfig.C:198
 Hconfig.C:199
 Hconfig.C:200
 Hconfig.C:201
 Hconfig.C:202
 Hconfig.C:203
 Hconfig.C:204
 Hconfig.C:205
 Hconfig.C:206
 Hconfig.C:207
 Hconfig.C:208
 Hconfig.C:209
 Hconfig.C:210
 Hconfig.C:211
 Hconfig.C:212
 Hconfig.C:213
 Hconfig.C:214
 Hconfig.C:215
 Hconfig.C:216
 Hconfig.C:217
 Hconfig.C:218
 Hconfig.C:219
 Hconfig.C:220
 Hconfig.C:221
 Hconfig.C:222
 Hconfig.C:223
 Hconfig.C:224
 Hconfig.C:225
 Hconfig.C:226
 Hconfig.C:227
 Hconfig.C:228
 Hconfig.C:229
 Hconfig.C:230
 Hconfig.C:231
 Hconfig.C:232
 Hconfig.C:233
 Hconfig.C:234
 Hconfig.C:235
 Hconfig.C:236
 Hconfig.C:237
 Hconfig.C:238
 Hconfig.C:239
 Hconfig.C:240
 Hconfig.C:241
 Hconfig.C:242
 Hconfig.C:243
 Hconfig.C:244
 Hconfig.C:245
 Hconfig.C:246
 Hconfig.C:247
 Hconfig.C:248
 Hconfig.C:249
 Hconfig.C:250
 Hconfig.C:251
 Hconfig.C:252
 Hconfig.C:253
 Hconfig.C:254
 Hconfig.C:255
 Hconfig.C:256
 Hconfig.C:257
 Hconfig.C:258
 Hconfig.C:259
 Hconfig.C:260
 Hconfig.C:261
 Hconfig.C:262
 Hconfig.C:263
 Hconfig.C:264
 Hconfig.C:265
 Hconfig.C:266
 Hconfig.C:267
 Hconfig.C:268
 Hconfig.C:269
 Hconfig.C:270
 Hconfig.C:271
 Hconfig.C:272
 Hconfig.C:273
 Hconfig.C:274
 Hconfig.C:275
 Hconfig.C:276
 Hconfig.C:277
 Hconfig.C:278
 Hconfig.C:279
 Hconfig.C:280
 Hconfig.C:281
 Hconfig.C:282
 Hconfig.C:283
 Hconfig.C:284
 Hconfig.C:285
 Hconfig.C:286
 Hconfig.C:287
 Hconfig.C:288
 Hconfig.C:289
 Hconfig.C:290
 Hconfig.C:291
 Hconfig.C:292
 Hconfig.C:293
 Hconfig.C:294
 Hconfig.C:295
 Hconfig.C:296
 Hconfig.C:297
 Hconfig.C:298
 Hconfig.C:299
 Hconfig.C:300
 Hconfig.C:301
 Hconfig.C:302
 Hconfig.C:303
 Hconfig.C:304
 Hconfig.C:305
 Hconfig.C:306
 Hconfig.C:307
 Hconfig.C:308
 Hconfig.C:309
 Hconfig.C:310
 Hconfig.C:311
 Hconfig.C:312
 Hconfig.C:313
 Hconfig.C:314
 Hconfig.C:315
 Hconfig.C:316
 Hconfig.C:317
 Hconfig.C:318
 Hconfig.C:319
 Hconfig.C:320
 Hconfig.C:321
 Hconfig.C:322
 Hconfig.C:323
 Hconfig.C:324
 Hconfig.C:325
 Hconfig.C:326
 Hconfig.C:327
 Hconfig.C:328
 Hconfig.C:329
 Hconfig.C:330
 Hconfig.C:331
 Hconfig.C:332
 Hconfig.C:333
 Hconfig.C:334
 Hconfig.C:335
 Hconfig.C:336
 Hconfig.C:337
 Hconfig.C:338
 Hconfig.C:339
 Hconfig.C:340
 Hconfig.C:341
 Hconfig.C:342
 Hconfig.C:343
 Hconfig.C:344
 Hconfig.C:345
 Hconfig.C:346
 Hconfig.C:347
 Hconfig.C:348
 Hconfig.C:349
 Hconfig.C:350
 Hconfig.C:351
 Hconfig.C:352
 Hconfig.C:353
 Hconfig.C:354
 Hconfig.C:355
 Hconfig.C:356
 Hconfig.C:357
 Hconfig.C:358
 Hconfig.C:359
 Hconfig.C:360
 Hconfig.C:361
 Hconfig.C:362
 Hconfig.C:363
 Hconfig.C:364
 Hconfig.C:365
 Hconfig.C:366
 Hconfig.C:367
 Hconfig.C:368
 Hconfig.C:369
 Hconfig.C:370
 Hconfig.C:371
 Hconfig.C:372
 Hconfig.C:373
 Hconfig.C:374
 Hconfig.C:375
 Hconfig.C:376
 Hconfig.C:377
 Hconfig.C:378
 Hconfig.C:379
 Hconfig.C:380
 Hconfig.C:381
 Hconfig.C:382
 Hconfig.C:383
 Hconfig.C:384
 Hconfig.C:385
 Hconfig.C:386
 Hconfig.C:387
 Hconfig.C:388
 Hconfig.C:389
 Hconfig.C:390
 Hconfig.C:391
 Hconfig.C:392
 Hconfig.C:393
 Hconfig.C:394
 Hconfig.C:395
 Hconfig.C:396
 Hconfig.C:397
 Hconfig.C:398
 Hconfig.C:399
 Hconfig.C:400
 Hconfig.C:401
 Hconfig.C:402
 Hconfig.C:403
 Hconfig.C:404
 Hconfig.C:405
 Hconfig.C:406
 Hconfig.C:407
 Hconfig.C:408
 Hconfig.C:409
 Hconfig.C:410
 Hconfig.C:411
 Hconfig.C:412
 Hconfig.C:413
 Hconfig.C:414
 Hconfig.C:415
 Hconfig.C:416
 Hconfig.C:417
 Hconfig.C:418
 Hconfig.C:419
 Hconfig.C:420
 Hconfig.C:421
 Hconfig.C:422
 Hconfig.C:423
 Hconfig.C:424
 Hconfig.C:425
 Hconfig.C:426
 Hconfig.C:427
 Hconfig.C:428
 Hconfig.C:429
 Hconfig.C:430
 Hconfig.C:431
 Hconfig.C:432
 Hconfig.C:433
 Hconfig.C:434
 Hconfig.C:435
 Hconfig.C:436
 Hconfig.C:437
 Hconfig.C:438
 Hconfig.C:439
 Hconfig.C:440
 Hconfig.C:441
 Hconfig.C:442
 Hconfig.C:443
 Hconfig.C:444
 Hconfig.C:445
 Hconfig.C:446
 Hconfig.C:447
 Hconfig.C:448
 Hconfig.C:449
 Hconfig.C:450
 Hconfig.C:451
 Hconfig.C:452
 Hconfig.C:453
 Hconfig.C:454
 Hconfig.C:455
 Hconfig.C:456
 Hconfig.C:457
 Hconfig.C:458
 Hconfig.C:459
 Hconfig.C:460
 Hconfig.C:461
 Hconfig.C:462
 Hconfig.C:463
 Hconfig.C:464
 Hconfig.C:465
 Hconfig.C:466
 Hconfig.C:467
 Hconfig.C:468
 Hconfig.C:469
 Hconfig.C:470
 Hconfig.C:471
 Hconfig.C:472
 Hconfig.C:473
 Hconfig.C:474
 Hconfig.C:475
 Hconfig.C:476
 Hconfig.C:477
 Hconfig.C:478
 Hconfig.C:479
 Hconfig.C:480
 Hconfig.C:481
 Hconfig.C:482
 Hconfig.C:483
 Hconfig.C:484
 Hconfig.C:485
 Hconfig.C:486
 Hconfig.C:487
 Hconfig.C:488
 Hconfig.C:489
 Hconfig.C:490
 Hconfig.C:491
 Hconfig.C:492
 Hconfig.C:493
 Hconfig.C:494
 Hconfig.C:495
 Hconfig.C:496
 Hconfig.C:497
 Hconfig.C:498
 Hconfig.C:499
 Hconfig.C:500
 Hconfig.C:501
 Hconfig.C:502
 Hconfig.C:503
 Hconfig.C:504
 Hconfig.C:505
 Hconfig.C:506
 Hconfig.C:507
 Hconfig.C:508
 Hconfig.C:509
 Hconfig.C:510
 Hconfig.C:511
 Hconfig.C:512
 Hconfig.C:513
 Hconfig.C:514
 Hconfig.C:515
 Hconfig.C:516
 Hconfig.C:517
 Hconfig.C:518
 Hconfig.C:519
 Hconfig.C:520
 Hconfig.C:521
 Hconfig.C:522
 Hconfig.C:523
 Hconfig.C:524
 Hconfig.C:525
 Hconfig.C:526
 Hconfig.C:527
 Hconfig.C:528
 Hconfig.C:529
 Hconfig.C:530
 Hconfig.C:531
 Hconfig.C:532
 Hconfig.C:533
 Hconfig.C:534
 Hconfig.C:535
 Hconfig.C:536
 Hconfig.C:537
 Hconfig.C:538
 Hconfig.C:539
 Hconfig.C:540
 Hconfig.C:541
 Hconfig.C:542
 Hconfig.C:543
 Hconfig.C:544
 Hconfig.C:545
 Hconfig.C:546
 Hconfig.C:547
 Hconfig.C:548
 Hconfig.C:549
 Hconfig.C:550
 Hconfig.C:551
 Hconfig.C:552
 Hconfig.C:553
 Hconfig.C:554
 Hconfig.C:555
 Hconfig.C:556
 Hconfig.C:557
 Hconfig.C:558
 Hconfig.C:559
 Hconfig.C:560
 Hconfig.C:561
 Hconfig.C:562
 Hconfig.C:563
 Hconfig.C:564
 Hconfig.C:565
 Hconfig.C:566
 Hconfig.C:567
 Hconfig.C:568
 Hconfig.C:569
 Hconfig.C:570
 Hconfig.C:571
 Hconfig.C:572
 Hconfig.C:573
 Hconfig.C:574
 Hconfig.C:575
 Hconfig.C:576
 Hconfig.C:577
 Hconfig.C:578
 Hconfig.C:579
 Hconfig.C:580
 Hconfig.C:581
 Hconfig.C:582
 Hconfig.C:583
 Hconfig.C:584
 Hconfig.C:585
 Hconfig.C:586
 Hconfig.C:587
 Hconfig.C:588
 Hconfig.C:589
 Hconfig.C:590
 Hconfig.C:591
 Hconfig.C:592
 Hconfig.C:593
 Hconfig.C:594
 Hconfig.C:595
 Hconfig.C:596
 Hconfig.C:597
 Hconfig.C:598
 Hconfig.C:599
 Hconfig.C:600
 Hconfig.C:601
 Hconfig.C:602
 Hconfig.C:603
 Hconfig.C:604
 Hconfig.C:605
 Hconfig.C:606
 Hconfig.C:607
 Hconfig.C:608
 Hconfig.C:609
 Hconfig.C:610
 Hconfig.C:611
 Hconfig.C:612
 Hconfig.C:613
 Hconfig.C:614
 Hconfig.C:615
 Hconfig.C:616
 Hconfig.C:617
 Hconfig.C:618
 Hconfig.C:619
 Hconfig.C:620
 Hconfig.C:621
 Hconfig.C:622
 Hconfig.C:623
 Hconfig.C:624
 Hconfig.C:625
 Hconfig.C:626
 Hconfig.C:627
 Hconfig.C:628
 Hconfig.C:629
 Hconfig.C:630
 Hconfig.C:631
 Hconfig.C:632
 Hconfig.C:633
 Hconfig.C:634
 Hconfig.C:635
 Hconfig.C:636
 Hconfig.C:637
 Hconfig.C:638
 Hconfig.C:639
 Hconfig.C:640
 Hconfig.C:641
 Hconfig.C:642
 Hconfig.C:643
 Hconfig.C:644
 Hconfig.C:645
 Hconfig.C:646
 Hconfig.C:647
 Hconfig.C:648
 Hconfig.C:649
 Hconfig.C:650
 Hconfig.C:651
 Hconfig.C:652
 Hconfig.C:653
 Hconfig.C:654
 Hconfig.C:655
 Hconfig.C:656
 Hconfig.C:657
 Hconfig.C:658
 Hconfig.C:659
 Hconfig.C:660
 Hconfig.C:661
 Hconfig.C:662
 Hconfig.C:663
 Hconfig.C:664
 Hconfig.C:665
 Hconfig.C:666
 Hconfig.C:667
 Hconfig.C:668
 Hconfig.C:669
 Hconfig.C:670
 Hconfig.C:671
 Hconfig.C:672
 Hconfig.C:673
 Hconfig.C:674
 Hconfig.C:675
 Hconfig.C:676
 Hconfig.C:677
 Hconfig.C:678
 Hconfig.C:679
 Hconfig.C:680
 Hconfig.C:681
 Hconfig.C:682
 Hconfig.C:683
 Hconfig.C:684
 Hconfig.C:685
 Hconfig.C:686
 Hconfig.C:687
 Hconfig.C:688
 Hconfig.C:689
 Hconfig.C:690
 Hconfig.C:691
 Hconfig.C:692
 Hconfig.C:693
 Hconfig.C:694
 Hconfig.C:695
 Hconfig.C:696
 Hconfig.C:697
 Hconfig.C:698
 Hconfig.C:699
 Hconfig.C:700
 Hconfig.C:701
 Hconfig.C:702
 Hconfig.C:703
 Hconfig.C:704
 Hconfig.C:705
 Hconfig.C:706
 Hconfig.C:707
 Hconfig.C:708
 Hconfig.C:709
 Hconfig.C:710
 Hconfig.C:711
 Hconfig.C:712
 Hconfig.C:713
 Hconfig.C:714
 Hconfig.C:715
 Hconfig.C:716
 Hconfig.C:717
 Hconfig.C:718
 Hconfig.C:719
 Hconfig.C:720
 Hconfig.C:721
 Hconfig.C:722
 Hconfig.C:723
 Hconfig.C:724
 Hconfig.C:725
 Hconfig.C:726
 Hconfig.C:727
 Hconfig.C:728
 Hconfig.C:729
 Hconfig.C:730
 Hconfig.C:731
 Hconfig.C:732
 Hconfig.C:733
 Hconfig.C:734
 Hconfig.C:735
 Hconfig.C:736
 Hconfig.C:737
 Hconfig.C:738
 Hconfig.C:739
 Hconfig.C:740
 Hconfig.C:741
 Hconfig.C:742
 Hconfig.C:743
 Hconfig.C:744
 Hconfig.C:745
 Hconfig.C:746
 Hconfig.C:747
 Hconfig.C:748
 Hconfig.C:749
 Hconfig.C:750
 Hconfig.C:751
 Hconfig.C:752
 Hconfig.C:753
 Hconfig.C:754
 Hconfig.C:755
 Hconfig.C:756
 Hconfig.C:757
 Hconfig.C:758
 Hconfig.C:759
 Hconfig.C:760
 Hconfig.C:761
 Hconfig.C:762
 Hconfig.C:763
 Hconfig.C:764
 Hconfig.C:765
 Hconfig.C:766
 Hconfig.C:767
 Hconfig.C:768
 Hconfig.C:769
 Hconfig.C:770
 Hconfig.C:771
 Hconfig.C:772
 Hconfig.C:773
 Hconfig.C:774
 Hconfig.C:775
 Hconfig.C:776
 Hconfig.C:777
 Hconfig.C:778
 Hconfig.C:779
 Hconfig.C:780
 Hconfig.C:781
 Hconfig.C:782
 Hconfig.C:783
 Hconfig.C:784
 Hconfig.C:785
 Hconfig.C:786
 Hconfig.C:787
 Hconfig.C:788
 Hconfig.C:789
 Hconfig.C:790
 Hconfig.C:791
 Hconfig.C:792
 Hconfig.C:793
 Hconfig.C:794
 Hconfig.C:795
 Hconfig.C:796
 Hconfig.C:797
 Hconfig.C:798
 Hconfig.C:799
 Hconfig.C:800
 Hconfig.C:801
 Hconfig.C:802
 Hconfig.C:803