Fork me on GitHub

Changeset 580 in svn for trunk


Ignore:
Timestamp:
Feb 1, 2012, 1:38:20 PM (13 years ago)
Author:
cp3-support
Message:

updated to use FROG 3.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/FrogUtil.cc

    r494 r580  
    4444#include "FrogUtil.h"
    4545
    46 #include "FROG_Coord.h"
    47 #include "FROG_Coord.cpp"
    48 #include "FROG_Geometry.h"
    49 #include "FROG_Geometry.cpp"
    50 #include "FROG_DetId.h"
    51 #include "FROG_Events.h"
    52 #include "FROG_Events.cpp"
    53 #include "FROG_Element_Tools.h"
    54 #include "FROG_Element_Tools.cpp"
    55 #include "FROG_Net_Tools.h"
    56 #include "FROG_Net_Tools.cpp"
    57 #include "FROG_Path.h"
    58 #include "FROG_Path.cpp"
    59 #include "FROG_ReadCards.h"
    60 #include "FROG_ReadCards.cpp"
    61 #include "FROG_ZLib.h"
    62 #include "FROG_ZLib.cpp"
    63 
    6446using namespace std;
    65 using namespace FROG_COORD;
    66 
    6747const float twopi = 6.283185307179586476925286766559;
     48
     49inline float EtaToTheta(float Eta){return 2*atan(exp(-Eta));}
    6850
    6951FrogDisplay::FrogDisplay() {
     
    137119  unsigned int allEntries=treeReader->GetEntries();
    138120 
    139   FROG_Events* frog_events = new FROG_Events();
     121  BaseColl* frog_events = new BaseColl();
    140122  if(nEntryFrog > allEntries) {
    141123  cerr <<"**     ERROR: number of entries to display > available events      **"<< endl;
     
    149131   
    150132    //Create a new event
    151     FROG_Element_Event* frog_event =  new FROG_Element_Event(1,entry);
    152     frog_events->AddEvent(frog_event);
     133    Event* frog_event =  new Event(1,entry);
     134    frog_events->addDaughter(frog_event);
    153135   
    154136    //Create a new branch in the event with name SIM and ID = EVTID_SIM
    155     FROG_Element_Base_With_DetId_And_Name* frog_branchSIM = new FROG_Element_Base_With_DetId_And_Name(EVTID_SIM,"SIM");
     137    BaseColl_Name* frog_branchSIM = new BaseColl_Name(EVTID_SIM,"SIM");
    156138    frog_event->addDaughter(frog_branchSIM);
    157139   
     
    159141    //SIM ELEC
    160142    //Create a new sub-branch in the SIM branch with name Electrons: this sub branch will contais all the electrons
    161     FROG_Element_Base_With_DetId_And_Name* frog_branchElectrons = new FROG_Element_Base_With_DetId_And_Name(EVTID_SIM+1000,"Electrons");
     143    BaseColl_Name* frog_branchElectrons = new BaseColl_Name(EVTID_SIM+1000,"Electrons");
    162144    frog_branchSIM->addDaughter(frog_branchElectrons);
    163145   
     
    165147      elec = (TRootElectron*) branchElectron->At(p);
    166148      //      cout<<"Elec nO "<<p<<" PT: "<<elec->PT<<" Eta "<<elec->Eta<<" Phi"<<elec->Phi<<endl;
    167       FROG_Element_Event_Candidate* frog_elec = new FROG_Element_Event_Candidate(11,elec->E,elec->Eta,elec->Phi);
     149      Event_Candidate* frog_elec = new Event_Candidate(11,elec->E,elec->Eta,elec->Phi);
    168150      frog_branchElectrons->addDaughter(frog_elec);
    169151    }
     
    172154    //SIM MUONS
    173155    //Create a new sub-branch in the SIM branch with name Muons: this sub branch will contais all the muons
    174     FROG_Element_Base_With_DetId_And_Name* frog_branchMuons = new FROG_Element_Base_With_DetId_And_Name(EVTID_SIM+2000,"Muons");
     156    BaseColl_Name* frog_branchMuons = new BaseColl_Name(EVTID_SIM+2000,"Muons");
    175157    frog_branchSIM->addDaughter(frog_branchMuons);
    176158    for(int p=0;p<branchMuon->GetEntriesFast();p++){
    177159      muon = (TRootMuon*) branchMuon->At(p);
    178160      //      cout<<"Muon nO"<<p<<" PT: "<<muon->PT<<"Eta "<<muon->Eta<<" Phi"<<muon->Phi<<endl;
    179       FROG_Element_Event_Candidate* frog_muon = new FROG_Element_Event_Candidate(13,muon->E,muon->Eta,muon->Phi);
     161      Event_Candidate* frog_muon = new Event_Candidate(13,muon->E,muon->Eta,muon->Phi);
    180162      frog_branchMuons->addDaughter(frog_muon);
    181163    }
     
    184166    //SIM TAUS
    185167    //Create a new sub-branch in the SIM branch with name Taus: this sub branch will contais all the Taus
    186     FROG_Element_Base_With_DetId_And_Name* frog_branchTaus = new FROG_Element_Base_With_DetId_And_Name(EVTID_SIM+3000,"Taus");
     168    BaseColl_Name* frog_branchTaus = new BaseColl_Name(EVTID_SIM+3000,"Taus");
    187169    frog_branchSIM->addDaughter(frog_branchTaus);
    188170    for(int p=0;p<branchTau->GetEntriesFast();p++){
    189171      tau = (TRootTauJet*) branchTau->At(p);
    190172      //      cout<<"Tau nO"<<p<<" PT: "<<tau->PT<<"Eta "<<tau->Eta<<" Phi"<<tau->Phi<<endl;
    191       FROG_Element_Event_Candidate* frog_tau = new FROG_Element_Event_Candidate(15,tau->E,tau->Eta,tau->Phi);
     173      Event_Candidate* frog_tau = new Event_Candidate(15,tau->E,tau->Eta,tau->Phi);
    192174      frog_branchTaus->addDaughter(frog_tau);
    193175    }
     
    196178    //SIM PHOTONS
    197179    //Create a new sub-branch in the SIM branch with name Photons: this sub branch will contais all the Photons
    198     FROG_Element_Base_With_DetId_And_Name* frog_branchPhotons = new FROG_Element_Base_With_DetId_And_Name(EVTID_SIM+4000,"Photons");
     180    BaseColl_Name* frog_branchPhotons = new BaseColl_Name(EVTID_SIM+4000,"Photons");
    199181    frog_branchSIM->addDaughter(frog_branchPhotons);
    200182    for(int p=0;p<branchPhoton->GetEntriesFast();p++){
    201183      photon = (TRootPhoton*) branchPhoton->At(p);
    202184      //      cout<<"Photon nO"<<p<<" PT: "<<photon->PT<<"Eta "<<photon->Eta<<" Phi"<<photon->Phi<<endl;
    203       FROG_Element_Event_Candidate* frog_photon = new FROG_Element_Event_Candidate(22,photon->E,photon->Eta,photon->Phi);
     185      Event_Candidate* frog_photon = new Event_Candidate(22,photon->E,photon->Eta,photon->Phi);
    204186      frog_branchPhotons->addDaughter(frog_photon);
    205187    }
     
    208190    //SIM JETS
    209191    //Create a new sub-branch in the SIM branch with name Jets: this sub branch will contais all the Jets
    210     FROG_Element_Base_With_DetId_And_Name* frog_branchJets = new FROG_Element_Base_With_DetId_And_Name(EVTID_SIM+5000,"Jets");
     192    BaseColl_Name* frog_branchJets = new BaseColl_Name(EVTID_SIM+5000,"Jets");
    211193    frog_branchSIM->addDaughter(frog_branchJets);
    212194    for(int p=0;p<branchJet->GetEntriesFast();p++){
    213195      jet = (TRootJet*) branchJet->At(p);
    214196      //      cout<<"Jet nO"<<p<<" PT: "<<jet->PT<<"Eta "<<jet->Eta<<" Phi"<<jet->Phi<<endl;
    215       FROG_Element_Event_Jet* frog_jet = new FROG_Element_Event_Jet(jet->E,jet->Eta,jet->Phi);
     197      Event_Jet* frog_jet = new Event_Jet(jet->E,jet->Eta,jet->Phi);
    216198      frog_branchJets->addDaughter(frog_jet);
    217199    }
     
    220202    //SIM MET
    221203    //Create a new sub-branch in the SIM branch with name MET: this sub branch will contais all the METs
    222     FROG_Element_Base_With_DetId_And_Name* frog_branchMET = new FROG_Element_Base_With_DetId_And_Name(EVTID_SIM+6000,"MET");
     204    BaseColl_Name* frog_branchMET = new BaseColl_Name(EVTID_SIM+6000,"MET");
    223205    frog_branchSIM->addDaughter(frog_branchMET);
    224206    for(int p=0;p<branchMET->GetEntriesFast();p++){
    225207      met = (TRootETmis*) branchMET->At(p);
    226208      //      cout<<"MET nO"<<p<<" ET: "<<met->ET<<"Eta "<<0<<" Phi"<<met->Phi<<endl;
    227       FROG_Element_Event_MET* frog_met = new FROG_Element_Event_MET(0,met->ET,0,met->Phi, met->ET);
     209      Event_MET* frog_met = new Event_MET(0,met->ET,0,met->Phi, met->ET);
    228210      frog_branchMET->addDaughter(frog_met);
    229211    }
    230212   
    231     //Save the event in the .vis file
    232     frog_events->SaveInLive("DelphesToFrog.vis",false,false,(unsigned int)-1);
    233213  }
     214  //Save events in the .vis file
     215  frog_events->save("DelphesToFrog.vis");
     216
    234217 
    235218/* Pointer hierachy
     
    261244
    262245  // This element is the root of the "file" tree.  (don't change this line)
    263   FROG_Element_Base* prim = new FROG_Element_Base(C_PRIMARY);
    264 
    265   FROG_Element_Base* mygeom = new FROG_Element_Base(C_GEOMETRY);
     246  BaseColl* prim = new BaseColl();
     247
     248  BaseColl* mygeom = new BaseColl();
    266249  prim->addDaughter(mygeom);
    267250 
    268   FROG_Element_Base_With_DetId_And_Name* detector = new FROG_Element_Base_With_DetId_And_Name(900000000,"Delphes");
     251  BaseColl_Name* detector = new BaseColl_Name(900000000,"Delphes");
    269252  mygeom->addDaughter(detector);
    270253 
     
    283266  //********************************************************************************************************
    284267 
    285   FROG_Element_Base_With_DetId_And_Name* Tracker = new FROG_Element_Base_With_DetId_And_Name(910000000,"Tracker");
     268  BaseColl_Name* Tracker = new BaseColl_Name(910000000,"Tracker");
    286269  detector->addDaughter(Tracker);
    287270  unsigned int DetIdCountTracker = 1;
     
    294277  for(double phi=0; phi<=twopi/frac;phi+=dphi){
    295278
    296     FROG_Element_Primitive_CustomSurface* trackerCone1 = new FROG_Element_Primitive_CustomSurface(9100000+DetIdCountTracker*10,   
     279    Prim_CustomSurface* trackerCone1 = new Prim_CustomSurface(9100000+DetIdCountTracker*10,   
    297280          rayCone*sin(phi)      ,rayCone*cos(phi)       ,-Lenght_Tracker/2,
    298281          rayCone*sin(phi+dphi) ,rayCone*cos(phi+dphi)  ,-Lenght_Tracker/2,
     
    301284    Tracker->addDaughter(trackerCone1);   DetIdCountTracker++;                                 
    302285
    303     FROG_Element_Primitive_CustomSurface* trackerCone2 = new FROG_Element_Primitive_CustomSurface(9100000+DetIdCountTracker*10,   
     286    Prim_CustomSurface* trackerCone2 = new Prim_CustomSurface(9100000+DetIdCountTracker*10,   
    304287          0                 , 0                  ,0,
    305288          0                 , 0                  ,0,
     
    309292   
    310293   
    311     FROG_Element_Primitive_CustomSurface* trackerB = new FROG_Element_Primitive_CustomSurface(9100000+DetIdCountTracker*10,   
     294    Prim_CustomSurface* trackerB = new Prim_CustomSurface(9100000+DetIdCountTracker*10,   
    312295      ray*sin(phi)        ,ray*cos(phi)       ,-Lenght_Tracker*0.5,
    313296      ray*sin(phi+dphi)   ,ray*cos(phi+dphi)  ,-Lenght_Tracker*0.5,
     
    316299    Tracker->addDaughter(trackerB);   DetIdCountTracker++;
    317300   
    318     FROG_Element_Primitive_CustomSurface* trackerEndCap1 = new FROG_Element_Primitive_CustomSurface(9100000+DetIdCountTracker*10,
     301    Prim_CustomSurface* trackerEndCap1 = new Prim_CustomSurface(9100000+DetIdCountTracker*10,
    319302      rayCone*sin(phi)      , rayCone*cos(phi)      ,  -(Lenght_Tracker)/2,
    320303      rayCone*sin(phi+dphi) , rayCone*cos(phi+dphi) ,  -(Lenght_Tracker)/2,
     
    323306    Tracker->addDaughter(trackerEndCap1);   DetIdCountTracker++;
    324307   
    325     FROG_Element_Primitive_CustomSurface* trackerEndCap2 = new FROG_Element_Primitive_CustomSurface(9100000+DetIdCountTracker*10,
     308    Prim_CustomSurface* trackerEndCap2 = new Prim_CustomSurface(9100000+DetIdCountTracker*10,
    326309      rayCone*sin(phi)      , rayCone*cos(phi)      ,  (Lenght_Tracker)/2,
    327310      rayCone*sin(phi+dphi) , rayCone*cos(phi+dphi) ,  (Lenght_Tracker)/2,
     
    337320  //********************************************************************************************************
    338321 
    339   FROG_Element_Base_With_DetId_And_Name* CALO = new FROG_Element_Base_With_DetId_And_Name(920000000,"Calo");
     322  BaseColl_Name* CALO = new BaseColl_Name(920000000,"Calo");
    340323  detector->addDaughter(CALO);
    341324  unsigned int DetIdCountCalo = 1;
     
    351334   
    352335    //BARREL
    353     FROG_Element_Primitive_CustomSurface* caloB = new FROG_Element_Primitive_CustomSurface(9100000+DetIdCountCalo*10,
     336    Prim_CustomSurface* caloB = new Prim_CustomSurface(9100000+DetIdCountCalo*10,
    354337     ray*sin(phi)        ,ray*cos(phi)       ,-Lenght_Calo*0.5, 
    355338     ray*sin(phi+dphi)   ,ray*cos(phi+dphi)  ,-Lenght_Calo*0.5,
     
    359342   
    360343    //Partial cone + side
    361     FROG_Element_Primitive_CustomSurface* caloEndCap1a = new FROG_Element_Primitive_CustomSurface(9200000+DetIdCountCalo*10,
     344    Prim_CustomSurface* caloEndCap1a = new Prim_CustomSurface(9200000+DetIdCountCalo*10,
    362345          rayConeD*sin(phi)      , rayConeD*cos(phi)      ,  (Lenght_Tracker)/2,
    363346          rayConeD*sin(phi+dphi) , rayConeD*cos(phi+dphi) ,  (Lenght_Tracker)/2,
     
    367350   
    368351    //Close Endcap + side
    369     FROG_Element_Primitive_CustomSurface* caloEndCap1b = new FROG_Element_Primitive_CustomSurface(9200000+DetIdCountTracker*10,
     352    Prim_CustomSurface* caloEndCap1b = new Prim_CustomSurface(9200000+DetIdCountTracker*10,
    370353          rayConeF*sin(phi)      , rayConeF*cos(phi)      ,  (Lenght_Calo)/2,
    371354          rayConeF*sin(phi+dphi) , rayConeF*cos(phi+dphi) ,  (Lenght_Calo)/2,
     
    375358   
    376359    //Partial cone - side
    377     FROG_Element_Primitive_CustomSurface* caloEndCap2a = new FROG_Element_Primitive_CustomSurface(9200000+DetIdCountCalo*10,
     360    Prim_CustomSurface* caloEndCap2a = new Prim_CustomSurface(9200000+DetIdCountCalo*10,
    378361          rayConeD*sin(phi)      , rayConeD*cos(phi)      ,  -(Lenght_Tracker)/2,
    379362          rayConeD*sin(phi+dphi) , rayConeD*cos(phi+dphi) ,  -(Lenght_Tracker)/2,
     
    383366   
    384367    //Close Endcap - side
    385     FROG_Element_Primitive_CustomSurface* caloEndCap2b = new FROG_Element_Primitive_CustomSurface(9200000+DetIdCountTracker*10,
     368    Prim_CustomSurface* caloEndCap2b = new Prim_CustomSurface(9200000+DetIdCountTracker*10,
    386369          rayConeF*sin(phi)      , rayConeF*cos(phi)      ,  -(Lenght_Calo)/2,
    387370          rayConeF*sin(phi+dphi) , rayConeF*cos(phi+dphi) ,  -(Lenght_Calo)/2,
     
    397380  //********************************************************************************************************
    398381 
    399   FROG_Element_Base_With_DetId_And_Name* MUON = new FROG_Element_Base_With_DetId_And_Name(930000000,"Muon");
     382  BaseColl_Name* MUON = new BaseColl_Name(930000000,"Muon");
    400383  detector->addDaughter(MUON);
    401384  unsigned int DetIdCountMuon = 1;
     
    409392   
    410393    //BARREL
    411     FROG_Element_Primitive_CustomSurface* muonB = new FROG_Element_Primitive_CustomSurface(9300000+DetIdCountMuon*10,
     394    Prim_CustomSurface* muonB = new Prim_CustomSurface(9300000+DetIdCountMuon*10,
    412395           ray*sin(phi)      ,ray*cos(phi)       ,-Lenght_Muon*0.5,   
    413396           ray*sin(phi+dphi) ,ray*cos(phi+dphi)  ,-Lenght_Muon*0.5,
     
    417400   
    418401    //Partial cone + side
    419     FROG_Element_Primitive_CustomSurface* muonEndCap1a = new FROG_Element_Primitive_CustomSurface(9300000+DetIdCountMuon*10,
     402    Prim_CustomSurface* muonEndCap1a = new Prim_CustomSurface(9300000+DetIdCountMuon*10,
    420403          rayConeD*sin(phi)      , rayConeD*cos(phi)      ,  (Lenght_Calo)/2,
    421404          rayConeD*sin(phi+dphi) , rayConeD*cos(phi+dphi) ,  (Lenght_Calo)/2,
     
    425408   
    426409    //Close Endcap + side
    427     FROG_Element_Primitive_CustomSurface* muonEndCap1b = new FROG_Element_Primitive_CustomSurface(9300000+DetIdCountMuon*10,
     410    Prim_CustomSurface* muonEndCap1b = new Prim_CustomSurface(9300000+DetIdCountMuon*10,
    428411          rayConeF*sin(phi)      , rayConeF*cos(phi)      ,  (Lenght_Muon)/2,
    429412          rayConeF*sin(phi+dphi) , rayConeF*cos(phi+dphi) ,  (Lenght_Muon)/2,
     
    433416   
    434417    //Partial cone - side
    435     FROG_Element_Primitive_CustomSurface* muonEndCap2a = new FROG_Element_Primitive_CustomSurface(9300000+DetIdCountMuon*10,
     418    Prim_CustomSurface* muonEndCap2a = new Prim_CustomSurface(9300000+DetIdCountMuon*10,
    436419          rayConeD*sin(phi)      , rayConeD*cos(phi)      ,  -(Lenght_Calo)/2,
    437420          rayConeD*sin(phi+dphi) , rayConeD*cos(phi+dphi) ,  -(Lenght_Calo)/2,
     
    441424   
    442425    //Close Endcap - side
    443     FROG_Element_Primitive_CustomSurface* muonEndCap2b = new FROG_Element_Primitive_CustomSurface(9300000+DetIdCountMuon*10,
     426    Prim_CustomSurface* muonEndCap2b = new Prim_CustomSurface(9300000+DetIdCountMuon*10,
    444427          rayConeF*sin(phi)      , rayConeF*cos(phi)      ,  -(Lenght_Muon)/2,
    445428          rayConeF*sin(phi+dphi) , rayConeF*cos(phi+dphi) ,  -(Lenght_Muon)/2,
     
    453436  //********************************************************************************************************
    454437 
    455   FROG_Element_Base_With_DetId_And_Name* CALOFWD = new FROG_Element_Base_With_DetId_And_Name(940000000,"CaloFwd");
     438  BaseColl_Name* CALOFWD = new BaseColl_Name(940000000,"CaloFwd");
    456439  detector->addDaughter(CALOFWD);
    457440  unsigned int DetIdCountCaloFwd = 1;
     
    465448   
    466449    //Partial cone + side
    467     FROG_Element_Primitive_CustomSurface* caloFWDEndCap1a = new FROG_Element_Primitive_CustomSurface(9400000+DetIdCountCaloFwd*10,
     450    Prim_CustomSurface* caloFWDEndCap1a = new Prim_CustomSurface(9400000+DetIdCountCaloFwd*10,
    468451     rayConeD*sin(phi)      , rayConeD*cos(phi)      ,  (Lenght_Muon)/2,
    469452     rayConeD*sin(phi+dphi) , rayConeD*cos(phi+dphi) ,  (Lenght_Muon)/2,
     
    473456   
    474457    //Close Endcap + side
    475     FROG_Element_Primitive_CustomSurface* caloFWDEndCap1b = new FROG_Element_Primitive_CustomSurface(9400000+DetIdCountCaloFwd*10,
     458    Prim_CustomSurface* caloFWDEndCap1b = new Prim_CustomSurface(9400000+DetIdCountCaloFwd*10,
    476459     rayConeF*sin(phi)      , rayConeF*cos(phi)      ,  (Lenght_CaloFwd)/2,
    477460     rayConeF*sin(phi+dphi) , rayConeF*cos(phi+dphi) ,  (Lenght_CaloFwd)/2,
     
    481464                                                                                                     
    482465    //BARREL
    483     FROG_Element_Primitive_CustomSurface* caloFWDB1 = new FROG_Element_Primitive_CustomSurface(9400000+DetIdCountMuon*10,
     466    Prim_CustomSurface* caloFWDB1 = new Prim_CustomSurface(9400000+DetIdCountMuon*10,
    484467     ray*sin(phi)      ,ray*cos(phi)       , Lenght_Muon*0.5,   
    485468     ray*sin(phi+dphi) ,ray*cos(phi+dphi)  , Lenght_Muon*0.5,
     
    489472   
    490473    //Partial cone - side
    491     FROG_Element_Primitive_CustomSurface* caloFWDEndCap2a = new FROG_Element_Primitive_CustomSurface(9400000+DetIdCountCaloFwd*10,
     474    Prim_CustomSurface* caloFWDEndCap2a = new Prim_CustomSurface(9400000+DetIdCountCaloFwd*10,
    492475     rayConeD*sin(phi)      , rayConeD*cos(phi)      ,  -(Lenght_Muon)/2,
    493476     rayConeD*sin(phi+dphi) , rayConeD*cos(phi+dphi) ,  -(Lenght_Muon)/2,
     
    497480   
    498481    //Close Endcap - side
    499     FROG_Element_Primitive_CustomSurface* caloFWDEndCap2b = new FROG_Element_Primitive_CustomSurface(9400000+DetIdCountCaloFwd*10,
     482    Prim_CustomSurface* caloFWDEndCap2b = new Prim_CustomSurface(9400000+DetIdCountCaloFwd*10,
    500483     rayConeF*sin(phi)       , rayConeF*cos(phi)      ,  -(Lenght_CaloFwd)/2,
    501484     rayConeF*sin(phi+dphi)  , rayConeF*cos(phi+dphi) ,  -(Lenght_CaloFwd)/2,
     
    505488
    506489    //BARREL
    507     FROG_Element_Primitive_CustomSurface* caloFWDB2 = new FROG_Element_Primitive_CustomSurface(9400000+DetIdCountMuon*10,
     490    Prim_CustomSurface* caloFWDB2 = new Prim_CustomSurface(9400000+DetIdCountMuon*10,
    508491       ray*sin(phi)      ,ray*cos(phi)       , -Lenght_Muon*0.5,   
    509492       ray*sin(phi+dphi) ,ray*cos(phi+dphi)  , -Lenght_Muon*0.5,
     
    512495    CALOFWD->addDaughter(caloFWDB2);   DetIdCountCaloFwd++;
    513496  }
    514 
    515   FROG_Geometry* CustomGeom = new FROG_Geometry(prim);
    516   CustomGeom->Save("DelphesToFrog.geom");
     497  prim->save("DelphesToFrog.geom");
    517498
    518499  delete prim;
    519   delete CustomGeom;
    520500
    521501/* pointer hierarchy
     
    531511
    532512
    533   //FROG_ELEMENT::PrintTree(prim);
    534513  return;
    535514
Note: See TracChangeset for help on using the changeset viewer.