A problem of madanalysis5 when running the c++ program

Asked by zhangwenxing on 2017-08-07

Hi Benjamin,

When I run the c++ program I wrote, error shows up over and over again:

    * 5347/36042024 {�W��|���A~�x�6Ȩ�$���p�s
ERROR: the format of the input file is not supported. The file is skipped.

And when I comment most of my program, error shows up:

ERROR: ================================================================================
ERROR: Abnormal termination
ERROR: ================================================================================
ERROR:

And piece of my program is:
bool me_2017_053::Execute(SampleFormat& sample, const EventFormat& event)
{
 /* double myEventWeight;
  if(Configuration().IsNoEventWeight()) myEventWeight=1.;
  else if(event.mc()->weight()!=0.) myEventWeight=event.mc()->weight();
  else
  {
    WARNING << "Found one event with a zero weight. Skipping..." << endmsg;
    return false;
  }
  Manager()->InitializeForNewEvent(myEventWeight);

*/

  //the loop start
  if (event.rec()==0) {return true;}
       EventFormat myEvent;
       myEvent = event;

   vector<const RecJetFormat*> SignalJets,Signal40_Jets,Signal60_Jets,Signal80_Jets;
   vector<const RecLeptonFormat*>SignalMuons,SignalElectrons;

   vector<const RecJetFormat*> CandidateJets;
   vector<const RecLeptonFormat*>BaseMuons,BaseElectrons;

//the jets candidates
      for(unsigned int ij=0; ij<event.rec()->jets().size(); ij++){
        const RecJetFormat * CurrentJet = &(event.rec()->jets()[ij]);
        if ( CurrentJet->pt() > 20.0 && abs(CurrentJet->eta())<2.4)
        CandidateJets.push_back(CurrentJet);
        }

//NBtag Jets
      unsigned int NBtag = 0;
      for(unsigned int ij=0; ij<event.rec()->jets().size(); ij++){
        const RecJetFormat * CurrentJet = &(event.rec()->jets()[ij]);
        if( CurrentJet->pt() > 10.0 && abs(CurrentJet->eta())<2.4){
          if(CurrentJet->btag()){
          NBtag++;
          }
        }

        }

//Lepton trigger------------------------------Cutflow

        if(!Manager()->ApplyCut((event.rec()->electrons().size() > 0 || event.rec()->muons().size() > 0 ), "Lepton_trigger")) return true;

//Baseline lepton---------------------------------Cutflow

       for(unsigned int ie=0; ie<event.rec()->electrons().size(); ie++)
        {
        const RecLeptonFormat * CurrentElectron = &(event.rec()->electrons()[ie]);
        double pt = CurrentElectron->pt();
        double abseta = fabs(CurrentElectron->eta());
        if(pt > 10. && (abseta < 1.37 || (abseta > 1.52 && abseta < 2.47)) )
        BaseElectrons.push_back(CurrentElectron);
        }
       //ElectronLoose criterion
       BaseElectrons = PHYSICS->Isol->tracker->getRelIsolated(BaseElectrons,event.rec(),0.60,0.3,0.5);

       for(unsigned int im=0; im<event.rec()->muons().size(); im++)
        {
        const RecLeptonFormat * CurrentMuon = &(event.rec()->muons()[im]);
        double pt = CurrentMuon->pt();
        double abseta = fabs(CurrentMuon->eta());

        if(pt > 10. && abseta < 2.4)
        BaseMuons.push_back(CurrentMuon);
        }

        if(!Manager()->ApplyCut((BaseElectrons.size() > 0 || BaseMuons.size() > 0 ), "Lepton_baseline")) return true;

//Overlap removal with Non-btag jets
//Signal lepton

        //overlapRemoval
        overlapRemoval_jets_electrons(CandidateJets, BaseElectrons, 0.2);
        overlapRemoval_jets_muons(CandidateJets, BaseMuons, 0.4);
        overlapRemoval_y(BaseElectrons, BaseMuons, CandidateJets, 0.4);

       for(unsigned int ie=0; ie<BaseElectrons.size(); ie++)
        {
        const RecLeptonFormat * CurrentElectron = BaseElectrons[ie];
        double pt = CurrentElectron->pt();
        if(pt > 30.)
        SignalElectrons.push_back(CurrentElectron);
        }

       for(unsigned int im=0; im<BaseMuons.size(); im++)
        {
        const RecLeptonFormat * CurrentMuon = BaseMuons[im];
        double pt = CurrentMuon->pt();

        if(pt > 30.)
        SignalMuons.push_back(CurrentMuon);
        }

        //Tight electron criterion
        SignalElectrons = PHYSICS->Isol->tracker->getRelIsolated(SignalElectrons,event.rec(),0.06,0.2,1);
        SignalElectrons = PHYSICS->Isol->calorimeter->getRelIsolated(SignalElectrons,event.rec(),0.06,0.2,1);
        //Medium muons criterion
        SignalMuons = PHYSICS->Isol->tracker->getRelIsolated(SignalMuons,event.rec(),0.15,0.2,1);
        SignalMuons = PHYSICS->Isol->calorimeter->getRelIsolated(SignalElectrons,event.rec(),0.3,0.2,1);

//1 Signal_Lepton Cutflow
       if(!Manager()->ApplyCut((SignalElectrons.size() + SignalMuons.size() )> 1, "Lepton_signal")) return true;

//Signal Jets
      for(unsigned int ij=0; ij<CandidateJets.size(); ij++){
        const RecJetFormat * CurrentJet = (CandidateJets[ij]);
        if ( CurrentJet->pt() > 40.0)
        Signal40_Jets.push_back(CurrentJet);
        }
      for(unsigned int ij=0; ij<Signal40_Jets.size(); ij++){
        const RecJetFormat * CurrentJet = (Signal40_Jets[ij]);
        if ( CurrentJet->pt() > 60.0)
        Signal60_Jets.push_back(CurrentJet);
        }
      for(unsigned int ij=0; ij<Signal60_Jets.size(); ij++){
        const RecJetFormat * CurrentJet = (Signal60_Jets[ij]);
        if ( CurrentJet->pt() > 80.0)
        Signal80_Jets.push_back(CurrentJet);
        }

//Many kinds of cutflow
      if(!Manager()->ApplyCut(Signal40_Jets.size()>5, "40-5j")) return true;
      if(!Manager()->ApplyCut(Signal40_Jets.size()>8, "40-8j")) return true;
      if(!Manager()->ApplyCut(Signal40_Jets.size()>9, "40-9j")) return true;
      if(!Manager()->ApplyCut(Signal40_Jets.size()>10, "40-10j")) return true;
      if(!Manager()->ApplyCut(Signal40_Jets.size()>11, "40-11j")) return true;
      if(!Manager()->ApplyCut(Signal40_Jets.size()>12, "40-12j")) return true;

      if(!Manager()->ApplyCut(Signal60_Jets.size()>8, "60-8j")) return true;
      if(!Manager()->ApplyCut(Signal60_Jets.size()>9, "60-9j")) return true;
      if(!Manager()->ApplyCut(Signal60_Jets.size()>10, "60-10j")) return true;

      if(!Manager()->ApplyCut(Signal80_Jets.size()>8, "80-8j")) return true;
      if(!Manager()->ApplyCut(Signal80_Jets.size()>9, "80-9j")) return true;
      if(!Manager()->ApplyCut(Signal80_Jets.size()>10, "80-10j")) return true;

Could you tell me where is wrong?

Best~
Wenxing

Question information

Language:
English Edit question
Status:
Solved
For:
MadAnalysis 5 Edit question
Assignee:
No assignee Edit question
Last query:
2017-08-15
Last reply:
2017-08-31
Benjamin Fuks (fuks) said : #1

Hi,

This may be related to the input file that must contain the path to the event file, and cannot be the event file itself. Does it solve the problem?

Regards,

Benjamin

> On 7 Aug 2017, at 14:13 , zhangwenxing <email address hidden> wrote:
>
> New question #655417 on MadAnalysis 5:
> https://answers.launchpad.net/madanalysis5/+question/655417
>
> Hi Benjamin,
>
> When I run the c++ program I wrote, error shows up over and over again:
>
> * 5347/36042024 {�W��|���A~�x�6Ȩ�$���p�s
> ERROR: the format of the input file is not supported. The file is skipped.
>
> And when I comment most of my program, error shows up:
>
> ERROR: ================================================================================
> ERROR: Abnormal termination
> ERROR: ================================================================================
> ERROR:
>
>
> And piece of my program is:
> bool me_2017_053::Execute(SampleFormat& sample, const EventFormat& event)
> {
> /* double myEventWeight;
> if(Configuration().IsNoEventWeight()) myEventWeight=1.;
> else if(event.mc()->weight()!=0.) myEventWeight=event.mc()->weight();
> else
> {
> WARNING << "Found one event with a zero weight. Skipping..." << endmsg;
> return false;
> }
> Manager()->InitializeForNewEvent(myEventWeight);
>
> */
>
> //the loop start
> if (event.rec()==0) {return true;}
> EventFormat myEvent;
> myEvent = event;
>
> vector<const RecJetFormat*> SignalJets,Signal40_Jets,Signal60_Jets,Signal80_Jets;
> vector<const RecLeptonFormat*>SignalMuons,SignalElectrons;
>
> vector<const RecJetFormat*> CandidateJets;
> vector<const RecLeptonFormat*>BaseMuons,BaseElectrons;
>
> //the jets candidates
> for(unsigned int ij=0; ij<event.rec()->jets().size(); ij++){
> const RecJetFormat * CurrentJet = &(event.rec()->jets()[ij]);
> if ( CurrentJet->pt() > 20.0 && abs(CurrentJet->eta())<2.4)
> CandidateJets.push_back(CurrentJet);
> }
>
> //NBtag Jets
> unsigned int NBtag = 0;
> for(unsigned int ij=0; ij<event.rec()->jets().size(); ij++){
> const RecJetFormat * CurrentJet = &(event.rec()->jets()[ij]);
> if( CurrentJet->pt() > 10.0 && abs(CurrentJet->eta())<2.4){
> if(CurrentJet->btag()){
> NBtag++;
> }
> }
>
> }
>
>
>
> //Lepton trigger------------------------------Cutflow
>
> if(!Manager()->ApplyCut((event.rec()->electrons().size() > 0 || event.rec()->muons().size() > 0 ), "Lepton_trigger")) return true;
>
> //Baseline lepton---------------------------------Cutflow
>
>
>
> for(unsigned int ie=0; ie<event.rec()->electrons().size(); ie++)
> {
> const RecLeptonFormat * CurrentElectron = &(event.rec()->electrons()[ie]);
> double pt = CurrentElectron->pt();
> double abseta = fabs(CurrentElectron->eta());
> if(pt > 10. && (abseta < 1.37 || (abseta > 1.52 && abseta < 2.47)) )
> BaseElectrons.push_back(CurrentElectron);
> }
> //ElectronLoose criterion
> BaseElectrons = PHYSICS->Isol->tracker->getRelIsolated(BaseElectrons,event.rec(),0.60,0.3,0.5);
>
> for(unsigned int im=0; im<event.rec()->muons().size(); im++)
> {
> const RecLeptonFormat * CurrentMuon = &(event.rec()->muons()[im]);
> double pt = CurrentMuon->pt();
> double abseta = fabs(CurrentMuon->eta());
>
> if(pt > 10. && abseta < 2.4)
> BaseMuons.push_back(CurrentMuon);
> }
>
> if(!Manager()->ApplyCut((BaseElectrons.size() > 0 || BaseMuons.size() > 0 ), "Lepton_baseline")) return true;
>
> //Overlap removal with Non-btag jets
> //Signal lepton
>
> //overlapRemoval
> overlapRemoval_jets_electrons(CandidateJets, BaseElectrons, 0.2);
> overlapRemoval_jets_muons(CandidateJets, BaseMuons, 0.4);
> overlapRemoval_y(BaseElectrons, BaseMuons, CandidateJets, 0.4);
>
> for(unsigned int ie=0; ie<BaseElectrons.size(); ie++)
> {
> const RecLeptonFormat * CurrentElectron = BaseElectrons[ie];
> double pt = CurrentElectron->pt();
> if(pt > 30.)
> SignalElectrons.push_back(CurrentElectron);
> }
>
> for(unsigned int im=0; im<BaseMuons.size(); im++)
> {
> const RecLeptonFormat * CurrentMuon = BaseMuons[im];
> double pt = CurrentMuon->pt();
>
> if(pt > 30.)
> SignalMuons.push_back(CurrentMuon);
> }
>
> //Tight electron criterion
> SignalElectrons = PHYSICS->Isol->tracker->getRelIsolated(SignalElectrons,event.rec(),0.06,0.2,1);
> SignalElectrons = PHYSICS->Isol->calorimeter->getRelIsolated(SignalElectrons,event.rec(),0.06,0.2,1);
> //Medium muons criterion
> SignalMuons = PHYSICS->Isol->tracker->getRelIsolated(SignalMuons,event.rec(),0.15,0.2,1);
> SignalMuons = PHYSICS->Isol->calorimeter->getRelIsolated(SignalElectrons,event.rec(),0.3,0.2,1);
>
> //1 Signal_Lepton Cutflow
> if(!Manager()->ApplyCut((SignalElectrons.size() + SignalMuons.size() )> 1, "Lepton_signal")) return true;
>
>
>
> //Signal Jets
> for(unsigned int ij=0; ij<CandidateJets.size(); ij++){
> const RecJetFormat * CurrentJet = (CandidateJets[ij]);
> if ( CurrentJet->pt() > 40.0)
> Signal40_Jets.push_back(CurrentJet);
> }
> for(unsigned int ij=0; ij<Signal40_Jets.size(); ij++){
> const RecJetFormat * CurrentJet = (Signal40_Jets[ij]);
> if ( CurrentJet->pt() > 60.0)
> Signal60_Jets.push_back(CurrentJet);
> }
> for(unsigned int ij=0; ij<Signal60_Jets.size(); ij++){
> const RecJetFormat * CurrentJet = (Signal60_Jets[ij]);
> if ( CurrentJet->pt() > 80.0)
> Signal80_Jets.push_back(CurrentJet);
> }
>
> //Many kinds of cutflow
> if(!Manager()->ApplyCut(Signal40_Jets.size()>5, "40-5j")) return true;
> if(!Manager()->ApplyCut(Signal40_Jets.size()>8, "40-8j")) return true;
> if(!Manager()->ApplyCut(Signal40_Jets.size()>9, "40-9j")) return true;
> if(!Manager()->ApplyCut(Signal40_Jets.size()>10, "40-10j")) return true;
> if(!Manager()->ApplyCut(Signal40_Jets.size()>11, "40-11j")) return true;
> if(!Manager()->ApplyCut(Signal40_Jets.size()>12, "40-12j")) return true;
>
> if(!Manager()->ApplyCut(Signal60_Jets.size()>8, "60-8j")) return true;
> if(!Manager()->ApplyCut(Signal60_Jets.size()>9, "60-9j")) return true;
> if(!Manager()->ApplyCut(Signal60_Jets.size()>10, "60-10j")) return true;
>
> if(!Manager()->ApplyCut(Signal80_Jets.size()>8, "80-8j")) return true;
> if(!Manager()->ApplyCut(Signal80_Jets.size()>9, "80-9j")) return true;
> if(!Manager()->ApplyCut(Signal80_Jets.size()>10, "80-10j")) return true;
>
>
> Could you tell me where is wrong?
>
> Best~
> Wenxing
>
>
>
>
> --
> You received this question notification because you are an answer
> contact for MadAnalysis 5.

zhangwenxing (wenxing) said : #2

Yes, that's the problem!
Thank you very much!

> -----原始邮件-----
> 发件人: "Benjamin Fuks" <email address hidden>
> 发送时间: 2017-08-14 18:33:40 (星期一)
> 收件人: <email address hidden>
> 抄送:
> 主题: Re: [Question #655417]: A problem of madanalysis5 when running the c++ program
>
> Your question #655417 on MadAnalysis 5 changed:
> https://answers.launchpad.net/madanalysis5/+question/655417
>
> Status: Open => Answered
>
> Benjamin Fuks proposed the following answer:
> Hi,
>
> This may be related to the input file that must contain the path to the
> event file, and cannot be the event file itself. Does it solve the
> problem?
>
> Regards,
>
> Benjamin
>
>
> > On 7 Aug 2017, at 14:13 , zhangwenxing <email address hidden> wrote:
> >
> > New question #655417 on MadAnalysis 5:
> > https://answers.launchpad.net/madanalysis5/+question/655417
> >
> > Hi Benjamin,
> >
> > When I run the c++ program I wrote, error shows up over and over again:
> >
> > * 5347/36042024 {�W��|���A~�x�6Ȩ�$���p�s
> > ERROR: the format of the input file is not supported. The file is skipped.
> >
> > And when I comment most of my program, error shows up:
> >
> > ERROR: ================================================================================
> > ERROR: Abnormal termination
> > ERROR: ================================================================================
> > ERROR:
> >
> >
> > And piece of my program is:
> > bool me_2017_053::Execute(SampleFormat& sample, const EventFormat& event)
> > {
> > /* double myEventWeight;
> > if(Configuration().IsNoEventWeight()) myEventWeight=1.;
> > else if(event.mc()->weight()!=0.) myEventWeight=event.mc()->weight();
> > else
> > {
> > WARNING << "Found one event with a zero weight. Skipping..." << endmsg;
> > return false;
> > }
> > Manager()->InitializeForNewEvent(myEventWeight);
> >
> > */
> >
> > //the loop start
> > if (event.rec()==0) {return true;}
> > EventFormat myEvent;
> > myEvent = event;
> >
> > vector<const RecJetFormat*> SignalJets,Signal40_Jets,Signal60_Jets,Signal80_Jets;
> > vector<const RecLeptonFormat*>SignalMuons,SignalElectrons;
> >
> > vector<const RecJetFormat*> CandidateJets;
> > vector<const RecLeptonFormat*>BaseMuons,BaseElectrons;
> >
> > //the jets candidates
> > for(unsigned int ij=0; ij<event.rec()->jets().size(); ij++){
> > const RecJetFormat * CurrentJet = &(event.rec()->jets()[ij]);
> > if ( CurrentJet->pt() > 20.0 && abs(CurrentJet->eta())<2.4)
> > CandidateJets.push_back(CurrentJet);
> > }
> >
> > //NBtag Jets
> > unsigned int NBtag = 0;
> > for(unsigned int ij=0; ij<event.rec()->jets().size(); ij++){
> > const RecJetFormat * CurrentJet = &(event.rec()->jets()[ij]);
> > if( CurrentJet->pt() > 10.0 && abs(CurrentJet->eta())<2.4){
> > if(CurrentJet->btag()){
> > NBtag++;
> > }
> > }
> >
> > }
> >
> >
> >
> > //Lepton trigger------------------------------Cutflow
> >
> > if(!Manager()->ApplyCut((event.rec()->electrons().size() > 0 || event.rec()->muons().size() > 0 ), "Lepton_trigger")) return true;
> >
> > //Baseline lepton---------------------------------Cutflow
> >
> >
> >
> > for(unsigned int ie=0; ie<event.rec()->electrons().size(); ie++)
> > {
> > const RecLeptonFormat * CurrentElectron = &(event.rec()->electrons()[ie]);
> > double pt = CurrentElectron->pt();
> > double abseta = fabs(CurrentElectron->eta());
> > if(pt > 10. && (abseta < 1.37 || (abseta > 1.52 && abseta < 2.47)) )
> > BaseElectrons.push_back(CurrentElectron);
> > }
> > //ElectronLoose criterion
> > BaseElectrons = PHYSICS->Isol->tracker->getRelIsolated(BaseElectrons,event.rec(),0.60,0.3,0.5);
> >
> > for(unsigned int im=0; im<event.rec()->muons().size(); im++)
> > {
> > const RecLeptonFormat * CurrentMuon = &(event.rec()->muons()[im]);
> > double pt = CurrentMuon->pt();
> > double abseta = fabs(CurrentMuon->eta());
> >
> > if(pt > 10. && abseta < 2.4)
> > BaseMuons.push_back(CurrentMuon);
> > }
> >
> > if(!Manager()->ApplyCut((BaseElectrons.size() > 0 || BaseMuons.size() > 0 ), "Lepton_baseline")) return true;
> >
> > //Overlap removal with Non-btag jets
> > //Signal lepton
> >
> > //overlapRemoval
> > overlapRemoval_jets_electrons(CandidateJets, BaseElectrons, 0.2);
> > overlapRemoval_jets_muons(CandidateJets, BaseMuons, 0.4);
> > overlapRemoval_y(BaseElectrons, BaseMuons, CandidateJets, 0.4);
> >
> > for(unsigned int ie=0; ie<BaseElectrons.size(); ie++)
> > {
> > const RecLeptonFormat * CurrentElectron = BaseElectrons[ie];
> > double pt = CurrentElectron->pt();
> > if(pt > 30.)
> > SignalElectrons.push_back(CurrentElectron);
> > }
> >
> > for(unsigned int im=0; im<BaseMuons.size(); im++)
> > {
> > const RecLeptonFormat * CurrentMuon = BaseMuons[im];
> > double pt = CurrentMuon->pt();
> >
> > if(pt > 30.)
> > SignalMuons.push_back(CurrentMuon);
> > }
> >
> > //Tight electron criterion
> > SignalElectrons = PHYSICS->Isol->tracker->getRelIsolated(SignalElectrons,event.rec(),0.06,0.2,1);
> > SignalElectrons = PHYSICS->Isol->calorimeter->getRelIsolated(SignalElectrons,event.rec(),0.06,0.2,1);
> > //Medium muons criterion
> > SignalMuons = PHYSICS->Isol->tracker->getRelIsolated(SignalMuons,event.rec(),0.15,0.2,1);
> > SignalMuons = PHYSICS->Isol->calorimeter->getRelIsolated(SignalElectrons,event.rec(),0.3,0.2,1);
> >
> > //1 Signal_Lepton Cutflow
> > if(!Manager()->ApplyCut((SignalElectrons.size() + SignalMuons.size() )> 1, "Lepton_signal")) return true;
> >
> >
> >
> > //Signal Jets
> > for(unsigned int ij=0; ij<CandidateJets.size(); ij++){
> > const RecJetFormat * CurrentJet = (CandidateJets[ij]);
> > if ( CurrentJet->pt() > 40.0)
> > Signal40_Jets.push_back(CurrentJet);
> > }
> > for(unsigned int ij=0; ij<Signal40_Jets.size(); ij++){
> > const RecJetFormat * CurrentJet = (Signal40_Jets[ij]);
> > if ( CurrentJet->pt() > 60.0)
> > Signal60_Jets.push_back(CurrentJet);
> > }
> > for(unsigned int ij=0; ij<Signal60_Jets.size(); ij++){
> > const RecJetFormat * CurrentJet = (Signal60_Jets[ij]);
> > if ( CurrentJet->pt() > 80.0)
> > Signal80_Jets.push_back(CurrentJet);
> > }
> >
> > //Many kinds of cutflow
> > if(!Manager()->ApplyCut(Signal40_Jets.size()>5, "40-5j")) return true;
> > if(!Manager()->ApplyCut(Signal40_Jets.size()>8, "40-8j")) return true;
> > if(!Manager()->ApplyCut(Signal40_Jets.size()>9, "40-9j")) return true;
> > if(!Manager()->ApplyCut(Signal40_Jets.size()>10, "40-10j")) return true;
> > if(!Manager()->ApplyCut(Signal40_Jets.size()>11, "40-11j")) return true;
> > if(!Manager()->ApplyCut(Signal40_Jets.size()>12, "40-12j")) return true;
> >
> > if(!Manager()->ApplyCut(Signal60_Jets.size()>8, "60-8j")) return true;
> > if(!Manager()->ApplyCut(Signal60_Jets.size()>9, "60-9j")) return true;
> > if(!Manager()->ApplyCut(Signal60_Jets.size()>10, "60-10j")) return true;
> >
> > if(!Manager()->ApplyCut(Signal80_Jets.size()>8, "80-8j")) return true;
> > if(!Manager()->ApplyCut(Signal80_Jets.size()>9, "80-9j")) return true;
> > if(!Manager()->ApplyCut(Signal80_Jets.size()>10, "80-10j")) return true;
> >
> >
> > Could you tell me where is wrong?
> >
> > Best~
> > Wenxing
> >
> >
> >
> >
> > --
> > You received this question notification because you are an answer
> > contact for MadAnalysis 5.
>
> --
> If this answers your question, please go to the following page to let us
> know that it is solved:
> https://answers.launchpad.net/madanalysis5/+question/655417/+confirm?answer_id=0
>
> If you still need help, you can reply to this email or go to the
> following page to enter your feedback:
> https://answers.launchpad.net/madanalysis5/+question/655417
>
> You received this question notification because you asked the question.

Launchpad Janitor (janitor) said : #3

This question was expired because it remained in the 'Open' state without activity for the last 15 days.

Benjamin Fuks (fuks) said : #4

The problem was solved.